My Coding History

A few weeks ago, in a Discord server, we started talking about programming languages and our experience. Which one do we prefer, the one you started learning to code, which one is better, that kind of stuff.

That conversation made me check my history in terms of programming languages, so here I’m trying to list all the languages I had to interact with over the years, including university.

The First One

My first language was Basic, on the TK 95.

The TK 95 was a clone of a ZX Spectrum. Let’s put it this way: it was the Spectrum from  South America.

I don’t exactly remember the dates, but I could guess my first line of code was around the age of 11-12. My parents bought me the TK 95. Obviously, my primary purpose was to play games on it. The nice thing about this computer is that it came with a manual (an actual book!) explaining how to code on it. 

The first program I wrote tried to make a graphical representation of a wormhole of sorts. The idea was to create a kind of tunnel, so I wrote a simple program that drew several consecutive circles, reducing the circumference and position of each one. I also remember the feeling of writing code for that program; it was awful, and I never touched it again.

As a matter of fact, I only did something else coding-related once I started my Software Engineer career at the University. For the record, I never finished it.

University Time

I think my career plan at the time was 97, so a lot must have been changed in the current plans. At least, I hope so because, at that time, we learned a lot of useless concepts and programming languages.

Pascal

Pascal was the first language they taught at the time. To be honest, at that time, it wasn’t a bad choice. To learn the fundamentals of programming, Pascal was great. It is a simple and straightforward language, which I believe was designed for teaching. I don’t remember particular cases or exercises, but it was a good time.

Modula-2

This was my first interaction with university stupidity. What a waste of time…. I don’t know who had the brilliant idea of having a course with Modula-2, but it was by far the worst programming experience. It was so dull and awful for me that I erased everything from that experience except the name of the language. It didn’t teach me anything and, of course, had 0 impact on my career as a software developer. I know the language had applications outside of university, but as a student, it was irrelevant.

ASM

Uff Assembler (aka Assembly or ASM). This is one of those languages you understand why they teach it, but is it necessary to make it an entire course while you teach computer architecture? I really hope this is not there anymore, at least not in that form. As software engineers, we must know how things work inside the computer, and knowing ASM is important from a teaching perspective. Still, we could have a lighter course and teach the same concepts. 

It was also my second interaction with university stupidity because this course was what we called a filter course. Courses made purposely hard to reduce the number of students that can continue their careers. It wasn’t uncommon to find people re-do this course for the 3rd or 4th time. Sure, some maybe should have switched careers, but others were capable people having difficulty with an unnecessarily challenging course.

I still remember the project for this course, make the Snake game in Assembler…how that helped with computer architecture and the prospects of making something in Assembler, I am still trying to figure it out. But at least it was game dev related…

C/C++

Finally, an actual programming language, and oh boy, what a thrill. My first interaction with C/C++ was fantastic. I put them together because I don’t remember which one went with which course or if it was a mix of both in the same course. Either way, when I started working with C, I felt like it was the first time I really started coding. We used C to learn memory management, structures, and pointers, and then we moved to C++ to learn OOP.

In my opinion, if you are serious about software development, you have to learn C++ at some point. The stuff you learn with C++ is not ordinary in other languages. You have to understand how memory works, concurrency, threads, debugging, all concepts essential for any software developer. I apply some of the things I learned with C++ to this day and even understand some features in new languages as C++ concepts.

Others

There were other languages like Java and SQL, but honestly, I don’t remember anything special about it. After C++, anything else looked kind of trivial regarding programming languages. So, anything else after that point is kind of a fog in my memory.

Professional Experience

Visual Basic

After all that time in the University learning all kinds of not-so-useful things, the first language where I had to develop a product was Visual Basic (VBA). At that time, it was a popular language, easy to learn, and great coding environment. Unlike most people, I liked Visual Studio, maybe because it was my first development environment.

To be honest, I didn’t learn too much from this experience. Visual Basic is not a language where you get too much complexity, that was one of the highlights of the language. Either way was an excellent way to start doing things for real.

C++

Yes, finally, an opportunity to build software in a language that I really like. If anyone asked, “Do you know how to program in C++?” after the university, my answer would have been an “Of course”. After a month in this new job, I understand how wrong that answer would have been. The university never prepared me for a job in the industry; it gave me the basic concepts and tools to understand many things but not actual experiences that could relate to a real job, at least not in my experience.

This first job was building software for TELCO companies. Software that had to interact with low-level protocols (directly from hardware interfaces), interact with several components external to the application, in a distributed environment, process hundreds of connections and messages per second, and had to compile in Windows and Linux machines. You can see how the experience at the university felt short, to say the least.

It was my most challenging work, but it was also where I learned the most about software development and C++ programming.

Objective-C

The starting point of my career as a Mobile Developer was with Objective-C. It was also when I started to understand that software development is not just about the language but more about the environment and frameworks we use.

Either way, I enjoyed my time with Objective-C. It wasn’t C++, but it still felt familiar. At that time, ARC wasn’t a thing, so all the memory management learned from C++ was relevant and immensely helped me. I won’t say it is a great language, but Objective-C holds its ground at that time. I would prefer they used just C++, to be honest, but it was a fun experience nonetheless.

Java

Java was the second language I had to learn for mobile development. Everyone wanted their apps on both platforms, and Android used only Java at that time.

For some reason, I feel I know less about Java than I should. I made a lot of Android applications, but the framework around it allows you to develop using Java without knowing too much about the language itself.

There are some rivalries between C++ and Java developers. No idea of the root of it, but I never cared too much about it besides just to piss off some friends. My interest in Java was merely to build Android applications. For me, it was more of a tool than anything else, so I never dived too much into the specifics of the language. I enjoyed my time with it a lot, but primarily because of the type of products I built with it, not because of the language itself.

Swift

The response of Apple for a modern programming language for their platforms was Swift. And of today, it is the language I use daily. Objective-C was kind of a Frankenstein language. On the other hand, Swift has been developed to give Apple developers a modern approach to programming, building the language entirely before moving to the frameworks of the particular platforms. That’s why Swift is open source, and you can build whatever you like, even web applications. For me, that’s the key to making a programming language robust and with a long life ahead.

I enjoy a lot working with Swift. The language is designed in a way where the code is elegant and simple at the same time. A lot of the concepts force you in a way to build things in a better way. Of course, you can do any aberrations you want because you have the liberty to do it, but if you are a decent developer, coding in Swift feels just right.

Others

It is not uncommon for developers to learn other languages for a short time. That has been the case with languages like C#, HTML, JS, TS, etc. I just learned the basics to solve a specific problem for these languages and never looked back. I feel like a lot of developers can relate to that.

Special mention to Kotlin. Google adopted Kotlin for the Android platforms, kind of as a response to Swift. I can read and write code in Kotlin. If I had to jump into a project in Kotlin, I could handle myself very well, but I only dig a little into the language itself. Still, it is a good language, but it feels like Google should move away from it at some point. I think they should do like Apple and build their own language with the Android platform in mind.

Final Thoughts

This article was born as a discussion on which languages are best for learning software development and the most useful.

From my experience, the programming language itself is not the most crucial part of software development; knowing the tools you need for the problem you are trying to solve is vital. Once you get enough experience, learning a new language is not a big deal unless you go to a completely different paradigm. You need solid coding knowledge, with all the basics really incorporated. After that, it is more of learning the capabilities and frameworks of the language and/or platform than learning to code.

That being said, C++ is one of those languages that will teach the fundamental blocks required to be a decent coder. In my opinion, if you are serious about this career, at some point, you had to work with C++ and learn to do things from scratch, that will help immensely in your career…at least it did for me.