AI Assisted Learning is the new trend
As the saying goes, "Learning never ends". Indeed, even in the age of AIs like Claude, Codex, ChatGPT and Gemini, learning still doesn't end. After all even the AIs are being trained continuously (in other words, "they are learning" daily) to become for accurate, manage context better and deliver better results to the prompter. The assumption that we do not need to master our craft as software engineers is a very big mistake in my humble opinion.
Software Engineers should master their craft even more with the presence of AI. This is where the concept of AI assisted learning come to play. Building software has never really been about just writing code. There are many other areas where an engineer has to focus, writing code is only one of them. As a matter of fact, architecture, system design is even more important now than ever before. Understanding how to architect systems now is extremely valuable. An engineer has to consider the problem being solved by categorizing it in the right domain, selecting the right set of technologies or approaches to solve it and most importantly, the tradeoffs in the process. Are you building a monolith, modular monolith or a micro service for your business, you will have to think of what approach to take.
In my experience, if you are not a master of your craft (or at least know what you are doing), you will still build shit! AI only respond to what you ask it to do and if a beginner asks the AI to solve a problem, it might provide a solution that may be too advanced to you as a junior but to a senior it's just a bunch of nothing to be honest. What are the things you should consider in order to learn more about your craft in this AI age in order to stand out and build things that are truly remarkable?
System Design: You should learn more about high level system design. Understand what queues, caching, logging, load balancing, API gateways etc can do for your infrastructure.
Performance bottlenecks: Know where performance bottlenecks kick into applications and the various ways in which you can solve them. Approaches like caching, rate limiting at the application layer and other aspects such as indexing, partitioning and shading at the database level are very good areas to take the opportunity to learn more with the help of AI.
Low-level system design: Low level system is one of the core skills that makes you a great programmer. You should learn more about DRY, KISS, SOLID principles and how they are applied in application building. You should also learn more about Design Patterns because just the knowledge of a design pattern will allow you to write software that is able to scale and handle thousands or millions of requests. Common patterns that exists are the following:
Singleton
Factory Pattern
State Pattern
Action Pattern
Go back to the fundamentals: You should consider going back to the drawing board and learn the fundamentals of whatever technology or language your using or working with. This is extremely important because an artisan who doesn't understand his tools will only become a failure. The fundamentals will always allow you to see many steps ahead, giving your the confidence to keep going with your work.
Practice taking interviews: Interviewing by itself is a skill. Knowing is not enough. Interviewing will test your communication skills and problem solving mechanisms. Now, AI is very powerful to take the place of an interviewer to help you practice the concepts you are learning on a weekly/monthly basis. You will be surprised by how much you get to learn in this process. Give it a try and be challenged so that you can go back and be sure you have proper understanding of them.
Exhaust the free resources if you can't pay: There are a tonne of resources on YouTube for concepts and courses that you can learn from for FREE! Use them! But remember, its not only about learning, it should be learning to know and use it for a pet project. In this project, make sure to incorporate all the suggestions I have made so far.
Technical Documentation: Technical documentation should be a process that you adopt now because it makes you stand out. A lot of developers jump straight into building without having a plan. You should dig deep into writing out a technical documentation of all the features you want to work on for your application (this is usually known as the requirement document if you're truly a software engineer, you should understand this). Document every feature; listing the flows (even using mermaid flow diagrams), describe their impact on other services, assumptions and rationale for your choice of implementation methodology. You will never imagine how this will become useful in the building phase of your application. Most importantly, it signals to hiring managers that you are a good writer and communicator and can fit perfectly into a team. Remember that documentation is part of the process of developing good software. Other things you should consider documenting are:
Technical Depths: These are features which you have cut corners to get them done. You are suggesting better ways to refactor and improve on them so that your application can be more robust. This is very true when you are working with teams and more importantly, it sets you apart as a team player. You can easily get promoted by you taking 10 - 20mins finding issues in your codebase and areas where you can make improvements. This is where you AI can really come in handy and also your knowledge of design patterns and the SOLID Principles.
Bugs and Defects: You should documents bugs that you find in your application, listing all the various ways you can reproduce it. What are you gaining here? You are gaining a huge skill in raising issues to potential open-source projects. Being able to document it by providing the way in which it can be reproduced is a very positive way to bring to light issues that exist that no one is willing to report or no one really cares. And why not, you can also provide a fix or recommendation for this.
In conclusion, make sure you don't always ship what you don't understand. This is fundamental to knowing more about your system and where potential issues and bugs may stem from. Any time your AI spits our something you don't know, you should go forth and learn it. Come up with 3 solid projects and start with the SSDLC (Secure Software Development Life Cycle) approach. Build your project to incorporate caching, logging, middlewares and other really good and brilliant concepts that makes your app scale better. After this, document about your application and publish it on your blog and on LinkedIn as well. This will help you stand out and be confident enough when you finally have your way to a job.
I hope this was a good read.
Cheers!