Related
As it currently stands, this question is not a good fit for our Q&A format. We expect answers to be supported by facts, references, or expertise, but this question will likely solicit debate, arguments, polling, or extended discussion. If you feel that this question can be improved and possibly reopened, visit the help center for guidance.
Closed 10 years ago.
I'm planning to write a Windows app to help myself with some exploratory testing tasks (note taking, data generation, defect logging) and I've got stuck at the early stage of choosing a framework/language. My sole experience is with web development and from what I can see, WinForms, WPF, Silverlight, Swing etc are all simultaneously obsolete and thriving depending on who you ask.
While my main aim is to create the app, obviously I'd like to learn something useful while doing so rather than picking up skills with something that's never going to be seen on a project at work. Which Java or C# frameworks would people recommend learning?
Note: consider when this answer was posted (2012). Since then, things have changed a bit, for example Silverlight has been deprecated.
Native Applications
For employment:
Well, nowadays most companies (at least most companies from Oman and the UAE, where I live) are slowly migrating to the cloud. However there are still some opportunities for native app development. The most demanding framework nowadays, is, ( no.. not WPF ), it's Windows Forms!
Why plain old Windows Forms instead of the awesome WPF? One reason, legacy apps. Nowadays most companies only start small scale GUI Application projects, mainly Business applications. For that, WPF will be very expensive since they already have a work-force experienced in Windows Forms, and a lot of legacy code, however for WPF they will have to create a new code-base, and that's pretty risky. So the best thing to keep you employed is Windows Forms.
For new projects: However, if by 'worth learning', you mean, new, ambitious and glamorous. Then WPF may be the best choice for you. It depends on what your requirements are, really.
The Cloud
Now, for the cloud. Java FX and Silverlight are both currently head to head. However Java FX may have an edge since it supports a greater number of platforms. But then again, Silverlight has all the power and resources of Microsoft behind it, and it's ideal for Windows Phone development.
Comparison
For a comparison, here's what you get by each toolkit:
Windows Presentation Foundation:
The power and resources of Microsoft
Ideal for creating new Desktop Applications
Eye candy
Awesome API
XAML, best way to separate design from logic
Create Apps for the Cloud (but they only work on Windows with .NET though)
Windows Phone can run a subset of WPF
Windows Forms:
Used to possess the power and resources of Microsoft, now WPF has that
Ideal for maintaining legacy applications
A well-trained workforce, if you're an entrepreneur
Pretty mature API
Supports more platforms than WPF (through Mono)
Java FX:
Create Apps for the Cloud
Backed by Oracle
Pretty nice API
Cross-platform, runs on most PCs, smart phones are a problem.
Silverlight:
Create Apps for the Cloud
Backed by Microsoft
Pretty awesome API
XAML
Cross-platform, runs on Mac and PC, runs on Windows Phone.
GTK#:
Cross-platform, runs on most PCs, runs on no smart phone.
Backed by the Open-Source world
Endorsed by Mono
Ideal for creating Apps for Gnome.
Swing:
Cross-platforms, runs on most PCs, smart phones are a problem.
Pretty mature
Ideal for creating 2D games, using Java2D
Conclusion
As you say:
While my main aim is to create the app, obviously I'd like to learn something useful while doing so rather than picking up skills with something that's never going to be seen on a project at work.
Well, the frameworks you are most likely to see at work (if you don't for mainstream companies like Microsoft, Oracle, Google etc. ) are Windows Forms and WPF. At least that's what most companies use here. So those are what I recommend. JavaFX and Silverlight also look like they have potential and may be used in the near future.
WPF. Best support for Windows. BTW, it's not obsolete.
One option for you might be to create your application as HTML+Javascript and run it in your desktop application by embedding a browser engine (IE or something else). If you need native APIs, there are mechanisms to make these available to browser's Javascript code.
Java FX 2.0 seems very promising and is now live if swing looks obsolete to you. Note that it has little in common with previous versions. See for example this short comparison with swing. And oracle said they plan to open the source.
Now it is fairly new so unlikely to be used in existing applications.
Closed. This question is opinion-based. It is not currently accepting answers.
Want to improve this question? Update the question so it can be answered with facts and citations by editing this post.
Closed 3 years ago.
Improve this question
I am an experienced Java developer who is trying to learn web development with Java presently. I also had web development experience with ASP.NET (c#) and PHP. I know what basic concepts (JSP, Servlet, Bean) and looking for a framework to go.
My question is not "What is the best framework for Java" or something similar.
After reading many threads on here and searching on Google for many hours I feel scared and confused. There are so many frameworks and endless combinations. I'm about to change my mind to do this in .net or even PHP.
Is Java really suitable for very small teams (1 or 2 members) to develop web applications?
Is Java really suitable for developing web 2.0 applications?
Isn't .NET and PHP are far less confusing in this context.
If choose a framework and after 6 months I decide to use another, is it possible to migrate easily?
It just feels doesn't right to spend a same effort that I spent to learn Java to a framework that anytime can be changed or become useless. Am I wrong?
Is Java really suitable for very small
teams (1 or 2 members) to develop web
applications?
Of course it is, as long as those one or two team members know Java well. This is a ridiculous question that depends on how you'd like to define "suitable". I'll err on the side of conservative and interpret "suitable" as "possible".
Is Java really suitable for developing
web 2.0 applications?
Are you asking if JavaFX is suitable, or can the web 2.0 UI technology be Flex or something else? I haven't used JavaFX myself, but I think Java back ends can co-exist very nicely with web 2.0 front ends. Services are services.
Aren't .NET and PHP far less confusing in this context?
Your wording needs some work. There, I've fixed it. Depends on how well you know .NET or PHP. PHP is arguably "less engineered" and more straightforward, but every web app isn't a web CRUD app. .NET can be as engineered as Java, but it has the perceived virtue of using features that are part of the framework. At least everything is from Microsoft. Maybe you're confused because there's more choice with Java.
If choose a framework and after 6
months I decide to use another, is it
possible to migrate easily?
It depends on the framework and how well you layer your application. I would say that if you layer your code properly things should be modifiable. But frameworks tend to be glue code, so if you depend heavily on the framework it'll be hard to extract it no matter which one you choose.
It just feels doesn't right to spend a
same effort that I spent to learn Java
to a framework that anytime can be
changed or become useless. Am I wrong?
Anything can change and become useless. Microsoft can decide to re-write their Enterprise Framework 4.0 in such a way that it's not backwards compatible. I don't believe it's a language flaw - Java isn't the only one that's prey to this scenario.
You're right - you're always at risk when you take on a dependency. You're also at risk when you write and maintain everything yourself. You need to choose well to minimize risk, but you can never eliminate it entirely.
My recommendation? Choose Spring and sleep at night. It's a terrific framework that's hung in there for eight years and counting, still going strong. It has a great web MVC framework and lots more. The idioms it encourages will make your Java apps better: more layered, easier to maintain, possible to play nicely with other frameworks, minimizing your risk. They're owned by VMWare now, so they aren't going anywhere.
I think you'll find quite a few varied answers. I'm a .NET developer, I personally love to use .NET, ASP.NET and ASP.NET MVC. If you are comfortable and know Java well, why not stick with what you know? You're right that there are a myriad of framework choices, and this is true for pretty much all the platforms.
Java is suited for both small and large teams. Having a good source control solution in place will benefit any team, so make sure you consider how you are managing your source when working in a team.
The whole Web 2.0 isn't really fixated on a specific server-side technology. The broad concepts of Web 2.0 (even though it's just a magic term) is that of building rich, interactive applications. You could have a Java backend, a .NET backend, and PHP backend, a Python backend, really the choice is entirely up to you. Can they provide the same sort of services to calling clients? I think they can.
PHP and .NET benefit from huge development communities (not saying Java doesn't), and there are a whole host of projects going on with this platforms. Taking .NET as the example, you can extend it, you can build on it, heck you can even pull bits out and replace it with your own. I wouldn't say that you can't do that in Java, it's just that it would seem (to me) to be easier with .NET.
Migration is a tricky beast, you've got to be mindful of how your using the technology, and if you are doing something particularly special, how well would that translate using another technology. If you stick with a familiar design philosophy (such as MVC), you'll find it easier than say migrating from an JSP straight to ASP.NET MVC, etc.
Computing software moves at an amazing pace, and we all have to keep up or get left behind. You've got to ask yourself, are you making this platform decision for personal or business reasons? If it's for personal reasons, do you feel that you are likely to enjoy developing this in future, is it for personal growth and development? Where do you see yourself taking it? If it's for business, can you see what sort of investment you are making in this technology? Are there likely to be any winds of change which would make you question your choices at this stage?
Sorry if that's all cryptic, I hope it helps.
I don't think there is anything wrong with trying to stick with what you have already known. But there are many web frameworks out there that can help you deliver a product much faster. You mentioned ASP.NET and php but there is also RoR which is very popular and quick to get going. Not to mention that a lot of these languages have web frameworks that speed things up even more. I would start looking at these vs going JSP or some other Java approach.
But this is just my opinion.
I suggest you to use frameworks that use POJOs. With spring, wicket and hibernate/ibatis you will be OK for a long long time.
My opinions:
answers
1: yes
2: what really is a web 2.0 application? (yes)
3: no idea
4: will hurt you few days, but will certainly be possible.
5: depends what frameworks you decide to use. (yes)
"DON'T PANIC" -The Hitchhiker's Guide to the Galaxy
I have significant experience building web apps in Java, .NET, and Rails. PHP, not so much. So here's my very opinionated opinion:
Web development frameworks in Java (there are a bunch, but look at Spring) are mature and easy to learn. So if you want to run with Java, you're definitely not doing anything dumb, regardless of your team size, or the "web 2.0"ishness of your project. It's all good.
That said, here are some things to think about if you want to explore other options anyway:
C# is a way better programming language than Java, and I used to be a Java fanboy. They're very similar in many respects, and the transition is easy, but C# just fixes so many of the pain points in Java, and just holds together a lot better. I know you're not asking about languages, but if you're considering different platforms, it's definitely a factor.
Until recently, Web development was a real pain in .NET, because ASP.NET with web forms was pretty awful for non-trivial projects. There is a relatively new MVC platform released by Microsoft. It's nice, easy to work with, and has a growing community. On the other hand, it's practically your only .NET option (aside from Monorail, which has a shrinking community and a lot of bugs).
.NET isn't strictly tied to Windows thanks to Mono, but there's definitely a Windows skew to the community and libraries, and the Mono project is always a bit behind. You'll have to decide if that's relevant to you.
Rails is a blast. A lot of things that are complicated in other frameworks are trivial in Rails. It's certainly not without its issues, but for getting a solidly-architected product running in very little time, it's tough to beat.
Unless you have a very good reason to use java for web development, don't. Statistcally speaking, PHP is king in web development. You will also find many more frameworks and much better support for web development.
If you want to take a step away then try python, ruby, or CGI. They are all decent backends that work just as well in most area's that PHP does.
The main thing here is to go with what you know. Unless it's java.
Very few still use Java for web development. PHP is the winner in this sense because of the community and the immense choice of fully-featured applications available for free. Enterprise level apps are easier to implement using .NET, due to the new features in C# and due to the existence of SharePoint. Python is also used by many, including Google and YouTube. Ruby has its fans due to the Ruby on Rails platform and its language elegance.
I have many acquaintances working exclusively in Java, and get paid very well, but they practically don't touch the Web part.
My opinion is very subjective.
Closed. This question is opinion-based. It is not currently accepting answers.
Want to improve this question? Update the question so it can be answered with facts and citations by editing this post.
Closed 9 years ago.
Improve this question
Apologies in advance for the possible flame thread, but that's not what I'm going for.
I've only ever done serious development in Linux using C and C++, and I'm looking to take the plunge into Windows. I've been doing some reading and asking around, and it seems to me that .NET with C# is the way to go for developing commercial user-oriented business applications for Windows.
A big consideration for me is the integration of the user interface into the desktop, since this is what the user ultimately interacts with. Is it possible to recreate the look of the Office 2007 GUI in Java, for example, or is this only possible with .NET?
I'm also concerned about portability. In the future, I may want to port the application to Linux. I know about the mono project, but I'm wondering if it wouldn't be better to go with Java.
In short, what are the trade offs between Java and C# when developing commercial, user-oriented business applications primarily intended for Windows?
The most important bit is in "primarily intended for Windows".
If you only need to work on Windows, C# is likely to be a much better bet than Java. There's a better variety of visual styles which blend in well with Windows. It also makes interoperating with native code (e.g. bits of the Win32 API or COM libraries) easier than Java. Personally I prefer it as a language, but that's a different matter.
If you need to run on other platforms, I'd seriously consider Java. While Mono has quite a lot of momentum, it doesn't have the same degree of compatibility with .NET as Java does on the various platforms it supports.
So basically, weigh up the "may want to port" aspect very carefully - it's the driving factor in the decision, from my point of view. Once you've decided to do a port, it doesn't matter much if 90% of your customers are on Windows - it'll still need to work, and work well, for the remaining 10%.
First off, whether or not your GUI will look good on windows will depend more on your skill with GUI design than it will on your choice of language or toolkit.
Windows Forms doesn't really give you full access to the Windows GUI functionality using the documented API. You'll have to make calls to native API functions or at least use windows-specific messages to achieve some effects. Also, I don't think there is a built-in way to access the Office 2007-style ribbon control. You'll need a 3rd party component for that.
A lot of .Net apps rely on 3rd party widget sets to achieve nice looking GUIs. Be warned that these frequently rely on P/Invoke or other windows-specific functionaly and thus don't work on mono. So if you really want a cross platform GUI, .Net is not the best choice.
You can also do .Net GUIs in Windows Presentation Foundation, but again this is not supported in mono.
GTK# works well on Unix and windows, though it looks slightly less native on Windows.
Java Swing is very cross platform and is looks pretty good with a platform native look and feel. You could download Netbeans to see it in action.
SWT is an alternate toolkit for Java that has slightly less cross-platform compatibility than Swing, but is still popular nonetheless. Eclipse uses this toolkit, so download that to see it in use.
Since you have an expirence with C++, you can go with C++ plus Qt for GUI. It's a good cross platform GUI library, and you can recompile the code to work in Windows, Mac, and Linux with consistent look.
Sure you can make nice interfaces with it, but maybe not as cool as MS Office interface (Microsoft blend).
You may consider it as an option.
http://www.qtsoftware.com/products/
Examples
http://www.qtsoftware.com/qt-in-use
If application is primarily for Windows - use .NET.
If you're serious about porting later - avoid use of P/Invoke, .NET above 2.0 features and 3rd party toolkits with rich GUI (which aren't running on Mono)
There are present nice and commercial .NET cross-platform apps including nice http://www.codicesoftware.com/xpfront.aspx
plastic scm UI http://www.plasticscm.com/screenshots/gui27/visual/brexplorer04.png
and many others - http://www.mono-project.com/Companies_Using_Mono
Also many developers prefer VS IDE over Eclipse and C# over Java. But if your application primarily Windows - I bet it's better to use .NET. ESPECIALLY if GUI integration is main concern, because making Java applications look like native Windows still painful. Under .NET there are LOTS of controls for Ribbon interface (inluding native one). Try to find same for Java with proper look and you'll understand what I mean
With Mono (if you will keep the main rules) most of the time you won't have a problem of porting and embedding Mono itself inside your application.
Closed. This question is opinion-based. It is not currently accepting answers.
Want to improve this question? Update the question so it can be answered with facts and citations by editing this post.
Closed 5 years ago.
Improve this question
I'm going to advise a company on a project soon, and I'm not too sure about what programming language I should advise.
It's a fairly straightforward (desktop based) application with a central datasource on the network, for storing and editing parts that make up a machine. The machine needs to be configured in the application, and with this configuration production documents (manuals, software, bill of material) are generated. (e.g. if part A and B are added to the configured machine, then variation X on chapter 5 of the manual has to be used, if that makes sense)
There's a few non-standard components like a tree with radio & checkboxes, and it has to have some sort of version control in it. It needs a WYSIWYG editor to edit chapters of manuals. It doesn't necessarily have to run on platforms other than Windows because it will only be used on the company network and everybody runs windows.
I was thinking Java because of it's huge numbers of useful libraries and free IDE's. I'm a Java programmer myself so I'm not very familiar with other programming languages. Any thoughts on what language I should use, and why? I believe there's a bit of VB/VBA and Delphi knowledge present in the company (it's not an IT company and I'm not likely to program it myself).
Thanks heaps!
From what your describe of your application and environment, nothing can beat Delphi!
It's the ideal case for Delphi to shine:
- native desktop application with fastest performances and development combined.
- plethora of excellent (often free) components; you'll probably find your tree
- extremely powerful yet simple for DB applications
- very active and helpful community
See also why I recommended it for another SO user.
I think if you have Delphi knowledge in your company : it is a very good choice for Desktop application and as avar says : you can find a lot's of good components here Torry's Delphi Pages.
I recommend this article
for desktop applications ( plus with database/win32 things) i'd recommend delphi. u can find many good components availabe .
You probably want to choose the language that your team has the most experience with. I personally am into Delphi, and it sounds like this might be a good choice for what you describe. Delphi is highly suited for Desktop apps talking to a database. However if your team (those writing and maintain the app) are more experienced with Java / C# / VB then you should go with that.
Well the scenario you describe is not very language specific, so
here are a few hints:
generally, java is absolutely ok but:
In a windows world, you can live easier with .net languages,
because of direct access to COM/activex for combining documentation snippets
in adobe or Word
since there's some vb knowledge about in the company, maybe the task of
maintaining the software becomes cheaper.
I would suggest c#, because via mono, you can go Linux where and if necessary.
well, that's my 2 cents.
Depends. On many things. What language are you familiar with? What database do you use (MS SQL has some advantages when used with a .NET language, but can also be used with java, or ...)?
The libraries are (at least for me) not a main decision point since there are a lot libraries for other languages too.
If you do not program yourself, ask the developer doing the job. Projects have other marks than technology such as time used and money spent. If you choose a language the developer is familiar with, it's more likely to be in time and in cost.
Your question is somehow far too open to give an exact answer. But maybe this helps you to think about it.
You should use whichever language is:
1) Most appropriate for the project
For example: If your project requires real-time processing, use a language that is conducive to performing that task.
2) You (and your team) is most comfortable with.
You would need to discuss with your team whether any languages that you currently know between you all are appropriate (keeping point 1 in mind). If none are appropriate, which language (with point 1 in mind) will all be most comfortable with in learning, developing and supporting (maintaining) throughout the life-time of your project.
This sounds like very curt advice, but I believe it's crucially important. If your project is to succeed, you need a language that you can "live" with, and will work with you rather than against you. If you were a wood-worker, you could use a hammer to put screws into a piece of wood, but wouldn't you be much more comfortable using a screwdriver?
Of the tagged languages, avoid asp.net as it's a desktop application. Other than that all the other languages would do a good job. It would come down to personal preference (more importantly the personal preference of the developer).
I'm a Java programmer myself so I'm
not very familiar with other
programming languages.
If you're going to write the software you should use Java. You're already familiar with it and your familiarity can help you delight your customer.
If you aren't writing it you need to find out who is and take their experience into consideration. Having them learn a new language just because you don't know what they are familiar with is not exactly a good way to go.
Java would work, C# would work (I would personally pic C#), it really just depends on the experience you have available.
What is this about the "non-standard" components? If there are 3rd party controls they want to use that might dictate the language/platform to work with. There are lots of free controls and examples in Java and C# as well and extending the standard Java / .NET controls might even work better that going with the 3rd party controls.
Sounds like you need to know more about the application and some other things that are out there before you can really be advising somebody else on what to do.
Well, there is a lot of wisdom with using what you know (Java).
However, just to counter the "because of it's huge numbers of useful libraries and free IDE's" - .NET also has a huge library base, and free IDEs (including the Express editions of Visual Studio). For .NET, C# would be a "closer" language to Java than VB.
I reckon you'll end up with Java, though (through familiarity - not always a bad thing).
When we build client side systems we use .Net (C# usually). We do Java on the back end, but it sounds like you may not have a traditional back end. For all the libraries and frameworks that are available for Java the vast majority of high quality UI components are in the .Net space these days.
When you are managing the development and someone else is doing the implementation and maintenance then I'd suggest to negotiate the programming language with them.
When you have to do the maintenance then focus on languages that you know.
If you do all/most of the work, just use what language you are familiar with, when you don't have enough time to learn a new language on the way. Especially if the application is important and needs to be pretty bug free. (although there is never a "last bug" as we all know) ;-)
The amount of 3rd party libraries is not a good criterion because this doesn't reflect their quality (maybe most stuff is crap) and many libraries means also a big chance to select the wrong one.
Don't forget to check if the chosen language is capable of doing the job. (Speed, platform constraints, memory footprint, ...)
I think it doesn't really matter that much in which programming language and environment you program, as long as you get to know it thoroughly. C++, Java and C# all have good libraries and all have their strengths and weaknesses. The important thing is that you know the peculiarities of the language, the development environment, the debugger, a good profiler, the standard libraries, the best third party libraries, etc... Moreover, after a while you can reuse your own code as well. For example, you mention an advanced tree widget. In our company, we have our own tree (in C++) which we can finetune as we like.
Closed. This question is opinion-based. It is not currently accepting answers.
Want to improve this question? Update the question so it can be answered with facts and citations by editing this post.
Closed 2 years ago.
Improve this question
There's a lot to C# & ASP.net. Where should I start? What should I not bother focusing on?
Should I learn Winforms then WPF? Ditto for webforms / Silverlight?
Should I learn ASP.MVC or classic ASP.NET? If both, which first?
In the either/or cases - which will make more sense having known the other first?
What major .NET feature(s) should I learn upfront that will open the doors of understanding to what lies ahead?
I am deliberately not mentioning fundamentals like value / reference Types, Classes, object-oriented concepts, etc since they should come first, before specifics. Here, I am interested in specifics.
[edit - added detail of what my goals are]
Good points raised - "what do I want to write"?
Basically, an intranet application that monitors a set of documents and implements a workflow as a change control process. The app will also audit the documents and report problems, self-correcting common errors. A lot of the parameters will need to be end-user definable and pluggable. The document format needs to be adaptable to different proprietary formats although they are fundamentally the same. The app will be very modular.
I'm leaning towards a web interface because the client specs & admin rights will vary - a browser is really the only thing I can count on.
As you can see, it's a bit of everything.
What do you want to write? If you want to write a Windows client-side app, look into WinForms and WPF (no real need to learn WinForms before WPF, other than the way that a lot of tutorials/books will probably compare WPF concepts with WinForms concepts). If you're looking at a web app, then ASP.NET or ASP.MVC - I don't know whether you really need the "normal" ASP.NET before MVC.
Silverlight is a bit of both, in a way - rich client probably talking to a server for interesting data etc.
Before learning any of these though, I suggest you learn the fundamentals which are one step up from the topics you mentioned - things like how text works in .NET (including encodings and regular expressions), I/O, perhaps threading. Oh, and LINQ :) There are a few books which are very good on this front:
C# 3.0 in a Nutshell
CLR via C#
Accelerated C# 2008
I had the same question when I moved from Classic ASP to .NET 2.0... .NET is huge: so where should I start?
What i did was put my hand dirty and started slow, take a project (in my case was a very important project - a finance web app that would cover and automatize all 4 persons work) and start to implement, every time I didn't know how to accomplish something or I had an idea in ASP but not in ASP.NET I would go to www.asp.net or 4GuysFromRolla website and search for examples, copy/paste, understand what I was doing and ... continue to the next wall.
Took me 6 month to have everything up and running but was worst it! now that passed almost 3 years I know I did the right choice but back then ... I was scared!
now... you refer .NET 3.5, it has a bunch of new things like extensions, linq, etc... I would go by the simple part and when the times comes, "maybe I can use LINQ here, let me search how to use it on this part"
hope you follow your own path and buy some reference book so you can read something new and have a reference whenever you need "ahhh, I read this somewhere in the book, let me search... where was it?"
I bought Professional ASP.NET from Wrox as a reference book, and even today I go there to see new things, even when I'm started to use .NET 3.5, the idea is there, there is only a new way to accomplishing it.
I would recommend learning whatever you are interested in. Pick a "pet project" and try to create it using one of the technologies you listed. If you enjoy making windows desktop style applications, then go with WPF or WinForms. If you enjoy the idea of making rich desktop style applications on the web, then go for Silverlight. There will be a ton of overlap.
But in terms of core .NET Development, if I were starting off fresh, I'd recommend learning ASP.NET MVC first, as it will give you a good basis for things like: Designing for Testability, coding without ViewState, SEO-friendly URLs, etc..
It depends (awful response, I know, but let me explain)
Are you going to do any windows forms development? You mention C# and ASP.NET, so to me it sounds like you are doing Web-based programming. If so, skip Winforms and WPF for now.
Silverlight is worth checking out, but it is still fairly new so I'd make it a 2nd priority.
Now to the MVC or Web forms question. MVC gives you total control over the HTML, CSS, and Javascript that is emitted, but requires more work, whereas Web forms gives you ease of development but without 100% control over the markup that is emitted. You can do lots with Web forms and the introduction of MVC doesn't threaten the future of Web forms. MVC is very new so things are changing but eventually I see them both living happily side by side.
Regarding learning .NET in general, I've heard great things about a book called CLR via C# which will go over all the fundamentals and inner workings of .NET.
Definitely learn the fundamentals (like you already mentioned) like how the CLR handles types, garbage collections, security, "AppDomains", threading, etc.
For ASP.NET, learning the "page life cycle" and "control life cycle" are essential. Also, session state and data binding are probably good things to understand.
I wouldn't worry about WinForms, WPF, or Silverlight for now. They won't directly help with ASP.NET and are relatively easy to pickup after you've learned the CLR and .NET Framework fundamentals.
What is your primary objective - learning for fun or hireability? If you're a student and years out from worrying about a career in programming then I will strongly echo the idea of picking a project about something relatively simple that you're interested in and then just doing it.
Say you want to create an application that will track your video games collection. First you'll need a way to store the information - this will be a combination of c# and some persistence strategy like mySql or SQL Server or XML.
Then you'll need a way to present your collection and interact with it - adding, deleting and editing objects and persisting the changes. In this step, use every presentation technology that you're interested in - WPF, WinForms, Asp.net, asp.net with MVC, Silverlight - whatever you're interested in. As you learn to do one, you'll learn techniques you'll need to use in the next.
Don't pick just one - play with all the ones you have any interest with at all.
Now, if you're primarily interested in what skills will get you hired the quickest, I'd say look at your market, but it's probably going to be straight ASP.Net skills that will be the most in demand - or at least that's what it looks like from my perspective. In a couple of years it may well be ASP.Net MVC skills. In some markets though you'll have an easier chance of getting VB6 work. It all depends on where and when you're looking.
I highly recommend the following books, for learning about whats new in ASP.NET 3.5
ASP.NET MVC 1.0 Website Programming
Professional ASP.NET MVC 1.0
ASP.NET 3.5 Website Programming
Sometimes videos might help. I learnt everything I needed to know to start off with from a set of video tutorials from Total Training which is here. Pricey if you buy the disks but there is a cheaper online only option.