Scott Hanselman

Draft - .NET Glossary Diagram

August 17, '17 Comments [55] Posted in DotNetCore
Sponsored By

I'm working on this slide as support for this excellent .NET Glossary. It's not done yet, but I'm curious for your thoughts. Every system has terms and concepts that are initially unfamiliar but make sense once you grok them.

image

Here are these concepts used in an example sentence, for context:

  • Application Framework - “Are you using the ASP.NET Core web framework for that microservice?”
  • Metapackage - “I want to install the ASP.NET Core framework; it’s a package of packages”
  • Package/NuGet - “I know there’s a NuGet package for decoding JSON.”
  • Library/Assembly - “Now, you’ll compile your source into an assembly”
  • .NET Standard – “Which version of the .NET Standard specification does your assembly target?"
    • "My Apple Watch supports .NET Standard 1.6 but my Windows 10 laptop supports 2.0 with more APIs.”
  • C#, F#, VB, etc – “Which language did you use?”
  • .NET SDK - “Did you get the developer tools?”
  • CLR/CoreCLR – “Which runtime is your app using?”
  • An implementation of .NET is a runtime along with libraries that implement a version of the .NET Standard
    • “Are you using .NET Core, .NET Framework, or Mono for this project?”
  • Platform - An operating system and some hardware (ARM, x64, etc.)
    • “Is that an ASP.NET Core app running in Docker on a Raspberry Pi?”

Constructive feedback, please. This is a draft.


Sponsor: Check out JetBrains Rider: a new cross-platform .NET IDE. Edit, refactor, test and debug ASP.NET, .NET Framework, .NET Core, Xamarin or Unity applications. Learn more and download a 30-day trial!

About Scott

Scott Hanselman is a former professor, former Chief Architect in finance, now speaker, consultant, father, diabetic, and Microsoft employee. He is a failed stand-up comic, a cornrower, and a book author.

facebook twitter subscribe
About   Newsletter
Sponsored By
Hosting By
Dedicated Windows Server Hosting by SherWeb
Thursday, 17 August 2017 21:13:27 UTC
While I can't offer any constructive critiques, I can say that this will be a very good teaching/learning tool, especially for visual learners like myself.
Andrew
Thursday, 17 August 2017 21:18:18 UTC
We should have CGP Grey do an explainer.
David Falkner
Thursday, 17 August 2017 21:23:35 UTC
This is great. A very nice follow up, once you're done, would be: how to answer to those questions.
You know, just to be sure everything is crystal clear.
Andre
Thursday, 17 August 2017 21:42:37 UTC
Is there a need to specify that an app written against a given .net standard version will run on every device that supports that standard? May be use your apple watch, raspberry pi analogy. Can't phrase it correctly - hope you get the gist.
CodeDJ
Thursday, 17 August 2017 21:50:04 UTC
Hmm, this is a good diagram. I feel like I have been drawing a crude version of this at work for explanations. Glad you included F# =).

Feedback wise:
More color contrast in the boxes might be an improvement. May be hard to see for color blind.

The items in the blue boxes, the way they are in separate boxes may confuse a user into thinking that C# does not have a any relation to CLR or the .NET SDK.
Jeremy
Thursday, 17 August 2017 23:22:16 UTC
Come to think of it, it won't just run, will have to be published against each runtime.
CodeDJ
Thursday, 17 August 2017 23:53:47 UTC
CLR/CoreCLR – “Which runtime is your app using?”

An implementation of .NET is a runtime along with libraries that implement a version of the .NET Standard


Maybe the overlap can be visually represented? Or the CLR/CoreCLR brought down into the box below and show sub-boxes for CLR/CoreCLR, BCK etc.

Friday, 18 August 2017 00:28:42 UTC
I'll agree with others and say the colors need more contrast. I'd also take the language box out- the languages are kind of orthogonal to this whole thing.

CodeMonkey: See this slide, Boss- it explains what .NET Standard means.
Boss: Oh, ok great! Where do our Silverlight applications fit in?
CodeMonkey: ...
Sam
Friday, 18 August 2017 01:53:16 UTC
Looks good to me, though I'll second the comments on contrast (esp. between 2nd and 3rd boxes).

