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
- Source code — 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
- Debugging — 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
- IDE — 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
- UML — 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
- CPU — 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
- 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.
- 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:
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- Sublime Text — One of the newest hip editors around. Fast and quite comprehensive editor.
- NetBeans — Another bloated IDE for development on multiple languages.
- Atom — “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.
- 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.
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.
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.
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!
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.
As I am not a book author (at least not yet), this is only a scratch in the surface. In case you want to know more from me, please let me know in comments — I might even write part two for this. Also all comments and improvement ideas are welcome. And as always: Thanks for your time.
I am Heikki Hellgren, Software developer and technology enthusiast working at Elektrobit Automotive. My interests are in software construction, tools, automatic testing and all the new and cool stuff like AI and autonomous driving. You can follow me on Medium and Twitter. Also you can check out my website for more information.