How your first programming language shapes your perspective
It was a simple question. I did not expect a large response. I was genuinely curious though when the thought popped in my head while I was taking a shower that morning. So I posted the following on Twitter and LinkedIn and moved on with work:
What was your first programming language?
What I got was a steady stream of responses that are still going strong since a week ago. It was both a blast from the past and a pleasant journey looking back into how many of us geeks and techies got our start in the software business. I welcome you to share your first experience with programming in the comments!
My journey was fairly typical. My very first computer was the Atari 2600. My father bought one in 1980 for himself. I spent hours on it though mastering Space Invaders, Asteroids, and other classics without any concept that these games were things that were programmed.
The first programming I did was on the Commodore 64. I still played games, but I would find BASIC programs in magazines to try out. Most of these were simple things like moving a cursor or changing screen colors. I definitely was not programming flight paths for space missions.
I dove into business applications soon afterwards. Not programming them though. My father brought a Compaq Deskpro, the first desktop model they made packed with a whole 640K of memory. I was tasked with figuring out Lotus 1–2–3 and helping my dad build spreadsheets for his home projects.
During this time, my junior high school introduced programming classes for honors students as an elective. This was when I moved on from endless POKE and PEEK statements and GOTO command spaghetti to real programs in BASIC. I started to recreate the games I loved on the Atari, but also did goofy things like build a demented version of “Choose Your Own Adventure”.
It was not till college that I returned to coding on a regular basis. All engineering majors has to take Intro to Programming for Engineers using Turbo Pascal. I mostly sleepwalked through the class, and instead sharpened my skills in shell scripting to hack XTERMS in the computing lab. This built up my hacker cred and also annoyed the hell out of the English and Communications School majors that came to print papers in the lab and would find themselves logged out of their sessions.
My engineering studies led me deeper into the guts of computers. I had an Assembly language class where I was writing software drivers for peripherals and a senior project that involved writing some C code for a control unit. It wasn’t until my first job in a tech company that I truly honed my coding chops.
I joined a company that was in the business of selling its own programming environment. It was the mid-90’s and 4GL’s were all the rage. The most well known of these was PowerBuilder, but there was a thriving market for specialty tools. My company focused on high transaction volume database applications that could be compiled to any platform and database. Of course, even with a high level scripting language, I still had to jump into SQL, C and C++ code often.
This was also around the time that dynamic web apps were becoming a reality. I took an internally built sales system written in our 4GL and converted it to a functional web database application. The trick was to create a CGI/Perl script that converted screen binaries to HTML. No more distributing app updates over CD-ROM’s!
I stepped away from programming for about a decade until I jumped into startups. By the late 2000’s, interpreted languages took over, with JavaScript and Ruby. I was starting to build my own web apps using Ruby on Rails and hosting on Heroku, while picking up the finer details of front end engineering using HTML, CSS, and jQuery. When I setup WordPress sites for my projects, I would muck around with PHP.
These days there is not a huge need for me to code actively. As a Startup Advocate at Amazon Web Services (AWS), most of my work is higher level content and speaking about technology through the lens of business challenges and solutions. As I explore AWS services more deeply though, I find there is so much more that can be done without code, especially when using Amplify to easily create web apps and SageMaker to build, model, and deploy machine learning models faster.
I wondered how this would reflect in my question turned informal “survey” on LinkedIn. Turns out that BASIC had an enormous influence for people learning to code. It truly is the universal learners language. Over 62% of people cited BASIC as the first programming language they learned. That was followed by C at nearly 8% and then LOGO at close to 5%, which for the unfamiliar is the also known for its turtle graphics and being a precursor to Scratch.
Some folks also shared the next programming language they learned. PASCAL was the overwhelming choice for second language at 40% and almost always following BASIC. Then C++ and Assembly were right behind with almost 17% of responses each, which makes sense given the sheer complexity of both languages.
By far and away the most common progression for learning languages was BASIC, PASCAL, followed by a lower level language. This usually meant a compiled language such as C or C++ (or in the early 2000’s Java). Based on the volume of open programming roles I see, you could do C or C++ for the next decade and not be without work. These languages are still the bedrock for a large bulk of legacy systems and enterprise applications.
Of course, the results reflect a certain age and generation. Nowadays, the language picked up most commonly as a first language is JavaScript. Python has also steadily crept upward as a first language. We are experiencing a dramatic shift away from lower level languages to higher level languages. Abstractions are also taking away much of the heavy lifting because of API’s, cloud services, and the rise of serverless which removes significant complexity.
The way we experience code is impacted by how we are introduced to programming and by context. In my era, there was no Web, networking was limited, and hardware was not capable of much. Creativity was needed to make the hardware do more than it was expected. The folks that studied Assembly simply wanted to understand the guts of their computers to make it do things. As one person on my LinkedIn post shared:
“It was just fun to see how everything worked.”
In an era where cloud is the default deployment option, knowing the guts matters less. The context has changed. Now time and effort are dedicated to building business logic. We swapped deeper knowledge of the chips and registers for faster results and greater innovation.
How we experience code has undergone significant change in the past few decades. The best we can do in the upcoming decade is to be open to the changes from low-code tools, AI/ML, and the maturity of cloud services to bring newer experiences to developers. Given that, what do you think will be the programming language of the future?