views:

412

answers:

13

Occasionally I'll run across a developer who is unemployed and says their skills are "out-dated." These are usually COBOL developers or people who never have touched an OO language. So, I'm not concerned right now.

While I do play with mini side projects at home, tinker with different designs for enterprise apps, write a technical blog, and learn things I find interesting (the latest of which is Smalltalk), I can't help but wonder that if I don't learn something to enhance employability, I might end up "out-dated" too.

At some point, OO and everything that is "now" will become "then." So, what are the latest languages, design methodologies, paradigms, and development tools to get familiar with to prevent becoming "out-dated" and unemployed?

A: 

Clojure, no argue. I bought the book Programming Clojure from the pragmatic programmers recently (it's a "beta book" so far so you can only get it as PDF) and never looked back.

Rich Hickey (author of Clojure) has managed to strike an incredible balance, merging the best of Java, the best of dynamic languages, the best of functional languages and the best of lisp (my knowledge of Lisp is limited so I might not be spot on about that) into an incredible language.

thr
But are languages such as this going to get mainstream acceptance in corporations or development shops and be a desired skill, or more a nice to have general skill? ie does knowing X help land someone a job?
schooner
@schooner, impossible to answer really - if I could answer that I'd be filthy rich by now. Even if I don't get a because I know Clojure (or some other functional language like Haskell) I can already see how much my programming in general has evolved after leraning Haskell and now Clojure, YMMV ofc.
thr
Corrections to my above comment: 1) Even if i don't get a **job**, 2) [...] after lEArning [...]
thr
+3  A: 

This is a really subjective question so my answer will be equally subjective. It really depends on where you want your career to go and what type of technologies you like working on.

If you are a client side programmer on Windows I would say ...

  • .Net
  • WPF
  • LINQ

If you are a web dev on Windows platform then

  • Asp.Net MVC
  • jQuery

Other platforms/combinations would be different. If you clarify your interests I'm sure you'll get a lot better answers.

JaredPar
Mainly enterprise development, but I'm trying to keep platform out of it. Back in the COBOL / procedural programming days, the answer to this question would be "learn about this new OO thing... and three-tier architecture will be big too"
moffdub
A: 

Definitely Functional Programming Languages or, if you want to go really deep: Lambda Calculus

The big players are moving... you won't want to be left behind.

Ruby, Python, C#, Javascript... you name it.

chakrit
A: 

If you're after something more pure (in functional terms) look up Haskell, I've read most of the free online book Real World Haskell it's both a very nice language and the book is great, with lots of reader comments.

thr
+1  A: 

Up and coming I would say is Objective-C for Mac and iPhone development, and ongoing with HTML/CSS/JS and related web based technologies.

A good way to gauge the current hot technologies is to check your local as well as large national job boards, to see what companies are looking for.

The tough part is guessign where the market will be in 2, 5, or 10 years from now so you can be up to speed when somethign takes off. Right now my money would be on mobile and web based systems. I've seen desktop based system development slow greatly over the last few years, with everyone wanting to go to the cloud for SaaS model applications and for access from anywhere on mobile devices.

schooner
+3  A: 

If you find yourself saying, "Let's just do it the way we've always done it. Why learn a new technology when the one we have is good enough. People really don't need the new features that that technology will enable anyway," start planning your retirement.

The point being -- just make sure you're following the innovations that are being made in the field. Try stuff that's new, even if it doesn't seem like it's quite ready. When you find a new way that's better, start using it. One way to force yourself to do this is to keep innovating, or at least being a fast-follower of innovations, on things that really matter.

tvanfosson
Considered this for accepted answer as well. Questioning how we code and design is how we improve, and I'm constantly doubting myself. :)
moffdub
A: 

Besides techniques which are hands-on and mentioned before: .NET 3.5, MVC, jQuery I'd say the following is still going strong and might be interesting to know about:

Roel Snetselaar
That stuff is now because I do all three of those at work; what will it be tomorrow?
moffdub
A: 

