This is my second post about the changing year. In this post, I look at the areas where I will invest my time in the coming year.
.NET Everywhere
The .NET Core platform is a version of the .NET stack that runs on OSX and Linux in addition to Windows platforms. This is a pre-release project at this time, but there is enough there to begin experimenting.
As this platform matures, .NET truly becomes cross-platform. You’ll be able to use C#, F#, VB.NET, and the bulk of the .NET Base Class Libraries to create software that runs on multiple platforms. The Roslyn compiler platform provides one of the key building blocks by running on OSX and Linux. That means the managed portions of the .NET Framework can be compiled on these platforms, and will run effectively. The remaining work is primarily to make the unmanaged portions of the CLR and the libraries run on other platforms.
Some of the work here is technical in nature. Other work is to ensure that the licenses used by the .NET framework components are compatible with a cross-platform strategy. Most of the components are released under either the Apache 2.0 license, or the MIT license. Check each library for details. (Notably, the previous restrictions on earlier MS-PL licenses for Windows only support has been removed from anything related to .NET Core).
While this work is going on, there is a parallel effort to build out learning materials for .NET Core. This project is also open source, and accepting contributions. (I’ve had a couple PRs merged here already).
I’m really looking forward to the date later in 2016 when a production ready .NET environment runs on Windows, Linux, and OSX.
C# 7 Designing in the Open
This will be a very interesting version of C#. The team is using GitHub issues to openly discuss language features and their ramifications. Go ahead and participate in the discussions. It is really exciting to see the community participate with such passion for different features that they would like to see in their favorite language.
As I discussed in the last post, the compiler is Open Source. If you want to experiment with some of the new features, you can try. There are experimental branches for some of proposed features. (The maturity of the implementation varies.) It’s also important to understand that the features haven’t been formally committed to. Do not use those branches in production applications (yet).
Clouds, Containers, and Devices
We’ve entered a world where our web-based applications are managing more data, and scaling to ever larger numbers of users.
OK, this trend has been in place for a while, but it’s only accelerating and growing.
We have new ways to deliver and scale web-based software. We have cloud platforms that enable us to change the number of instances running. We have docker containers. And, on a related trend, we can offload more and more processing to the client device. That may mean platform specific mobile applications, or SPA style browser based applications.
We will be doing more and more work with software that needs to scale by running multiple copies of your application in different configurations. There are many different options for this, and wise developers will learn a bit about each of them.
Rise of the Machine (Learning)
Machines are good at examining very large datasets. Machines are also good at running lots of different scenarios.
Put the two together, and I see a trend for more machine learning in the future. The applications we use generate tremendous amounts of data every day. As machines observe and analyze that data, more insights can be gained than ever before. Machine Learning and related algorithms can enable us to play ‘what if’ with more and more different scenarios and make better decisions based on larger and larger data sets.
The Era of Big Data means Small Applications
Our data is a bigger and bigger part of our lives. The software necessary for us to interact with that data is smaller (in relation). This trend affects the ‘stickiness’ of any given platform.
This trend has a huge impact on how network effects work for modern systems.
As an example, consider music applications. Every platfrom has an app that can play music. But, what’s important to users is that they can play the music they’ve already purchased. If you already have an iTunes subscription, you want to play your iTunes music. If you have a Microsoft Groove subscription, you want to play your Groove music.
The important feature is access to the data (music) that you’ve already purchased (or subscribed to, or created).
That impacts the ‘stickiness’ of a platform. Finding and installing programs for a new device takes a fraction of the time (and possibly money) of updating every subscription to a new platfrom. I believe this portends an interesting trend in the network effects for different applications. Namely, changing device platforms will be a trivial exercise, compared to changing the provider of cloud based data.
I believe this means that future platform stickiness will be based on your cloud based data, not your device. Do you want to switch between mobile platforms? That will be easy, as long as your data can come along. If that means recreating or resubscribing to a service, it's going to be a non starter.
That leads me to the conclusion that the clould is more critical than the device.
What’s Next for HTBox?
In the coming year, we’ll be focusing on reaching the 1.0 milestone (not beta) for the apps currently in development. We’ll also be adding new applications as the year progresses.
I’m excited for the progress, and I’d be happy to see more participation. If you are interested, head over to our home page on github and check out our projects.