prog lang odysseys

This commit is contained in:
Wouter Groeneveld 2022-05-13 17:03:59 +02:00
parent 70fc5726bc
commit 34b6a8e3d5
3 changed files with 105 additions and 1 deletions

View File

@ -0,0 +1,90 @@
---
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.

View File

@ -1,4 +1,18 @@
[
{
"author": {
"name": "Simone Silvestroni",
"picture": "/pictures/minutestomidnight.co.uk"
},
"name": "",
"content": "@wouter I have now updated my original post and printed the code from the shell script in the new post automation. The code was visible in the script screenshot only. You can now see I have both date and last_modified_at in my Front Matter, formatted...",
"published": "2022-05-12T12:10:44+02:00",
"url": "https://minutestomidnight.co.uk/note/2022-05-12-12-10-44/",
"type": "mention",
"source": "https://minutestomidnight.co.uk/note/2022-05-12-12-10-44/",
"target": "https://brainbaking.com/notes/2022/05/11h17m44s06/",
"relativeTarget": "/notes/2022/05/11h17m44s06/"
},
{
"author": {
"name": "Jan Boddez",

File diff suppressed because one or more lines are too long