tags:

views:

109

answers:

4

I spend last decade in *BSD environment (mostly Linux, some MacOS). I mostly work in Python, but also know some C, Java and Ruby and a bit of C++ and Erlang.

Whole .NET idea seems to be interesting to me and C# seems to evolved in nice language. However, I am completely lost in how Windows works now.

What is the best way to learn the whole ecosystem, language and platform? I would also like to explore F# and friends, but my greatest pain is with the whole stack and it's friends (Windows Forms, WPF, LINQ, ...).

My goal would be to gasp the whole thing and be able to do generic development (libraries, webdev, also to scratch desktop).

Where to begin? Which technologies/concepts should I not miss? What are the basic tools used on Windows (aside from obvious MSVS)? Any OSS ecosystem I should follow and learn from?

Free tools preferred, but I'd also like to know about commercial ones.

A: 

If you're after free tools, go for Visual Studio Express - this is probably the most frictionless way to develop software for Windows for free.

I think learning C# is the way forward - you'll be able to leverage your Java and C++ knowledge.

Just start working on something, and you'll gradually find the gaps in your knowledge. I don't think there's much value in trying to find everything you don't know in one pass, and learning it all in another - iterate!

Skilldrick
A: 

If your focus is on development, I would start with the free VS express editions vs 2010 express

Next is get basic info from msdn or c# specific

I learn fastest when doing, so if you are to start a pet project with the free tools, msdn or google or join an open source project on codeplex and learn from other people.

If you want more than just the express editions, user the web platfrom installer.

and o yes, ask questions on stackoverflow :)

KeesDijk
+2  A: 

There are (at least) four programming environments for Windows:

  • The kernel (for writing device drivers etc)
  • The Windows API (compatible with programs written in C, though people often use C++)
  • .NET (for languages like C#)
  • 3rd-party frameworks and languages, e.g. Delphi, Qt, Visual Basic, plus the various web and scripting languages and frameworks.

The "whole stack" (ignoring 3rd-party stuff) is .NET on top of Windows on top of the kernel: you won't learn it all.

"Grasping the whole thing" and "being able to do generic development" aren't the same: generic development doesn't require grasping the whole thing.

If you're more interested in the web and mildly interested in the desktop, then I'd recommend the .NET programming environment (not the Windows API). The Windows API is perhaps, now, especially for 'legacy' applications, which were started in the 1990s.

Where to begin?

  • Get a tool (e.g. Visual Studio Express)
  • Learn a programming language (e.g. C#)
  • Learn a framework and associated tools (e.g. Winforms or WPF or ASP)

Any OSS ecosystem I should follow and learn from?

I don't know; but I'd call that a different topic, because IMO "generic development" for Windows implies using Microsoft tools.

ChrisW
Thank. By "OSS ecosystem" I meant application ecosystem (not tools ecosystem), thus applications from corresponding layer (.NET environment, as You said) I can read/contribute to (as in "watching experienced developers over shoulder").
Almad
@Almad I don't know any OSS projects myself; a couple of famous ones include [Mono](http://www.mono-project.com/Main_Page) and [DotNetNuke](http://www.dotnetnuke.com/) but I don't know whether they'll help you learn anything; maybe see also [Open Source Projects and Starter Kits](http://www.asp.net/community/projects) on Microsoft's ASP.NET web site.
ChrisW
A: 

One resource which hasn't been mentioned yet is Coding4Fun. The website is operated as part of MSDN and so focuses almost exclusivly on the Windows ecosystem, or things that integrate with it.

Coding4Fun does have a beginner element to it, but the site also has some more complex and advanced content as well so it should be a good source of fun and challenging things to do with the new skills you develop.

I agree that learning the tools and language are critical to sucessfully making use of any software platform, but it's important to remember to keep building your skills and pushing yourself into areas of the platform you haven't used before to maintain your interest.

Crippledsmurf