
Happy 15th Birthday .NET - vyrotek
https://blogs.msdn.microsoft.com/dotnet/2017/02/13/happy-15th-birthday-net/
======
josteink
I've been using .NET professionally and for hobby projects since version 1.1.

While initially sceptical of this new MS platform, I was quickly sold on C#
compared to Java: The language just seemed so much better. The base class
library was easier to use. The tooling was rock solid. In many (but not all)
ways it was just a better Java.

Since then, I must admit I think Microsoft has handled the platform really
well. It has made the Java-platform seem quite literally stagnant. First class
functions and lambdas first now? Really?

Clearly there's been ups and downs. There was times when Microsoft has seemed
dormant and not paying attention to the needs and requests of its developers,
happy to have conquered the market for in-house enterprise applications. Some
APIs were thrown out as soon as they were delivered to market. There were
times when I was about to throw it all out due to Microsoft's best option at
the time seeming inferior to pretty much everything else out there (ASP.Net
Webforms with AJAX being a particularly frustrating story).

But all in all, it seems they've managed to pull through, to react in time.
They've gotten better at listening to the community. Now they've even open
sourced it "all" and let us in, allowed us to participate and shape the future
of .NET, if we want to.

Yes. I can list a bunch of imperfections which remain with us today (like the
.NET Core launch and migration-strategy not being all that convincing), but
I'll leave that for another time.

Today, on .NET's 15 birthday, I'll say that I'm happy I invested in .NET those
15 years ago. It's literally paid my house, and I've enjoyed working with it
while it did.

Keep up the good work, Microsoft. There's a world of developers out there who
appreciate what you do.

~~~
WayneBro
I've been working with Microsoft tech for over 20 years and I absolutely love
their style so much more than any other tech company. I'm really glad that
they exist and I want to see them succeed. When I try to imagine a world
without Microsoft and .NET, I honestly start feeling queasy.

My one big complaint about .NET is that they didn't open source it sooner.
Maybe then, Silverlight or something really tight like that would have won out
over the shit-fest of JavaScript that we've had to deal with for the past
decade. JavaScript is finally catching up though and at least Visual Studio is
one of the best editors you can use for that too. (Really, with the right
extensions installed, I think it is _the_ best.)

I have a lot of complaints about Microsoft too, but I always complain about
things I love. Take my wife, for instance... :)

~~~
BigChiefSmokem
I have to ask, which extensions do you use for your JavaScript development?

~~~
WayneBro
Web Essentials, EditorConfig, Fix File Encoding and Line Endings Unifier.
Also, Node.js tools and Tools for Apache Cordova if you work with those.

The reason I think it's the best - I haven't seen better HTML/JS/CSS auto-
complete in another IDE. It's also got one of the best Android emulators for
working with Cordova/Ionic. WebStorm comes close, but I don't like that I had
to setup each new JS library to get auto-complete for it. VSCode comes close,
but doesn't support code folding on // #region comments and it can't deal with
large files as well as the full VS.

------
LyalinDotCom
Wow 15 years already, I still remember learning how to code C# for the first
time in .NET 1.1 days, it seems like a lifetime ago :).

Its also worth pointing out that Visual Studio is also having its 20th anv
event and shipping Visual Studio 2017 RTM on the same date on March 7th and
8th.

Details:

Join Us: Visual Studio 2017 Launch Event and 20th Anniversary:
[https://blogs.msdn.microsoft.com/visualstudio/2017/02/09/vis...](https://blogs.msdn.microsoft.com/visualstudio/2017/02/09/visual-
studio-2017-launch-event-and-20th-anniversary/)

------
cyberferret
1.5 decades. Very impressive achievement.

I am wondering though, and I will ask the question of all the .Net developers
out there - Did Microsoft achieve their end goal of reducing "DLL Hell" via
the .Net framework?

I didn't do a lot of development in this platform, but whenever I dabbled in
it, I used to come across the same sort of issues - "Oh, you PC doesn't have
the correct version of the .Net framework installed, I'll have to go and
download version x from Microsoft". There were a lot of applications tied to a
particular (older) version of .NET and I remember that installing older
versions over newer ones used to cause issues on quite a few network systems.