One thought: it may not be important enough for your goal here, but I might separate the platform layer into OS and hardware (get people to recognize they aren't in lockstep).
Eric
Friday, 18 August 2017 02:07:17 UTC
What's the name for the new, smaller XML project files? I refer to them as .Net SDK projects, but I don't know if that's accurate.
Craig
Friday, 18 August 2017 02:11:51 UTC
I love this, great visual. In thinking about this, I feel like I have seen this as a slide countless times (or something similar to it). And now there is a pseudo legend / glossary I feel like it should be interactive. I could imagine this living on the docs site, and as a user I could interact with this visual. And it would evolve over time. I could click on an area and get a flyout for example, with various details. Information or links to more docs, or examples... If I clicked on ".NET SDK" imagine a popup (or pick your favorite UX) and it would tell me immediately as a developer what it means, and provide examples. Here are some SDKs, I'd think to myself "oh, I know what they mean by this now".
Friday, 18 August 2017 03:57:04 UTC
I'm not sure what this is telling me overall... but the way I interpret it ( as a narrative )

There's layers

Application Framework is built on top of
Metapackage, which is built on top of (does it have to be built on top of a meta package?)
a .net runtime, with libraries that implement a version of the .NET standard (Problem: not everything is .NET standard?)
which is built on an Operating System

A MetaPackage is made up of Nuget packages? whys there a / inbetween package and nuget?
nuget packages is made up of libraries/assembly... what's with the / again??
a library consists of possibly ".NET standard", a lanaguage? some sdk? and clr/coreCLR ( now the / implies a OR condition... not quite sure the previous /s mean OR)

Hold on, a library doesn't contain C#/F#/VB, that's independent... I guess he's trying to imply it's source is written in one of those languages? seems an odd way to represent this.... actually at this level everything seems off, a library uses a language to target the other two things. actually, the sdk isn't a thing, it's a set of tools..... now I'm really not sure what this whole box is trying to say.

whys .net standard out on its own? that also has language? yeah...... really not sure what the diagram is trying to communicate? Yet I build shit with all these tools all the time, they are all things I know, but I'm not sure what useful relationship is getting communicated between these things?





Keith
Friday, 18 August 2017 06:13:21 UTC
Can you illustrate how original .NET incarnations fit here, for example, which question do I answer with "I used .NET v4.6.2 for this"?
Darren
Friday, 18 August 2017 06:51:23 UTC
I see at least 3 separate concerns here:

  • Authoring - languages, SDK, .NET Standard, Application Framework -> assembly
  • Execution - assembly -> runtimes, platform
  • Sharing - assembly -> package, metapackage

I feel it would be really helpful if the distinction was clear and it would also give an opportunity to show exactly how they relate to each other.
Artemigos
Friday, 18 August 2017 07:15:14 UTC
Scott I agree with the comments about the contrast.

Have you considered running the image through a colour blind simulator like this one? - http://www.color-blindness.com/coblis-color-blindness-simulator/

Vischeck is also a good tool to play with - http://www.vischeck.com/
Joe Curzon
Friday, 18 August 2017 07:39:57 UTC
Scott, I think something like this is absolutely needed.

It feels like I woke up one morning and suddenly just saying I was developing a .NET application wasn't enough any more. Seemingly overnight (maybe I just wasn't paying enough attention) we all need to be a lot more specific and precise in the language we use.

Whilst this is a small price to pay for all the new options we have in front of us, a glossary is now absolutely essential.

The only suggestion I'd make is that I'm not sure the nesting feels that intuitive. At least, it doesn't match my mental model. To me it feels more like a scale than a hierarchy.

Anyway, keep up the great work.
Friday, 18 August 2017 07:53:48 UTC
I am working as an software developer and I want to gain knowledge about .NET and in this your article helped me a lot. Your article is very informative as it describes the basics of .NET.
Dell Customer Service
Dell Customer Service
Friday, 18 August 2017 08:00:18 UTC
Hey, this is very nice and informative article and please keep posting an amazing article like this because this is a very helpful article for me.And thanks for sharing with us.Lenovo Phone Number
Friday, 18 August 2017 08:00:41 UTC
I am also learning .NET language for job purpose. If any body is looking for support related to the MS Office products, they can call the Microsoft customer support team. We will be happy to assist you in the possible ways we can. Simply visit our website.
ms office help number
MS Office Support
Friday, 18 August 2017 09:22:13 UTC
Thanks for this very useful, visual map.

My initial reaction was to question the ".Net Standard" box - does this really sit here? Or should it be more like several boxes labelled ".Net Core", ".Net Framework (ver X.Y)", "Mono", etc...

This sort of glossary is definitely useful and very handy to have a visual "at a a glance" reminder.
Cheers!
David Scheppers
Friday, 18 August 2017 11:19:58 UTC
Your explanation for the ".NET Standard" used the word "specification", which made a big difference. Just saying ".NET Standard" made me think of a runtime, right or wrong.
Friday, 18 August 2017 11:54:33 UTC
Thanks for this Scott, this is very much needed with all that is happening in .NET these days.

I tag along with the others in the "color contrast" train. There should definitely be a clearer visual separation between these boxes.

I have the same feeling as Tom about the nesting. Especially the blue section with languages, runtime and tooling. It feels a bit mixed up.

