By: Professor Fernado Posser
When I first started learning programming, the study options were limited. We could buy printed textbooks, purchase CDs with courses sold at newsstands, or attend in-person classes. Over the years, especially since 2018, the scenario has changed drastically.
There has been a rise in the accessibility of online content about programming. If you knew English, all you needed was a good internet connection to access YouTube and Stackoverflow. Even content in Portuguese began to gain more and more space, which also paved the way for structured online courses on learning platforms.
Today, anyone who has the will and the time can learn to program. It is very easy to find the complete material to go from zero to a basic level, but the initial experience is the most important. I call this experience “letting go”. Music teachers created this term to summarize the process of every beginner in music exploring the instrument and feeling more comfortable with it. It is no different in programming.
The process is simple: The instructor explains the theory; He writes a code and shows it working; Meanwhile, the student copies it and executes it along with him. This way, the student gets used to writing words and structures that he had never seen before, and he “gets to grips” with the code.
The Problem with Just Copying Code
So far, everything seems in order, however, something really started to change in 2018 with the popularization of online courses: students spent the entire courses/videos copying code most of the time instead of writing their own code.
Over time, this became such a present and visible problem that the market even created a term for it fullsterco, which is a pun for dev fullstack is the professional who (generally) develops in the frontend and backend. The fullstack “does sh… in the frontend and backend”. But how did this happen?
The answer is very simple. By copying code, people have the impression that they are learning how to develop their own solutions to the proposed problem, but they are developing the ability to follow a lesson while copying code.
But didn’t I say before that “letting go” was a good thing? Yes, but as the old saying goes: the difference between medicine and poison is the dose. While you’re taking your first steps, copying is important to get used to writing code.
If someone who is learning to program comes across errors and complicated stack traces, they may give up. At this stage, “letting go” helps a lot. But, as soon as they get used to writing code, it is important to start writing their own code and face problems such as: logic and syntax errors, creating structures that are more complicated than they should be, among many other things. It is like falling and learning to get up.
By simply copying, the brain is not stimulated to think in the abstract and logical terms necessary to solve a problem. By not doing so, the student does not face the challenges arising from the teaching process.
The result will be aggressive when the student tries to enter the job market and does not have a good one. It is like a cyclist who trains only using training wheels on his bike and tries to face a 50-kilometer cycling championship without training wheels, with wind, sun and temperatures at 40ºC.
Practical Solutions to Stimulate Computational Thinking
To solve this, the student must first have a strong foundation in creating simple algorithms. He will need to abstract, decompose and recognize patterns .
Abstraction is the way the student understands the problem and the resources (logic) that will be needed to solve it. Decomposition is the process of dividing this big problem into smaller problems and solving them little by little to reach a result. Finally, pattern recognition helps the student to find patterns not only in the similarity of this problem with other similar things that he has already encountered, but also to find patterns in the problem itself to reduce the complexity of the code and make everything simpler.
These 3 skills are basic elements that every technology/programming student and professional needs to develop before venturing into more complex problems and using more abstract tools such as libraries and frameworks.
New Generation and the Resistance to Writing Code from Scratch
This new generation, no matter how much you encourage them to create their own codes and use study methods that make them write from scratch, they don’t do it.
These new generations are becoming increasingly more immediate. It is not uncommon to see students these days starting their learning in the area with videos about React, Angular, HTML and CSS, VUE JS, Next and other frontend libraries and frameworks. And what is the consequence of this?! Young people with no foundation at all, more libraries that implement and abstract concepts of programming logic, algorithms, data structures, object orientation and design patterns and the creation of complex interfaces.
What result will this bring? The endless cycle of copying and pasting code. And unfortunately, this has not been solved even in face-to-face courses, as students use online courses and YouTube videos as support material and continue this copying and pasting behavior.
And if the problem is behavior, how do you deal with it?
Using a Platform to Encourage Code Writing
Between 2014 and 2023, Enter Tech Edu, a technology startup, found a way to impact tens of thousands of students by using gamification through hackathons. As soon as students got their hands dirty with the code, the first hackathons were held with 3 sets of problems: easy, medium and difficult, all considering the level of the students in order to maintain a workflow.
At the end of each hackathon, a group conversation was held to analyze the challenges encountered while we solved some of them together with the students, demonstrating the importance of abstraction, decomposition and pattern recognition skills.
These activities showed how important basic knowledge is and encouraged them to develop basic knowledge before taking big steps.
But how do you do a hackathon? There are several ways, but after much searching and research, the best one we found was on the beecrowd platform.
At beecrowd we find problems of all kinds, from traversing strings to complex calculations, including graphs, trees and data structures. In addition, it implements an environment where we can create and configure hackathons that our students can access and monitor in real time, in addition to evaluating their results.
This gave us a great deal of control over the main tool we used during training to develop in students the most essential skills for learning programming logic and computational thinking.
In addition to the initial hackathon, over time they face more and more hackathons that increase the level of challenge, however, now better prepared for this activity since the essential knowledge to solve any problem has been developed.
Benefits for Students
Using this approach that encourages understanding of basic and essential knowledge, the student begins to develop a series of skills that make him better prepared to face the challenges of the job market.
Firstly, by participating in hackathons and solving problems on their own and in groups, they improve their independence and teamwork skills. This is essential for them to have more confidence when facing programming tasks and to increase their resilience in the face of difficulties.
Additionally, practicing problem-solving and building your own algorithms helps you internalize concepts like abstraction, decomposition , and pattern recognition . These skills not only make you a more efficient programmer, but they also form a solid foundation for you to learn other languages and technologies more easily.
By being forced to think about the details of a problem and find a solution, he develops a deeper understanding of the concepts, which goes far beyond simple memorization or the practice of copying and pasting codes.
This method also contributes to the development of a continuous learning mindset, which is essential in the technology field, where new things are constantly emerging.
But the most important thing is certainly the concretization of basic knowledge, because with it the student can navigate between technologies and frameworks more naturally and in their own time.
Course Benefits
Dropout has always been the biggest fear of technology course teachers and coordinators.
From my experience, I can say that dropping out, most of the time, is linked to three things: Economy; Difficulty; Knowledge about the chosen course.
About the economy, after all, no one will interfere in the student’s family finances. Nowadays, knowledge about the course is not such a serious issue, after all, people are more immersed in technology and know that liking social networks and surfing the internet is not a reason to take a programming course. But the difficulties that the student faces are completely controllable.
The answer is not to make the content easier. By following this path, we will train professionals with low qualifications. Controlling the stimuli and methodologies applied throughout the course is more effective and can directly address the reasons for the difficulty that the student has in solving the challenges that are imposed on them.
With this methodology that we applied, the dropout and frustration rates among students decreased, as the challenges proposed are appropriate to their level of knowledge, and the use of gamification with hackathons makes learning more dynamic and motivating. Students remain engaged and have a more linear development, which increases retention and course completion rates.
The course began to provide students with a more solid foundation and a broader view of programming. In addition, with the practice of constant assessment during hackathons, the course was able to monitor students’ progress more effectively, identifying specific difficulties and adjusting the content as necessary.
This approach allowed for constant evolution not only of the student, but also of the course itself.
If there’s one thing, I’ve learned in over a decade of programming and from the thousands of students I’ve had in technical and undergraduate education, it’s that learning to program isn’t just about writing code. Programming means thinking logically and at the same time facing problems creatively.
Copying and pasting code plays a role in the learning process. Without this step, our students will not “get their hands dirty” and become familiar with the fundamentals of programming. However, prolonging this methodology will not yield good results, as students will not be able to face real challenges and develop the essential skills to compete in the job market.
I guarantee that using hackathons and gamification with a new audience in the programming field will prove very effective in combating copy-and-paste behavior. The skills this develops will, over time, benefit not only the student, but also the course.
Just as we did at Enter Tech Edu, you can count on the beecrowd platform to help you with this task. After all, training competent programmers means training people capable of thinking, creating and transforming – and this is the true value of technology education.
Professor Fernando Posser entered the technology field in 2008. He became a master’s in applied computing, teaching since 2015. He currently has his own game development studio (POPI Games Studio) and is a professor at Atitus Educação.