Foreword
This is a non-technical and non-scientific article. It's simply a mind dump of some key takeaways from my experiences in 2023 and my humble vision for 2024 (something I do every year). Please do NOT make crucial decisions in your life based solely on this :)
2023: Highs and Lows
What a year, my friends! The year 2023 will undoubtedly go down in history as a significant milestone, especially with the strides made in the field of Machine Learning that reached the general non-tech public, with GPT-4 taking center stage. Additionally, we cannot overlook the unfortunate wave of massive layoffs that affected many colleagues, some of them close to us. However, my intention here is not to compile software engineering-related news from 2023 but to spotlight key observations I made throughout the year.
The Power of Fundamentals: Beyond AI Tools in Software Engineering
I believe it is reasonable to say that many developers are well-equipped with various AI tools, some of which can be integrated into the code editor, enabling AI to effectively engage in pair programming with a developer. But, even having such powerful tools, one thing I could see throughout this year is that such arsenal doesn't mean much if fundamental design principles are not something well understood. I must even say that in the age of advanced automation and intelligent code suggestions, a robust foundation in design principles is the bedrock of effective software engineering.
This year, I had the chance to work in two important teams at job, and it was interesting to perform code reviews for colleagues using such tools and realizing that while these assistants are powerful aids, they are not a silver bullet for ensuring code quality. In other words, those AI assistants are there to give you whatever you ask, and if you don't have the knowledge or experience to evaluate the given code, then, bad code will be produced the same way, but now for a machine :) How can one evaluate the code given by some AI assistant if it doesn't know why and how to check the cohesion of the code? If it doesn't know why and how to check coupling?
Over my 10 years in this ever-evolving landscape of software development, I could swap between a series of programming languages, such as C, Java, Go and Javascript with their famous frameworks and libs like Spring Boot, Express, NestJS and so on. I lived enough time to see monoliths be treated as something good, then as the worst thing ever, and in the past few years to get back to be seen as something valuable again. In this ever-shifting terrain, where technologies rise and fall like passing trends, one constant has anchored my proficiency and adaptability: a commitment to timeless design principles. Some principles like SOLID, DRY, YAGNI, "Tell, don't ask" have served as my North Star, providing a reliable compass that transcends the specifics of coding languages.
As the industry embraces the era of artificial intelligence, I've found good design principles to be more critical than ever, especially in the context of code generated by AI. While AI tools can swiftly produce code snippets and even entire functions, their effectiveness is greatly enhanced when paired with a solid foundation in design principles.
Two things we know for sure about life: the death and the presence of overengineering
Another point that never gets out of fashion is overengineering things. From my observations, the main cause of it is the desire to apply into a project a set of solutions that big companies had success using... but the project itself is orders of magnitude smaller. An interesting aspect here is that depending on how emotionally attached the solution's owner is, you might be labeled as someone who doesn't follow "good practices". After all, how could someone argue that Domain-Driven Design or Clean Architecture are not suitable for all projects? :)
2024: linear regression is the new CRUD portfolio project
Depending on how long you are working in the software industry, you'll probably agree with me that around 10 years ago, a typical portfolio app used to be a CRUD (Create, Read, Update and Delete) using some programming language and some web framework, or it was something like "building a microservice for something". Once I look to the current scenario we are, in which AI and ML are draining attention, and compare with those passed 10 years, I see that linear regression is the new CRUD. I think that because linear regression is a basic step that the majority of developers are able to do, regardless of their preferred stack and it is an effective entry point into the big world of Artificial Intelligence/Machine Learning. Furthermore, I won't be surprise if during next year the amount of Github repos with AI/ML topics increase and if related topics become more frequently featured on CVs.
Building upon that, something that I also expect for incoming year is Python getting more adoption, not necessarily to be used for web development, or even further as a Javascript replacement, but due to the high demand for AI and the rich ecosystem of libraries available to be used with Python.
And adding my 2 cents on this: for the ones really interested in stepping into the world of AI/ML, my humble suggestion is to ace the basics of statistics and linear algebra that it requires. Rather than focusing too much on tools, such as Tensorflow, the crucial aspect of working with Machine Learning lies in acquiring the right data, cleaning and normalizing it, and then structuring the model to test hypotheses, check accuracy, and, if satisfactory, export the 'model' to be loaded into some API for execution. Without a solid understanding of the mathematics behind of it, one won't be able to assess the effectiveness of their model and won't be able to innovate in the field.
Hoping for the best in 2024
I know that recent and rapid advancements and disruptions bring us some uncertainties about the future, which can potentially make us afraid. But, it's precisely these situations that force us to be more resilient and move forward.
Let's embrace the future with open minds, let's keep our curiosity fueled, and let's remember that amid all the tech jargon and buzzwords, what truly matters are the fundamentals. Whether you're shifting from one programming language to another or from one AI assistant tool to the next, carry with you the timeless principles that lay the foundation for good software.
As we step into 2024, let's not just hope for a hot tech industry, but actively contribute to turning up the heat. Let's bring the passion, the creativity, and the collaborative spirit that make our industry not just survive but thrive.
This article was originally posted on my personal site: https://www.buarki.com/blog/2023-2024
Top comments (0)