Starting software development may seem too hard and cumbersome task for many. Actually you only need a computer and a heck lot of interest in software development to get started. In this story I will go through all the basic stuff of software development and open some topics that you may not have thought before. While this story will not do the hardest work for you, it will still hopefully kick you just enough to get started.

So buckle up your seat belts and let’s go!

Abbreviations and definitions

For especially junior developers there might be some words and abbreviations in this story you don’t understand. I have collected some of the to this list so in case you find a word you don’t understand you can always come back to this chapter.

Programming language —Formal language that translates into instructions for the computer to do things

—Formal language that translates into instructions for the computer to do things Source code — Files containing text in programming language specific format. Files are where the actual programming is done

— Files containing text in programming language specific format. Files are where the actual programming is done Building/Compiling — Transforming source code to machine readable format such as executables

— Transforming source code to machine readable format such as executables Debugging — Finding out problems in the source code either with a debugger tool or some other debugging method

— Finding out problems in the source code either with a debugger tool or some other debugging method Open-source — ”Open-source software (OSS) is computer software with its source code made available with a license in which the copyright holder provides the rights to study, change, and distribute the software to anyone and for any purpose.” -Wikipedia

”Open-source software (OSS) is computer software with its source code made available with a license in which the copyright holder provides the rights to study, change, and distribute the software to anyone and for any purpose.” -Wikipedia IDE — Integrated Development Environment as in text editor with support for compiling, debugging and other software construction related activities

— Integrated Development Environment as in text editor with support for compiling, debugging and other software construction related activities API — Application Programming Interface. Set of defined methods that can be used to communicate between software components

— Application Programming Interface. Set of defined methods that can be used to communicate between software components UML — Unified Modeling Language. Modeling language that is used to visualize architecture of a system in a standard way

— Unified Modeling Language. Modeling language that is used to visualize architecture of a system in a standard way SQL — Structured Query Language. Used to manage data in relational databases

— Structured Query Language. Used to manage data in relational databases CPU — Central Processing Unit as in processor. Component in your computer which carries out instructions of computer programs

— Central Processing Unit as in processor. Component in your computer which carries out instructions of computer programs RAM — Random-Access Memory. Runtime storage for data and machine code that is being run in the CPU

— Random-Access Memory. Runtime storage for data and machine code that is being run in the CPU Software requirements — Required functional and non-functional features of software component provided from/by management, specification, customer or other party

Choosing your first language

As you may already know, there are multiple different programming languages. The hardest part is to select which one you should start with. I would see selecting the first programming language can be sum or individual value of the following:

Easy to learn and write. Languages with easy syntax and gentle learning curve can be one value you respect. If the code is easier to write you most probably have to spend less time on finding out documentation or struggling with extra long building times. Examples of easy to learn languages are scripting languages such as Python or PHP. You should check out http://www.99-bottles-of-beer.net to compare syntaxes between different languages and see what makes most sense to you. Most used language. Languages used by lots of people must have something good in them. If you want to be hip and follow the mainstream this might be valuable aspect for you. According to both StackOverflow and HackerRank developer surveys, Javascript is currently the most used programming language. Most wanted language by employers. If you want to work as a developer this might be the most important aspect of selecting the first language. As seen in the surveys the most wanted programmers are the ones knowing Javascript frameworks. This of course can change locally a lot and you should try out job search for your local area to see what kind of developers are needed the most. Currently, at least where I live, there is lots of demand for developers with knowledge of any programming language so it doesn’t matter much which language you go with. Performance. This is one of the most interesting aspect to consider when you are looking for programming language. As you may know the most modern languages such as Java or PHP are not the most performing languages on the market. If you really want to get and know the code bit by bit I suggest you dive into C or even Assembly. By tech giants. If you have a dream working for a tehcnology giant you should learn one of the company specific languages; Go for Google, Hack for Facebook and Swift for Apple. These languages are used also outside of these companies so even if you don’t land your dream job you still have the experience. Feature rich. If you are looking for feature rich language where you can utilize a lot of existing code from the language itself, I would suggest you start with Java. It has A TONS of things built-in and you can get more open-source software to help you build things.

Think what do you want to achieve with programming skills? Is it to get job, impress your friends, build a robot, construct your own website or something else? Next I have collected some areas you might be interested and what programming languages are mostly used for these things:

Websites and webgames — HTML, Javascript, CSS, Java, PHP

Microcontrollers — C++, C, Assembly

Desktop programs — .NET, Qt, C++, Java

Game development — C#, C++

Mobile game development — C++, Java, Swift, Objective-C

This list is not complete but it gives you idea what kind of search words you can use to look for the best language.

