If you're working in the tech industry, I'm sure you've heard the loud voices evangelizing that we don't need to write code anymore or even bother learning programming languages. Here's one popular quote from Nvidia's CEO:
"Everybody in the world is now a programmer. This is the miracle of artificial intelligence."
— Jensen Huang, Nvidia CEO, on Techspot —
On the same note, he could have replaced "programmer" with "writer" or "painter", since LLMs can effortlessly generate text or images as well. We might even ironically extrapolate that:
"Everybody in the world is now a photographer. This is the miracle of smartphones."
In contrast, my belief is that there's more to programming and software development than just having access to an LLM. Using an AI model to generate code might be necessary in the near future, or even today, but it's not sufficient to become a programmer or a software developer, just as much as owning a smartphone and using it to take pictures does not implicitly make you a photographer.
So, there's a clear dichotomy between what I hear and see and what I trully believe concerning the future of software development. Therefore, in this post, I'll give my personal view through the crystal ball, by building a parallel with photography. The reason for this particular analogy is that I have experienced most of the evolutionary phases of photography. There are essential differences between the two industries of course, but I have seen significant similiarities as well which are worth exploring.
Film cameras
Photography started with the pin hole camera or camera obscura. It's the simplest way to take photographs: just place a photosensitive surface in a black box with a tiny hole on the oposite side.
Later, cameras evolved to black boxes with lenses, shutters, and special magazines to hold the light sensitive surface. At first, gelatin dry plates were used as a photosensitive surface, but later photographic film was invented. Depending on the film size, cameras could be categorized into 3 major types:
- Large format film plane cameras were used mostly in studio photography. They were heavy and bulky, requiring a tripod.
- Medium format film cameras, using 6cm wide film, were smaller, therefore more portable, and easy to hand hold.
- Small size 35mm film, the most popular format, was used both in professional and amateur photography.
At that time, photography was all about chemistry. When taking a photo, the light would hit the photosensitive film. However, we couldn't see the result right away. The film would undergo chemical revelation and fixing processes which would result in the negative image. To obtain the real image, we would have to repeat a similar process, by projecting the negative film on a photosensitive paper in a darkroom, and go through the same revelator/fixator process over again. During printing, you could control the exposure and contrast of the final print, or even dodge or burn specific parts of the image.
Photographic post-processing is tedious. It takes time and requires understanding of the chemistry and optics involved in the process. In addition, while taking the actual photo, other technical skills were required to control the camera's exposure time, lens aperture and focus, focal length, depth of field, and film sensitivity. However, even before taking the actual photo, the photographer would need to have some artistic skills about light, contrast, luminosity, composition, storytelling, etc.
So, in order to produce a photograph from start to finish, 3 categories of skills were required: artistic skills to know what, when and how to shoot before taking the photo, technical skills to control the camera while taking the photo, and post-processing skills after taking the photo to develop the film and print the actual photograph.
But even at that time, photography was not limited only to the knowledgeable ones.
- You could delegate the post-processing to a photo lab to perform the film processing and photo printing for you, or get an instant camera like the Polaroid, if the quality was not quintessential.
- Going further, a lot of the technical skills were automated with the introduction of autofocus or autoexposure. Even more, point-and-shoot cameras completely removed the requirement of any technical skills by lowering the entry barrier.
So, casual photographers could use fully automatic compact and easy-to-use cameras, without any skill requirement. Amateurs and enthusiasts would use 35mm cameras, therefore some technical skills were required at this level. But whenever you wanted a high-quality photo, you would have to rely on a professional photographer with a combination of all three sets of skills.
Ansel Adams in the Yosemite National Park
During the early days, software development implied a lot of know-how. First and foremost, you had to know a programming language, its specific syntax, constructs, and paradigms. Additionally, you needed to know programming fundamentals, like conditionals, loops, data types, variables, functions, modules, data structures and algorithms.
To build real professional software, it was required to know application architecture, like code structure, modularisation, packaging, building, deploying, monitoring, code design, routing, data flow, state management, user interfaces, persistance, and much much more. Therefore, to build serios sofware, you needed to build the proper tooling to support all the domain-specific code.
Last, but not least, several software engineering skills were needed, like analitycal thinking, problem decomposition, usability, debugging, testing, profiling, security, accessibility, and more. Some of them are required before writting the code, while others are applied during the maintenance phase of the software solution.
All professionals were highly knowledgeable in multiple aspects of software development. The effort was split between designing and analysing the business requirements, building the abstractions and tooling for code reusability, writting the actual application code manually, and maintaining the software solution.
Digital cameras
During the 90s, the first digital photo cameras were introduced to the market. The entire chemistry was replaced with digital technology. Image sensors were used to capture the image and then stored on memory cards.
The whole process of developing the film and photos was not required anymore, thus making photography easier to practice. You could easily download the photos from the memory card, or even send them wirelessly to a laptop and see the result right away. This new digital technology applied at all the levels, from professionals to casual travel photographers.
But overall, the number of people, professional or not, that owned a digital camera and practiced photography grew a lot, because the tedious post-processing step could be skipped entirely.
Photo by Curated Lifestyle from Unsplash
Most software applications, regardless of their business domain, had in common quite a few aspects, such as authentication, routing, state management, and more. To avoid reinventing the wheel for each project, specific logic was extracted in separate libraries to enable easy reuse across projects. Code structure and data flow within applications started to be formalized within frameworks, which provided the foundation for building complex software.
In addition, open source enabled easy distribution and free access to all these libraries and frameworks, allowing developers to focus on the actual application code instead of inventing and implementing foundational software architecture.
Also, commercial platforms labelled low-code/no-code started to emerge, providing ready-made building blocks and enabling non-technical persons to build, customize, and publish websites, e-commerce shops, or personal blogs.
It's not a coincidence that during this time, the need for developers and the number of developers grew by a significant factor. People were reconverting from other professions, learning to code from online or offline courses. I heard recruiters literally saying "we're hiring any person that breathes and has a pulse".
Phone cameras
The 3rd and current evolutionary phase of photography started with the introduction of photo cameras on smartphones. Since phones were mass produced on a global scale, virtually "everyone" had a personal camera, whether they needed it or not.
To compensate the low quality of the hardware, especially in regard to optical lens and sensor, images were produced by software algorithms. The era of computational photography started. Instead of producing raw images from the optical lens, the phone's software performed complex pre and post-processing steps to create the final image that we would see on the screen.
Since everybody had a photo camera in their pocket all the time, the need for professional photographers slowly diminished. However, professionals didn't completely disappear. They are still needed when high-quality photography is a requirement.
Therefore, the question of photography related skills is actually context-dependent. For instance, a professional photographer today must have the artistic skills to decide what and how to take the shot, the technical skills to handle their camera, and the post-processing skills to improve and fine-tune the raw data to get the desired result. However, the same person might use their phone to take vacation photos and not be concerned with any of the aforementioned skills.
Photo by Sou Jest from Unsplash
Besides generating text or multimedia content, LLMs are also capable to generate code. Remember that LLM comes from "Large Language Models". Even though software code might not look like an actual language to most people, they are written using a programming language. What helped LLMs become so good at writing code is the large amount of code available to properly train these models.
The evolution of tools in the GenAI software ecosystem is one of the fastest we've ever seen. Currently, we don't exactly know if this evolution is accelarating or hitting a plateau, as there are diverging opinions on this topic. 2 years ago LLMs were used only by a tiny minority of early adopters to generate isolated small pieces of code. Nowadays, the amount of developers using agentic coding to implement een complex tasks varies between 25% and 80%, based on various surveys or studies. The increase is obvious and there's no question that most developers will use AI tools eventually.
The agentic coding approach to produce software eliminates, at least to a certain debatable extent, the requirement to know programming language-specific syntax or even general software engineering concepts. Anybody with an internet connection can use free or paid models to generate code.
But there's more. A few strongly opinionated persons evanghelize that since writting code by hand is over, it's pointless to even learn a programming language anymore. As a consequence, you've probably heard that come companies forbid their employees to write code at all. Instead, they must train the AI models through instructions, skills, and tools in order to produce the desired output.
It's not a big surprise that we see massive layoffs nowadays, due to AI evanghelization. The theory is that agents work faster and longer. Not to mention that one developer can spawn multiple agents to work in parallel. Therefore, the agentic throughput is orders of magnitude higher compared with humans writting code by hand.
And here's where we reach the culminating point of this whole blog post. Is the fate of software development really the one described by Mr. Huang? Should we stop learning software development? Should new comers forget about learning programming languages? Should schools teach AI tooling instead of software curricula?
That's probably the million dollar question that nobody can answer, because we cannot see the future. We can only have opinions on the topic. And my simple answer would be "No". If you want to be a professional software developer, you should definitely learn software development. This includes programming paradigms, languages, and frameworks along with general engineering skills.
Why? Because if you have a phone with a "good" camera doesn't make you a photographer. Nobody will pay you to take photos with your phone. You'll need an actual photo camera, learn how to use it, and get a grasp on the artistic and technical skills to be able to produse quality photos consistently.
Similarly, just because you have an AI tool that writes the code for you doesn't make you a software developer. Nobody will pay you to develop, deploy and maintain software. You'll need to learn enough software development to understand the AI tools output, but also to know what to ask them to do.
Using agents to develop software is not the same with being a software developer that uses agents.
One possible scenario is where software will follow the fate of photography.
Humanity won't need as many professional software developers anymore, because solving basic and simple software problems would be trivial and available to anyone, similar to taking photos using the smartphone. Software produced by non-professionals has no stakes. Poor performance or incorrect behavior doesn't really hurt anybody.
At the other end, we have the critical and serios software. Think of banks, military, medical, aerospace, govermental, or even commercial software. Whether it's client-facing or back-office, B2B or B2C, a web application or a CI tool, large and scalable software is not trivial to develop. Additionally, serios companies hold developers accountable for the code that they deliver. Therefore, whoever controls the LLM writting the code must be able to understand the output and it's consequences. At professional level, I don't see how anyone could perform without knowing the programming language, the frameworks being used, and the general engineering skills to produce high-quality results.
Another scenario that I forsee is one where nothing really changes on the long run.
Before AI tooling, companies used to hire more people to get more work done. With LLMs, less people are needed to get the same results, which means cost reduction. However, at some point, using AI tooling will become the de facto norm, and companies will want to be more productive, resulting in hiring people back.
Another argument supporting this scenario is the cost of AI tooling. Currently, you can get $20 or $100 monthly subscriptions to get access to highly capable models. However, prices will never be cheaper than this. The real cost is expected to increase a lot in the upcoming years. Therefore, hiring people to use cheaper, less capable models, might make more sense for companies, from an economic point of view.
Lastly, there is one major difference between photography and software that I haven't highlighted yet. Photos are a one-time effort. Once you took it, it won't change. On the other hand, software is never finished. Software grows, changes, and evolves. Not to mention that software requires maintenance: debugging, fixing, updating, or migrating. This effort could be theoretically automated by agents, but in practice I hardly believe it will work as expected. In the end, you'll still need people to be responsible for all these tasks.
To conclude, writting this article made me optimistic about the future of software development. Any additional knowledge will only make us more valuable as professionals. So, let's keep on learning and teaching.