I'm giving a presentation at NDC 2010 and in one of the talks I'm going to focus on education and its power over your career (and you personally). There are people who mercilessly educate themselves, and there are others who are a bit ho-hum about it, feeling a bit of apathy.

If you remove all of the risk associated surrounding a "refocus" of your career - what choices would you make? What things would you learn and what would you do with it?

Think of it as a reroll, Ground Hog day, starting over from scratch today.

What platform and language choices would you make and why? Most important to me are those who are completely happy where they are - would love to hear more about what it is that keeps you where you're at.

Please do let me know what platform and tools you work with - it would help tremendously! Thanks in advance.


If I could make one change in my career, it would be to have never used Sharepoint. Fortunately I have sworn it off and moved on.


I would refuse to get caught up in the latest and greatest technologies. I think there is value in understanding and having a working knowledge of them, but a good education should be technology-agnostic.


I would, for one, have been more deliberate in my growth. First of all choosing to learn more low level info that gets handled by the CLR or other VM techs. Probably using C/C++. Then I'd have planned to cover patterns, software processes, and databases in a more directed manner rather than the market & necessity driven path which I've followed.

I'd also have spent more time with Python, Scheme, Ruby, and Pascal; and not quite as much in VB, C#, and T-SQL.

That would have probably made me Ayende or something.. At any rate, it would have made me a better dev I think.


I wouldn't have learnt about valves if I'd know transistors were about to be developed; nor transistors if I could have seen that chip coming; all those hours on bootstrappng 4-bit processors, storing databases on paper tape and punched cards; wow, Altair...Commodore...BBC micro...Apple; all that time spent on producing graphics in black and white at under 128 x 12 8 resolution, having had to solder each of the 2048 bit memory chips on the card!

COBOL, Fortran, Assembler, Algol...whatever happened to Forth...all that time 'testing' games; Space Invaders...Defender...platform games...Doom...Modems at what speed?!

Now into C#, as3, python, openFrameworks...what next? Helping people get the bug...Was the time wasted? No. It kept me off the streets (too much) but the journey is the fascination, the pleasure is the people you meet. I'll carry on playing the game...it changes more quickly every day.


Einstein wasn't wrong when he said the only thing that got in the way of his learning was his education. Learning how to think -- creatively to solve problems, to find dots and connect them, are skills that are hard to find, hard to develop, especially when we can get into a trance with technology.

I think we're most alive when we create.

So that's all I'd do. Create, create, create. Solutions for lots of problems, in lots of ways, to realize that everyone just wants to answer one question with their solutions nearly every time. "Where is everything at?"

Learning how, and why to think from multiple perspectives when looking at solving a problem is infinitely more important than the tool(s) you pick to use them.

The tools you pick will be better based on the clarity and your ability to boil things down to their essence. Tools that increase clarity and decrease confusion are good. Tools that let you (and users) get more done with less effort, are good.

Helping people make the world a better place by letting the system manage the details, and letting people manage the system (and relationships with others) is what can empower software to change the world for the better, instead of dealing with the 70% of failing projects out there.


I would have gone to uni / college. Instead of just trying to figure this out on my own.

(and become a dentist to earn some real beans!!)


Rob - Personally I am happy with the choices that I have made regaring the languages that I use. I find that there are enough changes to the microsoft stack to keep me moving forward and keep things interesting.

I work on the Microsoft Stack predominatly, with a little ALT.net thrown in for good measure.

I think that if I were to look at the rerolling my career I would look at it through pratical glasses. I would probably look at what is very popular right now and learn about those technologies and languages, as it the likelyhood is that will be around for quite a while and then branch out from there.


I would have learned functional programming early (probably lisp). Who knew that FP would suddenly become a big deal again?

I would have placed a far greater emphasis on data structures.

I would have learned C++


I would have delved more into unmanaged C++ and open source development and more languages in general, specializing in graphics animation and perhaps game programming. I would have been more proactive about using linux and cutting sharp 90 mph corners at the speed of the command line. I would have also looked into Ruby sooner... One last thing I would have done different is not being so quick to take anything that came out of Redmond as 'truth'. Not that any of their advice was 'wrong' but I got caught in the trap of thinking there is only one way of doing things. It's just different, and it's all just bits and bytes when it comes down to it. :)

I have only been doing this (Soft-Crafting) for less than 4 years but my instatiable thirst to learn more each day is what keeps this field interesting to me, it never stops changing, everday is a new challenge..and I dig that.

I am one of 'those people who mercilessly keeps educating himself', and I wouldn't want it to be any other way.


I'd reroll my warrior as Arms rather that Protection, er wait I think Cataclysm is redoing stats, maybe I'll wait... er...

I am currently a .NET developer and really enjoy what I do, focusing mostly on large enterprise applications with web front ends. I employ a relatively standard set of .NET tools, Visual Studio, Unit Testing framework, IoC, SQL Server.

As of today, I certainly would stick in the .NET platform. My experience with other languages still drives me back to .NET for various reasons--

1) There is definite "demand" for .NET skills in my location whereas other languages and skill sets still seem to be unknown or unexplored. I'd be hard pressed to find and build a career with a different comparable skill set. 2) The .NET community in my area seems to be thriving, there are plenty of events and people to learn from. I don't see that as much for other platforms, granted I don't look that hard. 3) The community is ever evolving and changing which I enjoy. Call it continuous learning /development if you like. While other platforms are certainly doing the same, the fact that the .NET community isn't stagnant keeps me engaged.

