Evolving Your Development Skills

TeachingOnGlassIn the last couple of years, I've been adding the HTML/JS/CSS skillset to my stack of required skills and my talks and courses have reflected that change. To my readers who are deep in the XAML stack, this change seems to have come at somewhat a shock to many. I've even been accused by some of abandoning the Silverlight, WPF, Win8, WinPhone folks. This has caused me a lot of frustration because I don't believe that developers can or should only know one possible stack. To reach the full breadth of users, sometimes you need to be able to develop across the ecosystems. In this same time, I've also done quite a number of HTML/JS/CSS talks where I didn't use Visual Studio. Some have conjectured whether I am moving away from the Microsoft stack as a result of the lessened use of Visual Studio in my demos. The frank answer is: nope.

So what is really happening here? I believe the development world is evolving. In fact, this isn't new…in the past 26 years everything has continued to change my entire career. And I expect (and hope) it continues. Software development is unlike many other similar professions. We think of ourselves as engineers but many engineering professions the rules don't change all that often. In civil and mechanical engineering, it can be somewhat stagnant. The requirements change, but torque and setbacks are similar to what they've been for years (AFAIK). But in software everything changes.

I received an email today from a developer who has been a Microsoft developer for a long time and now feels as if he is effectively unemployable because his skills are out of date. I don't' quite agree with his assessment as he knows ASP.NET, JavaScript and C#. These aren't out of date skills. But his consternation about the fight to keep his skills up to date is one I hear all the time. I struggle with an answer as my job is to learn, not deliver products. Because of this I have time to learn…I still get frustrated learning a new tech. In fact, this is the way that I cycle through a new technology:

image

This cycle is pretty consistent in my world. I can pretty much guarantee the full cycle on most new technologies I am learning. This is usually because underneath the surface, my brain is afraid that I'm going to be found out to be a fraud. That I am going to run into something new that I can't grok. That my tiny mind can't figure out. But that's a purely personal issue…not a technological one. This insecurity is at the root of what makes new technology fearful for me. Most days I can see past it and realize that it's only that. You'd think that after my 7th book, my insecurities would be gone…but…nope.

