In the programmer communities I frequent, there's a recommendation, a bit like "get enough calcium", that goes, "you should learn a new programming language every year." These days there are so many new ones coming out that it's easy to find the languages, it's just a question of how much time, energy and attention you want to throw at the problem.
I decided to sit down and count. And you know, if I decide that I started my programming career in 5th grade (that's about where I started to get serious, I think), then I have actually done that. In rough chronological order...
Programming Languages I Know or Have Known:
Early years through high school:
AppleSoft BASIC
6502 assembly language
C
C++
Pascal
x86 assembly
College:
CommonLISP
SML/NJ
PROLOG
MIPS assembly
Dylan
Early work years:
HTML
Perl
Java/C# (I know both only a little and they're very similar, so I count 'em as just one)
ARM assembly
LPC (DGD's dialect)
Last few years:
Python
Ruby
CSS
JavaScript
SQL
Vala
Not counting because I never got seriously literate with them:
FORTH
Io
SmallTalk
So it looks like I was a slacker in my early work years, but made up for it recently :-)
I'm also not counting a lot of language-like complex things like file formats (RenderMan Shading Language comes to mind), language-like tools (Make, Jam, XiLinx FPGA design language) or protocols (TCP/IP, simple cryptographic protocols), though one certainly could. I believe it's a fairly similar kind of healthily mind-expanding. With those, as with programming languages, you don't learn much from the part that's mostly like the languages you already know. The healthy part is learning the parts of the language that *aren't* already familiar. Which is why I'm going to learn Haskell one of these years :-)
I decided to sit down and count. And you know, if I decide that I started my programming career in 5th grade (that's about where I started to get serious, I think), then I have actually done that. In rough chronological order...
Programming Languages I Know or Have Known:
Early years through high school:
AppleSoft BASIC
6502 assembly language
C
C++
Pascal
x86 assembly
College:
CommonLISP
SML/NJ
PROLOG
MIPS assembly
Dylan
Early work years:
HTML
Perl
Java/C# (I know both only a little and they're very similar, so I count 'em as just one)
ARM assembly
LPC (DGD's dialect)
Last few years:
Python
Ruby
CSS
JavaScript
SQL
Vala
Not counting because I never got seriously literate with them:
FORTH
Io
SmallTalk
So it looks like I was a slacker in my early work years, but made up for it recently :-)
I'm also not counting a lot of language-like complex things like file formats (RenderMan Shading Language comes to mind), language-like tools (Make, Jam, XiLinx FPGA design language) or protocols (TCP/IP, simple cryptographic protocols), though one certainly could. I believe it's a fairly similar kind of healthily mind-expanding. With those, as with programming languages, you don't learn much from the part that's mostly like the languages you already know. The healthy part is learning the parts of the language that *aren't* already familiar. Which is why I'm going to learn Haskell one of these years :-)
no subject
Date: 2008-08-14 03:19 pm (UTC)no subject
Date: 2008-08-14 03:32 pm (UTC)And weirdly, these days it runs pretty fast. Most language-weenie languages do very poorly that way.
I've looked at it, but found it pretty dense and unapproachable at first blush. So I've put it off until I can put more dedicated time into learning it.
S'okay, I'm still on schedule to learn a new language this year. It looks like Lua is going to be the right embedding choice for something we're doing at work.
no subject
Date: 2008-08-14 07:23 pm (UTC)no subject
Date: 2008-08-14 04:31 pm (UTC)no subject
Date: 2008-08-14 04:54 pm (UTC)no subject
Date: 2008-08-14 05:38 pm (UTC)no subject
Date: 2008-08-15 07:50 am (UTC)I think you could count Make as a language. Certainly if you push it to do serious magic. I worked on a project a long time ago that scheduled a bunch of work through a supercomputer center. I took the job requests and a list of dependencies and ran it through an architectural simulator to pack the jobs as well as possible and then exported the graph as a giant Makefile to actually launch the jobs. Make handled the run-time vagaries: say an estimated 300 second job only took 290 because of slightly higher disk bandwidth, if it could launch the next job a little earlier, it would. We tuned the architectural model well enough that the integrator for the project was ultimately willing to take the predicted run times in lieu of having to perform every multi-hour run. This allowed us to do 4-5 design iterations per day rather than 4-5 per week. We wound up winning the $(9-digit) deal and buying our main competitor.
I'd add another recommendation - call it the "Calcium ain't worth crap without vitamin D" addendum - every month, in one of the languages you already "know well", download and become passingly familiar with another module or library.
A few other ideas you might find interesting:
Cross language linking - with enough work, you can get almost any language to call a routine compiled in another language or share data structures. Similarly, there's a lot of potential magic down in the bowels of ld with linker scripts.
If you happen to like mathy things, R is cute.
Anyway, I should take my own advice more often :-) Good luck.
no subject
Date: 2008-08-15 02:17 pm (UTC)no subject
Date: 2008-08-14 07:25 pm (UTC)no subject
Date: 2008-08-14 07:45 pm (UTC)Then again, I was much more familiar with it back in the day.
no subject
Date: 2008-08-14 09:20 pm (UTC)no subject
Date: 2008-08-14 09:41 pm (UTC)no subject
Date: 2008-08-14 09:27 pm (UTC)* Being able to do useful work without any mutable references at all.
* Being able to write compiler optimization rules in your source code
I recommend skipping most of the usual tutorials and start by reading Beautiful Concurrency, and then following it up with Write Yourself a Scheme in 48 Hours. Then, if you want to understand how it works on the 'nuts-and-bolts' side, go through the book Implementing Functional Languages: A Tutorial. I spent a few weekends doing the exercises from that book and had a ton of fun.
no subject
Date: 2008-08-14 10:33 pm (UTC)