A personal insight into my journey as a coder, entrepreneur and professor.

Introduction

My life has been full of technology. From the first moment I experienced a coin operating arcade, I was taken aback by the wonder and amazement of the progress we were making technologically. When I was born, in the late 1970s, there was little in our home in terms of tech. But over the following years that changed tremendously. This article will explain how my life was impacted and transformed, and how it all culminated in me studying a Ph.D. and finally settling as a computer science professor at a university. Before even considering this though, I want to rewind to the 1980s, when my interest in all things technological began. Everyone, in my personal experience, has had a different programming journey. I hope this story will bring back happy memories for those who had similar experiences. For those who were not around in the 20th century, it will give a glimpse into this amazing time for technology.

First Experiences

Programming came into my life when I first got a computer. In 1984, I was bought an Acorn Electron that unfortunately was faulty. The replacement also had a string of issues which meant we had to take it back. Then, after deciding to choose another type of computer after this bad experience, I got a ZX Spectrum 48k. The first thing that greeted me upon plugging it into the family TV was a prompt asking for commands. Initially, the only commands I typed were to load tapes and play games, but the strange flashing cursor begging for input caught my attention.

When browsing my local library, which was huge with thousands of books, I was naturally attracted to the technology and IT section. To my absolute delight, I found books relating to my new hobby. When I got home I had no idea what the cryptic codes in the book were. After deliberating what to do, I decided to try typing in the codes into my new computer. When I had finished typing one program, I tried running it and to my complete surprise, a simple graphical demo sprang out of the screen, drawing an endless tunnel of colored squares on the TV. This was my first taste of coding and I can still remember being in a state of elation, feeling like I’d truly achieved something amazing.

Being of limited means was a blessing because buying games regularly was an impossibility. Instead, I relied on books from the library and started typing longer and more complex programs and games. I quickly learned that when they didn't run, I had to find the errors and retype the lines that were not copied well. I must have gotten through two hunderd books in the four years that I had the Spectrum and I had saved all the programs to audiotapes so I could re-load them whenever I wanted. I was the envy of the neighborhood, everyone my age wanted to come round and experience the collection I had amassed.

In these early years of my programming experience, I had by no means become a master of the trade. I barely understood most of the code I was typing. However, the increasing familiarity I was gaining with the code was the key to learning for me. I began to understand that “for loops” and “if statements” were things that allowed a coder to control flow and logic. While I was not able at this stage to write them myself, because I had no idea about how to create an algorithm, I did learn the mechanics of these commands while correcting and copying code from books.

In 1988, I got the Christmas present of my dreams, an Amiga A500. This was a huge expense for my parents at the time, I remember my father saving all year for it. This not only had floppy disks which could load programs in a matter of seconds, but also introduced me to multitasking, 32-colour graphics (and a HAM mode that allowed 4,096 colors), and stereo sound. This was my programming battle station for the next two years and proved to be a truly amazing tool that enabled me to learn music and video production, 3D modeling and a range of different programming languages.

Teenage Coding

The first programming language that I encountered on the Amiga was the version of BASIC that came with the operating system. This was instantly familiar because I had been programming BASIC on the Spectrum, and it allowed me access to the much more powerful Motorola 68000 - albeit with a big performance hit compared to other languages on the platform. The development environment was awful (Amiga BASIC was designed by Microsoft) but it allowed me to convince myself that I would be able to learn to code on the Amiga.

I spent a lot of time learning the wonders of a true graphical user interface. I also ventured into the realm of scripting. In 1992, I traded in my trusty A500 for an A600HD, my first machine with a hard disk (a whooping 40MB). This helped because it improved loading time and allows me to store all my code and applications. It also introduced me to Workbench 2.0 which had ARexx, a scripting language that allowed me to have a lot of control of the operating system. In no time, I was creating bootable disks with custom scripts and menus and this allowed me to develop a basic understanding of operating systems that was one of the skills that proved most useful in my career as a developer.

Other programming languages were also appearing on the platform. The two that caught my attention at the time were still based on BASIC but had much more powerful features than the older Microsoft BASIC: AMOS and Blitz Basic.

AMOS was a language that allowed advanced graphics, sprites, and games to be created without having to understand C or assembler. It also allowed me to integrate simple 3D wireframe graphics into my code and it was the first language that gave me creative freedom. Initially, I used it to develop text-based adventure games and educational programs. At the time, I was also studying French and I created a system for practicing and learning verbs. As an experiment, I sent a demonstration version of my software to a public domain (PD) software publisher and after a few modifications, they agreed to market it. To my surprise, people called and wanted to purchase the full version. This was the start of my commercial career in the software industry.

The other language that I learned at the time was Blitz Basic. This integrated much more tightly with the opening system and allowed me to build applications that looked more professional. It was my tool of choice after I picked up an even more powerful computer at a trade fair, the Amiga 3000. For the first time, I had a computer that was upgradable and using the money earned from odd jobs at restaurants and supermarkets, I managed to buy a 24–bit graphics card (the Picasso IV) and I started learning much more intensive coding techniques.

I was pushing the limits of BASIC at this point, and decided to make a bold step of learning 68000 assembly language. This was a huge challenge but one I definitively do not regret undertaking. After months of study and much frustration, I managed to start coding games that could take advantage of the chipsets that I was using. I got as far as developing side-scrolling platform games for myself but the inevitable shift in the computer industry towards internet-enabled architectures and cloud-based systems meant I soon realized that learning this type of assembly language would not have a bright future.

Nevertheless, learning a low-level language allowed me to develop an understanding of how software and hardware really interact and this opened many doors for me in my future career.

Doing it my way

