Saving private Rayan

I don’t know why, but for some reason I’ve been asked many times the last couple of months how to get started in software development. I’m not even close to understanding why this happens, I’m not some kind of cool or famous developer, but for some reason people try to ask me this question. Well, this post is dedicated to those who will be asking me in the future. I’m tired of saying the same thing over and over again. Buddy, there’s one thing you need to know to get started. The thing is, programming should be fun AF for you! Without some genuine enjoyment, it becomes very hard to sustain the effort long enough to get good. If you’re still wondering if you should start, or if you don’t think it’s the right thing for you, then find something else to focus on. You’ll freak out while you’re pushing yourself to do it. I am usually asked by novice Java programmers, so I will orient myself to them in this post.

Practice

My point is that even if you read all the books, blog posts, and articles in the world, you won’t become a real programmer.

Only one thing can make you a programmer – writing code.

Thus, on your Way of the Samurai in my experience, aim for spending roughly 70% of your time coding, not reading. Not just write stupid pieces of code in the form of to-do lists and other crap they do on courses. You must solve problems with coding. Only when you’re looking for a way to solve a problem you do learn. Foundational reading fills gaps that problem-solving alone won’t surface. But when you find it – now the books become handy, you know how to implement it in the right way. You might have no idea how to find these “problems”. The easiest way is to contribute to Open Source. Go to GitHub and find the project that you will be involved in! Make your first contribution and feel useful, because you have contributed to something other programmers may be using! And you’re just getting started. But you shouldn’t sit around and wait for someone to come help you understand the project. You should dive into it yourself, read the documentation, study the source code. After that you should ask questions. No one likes people who start throwing questions that are answered in the documentation or code. Train your ability to learn, not get used to being handed something on a silver platter! You can also try to find a few beginners just like you to work as part of a team. Let’s say you are putting together a team with one junior backend developer, one junior frontend developer, one junior tester, one junior designer, and other roles the project needs. After that you start developing some website, which, for example, somehow replicates the existing one but with some changes. If your team is motivated enough, maybe for six months of joint efforts, you can create something that can be deployed and show the employer. Such an experience can be equivalent to a real commercial project (if the team holds together long enough). In addition, you can find someone already working, so he checks your project once a week (you can even pay him for this, it will be worth it). The most challenging thing here is to keep motivation at a high level. Because often teams like the one described above fall apart after 1–4 weeks due to a lack of interest in working on the project.

I’m highly recommending you to watch this video

Use proper platforms

As a programmer, you have to use the right tools for software development. I’m not talking about IDEs or development tooling right now. I am talking about several things:

  1. GitHub is the main platform for Open Source developers, make it your social network. Don’t try to be cool on Instagram or Facebook, forget this crap – use GitHub.

  2. Stack Overflow is a site where you should ask questions and possibly answer them. Learning to ask questions on this platform can help you practice expressing technical questions clearly as a software engineer.

Sources of knowledge

I prefer books to other sources of information. You don’t need to read books about the Spring framework, Hibernate, or any other technology-specific guide. You need to read books that will deal with general aspects of software development. Such books retain relevance far longer than books written for a specific framework. By the time a book dedicated to the framework comes out, it will have had time to be updated several times. There are a few books that I like, I don’t agree with everything in these books, but overall they are worth reading. This list may be updated; I will try to add new books that I like, stay tuned!

General

  • Junior Objects. This book will make you a real software developer, as long as you complete all the exercises. There are many other useful books hidden inside this book.
  • Clean Code. This book is like the Bible for programmers. Read it.
  • Code Complete. You know what, programmers have several Bibles :)
  • Refactoring. You know what, programmers have several Bibles :)
  • Working Effectively with Legacy Code A lot of useful stuff, especially about testing.
  • Release it!. How you should release your software.
  • Elegant Objects, v1-v2. Watch out! May cause a burning pain in the ass if your views on OOP are firmly set. These books will break down your understanding of OOP. To me, these concepts are more properly described than those we are used to hearing.

Java-oriented books

Blogs

Nice to read, but not necessary

Summary

Here I describe how to get started as a software developer: write real code on real problems (open source is ideal), use GitHub and Stack Overflow as your main platforms, and read general books rather than framework-specific ones. Also: don’t try to sit and write code for 7-8-9-10 hours a day. You will burn out. Keep learning no more than 2-4 hours a day and 3-5 days a week.

Don’t do something by pushing yourself – it will kill all interest and motivation!

Couple videos about Open Source

How to get into an open source, so as not to burn with shame (Russian)

Open source developers inevitably have better soft and tech skills (English)

Contributing to Open Source Can Change Your Life - Here’s How to Do It (English)

Thanks!