I wrote this a while ago on imgur, and nearly 5K imgurians favorited the post. I was really proud, even several software engineers praised the post. It really took me by surprise since well I am self-taught. I haven't done much tech writing since, though I have been more involved in the open source community. I think is time for me to step up and contribute a bit more. Here's my list of tips for beginner programmers not in any specific order. I've done some minor edits from my original post. This year I am set to complete my biggest project ever called CrystalPlot, a plotting tool for industrial automation, more on that on a future article.
Know your goals. Whether is to make a game, a mobile app, a website, whatever you goal is, make it clear from the beginning. A good plan is to make a calendar, and add chapters to it and try to stick to the plan.
I am self taught, and it beats me how many books do not even talk about unit testing at all. I went many years without knowing anything about unit testing. Once you learn it you will begin to slowly stop using so many print statements all over your code. Unit testing is an easy way to test code against different scenarios.
Pro Tip: Raptor Flowchart, if you want to go for it Python is a good choice too.
A difficult choice as well, in my humble beginnings I didn't know exactly what to do after having learned a programming language. Definitely pick something you have a passion for. Inventory system, Bank system, or a parsing library. In addition you could also contribute to a repository and learn at the same time. Whatever it is, don't overthink it, just build it. Trust me on this one, I waited so long thinking I needed to learn and learn more.
Pro Tip: Don't google how to build an entire project, instead design your program specifications on paper. Write down a list of milestones. Write your program in small steps. I think this is a huge problem for beginners trying to take too much at once. If you get stuck along the way seek for help, StackOverflow, YouTube, Google. Chances are what you are looking for is already out there.
Git is a must if you are doing any type of programming. You can keep track of your projects and perhaps get others interested in your projects. The nice thing about Git is that you can keep track of all your revisions, and make branches for a future feature or a bug that you are currently working on.
In GitHub you can browse other people's code and learn from it. In programming you learn by writing code, reading code, and fixing code. Mentors are also really encouraging, but I never found one or rather never looked for one.
It goes without saying a good programmer doesn't make a bug free program, but knows how to fix it. Learning to debug is by far the biggest weapon in your toolbox.
Different problems require different approaches. Perhaps you've heard terms like MVC, Facade, Singleton, Observer, etc. There are three basic design patters, structural, creational and behavioral. Learn them well you'll thank me later.
Most programs have data of some sort. And it should be handled efficiently, this is were DS and efficient algorithms come into place. A good place to start is UNSW elearning. Professor Richard Buckland is great and his classes are usually fun and interactive.
This one is a given, once you learned the basics, books will throw terms like polymorphism, encapsulation, etc. Do not be afraid. Objected Oriented is a great way to have clean and maintainable code. Most modern languages support OOP nowadays. There are however other programming paradigms have a look on the below link to learn about them.
A text editor is really all you need in the beginning. Then learn how to compile and run programs from terminal/command prompt. As your programs grow I suggest switching to an IDE, but give both approaches a try and see what works best for you. I use Intellij, Sublime Text, and terminal.
Very important to learn the aspect of documentation, SDD, software design documents. And also commenting your code well.
As your project grows the ole print makes it hard to trace code. There are plenty of choices for just about any programming language. Coloring, filtering, levels, are just a few good qualities of a good logging framework.
In the end is all about finding your niche and taking it to the next level, whether is building websites, games, mobile apps, console applications, or desktop applications. I hope this small list gives you a small glimpse of what I think are some great tips. I wish you the best in your software development career.