It’s not actually about the language

As you now may have an idea what language you want to start using for your first steps into development I have to let you down and tell it’s not actually the language that you should train. Programming language is, well, a language. It’s a way of expressing yourself just like any natural language. While knowing a programming language makes completing a task possible, it doesn’t necessarily turn your mindset where it needs to be. When thinking about programming there are at least the following aspects:

Problem solving. This is actually the most crucial aspect of software development. If you don’t know how to solve a problem without coding, you can’t do that even if you knew all programming languages in the world.

This is actually the most crucial aspect of software development. If you don’t know how to solve a problem without coding, you can’t do that even if you knew all programming languages in the world. Reading. If you do software you will be reading a lot. At least 80% of your time will go to reading other people’s code, API documentation, specifications etc. It’s actually very important to know how to read and understand code.

If you do software you will be reading a lot. At least 80% of your time will go to reading other people’s code, API documentation, specifications etc. It’s actually very important to know how to read and understand code. Software architecture . While you most probably won’t start as an head architect for some big project, it is still necessary that you understand something about software architecture. At least find out about MVC (Model-View-Controller) pattern and learn to read UML charts. This is especially important if you join a new team where the architecture is established and you are the one to turn the pretty images in to functional code.

. While you most probably won’t start as an head architect for some big project, it is still necessary that you understand something about software architecture. At least find out about MVC (Model-View-Controller) pattern and learn to read UML charts. This is especially important if you join a new team where the architecture is established and you are the one to turn the pretty images in to functional code. OOP . As in Object-Oriented Programming. Most of the modern languages are object oriented languages. Basically once you understand how any of these languages work you are already covering more languages than you know. So learn it well from the beginning if you are not planning to do some low-level programming.

. As in Object-Oriented Programming. Most of the modern languages are object oriented languages. Basically once you understand how any of these languages work you are already covering more languages than you know. So learn it well from the beginning if you are not planning to do some low-level programming. Databases. Some of us will never use a single database but they are still something very interesting that can add a lot of value for a software engineer. So think about learning basics of SQL just to understand how these things work and how you can use them in the future.

Some of us will never use a single database but they are still something very interesting that can add a lot of value for a software engineer. So think about learning basics of SQL just to understand how these things work and how you can use them in the future. Computer architecture. To have basic know-how what is happening in the computer should be required from all software engineers. What is RAM and how it’s used, how does the CPU work, how about multitasking? While you might not need them directly in your projects it is a good basic knowledge for everyone switching bits from zero to one (even when doing web programming).

Most of the skills developers need are not related to programming language at all. Languages are there to give possibility to do things while software developers are there to actually do these things. Never underestimate a developer who lacks skill on the programming language — he/she might know more than you think.

Finding your toolbox

What programs do I need to start writing? Actually that depends a lot of the programming language you have chosen. Most of the languages, such as C, C++, Go and Java require some compiler to build machine executable code. Some languages such as Python, PHP and other scripting languages don’t need to be compiled before running but still require the framework underneath to produce some output.

There are tons of tutorials for all major languages on the internet with information how to setup build environment for different languages on different operating systems.

For me it has always been very clear that all development is done on Linux platform. Some might argue with this and use Windows or Mac but it’s all the same — you can do software development on any platform. If you are not familiar with Linux, I highly recommend trying some easy distribution such as Ubuntu for your software development. You can even install it on tool called VirtualBox and run it inside your Windows/Mac. To do this, again, search for tutorials from the internet.

Another thing that is important to find is your text editor of choice. There are many, many text editors and IDEs you can choose from and here is a list of the most used ones:

Eclipse — IDE for development on almost any language. Very bloated especially if you install lots of plugins.

— IDE for development on almost any language. Very bloated especially if you install lots of plugins. Sublime Text — One of the newest hip editors around. Fast and quite comprehensive editor.

— One of the newest hip editors around. Fast and quite comprehensive editor. NetBeans — Another bloated IDE for development on multiple languages.

— Another bloated IDE for development on multiple languages. Atom — “A hackable text editor for the 21st Century”. Very user friendly, fast and beautiful.

— “A hackable text editor for the 21st Century”. Very user friendly, fast and beautiful. Notepad++ — One of the most used editors around. Quite basic editor in my honest opinion.

— One of the most used editors around. Quite basic editor in my honest opinion. Vim — Want to look like a hacker and still be very productive? Use Vim. (And also check out my crash course to Vim)

— Want to look like a hacker and still be very productive? Use Vim. (And also check out my crash course to Vim) Emacs — Another productivity boosting editor used by many programmers. Forever debated which is better over Vim by the programmers.

