SyntaxHighlighter setup

Sunday, December 21, 2014

What I am Learning Next (Part 1)

I have a practice that has served me very well as a software developer.  Every couple of years I sit down and figure out what technologies and/or languages I am going to train myself to a degree of expertise over the next 18 months.  I pick 3-6 specific things that look promising, but typically have not reached mainstream prominence and participate in projects that will give me solid experience with them.  As long as I guess well on one or two of these skillsets then it lets me list 1-2 years of experience with a hot new technology on my resume at a time when it is still hard to find people with any experience in it. 

This has worked out very well for me for the last 10+ years and allowed me to get positions and contracts using Javascript, AJAX, ASP.NET MVC, SignalR, MongoDB and MVVM just as they were becoming in demand skillsets.   Because of this I have never, ever had a hard time finding positions/contracts that paid well and were interesting.

There are only two downsides to this way of crafting your resume (assuming you actively enjoy learning); you will "waste" some percentage of your time on bad guesses, and in the long run you will get more calls from recruiters than you know what to do with (really).

So it is that time again for me to figure out the next set of things to focus on.  There is a lot of cool stuff happening in tech right now so I am going to list everything that is catching my eye right now and then will narrow it down to a doable list in a future post.
  • Azure: I have done some work in Azure already but Azure is a huge topic and I am committed to becoming masterful here.  Some areas of specific interest are:
    • DocumentDB
    • Queues
    • Scheduled Jobs/WebJobs
  • ASP.NET "vNext" and C# 6: The ASP.NET framework is being rewritten from scratch with huge changes to their deployment and coding models. Perhaps not so earth shaking C# 6 has some nice new features, chief among them a more open compilation model that enables easier code analysis and using C# as a a scripting language (check out http://scriptcs.net/).
  • Along with the new versions of ASP.NET and C# is , unsurprisingly,  a new version of Visual Studio.NET and now the equivalent of VS.NET Professional is free for small teams! http://www.visualstudio.com/en-us/products/visual-studio-community-vs
  • SignalR: I have used SignalR a fair bit but the matured quite a bit in the last 2 years so I need a refresher.
  • NoSQL: I have used MongoDB a lot and I will continue to do so, but I think it would be a good idea to get some exposure to at least one other NoSQL database.  The candidates that I am considering are CouchDB/CouchBase, RavenDB and DocumentDB (Microsoft's Azure NoSQL db, which I mentioned above)
  • JavaScript "transpiling" languages: I have used JavaScript for almost as long as it has existed so I am very familiar with what is beautiful about it and what is a pain in the neck.  CoffeeScript and Typescript are two interesting open-source projects that try and make JS easier and safer to code, and they both "transpile" down to plain old JavaScript.
  • SVG (Structured Vector Graphics): SVG is a markup language for creating graphics. And it can be manipulated with JavaScript and CSS in the same way as HTML. It's use is not limited to the web, but that is where my interest is.  SVG has been around a long time but it was not supported by Internet Explorer until version 9 so it wasn't a very practical option for the public web until recently.  I have used http://raphaeljs.com/ quite a bit which sort of patched IE's shortcoming, but now is the time to dig into the real SVG world.
  • Knockout:  I have been using Knockout for years and I love it.  Why Knockout as opposed to something like AngularJS?  Knockout is focused on just a very few things, mainly two way data binding.  It is designed to be combined with other tools like RequireJs,  SammyJs and jQuery to create a complete solution.  Personally I like this method of composing an app from small focused tools, so Knockout suits me very well.  It is mature, under active development, and the documentation is excellent.  Why is it on my "what's next" list?  The latest release has added support for creating self-contained Web Components and I am excited about that.  And you can't know a tool too well.  http://knockoutjs.com/
  • AngularJS: All that talk about what I like about Knockout as opposed to something  like AngularJS you would think that Angular would not be on my list.  The thing is that there is a huge amount of momentum around Angular and philosophical attitudes aside it is silly to ignore that.  I make a lot of my living from contract work where the tools are specified by others so it would be dumb for me to not learn AngularJS.  And by all accounts it is a very nice tool to work with so I am sure I will enjoy it (most things to do with computers are easy for me to enjoy).
  • Xamarin and mobile development: Xamarin is a tool for developing native mobile applications using C# and programming paradigms familiar to any .NET developer. The model allows a very large amount of code reuse across iOS and Android while still respecting the distinct aesthetics of each platform. Everyone I have spoken to that has used it loves the results.  It also allows the creation of hybrid apps mixing native code and HTML/JS. http://xamarin.com
  • XAML/WPF: Xamarin uses XAML for some of its programming so I will be learning it there, but should I dig into XAML for desktop development as well?  I have mostly been a Full-Stack WebDev for a long time.  Is it worth the investment of time?  I am pondering.
  • Client-side tools: There is a whole new generation of tools for developing HTML/JS apps like Grunt, Gulp and Bower.  Plus lots of uses for Node.js even if you have no interest in Node per se.
  • ECMAScript 6: ECMAScript is the standard that is JavaScript is an implementation of.  ECMAScript 6 is the next version of standard and includes things like classes, modules, and arrow functions (a terser syntax for functions/expressions).  We will see these features start to be included in the everyday browsers over time.  Projects like TypeScript and Traceur are very much steered by the ECMAScript 6 spec.
  • Python: I keep saying that I am going to learn Python…we will see if it makes the cut this year.
  • PostgreSQL JSON datatype: PostgreSQL is a great database engine with a lot of interesting features…and now it has JSON and JSONB datatypes with indexing.  This would seem to open up some really interesting applications where you can use a hybrid relational/non-relational strategy in the same database.  Very intriguing and needs investigation.
So that is a lot.  Too much in fact.  I have to narrow it down some…in part 2.

No comments:

Post a Comment