views:

83

answers:

5

I started my professional career in software development 31 years ago (yikes). Over the years, my working life has moved to different areas (project and program management, consultancy, solution architecture and so on). I've never totally given up programming, but it's been minor bits of assistance for others rather than anything hardcore.

If I wanted to return to serious development, what should I be studying and doing? What tools are in the essential toolkit for a modern developer? (for instance, I'm only barely competent in Eclipse, and know nothing much about recent source code management or build tools). What languages would repay study? (I've been looking at Scala, which is interesting). I'm not really familiar with things like Hibernate, Struts or Spring.

Another way of putting it might be what should be on the syllabus of my hypthetical self-taught modern software development course?

Initially, I probably would put some time into assisting with some open source projects, so things that would make me more useful for that preferred.

(Given I've been knocking around the industry for many years, I do have knowledge of a lot of technology independent software engineering topics, so you can assume I'm OK on algorithms etc, and I have pretty good knowledge of C, Perl, server-side Javascript, and reasonable knowledge of XML, Lisp. I know my way around Unix)

A: 

I think that a lot of motivation for self-learning comes from working on a project that you are passionate about. What do you want to make? What open-source project interests you?

Once you find that, then you can figure out the best way to make it. Interesting things are being made with every framework and language.

Lou Franco
I take your point, but I'm really after views on what's important and relevant in software engineering today.
Paul
+1  A: 

I am a .NET developer. I am also HEAVILY biased to the MS stack. You can't go wrong learning the .NET framework, C# and Visual Studio. Toss in some SQL Server and you will have a strong base. A large proportion of corporate development and consulting work is .NET based.

The specific direction you want to take is really up to you. If you learn C# you can code up windows apps, web apps, Silverlight, web services, etc etc etc.

You can get Visual Studio Express and SQL Server Express for free and start coding. Learn about test first development and focus on writing clean code.

Again I am biased, but this is the route I would take if it were me :)

TheHurt
A: 

Here you will get answers that will lead you to most popular technologies today. So you will face serious competition if you decide to use this new knowledge for living. Instead, you as a project manager / architect probably know better that the best technology is not the one that is most popular but the one that is the most suitable for particular task. Conclusion: define your tasks and goals, then look for suitable technologies. If you want pure coding, look into low-level (kernel-mode) programming - it requires solid understanding of computer internals and is too complicated to produce significant competition (in other words, it's harder to find low level development job, but it pays much better).

Eugene Mayevski 'EldoS Corp
+3  A: 

Things you'll need:

  • motivation,
  • passion.

From your question, I assume you've got these covered :) The rest should follow...

If you really need some more guidance, I'd say to have a look at modern languages. Things have changed a bit since 31 years, though I assume you've been following things. Java/JEE is one thing to look at for sure, though there's quite some controversy lately on what the future holds for Java. Looking at something like Scala or Clojure for the JVM might be a good idea, both to freshen up on language concepts (not that those offer things that weren't around 30 years ago, but to see them use in real-life applications in the industry is something that was long overdue, I guess) and get a bit of a competitive edge on emerging new technologies. Have a look at (J)Ruby, it might make coding more fun to get back into. Python as well. If Javascript never was your thing (won't blame you... but) still have a look at it and see what's been changing. It's creeping into server-side code as well.

In terms of IDEs, I'd say maybe just give lots of them a try. Think of it as university labs: just install the thing, find a tutorial online, follow it through and then move on to the next one. Won't make you an expert, but at least you'll have had some experience with most of them to then make up your minds. Better than nothing. Off the top of my mind: Eclipse, Visual Studio, NetBeans, CodeBlocks, KDevelop, and others... Good news for you, vi and emacs are still around too, and they still rock. Yay. :)

Now in terms of enterprise development concepts... Well, if you're into the new trendy stuff, you'd want to brush up on (here comes the buzz word, folds) "cloud" technologies and platforms. Have a look at Windows Azure, Amazon S3, Google AppEngine.

I guess it also really depends what field your on. Embedded software hasn't changed that much, maybe only the processes around it. The web stuff is very fluid and evolutive, so the bad news is that there's a lot to catch on... and the good news is that most of what you missed on the way is sort of irrelevant now. (Hey, you're lucky, now maybe your customers won't think that your application HAS to have some XML in it somewhere, just because, you know, it's sounds like what the kewl kidz do today. On the other hand don't worry, they've got plenty of other crazy things like that coming at you).

Funny that you mention lots of Java-related technologies by the way, as you have more answers tagged for C++ than Java. Is this a shift, or nothing that really matches to your professional life? In any case, C++ is still relevant, don't throw it away. Don't ignore the .NET platform and its languages as well.

Get back into "getting things done mode" and just code. Finding an open-source project to contribute to would indeed be an excellent idea.

Have a look at testing frameworks as well. That has evolved quite a bit over the last 30years. Have a look at lots of testing frameworks and different testing methodologies. Be sure to have a look at Behavior Driven Development (look at JBehave and easyb for Java, for instance. Rspec for (J)Ruby.).

Then again, who am I to teach you anything? Your SO rating kicks mine's butt, and you've been in the field 20years longer than me, so I guess you shouldn't think too much about it. Like I said, passion and motivation should help with all of the above, and your experience will help you get back on track and even to make more informed decisions on what to pick. As long as you keep an open mind and don't restrict yourself because something doesn't look "the way it used to be".

Have fun and welcome back to the right side of the fence ;)

haylem
+1  A: 

As you grok, professional SW Dev is much more than language. The entire 'ecosystem' is relevant. Unit testing, for example, is something that absolutely is part of your practice, and it does takes practice. Look at tools such as Sonar for 'craftsmanship' feedback. Check out Industrial Logic's 'albums'. Ruby is a language/ecosystem that is rich, and has a number of helpful communities for journeys such as this. In the S.F. Bay Area, there are a number of user groups; YMMV depending on your location, but it's always worth checking out. The Euler Project is fun to work through when playing with new languages.

Earl Everett