Software Development

Introduction

Software development gives you the power to transform abstract ideas into (virtual) reality, the ability to communicate with and instruct computers, microcontrollers, web servers, and even your washing machine!

From developing software for use on a PC, to creating firmware that controls physical devices, the versatility of software is limitless.

I have had the opportunity over the course of my professional career and hobby pursuits to learn a variety of software languages, but all with varying degrees of proficiency. I have a solid understanding of all the programming languages I have worked with, allowing me to effectively adapt snippets from my previous projects or code found online when implementing a specific function or requirement.

For someone like me, AI is a game changer! For example I asked Copilot to give me some JavaScript to add a listener to my Google chart to navigate to a specific URL when I click a bar on my Projects Gantt. It replied with the following snippet:

JavaScript
// Adding the event listener
  google.visualization.events.addListener(chart, 'select', function() {
    var selection = chart.getSelection();
    if (selection.length > 0) {
      var row = selection[0].row;
      if (row !== null) {
        var url = data.getValue(row, 2); // URL is in the third column
        window.location.href = url; // Navigate to the URL
      }
    }
  });

This was more or less spot on, but I had the option of tweaking it to add additional logic, as I did.

I cannot remember the nuances or syntax of each language, given I don’t write code every day in every language. AI gives me the pointers or reminds me of syntax rules I have forgotten or teaches me something new, thus enhancing my efficiency and accelerating the development process.

The following is a list of languages, formats and tools I am familiar with, in order of proficiency and experience:

Programming Languages

  • C#
  • C++
  • Visual Basic
  • VBA
  • Python
  • Assembly (Microchip PIC)
  • Java
  • C
  • BASIC

Declarative Languages

  • SQL
  • Transact SQL
  • HTML
  • CSS
  • XSLT
  • Markdown

Scripting Languages

  • VBScript
  • JavaScript
  • TCL
  • DOS Batch
  • Linux Bash

Data Formats

  • CSV
  • Excel
  • JSON
  • YAML
  • XML

IDEs

  • Visual Studio
  • Visual Studio Code
  • Arduino IDE
  • Thonny
  • MPLAB
  • Eclipse
  • PlatformIO
  • PyCharm

Editors

  • Notepad++
  • Notepad
  • Sublime Text
  • TextPad

History

Basic

My first introduction to computers, or anything more advanced than a calculator or Nintendo Game & Watch, was at school in the 80s. The school had a Media Centre which had a few Sinclair ZX Spectrum 48K computers connected to TVs and tape recorders. I was immediately interested and started learning BASIC. I created some cool dynamic geometric shapes on screen, and a very ‘BASIC’ game. I wrote a few programs program that did some calculations for you, by asking you to input some numbers.

For the electronics aficionados, this is the ZX Spectrum motherboard:

Assembly

In the mid 1990s I taught myself PIC microcontroller assembly, having covered assembly language programming as part of my electrical engineering studies.

One of the projects that made use of the PIC microcontroller was the Microprocessor Controlled Charging System.

Visual Basic

In the late 1990s that I started dabbling in Visual Basic for Applications (VBA) to enhance functionality in Microsoft Access databases I created.

I soon moved onto Visual Studio 6.0 and started learning Windows application development (see my pLayer 3 and Russman’s Image Browser for examples).

C++, Java, .Net

In 2002, the Microsoft .Net Framework was introduced, and Microsoft made it relatively easy to switch between Visual Basic 6.0 and Visual Basic .Net. So I made the switch and used Visual basic for a year or so.

In 2003, following my enrolment at Birkbeck, University of London, I began a part-time Postgraduate Diploma in Computer Science. This course included the following subjects:

  • C++
  • Object Oriented Programming with Java & C#
  • Software Engineering – Object Oriented Analysis and Design & UML
  • Database Management
  • Data Structures
  • Computer Architecture
  • Operating Systems
  • Neural Networks
  • XML
  • Networks
  • Information Systems
  • Social Implications
  • Writing, Formal & Natural

At some point after exposure to curly-braced languages I started developing in C#, which was a relatively easy transition from Visual Basic.Net.

Over the years I wrote a number of applications, professionally and personally – mostly incomplete test applications for learning purposes, but also a few applications I intended to use, such as Russell’s Photo Browser:

Arduino C++

In 2018 I bought my first Arduino

Python

In 2018 I bought my first Raspberry PI – Model 3B+. After installation and learning a bit of Linux, and experimenting with interfacing with the GPIO pins, my first project was a Digital Photo Frame. While it’s main function was to display photos, I decided to include a climate dashboard, based on the Bosch BME 280 sensor. As Python is the mainstream language for programming the Raspberry PI and has a lot of libraries and community support, I began learning the language with a focus on practical applications.

Others

Over the course of my professional life I have learned and used many other languages (listed above), such as TCL which we used as HTML embedded scripts for an email marketing platform; SQL for database queries and stored procedures, transforming XML with XSLT, etc.