Microsoft, Which I Hate and Which I Love

Ok, I’ll admit, I got issues with some of the past Microsoft ethical breaches of business dealings. Sure, but who doesn’t? Their technology that they develop ranges from complete crap (re: Bob, paperclip, sealed classes, The 1st X version of Entity Framework) all the way to the completely awesome amazing stuff, like the Node.js SDK & work with Windows Azure for Node.js, Visual Studio can be amazing sometimes too, and there are other things that are really solid pieces of software.

So here’s my happy list and shit list of Microsoft Software:

Happy List

  • Visual Studio – When it works, after it takes 20 seconds to launch and you finally get the bloody project open, it’s a great IDE.
  • Live Writer – For blogging, nothing holds a candle to this product. It is spectacular, I wish it ran on OS-X because then I’d still use it. Even with all its greatness, it’s not enough of a motivating factor to use Windows as my core native OS.
  • Web API – This should have been attempt #1. Instead of the catastrophic mistake they made in WCF. (see below for WCF comments)
  • C# – C# is actually a great language and I find that it is very similar, but in many ways knocks the socks off of Java. Especially in ease of use for a number of things. Which of course is in conjunction with Visual Studio, etc.
  • Sketchflow – This is a great post paper prototyping software package. I don’t know many that use it, but for creating a working prototype or mock up, this software is great.
  • Windows Phone 7 – This is actually not a bad OS for a phone. It is a drastic improvement over all the previous MS phone operating systems.
  • Metro – I actually like Metro. It is simple, I feel like I’m 5 years old when I use it and I think in the same vein of what Apple has perfected, it’s just enough for the average computer user to make the tablet leap. It could be truly big.
  • XBox – Nuff’ said. Xbox kicks ass on massive scale!  🙂
  • Windows Azure – Primarily around the node.js space. They’ve done a stellar job and have an absolutely amazing product there.
  • MSDN – This is one of the best developer spaces around. MS devs often complain about it, but really the alternatives are weak and few between.
  • ASP.NET MVC – Rails envy brought to focus in a good, solid, organized and nicely put together product.

Angry List

  • Vista – Nuff’ said.
  • Win ME – Nuff’ said.
  • Most of Windows – Nuff’ said.
  • Stability, speed, launching, and related software issues that Visual Studio, Windows, and almost every Microsoft package has compared to the responsiveness of OS-X and general *nix operating systems.
  • Metro on Windows 8 – As a power user, I already hate Metro. Microsoft is about 6 years behind in the phone and tablet wars and it shows. As a power user I’ll admit, iOS isn’t much better or worse, but the thing is it is relegated to the iPad and iPhone (iPod). Windows 8 is going to be on everything. On a tablet I don’t want a flaky desktop tainting my experience and when I’m trying to do development on a desktop I don’t want a wierdo start button replacement screen buggering up my desktop work. Generally, so far, I’m not really happy with it or seeing how it is going to speed up any of my work or help me be more productive except in surfing Facebook or Tweeting. Somehow, that doesn’t seem all that important.
  • Windows Azure – For infrastructure, and almost everything else besides node.js stuff, it’s still a catastrophic mess. It looks absolutely great, but I would still struggle to suggest someone use it for all but node.js deployment. No offense, it’s just not in a space yet that works for most of the companies I work for. It might get there, but at this point I still find a lot of frustrating points.
  • Biztalk – Nuff’ said. It’s absurd anyone pays for this.
  • Sharepoint – I get the usage, I still hate the package. There are vastly superior alternatives out there.
  • WCF, Entity Framework and every other piece of software Microsoft made almost impossible to write unit tests for. All while throwing up a middle finger and screwing over their actual developer community. Many of these offerings did not have good results in the end. Hopefully developers are able to generally ignore the versions that were horrible and just use things like code first EF or Web API now instead of the previous years version of WCF & EF.
  • Windows Server – I’m not sure this server even now, understand how to interact with the Internet, HTTP, TCP/IP or a number of other Internet related elements well. It does it, but at the core there are a lot of problems still.
  • Hyper-V – Not sure I should even get started. Microsoft ignores it for years, then builds a cloud on top of it and pretends it is Enterprise ready. Knowing full well that it is probably the worst virtualization solution on the market today. Machine management is bad, launch time is bad, setting up images is ridiculous and the list of problems only grows. Anyone using this product is extending 2-5x more resources than using a comparable OSS or VMware virtualization product.

