With news stories earlier last year following the Raspberry Pi foundation‘s mission to get computing science taught in schools, a lack of programming skills amongst British citizens have been highlighted. For the past 15 years (± 5 years) schools have taught ICT (Information Computer Technology) skills, which are useful, but have left a whole generation of children and young adults without valuable coding skills within the early 21st century information age. A small number of schools teach computer science, however this has not been the norm due to the National Curriculum’s ICT policy; this maybe about to change.
One may ask why should this matter? Well within the 21st century it matters because of our dependence on computing and information technology for so many aspects of our lives. During the first golden age of home computing in the UK and many other countries around the world, the Sinclair ZX-81 and ZX Spectrum, Commodore VIC-20 and 64, Acorn Atom, Acorn BBC Micro (Proton) and the Acorn Electron brought the ability not only to play computer games, but also enabled children and adults to use these micro computers to learn programming and how they worked.
BASIC was the primary programming language one would learn, aided by computing magazines and TV programmes of the era. Instructions with computer code could be programmed into a home micro and saved to cassette or disk. I can recall spending many hours coding into my ZX Spectrum a program which would allow one to land a lunar module onto the surface of the moon. It was these experiences that enthused and engaged my passion for computing.
So how do I enter into the world of computer programming?
It is never too late to enter into the world of computer programming, for young and older alike. While learning to program may not be everyone’s idea of fun, learning rudimentary programming skills and having a reasonably competent understanding of how computers and communication devices work is an essential skill for the 21st century. However if you would like to know more than just the basics, what can one do?
A previous route would be to study computer science at school level, arguably a route that has not been available to many, following a beginners GCSE guide through to A Level computer science, then moving onto an undergraduate computer science degree. Fast forward to 2012, if you are at schooling age, programming tools such as ALICE, Scratch or Kids Ruby maybe a good place to start. There is a good article written by Emma Mulqueeny called “How to teach code” which provides further information.
However if you are no longer at schooling age and want a doorway in, then I would recommend a general computer science book for beginners. There are many books available, finding the right book for your learning needs will aid your learning. A quick web search for “beginners computer science” or “computer science A Level” should provide a list of book resources.
If you already have a good basic understanding of computers, for example grew-up in the world of ZX Spectrum, BBC Micro (Acorn Computers), Commodore 64, Atari ST, Commodore Amiga, or the early Disk Operating System (DOS) versions of CPM, DR-DOS, PC-DOS or MS-DOS then you will most likely have been introduced to BASIC (Beginner’s All-purpose Symbolic Instruction Code) programming and possibly also the world of machine code.
For all of those who still recall the golden age of computing under the ZX Spectrum, check out Dave Foreman’s unofficial “Sinclair User” website. In particular you might like to start reading articles on “Machine Code“.
If you want to jump the basic introduction to computer science or have a good enough background knowledge, the next stage is to look at books for high-level coding, such as with Pascal or ‘C’ family programming languages. A quick web search for “beginners programming” should provide a list of book resources. There are also many on-line resources and learning-apps available. A free resource worth mentioning is codeyear.com, which aims to provide learning materials on a weekly basis for a year to educate one on becoming a programmer.
Many applications that run on Windows, *NIX (UNIX/Linux) and Macintosh Operating System (OS) are generally compiled using a form of the ‘C’ programming language. If you are committed to becoming a programmer, then one should delve into the ‘C’ language family, with a comprehensive book that takes you from starter to advanced. A small caveat: regardless of age if you would like to see quick results, there are many other high level languages to start with, such as BASIC, which is still a favourite of mine.
The ‘C’ programming language family main flavours consist of: ‘C’, ‘C#’, ‘C++’ and ‘Object-C’; there are also subsidiary languages such as Java (programming language). Generally speaking, the ‘C’ language family has differences in the form of syntax used; this is similar to the grammar rules of a language. Writing code can be done with text editors. However to make coding tasks easier, all modern operating systems (Windows, *NIX and OS X) have Integrated Development Environment (IDE) tools to aid a programmer. In general all modern operating systems can compile the ‘C’ programming language, the root ‘C’ language, using a compiler such as gcc.
If you use Visual Studio on Windows OS and associated ASP.NET, you would most likely use ‘C#’ language; however you could also use a ‘C++” compiler and language. For Macintosh OS X and iOS the choice of language is ‘Object-C’ with IDE Xcode. For Unix/Linux OS flavours you could use ‘C’, Object-C and ‘C++’ languages. Java programming language can be coded on all popular OS platforms.
Once you become competent programming in ‘C’, you should expand your language coding abilities to include scripting languages such as Python, Pearl and PHP; also learning Java would be advantageous. Then further expand your programming skills to include HTML and XML languages.
Another area to learn about is databases. There are many different flavours of database, the more popular Relational Database Management Systems (RDBMS) are SQL language based, for example: Microsoft SQL, MySQL, PostgreSQL and Oracle SQL. Many applications including web-based applications will store information within databases.
While mastering a scripting language, HTML and databases, it would also be advantageous to consider learning more hard-core computing skills such as machine code in the form of Assembler language, computer hardware functionality, networking and disk storage systems. This will help to improve your overall understanding of computer science.
However learning how to code is not enough in itself. Learning how to draw goes hand-in-hand with learning how to code. Learning both programming and drawing skills together will be advantageous for working in the video gaming and visual effects industries; in short, skills working towards becoming a polymath. If you are a musician or have music theory training, you already have an advantage.
Once you have mastered a ‘C’ language, scripting languages, SQL, assembler, drawing… you may also consider expanding your programming skills by learning new computer programming languages, such as Fortran as well as other scripting languages. This will be dependant upon the field of work you wish to follow, or maybe for fun, or just to seek new knowledge.
Family computers can be expensive and complicated machines. Most families would be cautious about allowing a family member to install development tools for coding. Netbooks and low-cost PC laptops can be used with Windows OS to install IDE applications. An alternative is to install a Unix OS like PC-BSD or a Linux OS like Ubuntu with IDE tools. For those who understand a little more about computers, there is also the Google Chromebook which can be modified to install a copy of Ubuntu and IDE tools. Windows, UNIX and Linux OS can also be installed into a virtual machine environment on your existing computer using VirtualBox or other virtualisation technology. Also a USB flash drive or SDHC card could be configured to boot a *NIX OS with IDE tools installed if one has supporting hardware.
A more simpler solution is about to become available with a new inexpensive computing alternative provided by the Raspberry Pi foundation. The Raspberry Pi computer will come in 2 models, A and B. Model B will have in addition to model A, ethernet networking and more memory stacked on the processor. Model A is set to retail for $25 (£16) and model B for $35 (£22). The early releases during the first quarter of 2012 will not come with a case, they will be exposed computer broads, however cases will be available later for both models. A keyboard and mouse will be required as well as a TV with coaxial or HMDI input; the Raspberry Pi is capable of full 1080p video output. A power adaptor or batteries will also be required; a standard phone charger will work with the Raspberry Pi. The Raspberry Pi’s computing function is based on an ARM1176JZF-S 700-megahertz (MHz) processor that will be capable of running Linux or RISC OS. Fedora, Debian and ArchLinux will run from SDHC cards and external USB devices such as HDDs (Hard disk Drives) can be attached.
Raspberry Pi is the successor to the BBC Micro and follows on from the first golden age of computing in the UK during the 1980s-1990s.
I have provided below a small selection of recommended books, programming tools and an inexpensive hardware platform to work from. Although there are many resources available, these recommendations are useful as a guide if you don’t know where to start.
- For Macintosh OS X: Objective-C For Dummies, Neal Goldstein, 2009, Wiley Publishing Inc, 978-0-470-52275-2.
- For all platforms, take a look at “C All-in-one desk reference for dummies“, Dan Gookin, John Wiley & Sons, 978-0764570698.
- Drawing For Dummies, A Reference for the rest of Us!, Brenda Hoddinott, 2003, Wiley Publishing Inc, ISBN 978-0-7645-5476-6. This edition has been superseded with a new 2011 edition.
Tools for programming
- Macintosh OS X: Xcode, Code::Blocks, QT Creator, GCC.
- Windows OS: Visual Studio/Visual Studio Express, Borderland C++, Code::Blocks, QT Creator, wxDev-C++, GCC, LLVM (Clang + MingGW).
- Unix/Linux OS: Code::Blocks, QT Creator, GCC, wxDev-C++, LLVM (Clang + MingGW) and many more.
Tools for Drawing
- Paper, eraser, pencils, ruler sets, etc.
- SketchBook, Paint, Paintbrush, GIMP, Blender.
For hardware please take a look at the Raspberry Pi.
Fuse (ZX Spectrum) for Windows, Macintosh and Unix/Linux.