- May 29, 2013 at 6:12 PM
- Shawn Wildermuth
- 16 Comments
In 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.
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:
- 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.
- 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.
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.
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.
About that yearly thing..I stumbled on that sub-consciously and i am on it currently..
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'...
Thanks for that honest and highly relate able observation and advice.
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!
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.
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.
<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!
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!
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.
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.
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.
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:
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.
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.
Thank you Shawn, Your advice validates what I have been thinking. Time to hit pluralsight and wintellectnow.
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.