Also, got really tired of finding nice 'little' apps on the ancient web which
looked like useful utilities in a 200Kb file, only to find out after
downloading that you needed to then download a 100MB+ behemoth framework
version x just to run it.

I know in a lot of cases in made development life easier, but on the
deployment and implementation side of things, I feel we still suffered the
same "DLL Hell", though not to the same level.

~~~
pjmlp
> Did Microsoft achieve their end goal of reducing "DLL Hell" via the .Net
> framework?

Yes, because the dynamic linker has the concept of versions. So it will only
link if the right libraries are present in the system.

In theory it is not possible to use the wrong version as it used to happen
with DLLs and COM libraries.

In practice, it requires the developers to actually care to version their
libraries so that this works.

Quite a few devs, just let the same version numbers as on the project
template, or change them to mean whatever version is installed, thus getting
back to the old behavior.

When using libraries from devs that actually bother to change the version
numbers properly, the problem is sorted out.

edit: typo

~~~
moomin
I'd say it's a mostly solved problem, if only because everyone uses their own
versions of assemblies. ClickOnce is solid (if you automate the fiddly bits).
There's more upfront checks than with Java, but that's more of a trade-off
than a positive or negative.

------
rodionos
List of Microsoft tags among the top-100 tags on Stackoverflow:

    
    
      .net, c#, asp.net, sql-server, asp.net-mvc, excel, 
      vb.net, windows, vba, winforms, visual-studio, linq, 
      excel-vba, sql-server-2008, wcf, visual-studio-2010
    

[http://stackoverflow.com/tags](http://stackoverflow.com/tags)

Stackoverflow counters for the above tags over time:

[http://apps.axibase.com/chartlab/c1acecc0/4/](http://apps.axibase.com/chartlab/c1acecc0/4/)

------
kabdib
I started using .NET in late 2001. I'd done a few years at startups that were
using Java and doing all kinds of architecture astronautics involving
JavaBeans and great big complicated ways to access config files while ignoring
any really hard customer-facing problems. The tools sucked really hard, and I
remember it was difficult to find an IDE that didn't simply crash when you fed
it 50K lines of Java to debug. Browser plugins OMFG. Working in Java wasn't a
whole lot of fun.

Anyway, I joined a new company, started using C#, and one sunny afternoon
about three months into my first real project I remember thinking to myself,
quite clearly, "Oh thank God, the nightmare is over."

I did some Android work a few years ago, and all the bad stuff came flooding
back: The fallen towers of abstraction degenerated into a sea of flag bits.
The hideously complicated build and packaging systems. I haven't written any
C# in five years or so, so maybe it's just as horrible now (and I've glossed
over bad things like DLL hell and the global compilation pre-caching
nonsense), but I sure don't enjoy anything based on Java.

~~~
pjmlp
Android is worse than standard Java, because many of the APIs seem written by
ex-C devs that started to code in Java just before Android got released.

The worst example is how the Renderscript bindings are generated.

------
grovegames
I remember starting a project for a Telco in C# before .Net was officially
released. It was riddled with issues, but it made it easy to use COM+ as a
means to hot swap 'plugins' to the core of the application. This allowed us to
distribute one application, and have a configuration dynamically load which
modules a user would need based on their role. The web wasn't very capable 15+
years ago, and this allowed for a single base to be maintained and yet shared
modules to cut down on repetitive coding. You could do this with COM+ already,
but manually working with IQueryInterface over a simple reflections added more
complexity than was worth it. And when you needed to, you could easily make
calls to the Windows API, so you could still do code injection to get past the
parts when the language didn't support yet. And DLL hell was no longer so
prevalent. I was told somewhat recently that it's still running in some
capacity, which I'm glad of, because I remember stressing over how
irresponsible it was to use an untested language and platform for such a
project.

~~~
pjmlp
Similar experience, my employer at the time, as MSCP had access to an early
version of the framework, even before the first Beta versions started to
appear on magazine CDs.

We were in the process of migrating our in-house stack (Apache/TCL) to J2EE,
cancelled the project before it even started and decided to go .NET instead.

Back then, as Java fan I used to criticise .NET a lot as Java clone like many
of us perceived it.

Now 15 years later I have more fun doing .NET projects than Java ones. :)

However I do enjoy both stacks more than any other alternative.

