WowBagger brings up a god point about certain Microsoft concepts being less than advertised, but this complaint is not specific to Microsoft - it's common. Marketing types like to make up hype-words and you will see a LOT of that at trade-shows. I suggest you join/subscribe to ACM or IEEE software publications to get a professional viewpoint without (as much) hype, exaggeration.
A lot of marketing concepts have no 'there' 'there'. Middleware, CloudComputing ,in there end there it almost nothing new - just new emphasis, spin.
As software development matures as a discipline, and as more and more solutions appear to address various problems, I find myself torn between an ugly plethora of choices. I read up on the latest developments, and am constantly told "this is the next big thing!" It's something everyone is doing, all the jobs require this knowledge, etc., etc.
It's your job to sort the jive from the facts. No curious person has enough time to learn all they would like, but you need to examine these concepts deeply enough to evaluate the value. Sometimes you will be wrong.
When I first started working as a developer, Rapid Application Development (RAD) was the biggest thing since sliced bread; today, it is a stupid idea that we wasted too much time on ten years ago.
That was a clear fad IMO; tho' design/throw-away/redesign has some value. My opinion is that "design patterns" has pretty much run it's course. That doesn't mean "zero value" or that you can ignore it, but you need not become either a fanatical acolyte nor a blinder-wearing curmudgeon. Study a little. To the extent you find it useful study more.
On the other hand, there is a serious problem with ignoring all the new trends and just sticking with what you know. That's what I did the first five years or so of my career, and I found myself seriously behind the times. Certain aspects of Agile development, Extreme Programming (XP), test-driven development, and domain-driven design have become essential tools for me in the last few years; none of this was taught in school.
Understood, I agree. Again - follow trend to the extent YOU find useful and continue to explore, read.
Today the next big things are "the Cloud" (whatever that is), and dynamic programming languages like Ruby. There is still no universal development strategy for the Web. Even if you stick with Microsoft, you have to decide amongst ASP.Net, MVC, WebMatrix, Silverlight, and other technologies. After twenty years of the World Wide Web, you'd have thought they would have figured out how to develop for it by now.
Get outside of the Microsoft hothouse and look around. That's a sad, inbred culture. There is no one perfect solution to web or anything else. The better solutions, subsume and absorb the lesser ones. It takes long periods of time if the two opposing 'schools' have much depth. Don't become a foot-soldier/true-believer; see both sides clearly.
At the same time, there are many people arguing that some tried and true technologies are dead and shouldn't be bothered with. C/C++, Java, PHP...these are platforms whose time has passed, according to some prognosticators, even though they are still dominant forces in the programming world.
As background (the sort you SHOULD have gotten as an undergrad), you should be able to use a procedural language with pointers, like C, and also have decent skills in an object oriented programming/design. C++(which version?) is ubiquitous but not the best IMO. You should have have a solid introduction to functional programming - that was Lisp and Scheme in my day. but I'd suggest Haskell today.
Sadly Java was used as the sole undergrad language at some schools and the results weren't good IMO. There is nothing wrong with Java, however it's not a broad enough basis for an education; it's the Pascal of the 90's. Given the trends you really need to consider the impact of parallelism and concurrency in software - both as functional languages and parallelizing libraries and as distributed systems.
Many BSCS types couldn't understand a semaphore, race condition or sketch a device driver if their lives depended on it. If you don't understand the foundation your stand on -then you can't make good decisions about building the next floor.
Given that a single person can only learn a limited portion of what's out there, and we have no idea what's going to actually be used an three years...how does one choose what to focus on today?
Plan to 'learn' 3 or more languages per year, not necessarily 100% mastery but good basics coverage and some thinking about the rest. Then it's not so important to choose the 'perfect' language to learn next. If you really enjoy one - then stick with it longer. You'll never regret following your intellectual interests. Read some good journals, but primarily opinion & thought that contradicts your own. Become a sukisha - a person of taste; learn to express comparative advantages and disadvantages of alternatives using your experience and reading. Think about how to express the differences.