Also, .NET Standard, in my head, is something broader than what is visually represented. I don't know how the best way to put it would be, but the message should be "this is the set of APIS available to you for building this library". Right now it feels like it is somehow embedded in the library.

Again, thanks for this. Can't wait to see the final version!
Francis Cote
Friday, 18 August 2017 12:16:18 UTC
Most makes sense to me , although I'm a little thrown by the apparent repetition between your 'CLR/CoreCLR' box and the 'An implementation of .Net is a runtime...' box. Is this not the same thing expressed twice?

If your intention was to list the implementations (which I think would be helpful) then I'd merge the two boxes at the 'lower' level and include Mono/Xamarin and other implementations there.

In general though a really useful diagram, great job and thanks for sharing.
Dave Arkley
Friday, 18 August 2017 13:21:11 UTC
That's awesome
André Paggi
Friday, 18 August 2017 13:23:20 UTC
Hmm not sure this works for me. The layering seems off and there seems to be a mishmash of physical and logical concepts in here. I would be tempted to lay this out explicitly from the view of a developer.

Put the languages/compilers that developers work in on top. Everything underneath (for the most part) is .Net not language specific and what things are written in is more of an implementation detail.

How are Application Frameworks differentiated from a MetaPackage or even a collection of Packages? Certainly, something like Asp.Net is delivered as a Metapackage. I wonder if you should treat the two almost as synonyms.

.Net standard in the middle kind of works. It does miss out that there are still separate frameworks and they all have extra API's unavailable to Standard or other frameworks. However, that might be hard to visualise so perhaps not worth considering here.

.Net SDK so seems to represent the development time installer, you don't need the SDK to deploy an application. I'd either drop this or make it a top-level concern with the languages/compilers and perhaps add in SKU's .Net FX, .Net Core etc...

I would either separate out each of the major runtimes (or at least CLR, Core CLR and Mono), then put those over the same big blue box as the "An implementation of blah". Or alternatively, leave as one and add the "An implementation..." text into the same box.

Then sit that over Platforms as you have already.

Hope this helps!
Friday, 18 August 2017 15:42:17 UTC
Scott: I hate the use of word 'platform' since it is vague. Adding to it, Platform example given in post, is confusing. I fail to understand why we are calling Operating System + hardware as a platform.

In "“Is that an ASP.NET Core app running in Docker on a Raspberry Pi?” example, Raspberry Pi is device and Raspberian is OS. So, not sure what is called here as a platform.

Hope this helps.
Friday, 18 August 2017 17:40:02 UTC
The term Platform is polysemous.

While most people like to think of platform as being OS + Hardware, Microsoft often refers to .NET Core, .NET Framework, etc. as platforms, for example, in this post.

I think they do this because framework can be confusing too. Generally, we think of frameworks as libraries, but .NET includes runtimes and compilers, which are more akin to as OS.

I actually just wrote a blog post discussing this very issue yesterday.
Friday, 18 August 2017 18:22:22 UTC
very confusing are the terms '.net core' and 'asp.net core'. The fact that 'asp.net core' can run on .net core or .net classic (if thats the correct name)
pm100
Friday, 18 August 2017 18:31:08 UTC
@pm100 ".net classic" is called .NET Framework.
Friday, 18 August 2017 19:38:22 UTC
Some of the layering confuses me.

Packages are made up of libraries makes sense.

But the inclusion of .NET Standard in Library/Assembly doesn't fit right for me. Does every library implement .NET Standard? I think of .NET Standard as of a collection of APIs, which is probably implemented with a collection of libraries. Am I misunderstanding?

And I'm really not sure how .NET SDK quite fits into that.

Perhaps I'm being confused by a mixture of "This is used to implement that" and "This makes calls into that"?
Friday, 18 August 2017 22:56:01 UTC
Very interesting. Just started studying computer science. I know a lot of Java and a little C# from using Unity game engine. But you've got me curious about how Java works too,msomce it's also a cross platform tyoe language. Would love to compare both.
Kaili
Saturday, 19 August 2017 02:10:37 UTC
I like the initial draft.

A few things that came to mind, is metapackage the right terminology? Maybe say composite package or package collection (ICollection<NugetPackage>)?

Related to that, how is this collection of packages different from an application framework? From the example, they seem to both be representing the asp.net core web framework.
Caeli
Saturday, 19 August 2017 08:02:22 UTC
Thanks, Scott. This is awesome.
Saturday, 19 August 2017 11:05:00 UTC
Modules lost somwhere between assembly and .net standard
Alex
Saturday, 19 August 2017 11:30:03 UTC
I think ".NET Standard" needs to clarified as an **API surface**, that is implemented by one or more assemblies provided by a given runtime. In the beginning it was really bad when it was called the ".NET Standard library", this gave a completely misleading designation, that this was some one for all set of mother assemblies for all. It is not. It is an agreed upon versioned API set, that any runtime compatible with needs to supply/provide.

