Sometimes I can’t help myself from trying to be the voice of reason in inane Slashdot threads. It’s a curse. Recently one came up entitled, “Staying On-Top of Programming Trends?“
“Trends are constantly changing, upgrading, or become popular due to high end user demand or just basic usefulness. I do my best to keep up with the trends, believing that for the most part they will be better then the current methods in place, or just comfort in knowing that if enough people use it, that there will be allot of help out there. Ultimately though, its keeping up with these trends and trying to figure out what’s a fad versus what’s actually useful that’s the difficult part. What do some of you do to keep up with the trends? Websites? Magazines such as Dr. Dobbs? Forums? I know there’s not one solve all, but for the sake of argument, suppose you wanted to stay on the forefront of Java based web development, what would you do?”
My response:
You want to know the latest trends for Java-based web development? Fewer and fewer people are going to be doing Java-based web development in the future.Fuck trends. They’re wrong. Every day the industry continues to stay with its current ridiculous technologies when vastly superior ones were invented decades ago infuriates me further. If it doesn’t infuriate you, you’re not paying close enough attention.
My advice: read Lambda the Ultimate and Steve Yegge’s blog. Endeavor to learn what the lambda calculus and referential transparency are. If you are sincerely interested in bettering yourself as a programmer and don’t go find out who Alonzo Church was then so help me God I will kick you in the balls. Learn about SML and type inference. Learn about Haskell and monads. Learn about process calculi and Erlang. Learn about Lisp and code generation and domain-specific languages. Learn about Scheme and lexical closures and continuations. Learn about Smalltalk and what OO was really supposed to be. Learn about type theory and formalism and the Curry-Howard correspondence. Learn about Forth and Joy and how you can have a powerful, expressive language without even so much as a grammar. Learn about Intercal and Befunge and just how badly your choice of programming language can torture you. Learn about UML and Ruby on Rails and Seaside and agile programming and Java generics and Python generators. Learn about aspect-oriented programming, context-oriented programming and concept programming. Learn about multi-paradigm languages like OCaml or Oz. Learn about weird Lisp dialects with syntax like Rebol or Dylan.
Realize that library design is language design. Realize that asynchronous programming with callbacks and explicit state in a world where lightweight coroutines were around in the days of fucking Simula in the 60s for Christ’s sake is cruel and unusual torture. (Sorry, pet programming construct.) Realize that the programming language research community, while considering systems programming a solved problem and generally not interested in talking about human factors, is doing some genuinely promising work. Did you know that there are concurrency models with strong type systems that can prove your system will never deadlock? Isn’t that fucking cool?
That ought to keep you busy for a little while.
By the by — I’m now working for Intentional Software. Since what we’re building is still pretty mysterious to the world, and my work now aligns pretty closely with my personal interests, I should mention that, obviously, the opinions and shit expressed on this blog are mine and do not represent those of my employer. There’s a seperate blog for that, anyway.
For the record: We are building some extremely cool things.