------
jug
There's so much going on that it's almost making me hesistant about taking on
the new strategies like .NET Core or where to go with user interfaces. For the
long term, is it better to lock myself into UWP and Windows Store, or reap the
benefits with Xamarin?

Much would be easier if UWP was open and DirectX accelerated on Windows and
OpenGL accelerated on Linux or macOS, and uploading these apps on Windows
_could_ be to Windows Store but wouldn't be so architecturally tied to it. I
know there are ways to dodge their store even with UWP apps, but it feels like
you're hacking their intented model and on thin ice for whatever will come or
change in the future.

I never really liked platforms where application development is tied to
distribution methods, especially not when .NET has it in its history to not be
that (other than maybe a very slight nudge towards ClickOnce). I felt like a
part of the .NET philosophy died with UWP.

I applaud Microsoft for where they have come and their latest developments are
intriguing but I see many quite major annoyances remaining. I work almost full
time with .NET though, simply because that's where my money is for now. But
I'm not touching UWP either at work or at home. It's still also receiving a
mixed response at best by developers, from what I've heard. It's like... "OK,
so here's this limited UWP app compared to WPF on desktop, because we have to
build it on an API with Windows Phone in mind which no one uses and then
upload it to this single store out of our control, with the excellent company
of scam apps tarnishing our trademark". I feel like this is Microsoft's
unfortunate reality of where things stand which they should move from. "How do
we best fix these concerns?"

~~~
mlsarecmg
Electron + React or React-native is the way to go. You get cross platform out
of the box, mobile as well, it is silly easy to work with, hard parts all
abstracted (notifications, updating, installers), the biggest dev community on
earth and an immense eco system.

The traditional desktop application is dead. In desktop land you have dusty
tools, slow and outdated UI frameworks (as in MVVM or worse: UI-in-code) like
GTK, XAML, ..., barely any community or components to re-use. Microsoft itself
starts to make its products on these new platforms. Visual Studio Code, or
Office fabric for instance. Many popular everyday apps that people use without
knowing it are Electron based.

We're currently transferring a huge C#/WPF monster into React. The gains are
ridiculous. React runs circles around XAML (less code, less boilerplate,
faster) while Redux makes handling state simple. And it's a thing of beauty
seeing it run everywhere, Windows, Linux, MacOs. Android and IOS as well with
few adaptions (React-native) while thanks to Redux the heart of the app is 1:1
portable.

~~~
rpeden
This approach doesn't solve the problem of Electron and NW.js apps being
terrible for laptop battery life, but this appears to be something that
typical end users aren't terribly concerned about.

On the bright side, React Native for Windows works quite well, and there's
even a WPF version of it[1]. React native for macOS[2] worked decently when I
tried it, too.

[1] [https://github.com/ReactWindows/react-native-
windows/tree/ma...](https://github.com/ReactWindows/react-native-
windows/tree/master/ReactWindows/ReactNative.Net46) [2]
[https://github.com/ptmt/react-native-macos](https://github.com/ptmt/react-
native-macos)

~~~
mlsarecmg
I've only brushed over React native for desktop. How was your impression of
it, is it worth a try over Electron? How do you handle packaging,
notifications, updating, installing?

------
Insanity
I currently work as a Java Dev, but the first language I really learned to use
was C#. I don't use it often anymore as I am on a Linux machine at home -
though I did try running it with Mono some years ago.

C# remains a pleasant language to use, and feels like it is quite a few steps
ahead of Java. I'd strongly recommend that people check it out if they
haven't, if only to get a feel of where Java might be in a few years.

e.g: Local variable type inference. This is one of the "small" features that
makes C# such a pleasure to use, and I am happy that it is proposed to be in a
future JDK.

~~~
irontoby
> I don't use it often anymore as I am on a Linux machine at home - though I
> did try running it with Mono some years ago.

I'm on Linux at home also, and am loving the combination of .NET Core and VS
Code.

I recently coded up a quick ASP.NET Core Web API for a client, which needed to
access a MySQL database and an existing SOAP service. I wrote it on Windows
using VS 2017, but then out of curiosity I literally just git cloned it on
Linux and ran "dotnet restore", "dotnet test" and "dotnet run".

