You don’t need to be a programmer (or developer/coder/integrator), to be interested in software. Despite the name, this isn’t soft stuff! Software turns chunks of metal, glass and plastic (the hardware) with a prescribed limited range of uses into flexible, responsive, programmable machines.
This article will look at what programmable means via a somewhat meandering and eclectic A to Z tour of programming languages and related topics. First, a definition:
A programming language is made up of dedicated or reserved words, symbols and a set of rules (syntax), normally written as lines of coded instructions or statements. This code – hence coding – is used to create software programs, scripts, or single commands that tell computers to do the things that we want them to do.
(Some other possible ‘As’ are Algol, Algorithms, Assembler, Agile, AI/Artificial Intelligence, Arrays & Architecture – prompts for your own reading or future posts…did I say that it’s a huge subject!)
Ada Lovelace was the daughter of Lord Byron. Her mother promoted her interest in mathematics and logic as a reaction to her father’s poetic insanity. And good job too, she led a fascinating life including working with Charles Babbage, and producing an algorithm for his Analytical Engine. So she was the world’s first programmer working with the father of the computer! Oh, and she has a programming language named after her… Ada.
BASIC, or Beginner’s All-purpose Symbolic Instruction Code, is the simple procedural language which helped to launch a million hobby programmers in the 1970s & 80s.The BASIC interpreter (see later) was a large part of the early success of Microsoft as a bundled piece of software in early PCs.
COmmon Business Oriented Language was one of the first, and definitely the most successful, of the early languages used for large scale data processing, from its early adoption by the US Department of Defense(sic) in the late 1950’s to the primary language of IBM mainframes throughout the 60’s, 70’s and beyond.
Reportedly in 1997 there were 200 billion lines of COBOL code which ran 80% of all business programs (source: Gartner Group, 1997), which started to cause some concerns. The millennium or Y2K bug*, the inability of computers to recognise the new century, didn’t cause widespread disaster but it did – as a by-product – result in the birth of the massive Indian software industry and off-shore development. COBOL, including an object-oriented version, is still around today.
(*Ed. it wasn’t really a bug…mostly a lack of foresight)
Drupal is an example of both open source software and content management, so kills two birds with one stone! Apropos nothing in particular, the name is derived from the Dutch ‘druppel’ or drop/water droplet.
Bill Gates is famously quoted as saying ‘Content is king’, by which he includes all software as well as the more recent meaning of the words, images and video accessible through the internet and digital channels. A Content Management System (CMS) provides the means to create, organise and publish content to the various distribution channel(s), i.e. the places where your readers, viewers and customers hang out and the technologies they use there. The core Drupal software is free open source, meaning it is not owned by any one person or organisation, but is developed, maintained and used by all for the common good. The IT and technology industries are good at sharing!
To execute a program means to make the desired outcomes happen as specified in some stated needs or requirements and realised in the software design. Ironically, executing code makes it come alive!
Once you have written or acquired some program code, whether lovingly handcrafted or a mash-up of existing modules or services, you now have to execute or run it to see if it works. In this testing you may also be interested in how well it performs in areas such as speed, accuracy, usability and accessibility.
I have missed out an important step – see interpreters.
Although not something that is referred to as much nowadays, programming languages have developed and evolved in a series of generations, each becoming progressively more sophisticated and abstract than the previous. Abstraction, in this sense removed from the physical computer, helps to make code reusable, portable and, if well designed, quicker and easier to maintain. The latter is particularly important, as requirements (the underlying needs) and technology change! Problems will need to be fixed and code may need to be adapted and extended many times over its useful life. Speed to create and implement software and the [lifetime] cost of code are two important factors in choosing your programming language(s); as are compatibility, inter-operability and the skills and other resources available to you.
Other technology companies are available, but none I would suggest has made such an impact in recent years on culture and commerce as Google, essentially on the back of some very clever software and algorithms that help people find information on the web.
Google is also at the forefront of a very important paradigm in software, the integration of programs/apps, services (sometimes called widgets) and content from different sources into a single web portal, for example the ubiquitous Google Maps popping up in shopping sites.
(Ed. application shortened to ‘app’ is another word for a program.)
HyperText Markup Language is one of a set of simple tagging languages that power the web and related web-based services. Scratch the surface of any web page and you will still find the familiar pairs of tags that tell your browser (IE/Chrome/Firefox etc.) how to display the content of web files, essentially documents, a concept <i>borrowed</i> from the <b>publishing industry</b>.
Interpreters (and Compilers)
These sophisticated pieces of software are needed to convert high level, i.e. English-like, programs into coded instructions that computers (the native processor) can understand and use – literally machine code. There may be some intermediate steps such as lower-level assembler language, as well as tasks to configure and package code to deploy on the target environment, system or platform. All programs have to be converted to be tested and used, either at run time (interpreted) or in advance to create a more efficient compiled executable code.
Java (named after the coffee rather than the island, the main fuel used by programmers!) is a language, but it’s also the tip of a complex infrastructure of related software development tools, mostly open source, that allow various parts of a complex software system to work. For example; reusable components may be packaged as java beans (yes really!) to run on a Java Virtual Machine, and Java itself can reside almost anyway, from laptops, games consoles and mobile phones to the largest data processing applications.
Of course they can! As with a lot of things, if you can spark a flame of interest early enough in children they can be become natural, creative and gifted programmers.
There is still a perception that careers in IT, specifically programming, are geeky and male, but that is changing. Languages and development tools such as Scratch, Alice and Logo/Turtle offer engaging multimedia interactive introductions. There is still a need to have a technical bent (with a small ‘t’) in certain disciplines and an appreciation of some basic algebra and logic theory principles, hence the traditional link with Science, Technology, Engineering and Maths subjects at school (STEM). However, increasingly the IT industry is attracting entrants from a much wider pool of ages, backgrounds, genders, interests and skills.
Remember the comment earlier about Y2K? Well, a bit like new cars, as soon as new software is live it can become obsolete. So-called legacy or heritage systems can easily turn into a maintenance headache and even put an organization and its customers/users at risk.
This is part of the Software Problem or Software Crisis identified in the 1970’s, that continues to challenge the industry: how to manage the quality and cost of software as it becomes increasingly complex and fast-changing. There are two broad camps – and a lot of grey areas in between – that advocate either a more formal structured Software Engineering approach or lighter Agile methods.
Technology, software and programming languages are not all created equal. There is a huge variety: literally hundreds of products, development and deployment platforms to choose from. I will finish by explaining a bit more jargon that you might hear:
- Front-end versus back-end code more or less speaks for itself: the front is typically the user interface (the bit that the user can see, touch and interact with). The back end is closer to the data-processing, internally facing back-office functions, and programs that might chug away in the background or overnight.
- Middleware sits somewhere in the middle(!) and provides integration, maybe transporting or converting data and messages between disparate systems.
- Firmware lives, you guessed it, somewhere between ‘soft’ and ‘hard’ and includes dedicated program code in embedded processors as well as operating systems (see part 2 of this article), device drivers and hardworking system software that operates all the hardware.
- And lastly, vapourware, doesn’t exist! Sometimes called snake oil in the IT industry.
I hope you are finding this interesting. Maybe it has whetted your appetite for more. In the interests of word-count and your time and attention, I will stop at this mid-point, draw breath, and wait for the litany of complaints and corrections from the real passionate and professional programmers out there! I mean of course feedback and comments, always very welcome.
Part 1 will be followed, in due course, by part 2 ‘N to Z’. In the meantime I will also need to understand why Zee/Zed is so under-represented and see if there are any Zeno programmers out there 😉
(c) 2016 IT elementary school