When one hears the term coding, what generally springs to mind?

Perhaps visions of dense, incomprehensible lines of text scrolling on a screen? Intricate commands, symbols, and other characters, as unfathomable as ancient hieroglyphics? It's all too easy to perceive coding as a formidable fortress, seemingly insurmountable and strictly reserved for a select few.

data/admin/2023/6/confused-man-code-symbols.gif

But is the mountain as steep as it appears from the foothills?

The Art of Digital Conversation: What Does It Mean to Learn to Code?

Just as your ascent up the mountain begins with understanding the terrain, your journey into coding starts by comprehending its very nature.

In its simplest form, coding is a language.

However, it's not a language in the conventional sense like English, Spanish or Mandarin. It's a language that communicates instructions to machines, and just like any language, it can be learned.

data/admin/2023/6/robot-language.gif

When we think about learning a new spoken language, the initial stages can seem daunting. It's not just about learning words and sentences but understanding context, syntax, and grammar. There's the apprehension of making mistakes, of not being understood, of failing to comprehend. But we persist because we understand the value of communication, the doors it can open. The process of learning to code is no different.

While coding may seem to comprise complex algorithms and intricate lines of symbols, at its core, it's about communication.

As a coder, you're having a conversation with a computer, telling it exactly what you want it to do. It might take time to understand the syntax, to learn the grammar, and to expand your vocabulary, but once you start to grasp these, you'll realize that coding isn't the insurmountable peak it initially appears to be.

There are abundant resources and a supportive community to help turn your journey from a solo climb into a guided trek.

From Dungeons to Diversity: The Changing Face of Coding

For many people, coders represent the geek archetype, always eager and willing to jump at mathematical problems.

This stereotype did not arise from nothing. In the earlier day's of computing history, coding was a more challenging task, its origins deeply rooted in mathematics and complex algorithms.

Popular media has only reinforced this stereotype, imprinting this idea of coders as introverted creatures, often found lurking in their messy and disorganized lairs, coding by day, slaying demons on Dungeons and Dragons by night.

via GIPHY

Not that there's anything wrong with that, I'm quite partial to the occasional late night coding session and slaying of demon myself!

The modern age of coding is much more inclusive and accessible. It no longer belongs exclusively to the realm of math savants. With the wealth of resources available today, coding has transformed into a skill that anyone with curiosity and determination can learn.

The Influence of Educational Resources

The rise of the internet has led to an explosion of learning resources. Countless online platforms offer coding courses for beginners. Blogs, YouTube tutorials, coding bootcamps, and even interactive game-based apps now provide accessible, often free, ways to learn coding at your own pace.

These courses cover a multitude of programming languages and topics, thus catering for a wide array of interests and skill levels, from absolute beginners looking to dip their toes into the world of programming to seasoned developers aiming to broaden their skills or keep up-to-date with the latest trends

Coding has stepped down from the ivory tower and entered living rooms, classrooms, and even coffee shops around the world. Never has it been more accessible!

The Role of Community in Learning to Code

The act of learning to code is not a solitary endeavor. Communities, both online and offline, can greatly impact the learning experience.

Participating in coding communities allows learners to share experiences, seek help, and collaborate on projects.

According to a study from North Carolina State University, peer learning plays a significant role in learning to code, as it encourages active learning and enhances understanding. (2)

Communities can be found online on platform as Stack Overflow, GitHub, Reddit. There are also sites such as Meetup, and even Facebook, which play host to countless programming groups in running events in your local area.

A good community provides camaraderie and emotional support, which is crucial during the challenging journey of learning to code. They foster a sense of belonging and camaraderie, making the learning process less daunting and more enjoyable.

Increased Abstraction

One significant reason coding has become more approachable is the evolution of programming languages towards increased abstraction.

In programming, abstraction is the process of simplifying complex systems, reducing information and detail to focus on higher-level concepts. The progression from low-level languages such as Assembly, which are closer to machine language, to high-level languages like Python and JavaScript, which resemble natural language more closely, embodies this notion of increased abstraction.

This trend towards abstraction has significantly impacted the learning experience for novice programmers. High-level languages abstract away complex, low-level tasks like memory management, which could be daunting for beginners.

Research indicates that high-level, abstract programming languages such as Python and JavaScript have helped to democratize coding by making it more accessible to beginners (3).

In other words, coding used to be a lot like building a grand mansion brick by brick, with nothing but your bare hands. Now, thanks to higher-level languages and powerful development tools, it's more akin to assembling it using pre-made sections - still challenging, but far more manageable.