Software I’m indifferent about…  i.e. software that is ‘aight’ and I could go either way on.

  • SQL Server

There isn’t that much I’m apathetic about. I’m usually either stoked by their product or horrified about it. Any other key software I’ve missed? How do you feel about this list of software? Got a happy list or shit list of your own? Post a blog entry on it and I’ll add a link back on my entry to yours – just leave a comment (or link back of your own).

UPDATED:  Here’s another entry of some MAJOR issues that found in Windows 8. They’re some pretty dangerous gotchas!

40 thoughts on “Microsoft, Which I Hate and Which I Love

  1. “Windows Server – I’m not sure this server even now, understand how to interact with the Internet, HTTP, TCP/IP or a number of other Internet related elements well. It does it, but at the core there are a lot of problems still.”

    Er, wtf? Just no. It’s even the first Server OS with baked-in WebSocket support.

    1. Now that I’ve re-read that sentence, yikes. I didn’t write it very clear. To put it simply though, I’m not super stoked about how much overhead/work a Windows Server has to do to provide a lot of the fundamental internet services or be part of the internet vs. a *nix machine. I’ll admit, they’re vastly superior to Windows 2000 and 2003 Servers of yesteryear, but overall they’re still kind of tricky to really get good perf out of for a number of things. An admin usually has to dig into them deeper then they’d have to dig into a *nix machine…

      …and don’t get me started on trying to replicate out Windows machines for cloud computing. That’s just painful, I’ve seen so many have servers – completely clean images – just fall over on creation and duplication. A rarity with other OSes.

      Not that I wouldn’t use it, but would love to see some improvements in the OS. Windows Server 2012 (or whatever it is called) should be interesting if they’ve cleaned it up as much as they have Windows 8. 🙂

      1. A lot of what you describe here has very simple answers.

        Yes doing blocking I/O on a socket in Windows is crap. Don’t expect select(), recv() etc to perform like they do in UNIX. They just won’t. But they were never intended to. Windows has optimised all its I/O around overlapping and concurrency. To this end, you must use overlapped I/O with your socket as an absolute minimum. Even better, bind it to a I/O Completion Port (IOCP). The .NET BCL has very good baked in support for these. You can write stupidly stupidly scalable socket applications using this design pattern (IOCP). To such an extent that I’d question whether a UNIX flavour without a similar IOCP pattern could keep up. (Because there’s only so much performance you can eek out of a synchronous sync() call).

        The “[replicate out a single pre-built image]” sounds like the typical domain controller “duplicate SID” issue that any Windows sysadmin would know about.

  2. WCF?

    WCF is desinged around interfaces. Want a unit test? Just create a mock that implements the correct interface instead of returning the real channel. This is a text book example for DI.

    Or if you want a more realalstic test, setup a mock data server that implements your WCF contract.

    1. Ah, I should have clarified, my big problem with WCF is it has an extremely bloated and configuration based model. It works against the entire premise of KISS, makes it hard (at least from practice) for developers to think in clearer terms around DRY and other things, and abstracts at the wrong later around RESTful practices. Not until Web API has there been an effective and accurate RESTful patterns and capability to build around RESTful ideals until then. The hyper text nature of it was just broken, almost completely by most of the WCF paradigm. No to mention there have been oodles of other performance issues and the haphazard programming implementations that seem to be built around it.

      Want a truly good stack, go Web API or Service Stack. Those are some of the best options in the .NET world.

      As for DI, just because you can doesn’t mean you should. If the test only verifies coding like a check list but nothing to the business case, it’s just busy work. These things in the end give testing a bad name and give developers an excuse to “hate testing” because they get the erroneous idea that they shouldn’t test. Testing for the sake of testing is bad, testing to verify the end user has their story told is extremely important.

      1. Oh, I definitely agree with you on those points. However I think a large part of the problem is simply a lack of quality documentation. There is a lot of ways to easily extend the WCF pipeline if you happen to know where the extensions points are.

  3. Regarding Metro on Windows – having used Win8 for a little while now I actually quite like the whole experience – hardly ever spend time in Metro-land though. Finding apps etc. in the new start screen is a breeze.

    1. I’ll admit, the more I use it the more it is actually growing on me. I’ll also admit, it took Scott Hanselman’s blog entry and chat with Brad Wilson before I really started to figure out some of the strength of it as a desktop OS. Tablet, it’s easy, I’m digging that. As a desktop OS… I’m still a little mixed about the results. However I’m definitely feeling better about it now that I’ve read Hanselman’s stuff and played with some of the options he details.

      The real question though is, where does one go to learn about all these shortcuts and hidden keyboard combos?

      1. A lot of the comments on Hanselman’s post are to this same effect. My two cents: these were added not for standard users, but for power users who, I’d argue, prefer keyboard shortcuts over mouse interaction anyway. So how do power users find the shortcuts? They look for them. It’s kind of like becoming a Mason; when one is ready, one will seek out what one needs to know.

        Example: most standard users have no idea what an event log is, much less why they’d need to use one. Power users are more likely to know what it’s for and when they’ll need it, so they’ll likely search out the most efficient way of bringing it up.

  4. Windows 8 and its Metro interface everywhere is a mistake; it should be possible to switch back to the regular desktop interface for actually working under Windows. Touch screen is not yet standard on laptop and desktop.

    1. Oh yeah, for sure. MS Office has and just does suck. PDFs are a complete and utter pain, and IE…

      …yeah I could write a book on how horrible IE has been.

  5. Stealing Visual Studio from Borland, was a smart move on Microsoft’s part.

    So long as Microsoft was dedicated to command line compiling only, the competition continued to eat them up.

    I sometimes wonder where we’d be, if the folks that ran Borland, hadn’t gotten the bright idea that software companies should be run by people who don’t know how to use computers.

    1. Microsoft invented the IDE with Visual Basic. Borland Delphi was even called VBKiller. Check your history books! Visual Studio doesn’t owe anything to Borland.

  6. “Machine management is bad, launch time is bad, setting up images is ridiculous and the list of problems only grows”

    IMO Hyper V in conjunction with System Center is a very powerful Thing and could hardly be compared to VMware…

    On my local Machine i´m running my “old” Win7 and Win8 in Parallelmode and i´m very comfortable with that…

    “The real question though is, where does one go to learn about all these shortcuts and hidden keyboard combos?”

    Answer: Simply by trial and error.
    And: once you are familiar, you´ll love it!


    1. I’ve not heard of or seen Hyper-V ever handle any serious cloud or distributed computing loads/machine build outs. Last few times MS has tried to push it on companies that have VMware running, it comes up grossly short. Also note, not a single major cloud EXCEPT Azure is running on the damn thing, and Azure has had massive growing pains. Far greater than any of the other cloud providers compute. Literally speaking one of the companies would have had to almost double the hardware to manage and maintain the same # of machines they had under VMware’s ESX/Systems. Hyper-V has improved slightly, but really in the end, it hasn’t.

      Simply, Hyper-V has a shit track record. For simple VMs and such maybe it is fine, but playing in the big arenas it doesn’t pan out so well.

      1. Oh, ok. I see… my lacking knowledge of VMware products led me to a comparison between apples and pears.. -.-

        honestly, i´m only experienced in VMware desktop versions, so atm I cannot say anything about advantages or disadvantages.

        What I can say is that it really impressed me how it works with System Center…

        guess I need to investigate a little more for further statements on that topic… 😉

        Nevertheless, I like Window 8 albeit the ‘deployment rules’ for software are somewhat rigid, things seem to become unnecessary complicated…

        Kind regards,

  7. I have to say WCF has been a godsend for me on numerous occasions. EF – well – after getting around a few gotchas – it danced also.

    1. o_O Really? One of the first persons I’ve ever heard say WCF was a positive experience in their life.

      1. Well – WCF saved us a few times in record time – for example – having SAP PI connectors talk via SOAP 1.1 to a server using SSL et al .. it’s been running for 3+ years – not a blip (except changing certs every n year is a pita – but that has nothing to do with the service itself).

        Was also doing ajax/json with it years ago – and at that time it was one of those “check this out!”.

        I have to admit – Juval Lowy sure helped along the way…

      2. WCF is a fairly good implementation of a SOAP stack. If you only ever use it for that, you won’t go far wrong. It’s when people try to use it for everything else, and allow the horrible default app.config pollution to occur unchecked.

        WCF + SOAP + in-program configuration = pretty good. Better than Axis on Java anyway.

        Likewise, Entity Framework 4.1+ with code first is pretty good. Far far cleaner API than NHibernate – which is just an utter mess. EF 5.0 finally has enum support also which means that last major pain point has been removed. EF 5 is IMO the first “stable” worthy release of EF and Microsoft should be congratulated for finally getting it there.

      3. Can’t disagree with that. I just hate putting SOAP into 90%+ of environments. It just isn’t needed.

      4. If the only API available is a SOAP one (as it often the case in enterprise dev.) then what choice do you have?

        I’d say it’s 90% of environments that do use SOAP. The remaining 10% are the hip’n’cool places that use REST. And then you have the hassle of writing a REST client which is basically just a finite state machine (FSM) to perform autonomous navigation. That’s the dirty little secret of REST that almost everyone glosses over. Hint: If your REST client doesn’t autonomously navigate via the hypertext relations then it isn’t REST. It’s RPC that abuses HTTP.

    2. hahaa, Juval Lowy is the person I credit with saving WCF the first X years of its existence. Without him, there wouldn’t be a good implementation in existence I don’t think. Most of the MS Guidance was/is crap around that. I give Glenn Block & his team credit with going Web API, which is about a zillion times cleaner and more adherent to good patterns and practice than WCF.

      Seriously though, I’m glad you guys have a solid implementation. I’ll never saw WCF isn’t reliable, it’s just a mess to work against and with. Geting a clean system under test, getting rid of the menial coding part of it and either generating it or even getting into a situation so that WSDLs don’t need regenerated through the arbitrary tooling in Visual Studio is tricky. Once there, life can be pretty good with WCF. It’s just that there are so many solutions that do NOT require that much mess at first. Node.js, Rails, Sinatra, Service Stack, Web API and hell, throw PHP in there for cleaner solutions.

      But I digress, it’s cool you guys have it working. I’ve generally had the experience of post WCF catastrophe clean up to work through. It’s never been fun.

  8. SQL Server? It’s biggest problem is still escalating locks. Yes, they do occur, and can bring your entire DB to a screeching halt.

  9. I wish this post had spent more time on why stuff ended up on one list or the other, rather than simply state what you like and not. In itself, that isn’t really much more interesting than knowing how you like your coffee. 😉

    1. Yeah, the post I wrote has a lot of loaded context. The reason is simple though, I just wrote it as a personal list. So there isn’t a whole lot of why and what not. 🙂

      Maybe in the future I’ll lay out the reasons. but for now I have lotsa code to write and projects to deploy.

  10. I’m pretty heavily in favour of SQL Server. Why? Because you can write stored procedures and so forth in C#, which suddenly gives the thing a massive advantage over anything else: all of a sudden, you open it up to the full .Net API, with all the communications stuff that implies. Want a trigger which FTPs information somewhere, as part of an encapsulated transaction? No problem. Want functions which return values from web services (I do that a lot for things like grabbing real-time postage rates from UPS or USPS)? That’s easy, too. Yes, in Oracle you can use Java for the same things… but .Net makes it all so amazingly easy to do…

    1. Store procedures are fine if you absolutely need them. They don’t provide enough oompf to give you big data capabilities or anything. Also, you can write the equivalent of stored procedures in most other databases, mysql has even provided this now and it is faster in many circumstances. Don’t even get me started on Postgresql…

      …but I digress. I NEVER want to have stored procedures unless absolutely necessary. They lock and obfuscate business logic, make it generally untestable, remove TDD and BDD paradigms for better built software, and generally just fight against building software in a fluent, scalable, or intelligently manageable way around a real business case usability story.

      Store procedures do this everytime, there’s a reason EF & other ORMs make a point to NOT encourage stored procedure use. The idea fell out of favor in the software craftsman realm years ago because of this strict adherence and massive problem their usage causes.

      If you want some truly EASY examples of getting UPS or USPS stuff just drop the database and pull it from the services source with a Node.js app, or if you want the extra translations layers of .NET or Java you can use that. But why even bother with an RDBMS? Stick in a schema-less, index that puppy if it is static enough, and query off that. It’ll knock the socks off of SQL Server too.

      …anyway, not really trying to bash SQL Server use, just not into encouraging stored procedure use. Their usage ensures higher cost development over time as employee turnover happens and makes editing business logic almost impossible. A 5 minute change turns into a 3 week research ordeal.

      TDD, BDD, clean data models & schema-less designs for the data messes, it is the way to go. In the end, you’ll get home sooner and have less headaches to deal with, especially if you have to deal with someone else’s code base.

  11. Oh, and here’s why Windows servers are brilliant: you can run PHP, Java, ASP, .Net, Perl, Ruby, , with any database engines you want, all at the same time in the same server. No other server in existence can do that — some can do bits of it, but not all of it. If you’re a software developer and you work on multiple platforms, as I do, then 99% of the time you don’t need more than one server for all your development. Personally, I don’t care about a little overhead in some of the more esoteric parts of the comms layer; the fact that I can go to one place to do everything I need to do is more than enough compensation for me. And also, unlike a Linux server, the thing is friendlier than a cornered rat with rabies…

    1. Again, No. You can indeed do all of that on Linux. The only one linux is a little rough on is .NET, but it does ALL of those other frameworks as well or better than Windows. In addition it costs net zero and with tools like OpsCode Chef and Puppet Labs Management tooling & scripting it is easier and far more scalable than Windows for far less $$. Case in point, the entire Internet.

    1. Easy. I NEVER actually have to use it on any greenfield application and I have zero reason to pay for it. However, it is a perfectly nice product and piece of technology by itself. Without concerning one self with the licensing, I even kind of dig it and the tooling around it sometimes. However…

      …if I’m going to go with a production app and I have to concern myself with other aspects besides just the technology, it is far easier to use Postgresql (preferably in many scenarios these days), mysql or some other open source software that has more community, better feedback cycles, etc. The core tech is fine, the surrounding aspects of SQL Server is what makes it a very “meh” product in my opinion.

      That’s how I can be indifferent. 🙂

  12. My shit list:
    * MSWord still hard to write technical documentation in compared with LaTeX
    * Visual Source Safe: ’nuff said
    *Outlook: nonstandard and gets in the way of writing emails. winmail.dat files anyone?

    As for Visual Studio, the debugger rocks, and the compilers are solid. I like the outline mode of the editor, but:
    * the build system sucks badly even compared with antiquated crap like Makefiles
    * The editor is not that easy to use
    * Visual studio hangs around and gets in the way if you *dare* to work outside of it (eg fire up an external editor, or use an external source control tool.

    Overall, I’d give it a “meh”. Eclipse, what little experience I have of it, seems to be done much better.

  13. C# knocks socks off Java? Disagree. Personally I’ve worked with both, and I miss features of Java when using C#, but not vice versa. Specifically:
    * Checked exceptions (OK, I know that there’s debate about these, but USED PROPERLY they can really help).
    * Private members in nested (AKA inner) classes visible to outer class.
    * Extendable enums.
    * The use of underlying models in Swing – really useful for large data sets with tables and lists.

    Also, Netbeans (the IDE that I use for Java development) has, again in my opinion, a more useful feature set than Visual Studio, and it’s FREE!

    1. Both have their plusses and minuses really. Not that I’d really argue it, it’s a pick your poison situation.

Comments are closed.