So how do I suggest people keep up? For me it's two pronged:

  1. Listen to what is going on in your corner of software development (not learning the new tech, but know what the new 'cool' acronyms mean.
  2. Learn something new every year….every year…really…every year. (See my post that discusses this here).

In order to listen for the new technologies, I recommend dusting off your RSS reader and reading some great blogs. Some of those I suggest include:

I also suggest you use twitter and follow people you love. You can lurk without sharing, but seeing what people are talking about can be really helpful.

For those of you working with ASP.NET Web Forms or Silverlight/WPF – know that your next job may need new skills like Windows 8, ASP.NET MVC and JavaScript. Try and realize that this is an opportunity to learn something new and try to be excited about it. What you'll see is that these new technologies have a lot in common with the stuff you're doing today. Let's talk about this more in context.

If you know:

  • ASP.NET Web Forms to ASP.NET MVC: Your experience with web development isn't going away. Sure, the designer and server-side controls have been helpful, but learning how those controls actually build the HTML you need will help you move to ASP.NET MVC and richer client-side models (like Single Page Applications).  Your skills in back-end development of SOAP-based services is also likely going to need to maturate into REST-ful services. You will be surprised that building and consuming these is easier than WCF.
  • Silverlight/WPF to Windows 8/WinPhone: The transition from the older XAML stacks to the newer ones isn't actually that hard. XAML design and data binding are the core of what you do and that doesn't change. Sure, if you're a deep WPF developer, you'll miss triggers but there are options that will help you build even cleaner code (as I am not a fan of triggers). In fact, developing for these new platforms is easier as the integration of asynchronous calls means that you will spend less time finding out what is locking the UI than you used to. Goodbye SynchronizationContext, you won't be missed.
  • Silverlight to Web: This is increasingly a big transition many developers are making. And this transition seems very daunting to many. But it's not. HTML is markup (as is XAML). CSS is styling (akin to XAML styling) and data binding is data binding. Look to frameworks to help you map the same style of app development that you are used to. Using AngularJS or KnockoutJS to build MVVM-style client-side experiences is remarkably similar to Silverlight. Stop worrying about how much you think you hate JavaScript. You hate what you used to know about JavaScript, not the modern JavaScript that people are using today.

How do you get up to speed? As a Pluralsight author, I am not unbiased…I think at $30/month, you can learn a boatload in a short amount of time. In fact if you look at my recent (and upcoming) courses, they are geared towards these new learning opportunities.

In the interest of encouraging people to view my courses and learn, here are some of the courses I wrote that I think could be helpful:

In any case, whether you view my courses or not…you should take it upon yourself to learn as much as you can. Pick anything that you find interesting and learn…learn…learn.

 

Comments

Gravatar

Nonso Friday, May 31, 2013

Awesome stuff!!!
About that yearly thing..I stumbled on that sub-consciously and i am on it currently..

Gravatar

Slick Rick Friday, May 31, 2013

Indeed, keeping up with the tech is so very useful while job hunting or simply maintaining self-confidence in this field. Between eating, exercising, socializing, and tv/videogames...it is hard to convince myself to make the time for learning after a long day...paricularly since looking at code is the last thing I want to do after 8 hours of work...so I try to squeeze my learning into the job. And I avoid having children - the ultimate time-suck! Soon I will have a new PC and win 8 to play with, looking forward to that 'newness'...

Gravatar

Jack Erdey Friday, May 31, 2013

Thanks for that honest and highly relate able observation and advice.

Gravatar

PHenry Friday, May 31, 2013

WOW! That right hand side is EXACTLY how I'm feeling right now, ya, the whole right side of your diagram. But since you mentioned it, I now know I'm not alone, nor unique in my anger/frustrations! Thank you. I'll just keep plugging away! Thanks!

Gravatar

Kamran Ayub Friday, May 31, 2013

Agree completely! If I had to give one piece of advice, it's to start contributing or at least pulling apart OSS projects. It's helped me become a much better programmer. Releasing OSS projects is also beneficial: it helps you be cognizant of others using your code so (hopefully) you write better code. It's really amazing the kind of code that's out there when you're immersed in it. The ASP.NET Web Stack project is pretty awesome, not only is it huge, it's also something that's been heavily reviewed and molded. Contributing patches, adding new features, and just spelunking in someone else's code-base is a great exercise.

I would also say not to be afraid to explore other stacks. Recently I wanted to take a look at Pandoc, which is in Haskell. I spent an afternoon just trying to get the environment configured and learned a lot in the process. Same with Python (Pygments). Just trying to get something to build is a learning experience. What I find much of the time is that these kinds of projects aren't documented in enough detail for people that have never used the stack before. For example, it took me awhile to figure out I needed an earlier version of the Haskell Platform installed and it was insanely hard to find (because that site has broken links!). I also had no idea what PATHs to set, what "cabal" was, or how to download dependencies. I take that frustration and channel it into my own projects, hopefully making it clear to potential contributors how to actually make changes and build my projects.

Gravatar

Wilson Friday, May 31, 2013

I agree with you Shawn we have to constantly evolving in software development. indeed I use lynda, tutplus, codeschool, pluralsight to learn new techs, great article.

Gravatar

Alan W. Balkany Friday, May 31, 2013

<i>"Software development is unlike many other similar professions. We think of ourselves as engineers but many engineering professions the rules don't change all that often. In civil and mechanical engineering, it can be somewhat stagnant. The requirements change, but torque and setbacks are similar to what they've been for years (AFAIK). But in software everything changes."</i>

This is because software engineering is a brand new field compared to the others. Mechanical, civil, structural, metallurgical, etc. engineering have all been around for literally thousands of years. Software engineering has been around (at most) 50 years.

The fundamentals are still being worked out, let alone best practices. Expect still more paradigm shifts (e.g. quantum computing) for the next century at least!

Gravatar

JT Friday, May 31, 2013

Great post. I'm 44 also and it's reassuring to hear that others get that same insecure feeling about not being able to absorb some new technology, and being left behind. Your diagram is spot on, though, because I have the same evolution, time and again, with each new thing that comes along. The key is to plow through it head on; pick a new project you want to make, or rewrite an existing one, and keep grinding away through the confusion and eventually you start getting it, and it's the best feeling ever--then you eventually get blasé with the technology and it's time to start the next one!

Gravatar

Thorn Saturday, June 01, 2013

Completely sh*ty post.
Seems author WISH to turn programmer's life into a permanent "educational hell". WTF??? If he feels he is stupid for present time, it doesn't mean everybody are! I know a lot of stuff and every time new bulls*** came from MS, I test it and make conclusion: if new technology Y makes life better than old X - ok, let's study it and use. But if not, STAY AWAY from that hype! All latest bullsh* like Azure, SharePoint, Clouds, Windows8, SkyDrive, "mobile world" - all of 'em is just an agony of looser - nothing useful, nothing impressive. And (for developers) don't forget MS' "FIRE AND MOTION" - while you waste your time on studying "new database access technology", MS goes forward on an old technologies! (ask 'em about ugly TDS - it's still in use!!!). Every new fake goal slows us down, guys! Keep going forward in what you sure.

Gravatar

Shawn Wildermuth Saturday, June 01, 2013

Thorn,

I don't agree with your assertions. I am not sure why you think this is unique to MS technologies. I agree that hype isn't helpful, but staying with old technology just to stay comfortable isn't useful either. There will always be room for developers who don't want to adapt, but the number of jobs gets smaller. Doesn't mean that there aren't great Cobol and FoxPro developers, just fewer and fewer jobs for those developers.

Gravatar

MAIN-FRAME RIPPER Wednesday, June 05, 2013

I didn't think that learning COBOL/MAIN-FRAME work would be fun; wrong. now I have employment for the life, without the smart ass kid competing for my job cuz he got more hair. As long as there is programs to maintain and data to migrate to servers, which are still slow for humungus amounts of processing, i won't have to worry about not finding a job; believe it or not, people with my skillset are in high demand.

I taught myself COBOL and once it was on my resume it didn't take long to land a good paying job. In fact I had been previously laid off from a .Net position and trying to land another in that line for three years. I would suggest to also keep an eye on what the job market is demanding and not the latest trends. I have learned many types of platforms, etc. and hardly used any of them in the real world, so far.

Gravatar

Dimitris Thursday, June 06, 2013

Thank you for your post. The learning diagram is worth a thousand words. It is suspiciously accurate, to be honest :)

