Programming Tips for Software Engineers
Tags: tips, programming
Published: 2019-01-04 10:32:48

---
title: Programming Tips for Software Engineers
published: true
description: 
tags: tips, programming
---
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.

## 0. Have the desire to learn programming, and definitely know the why
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.

## 1. Learn unit testing at the early stages of programming
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.

## 2. Pick a programming language, and go with it
 A big dilemma for beginners. There are so many options, and your options might be heavily influenced by a friend or coworker. Everyone is different, and we all think in different terms. Your choice of language should be influenced by the resources you have at hand, and also by your programming goal. For example if you plan on doing iPhone apps, then objective-c should be your pick or these days swift. If you want to build games in Unity3d then c# or javascript. As a side note, once you learn one language others come quick. A small tip here, just because you are doing console applications only, doesn't mean is not beneficial. Graphical User Interface (GUI) will come later don't worry.

**Pro Tip:** Raptor Flowchart, if you want to go for it Python is a good choice too.

## 3. Decide on a small to medium scale project with the language you've learned
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.

## 4. Learn Git or other type of Version Control

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. 

## 5. Learn from others

 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.

## 6. Learn your debugging tools

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. 

## 7. Learn design patterns

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. 

## 8. Data structures, and algorithms

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. 

## 9. Learn Object Oriented Programming Paradigm

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.
[Programming Paradigms](https://en.wikipedia.org/wiki/Comparison_of_programming_paradigms)
 
## 10. Programs to help you along the way

 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.

## 11. Documentation
Very important to learn the aspect of documentation, SDD, software design documents. And also commenting your code well. 

## 12. Logging
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.