brainbaking/content/post/2022/05/my-programming-language-ody...

91 lines
9.1 KiB
Markdown
Raw Normal View History

2022-05-13 17:03:59 +02:00
---
title: My Programming Language Odyssey
date: 2022-05-13T16:00:00+02:00
categories:
- programming
- learning
---
Eli produced an interesting [tale of his programming language odyssey](https://eli.li/2022/05/13/my-programming-language-odyssey) today where he tries to recreate his programming language journey. I found it highly entertaining to read precisely because it's personal---and, for a change, even though the word "programming" in the title seems to emit some technicality, it is distinctively _not_ a technical article. Thank god. It seemed like a good exercise to try and reproduce the structure for my own journey, considering my previous blog post was about [learning new programming languages](/post/2022/05/on-learning-a-new-language/). Rest assured, that means the next one can be about biking or bread baking again.
## Infant dev years
When I was 11, I came into contact with Visual Basic for Applications (or VBA) to script a button on an Excel sheet via my dad's early Windows PCs. I think that would have to be Windows 3.11 but I'm not sure. A year or so later, I was hacking away with Forms in VB5 and later VB6 to create my own programs. I made a few silly things (tic tac toe, find the image behind a matrix of buttons, ...) and shady things (an automated `.ace` unpacker for those illegal rips and a networked client/server to listen in on my sister's keypress events! Those were the days).
At some point, I must have started to venture into all things `<HTML/>`, including the obligatory `<MARQUEE/>` tag (see [the Brain Baking museum](/museum)). The JavaScript and Java applets were mostly copy-paste jobs as I understood little what was going on.
In high school, creating websites took off and became really popular, especially "dynamic" ones: vBulletin started being a thing, and `$_POST` is still hard-wired into my brain. I built a complex site for my own imaginary consulting company and an actual usable one for a family member. We got into contact with C and C++ but that was limited to a few loops and a `cout` or two. On VB front, I remember thinking about module design and even collaborating with another Dutch guy I came across on the internet. We both made software for fun and started a partnership that was branded as "[deep]/aWhile software".
## Learning dev years
Things got a bit more serious at university with Java, a lot of C++ (god Qt is awful), and C#. My bachelor and master thesis was done in a combination of C# and C++ with managed libraries (watch out with garbage collection!). With some projects, we were free to pick whatever we liked, and I remember doing something in Ruby (on Rails?) that was fun. It wasn't more than dipping a toe.
Language paradigms were brought to our attention---hey, there was something else besides OO, it was called Prolog and Lisp, yay! I remember enjoying tail recursion in Scheme with the help of [The Little Schemer](https://www.goodreads.com/book/show/548914.The_Little_Schemer). I also started exploring cross-compiling on PDAs with .NET Compact. I never fully grasped Prolog though, but I'm itching to revisit more Lisp dialects.
During my university years, I dabbled in Nintendo DS development by helping port DOOM (in C++), and I released my own Linux kernel flavor with the `-klak` suffix. It was on the `2.4` kernel I think, and it contained some experimental patches for ReiserFS and CPU scheduling I fiddled with myself. It usually resulted in a kernel panic, but I learned a lot of proper C code that way.
## First work years
When I graduated, I had no idea what I was capable of (read: nothing), so I applied for a job as an analyst. Not knowing what I was getting myself into, I quickly changed course and landed on an enterprise Java consultancy job. Ant, Maven, Glassfish, Tomcat, RabbitMQ, more awful enterprise shit, ... I can't say I hated all these things, as they were new and exciting to experiment with. Still, programming at big companies wasn't like they made us believe it would be like.
With back-end stuff came front-end stuff, and I had much more fun exploring prototypal inheritance in JavaScript and doing silly things in jQuery, back when it was a thing and Node, Npm, or ES5 didn't exist. Enterprise session beans, JSF, JSP, it's all coming back, and it's bringing a throbbing headache. Glad that is over.
With the full stack also came responsibility of storing data, and even though I touched SQL before, this was the first time I saw something on a very large scale. Load balancing, noSQL offloading, entity mapping, Hibernate woes, ... All that. Back home, I tried integrating JavaScript unit tests with Java using Rhino. It worked. Within a year, it was old tech. Cool.
## More work years
Another job meant switching to C# and the world of Nuget, one of the worst package managers I've ever worked with. I also learned a lot of developers are scared and even hostile of change. They don't like to admit they don't know a programming language but don't want to do anything about that. Silly Java VS C# debates usually ended in "my language is better anyway!"---without having to admit they never explored the other side of the wall. Meanwhile, I also dabbled in Scala (too difficult) and Groovy (too loose), two hyped-up JVM-enabled languages that also compiled to bytecode.
Not that it matters much. I did: they're identical. Except that I missed Maven and Gradle...
As a developer working a consultancy job, your bosses are quick to push you towards "Java Expert" or something similar so they can charge more an hour, while you don't see any of it. I was "highly encouraged" to undertake a Sun Certification. Out of protest, I also became a Zend certified PHP architect---in vain: I never got a PHP job. Luckily, I quit consulting a few years later.
For the occasional script, I started and really liking Ruby again. Until that was shot down by the company because nobody else knows it...
## Academia years
Funny story. My PhD is education-oriented and uses qualitative research that leans towards psychology: distinctively _not_ coding. Still, the freedom and flexibility of academia permitted me to properly explore more languages than the previous years as a "real" developer in industry.
Since I had to teach C/C++, I got into GBA programming and developed a 2D sprite engine for it, a change to hone my C++11 skills. Not that I like the language, but I like the Game Boy, so I complied.
In-between research and teaching, I try to keep up-to-date with the latest Node and ES standard changes, although the more I write `async` and `Promise.all()`, the crazier I think I'm becoming. I also dipped a toe or two in Python because of a teaching assignment, but it's a very limited first-year course, so that was done with my eyes closed. I did already play with it while writing a converter for exporting my DokuWiki site to this Hugo site. I'm still torn.
Last year I decided to [took a few weeks to explore Go](/post/2021/04/exploring-go/) because, you know. It compiles natively and I was getting sick of `malloc()`. I've done a few homebrew projects with it, including the Webmention service for this site, and like its conciseness so far. I know many people dislike Go because of its "enterprisey focus" or inconsistencies, but I don't think those people have plodded in the JDK and .NET world for years and years. If I could choose between a Java, .NET or Go job, for the moment, I'd choose the latter. Perhaps because I know the least about it.
A new Android app development course this year forced me to [explore Kotlin](/post/2021/08/kotlin-is-java-2/), and although I was initially quite excited to get rid of all the Java plumbing, [Kotlin is still just Java](/post/2021/08/kotlin-is-java-2). If I _had_ to work on the JVM and interop with Java, I'd write in Kotlin---probably because if I attempted to commit Clojure code, I'd get "but I don't know any `(((`!" responses.
---
That about sums it up. TLDR:
1. Visual Basic
2. HTML
3. PHP 3 (the wrong way)
4. C
5. C++
6. JDK 1.4
7. Scheme/Lisp (a tiny bit)
8. Prolog (a tiny bit)
7. .NET 2.0
8. Ruby (a tiny bit)
9. JavaScript
10. Java EE
11. Groovy/Scala (a tiny bit)
11. "proper" C#
10. More C/C++11
11. Python (a tiny bit)
12. Node/ES6
13. Go
14. Kotlin
It's hard to pick a favorite. I'd like to learn more Ruby and Lisp dialects, that was fun to fiddle with, but my experience with both languages is quite limited. I tend to use ES6 to write scripts nowadays but that's because most scripts are for my site and it already has a Yarn/Node dependency anyway. I'm thinking about deprecating JavaScript as a go-to language, it's just getting too frustrating to do anything in. For enterprise server stuff, I'd say Go or perhaps Kotlin, although the JVM is getting tiring to work with. I'd never choose C/C++ willingly. I actually never had the ability to choose (except in small hobby projects of course) so I never thought about that.
Languages to learn to look forward to:
- Lua & Fennel
- Elixir
- Ruby 3 (more in-depth)
- Perhaps Elm? Not sure if this is going to be just a fling
What about you, what's your programming language odyssey like? Do you have any recommendations for me? Let me know! I'll blatantly ignore your assembly requests.