However, if I were starting over, I really would focus more first on Patterns and Principles rather than specific languages. Recently I've been much more interested in "do the right thing" vs. "getting it done". I think starting with a core knowledge set, the SOLID principles, TDD and/or BDD, GoF patterns.

Ultimately I think, this could easily translate and cross any sort of syntactical boundary or limitation.

Hope this helps.

BTW I really enjoy your TekPub series and I have certainly thought about driving boats in Hawaii for a break and a refresh ;-)


I'm just 3 months in an internship. I was a tech student in Univ majoring in CS and considering Graduation.

Though lot of things are useful for my job right now. CPP is a great choice as a programming language and I would learn more of it. But Languages and platforms can be learnt at any time, at least according to me.

I want to learn more of algorithms, problem solving and books like design patterns, concrete maths and do more OPC.

Though its just a personal choice, many of my friends feel the same way about looking forward to grad school.


I think I would focus more on Linux/Unix systems, both from a system programming and an app platform point-of-view. I have experience in Linux/Unix now, but it's mostly been self-taught at home on my own machines. Once you get on a particular platform, it's really hard to make a professional switch to another one. I think, as a junior dev, I'd try to spend my time/jobs equally in both worlds.


I would forget all about the monstrosity called C++, which has caused me naught but pain, stress and more pain. The fundamental design of that language is broken. For the simplest of errors, one gets two pages full of errors ... thanks to templates.

I use Python and Django for my web application development needs, C for low level development and Java for the rest.


Gotta sort of agree with "josh" above. I'd have preferred to learn the low level stuff with C/C++ first. Only THEN is it ok to learn what Java/C# and the other VM and interpreted languages grant you in terms of ease of use especially with memory management. The next thing I'd want to learn is software patterns, the one thing I still can't believe they didn't teach me, or even touch in 4 years of college. Also, real world web development (Java/C#/Ruby web frameworks) would have been completely awesome to learn in college, since that's where a majority of focus is directed for new jobs. I'd say I used 20% of what I learned in college, but also that 20% I could never have learned outside of college, so it's still relevant (add another 40% if you care about resumes and hirability). I'd also want to add that my years in college learning to skid past the bandwidth limitations and troubles figuring out game server limitations were also infinitely helpful in my endeavors to learn what I would prefer to work on later in life (leave the low level protocols to the smart people). After learning the basics to the real world of development, then it'd be freaking cool to be told by someone I trust that I can never stop learning...ever. Unless you don't mind drowning yourself in an enterprisey monster of a dead-end job. Luckily I've only witnessed this sad occurrence and not been a victim.


I'm pretty happy doing what I'm doing. I suppose we can all wish for something more - and maybe my more would be to have spent more time hands on in the code -- a lot of my career has been more systems integration and/or management and less coding.

But overall - I've had a pretty happy career in web development - centered around, but not completely within what has become the JEE suite of stuff.

But the reasons for happines are not necessarily locked into this one technology. I'd say they are because:

  • I'm challenged to both use new technologies and find new (or first-time) solutions to hard problems.
  • The technology area that is my speciality has a lot of fast-moving pieces, so there's always something new to learn.
  • I've been lucky to work with people who inspire me - there's a large number of smart people around my work, many of whom are smart in a variety of ways. For example, we have Smart Evil Test Guys, Smart GUI Guys, Smart Database Guys, Smart Security Guys, etc. So there's not just one type of smart person to talk to.
  • I've generally been able to carve out an area for responsibility and ownership - these days I manage a team, but other times I've been able to "own" a particular tool, module, interface or other technical area and have both the right to change it and the responsibilty for making it work.

I think with those basic components, the technology in question is largely a matter of personal preference. Web stuff is a win for me, personally, because I like developing all parts of a web system. I like DBs and SQL, I like JSP (or ASP), I like Java... I like the idea of writing a web page that can be viewed by just about anything and I don't mind the frustrating elements of the technology all that much.


I'm not sure if this is a good answer to your question, take a look at this.


A young cousin x-times removed is majoring in CS. The advice I gave him on classes to take reflected the skills and capabilities I wish I had when I first started out

  • UI Design - learn how to develop easy-to-use screens that deliver value to non-IT users
  • Software Life Cycle - software is not just about coding - learn about all the other aspects (analysis, design, debugging, unit testing, maintaining, etc) of developing and implementing quality software
  • Project Management - like it or not, most of us work for a company attempting to make money off of our efforts - knowing how to identify when a series of activities will likely finish helps the high muckety mucks (which, sadly, I am now one of them) make informed decisions on how to steer the company
  • SQL / RDBMS - most real-world project deal with storing, requesting, and/or manipulating data - most data is stored in some hierarchical fashion, typically an RDBMS - being knowledgeable of SQL (even if you code in a higher level abstraction) allows you to validate the data being pulled from and pushed to the data store


More specifically, coffee.

I've been coding from a young age, back before my parents allowed the consumption of coffee in the house. As I entered uni, my coffee intake went from 0 to 1 a day, to now having up to 4 espressos a day, plus occasional energy drinks.

As it happened, I was ill for a week, and I consumed naught but lemon tea and crackers. When I returned to work, I found I didn't need coffee to continue in my day. A morning tea, plus various amounts of fruit throughout the day, and I was performing the same, without the caffeine shakes I could sometimes exhibit.

I'm still looked at funny at work for not joining in the coffee runs, but I'm healthier for it.


I would never directly learn PHP as the first programming language and would rather go for C as my first ever programming language.