The whole thing worked flawlessly on the first try. All unit tests and
integration tests (connecting to real external services) passed, it ran just
as quickly, and I was able to debug it in VS Code along with breakpoints,
variable inspection etc.

It was never possible to use Mono that effortlessly. Everything required more
work just to get running. With .NET Core, platform specificity is the
exception, not the rule.

And VS Code is truly a pleasure to use; IMO it's just the right combination of
features and performance with a strong plugin ecosystem, which has been
missing from Linux.

~~~
Insanity
I might just have to give that a try then, thank you!

------
shaydoc
Happy birthday .NET I have known you since the start. C# had me straightaway,
I was so relieved to stop using C++ lol (just kidding, no I am serious). I
remember the early developmentor crash courses we took, before embarking on an
"enterprise corporate banking ecommerce platform". Talk about jumping into a
new technology at the deep end. We hit all the issues, Dataset serialization
across .NET Remoting, Reflection costs, assembly size issues, remembering to
strong name the assembly sn -k, and the GAC. Oh and I will never forget the
talk on how .NET Remoting WebServices and XML are the future, but at least we
could fallback to TCP Binary when things got hairy performance wise!

15 years later its a hell of a platform now!

------
pjmlp
Happy birthday!

My only complaint back in the day, given Anders Hejlsberg experience, was that
we only got NGEN and JIT, but not a full AOT compiler without requiring
dependencies to be installed into the host system.

Well, at least .NET Native and xcopy install do finally exist.

~~~
shoover
I recall Joel Spolsky was worked up about this, too, and wrote an article with
the memorable title Please, Sir, May I Have A Linker? Somehow we built a ton
of apps and got along without the linker all these years, but it sure would
have been nice to save the startup time and dealing with customer machines
without the framework installed from the beginning.

I'm confused to what extent xcopy deployment works with .NET Native. The
Getting Started article[1] makes the point that the native binaries are
sitting there in ilc.out and that you should "Test your app thoroughly," but
it does not describe the deployment mechanism there, and double-clicking on
the .exe does not work. Are you xcopy deploying the appx file (which is not
there in ilc.out)?

[1] [https://msdn.microsoft.com/en-
us/library/dn600165%28v=vs.110...](https://msdn.microsoft.com/en-
us/library/dn600165%28v=vs.110%29.aspx#Step5)

~~~
pjmlp
The idea with xcopy deployment, is that you still use the JIT compiler, but
all required libraries, including the runtime, are packaged with the
application.

So assuming you haven't forgotten any library, everything is loaded from
there, not from GAC or somewhere else.

This only works for .NET Core.

~~~
shoover
Ok, I see you didn't mean .NET Native and xcopy deployment work together but
both are options now. Thanks for clarifying. I see the UWP app build folder
has _all_ the DLLs copied now.

------
moolcool
Now all the resumes that say '15 years of .NET experience' aren't necessarily
lies

------
6nf
I remember my senior year professor talk about this newfangled language from
Microsoft called 'C sharp' while we were doing some Visual Basic 6 work. Soon
after graduating I had the opportunity to choose a platform for a new web
project at my first full time job, and we chose .NET 1.1

Definitely one the best decisions I've ever made. Microsoft: Thank you for
.NET.

------
sharpercoder
I remember setting up 4 prototypes on 4 different platforms: sun jvm, adobe
flash, dhtml and .net. The last won, mostly because ease of development and
fast DirectDraw rendering of many datapoints. Never looked back, best decision
in my career.

------
wilsonfiifi
IMHO C# and .Net platform felt more approachable than the Java ecosystem.
Unfortunately when I shifted to Linux I had to leave it all behind. However,
it's refreshing to see the effort being put into .Net Core but way too much
time has passed and I've invested so much into Python (and more recently Go)
that I'm reluctant to switch back.

So congrats Microsoft for giving us this lovely alternative and thanks Jesse
Liberty and CodeSmith!

------
bananaboy
I took a subject at university that included a C# component. It was 2002 so it
must have been .NET 1.0. I liked it, it reminded me of Borland C++ for
Windows, Delphi, and similar RAD tools that I had played around with. I
remember being super confused by boxing at first!

It's really matured well. Great work, and Happy Birthday .NET!

------
skc
It's grown to become a very pleasant platform and ecosystem to dev in.

It's fairly fuss free for the most part. Good job MS.

------
mmcclellan
I remember back in those early days seeing job requirements that listed 10+
years .NET. Nice to see some people actually have that now.

------
fergie
Why did Microsoft never target any platforms outside of Windows with .NET?
(serious question)

~~~
nailer
Old Microsoft only wanted to sell Windows. There was a guy called Steven
Sinovsky who was apparently the main person behind that. When he left, MS went
cross platform. See the recent HN thread about Satya Nadella.

------
alextooter
Not happy at all! I love the old Visual Studio 6.0 IDE, the new devenv.exe is
getting more slower after each version.

Go back to native,Microsoft!

~~~
pjmlp
They did.

"Getting Started with .NET Native" \- [https://msdn.microsoft.com/en-
us/library/dn600165%28v=vs.110...](https://msdn.microsoft.com/en-
us/library/dn600165%28v=vs.110%29.aspx)

~~~
piyush_soni
I think the parent comment meant Visual Studio is slowing down with each new
release (they switched to WPF for developing it with VS 2010).

~~~
pjmlp
I got it, but given that VS is still way faster than any Java IDE I have to
use on my hardware, specially Android Studio, I just made that snarky remark.

Also I doubt very much that we could have had Rosyln with VC 6.0 architecture,
stuck in C++ and COM.

------
cobbzilla
so time to open source the whole thing? what a nice birthday present that
would be! :)