But Wait.. Is it really that easy?

If coding is indeed not as difficult as it once was, it prompts an intriguing question: why isn't everyone doing it?

Let me be clear: the purpose of this post isn't to oversimplify coding or claim that it's the easiest skill to acquire. Like any discipline, it requires substantial effort, dedication, and a willingness to learn.

And although I do believe that coding has become less difficult and more accessible, there are still a number of factors that will impact on the ease in which you pick it up.

Coding and Cognitive Skills

Learning to code is often compared to learning a new language, not least in this very article.

But while the analogy holds to some extent, it's important to note that programming is not solely about understanding syntax or vocabulary; it also heavily relies on problem-solving skills and other cognitive skills.

For example, studies have shown that learners with a lot of spatial awareness can find it easier to learn to code. (4)

Spatial awareness is the ability to understand and interact with the environment around you. Good spatial awareness enables you to perceive and comprehend structures, patterns, and the relationships between different components in a system.

Programming involves creating and manipulating complex structures such as algorithms, data structures, and software architectures, and the ability to visualize these structures, to understand how they interrelate and how changing one part might affect the whole, is a crucial skill for effective programming.

Additionally, when faced with a coding problem, you must plan your approach, consider different pathways, foresee potential challenges, and understand the implications of different solutions. This process is akin to navigating a physical environment, requiring the same kind of spatial thinking.

Research has shown a positive correlation between spatial skills and success in STEM (Science, Technology, Engineering, and Mathematics) fields, including computer science. For instance, a study by Sorby (2009) demonstrated that students who underwent spatial training showed improved performance in engineering graphics and calculus courses. (4)

Unsurprisingly, students with existing experience in another STEM field are also more likely to possess aptitude at learning to coding. A study from the University of Washington found that students with strong mathematical backgrounds performed better in introductory computer science courses [1].

While having strong spatial skills can undoubtedly be an advantage in learning to code, it's important to note that these skills can be developed and improved with practice. Just by learning to code, you will undoubtedly improve. Activities such as playing chess, solving puzzles, or even playing certain video games like chess can also help enhance your spatial reasoning abilities.

The Impact of Mindset on Learning to Code

Beyond cognitive skills and prior experience, the learner's mindset can play a crucial role in the learning process. According to Stanford psychologist Carol Dweck, individuals with a "growth mindset" – those who believe that they can improve their abilities with effort and practice – are more likely to succeed in learning new skills, including coding, than those with a "fixed mindset" – those who believe that abilities are innate and unchangeable.

This mindset can greatly influence how individuals approach the challenges and setbacks that are often part and parcel of learning to code. For instance, when faced with a difficult problem, individuals with a growth mindset may be more likely to persevere, seek help, and try different approaches until they find a solution. On the other hand, those with a fixed mindset may be more likely to give up or conclude that they are "just not cut out for coding."

Not all Coding Education is Created Equal.

This democratization of learning is undoubtedly a positive trend, but it also brings with it a new set of challenges. The sheer volume of resources can be overwhelming to beginners, potentially complicating the learning process.

The breadth and depth of learning materials, tools, and platforms currently available to budding coders are immense, creating an environment often described as "tutorial hell." This is the overwhelming state of having too many guides, tutorials, and crash courses at one's disposal, creating confusion and indecisiveness. While variety is often beneficial, the sheer volume of resources can paralyze learners, leaving them struggling to choose the most appropriate path to follow. This situation mirrors what psychologist Barry Schwartz famously called "The Paradox of Choice," where an abundance of options leads to anxiety and dissatisfaction. (5)

Moreover, it's important to acknowledge that not all coding education is created equal. The effectiveness of learning resources can significantly differ depending on several factors. These include, but are not limited to, the teaching methodology, course structure, level of interactivity, clarity of explanation, and the extent of support provided to learners.

For instance, a coding tutorial that uses a hands-on approach, explaining concepts by guiding learners through real-world projects, might be more effective for pragmatic learners. On the other hand, a lecture-based course might work better for those who prefer a theoretical understanding before diving into practical application. Personal learning style, the subject matter's complexity, and the learner's prior knowledge or experience all play a part in this equation.

Another challenge that complicates the learning process is the potential to misconstrue personal struggle as failure, instead of attributing difficulties to the resource's quality or teaching style. The coding journey is filled with hurdles; it's a natural part of the process. However, the blame should not automatically fall on the learner when roadblocks appear. The course's delivery method, the clarity of the content, and the availability of supplemental materials all contribute to the overall learning experience and can significantly impact a learner's success or struggle.

