When I tell people I work in software engineering those unfamiliar with the job description sometimes ask how many programming languages I know. I do not really think it matters, it is a bit like asking a carpenter how many saws they know how to use. Additionally, learning new languages after a certain point becomes really easy and knowing the language is not really the hard part about programming. Yet I have become curious myself and so I have enumerated all the programming languages I know. They follow in order of learning them, a ⭐ denotes that I still use them at time of writing in some capacity.
I got a tome from the public library titled something like “C++ in 30 Days” and only made it through the first few chapters. I was able to write rudimentary programs but nothing that took full advantage of the language. I learned a lot more about it as an undergraduate because it was the programming language of the curricula. I learned a lot more of it because I was able to mix it with Objective-C to write FiveTimer. I most recently used it writing native methods for an Electron app.
HTML & CSS ⭐
I built this website (not the blog part, that’s just WordPress) around the same time I was learning C++. I initially built it using Macromedia Dreamweaver which led to a very rigid table based layout. Soon after, I rewrote the whole site with Notepad++ using proper CSS along with some PHP and it hasn’t changed much since then. (Archive.org’s Wayback machine has done a very good job of archiving all of these versions if one is so curious to see).
I took some interest in PHP for its speed and ubiquity on the web. It was also the first dynamic language where I didn’t have to worry about declaring types everywhere, a stark difference from C++. I had some fun rewriting my website with it so that I could have the same header and footer everywhere. I’ve written some small scripts and a visualization tools with it but not much since then (~2013).
In retrospect a portion of my undergraduate education was stuck in the 70’s and so LISP was used in an AI course. It was interesting to get into the mostly functional way of thinking with it, Polish notation, and countless parentheses. I’ve tried to use this for some programming challenges but had a hard time writing to
stdout. Definitely a language to look at if the spartan syntax of Haskell turns you away.
When I started iOS programming this was the only language available. I could recognize that it had some C influence but all the brackets made no sense, a book immensely helped me to learn it (Cocoa and Objective-C: Up and Running). You also had to do explicit memory management in those days (iOS 4) so that was an interesting learning curve that became unnecessary in iOS 5. FiveTimer today is still entirely written and maintained in Objective-C with some sprinkling of C++.
(Speaking of spartan syntax) I’ve written exactly one script with Perl, I had to look up how to do every single line and expression. After I got it working I decided it wasn’t for me and haven’t touched it since.
Somehow I almost forgot this one, it’s what I’ve written Android apps in and for a time did some GWT work with. I find it akin to laying on a bed of nails, it is not ideal but I am not injured by it. However, put too much weight on one point and it quickly becomes painful.
I jumped on Swift 1.0 when it came out in 2015 and started writing BitFlipper with it. It’s a really fun language to get into writing and thinking in once you get the flow down. I used it for some work projects and also for the aforementioned BitFlipper which finally got published to the app store. It’s too bad that it’s not really viable to use outside of the MacOS/iOS environment despite its open source status.
An unjustified amount of work in graduate school was with MATLAB. It does not feel so much like a programming language as it does someone just wanted a nice tool to multiply matrices and it got out of hand.
This is a magical constraint programming language that everyone should take the chance to look into for solving problems with giant search spaces. Great for solving configurations of tile-based board games.