Keeping up with technology is tough, since it requires your time and money. In the software development business, time IS money, so you have to take some billable time to invest in yourself and your skills. If you are lucky, you can learn new technology during a billable project, but most clients aren't interested in paying you to learn.
Since it is so easy to get behind, one of the things I do is attend technology conferences. This lets me get a big dump of information in a relatively short period of time. You can do it on your own by finding articles, trying things out, but getting all the information at once is often beneficial.
I recently returned from the DevIntersection conference and it gave me a good handle on the new technologies that are available. By seeing them together, it was also easier to compare technologies side-by-side and help determine which ones to pursue.
For new applications, this is the technology stack I've been using:
- Visual Studio 2013 or 2015
- ASP.NET MVC
- Entity Framework
- SQL Server 2012
- KnockoutJS - client side framework
Unfortunately, I'm missing some pieces in my stack. KnockoutJS, which was purchased by Microsoft, is not widely used. It has some limitations in regards to its overall model and has not been adopted by the majority of developers. In addition, none of these technologies are really focused on mobile development, which has come up as a need periodically.
Looking at client-side frameworks, these seem to be the most popular:
- Angular 1 - steep learning curve, but has both community and commercial component support
- Angular 2 - learning from the design mistakes of Angular 1 to simplify the learning process and development cycle
- Aurelia - taking similar steps to Angular 2, but taking an even cleaner approach to the separation of script, template, and framework code
The downside is that Aurelia is following a common open source software model -- give away the software and charge for support. By going with this software, you are taking a risk on the stability of the company behind the package. However, having a company behind a single product direction is a benefit that Angular doesn't have, since Google is also pushing other frameworks.
On the mobile side of the house, you have Android and iOS platforms, with the Windows universal Windows platform (Windows 10, Surface) taking a smaller but increasing role. Each of these has a completely different programming model with different languages required. iOS has the additional requirement that the software be built on an iOS computer, which Android does not require. While you could use Android Developer Studio, Swift, and then Windows, you are writing in three different languages and not getting any reuse of your code, beyond what might be hosted as external WebAPI services.
In the mobile market, Xamarin seems to be the clear winner. Recently purchased by Microsoft and made available to Visual Studio users, you can create cross-platform applications for all three platforms using C# as the language. Xamarin has abstracted away the major differences between how events and widgets work, but gives you the ability to write platform-specific code as needed. There is also commercial support from companies like SyncFusion for additional controls you might need.
Now that I have the components picked out, the next step is to figure out an application to build to use this new development stack:
- Visual Studio 2015
- Entity Framework to SQL Server
- ASP.NET MVC with Aurelia as the client-side framework
- Xamarin Forms for a mobile client
Future blog posts will go through what I am building and the issues and triumphs along the way. Please contact me with any comments, thanks for reading!