Rob Cook

Home | Donate

A .NET boot camp


What would a boot camp for the .NET ecosystem look like? I've been a developer in this environment for nearly 17 years. Over time there have been many changes and refinements - generics, LINQ, ASP.NET MVC, Entity Framework, .NET Core, Blazor... the list is long! What would a newcomer need to know though? How lean could we make a syllabus that got them up to speed quickly to being productive?

More than just C#

C# is the premier language for working with .NET. A rigorous grounding in it would be essential. The language has grown large over time, but the core is still manageable. Some of the newer syntactic sugar could be mentioned in passing, rather than trying to teach every nuance of the language. Functional programming, whilst interesting (and to some degree unavoidable due to LINQ), could be set aside in favour of fundamental object oriented concepts.

Outside of the language though, what else does a modern .NET developer need to know? Databases are the obvious next inclusion; persisting your data is after all a handy thing to do. Therefore SQL would need to be taught, and I would suggest using Sqlite3 for this purpose. It has less baggage than other SQL options, and the skills are largely transferable.

We would need to interface our C# code with the database, and to this end I would introduce Dapper. It is simple, lightweight, and much easier to reason about than a full ORM like Entity Farmework Core.

So C# and SQL. What else? Presentation would be nice. Nearly everything in this day an age is web related, so a framework that lets you do that would be next on the list. Blazor is the modern .NET solution, and it nicely abstracts away the underlying Javascript in favour of more C# code. You would still need to cover the basics of HTML and CSS of course.

Anything else? Git! Any modern developer (in any ecosystem) is using a version control system, and Git is the de-facto industry standard. How to create a repo, commit and rollback changes, branch and merge, and the basics of playing nicely with others would do in this regard. No need to become a Git ninja.

I think that would be everything we would need to cover.

Who is it aimed at?

What would the target audience be for such a course of instruction? Can we assume no knowledge of programming and still deliver results in the areas outlined above in a reasonable time frame? Do we insist on some basic knowledge derived from a course in say, Python? How much hand holding should there be? Do we give step by step guides, or more general instruction and rely on the learner's drive and own endeavours to fill the gaps?

I'm not sure I know at this stage. Whilst Python is the de-facto beginner's language, there is no reason why someone couldn't learn the basics in C#. In fact, development environments like Visual Studio make exploration easier due to comprehensive intellisense features.

Delivery style

Text, video, in person, or a mix of all three? Text would be the simplest delivery mechanism, and the one open to most misinterpretation on the part of the learner. How do we handle people getting stuck? Perhaps a facility to email an instructor would help, or a forum for learners to participate in. The latter of course requires moderation and screening of user submitted content. Instead piggyback an existing system, say a private Stack overflow instance. Emailing an instructor doesn't scale well, and what about periods of unavailability?

Video requires more production time and expertise, and suffers some of the same "getting stuck" problems as text. An in person course is the premier option, but limits the class to a small size and common geographic location.

Cost to the learner

Pay what you like, minimum donation, one off payment, subscription... somehow money has to be recouped. This infers a cost to the learner. Much content on the web is available for free, though content quality can vary dramatically. The expectation of paid for content is high quality low price. A subscription goes some way to beating this, but what is to stop someone copying all your content and leaving after some minimum paid for period?

A freemium model is probably best. Paid for extras could be access to a git repo of worked exercise solutions, the aforementioned learner support mechanisms, or supplementary video content.

Has this been done?

Zed Shaw has done it for Python, C, SQL, and others in his Learn the hard way series. No C# or Git though. W3Schools does a good job of instruction for a number of topics, including C# and SQL. This can be done, and evidently can be successful.