How to learn software development?

If you want to work as a software developer, you will have to keep learning your whole life, so if you don’t like to learn, seek another career when you still can. But if you like to learn, here are some tips that may help you.

Software development is one of the most dynamic industries, everything changes here really fast. New technologies appear out of nowhere, new frameworks dethrone older, new methodologies, new architecture patterns, new concepts, new services. Every month something pops out, trends are changing and you have to somehow keep up with it or you will be obsolete.

Most developers that I know, are curious creatures. They love to try new stuff, love to explore, love to create. I’m also like that. I’m mainly interested in Java backend, systems integration, all the interesting Spring projects, different databases, REST services, big data, actors, microservices with all things like communication between them, monitoring, provisioning etc., and there are Docker and Vagrant from the DevOps world. I’m also interested in the frontend side, that is Angular, React, Typescript, node, GraphQL and the mobile world in the form of Android. That is A LOT, and I want to learn all of this.

How to learn all these?

So, how to learn all this stuff? Well, the truth is, you can’t. There is no way to do this without inventing some kind of time machine or Matrix style learning. You have to prioritize your goals and focus on few technologies first. Learn them well and then start thinking about next steps. If you would try to learn all of them at the same time you will fail. First, because you won’t have enough time to understand it well, so you won’t be able to use it effectively. And second, you will probably get overwhelmed with the thoughts like "I must learn X", "I must learn Y", "Z looks fun, have to try". The second part I know from myself. There was too much on my to-do list to learn, that in the end, I couldn’t start learning anything new because I wasn’t able to decide where to start!

For me, the solution was to drop few plans from the list. I have completely dropped frontend side, that is keeping up with Javascript and all these daily new frameworks, I know Angular 1.x, so I have a bit more interest in Angular 2/4 but currently, I just read some news about it here and there. This was a pretty hard decision, as I like to create working applications, which is a bit hard using backend only 😉 The other casualty is Android. I had to let it go for now, which was really hard, but it also took too much time.

So as you see, I am now mainly focused on the Java backend stuff, that is integration, microservices, spring cloud, REST, docker. And you know what? It’s still a bit too much, but I just can’t slim it any further 🙁

Anyway, when you clean up your plans, you can start learning, here are few ways of learning that I use mostly.

Project!

Yes, a project. Come up with some kind of project and implement it. It would be best if that project would be something that you would use, because this would motivate you more. A project like that will make you seek knowledge and learn. You will try few things, make some mistakes, but you will learn new stuff. With the help of google and stack overflow, there is no such thing that you would not be able to do. As a bonus, you could even try to share your project on GitHub, which will enrich your portfolio a bit, which is really important if you are just starting your software developer journey.

Use online courses

Another great way is to use some kind of online course. I have used Udacity and Udemy courses. Free and paid, for udemy you can easily find coupon codes on google that will make courses really cheap. Courses like that are great because they are structured, that is, you learn new stuff step by step, and what is important, in the correct order. You don’t have to scour the internet or documentation like a headless chicken not knowing what part to learn first. It will also save you some headaches when you will encounter a problem that is a result of your lack of knowledge of the basics – I’ve been there, was not fun 😉

Online tutorials are also good, but most of the time they focus on one simple topic, like "How to make a button". They are helpful, but they often lack a structure of courses. Also, on YouTube there are so many tutorials, that it may be hard to find a good one, so you just may waste your time.

Conferences

Conferences and meetups are great. I just started attending and I’m bad at myself that I didn’t to it sooner! During conferences, there are many different presentations, you can learn so much interesting things. If the presentation is good, there is a chance that you will hear and see all the most important things about a technology, or at least the basics with the direction where to go next. You can also ask questions or talk to other people about your problems. Also, if you are unsure about some kind of technology, you can go to the presentation about it and verify if it really interests you. That way, you would be able to remove something from your to-do list, and that is a good too!

Of course, you can’t always attend. Conferences are all over the world, tickets are not always free or your employer won’t let you go. But there is also a backup plan for this! Nowadays, most conferences are recorded and later available on YouTube. You can watch them anytime you want in your free time or even when you work or do some other stuff. But watching at work or while doing something else is a bit harder, you should wisely choose a topic. It should be a topic that doesn’t require your focused attention, without code examples etc. Treat it as a podcast, with sound only, remember you have work to be done while listening!

Read books

Yes, books. Why at the end? Well, I’m not a big fan of books, especially books about specific library or framework. Books get outdated really fast. That is I prefer books about general software craftsmanship. Thing like good practices, architectural patterns etc. These things do not get outdated, at least not fast. The biggest problem with books is that it takes a time to read them, and you can’t do anything else while reading (except commute in public transport). I would prefer audiobooks, but unfortunately, audio book format is not suited for technical topics. Anyway, read books, but choose the topic wisely. And remember, while reading, try to use the stuff that you just read about. It may be good to combine book topic with the project that you are working on. That way, you use your new found knowledge actively, so it becomes much more memorable.

Summary

To sum it up, keep learning, but do it wisely and effectively, and learn to let go of few interests, as this will save you from insanity 😉

  1. Prioritize your learning goals and focus
  2. Come up with some kind of project and implement it
  3. Use online courses like Udacity or Udemy
  4. Go to conferences or watch recording from conferences on YouTube
  5. Read books

 


Also published on Medium.