But I think this is not the real problem, we (old) developers are facing. Eventually, everyone will learn something new either revolutionary (e.g. change of platform) or evolutionary (e.g. somehow better form of current codebase by introducing patterns, for example).

The real problem is twofold:
1) All new technologies require a new mindset including the use of entirely different tools/IDEs/environments. Meanwhile, they all claim to be easy to *start* with. This means, a developer is required to abandon his way of thinking AND working. For example, one will finally abandon Visual Studio if he is to work with all the trendy javascript frameworks. Why? First, online documentation is presented this way. Second, the IDE simply does not fit well with the new building process. In other words, the first major problem is that new tools don't give a damn about us old developers.

2) Sparse tooling. A project now requires downloading and combining tens of conceptually irrelevant packages all with their own proprietary syntax and structure in order to be built. Personally, I find this most annoying and frankly counter productive. Maybe this is a reason why today's CVs have become impossible. Not to mention, that most of these packages/projects/libraries become abandon-ware too often, too soon. As Main-Frame ripper correctly said it is just hype most of the time.

Gravatar

Steve Sunday, June 23, 2013

I know I am late to this post. However, I would like to ask you Shawn. I switched from ASP.net to Silverlight about 3 years ago. I would love to make the jump from Silverlight to Windows 8/ Windows Phone. Seems like a natural progression. However, except for a few boutique firms out there, I see no job postings in this area. What are you seeing? I see very little reason to make this jump right now and realize if I want to stay employable like the one guy in the article. Silverlight => Web (MVC and all the java script libraries) seems like the only real choice.

Gravatar

Shawn Wildermuth Sunday, June 23, 2013

Steve,

Win8/WP8 are both good choices but there are fewer jobs at the moment. I would probably just take the leap into MVC4/JavaScript. You'll find your Silverlight experience actually works pretty well there once you start using data binding libraries and CSS and Styling map pretty well. The lack of a control model in HTML is a challenge, but I am sure you're up to it ;)

Gravatar

Steve Monday, June 24, 2013

Thank you Shawn, Your advice validates what I have been thinking. Time to hit pluralsight and wintellectnow.

Gravatar

Michael Earls Monday, July 15, 2013

Thanks for the article Shawn. It's refreshing to know what the alternatives are to the "dying" technologies. However, as a few have stated, I think there will always be a place for those that are behind the times. I also have the insecurities you do when it comes to technology, but I'm far behind where you are in terms of knowing the "latest" stuff. I used to live for the bleeding edge, but now, I've become a bit more reserved. I've even been doing Visual Basic 6 development (in 2013) at work along with the newer technologies. I was recently told that Entity Framework is dead. It seems alive and well to me.


Leave a Comment

*
*
*