Apart from the listed ones there are huge amount of commercial editors from for example JetBrains without forgetting everyone’s favorite Microsoft Visual Studio. I suggest you try at least 2–3 editors out and see what feels right for you.

A must tool every developer should have in their toolbox is version control. Version control is used to track changes to source files by different contributors. It is a must to have if you are working together with other people and it helps a lot also if you are developing alone.

Two of the most used version control systems are Git and Subversion. While Git is much more popular these days it might be that you bumb into Subversion sooner or later. I would suggest you learn at least how to use Git and some basics of Subversion. There is awesome online tutorial for Git available here so check that out.

Your first program

When someone starts learning programming they usually start with writing a program that outputs the famous words: 'Hello world’. There’s actually a website where you can find examples how to do this in 500+ different programming languages at https://helloworldcollection.github.io if you are interested.

I suggest you start with simple “Hello world” program just to get something done. Especially if your language selection requires compiling it might take a while to get understanding how to get it built and running.

After you have all sorted out and can actually output something from your program you should think of an idea for your first actual program. It can be just simple tool for parsing input text or a small game. Start what interests you the most.

Before starting your project I suggest you to create repository for your project for example to GitHub. GitHub is an online service where you can host your Git projects, contribute to other projects and collaborate with other developers. The UI is very clever and you can easily find version history and changes you’ve done to your project. If you hesitate publishing your code to public you should still use version control for the project with for example local git repository.

The famous GitHub logo

Also you might want to be sure your program works as expected. I suggest you take a look at available test frameworks for the language of your choice such as googletest for C++ or Codeception for PHP. With the tests you can proof the functionality and prevent further defects in your code. Testing is really important especially if and when your software grows and abstracts more. Also all modern software companies do automatic testing on top of some testing framework so it’s good for your experience to have knowledge of at least some of them.

Getting help

One of the most crucial things when starting working with software is to find help. Every developer hits the wall from time to time and just can’t figure out the solution by themselves. The most important source of information are fellow programmers — your colleagues, school friends or even your family members. You should remember there is no stupid questions, only stupid answers. That also applies to questions you ask about software development.

Also you should not forget all online services there is for programmers such as:

StackOverflow — Maybe the first place to look for answers on specific topics. Very active community of developers asking and answering questions.

IRC — Good old Internet Relay Chat. Lots of channels for programmers where experts are there to help. Just search for them with your favorite search engine.

Reddit — Very popular discussion board where you can also find some answers. See for example the programming and learnprogramming topics.

Books — There is tons of literature for software development and hardest thing is to find the best books. I have few recommendations that I will collect in the end of this story.

Youtube — Also a great place to find information and used especially by younger generation programmers. Especially recorded talks from different conferences (such as FOSDEM) can give you lot of information about future of software development.

Practice, practice, practice

Apart from your just started project you should also practice software development on alternate methods. There are few (yet again online services) that are specialized in this. Just to mention few of them: HackerRank and Codility. These services allow you to complete programming challenges of different difficulties. Some companies actually use these services for pre-selecting candidates for open positions and that’s why they are also great practice for the future job searching.

One great method to learn new things is refactoring your own code. Or if you have the guts, someone elses code. Improving performance, optimizing memory usage or simplifying complexity can teach you a lot of new techniques and programming language features. You might want to consider contributing in some open source software in GitHub or invite your friends to work with your own project. Often best way to learn is reading and understanding code someone else has written.

Also you might want to participate in some training or go to school to learn software development. That might help you get started but unfortunately it will not do the heavy lifting. Most of teaching only scratches the surface of software development or is focused on totally wrong things considering your future career. From personal experience only the ones who did software on their free-time, and not only in school, actually made it to a profession.

Recommended reading

Some books you might want to consider reading:

Code Craft — Excellent book for developers of all skills. Starts from the very basics of software development and goes all the way to upper processes.

Design Patterns — Great detailed descriptions and architecture examples of most used design patterns in software construction. A must read if you ever want to work as an architect or hardcore software engineer.

Code Complete 2 — Also great book, and all hailed around the world, for all experience levels of programmers. Explains the art and the science of software development.

Cracking the Coding Interview: 150 Programming Questions and Solutions — The title says it all. If you are looking for work as a software developer, read this.

The Mythical Man-Month — This book is classic but still has very much things considering modern day software development. In my opinion it’s a must read for all software developers.

If you have more good books, please let me know in the comments!

Conclusion

No matter what you do, there is no shortcut to learn programming. Practice, ask and create things over and over again — It’s the only way you will get where you want to be. I promise you it will pay back eventually.