arsalandywriter.com

Exploring My 30-Year Journey Through 30 Programming Languages

Written on

My adventure in programming began back in 1997, and it has been a remarkable 25 years since then. As a 12-year-old, I first dabbled in programming on Windows 95 and 98, starting with Logo in MicroWorlds, a gift from my parents.

Once I outgrew Logo and MicroWorlds, I transitioned to Visual Basic, primarily due to its accessibility within Microsoft Office. Visual Basic 6 became my first genuine programming language experience.

Early Web Development

As the internet blossomed in the late '90s, the desire to learn web development surged. I acquired Sierra Web Artist to build my own website, and while I had some exposure to HTML 3, it was with HTML 4 that I truly crafted more intricate web pages. I also picked up CSS after a friend introduced it to me during a LAN party. JavaScript captivated me, not so much as a programming language, but for its potential to enhance web interactivity.

Like many of my peers, I invested considerable time ensuring my JavaScript worked seamlessly in both Internet Explorer 4 and Netscape Navigator 4. I favored Navigator, which may explain my loyalty to Firefox today—my go-to browser that I find superior and reminiscent of Netscape Navigator.

Server-Side Programming with ASP and PHP

The first programming language you learn often leaves a lasting impression. When I started coding, everything felt foreign. Familiarity with Visual Basic eased my transition, making VB6 my first venture into server-side development using Microsoft ASP on IIS. However, I soon sought to learn PHP, driven not only by web development needs but also by my fascination with SUSE Linux 7.2, which I adopted around 2001 as my primary operating system. Learning PHP felt intuitive coming from Visual Basic, and while the second language is generally easier, it still posed challenges, especially at the age of 17.

You might ask why I didn't mention JavaScript earlier. In its infancy, JavaScript was quite limited, functioning mostly as a slow scripting tool for basic interactivity on web pages—not regarded as a serious programming language at the time.

Education Led Me to C, C++, and C#

At 17, I began my professional education in Germany's dual education system in 2002, coinciding with Microsoft launching the .NET framework and advising a shift from Visual Basic to C#. My curriculum included C and C++, specifically the classic version lacking modern features. Initially, I struggled with C and C++, feeling lost among the complexities of programming. However, my youth shielded me from self-doubt, allowing me to dive headfirst into these languages, producing subpar C code while learning the ropes.

My passion for C blossomed through Linux. While C on Windows often felt redundant, C and C++ thrived in the Linux environment. Mastering these languages took over five years of dedicated practice.

After C, Everything Seemed Familiar

Once I became proficient in C, many other languages began to resemble each other. This was largely because C or C++ underpinned many programming languages, including PHP and the foundational libraries for both Windows and Linux systems.

With my background in C, I quickly absorbed numerous programming languages, including ActionScript for Flash, AppleScript for Mac, and even some Delphi for project maintenance. I learned WML and WMLScript during the WAP craze surrounding the Nokia 7110.

The introduction of Objective-C marked a challenging phase; I never truly embraced it. However, I was thrilled when Apple launched Swift and SwiftUI, as I never quite understood the Storyboard method of UI development.

My personal top 10 languages today are: Swift, Go, C, JavaScript, C++, CMake, SQL, Java, C#, and Scratch, with Scratch being a fantastic tool for introducing programming to children.

How I Learned Programming Languages

In my early programming days, learning was largely trial and error—perhaps too much of it. Two approaches that never worked for me: diving in without direction and solely focusing on theoretical knowledge through books. I thrive as a self-learner, finding the most effective method to be a blend of hands-on practice and theoretical study. I appreciate books for their structured learning approach, yet recognize their limitations without practical application.

Even though I learned Go in just 2–3 days, I still consulted two books to grasp its concurrency concepts and foundational design principles. In contrast, my journey with JavaScript has been entirely self-taught through online resources and tutorials, as our growth has paralleled each other.

For self-learners like me, engaging in hands-on projects alongside reading materials is the quickest way to mastering a language. It's crucial to note that the learning process is heavily influenced by one's experience as a software engineer.

Knowledge Beneficial for Programming

A programming language serves merely as a tool for crafting applications for computers and their operating systems. Understanding computer architecture, the inner workings of computers, and networking fundamentals (especially TCP/IP, IPv4, IPv6, and HTTP) can significantly enhance your programming capabilities.

The ability to read documentation and reference manuals is invaluable. My experience spans various platforms, including Linux, Windows, BSD, macOS, and more. Knowing how operating systems function beneath the surface aids in comprehending their principles and the actions your code performs.

Writing a networked system daemon in C, Rust, or Go on Linux has proven to be some of the most beneficial knowledge I've gained. This insight is essential, as networking underpins much of today's technology—your iPhone, Samsung TV, and network router all rely on it.

SQL: A Unique Challenge

SQL presents its own complexities. Just knowing how to write nested SELECT statements doesn’t equate to mastering SQL. I've worked with MySQL, which I enjoy, as well as Microsoft’s T-SQL and PL/SQL, producing thousands of lines of code for stored procedures, functions, triggers, and views across multiple database systems.

Learning SQL involves more than just the query language; it encompasses effectively designing and utilizing relational database management systems. Understanding concepts such as preventing direct table manipulation by applications and designing stored procedures requires in-depth knowledge of relational databases rather than just SQL syntax.

Ten to twenty years ago, fluency in SQL was crucial for securing a lucrative software engineering position. While this may no longer be as vital due to the emergence of alternatives, many individuals continue to thrive focusing on relational databases and SQL.

