How I became a developer
Following from my post on my journey to a cyber security career, I thought I'd address my other job - that of a software developer. I've used a number of languages over the years, some I barely remember now, and been involved in a few projects. I learnt something in every case.
Beginning with QBASIC
From memory (which is sketchy of my childhood years), QBASIC, the Quick Beginner's All-purpose Symbolic Instruction Code, was the first programming language I worked with. This came bundled with early versions of Windows[1] although the free version didn't allow you to compile your program into an executable file (.exe
) for running outside of the QBASIC integrated development environment (IDE).
To say it's a beginner's language is a fair assessment, and I was embarrassed that I looked up how to write the hello world [2] program. It's a simple case of:
Somewhere, I've probably still got the boot disk (3.5" floppy) that runs a boot menu that I wrote using QBASIC. I could have written the same using MS DOS batch scripting, but I was obviously in a QBASIC mood at the time. From memory it offered you options to run `scandisk`, boot your installed OS or run some other utilities I'd included on the disk. I even recall distributing a few copies.
As a teenager, after a bit of a bust up with one of our geeky group, I also wrote a "screensaver" to be given to the member of our group that was being nasty. The installation program was actually a trojan horse, and instead moved his My Documents
folder somewhere else entirely before saying there was an error during installation. I also wrote a fix (live.exe
I think) that put everything back again. Importantly, I thought better of the malware idea, and never released it. I guess the lesson there was "do good, not evil".
My thanks go to my friend Claire, who provided me her copy of the full QBASIC software along with its manual. That gave me the ability to make .exe
files from my code and the book allowed me to learn more.
VBScript
In the days of Windows 98 and Windows XP, that my school was using, VBScript was a handy tool for scripting management tasks. My friends and I cobbled together a script for our school to create users every August, when the new student intake arrived. When I took over as the Network Manager I was still using that script.
To get a hello world message box appear it's a simple case of:
At the time, a lot of Windows administration was done using VBScripts. Everything from bulk operations on users (or files) to adding a printer based on the computer name. VBScript is now largely deprecated in favour of PowerShell
HTML
Regardless of the semantics of whether HTML is a programming language or not[3], HTML was the next language I taught myself. Around the year 2000 I'd decided I wanted a web page on the Internet. I hastily threw something together in Microsoft Publisher and asked one of the school teachers if the school would host the site. I was told they'd consider it, but only if I coded it properly and didn't use Publisher (which output terrible HTML). I set about learning to do that and ended up hosting an early site on Angelfire (now owned by Lycos). That site seems gone, thank goodness!
Not long after that the school asked me and my friends to put together a new school website. Looking at it today I'm somewhat horrified by the look, but it met its purpose of the time. Years later, as a member of staff, I redesigned it massively. They've since moved to a new web site altogether (I stopped working there over eight years ago).
PHP
QBASIC, VBScript and PowerShell, mentioned above, are all Microsoft languages but the language I use most is PHP. I learnt PHP because a friend from IRC, Ryu, asked for help writing a new site he was putting together for Amiga OS4. Sadly that site, Intuitionbase, seems to be down at the moment.
I happily told Ryu I'd "learn PHP in a weekend" which was a big mistake. Not only did I not look at it that weekend, it took me longer to get my head around PHP than I expected (bear in mind I was also at secondary school studying). Fortunately I'd already learned a bit of C and it turned out PHP was C like in places so that sped me along. My GCSE project was an article management system for IntuitionBase although we didn't use it in the end.
I'd not long got into live action role play and the group I attended, Skullduggery, was still using an Access database and Excel to manage characters. I decided I could write a better, web based, system using PHP and mentioned this to Adam. At this point Adam didn't code but was interested so I taught him PHP. He now writes PHP for his day job and has far surpassed my skills - I learn from him now. I'm pleased to count him among my friends and mentors. Games Control, the system we wrote, is now on its fourth incarnation and we're planning a fifth. We also wrote a PayPal integrated booking system to go with it.
PowerShell
PowerShell (PS) replaced VBScript for most of my administration needs and it's quite pleasant to script with. I learnt PS to help with various tasks I was performing while supporting Windows environments and it's really nice that Microsoft have finally (mostly) used a common set of arguments across the board (it's no longer computerName
for some things and machineName
in other places, for example).
My first big project with this language was PSLogonFailures, a tool that a local IT support company still implement regularly. I expanded on that for my MSc to make it support global block lists of known bad IP addresses but haven't published that code (technically it's owned by my university). I might re-write that element at some point.
Android and Java
For the final project of my MSc I was told I had to do some "real code", by which my supervisor meant "not just a script". I decided to learn how to write Android apps and produced a proof of concept tool to help system administrators fix problems from their smartphones. The app (RESO [4]) connected to a server that ran a Java application I put together, encrypting the traffic and preventing replay attacks. If you're interested, my dissertation for that project is here.
Learning
In my early programming days, when Internet tutorials were still relatively new, I studied these languages using books. I won "SAMS teach yourself C in 21 days" as a school prize and started learning that until Christmas interrupted my studies - I've not gone back to it but I should. For PowerShell I thoroughly recommend "Teach yourself PowerShell in a month of lunches" by Don Jones and Jeffery Hicks. Their philosophy is that you shouldn't have to read chapters of theory before you get behind the keyboard, so you get to dive straight in.
Nowadays I do a lot of my learning from blogs, online tutorials, Pluralsight and StackOverflow.
My best advice to you is just to give programming a try, as that's the best way to learn. It's possible to set up your environment so it's all sandboxed, meaning anything you do won't break your computer. There's also a lot of free development environments out there, from community editions of various Jetbrains products (PyCharm for Python, IntelliJ for Java), to open source editors such as Atom.
What's next for me?
I need to continue studying Android, Java and PHP as part of my work on eVitabu. I'm also conscious that at some point I'm almost certainly going to need to pick up some Python, so that's next on my list.
Banner image: QBASIC running on Windows 98SE.
[1] For Windows 98SE you can find it on the setup CD under X:\tools\oldmsdos\
(where X:\
is your CD drive).
[2] "Hello world" is often the first example you'll find for the programming language, as it's generally the simplest program to write.
[3] Technically, HTML is a markup language that describes how a document looks.
[4] REduce System Outages