some answers here:

What’s the next thing on your list to learn?

Gulzar
+1  A: 

Here's a trending graph that shows the current languages jobs trends.

daonb
A: 

If you're playing with Smalltalk, then you probably already have the language bases covered. My normal advice would be:

  • one "object-oriented" language, like Java;
  • one functionally oriented language, like Scheme/Lisp;
  • one language which supports interactive, incremental development like Scheme/Lisp or Python (with the iPython shell).

(For me, Common Lisp rolls all three of those into one, but your mileage may vary.)

So for you, I would go for the methodologies/paradigms side of the list. Design patterns for both coding in the small (as in Head First Design Patterns) or as architectural design patterns (as in A System of Patterns by Buschmann et al). Also make sure you're passingly familiar with UML and the ideas behind Extreme Programming.

For fun reading, I recommend The Pragmatic Programmer.

I don't necessarily have ALL the language bases covered. I have done some functional programming, but not outside of college. And I have never used a language (Erlang) that is specifically for multi-threading.
moffdub
And Smalltalk was more to get used to a "pure OO" language and one that is dynamically/duck typed, which outside of PHP I hadn't dealt with much before.
moffdub
Erlang's been on my "should look at some day". But Ruby comes first for me, since I already know Lisp well and have dabbled in Python, so it should be a short hop.Programming in a functional style, in an interactive environment, is really a joy. Easy to develop, extend, and write tests.
+2  A: 

Learn whatever gets in your way and whatever interests you, and also keep an eye on general trends. But in the end, the only thing that can save you is to keep your ability to learn fresh (which is what you're doing).

Keep doing whatever interests you, and keep trying out the new stuff -- any new stuff -- to see what you think of it. The more hammers you have, the more nails there are. On the other hand, I wouldn't even stop long to look at the trends. The world is huge and there are a million jobs for frameworks/languages you've never even cared to look at, and for those that you have. At the same time, I've heard that there are tons of jobs for Cobol programmers (I know my Mom was receiving recruiter calls until after the day she retired), and it seems that languages like C++ are still going strong for certain things.

One last thing: if you have a lot of time, start or contribute to an open source project. This gives you an inside line on a technology. I'm sure the bigshot developers for high-profile Apache projects will not be out of work any time soon :)

Yar
Right, I didn't mean to imply that COBOL is dead, because it isn't. All of our database developers write in COBOL.
moffdub
It's amazing. There are entire worlds I do not know much about.
Yar
Spoken like a true coder, a generic, pattern-based, timeless answer. I agree that on-the-job learning is essential for our field, and I think where or how it occurs is irrelevant. When we have to do it, we do it.
moffdub
Thanks Moffdub, that's what I'm shooting for with everything. Ocasionally, it comes out ok :)
Yar
+2  A: 

Another fact is getting more and more important in the future: the usage of distributed multicore/multiprocessor systems. So I would like to add Erlang/OTP to the list. It's a powerful concurrency-oriented programming environment, once developed by Ericsson, now open source, and allows very reliable and scalable application systems.

So my favorite language list is

  • Smalltalk as the most-beautiful pure OO-language,
  • Erlang/OTP as a language for extreme scalable and reliable applications,
  • Scheme as a functional language (I personally like it more than Lisp, but that's just me +g+), and
  • Prolog just to understand logical programming.

This fundament helps to find the right solution even if languages are changing.

For future enterprise architectures I would additionally suggest a deeper look at SOA/EDA/CEP. Those are larger concepts how the IT infrastructure inside a company could work together if there's a high integration of all subsystems is needed.

mue

Mue
You were a close second for accepted answer. I happen to agree about the future being about code being able to exploit multiple cores. I am strong in OO but not so strong in functional, logic, and multi-threading. All good things for me to learn.
moffdub
A: 

...or you can join software development in aerospace, that should take care of your issue for another 10 years.

They are usually 5-10 years behind in technology.

Greg McNulty