My Python Journey: A Beginner's Tale of Frustration and Persistence (or lack of it)
Looking to learn programming? Do yourself a service and do not start with Python.
When I decided to learn a new skill, programming stood out to me as an exciting and practical choice. Everywhere I looked, Python was touted as the ideal starting point—simple, intuitive, and versatile. I imagined myself writing elegant code and bringing my ideas to life with minimal fuss. Little did I know, my journey would be fraught with frustration, disillusionment, and countless hours lost in the labyrinth of dependencies.
The First Steps
I began my journey the way any newbie might: by installing Python. Armed with articles and blog posts praising its simplicity, I felt confident. My initial goal was straightforward—I wanted to create a basic application that could index a number of RSS feeds. I found a beginner-friendly guide on using Python for this purpose and, with the help of AI, managed to piece together a simple RSS feed parser.
I remember the thrill of writing my first lines of code. It was like magic seeing my ideas transform into something tangible. This initial success was short-lived, however. When I eagerly pressed "Run," the application failed. The magic evaporated, and reality set in.
The Descent into Dependency Hell
My application didn’t run. Instead, it greeted me with a slew of errors. What began as a promising venture quickly turned into a nightmare. The errors were cryptic and the solutions, elusive. My experience with Python suddenly felt like trying to play football with a ball that refused to be kicked unless the grass was a specific shade of green, watered with an exact type of water, sourced from the correct hemisphere.
The Obstacle Course
Each attempt to fix one problem only unearthed another. I found myself stuck in a vicious cycle:
Library Dependencies: Some libraries were missing. Installing them led to version conflicts.
Code Dependencies: Even when I managed to install the necessary libraries, they often didn’t work well together.
Python Versions: The version of Python I was using seemed to conflict with the versions required by various libraries. Upgrading one library required downgrading another, and sometimes, the entire Python version needed to be changed.
I spent a mere 15 minutes writing the initial application, yet hours passed as I grappled with these issues. What was supposed to be a simple introduction to coding became an intricate dance of troubleshooting and debugging.
Why Python Should Not Be Recommended for Beginners
After my harrowing experience, I firmly believe that Python should not be recommended as a beginner's programming language. The complexity of managing dependencies can quickly overwhelm and discourage new coders. Instead of fostering a love for programming, it creates a barrier that many will find insurmountable.
Dependency Hell: A Major Hurdle
The endless stream of errors was disheartening. I had expected challenges, but not this. The simplicity promised by Python seemed like a cruel joke. For a beginner, the reality of coding was overwhelming. The tutorials and guides that had seemed so accessible now felt inadequate and misleading.
Imagine trying to learn how to kick a football. You buy the ball, but as soon as you try to kick it, it tells you that you can’t because the grass isn't green enough. You water the grass, but now the ball complains about the type of water used. Every solution reveals a new problem: the water's source, the grass's length, the ball's material, and so on. This is what learning Python felt like—an endless series of hoops to jump through, each one more arbitrary than the last.
A Better Experience with Node.js
In stark contrast, I attempted the same project in Node.js and achieved my goal within 30 minutes. This is what the experience should be like for a new programmer—straightforward and encouraging. Node.js, despite its own complexities, provided a smoother and more intuitive path for a beginner. The difference was night and day.
With Node.js, I didn't face the same degree of dependency hell. Libraries worked well together, installation was simpler, and version conflicts were minimal. This allowed me to focus on learning and building, rather than troubleshooting and debugging.
The Importance of Simplicity in Learning
Programming languages recommended to beginners should be truly easy to use. They should minimise the need to manage dependencies or deal with intricate setups. For example, languages like Scratch, while not as powerful, offer a truly beginner-friendly experience. They allow new programmers to focus on learning core concepts and logic without getting bogged down in technical minutiae.
Python, despite its many strengths, fails in this regard. The expectation of simplicity is shattered by the reality of dependency management. Beginners should not have to navigate the intricacies of library versions and compatibility issues. They should be able to write code and see it run without dreading dependency hell.
A Broader Perspective on Dependency Hell
I thought for a second, “hey, this is why programming is hard and perhaps not for me”. So I started googling, searching and I realised it’s not just me. There’s countless examples of people frustrated with python. Hell, (pun intended) Paul Kernfeld described it well in an article 8 years ago “The Nine Circles of Python Dependency Hell”. I don’t think anything improved from then, quiet the opposite I would assume.
Unfortunately, my struggle with Python's dependencies isn't unique. Dependency hell is a notorious issue in the programming world, affecting many languages and systems over the years. For instance, developers using Node.js often encounter similar problems with npm packages, where one library requires specific versions of others, leading to conflicts and broken builds. JavaScript developers frequently lament the chaotic nature of npm's dependency tree, which can become a tangled mess with even a few packages.
Yet, for some reason, maybe sheer luck, Node.js just worked. And that allowed me to keep going further, willing to learn and understand the code better rather than read console errors why a library is not compatible with another library that is not compatible with the version of python you just installed to make sure the first library is compatible.
Scarring experience.
A Call for Better Recommendations
It's clear to me now that recommending Python to beginners is a disservice. The language, while powerful, is not user-friendly for those just starting out. Programming should be an encouraging and rewarding experience from the outset, not a frustrating battle against obscure errors and version conflicts.
We need to guide new programmers towards languages and environments that are genuinely accessible. These tools should allow them to focus on the fundamentals of coding and problem-solving without getting bogged down by technical obstacles.
The Search for Simplicity
I will continue my search for a programming language that truly caters to beginners. One that prioritises ease of use and minimises the complexities that come with dependencies. A language where writing a simple web application doesn’t turn into a nightmare of conflicting libraries and incomprehensible errors.
There must be a way to introduce newcomers to programming that fosters creativity and learning, rather than frustration and abandonment. As our world becomes increasingly dependent on software, it is vital that we lower the barriers to entry for those eager to learn and contribute.
Conclusion
Learning Python has been a rollercoaster of emotions. The promise of simplicity clashed with the reality of dependency management, leaving me feeling misled. However, this journey has also been enlightening. It has shown me the importance of choosing the right tools for the job, especially for beginners.
So, if you’re embarking on your coding journey, consider the challenges I’ve faced. Be aware that Python, despite its widespread acclaim, may not be the best starting point. Look for languages and tools that prioritise ease of use and minimise technical hurdles. In doing so, you’ll find a more encouraging and rewarding path into the world of programming.
To those who can recommend a truly beginner-friendly language for building simple applications, your insights would be invaluable. The goal is to make programming accessible and enjoyable, enabling more people to understand and thrive in our increasingly software-dependent world.