Two reasons provoked this article – my previous article and a recent Twitter post asking, “How do you learn new technologies?”.
In the next paragraphs, I will try to explain how I see learning should happen. Please have in mind that what I suggest is not for total beginners currently learning basics as “if statements” and variables.
Young developer with great ideas
And not that great ones. When you are inexperienced, everything is new to you. Everything is exciting, and you want to try everything. It is a lot easier to jump on the hype train for something new.
Always learning new things is excellent, but it isn’t that good for a novice developer in the long run.
I remember how I wanted to learn C++ and OpenGL, .NET ASP, Python at the same time. I had many “cool” ideas for different projects. I tried, and of course, I failed.
I was jumping from technology to technology and never got some depth.
Some of you will start something new just because it is the new cool thing. Others will face something hard and will think that the new technology will not be that hard. No matter the reason, losing focus and always staying on the base level is the worst thing you can do.
Beginners have to learn fundamentals
Even If you are new to programming, It is hard to get wrong with the technology stack. But the technology stack is not the most important thing. The best you can do is choose one, stick with it, and learn all computer science and software engineering fundamentals. By fundamentals, I mean things like – data structures and algorithms, programming paradigms, good software architecture and design, software development best practices, etc.
But only learning will not help you. You have to practice what you have learned. Here things become a little bit tricky.
It will be hard for you to find a real project to practice what you have learned.
If you are part of a team at work, rarely technical decisions will come by you just because there will be more experienced programmers. Yes, you will learn from them, but this is not the same. You have to make decisions.
If you start your practice project, you will lack real business cases and supervision. Lacking real business cases and control is a recipe for doing things the wrong way and understanding it too late.
My advice to you is to start your practice project but also to find an experienced mentor. Try to create something helpful. Make your own decisions and see how they fit. After you are ready with a specific coding part, ask your mentor how it could be done better, how he would do it. What is the idea behind his implementation, and what you gain by it.
For me, things didn’t go that way. Soon I understood that I have to stick to a specific technology and try to learn the core of that science, but I was missing a mentor. That’s why I made many mistakes. Mistakes I don’t want you to make.
Doing it the right way
After you have gained some experience in several years, you will understand that there are no right and wrong. Everything depends on the current problem you are trying to solve. You will also see that most good practices are not imperative, that sometimes “little bow of mud” is ok and that the perfect software exists only in books.
The essential thing that you will learn is that you can not know everything, and that is ok. You will also quickly understand that there is no point in learning something if you are not practicing it.
Don’t get me wrong. You should always watch out for new trending concepts, ideas, and cool technologies but only get invested when you need to.
Using the solid foundation you have built will be a lot easier to learn something new. So if you need, for example, to learn Angular, then focus only on that and invest all of your attention.
Beginners tend to jump from technology to technology without learning it in-depth, while experienced developers learn many things and forget most of them because they don’t practice them.
As a developer with 12 years of experience, I had the same problem. I felt constant anxiety that if I don’t learn something (even not having a way to practice it), I will be less competitive in the labor market. Of course, I was wrong, and I wasted valuable time realizing it.
Over the years, I managed to implement many projects using technologies that I had not known before. What helped me was the experience and strong fundamentals that I had.
Take a side/practice project and work on it, but don’t get ten of them 😊. For example, If on your daily job you work with ASP.NET Core, while on evenings and weekends you play with NodeJS and Express, that is more than enough.
Let your project be something for the long term, not another CRUD project, which you will finish in three days. Challenge yourself!
As you can see, novice and experienced developers make similar mistakes but for different reasons.
The worst thing you can do is sit in front of the TV after coming back from work…
Nowadays, you can become a software developer in many different ways – books, online courses, tutorials, coding academies, boot camps, etc.
For a beginner, I suggest you start with the good old books. There are great authors from which you can learn all the fundamentals. Some of these authors are – Charles Leiserson, Donald Knuth, Steve McConnell, Martin Fowler, Kent Beck, Robert Martin, Erick Evans, Erich Gamma, and others.
(I promise in a later article I will try to make a list of my top 10 books)
You can use almost anything from the official documentation to online tutorials to learn a technology stack. Still, my advice is to find something systematized – a series of online tutorials or a video course is a great choice.
I do not recommend learning technology stack from a book because these books get obsolete very quickly.
Also, it is crucial to follow what’s new with the current technologies you work with. The best way you can do this is to subscribe to the official blogs, join online communities, and be an active member.
Things do not differ much for experienced developers.
In addition to the advice above – the best thing you can do is to challenge and broaden your views. Read books about ideas you have not experienced before, learn case studies and white papers, and, last but not least, try to give your contribution to the community.
No matter your level, becoming a good developer requires time, a lot of time.