In 2021, I was one of the many beta testers of GitHub Copilot. Back then, AI programming tools weren’t widely used, Stack Overflow was still a go-to resource, and solving coding challenges relied mostly on pure brainpower. Fast forward to 2024, and programming has evolved into something entirely different. Let’s talk about it.

The Good

When I started using GitHub Copilot in 2021, something changed immediately. Within weeks, most of the code snippets I needed were being generated by Copilot. Not only did it save me a massive amount of time, but the quality of the code was often better than what I would have written on my own.

Before GitHub Copilot, getting stuck on a problem typically went like this:

  • Spend an hour trying to solve it yourself.
  • Read the documentation and online forums.
  • Post a question on Stack Overflow and hope it doesn’t get closed.
  • Test the answers (and repeat if they didn’t work).

With AI, the solution was available in seconds and already implemented in your code. It quickly builds confidence with me, you feel ready to tackle projects knowing your “Copilot” is ready to assist not matter the complexity and the language.

AI, when used correctly, also acts as a fantastic mentor. GitHub Copilot and ChatGPT can explain code line by line, share why their approach is better, and provide additional context you might never have considered. It’s like having Wikipedia and Google combined but specifically for programming. I’ve learned countless new concepts this way, which I later researched further and applied to my own projects.

Furthermore, lot of AI tools are free and open source which removes the socio-economic barrier to learning programming, like internet did for information. This democratization of programming is a huge win that can help anyone, regardless of their background, learn to code.

Learning Flutter with AI

A few years ago, I began learning Flutter for my startup. My goal wasn’t just to learn but to launch a mobile app that my customers could use, which would boost sales. At the time, I knew almost nothing about Flutter, so I followed my usual approach: take a Udemy course, watch YouTube tutorials, and start building.

Flutter, with its widget-based system, is very verbose. While I understood programming paradigms and knew what I wanted to do in Python, translating those ideas into Dart (Flutter’s programming language) was challenging. Thankfully, GitHub Copilot introduced its chat feature around this time.

This feature was like a “rubber ducky” on steroids. For those unfamiliar, the “rubber duck debugging” method involves explaining your code line by line to a rubber duck (or any inanimate object) to help you solve problems. With Copilot’s chat, I would clearly explain what I wanted to achieve, and 90% of the time, the AI would give me the correct answer.

This was refreshing. The ability to start learning and building on a new platform (in this case, mobile development) with minimal prior knowledge was exciting. For a solo developer trying to launch a business, AI tools felt like the ultimate enabler. Like Google and Wikipedia before them, AI programming tools empower anyone with curiosity and determination to learn and build just about anything.

The Reality of Modern Programming

Programming professionally for five years has taught me that much of the code we write follows similar structures and solves the same kinds of problems. How many of us have written functions to handle dates, parse JSON, validate user input, or manage file uploads? This kind of repetitive work is rarely exciting.

That’s why I use every linter, formatter, and pre-commit hook available—because formatting code should be automated. Human developers should focus on designing the code, not formatting it. In this way, AI tools like GitHub Copilot feel like an extension of these utilities, solving repetitive coding challenges not because they’re exceptionally smart, but because most software shares a lot of structural similarities.

Of course, these smaller scripts live within a more unique and robust codebases. AI tools, like code quality and linting utilities, save time and mental energy, allowing us to focus more on architecture and design instead of boilerplate programming.

In a sense, using frameworks like Django or Laravel already delegates significant responsibility to a third party. For over 20 years, most websites have shared common features: accounts, forms, databases, and so on. While frameworks handle much of this for us, we still feel ownership because we’re actively coding within the framework’s structure.

The Bad

Last week, I caught up with one of my earliest programming friends. Back in 2018, we built a Django web project together, a kind of social network for hotel professionals. At the time, AI programming tools didn’t exist in the developer community. I remember spending half a day debugging a single issue. It was frustrating and time-consuming, but when it finally worked, the satisfaction was immense. That dopamine rush of overcoming a tough problem was something I have not felt so much lately.

If you rely heavily on AI, becoming more of a “prompt engineer” than a software engineer, that sense of accomplishment happens far less often. What did you really achieve if all you did was write the right prompt? Sure, you’re building faster, and the results may even be better, but is it as fun or rewarding? Aren’t you becoming the puppet of the AI, rather than the master of your craft?

There’s also the issue of AI hallucinations. AI often produces code with total confidence, but when it’s wrong, it can cost you significant time to debug. While I don’t expect programming or AI—to ever be perfect, the lack of transparency in how AI generates its answers can be problematic. It doesn’t ask your permission; it just autocompletes everything, leaving you to figure out what’s correct and what’s not.

AI tools also don’t create anything original, they’re trained on public codebases and the internet. If a bad coding pattern is widely used, chances are the AI will suggest it too. Without proper foundational knowledge, you might implement solutions you don’t fully understand. Over time, this dependency on AI can erode critical thinking skills, leaving developers at a disadvantage when the AI fails.

Lastly, while AI can be a helpful teacher, it’s up to you to actively engage with the explanations and take the time to reflect on the answers. This works well for personal projects or when you want to deepen your knowledge. But in a work environment, under tight deadlines, where your boss demands ten new features a week, the temptation to let AI handle everything can be overwhelming.

The shrinking attention span of many developers is another concern. When you solve problems manually—or with the occasional help of AI or colleagues—you’re more likely to remember the solution the next time. But if you rely entirely on AI prompts, will you retain that knowledge?

What’s Next?

On YouTube, LinkedIn, and TikTok, a lot of so-called AI “influencers” like to claim that programming is dead. They boast about AI building SaaS products in hours and question the need for human programmers.

The truth is, programming isn’t just about writing code—it’s much more than that. Most of our time is spent brainstorming ideas, creating design patterns, and connecting all the moving parts. This includes client feedback, server infrastructure, integrating front-end and back-end systems, and much more. AI can assist with some of these tasks, but it’s far from replacing the human touch needed to make it all work together.

That said, I do believe AI is fundamentally changing how programmers work. Over time, I expect scripting tasks to become almost entirely automated. Like “script kiddies” in hacking, those who rely solely on AI without deeper understanding won’t last long, AI can already do those tasks faster and cheaper. And while it’s possible to build a product with minimal knowledge using AI, how will it help you navigate the myriad of other responsibilities a software engineer handles daily?

Finally, AI seems to have hit a plateau in programming capabilities. While improvements continue, the mythical AI tool that can entirely replace programmers has yet to materialize, unless, of course, someone’s trying to sell you a training course.

Personally, I think AI can be an excellent teacher granted an intrusive one that sometimes takes the fun out of the learning process. It’s a mixed bag of pros and cons. While it has made me a better programmer, I can’t help but wonder: For how long?