I’m a self-thought programmer (although chasing a computer science degree) and for some reason I have picked up some good habits and some bad ones too. For now, lets talk about the good ones.
When I was just starting out I learned from practical examples from my school textbook. Those were all very simple examples, usually involving more mathematics than programming. I didn’t have any Internet connection at that time so using any tutorials or e-books was out of question. Also, my English skills were limited to “go, go, go” and “my name is Amir Hadžić”. Soon enough I started testing all possible variants of BASIC and eventually stumbled upon Visual Basic .NET. At that time I had a very slow dial-up connection so I was introduced to the Internet. My English skills were getting better every day as I read more and more tutorials and e-books. So my first advice to you is to learn English. You can’t really go wrong with this one. Just start learning. Watch movies, read articles, try to write some blog posts (guess what I’m doing right now). If you can translate this article without anyones help, you’re capable enough to read manuals, tutorials, e-books and various documentation.
My second advice to you is to read the documentation. Don’t take this one lightly, it’s more important than it seems to be. The only way you can learn yourself to always check and read the documentation and to be able to read it well is to do it often. If you are just starting out you’re lucky. Just go and experiment with as many languages and libraries as you can. There are no deadlines to meet, you can roam the software development world as you wish. It will be harder for you to learn to do this later on.
Don’t be lazy (in a bad way). As a programmer you should never stop learning and improving your skill set. It’s easy to forget about learning new technologies and ways to develop software when you are constantly trying to meet deadlines but it’s not an excuse. You need to burst out of your bubble and start working on your skills. Being lazy will make you write ugly code and software with bad architectural design. If you are lazy, most of the time you will choose the “easy” way, which is probably going to backfire and make you do even more work than doing it the right way at start. Always try to read about best practices in the field you are working on. If you are developing an application that will have some database back-end, you should read about sanitizing user input or database normalization as well as other related topis. Not being lazy also involves following some coding standard for the language you’re using. It doesn’t matter which one you follow, the only thing that matters is that it’s documented somewhere and that you are following it.
Being lazy can be a good thing if used in the right way. For example, if you write a tool for creating test data so that you don’t have to type it manually, that’s being lazy but in a good way since you are saving time down the road.
Be humble. If you want to be a competent programmer, then you need to be aware of your limited mental capabilites and you need to approach every problem in complete humility. Write simple, elegant and readable solutions. You are limited by your brain in more ways than you think. Avoid “clever” solutions. Also, you will make mistakes and that’s not a problem. Not learning from your mistakes is a problem.
These advices are high-level and they are a good start if you want to become a competent programmer. I might try to write some more posts about specific mistakes that programmers make or about best practices in some field.
If you like this article, you might enjoy this one too: Scarce hardware as a way to learn