Languages I've Forgotten

With so many languages learned, it's natural to forget some over time, and that's perfectly acceptable. Here’s a list of programming languages I've not used in over a decade: Objective-C, Visual Basic, Delphi, Perl, ActionScript, Logo, OpenScript, and WMLScript.

These languages fade from memory as needs change. When I revisited Delphi after a long hiatus, I could recall aspects of it but felt like I was learning anew. Languages like WMLScript and ActionScript are lost to me; I would need reference materials to recall even the basics.

Development Environments I've Moved On From

My current primary tools are VSCode, Xcode, and vim. I have a strong affinity for Xcode, finding it aligns perfectly with my programming style. VSCode is a magical environment for a polyglot programmer, accommodating a wide range of my needs. Though I no longer use several IDEs where I once spent significant time, they were instrumental in my journey.

  • Microsoft Visual Studio 6
  • Microsoft Visual C++
  • Borland C++ Builder 5
  • Borland C++ 2.0
  • Borland Delphi
  • ThinkC and MPW
  • CodeWarrior
  • Dreamweaver UltraDev

While these IDEs were enjoyable and served their purpose, the emergence of new languages and tools necessitates evolution. With the advent of Mac OSX, many older tools became obsolete overnight. However, learning the fundamentals of vim is always a wise investment.

30 Languages, Really?

The title suggests I've learned 30 languages, implying I've written significant code in each. I have indeed created, released, and deployed applications in these languages. Here’s the complete list in alphabetical order: ActionScript, Arduino, Assembly, Bash, C, C#, C++, CMake, COBOL, ColdFusion, Dart, Delphi, Go, Java, JavaScript, Logo, Objective-C, OpenScript, Perl, PHP, PL/SQL, PowerShell, Scratch, SQL, Swift, T-SQL, TypeScript, Visual Basic .NET, Visual Basic Classic, and WMLScript.

There may be additional languages I’ve overlooked, including smaller scripting languages that I learned briefly and subsequently forgot. Thus, the total could exceed 30, but the exact number is less significant than what you can achieve with the languages you know.

The Psychological Aspects of Programming

Feeling inadequate is a common experience among programmers. Mistakes are part and parcel of the profession, given the vastness of computing knowledge. Even in the 1980s, when computers were simpler, it was impossible to master everything from chip design to UI development. It's essential to be gentle with yourself.

You Should Enjoy Working with Computers

I highly recommend "Just For Fun," the biography of Linus Torvalds. It chronicles the creation of Linux and shares personal insights that demonstrate you're not alone in your programming journey. Linus is among the top engineers in the world, having developed a widely-used operating system that he still maintains today. He is certainly a role model to follow.

Program What You Love

As you explore different programming languages, you'll discover niches that excite you. For me, mobile computing is a passion. I enjoy developing mobile apps and websites, and I relished programming for Pocket PC and Android, as well as within the Apple ecosystem.

Creating mobile web applications tailored for smartphones is deeply satisfying. However, each individual has unique interests, so I encourage you to pursue what excites you. This will help maintain your enthusiasm, even during challenging periods in programming.

Don't Overburden Yourself

Programming languages have a rich history spanning over a century, with assembly language reaching its centennial in 2049. The evolution of computing since Konrad Zuse's Z1 in 1938 has been substantial. While it's beneficial to grasp the basics, mastering every aspect is unattainable.

I was often too hard on myself, feeling the pressure to learn the latest trends, such as ActionScript for Flash applications, which I never enjoyed. I found joy in tools like Dreamweaver and Fireworks, just as I do with VSCode, Xcode, vim, Photoshop, and Illustrator today.

Focus on what you love to do and avoid being too critical of yourself. Structure your learning process, and don't dive in without a plan. Seek quality learning materials, whether books or video courses. I wish I had access to more video courses during my earlier years, as I now enjoy learning programming while relaxing on the couch.

Programming should be enjoyable. If it isn't, approach it from a different perspective—try a different field, like system applications instead of web apps, or tackle varied problem-solving challenges. Personally, I prefer technical challenges, such as developing a network protocol, over algorithmic ones. Recognize that not all programmers share the same interests.

Pursue what you love to program and learn what excites you.

Thank you for reading. Jan

Share the page:

Twitter Facebook Reddit LinkIn

-----------------------

Recent Post:

Strength Over Size: Rethinking Health and Body Image

This article challenges the notion that being super skinny equates to health, advocating for the celebration of strength over size.

Create an Interactive HTML Chat Box for Your Website: Simple Steps

Discover how to easily create an engaging HTML chat box for your website to enhance user interaction and support.

The Myth of 'Happily Ever After': A Reality Check on Relationships

Unpacking the unrealistic expectations of 'the one' and the truth about sustaining relationships.

Prioritizing Health: A Commitment for Ourselves and Others

This article emphasizes the necessity of prioritizing personal health to better support loved ones and fulfill responsibilities.

Aligning Your Life: The Triangulation Approach for Self-Improvement

Learn how to use the triangulation concept for better balance and alignment in life.

Exploring AI's Impact: Can it Truly Benefit Humanity Equally?

This article examines the potential of AI to benefit all of humanity and the challenges posed by existing inequalities.

Unlocking Insights with Google Cloud Natural Language API

Discover how to leverage the Google Cloud Natural Language API for text analysis and sentiment extraction using Python.

Navigating a Notary Adventure: A Journey Through Miscommunication

A humorous tale of miscommunication and navigation challenges during a notary appointment.