Ha so try to squeeze that into one sentence. ".NET Standard is an **API surface** provided by a given runtime." maybe...
HarryDev
Saturday, 19 August 2017 12:21:58 UTC
This is awesome !!
Kevin
Sunday, 20 August 2017 21:34:04 UTC
where's Powershell and a whole slug of other languages.
Monday, 21 August 2017 00:00:01 UTC
Hi Scott thanks for the knowledges, Im currently using Visual Basic.NET language, especially for windows form. Sorry for Out of topic, I want to ask if there is a away how to download special packages Visual Studio 2017 just for windows form and mobile development only? thank you.
Monday, 21 August 2017 07:27:27 UTC
I don't think you should nest all these subjects. This audience is confused already with all the glossary so it has to be clear whats a sub-item and what is just related. I therefore think that the previous .NET Standard images are a better representation. Those give a clear layered view of what is on top of what and what are actually grouped components.

I would like to see your image in this format:
https://msdnshared.blob.core.windows.net/media/2016/09/dotnet-tomorrow.png
Dibran
Monday, 21 August 2017 12:48:25 UTC
Do not touch the explanation (example sentences); it is great!

I don't care the diagram, the explanation is the point!

Sorry for my english :)

Laszlo Szoke
Monday, 21 August 2017 20:51:33 UTC
Metapackage sounds to me as a package that contains description.
If it's a package of packages, what about Nested Package or perhaps Ordered Package?
Alex Kravchenko
Tuesday, 22 August 2017 02:48:39 UTC
I could not do the new Core 2.0 Identity stuff with standard2.0 ckasslib, why should I use it?
Chris Go
Thursday, 24 August 2017 02:29:33 UTC
The layered structure of .The net framework must be a sequential way to understand the behavior of processes that take place in .Net framework through the initial step of the application layer.


Thursday, 24 August 2017 02:48:15 UTC
Hi Scott,

One thing I find confusing in diagrams like this is why something conceptually fundamental like a language (C#, F#, etc.) is shown on the same level as the SDK and the CLR. From my naive ASP.NET perspective I would have expected that the SDK would be a collection of optional assemblies and the CLR would be something underneath the languages. I'm not saying any of that is true, just giving my naive perspective of why I find that part of the diagram confusing.

Regards,
Iian
Thursday, 24 August 2017 14:52:30 UTC
really great post admin thanks for this .
great online Tv app for your windows PC
mobdro apk 2017 download
mobdro for smart tv
mobdro apk 2017 download
mobdro apk 2017 download
mobdro apk 2017 download
Thursday, 24 August 2017 21:06:50 UTC
I think we could benefit from something like this.

However I think that the assembly box and it's contents could lead to confusion IMO. I think it should be clearer that a package can contain a number of assemblies, which may or may not target netstandard versions. Also those blue boxes (Languages, SDK, CLR) should move out too.

I think Artemigos nails it by saying there are 3 separate concerns. To bring them all together in a unified hierarchy I do not think will help newcomers.
Stuart Lang
Friday, 25 August 2017 09:10:37 UTC
really great and useful information admin
i like the way you explained
appdroid
appdroid download
download appdroid
Monday, 28 August 2017 13:43:47 UTC
Better learning tool
Tuesday, 29 August 2017 19:49:32 UTC
Hey!

You dont need to change nothing in the way you put the sentences. Its everything ok.

The number 1 thing is: The explanation you gave us! And this is awesome, always!

Thanks for sharing this content. Bookmarked for further necessary!

Cheers,
Lenise Nogueira
Wednesday, 30 August 2017 03:41:24 UTC
This is a very nice follow up. I'm so excited when it's done!
192.168.0.1
Aaron
Thursday, 31 August 2017 07:59:28 UTC
The initial draft is awesome!
English to Spanish translation
Kyle
Thursday, 31 August 2017 09:56:40 UTC
The article is wonderful. Thank you Admin for sharing
on ap standa
Thursday, 31 August 2017 10:26:35 UTC
Let's face it, this is a topic that I have followed for so many years now. I am very impressed by this article. Sorry this is my job.
Friday, 01 September 2017 23:08:21 UTC
It might be helpful to include where Portable Class Libraries (PCLs) fit in this diagram, as .NET users shifting from previous versions may wonder how .NET Standard is affecting those, and whether they can still work together in one solution.
Bart Verkoeijen
Comments are closed.

Disclaimer: The opinions expressed herein are my own personal opinions and do not represent my employer's view in any way.