Thursday, November 17, 2005

Programming Languages

DISCLAIMER: If you are not a software developer, this post is not going to make any sense to you. Sorry in advance.

R's post about compilers got me thinking about just how many different programming languages I know or used to know and which ones I liked and disliked. Lets run the list:

Basic: Ah...my very first programming language. The original IBM PCs would boot to a Basic compiler if you did not insert a disk. I learned to program from a 500 sheet print out of my grandfather's custom business software. I wrote some truly hideous code on this bad boy.

  • Good memories: Learned to type. Building everything with "if" and "goto".

  • Bad memories: Building everything with "if" and "goto". Having to update the line numbers and goto statements of 20 lines of code because each line was numbered and you ran out space between while tweaking something.


C++ : My first programming classes in college all used C++ as the teaching language.

  • Good memories: Learning object oriented programming (sort of). Learning how computers and memory actually work on a PC. The joy of discovering emacs.


  • Bad memories: Being awake at 3:00am trying to figure out which F#$*ING pointer I forgot to check for null. Using "cout" as the debugger. Using vi before I found emacs.


C: I always found it a little odd that I learned C++ before C in college. It was a lot like math where you learn how to do stuff before you ever get around to the why. C was part of our computer hardware course, because decompiling C is WAY easier than decompiling C++. C sucks by the way. Unless you are writing device drivers or some other bare metal stuff, skip this one.

  • Good memories: Realizing that printf is your friend.
  • Bad memories: Realizing you don't have <stl>.

SPARC and MIPS assembly: The most useless languages I ever learned. Again, for our computer hardware course. I loved assembly, but SPARC and MIPS? x86 would be useful. Maybe even some DSP loven. But SPARC and MIPS? All this knowledge is completely gone.

  • Good memories: Realizing that I thought I knew how computers work, but that I really had no idea. Getting to use the branch delay slot for something!

  • Bad memories: Trying to write a decompiler for this stuff. Realizing that this stuff is useless.


x86 assembly: I learned this for my last job. x86 is the most fucked up assembly you will ever find on God's green earth. 30 years of patching in new instructions combined with the smallest register file around combined with having 18 ways to do the same thing mean I seriously wonder how in the world this platform ever took off like it did. That being said, I was actually pretty good with it for a short while. I could even do that thing from the Matrix where they look at a bunch of hex and see something useful (I was reading x86 stacks frames for waaaaaaay too long).

  • Good memories: Being able to figure out why the hell things like COM work the way they do. Figuring out stack traces. Figuring out calling conventions.

  • Bad memories: The pain of 4 registers.


HTML and Javascript: I know its not really a programming language, but I know a little bit of Javascript. Most of it has long and been replaced with useless knowledge about pop culture, but I keep a little around just in case.

LISP: All I remember of LISP is lots and lots of parentheses.

Prolog: All I remember about Prolog is that you can't build anything useful with Prolog.

Visual Basic: I know everyone mocks Visual Basic. I mock Visual Basic in public, but deep down I really liked it. The first real event driven, rapid development language I ever saw, VB rocked for building simple applications. VB also freed you from memory management, something it took most other languages years to figure out. If only it wasn't the most verbose language on the face of the earth.

C#: C# is fantastic. Any language that looks like C++, but frees me from having to thinking about pointers or memory is ok in my book.

2 comments:

R said...

I remember the line numbers for BASIC. Which is why every line I skipped five, or ten even, in number values because I knew even then that I would probably have to insert some extra shit somewhere.

As for this:

"Being awake at 3:00am trying to figure out which F#$*ING pointer I forgot to check for null. Using 'cout' as the debugger. Using vi before I found emacs."

NOOB! LOL!

Eric said...

I skipped 10 each as well, but I still ran into instances where I was hacking some new feature in that would not fit in ten lines. I did try for a bit trying to goto to a new section of numbers, running a few statements, then goto back to where I wanted my code inserted. Suffice to say that was a bad idea that I dropped pretty quickly.