.NET Core – it’s the democratisation of programming again. It’s open to all, let’s welcome everybody in.
One of my reasons for moving my blog from https://geekswithblogs.net/twickers was due to the discussions with friends about reviving the alt.net scene in the UK as we got excited about the possibilities of .NET core and getting our elbows deep in other platforms than Windows. So this is a joint post with the alt.net stream over at https://medium.com/altdotnet.
I know, you want to get a scoop on my subjective view of the future of .NET – but as George Santayana allegedly said ‘Those who cannot remember the past are condemned to repeat it ’, so it’s time for a bit of history of how I got to where I am as an Application Architect at Huddle, primarily working in C#. Hopefully some of which might mirror your own experience.
My favourite languages
No joking about, this was the second programming language in which I became proficient. I’d worked through ZX Basic on a Sinclair ZX81, and graduated to BBC Basic on a BBC Model B – oh the luxury of a proper keyboard, decent screen resolutions, and colour! Of course, with only 32Kb of memory (not all of which was available for your actual programs) you hit the limits of what you could achieve with BBC Basic, both in terms of memory and speed of operation.
So, it was obvious, you picked up the Advanced User Guide and taught yourself 6502 assembly. Several months later you had a keyboard driven mouse pointer (mice were new, not everyone had them) which fitted into less than 1K including all the core logic as well as the background, mask and pointer that could be loaded ‘underneath’ the user memory.
It was hard work but good fun. It could also go wrong in so many ways … think C++ random pointers and allocations on steroids.
(You can download the Advanced User Guide from http://primrosebank.net/computers/bbc/bbcmanuals.htm)
University computer courses taught me Pascal, there was no Java yet (I’m old, otherwise why was I learning 6502?). This was the teaching language of it’s time, with a goal of instilling good practices with structured programming. It had a reputation for not being suited to real world use outside of academia.
Borland sorted out that bad reputation of it not being a workhorse language when it released Borland Turbo Pascal. I discovered this on a work placement during my university course, and it’s where I experienced my first ever IDE (Integrated Development Environment). To me, Turbo Pascal defined what a developer could expect from an IDE – decent help, integrated building and compiling, multiple file editing and a decent debugger. It meant I never went near a make file. For this I was glad for many years.
Borland Turbo Pascal was based on a compiler created by Anders Hejlsberg, who was a major force behind C# and the .NET framework, see later on in this story.
(image taken from https://freepascalanswers.wordpress.com/2013/09/13/my-fpc-lazarus-story/)
Visual Basic 1, 2, 3, 4, 5 and 6
The reason I’d written a 6502 assembly mouse pointer was due to my neighbours buying one of the first every Apple Mac units in the UK. I knew the future was graphical, but even though during work placements I touched upon GEM (a rival to Windows) it wasn’t until my first real jobs after university that I encountered Windows 3.0. Realistically this was the first ‘usable’ Windows, if only because it included decent sound card support and networking that … mostly worked. So, although I was still writing some DOS programs in Turbo Pascal it was obvious there needed to be a similar tool for Windows. C and C++ was just too damn hard for most developers especially with the Windows API.
Working for a small company inside of Sky Television, we were asked if we could provide the first in house weather system, and we grabbed this new product from Microsoft called Visual Basic. It had an IDE, you could create forms and just drag and drop controls onto them. You just double clicked a button and it opened a code window where you added some logic. You could easily show dialog boxes. You could access files. You couldn’t do databases properly (that came with the Jet database engine in Visual Basic 3.0) but suddenly everyone could write applications for Windows.
And I mean EVERYONE. This was the democratisation of programming. It was fun, like 6502 assembly, but with none of the pain. You could play. You could experiment. You didn’t have to know lots of stuff. It didn’t come with hundreds of libraries or frameworks – it came on three 720K floppy disks; there was no room for them.
Eventually I ended up working directly for Sky Television (now BSkyB). Those early VB1 programs became VB3 and VB4 programs, with 16-bit upgraded to 32-bit, and by the time we were programming in VB6 we in a full-on COM based world. The Visual Studio install required CDs, especially for the MSDN help library which was your local version of stack overflow (as long as you could guess what keywords Microsoft had decided to use). We had distributed systems handling the general election graphics systems feeding anything from Excel spreadsheets to 3D virtual sets with an Oracle database backend pushing Access out of the picture.
Visual Basic 6 was still an easy entry point to programming Windows, but by this point there were two types of Visual Basic programmers; those who dabbled, and those who really understood COM and could produce seriously robust and scalable systems with multiple tiers, reusable objects and threw XML around with abandon. It had lost the complete ease of use for which it had become loved, and for those who did push it to the limits, the limits were very apparent, and we occasionally looked over the fence at the C++ devs in envy. Of course, we didn’t quite understand the ‘fun’ the C++ devs were having with implementing COM …
I also have an affection for a SHOUTY language that to a structured programmer first appears bonkers. Gone are those loops and if .. then .. else blocks, and you have to change your mind to think it terms of data and linkages between data sets. Yes, you can use a CURSOR to do a loop, but you shouldn’t. Really, you shouldn’t. The challenges in SQL are quite different and the sense of satisfaction from a high performance query getting data back from 10’s of millions of rows of data in seconds is a real thrill.
It seemed a bit niche, until we got LINQ in the .NET framework, and suddenly I could write expressive data manipulation code in C# as well as SQL. Fab!
By the late 90’s the combination of C++, Visual Basic 6.0 and COM looked like it was hitting the limits of its capability and Java was on the ascendance on servers, challenging the sales of Windows Server. It took quite a few years, and conversion from early projects within Microsoft, but the world received a new framework – the .NET Framework, and a new language, C#, complete with curly braces with very much a passing nod to Java. The .NET Framework brought standardisation if not open source. Even the new language C# became a standard as ECMA-334:2003 / ISO/IEC 23270:2003.
I could have moved from Visual Basic 6.0 to Visual Basic .NET but I felt it was genuinely time for a change, and maintaining VB6 code next to VB.NET was just not enough of a context switch to stop you making damn silly mistakes. The decision was made easier by the lack of VB.NET code samples, and the fact that the simplicity of VB had finally disappeared completely.
In the first version of Visual Studio.NET if you removed the default form from a VB.NET project to replace it with your own, it wouldn’t compile. There was no helpful VB6 dialog to get you to wire up an entry point to your application. Suddenly, everyone who used VB was asked to understand the entry point of an application, and how to configure delegates. It was the end of the democratisation of programming at Microsoft …
… but us old VB devs were having fun with C#, we got proper access to threading, new constructs, and along came all sorts of goodies, like LINQ, generics, Lambda functions and anonymous types and methods. We could no longer edit and continue, but apart from infamously running a general election system in edit and continue – editing the code live as the results came in, I never considerd it a killer feature.
As I have hinted, all this complexity came at a cost. Combined with learning proper patterns and practices, getting used to TDD and continuous integration servers, we found ourselves in a place where creating a simple web site would be at least five days – to do it properly.
A contractor, Charles, who I was working with hit this with a web site for a relative. He
was stunned by how something supposedly so simple took so much time and resulted in a web site that required knowledgeable developers to support. Of course, despite being in a startup, this is the point you had to admit you had finally become enterprise developers.
Those enterprise developers who could list all the steps in the ASP.NET page life cycle which became the classic question thrown at Microsoft developer interviews.
Summary – other languages
So, my favourite languages are 6502 assembly, Turbo Pascal, Visual Basic 6.0 and C#. I dabbled in FORTRAN, C, C++ and even Java.
Not just MSDN
I also had the fortune that when I left BSkyB for a short-lived startup I ended up as an owner/contractor working with companies that were not Microsoft only shops. This meant I was quickly weaned off Visual SourceSafe (which did a great job of getting developers into source code control) and onto Subversion and became pragmatic about tooling and frameworks.
I was hanging round with the guys at London .NET Users, who were remarkably progressive for a user group started at the same time as .NET. Here was a user group where third party tools such as NUnit, Windsor IoC, and NDoc were considered standard.
There was also an acceptance of more pattern based development, and an eagerness to adopt initiatives such as the ASP.NET MVC framework. An openness and pragmatism was still combined with a loyalty to the .NET framework and, in general, C# as a top tier language.
In the Java shop I worked, they were amazed when I demonstrated LINQ queries joining database results and in memory arrays together with SQL-like ease. They quite liked C# generics too.
Part of the atmosphere within that user group was later inspired by the Alt.NET movement originating in Austin in the US. We were enjoying Alt.NET beers arranged by Sebastian Lambla and weekend un-conference days.
One of those days was where I first learnt how to configure git on Windows (still more of a challenge than it should be). At an Alt.NET beers I found a job at a digital download startup at Hammersmith where I ended up working with Charles encoding all of the Warner Brothers, EMI and Sony music catalogues to MP3 files and putting all that Alt.NET focus of using the best open source tools combined with .NET to deliver a system for considerably less than our rivals.
For myself, in the UK,
- Alt.NET was exciting.
- Alt.NET was open.
- Alt.NET welcomed everyone.
- Alt.NET wasn’t elitist.
- Alt.NET was noisy.
With .NET Core and cloud services, I believe we have the inflexion point in the .NET framework to get people excited again. We want to throw .NET Core open to everyone, make some noise and make developing fun and exciting.
It’s easier than ever to download a lightweight editor like Visual Studio Code, hack some C# together, compile it and copy it over to a cloud server and have your code running on an AWS Linux box within a few hours.