why .net is the past, present and future of progressive web development
The first application I developed with .net was back in 2001/02 when implementing a technology refresh of an existing VB 5 Windows Forms application. The application was scheduled for release coincide with the release of the .net framework. At the time I was a seasoned Clipper, Visual C++ & VB 6 developer, so despite very little documentation the transition was quick and the most part fairly intuitive.
The Promise of the new way
Most developers were accustomed to the great windows forms development tools available like VB 6, Visual C++, Delphi and the Borland suite of tools. Which offered a Drag and Drop experience with a “code behind” source code development experience. This combined with “Step Through” Debugging experience made development a fun experience.
ASP.net 1.0 initially promised to bring this experience to web development. Developers at the time, myself included, thought ASP.net Web Forms would enable Drag & Drop UI development functionality. However, the more I started working with it, the more I realised how difficult this would be. The web brought with it a whole new set challenges, and required constant adaptation and evolution of skills. Software development became increasingly more pattern focused. Web development itself actually required stricter patterns and practices.
In 2003, I elected to start working with this new language Microsoft were releasing, C#. At first I was rather sceptical as I had already been disappointed by several other Microsoft language initiatives i.e. Visual Fox Pro, J#, J++ etc. , which never really amounted to anything despite a lot of hype at the time.
To write code you need to read code
Despite all this, C# and Webforms felt different and the fact that it seemed very easy to pick up, due in part it was pretty much focused on the .net framework, which I had already become familiar with. At the time, a lot of the code samples in MSDN documentation offered VB.net and C# examples. So whenever I was reading how to do something in, I was reading both VB.net and C# code.
I still can’t really put my finger on it, but for whatever reason once I made the switch to C# I able to make sense of Web Development completely. It was in 2005 and I was really starting to love and enjoy web development. It was also around this time, that we all started to discover the flaws of Asp.net Webform development and the industry was searching for patterns and practices approaches.
I discovered a new framework for .net developers released by the Microsoft Patterns and Practices team, called the MVP ( Model View Presenter ), which enabled Test Driven Development and easier development practices. This combined with the Microsoft Enterprise library and .net 2.0 really accelerated web development. However, these patterns and practices still had many drawbacks and inefficiencies most notably, ViewState bloat and the reliance on Microsoft’s Postback model.
In 2008, saw the Beta of ASP.net MVC, which brought about another seismic shift for .net developers. It was hardly an innovative approach, rather it was merely a response to a ground swell of developer grievances, but in my opinion this is was Microsoft do best and have done so for a number of years. They listen to the development community and respond by developing great tools to make the lives of developers easier.
C# and the .net framework also gained a lot of features, which for the most part really helped improve developer productivity, but it also started creaking at the seems a little. The gradual decay and dependency on legacy code. Microsoft realised even back then, that something needed to be done improve the .net framework.
In my opinion – I know many people who disagree with me – Windows 8 was Microsoft’s biggest disappointment, and it alienated a number of developers, but in retrospect it was also the driver that would enable Microsoft to change for the better. However, for me it sparked a journey to explore other areas, technologies and operating systems. Despite my appreciation of ASP.net MVC and .net framework, I really hated the Windows 8 and didn’t want to do it.
I gradually morphed into roles that required no development focusing primarily solution architecture consultancy, which I enjoy but I still have this strong pull towards development.
There is a piece of me that will always be a hacker. It is that very side of me that led me to explore opportunities in software development, despite having no formal training in the field whatsoever. It’s just something people of my generation – commodore 64 generation – have an inclination to do.
Release of .net core
In November of 2016, I made a return to hands on software development, which seemed to coincide with the release of .net core! I had heard rumblings of this MVC 5 or whatever a couple of years back, but had lost touch with it. I had also briefly explored Mono project but had never had the opportunity to develop any applications utilising it.
Upon returning to development and discovering I could develop .net applications on any operating system of my choice was music to my ears! I had already heavily invested in Linux and MacOSX infrastructure, but didn’t particularly enjoy the developer experiences offered on these platforms. I had been using developer tools like WebStorm, Eclipse and a number of different text editors like Sublime, Atom and even Gedit.
The one thing that these years have taught me, is that despite how good new software development frameworks are, it’s the tooling that accompany them that makes the difference. In my opinion this is one of the areas that Microsoft really excel, it is there focus on not only building great frameworks but also the tooling to make a developers life easier.
I would be the first to admit that not everything Microsoft touches turns to gold in the arena, for example I absolutely hate Microsoft Team Foundation Services (TFS) , and on the whole I am not the worlds biggest fan of Visual Studio. However, there are features within those tools that are sorely missed in others I have tried over the years. For instance, the debugging experience in Visual Studio has always been vastly superior to other tools I have used over the years.
One of the greatest revelations to me over the past 2 months or so, has been VS Code. I absolutely love it, and it has instantly become my go to code editor. The fact that I can extend it to functionality I want, instead of it coming packed with features I don’t need or want. I can easily customise it for a development experience I want.
This combined with the fact that, it also embraces many of the Open Source development experiences I have come to appreciate. A simple feature like an integrated terminal window, which is something I really enjoyed about Webstorm, is huge!
The evolution of .net
The below is a brief snapshot of the significant features I have observed working with .net core over the past few months
- C# is a compiled, strongly typed language, making it better at spotting errors during compilation
- C# remains a modern and elegant language.
- The mature ASP.NET framework, has been significantly reduced, but still provides everything needed to get the job done.
- Documentation is thorough and easily accessible.
- ASP.NET Core is cross-platform. Enabling the development of .net code on any platform
- The full community edition of Visual Studio is now free and for individual developers and open source projects.
- .NET Core solves the bloating issue architecture-side but still has a lot of essential features!
Should we go all .net core ?
Despite being super excited about .net core, we at threenine are not entirely convinced that going full stack Microsoft or .net core is still entirely appropriate. The fact is, we are now in an era of choice and hybrid systems and architectures are now common place. We really don’t think it makes sense to put all eggs in one basket when it comes to system development.
Similarly when it comes to investing, most financial advisers will inform you, to spread your risk and distribute your investment across a number of different asset classes. We believe this approach should be applied when investing in your application stack. The fact is, some platforms just perform better compared to others in different areas. There is no one size fits all.
You only have to look at database tiers, even only 5 years ago, from an enterprise perspective,there were only really 3 defacto major players, i.e. Oracle or Microsoft SQL server and for smaller applications there was mySQL, which are Relational Database management systems. These days however, one can spend months deciding which database backend to choose. i.e. RocksDB, MongoDB, DocumentDB, CouchDB, Postgre etc.
Many applications these days often have a mixed stack of databases. We no longer live in a world of 3 tiers i.e. UI, Middle and Back-end. We now have multiple UI’s, Distributed Middles and distributed back ends. Each designed to optimise every ounce of performance possible.
It just doesn’t make sense to solidify an any particular stack. Our focus software delivery is focused towards ephemeral stacks and instant integration.
.net is part of the future
In my opinion Microsoft have now officially entered into this hybrid application stack future. They have realised that in order to remain a player in the future they have to open up. It doesn’t make sense to depend on any one source of revenue i.e. Selling operating systems and they have to embrace distributed clouds , like they have with Azure. The fact is, I believe MS have realised and accept that Azure will not be defacto choice for most organisations but they need to make it as easily as possible for organisations to adopt and use Azure and have to remove the boundaries stopping them.
One of the key ways to do this, is to enable developers to use .net on the platforms of their choice. We do foresee that Microsoft .net core will more than likely feature in most application stacks and will more than likely considered by most teams embarking on new projects. However, we also see a future where it will not be the key focus or main stack of applications.