~~~
michaeljchou
.Net is open source

~~~
barking
Be nice if they could open source VB6 though, which hasn't had an update in 19
years.

I'm still using it, which makes me happy and sad at the same time.

~~~
ocdtrekkie
That isn't .NET. :)

But yeah, I wish they'd open source VB6 too. There were some fond memories
back there. I have some old programs I can't find components for online too,
which are somewhere in the old VB6 install. There's play potential, even if I
have no real practical need for it.

And it's hard to imagine that open sourcing VB6 would harm Microsoft's
business in any way.

~~~
alex_hitchins
Just wanted to say that I too would love to mess about with the VB6 (and
previous) code base. I can't see any commercial reasons that could prevent
this. Only thing I can think of is that it might give VB6 another lease of
life where they want to properly retire it.

Said it before and I'll say it again, I don't think there is anything out
there now that was a productive as VB6 development. Rapid Application
Development was the buzzword of the day, and it really stood up to the name.

~~~
frik
VB6 was awesome. Would be great if they could release it as open source.

RAD (rapid application development) of GUI applications was never easier and
such a joy then with VB6. I remember I was very sad when they announced their
vision for dotNet - it took them additional four years until dotNet was
available in v1. In the meantime they lost all developers to HTML and PHP &
co. Dreamweaver WYSIWYG was good enough.

~~~
alex_hitchins
Good point. I knew some people that moved to Delphi after VB5, which I always
kicked myself for not doing. However, I look back at the apps I worked on and
there was nothing there that that would look out of place today. Like any
language, you can write messy code and design poor UI, but follow principles
such as MVP, separate your data layer and such, it's still a good platform.
Having said that, I'd not pick it for a new project today! I've fallen very
hard for C#.

------
the-dude
Was .NET part of the anti-competitive ploy to run Java into the ground ?

Cheers.

~~~
pjmlp
That was J++, .NET was the implementation of COM+ Runtime ideas, which now
have gotten back to the roots with .NET Native/UWP and its COM architecture.

"COM+ Runtime"

[https://blogs.msdn.microsoft.com/dsyme/2012/07/05/more-c-
net...](https://blogs.msdn.microsoft.com/dsyme/2012/07/05/more-c-net-generics-
research-project-history-the-msr-white-paper-from-mid-1999/)

~~~
rpeden
There was also J#, though it wasn't really anticompetitive. Maybe it was just
the opposite, now that I think about it. Microsoft obviously felt that .NET,
C#, and the CLR were viable competitors to Java and the JVM, and offered J# as
a sort of on-ramp from the Java cowpath to the .NET expressway.

That's not meant as a knock against the Java world now; I just remember .NET
being a pleasant place to be back in those days.

~~~
pjmlp
J# was only seen as a way to port Java into C#.

I doubt anyone gave it any other use, in fact it was a .NET 1.x language only.