The democratization and accessibility of coding education have indeed revolutionized the way we acquire this coveted skill. However, it is essential for learners to approach this abundant landscape with a discerning eye, recognizing the crucial role of quality, teaching style, and individual learning preferences in the coding education journey. The journey through tutorial hell can be navigated with careful consideration, self-awareness, and a bit of patience, leading to a fruitful and rewarding coding education experience.

My Own Journey from Defeat to Triumph

The year is 2016, and among the dimly lit study tables, a lone figure hunches over a sullen, flickering computer screen, his brow furrowed in relentless determination. This figure was none other than I, an intrepid wanderer lost in the labyrinth of digital dialect, wrestling to make some sense of the cryptic language of code.

As a working professional during the day, my after-work hours, regardless of the fatigue that shadowed them, were reserved for this intriguing and challenging new pursuit. I was studying my first Computer Science module for my part time Masters degree.

Balancing a full-time job with an intensive learning routine often tested my limits. Yet, I persisted, my determination fueled by the knowledge that every line of code, every problem solved, was a step closer to my goal.

Joe Di Trolio sat in a library studying

But, then came failure in its most stinging form, I didn't pass my first programming module.

Such a setback proved a significant blow to my confidence. In the days following this defeat, the thought of giving up lurked around the corners of my mind. The allure of a programming-free life, less stressful and more predictable, was indeed tempting.

But in the quiet reflection that followed, I understood that this setback was not a sign to quit, but an opportunity to learn, adapt and improve. The road to mastering programming, or any skill for that matter, is seldom straight and smooth. It's strewn with stumbling blocks, detours and sometimes, roadblocks. It demands patience, perseverance and an unwavering faith in one's abilities.

Despite my initial failure, I chose to stay the course and retake the module. I spent more hours debugging, understanding every error message and refining my code. The hours spent in the library increased, and so did my understanding of the languages I was learning. With every bug fixed and every program successfully executed, my confidence gradually built up.

To any aspiring coder, I share this personal journey not as a tale of struggle and defeat, but as a testament to the power of perseverance. The process of learning to code is challenging, but it is also immensely rewarding. Each error message is a lesson, each stumbling block a stepping stone, and each defeat a launching pad for success. In your journey to master coding, embrace the challenges, learn from your failures, and keep going, for the path of learning is as rewarding as the destination.

Final thoughts

Coding is a reasonably rare skill, and programmers are always in demand, so if you can learn to code then you have a really good chance of changing careers.

Should you possess the determination to learn and master this valuable craft, you're effectively paving the way for a potential career shift with promising opportunities.

As you embark on this journey, consider the unique traits that already define you. Perhaps you're someone whose dedication knows no bounds, or you possess an unyielding will that persistently chases solutions, or maybe it's your innate stubbornness that refuses to accept defeat. These intrinsic characteristics are more than just personality traits, they are the building blocks that can shape you into a proficient programmer.

In the realm of coding, these traits transmute into invaluable assets, propelling you through challenges and guiding you towards solutions. Harness them, and you'll find that the journey of becoming a programmer not only changes your career trajectory but also amplifies your personal growth."

You can check out this article I wrote on the surprising soft-skills in tech you may have already mastered.

References

(1) Caughman, A. M., & Weigel, E. G. (2022). Biology Students’ Math and Computer Science Task Values Are Closely Linked. CBE Life Sciences Education, 21(3). https://doi.org/10.1187/cbe.21-07-0180

(2) Williams, Laurie. (2007). Lessons learned from seven years of pair programming at North Carolina State University. SIGCSE Bulletin. 39. 79-83. 10.1145/1345375.1345420. https://collaboration.csc.ncsu.edu/laurie/Papers/CSEET.PDF

(3) Caitlin Kelleher and Randy Pausch. 2005. Lowering the barriers to programming: A taxonomy of programming environments and languages for novice programmers. ACM Comput. Surv. 37, 2 (June 2005), 83–137. https://doi.org/10.1145/1089733.1089734

(4) Sorby, S. A. (2009). Educational Research in Developing 3‐D Spatial Skills for Engineering Students. International Journal of Science Education, 31(3), 459-480.

(5) MLA. Schwartz, Barry (2004)-. The Paradox of Choice : Why More Is Less. New York :Ecco