In 1995, I had the fortune and amazing luck to get week-long work experience at my favorite computer magazine, Amiga Format. While there I did not just have an amazing time drinking beers and playing Sensible World of Soccer with the staff, but I was also allowed to have a trial writing for them.

I managed to prove to them that I could write and started a career as a freelance journalist. This meant my time was absorbed in other types of work for the next few years. I was sent hundreds of floppy disks to test each week and had to write up a monthly section reviewing and promoting the best public domain software.

While I still had an interest in programming, my days were taken up writing articles in the last days of the magazine. However, the days of the Amiga were numbered (thanks to Commodore completely mismanaging the company) and the Internet was emerging as a platform that was beginning to dominate. I couldn't help but notice this trend and while many people moved onto Windows as their platform of choice, I saw the potential of the fledgling Internet.

University Years

While a was still writing for Amiga Format and in my initial days at university, my focus changed and I was experimenting with other platforms. At university, we were taught the office administrators side of computing - Windows, Office, VB script and a plethora of proprietary software. We were also introduced to servers and UNIX and the basics of web design. I studied chip fabrication, hardware and the laws of computer science. Programming once again became the focus of my study, as it was the area that interested me most. I was more interested in becoming fluent in C and developing my skills in operating systems than learning how to create Excel automations, and this moved me away from the admin-focussed world of the Windows platform and drove me towards open source, and in particular, Linux.

Being able to modify the core of the operating system and access the inner working made learning C worthwhile and interesting. Contributing to open source also gave me a way to improve my coding skills and achieve something at the same time. It was an exciting time for open source at the end of the 20th Century: the Internet was open for the taking and large corporations like Microsoft were desperate to win dominance. They lost, of course, and open standards won.

Another thing emerging at the time was web development, and because I had an Apache server sitting at home, JavaScript became the focus of my development life. I learned everything I could about front end development and then started to learn back-end development with Java. My first major project was an open-source CRM and this became the focus for the next two years of my life.

I had a brief brush with hardware and engineering in my first job at British Telecom. I worked for two years in their network design department. But, my passion was in the open-source software that I was working on. I soon had some good fortune though, and I was offered a grant to study a Masters degree in Information Systems. I wrote to the Arts and Humanities Research board in the UK and explained my involvement in Open Source and how it was my dream to enter into research.

I spent the next year putting what I had learned myself (Java and C) into a range of practical projects that I found through the university. This caught the attention of one of the professors there, and they asked me if I would be interested in doing a Ph.D. which would involve development and prototyping. I jumped at the opportunity and spend the next 5 years developing a system in PHP/JavaScript and researching e-commerce and SEO.

Coding for a Living

While I was completing my Ph.D. I also started my first foray into the commercial world of development. I was offered the opportunity to form a company that would work on prestigious museum projects. I was the CTO and had the opportunity to design and develop location-aware mobile devices (these were based on PDAs).

This project meant I could truly use my skill set, particularly C, to develop something completely new. Since no one had done it before, I had quite a challenge. I managed to find a company in China that could provide active Radio Frequency Identification (RFID) tags and went about designing software that could make use of these. When I received the tags, however, there was minimal documentation, and most of it was in Chinese. After finding a translator, it became clear that this would be a huge task.

Mainly thanks to my experience with C and assembler in the 1990s though, it was not an impossibility. Despite the steep learning curve, I managed to work out how to connect to the RFID tags and create an application that could be used in a museum by a visitor. The key selling point of the system was that, as a visitor walked around, the device would show content and tell a story based on location (this was years before GPS and mobile phones made this type of system commonplace).

This work was something that allowed me to develop both business skills and my coding abilities, and I felt confident that I would be able to move on and achieve a lot in the coming years. After completing the projects that I was involved in, I decided to cut my ties with the company I was working with and focus on completing my Ph.D. I achieved this eventually and reached a crossroads in my career. While I had been working for several small companies doing project management and web development, I did not feel content in this kind of work.

Therefore, I decided to move back to academia and decided to move abroad and seek work in Spain.

Teaching the New Generation

Finding work in a foreign country is never easy, but having a Ph.D., work experience and practical skills meant I did find a job after settling down. I initially started teaching general technology, but this was only for a short time when my employers realized I was capable of teaching coding.

For the new generation, this is a skill that is useful for almost any type of student, from business administrators to communication and design students. I quickly rose to be the coordinator of the coding classes in the university, and also a teacher of more advanced levels on Masters degrees.

Initially, I was teaching traditional Java classes but the language was a huge challenge for non-computer science students. I was also offered classes with completely non-technical students and had to adapt the classes to make them more accessible. As a result, I am now teaching Python and JavaScript, two languages that even the most technophobic students can grasp.

Teaching programming has proven to be my vocation, as I get an amazing amount of enjoyment from seeing people go through what I went through in the 1990s. The elation when they complete their first application, the frustration and then joy of debugging and fixing errors and the satisfaction of making something that does what they intended. Research is something that I love doing, and this job means I get the opportunity to try new approaches and learn new skills while helping people discover coding for the first time.

The Future

I am not finished with learning, and I do not have the intention of ever stopping. My experiences with Python have meant I am started to teach a whole new range of subjects related to Data Science. My experiences with Linux and open source have also prepared me well for teaching administration of Big Data systems and my interests are firmly rooted in becoming an expert in this field.

The trends for machine learning and artificial intelligence mean that there are limitless opportunities in this field and I am aiming to be at the forefront.

I feel blessed to have had such a rich experience and coding had truly transformed my life in the most positive way possible. It has allowed me to find my vocation and, in the process, to experience a huge range of occupations and experiences. I hope this story inspires others to take up the challenge of learning and becoming a proficient programmer. It is a skill that gives the ability to take control of technology and one that can open doors and create unimaginable opportunities.