?

Log in

No account? Create an account
Programming Languages I Know - The Mad Schemes of Dr. Tectonic [entries|archive|friends|userinfo]
Beemer

[ userinfo | livejournal userinfo ]
[ archive | journal archive ]

Programming Languages I Know [Aug. 17th, 2016|11:17 pm]
Beemer
Expanding on a twitter meme, here are all the languages I have known how to program in. (I was going to say "know", but it's been long enough for some of these that I'd basically have to relearn them.) In chronological order, with random extra details when I feel like it.

Logo: My mom signed me up for a summer kids' course at CSM when I was about, hmm, ten, I think? It probably had a bigger influence on me than it seemed at the time.

BASIC: I definitely remember making a drawing program, and sort of recall working on a "game" that was more of a choose-your-own-adventure story. It was when I was going to school in Gilpin County, so middle school.

FORTRAN 77: My freshman year of college (at CU, before I transferred to MIT), I took a programming class. I'm not sure I can express to you how old-school it was. The lecturer would sit at the front of the lecture hall and write code live on an overhead projector using a roll of transparency film.

C, C++: At MIT, I didn't take the intro to programming course for CS majors, which taught you Lisp, I took the one for civil engineers, which taught you C. I learned C++ from Ed Kohler, who managed to brain-dump everything important about OOP to me in an afternoon when we were sitting around one day.

csh, perl, & IDL: I list these all together because I became proficient in using them while I was in grad school, and it was kind of all at the same time. I used to be a big perl aficionado, and I still feel that Larry Wall hit up on a deep truth in listing the three primary virtues of a programmer as laziness, impatience, and hubris.

Objective C: I also learned ObjC in grad school at the Santa Fe Institute summer school program, in order to program simulations using a system called Swarm. Never really did anything with it, but it was good to be exposed to it; ObjC is very Smalltalky.

Tcl/Tk: After grad school, my first Real Job was a consulting gig I got through my friend Tom Ottem's employer to rework the UI for a climate change scenario generation tool. It was all written in Tcl/Tk, which I knew nothing about before starting, but I figured I'd be able to pick it up fast enough. Happily, I was right. I enjoyed working with Tcl/Tk; it has some nice features. I think it was also my first time seriously dealing with dynamically-constructed code, which can be fun stuff.

Aside: the existing code for that project was dire, and I had to refactor the hell out of it to implement the requested features. From time to time I also had to peek at the source code for the engine behind the UI to figure out what was going on with the data files the UI accessed, and that was written in, oh joy, FORTRAN 77. And it was seriously Old Skool F77, that used fun tricks from back in the day like reusing chunks of common blocks to hold new and different variables without having to reallocate memory. If you don't understand why this is horrifying, be grateful.

Java: I learned Java to work on an educational computer game about natural hazards. Generally it's fine, though there are a lot of little details about it that I dislike. It's been close to a decade; I don't know if that means it's gotten better or worse since last I touched it.

Processing: Does it count as a separate language? Maybe sorta. Processing is a dialect of Java (plus IDE) designed for teaching programming and for art. I did a bunch of little art projects with it back in its early days. I still have a folder of them somewhere on my laptop.

NCL: Since I work with climate model data all the time, it was pretty handy to learn a domain-specific language for dealing with it. The pros are that the language's data model matches the field's primary file format, and there's a huge library of valuable domain functions. The cons are that the syntax is kinda fortranny (bleh), and you can't overwrite a variable with a different data type or array size; you have to delete it first. I have written a whole bunch of little tools in NCL that I made sufficiently general-purpose and modular that nowadays I don't have to use it much anymore. Thanks, past me!

Python: At some point in the past decade or so I learned enough Python to have used it for at least one data processing project. I'm hardly fluent, but I can get by. I don't think I'll ever be a fan of syntactical whitespace.

R: I started out learning R to make use of the code that the statisticians in my division write, but I have developed a great fondness for it as a general purpose data analysis language. Functional programming, lazy evaluation, vectorization, flexible argument binding, non-standard evaluation, computing on the language... it's just got so many cool features that are crazy-powerful if you can figure out how to use them well.


I may well have forgotten one or two. And the bottom end gets weird: do I know javascript? Well no, but I can still make it do things. Still, that's a pretty good list.
LinkReply

Comments:
[User Picture]From: ocschwar
2016-08-18 03:38 pm (UTC)
I believe you meant to write "IDL (no, not that IDL, the other IDL)"
(Reply) (Thread)
[User Picture]From: dr_tectonic
2016-08-18 05:04 pm (UTC)
Actually, I think I mean that IDL. It's the other IDL that's actually the other one.
(Reply) (Parent) (Thread)