Imagine a time just 20 years ago when only the nerdiest nerds knew about the web and everyone else dialled up Bulletin Board Systems (BBS). Developers were called programmers and if they were experienced might know three or four programming languages like C/C++, Pascal and assembler. C# and Java had not been invented. If you wanted to download software, the cheapest way was go to a computer fair and buy it as shareware on floppy disks or very slow one speed CD-Roms.
It was a truly different world where programmers mainly created desktop software for Dos, Windows and Unix or games for PCs in C or assembler. Mobile phones were analogue, so there was no mobile development and barely any web development.
What has changed since then? The web obviously has had a massive impact but programmers are now developers with a far greater range of technologies to master.
Breadth of Development
The range of devices that you can write software for has gone way beyond desktop PCs. Think mobile phones and tablets or small cheap systems that you can tinker with like Raspberry-pi and Arduino. Expensive gadgets such as UAVs/Drones can also be programmed with software development kits (SDKs) such as DroneKit. Other devices include robot balls such as Sphero, robotic kits- 47 Programmable robotic kits and probably anything you can attach a microprocessor to.
But gadgets aside, commercial software development now covers many areas. There’s desktop software but these days that also includes server-side development using technologies like node.js and Java. The desktop client software is based on C# and to a lesser extent VB.NET and in multi-user systems talks to a networked server using TCP/IP. The server itself is likely to be talking to a networked database server, typically SQL Server, Oracle or maybe MySQL. As a developer you need to know some or all of the technologies used and particularly SQL – the language of databases.
Related to web development is multi-player game server development. This is programmed in C++ or Java and is high speed, real time and technically very challenging. Likewise games development is now mainly C++ and equally as challenging covering the areas of fast networking, high speed graphics, audio, AI and much much more.
Another massive growth area over the last few years is mobile app development. Learn Java, Objective-C, Swift or C# and you’ll be well on the way to producing your first app. There is plenty of learning material online and free websites like StackOverflow to answer tricky questions. Mobile development is a major growth area and like web development is one area of software development that does not require a degree to get a job. Yes you can be self taught and get a job!
Though programming languages are the hard knowledge you need, there’s plenty of other stuff that I call soft knowledge. This is what distinguishes a developer from a programmer. These are the technologies that you will encounter as a developer and the more you know the better.
Version Control System (VCS)
Almost unheard of 20 years ago except in large firms that used mainframes, a VCS helps you manage your code. Whether you are one or a hundred-strong team, a VCS lets you track changes, seeing who did what, shows you those changes and lets you revert back if needed to earlier versions. The idea is that all source code files (and sometimes binaries) are kept locked up in the VCS repository. When you want to make a change to a file you have to check it out, change it, then when the changes are done, check it back in again. No more keeping hundreds of backup zip files. Though there are great commercial VCS like Perforce there are also excellent open source ones like Git and Subversion.
There is nothing worse than introducing a regression, i.e. changing code and creating a new bug. To prevent this, there are various test systems, with the most popular being unit tests. As the software is developed new tests are added to each unit. These are run after every change to reassure you that you’ve broken nothing. Another type of test is a smoke test or build verification test. This is a lightweight test done after a build to check that it works. A much more complicated regression test is run with each release to check all the functionality.
There are two ways to build software. The first is using an IDE (Integrated development Environment), where you edit files, debug etc. Just issue a build command and you’ll get a debuggable build. The second is when you want to build a release version suitable for testing by QA. You’ll often do this with a Build System. Through makefiles or similar you define all the dependencies so the Build system can run compilers, resource builders etc to do the build.
With a complex application, it may require hundreds of files to be pulled from a VCS, compiled, run other build utilities to convert resource source code into resources and then link everything into a runnable program. Some build systems can be configured to build then run automatic tests on the built executables whenever new files are checked in to the VCS.
Bug Tracking Software
This is a management tool, often web based that lets your team track bugs and assign developers to work on them. They produce reports to show how many bugs are remaining, their severity, when found etc. QA staff will add new bugs as they test the software and then developers fix those bugs.
Spreadsheets and Databases
Microsoft Excel is a very handy tool for developers. Sometimes you need to do calculations, or you may need to prepare input data for a program. If you work with SQL then you should also have a SQL IDE. This lets you log into database servers, create databases then tables and run SQL.
Being a developer nowadays needs a lot more than just knowing a programming language. The good news is that all of the soft skills can be learned at home using free or open source software.
Written by David Bolton;
In 34 years as a Software Developer, David Bolton has worked across many different industries, ranging from finance, games programming, banking and aerospace for such firms as Price Waterhouse, MicroProse, British Aerospace (BAe) and Morgan Stanley. He has developed software commercially in 6502, Z80, Basic, C#, C++, Java, Ada and Delphi and websites in PHP and ASP.NET and is currently learning Swift.