Meditations on programming, startups, and technology
New Relic

How Microsoft is changing the programming world

Several years ago I knew a programmer, we’ll call him Joe, who fancied himself to be a great developer. He was a senior developer at “Big Co.”, who received a large enough pay check to just as easily compensate a few junior developers.

The guy had Microsoft certifications, as expected of one in his position, and he appeared to know Visual Studio inside and out, just as you’d imagine.

What was surprising for me at the time, was that as I got to know Joe better, I slowly started to realize that the guy was absolutely clueless about programming beyond the scope of the Microsoft bubble.

He had never used Linux in his life, nor was he interested in learning about it. He wasn’t aware of tools like CVS or SVN. He didn’t seem familiar with the ideas behind unit testing or Agile methodologies; words like “refactoring” were outside of Joe’s vocabulary.

How about other programming languages or paradigms, like functional programming? Nope, nothing there either. He knew Visual Basic 6 and VB.NET, C# (the first release at the time) and a bit of C++. That’s it. And he was proud of it. As I enquired further in an attempt to figure out what he was all about, he didn’t mind admitting to a complete ignorance of what wasn’t printed on Microsoft paper.

What’s interesting is that, despite his cluelessness – due to a strict adherence to the Microsoft view of the programming world – and perhaps a lack of intellectual curiosity, the guy did manage to be somewhat adequate at his job. Not spectacular by any stretch of the imagination, but good enough to keep his well paid job.

Joe simply didn’t care about tools and techniques that fell outside of the narrow, yet mainstream, beaten Microsoft path.

Over the years I’ve met countless Joes. In fact, if I were to generalize and characterize many Microsoft developers in the early 2000s, Joe would come to mind like an unpleasant stereotype.

I tell this story not to criticize Joe or to claim that Microsoft developers suck. On the contrary, my argument is that Microsoft will be a key factor in terms of enabling functional programming to become mainstream. In fact, what Microsoft is doing is introducing .NET developers to functional programming, one piece at a time.

Just a few days ago I was reading the blog of a guy who seemed happy to discover a cool “new” function called Zip in LINQ (hey Haskell programmer over there, stop laughing, you are disrupting my article). These days following blogs by Microsofties is in fact like witnessing some sort of Renaissance, with plenty of talk about exciting features that are clearly borrowed from the functional programming community.

The evolution of C# and Visual Basic, LINQ, and more recently the inclusion of F# as a fully supported language within the .NET Framework 4.0, all indicate Microsoft’s new outlook towards functional programming. F# in particular is essentially OCaml for .NET, and has been received with open arms by the Microsoft community (as far as I can tell).

There are very few books by mainstream publishers on OCaml. On the other hand, F# already has a rich ecosystem of printed books that have been published by O’Reilly, Apress, Wrox, Manning, and likely in the near future Microsoft itself. On top of that there are titles devoted to LINQ and countless books on the recent, more functional oriented, C# and VB.

I’m not measuring the popularity of programming languages by the availability of books alone, but it’s clear to me that there are millions of Joes out there who are ready to learn these new concepts that are now being put out and promoted by Microsoft. It doesn’t matter that they’re not new or that they’re borrowed from other programming languages like Ruby, Python, LISP, ML, Haskell, etcetera.

The end result of Microsoft’s new approach is that now Joes everywhere are getting exposed to functional programming (masses of people who would otherwise be virtually shielded from the rest of the programming world).

Microsoft may no longer be the influential powerhouse it once was, but I think it is fair to acknowledge the impact it’s currently having on making functional programming, or at least some degree of it, more mainstream.

Update: Initially I used the name “Dick” (short for Richard) to identify the programmer I talked about in this story. It was meant to be a humorous double entendre, but turned out to somewhat distract certain readers from the key points that this article was actually about. As well it seems that some people felt I was coming across as being strongly against Microsoft developers (which I’m not in the least). As a result, some readers ended up being offended by this post, which was never my intention. I don’t love political correctness, but I feel that replacing the name “Dick” with “Joe” instead ends up detracting less from the heart of the article.


If you enjoyed this post, then make sure you subscribe to my Newsletter and/or Feed.

receive my posts by email

113 Responses to “How Microsoft is changing the programming world”

  1. Aymeric says:

    Interesting point of view. I can definitely see a slow awakening in the .net developer world.

    Why do you think .net developers tend to be content with Microsoft technologies instead of looking outside of it?

    • Brad Heller says:

      Two things: 1. An awakening? Like functional programming is going to solve the worlds problems? 2. You’re assuming that .NET developers are actually *using* F#.

      • Brad, in my opinion:

        1) It’s an awakening to new concepts and ideas. Is functional programming the answer to everything? Not by a long shot. But knowledge of its underlying concepts can only benefit programmers.

        2) F# will never be as widely adopted as C#; that much is clear. However, its market share is definitely growing. Even if we exclude F# from the picture, my second point about the introduction of functional concepts still stands when talking about recent versions of C# and VB.

      • T. Goshinski says:

        Some of us are just waiting for Rich to get ClojureCLR out of beta. OCaml/F# is fine, but I prefer Lisp style syntax.

    • Sergio Treiger says:

      “Why do you think .net developers tend to be content with Microsoft technologies instead of looking outside of it?”

      Probably because Visual Studio is an excelent tool and .net is a great framework.

      And before you ask, I do work with non Microsfot stuff like linux/php/perl/svn/Eclipe/ and so on.

    • Luke says:

      Aymeric, not all Microsoft developers are happy with what Microsoft is doing. Alt.Net is a perfect example of this. I also believe (although it is likely I’m wrong) ASP.Net MVC started life as an open source project that was picked up by Microsoft

  2. Emidio Bianco says:

    Hi Antonio,

    I think that the microsoft’s philosophy about .NET is winning.
    I’m a Linux-ian user but the thing that support the programming innovation is the fast time to develop, bitter lines of code = more productivities -> more $.
    I’m too know more italian guys that they hasn’t used Linux and GTK or Mono or other framework/languages that C# or VB but they are good programmer.
    The .NET strategy has changed the world of programming and there are, ever, programmer that don’t knows Linux, design patterns, ecc… nope the multiplatform compatibility.
    I’m with you, on all this.

    P.S. Sorry for my bad, bad, bad English
    Ti seguo sempre, bel blog.

  3. codef0rmer says:

    Very true. They are begetting bad programmers in masses. Die Die M$.

    • These days, I don’t think they are begetting bad programmers more than, say, the PHP community does.

      • elsanchez says:

        you can’t assure if somebody is good programmer or bad just because of the programming language that he is using. But in my opinion learning “how to code” using Microsoft tools can be very easy, and maybe there is the danger of all this. If you really don’t understand something and stop thinking and just start coding you will be just as bad in php, ruby, c#, f#, {put your favorite language here}.
        Don’t think that because something is easy to use or accessible for everyone that is a good tool. Neither think that if something can be made in half of the time that it used to take the result will be better.

        • ewj says:

          I am probably older than others here. I programmed in fortran on punch cards. Now I use .Net and Ruby quite a bit.

          Writing good code is art, most people just do what is easy – not what is right. I am one of those people.

          The reason very few people write good code is that to understand how code interacts takes years and review of thousands of lines of code. Joe was very good because he decided to take years and review thousands of lines of code.

          I have never met a good or above average coder who writes in more than 2 programming languages. After 60 years I am still looking for him/her.

          • Theraot says:

            Hello,

            And nice to meet you, with ASP.NET I get to mix C#, VB and Javascript. Does that fit more than 2? Well, that’s if you mean at the same project… because if you mean that can handle them correctly and get similar work done I had to add Java, PHP, VB6, and C++ (Borland, Microsoft or GNU compiler).

            If you only mean correct code that completes a task, then there are those I’ve used only for 3-hour projects (mostly in school): Pascal, Prolog, Logo, Assembler.

            So, as I said earlier, nice to meet you.

            Alfonso J. Ramos

          • Moo says:

            >Writing good code is art, most
            >people just do what is easy –
            >not what is right. I am one of
            >those people.

            Its also an art because people can’t agree what is correct. Is the correct solution for instance to go with immediate productivity or immerse in layering and design abstractions to make sure it’s maintainable and extendable for future generations?

          • Eyal Lotem says:

            I don’t know of a single great developer who isn’t reasonably fluent in at least 3 or 4 programming languages.

          • John Oxley says:

            I have never met an above average programmer that codes in less that 5 languages. Think about an ASP.NET web developer. C#, SQL, HTML, JavaScript, CSS. There’s 5.

            All great developers I know code in multiple languages. There’s no better way of improving your skills in one language than to see what other languages are capable of.

          • Richard says:

            I think perhaps they are using the term language more broadly than you. If someone asked me what ‘languages’ I know it would neve occur to me to include HTML or CSS. No good reason, but I just can’t put them in the same category as C#, C++, or even COBOL.

        • Ivan H. says:

          I definitely should agree with elsanchez. You can’t assure if someone is good or bad just because of the language he is using. The basis of programming are by far more important than the language used. A good algorithm for doing things is better than code typed on the fly. I’ve programmed on .NET, Python, C (Not Visual C++, Ansi C) and others, and I find that programming into it is not difficult while your programming basis are well built.

  4. Jim Maher says:

    30 years agao, I used to say the same sorts of things – about IBM.

    To me, this devotion to a single paradigm is both to be expected and even desirable (for a while). Most developers do their development as a job, to get paid, and they simplify their life by focusing their attenion on the technologies that their employer is paying them to use. A benefit of this focus is that they become fairly competent at productive use of these technologies. Everyone wins!

    Until the developer gets fired (or down-sized or out-sourced or whatever euphemism you prefer). Then the developer realizes he SHOULD have been building a career instead of working a job.

    Many developers have talent, interest and inclination to pursue a broader career – but my guess is that it’s far less than 10% of all developers. Even within this select group, it is very difficult to motivate them to raise their sights and goals beyond the “bird in the hand”.

    Maybe that’s okay. Constantly keeping up-to-date with the latest technologies is time-consuming and downright taxing to one’s intelectual capabilities. Current proficiency probably suffers from the distraction. Besides, most new technologies will NOT make it to general market acceptance. The time and effort of learning niche technologies may not be “wasted” (perhaps it keeps the mind facile), but its probably not the “best” use of limited resources.

    Old developers CAN adapt to new techologies; in my experience, these wind up being some of the best developers.

    None of use were born knowing how to program in any language. If we learned to program once, we can do it again. And again. And again.

    I have three suggestions for such old dogs looking to learn new tricks.

    1. Choose your new subject matter carefully. Do NOT try to learn everything.

    2. Do it “their” way; doing it your way is what made you obsolete. So conform to the methodologies, procedures, paradigms and styles of the new technology – rather than try to force the new tools into your old patterns – no matter how stupid and incomprehensible the “new ways” are.

    3. Don’t be lazy! You probably don’t remember, but when you started out you were obsessed with learning evereything you could about your first programming job. You didn’t watch TV and lay around and take it easy. You read manuals, and THOUGHT, and coded, and THOUGHT, and met other programmers at bars and yapped about that crap ’til 2 in the morning, and THOUGHT! That’s hard work. Do it again; you’re gonna love it!

    • Dan says:

      Jim Maher – u r my boy! ;-)

    • Very nicely put. Absolutely agree with 100% of what you said.

      Point 1 is probably the most difficult. With so many things out there, picking the right battle to fight is hard.

    • Steven Potter says:

      I whole-heartedly agree with Jim’s comments. I have a curiosity to learn new technologies and languages. If it doesn’t fall within the scope of my day job, however, it becomes hard to fit that in. The amount of time (and sometimes money) required to follow through in learning new languages or technologies has to fit within free time outside of work. I have other interests and priorities outside of work I want to pursue. I’ve found that consistency is needed when learning new languages or technologies otherwise it becomes forgotten and a wasted effort.

  5. Alok says:

    Microsoft’s programming software works out of the box. I am trying to go platform-independent path *for C++*, and three months down the line, am still figuring the tools out! OK, what I present below is not an apples to apples comparison since I am looking for free tools when Visual Studio is not free.

    Till the cost-to-entry for developers to the platform-independent world is reduced, I am on the side of folks who just stay with Microsoft.

    Getting MinGW-W64 to install was a pain.

    Getting CMake to work was a pain.

    Getting a profiler to work was a pain. Finally got gprof to output stuff, but am still to figure how to integrate it with the rest of the tools.

    Getting code-counter (CCCC) to work was a pain (doesn’t work). Getting USC CodeCount to work was easy, but since it outputs only a text file, integrating it is a pain.

    Now have gotten a batch file that calls various above tools (and changes directories, redirects program output, changes PATH to allow finding MinGW), and nothing much else.

    Thought that it would be easy to convert THAT to some platform independent thing like Python. It is a PAIN, with no help available except to Google for individual things needed (how to change PATH with Python, etc).

    • Eyal Lotem says:

      You mis-attribute the problem. The problem is Windows.

      With a modern package system (as found on Ubuntu, for example), these are non-issues.

      • Pierre Boucher says:

        I tried once to install Aptana Studio on Ubuntu which does not comes with an installation package. Having only about an hour per evening of free time (like most new dads), after a few days of reading, trying and frustrating, I returned to Windows where the same dev tool was installed in minutes.

        Imagine we had to learn how to use a new type of pen every time we have to write something down!

        What I needed to do was to code an application, not to learn how to install the coding tool.

        Some people might not like Microsoft, sometimes I am one of them, but they did and still do some goods for the programming community and it’s not the end of it.

  6. Dave says:

    Forgive me, I know this may sound a little juvenile, but have you read back over some of your sentences to see how they sound:

    “…but it’s clear to me that there are millions of Dicks out there who are ready to learn these new concepts..”

    The pronoun for your friend “Dick” is a rather unfortunate choice and distracts from the content. I don’t know if English is your first language but if it is, you will understand where I’m going with this. Just sayin.

    • Hey Dave,

      it’s actually intentional, and was included for the purpose of being humorous.

      I’m sorry if it ended up being distracting to some readers.

      • Tim says:

        Good choice to change the name to “joe”. I only came upon this article after the name change and it seemed well thought out and not too elitist.

  7. aeron says:

    I saw this same thing with Coldfusion programmers (usually building on top of the MS stack). First OOP with Coldfusion “components” then the technological marvel of an ORM in the latest version (after years of swearing by stored procedures).

  8. Not to say the aproach is wrong, but it is very restrited. In fact, all the niche technologies do that.

  9. Tim says:

    Wow. Being critical because someone mastered a toolset that’s different than your own. How ridiculous. Eventually it will come full circle and people will be wondering what kind of backwater hick knows UNIX.

    • Tim, that’s missing the points I was trying to make.

      I’m not in any way dissing someone for using a different technology stack. In fact, at the time (when I knew the fellow I talked about in my post) my main technology stack was .NET, and I was one of the first .NET programmers in Italy (and well-known as a .NET proponent).

      The two main points are:

      1) Many Microsoft developers tend to receive their programming knowledge through Microsoft.

      2) It’s a good thing that Microsoft is introducing functional features and languages to this large mainstream audience. We will all benefit from this move.

    • WayneB says:

      Exactly.

      Furthermore, the author comes off as a self-important Microsoft hating snob. Look at me! I’ve “used Linux” and I know what SVN is. I also know a few alternative languages. Wowzer! That’s awesome!

      Let’s all go criticise the Mac developers for knowing only Obj-C and Xcode. They must be dicks because they don’t know how to use tools that are basically useless to them.

      • Wayne, I can assure you that is not the way I intended to come across. I don’t hate Microsoft at all, and I sincerely hope that they’ll continue to innovate. In this post, I actually praised them for what they are doing. If you think I’m an open source zealot, you’re barking up the wrong tree.

        My characterization of Dick was only included as a way of showing how the innovation Microsoft is introducing ends up being beneficial to those people who would normally receive their knowledge solely from Microsoft (and not search it on their own). You can’t deny that this is a very common approach in the Microsoft community. Open Source developers have this issue to lesser extent because there isn’t a single company that dictates what they should learn in order to develop software.

        The Apple comparison might be more apt if, and only if, we were to assume that Mac developers are ignorant about techniques that will undoubtedly improve their software (like testing). There is less evidence for this (in my opinion), but it may very well be the case that Microsoft is innovating far more than Apple is when it comes to programming.

        NOTE: I will post any dissenting comment that isn’t obviously trolling or blatant name calling. I will not approve comments calling me things like “you fat fucking pussy.” as you did.

        Kindly learn how to entertain civilized discourse before commenting.

        • WayneB says:

          Oh OK. I’ll try to mask my contempt a little better next time, as you CLEARLY have done in this article by repeatedly referring to all Microsoft trained developers as “Dicks”.

          Gimme a break. I’m not trolling here. I am genuinely insulted by your article. I have no problem with Linux and Mac developers, but they all seem to have something against Microsoft developers. It’s infuriating.

          • I understand that you are offended, Wayne. I gathered that from you calling me “a fat fucking pussy”, from you posting anonymous comments that you’d already made on Reddit in this blog through TOR under different names, and from leaving a comment on Reddit where you point out my picture and that I work for IBM, and that you called me a Dick (as if these two things were in any way relevant to the point we disagree on).

            Microsoft trained developers are not all like the Dick/Richard from the story. Not in the least. In fact, I know several world-class Microsoft developers I look up to. I’ve developed with .NET since the first betas, Wayne. I own a site called http://visualcsharp.it. I know firsthand how it feels to be looked down on because your main development platform is .NET. I’m not a Microsoft hater, and I’m sorry that my, perhaps silly, joke of calling the protagonist of the story “Dick” made my post all the more offensive.

            Peace.

          • Kevin H says:

            He didn’t refer to all Microsoft programmers as “Dicks.” He gave an example of a person that is Microsoft certified, and only cares about Microsoft technology. You know you’ve met someone like this. It doesn’t have to necessarily be Microsoft technologies. There are a lot of people that aren’t passionate about programming, and just do their work and go home, and don’t strive to learn anything other than what they have to. Now give a name to these people that are in the Microsoft camp as “Dick”, and you will see that this _subset_ of Microsoft certified people benefit from Microsoft putting these functional language aspects in their programming language, because they wouldn’t learn it otherwise.

  10. WayneB says:

    Why should corporate programmers who work mostly with Windows servers and desktops take the time to learn Ruby, Python, LISP, ML, Haskell, etc if they don’t integrate very well with Microsoft’s stack?

    Do you have the same view of the “Open Source Only” wheenies who don’t know anything about Microsoft’s tools?

    “There are very few books by mainstream publishers on OCaml. On the other hand, F# already has a rich ecosystem of printed books…”

    That’s because OCaml is basically useless for Windows, which is what the majority of computers run on (like it or not). OCaml may RUN on Windows, but it doesn’t integrate very well with Microsoft’s ecosystem.

    • Except that Ruby and Python *do* integrate well with Microsoft’s stack thanks to their respective DLR-based implementations running on top of the .NET Framework (IronRuby and IronPython).

      Antonio pretty much described a common *attitude* among .NET devs and, honestly, I really don’t understand what’s so insulting about his blog post. This is coming from someone that uses .NET almost on a daily basis (but also works with other languages, tools and operating systems outside the Microsoft realm).

    • Gabriel C says:

      You should learn Lisp and Haskell, not because you’ll use them to program windows apps but because of the fundamental knowledge you’ll gain.
      Lisp has been around for 50 years and still is considered by many the “Holy grail” of programming languages. Any major advance in PLs (OO, automatic GC, etc) lisp “had it 20 years ago” and no language matches lisp’s macro system for meta-programming.
      The prefix notation with parenthesis looks weird and takes a while to get used, but is a great language to learn the very core of CS.
      (note: I’m not a big fan of lisp)

      Haskell is the best example of a pure, lazy evaluated functional language.
      One of the most elegant and powerful PLs around.

      Do you want to know where F# (and C#) are headed? Do you want to know how to really leverage the type system to help you build better software? Learn Haskell

      I guess what I’m trying to tell is that if you want to get better at programming, Haskell and Lisp are important languages to learn (I though I can avoid them, but reality slap me in the face, and now I’m learning them :) )

      • George says:

        You are talking about “learning” Lisp etc. In my school (I graduated 30 years ago), Lisp was mandatory – exam in year 4. Probably nowadays they teach Haskell.

        So I assume a good programmer should know functional programming from school. Or am I wrong?

  11. Tom says:

    Hi Antonio,

    I can see your point, but stating Dick as typical developer in Microsoft space is exaggerated. Do you think there is relatively more C#/VB.NET compared to Java developers that are ignorant of functional programming?

    IMHO .NET developers (on average) are well aware of non-Microsoft tools and technologies. Most people I know use SVN instead of VSS or Team System. And most of them are aware of “alternative” languages. Learning new set of libraries was real barrier for adapting new languages in daily job. This is now rapidly changing with VS2010/.NET 4. Fast adoption of F#, IronPhyton, IronRuby and other .NET based languages (or derivates) was partly possible because .NET devs were experimenting with Haskell, OCaml, Phython and they can use existing knowledge of .NET libraries.

    Just my two cents :)

  12. Coderrob says:

    Antonio,

    To clear the air I am a .Net’er. I am a senior developer at a big company. I have the certs, and sound somewhat like someone in a Dick’s position. I do experiment with other languages time to time though. Recently I picked up a Mac mini and started doing iPhone/iPad development with objective C for example. Hopefully that doesn’t make me a total Dick.

    So much is included in .Net framework you could spend every weekend or late evening just trying to keep up. I think it’s a good idea to experience other frameworks. The problem is so many come and go, and most businesses are filled with junior Dicks who get too confused outside the Microsoft box.

    I don’t think one needs to look to other languages to know how to develop better. It’s all patterns and practice in the end. One framework may do XY better than .Net, but eventually XY will be bundled when it makes sense. Don’t forget there are loads of other add-on projects not officially controlled by Microsoft that get absorbed in from the community. MEF for example or things from Live Labs.

    The root problem of most Dicks really isn’t the platform or language. It’s the environment. Working in one company for ten years doing the same job doesn’t encourage new learning. I’ve sat in on technical interviews for senior developers who on paper look good, but couldn’t unbox their string name out of an object if you get my drift. We don’t hire them. We don’t want Dicks either.

  13. Josh says:

    This was a fun read, and I appreciate Coderrob’s response because it mirrors my own. I admit that I’m a hardcore .net developer, but the main reason is that I really believe and enjoy using those tools. They fit my needs completely, and as Coderrob mentioned, the framework continues to expand, but at a pace that lets me keep up without being overwhelmed.

    So indeed kudos goes to Microsoft. whether you think they’re “stealing” or “pioneering”, the fact of the matter is it’s progress, and developers like us are the real winners :)

  14. Grammar Nazi says:

    Et cetera is two words.

  15. Karl Seguin says:

    But then MS developers will always be behind..in fact as the field grows more complex, they’ll fall further and further behind.

    And what happens if they lose the new platform wars? It won’t happen over night, but its going to leave tons of unemployment and skilless Dicks.

  16. moomi says:

    This is a thought-provoking post, and you hit on several good points. I agree that there are many programmers around who have but a superficial understanding of underlying computer science concepts. Some of them have become adept at producing solutions, without understanding the inner workings of subsystems. This is both a good and a bad thing. It is good to have a tool that amplifies your productivity. Think of it as a hydraulic jack – without it you would never be able to lift a car. On the other hand, without a deeper understanding of concepts, Dick is free to create antipatterns and brittle code. I’ve always said that a good programmer knows a lot about what NOT to do, and knowing what NOT to do is just as important. In fact, it’s usually better to do nothing, and to go home and sleep on a problem, than to jump in and create a wrong (yet working) solution.

    Then you have the situation where MS adopts technologies and techniques that were born on Unix platforms. Whether it’s programming languages, or open source libraries that are ported to .NET, or even Regex for instance, I am making the argument that the best of unix will be ported to .NET, and this is not a weakness, but a strength. After all, if a given package was not very good, would anyone bother to port it? Take ORM libraries, for instance: Hibernate and IBatis have been ported to .NET. They are best of breed libraries.

  17. m Oppenheimer says:

    I’m always amazed with such articles, which one can’t help but notice the slight wiff of “anti-Microsoft” sentiment.

    When you use terms like:
    “Over the years I’ve met countless Dicks. In fact, if I were to generalize and characterize a majority of Microsoft developers in the early 2000s, Dick would come to mind like an unpleasant stereotype.”

    I can’t help but conclude that your agnosticism aganist things Microsoft is equally lacking in intellectual curiosity.

    I was always under the impression that someone who mastered their “toolset” was a good thing?

    Fanaticism is always a bad thing, and in the programming world, it’s equally bad.

    I work as a financial engineer employed in the banking sector. From a code point of view, I code principally in C++/(and now Java)/C# on both Windows/Sun architecture.

    Are there fascinating technologies out there that I would love to work with? You bet! But my work environment dictates what skills they require me to know. Besides, criticize Microsoft tools if you wish(I do!), but let’s face it, they work!

    I would be the first one to agree that Microsoft is not the “be all and end all” of the programming world, but it should be reconized, that open source and Microsoft bashing is not it either.

    And another thing, when you say:
    “The Apple comparison might be more apt if, and only if, we were to assume that Mac developers are ignorant about techniques that will undoubtedly improve their software (like testing)”

    I had a good laugh! Have you met a Appler/Mac developer? They are some of the most fanatical programmers(yes, NOT all!) around! They would sooner walk on the other side of the street then been seen in the same vacinity as a PC, let alone a microsoft programmer!

  18. I was thinking about how people today will grow up with MS products and never know anything else.

    I think its good to know a little about different worlds. I programmed on Suns for about 20 years, now I’m using winXP at work.

    Some of the MS die hards vow to me they will never use the command line, they live in Visual Studio. There is a name for them “right click coders”.

    I use Visual Studio, Netbeans, emacs and still I go to the command line.

    The 2 system admins where I work are 30. They grew up with MS products, they know them inside and out. Yet they use Linux for their main machine and maintain Suns, FreeBSD and Open Solaris machines.
    Quite a mix of operating systems and they chose them out of their own needs, because each could do something a little better than the others.

  19. Myopia is not unique to MS developers, so its important not to stereotype here. The issue is simply what people are exposed and/or their appetites to learn. Heck, we’re still teaching people basic theories of error handling and unit level input validation… regardless of platform, language or technique. But this is where M$ can (and is) contributing positively by using their influence to push good tools and techniques where they can. They have not always been good about that. Sure, its ultimately good and profitable for them… but that’s called a win / win ;-)

  20. Merennulli says:

    Any particular reason you chose that example name? :)

    Even if you’re in the 10% Jim mentions, you’re still not going to venture too far from your silo. A Microsoft developer, like myself, working in C# considers themselves “improving” if we keep abreast of new information and practices with MS SQL, Silverlight, SharePoint, AJAX, F#, ASPX, WPF, the C# implementation of LINQ and Lambda, and so many others, and maybe even one or two non-MS languages while still meeting deadlines and, you know, that whole having a life outside of work thing.

    The fact that it is a whole ecosystem of different technologies seems to be lost on many outside the grasp of Microsoft’s evil empire. Much like the COBOL developers that came before us, those of us in Visual Studio shops tend to be churning out numerous business applications with production-line efficiency. I would agree that it’s heartening to see MS paying attention and adding in (finally) modern development components into their ecosystem, but expecting an MS developer to know what Haskell has had for years is like asking an auto factory worker to hand you the right microchip. You can only hold so many marbles before you start dropping them.

  21. Joe's Friend says:

    The problem I see with your article is that you are totally dismissing the .Net world as somehow being small. It is people like you how dabble in a bunch of different languages and platforms who think that you “know” them all.

    The problem is that you don’t. You are at an intermediate level at lots of different things. Why don’t you spend about 10 years, 40 hours a week, working in c# and visual studio, then comment on what you think it does and does not do?

    “Joe” doesn’t care about those other platoforms because he doesn’t have to. His job involves .Net, and .Net is so large that it is more than one person can really master.

    To truly master .Net (or anything else similar for that matter) it takes years upon years to learn the ins and outs of the libraries, visual studio, wpf, silverlight, asp.net web forms, mvc, etc.

    The problem is that you are so wrapped up in programming languges, that you can’t see that there is a whole lot more to programming c# than just knowing the syntax.

    Why should Joe go attempt to learn something else outside of what he is trying to master and start over? It does what he needs it to do, so who cares?

    You keep dismissing the tools of Microsoft as if they are somehow inadequate, yet they manage for millions of developers.

    Basically, in the end you come off as a typical journalist who spends to much time “evaluating” technologies instead of actually doing the day to day work with those technologies, year after year to truly learn what the pros\cons are.

    • I understand where you are coming from, “Joe’s friend”, but please understand that I’m not advocating specializing in a dozen different programming languages. That’s simply not realistic.

      I’m very familiar with the fact that .NET is huge. I started programming in C# and .NET when it was still in beta, and I’ve followed its evolution over the years.

      What I’m advocating for is getting familiar with concepts, tools, and languages that will ultimately improve one’s ability to code even if they keep using their own language/platform of choice.

      Even a cursory and theoretical knowledge of, say, Haskell or LISP, will end up making your C# or Ruby code better. I know this from experience.

      The fact that Microsoft is turbocharging C# and VB with powerful abstractions, while at the same time promoting a great tool like F#, is what gets me excited. Millions of developers will now have better tools, and the motivation to learn them. The industry as a whole ends up benefiting from this and progressing.

      • RAVI says:

        This whole debate looks like we are repeating the history, it sounds like a religious war. I think the problem with this article is its intentions are not properly put.

        If the idea is to praise Microsoft for introducing F#, then it should be discussing about the features of F# and how Microsoft make things simple. I am a developer for more than 20 years and I worked in BASIC, COBOL, CLIPPER, VB, PHP, ASP, JAVA ORACLE PL/SQL and now .NET. What I noticed is all these technologies solve business problems but Microsoft knows how the developer tools interface should be. Microsoft makes it easy to understand and simple to use and moreover fun to learn.

  22. GooGush says:

    As someone who programs in and out of Microsoft, the writer a little naive. Seems like someone who has a misguided idea about Microsoft developers, and has turned this into the basis of an entire article.

    • Let’s see, GooGush:

      • I began working with .NET when it was still in beta;
      • Before that, I worked with VB5, VB6 and ASP classic (even though I was also developing on Linux).
      • I started the first .NET portal/forum in Italy, which became one of the few .NET Code Wise Communities at the time.
      • I was a Microsoft alpha tester for .NET 2.0.
      • It was my main development platform up to 2004, and I’m still using it today to a minor extent.
      • I wrote a book for Microsoft developers, on how to get started with Rails on Windows.

      I’m omitting other things related to my experience as a Microsoft developer, because there is no point in coming across as boasting. But to say that I’m not familiar with Microsoft developers is patently false.

  23. Steve says:

    I’ve worked extensively between MS technologies, Oracle and whatever batch of open source is flavour of the month. The bottom line has always been I personally always preferred the MS wares. Why you ask? Purely because I could get the job done quicker and easier than the tinkering all the other offerings required. The great thing about MS is that no matter how many customer sites you work on there is a key consistency with the technology. Try finding that consistency with Oracle, Unix, Apache, Java App Servers etc etc. Its a nightmare!

  24. SilkySmoothCat says:

    As some have said, using a single consistent stack has a lot of upsides.

    On a single stack, when starting a new project, what do I use? The same things as I used before. The same thing others used before. Someone else with MS training can then theoretically jump onto my project, as its the same tools, same language, same procedures. There is no need for extra learning.

    However, it is fun to know other stacks and languages. Now whenever I start a new project I spend a month trying to figure out which new language I should use.

    M$ has to be one of the best single stack frameworks though, and Visual Studio has to be one of the best editors. And the new ASP MVC framework is brilliant.

    There biggest downfall is cost for a small startup. You don’t have to pay anyone for using a LAMP stack.

  25. Marius Filip says:

    How true.

    As a former Microsoft employee I can say that indeed, from within the Microsoft bubble (or from the center of it) it seems there is nothing outside. I recall the days when Microsoft refused to use even the PDF format, both internally or for web-published documents.

    Yet, I’m quite skeptical about the F# enthusiasm. There is a lot of software being written for .NET 2.0, still. Even LINQ has some way to go.

    I expect it will take at least 10 years for F# to become common currency (although there are job offerings for F# already).

    Don’t believe it? Think of Joe.

    PS: nice blog. I’ll add it to my list.

  26. Renga says:

    Microsoft provides the base of stability on which others can work, live , criticise and learn..that is all there to it. You see it is always creating foundations and just windows and only others create the walls, doors, bathrooms and yes, toilets that can be used by all devs.

    Microsoft is also blind to the fact that it needs the houses built by others on its foundation so that it can sell windows.

    At the en, it always the hapless public which gets sucked for all the flawless professionalism of the few, including companies like microsoft..if all work towards a good goal, may be the world will be a more merrier place..

    But let it live. It has a role to play.

    Renga

  27. ManiKanta says:

    I too agree with you.. strongly!

    Few of my friends also working on Microsoft/.NET platforms. They are learning/working on Visual studio (IDE) rather than the .NET technologies. Most of them doesn’t know the internals. All they know is how to get it done in/by using Visual studios.

    And the most weird thing is that they will back their programming paradigm is the new era of doing it. It’s like they will laugh at other programmers who tries to the internals calling them they doesn’t have the powerful, sophisticated tools and that is why they are having hard time.

    Hope this will change in near future…

  28. tec-goblin says:

    I agree with most of this blog entry, but it seems you were based (at least in the past) on the assumption that non-Joes tend to be better than MS Joes. What I see around is a lot of people getting out of unis and thinking they are good programmers because they speak Java and some design patterns and they have absolutely no idea about functional programming and other ways of thinking. Or (maybe) worse, php developers with no formal education, advocates of open source etc etc, but without realising that there is more to programming than applying ready made templates or coding tons of PHP.
    So there are “Joes” outside the MS Universe, and, as the MS universe is progressing fast towards smart and well-thought programming (not only C#, but think of WPF and silverlight), these non-MS “Joes” are left behind.
    Of course, there are some MS “Joes” that still work for the same company doing the same VB6 stuff…

  29. Another Joe says:

    Yes. I am joe. Yes, I am still inside Microsoft’s bubble. But I do take a peek what goes in the outside world from time to time.

    Back in the 90’s, I was a turbo pascal leveled up to a delphi programmer. Then I landed on a job requiring me to learn VB6. And that is where it all began. (I hated VB6 compared to my experience with Delphi… but that is another story)

    I am now a freelance C# ASP.NET developer. And just like another joe, I am still inside the bubble. There are just too many technologies to learn. Just in time you believe that you have “mastered” one language, then comes in a “new” and “better” one. And all the years I try to improve my architecture, and then finally got that great feature I needed… some other new technology pops and says “We now have that”. hmmm…

    Oh well, my point is, I just can’t learn everything. I do know. Must be my limitation. I do have friends and know a lot of programmers who are above average in both MS and Non MS technologies. And all I can say is: “WOW! How’d you all did that!?”.

    Then I try to look at myself and sometimes think, “Am I an obsolete programmer?”, “Do I need to learn all these in order to survive in my life?”, “How can I do that?”. Then I think and wonder how great these people really are that I cannot even conceive how they are able to really manage their time to learn all these while balancing time for family, friends and pleasure. They have families. They have friends. The have time to have fun. They aren’t geeks.

    Well, I guess it is just my limitation. Though I know I would eventually adapt to whatever technology is available if what I know is obsolete (survival instinct?).

    But the bottom line is, I love programming. I love solving problems and finding efficient solutions to it. Heck, I even love looking for problems if there isn’t an obvious one so I can just have something to solve with.

    Enter 1st Integer:
    Enter 2nd Integer:
    The sum is:

    This is the earliest program I made that made me say “WOW! COOL!”. I’d like to always feel that way.

    • Jim Maher says:

      Another Joe,

      I gave up feeling less competent than the uber-geeks a long tme ago. If you’re still kickin’ it, your probably doing just fine.

      I’ve met some unbelievably capable people. Like you, I can’t imagine how they do it. I definitely can’t.

      But I am pretty good at what I do (which is mostly project management). And besides, I’m just trying to make a living and actually get stuff done.

      I also DO enjoy coding. For me, I get constant positive reinforcement when I code. Feels like progress.

      And I too have to live within my limitations. I can’t learn everything. Last couple of years I’ve been playing with Ruby and Rails.

      Based on this thread, maybe I should take a look at Lisp and Haskell over the next couple years.

    • Richard says:

      I think we were separated at birth. Exactly how I feel.

  30. Lalbatros says:

    All is in all I could find old fortran programs I wrote in the 80’s and pretend they were nearly object-oriented. The first argument to a subroutine always pointed to a data structure!
    And when I wrote in fortran and advanced signal processing interpretor based on the RPN notation, I could just as well pretend I was doing functional programming.
    Have you asked Joe what he did with the M$ tools? I would be curious to know more about his creativity.

  31. Rob says:

    I think the part of your essay that I (and perhaps some others) found most irritating was the following:

    “What’s interesting is that, despite his cluelessness – due to a strict adherence to the Microsoft view of the programming world – and perhaps a lack of intellectual curiosity, the guy did manage to be somewhat adequate at his job.”

    Cluelessness? Lack of intellectual curiosity? Sorry, but those are purely derogatory terms, and there’s nothing in your description of Joe/Dick to warrant either of them. Despite your claims for affection for what Microsoft offers, there’s a seriously condescending attitude underneath what you’ve written. I could translate the point of the article this way: “If the stupid people stick with the Microsoft stuff long enough, they will eventually become smart like me despite themselves.”

    Question: if you were talking about someone who worked entirely in the Linux/Ruby/Java/Oracle… world with no exposure to .NET technologies, would you refer to them as “clueless?” Some people would, and they’d have just as valid an argument.

    I don’t consider Joe to be clueless. I would call him “efficient.”

  32. Moo says:

    I also went into the MS bubble for a few years – I think the reason it’s fundamentally different is because of the type of customers that are drawn to MS solutions – most of them are small to mid size companies who didn’t go with a MS solution for any technical reason only the premise that they already had a MS OS/Office licence and IIS/ASP/ASP.NET was thrown in dirt cheap so they wanted to try it out. Visual sourcesafe could be the most advanced tool in you shop and your customers would think that you were a pro. When customers don’t know about and won’t ask you to do distributed transactions then why would a developer ask MS to provide it or develop an alternative himself? Having these types of customers is wonderful because it has a direct influence on how much time the dev has to spend learning stuff – youll find that you have time for a family. Developers on high profile javaee projects live life much harder because customers typically write down very anal requirements regarding governance, robustnings, safety, security, scalability etc – it’s really tough to take part in those type of projects and have a family life at the same time.

  33. Willy says:

    What is is with programmers? The reason I read this article was to maybe learn more about functional programming.

    What I did learn is that:
    a) many people can’t grasp the thrust of a conversation without being blinded by the suspicion that perhaps they are being slighted in some way.
    b) programmers are an excruciatingly sensitive bunch.
    c) many programmers are mindlessly partisan.

    I’m a programmer, admittedly mostly MS but for purely practical reasons and would love to have to time (and need)to learn other languages. It tires me to hear these sorts of diatribes and reminds me of other conversations on other blogs; which start off as quite sensible attempts to suggest ways to improve the world and end up as finger pointing exercises. “The problem is entirely because of THEM”.
    By the very nature of their job. programmers should be an intelligent bunch. It doesn’t always come across that way.

    • Richard says:

      Substitute “human beings” for “programmers” and I’d agree with you. Read almost any thread on almost any forum on almost any subject and you’ll see what I mean.

  34. ISK says:

    I strongly agree with most of what you have said. I have been working in Microsoft Technologies for last couple of years. As I was reading the post, I was feeling that I was also one of those Joes (Dicks) :D

    But I think the Open Source technology is still a major concern for MS as they have so much to offer and I think sooner or later it will be a major cause of worry for MS.

  35. Norris says:

    First, sorry for my bad english. Very interesting article. Maybe I’m the most “Joe” here lol. I’m not a programmer, just an autodidact, more in the graphism world than programming.
    In my school years, I hated maths, but now, I love learning in many domains like programming. .Net framework is a very, very good thing for me. I can even make 3D !
    I tried to learn a little C and C++ but I found that immediately less funny. I read many articls on different languages for helping me to understand programming concepts, but I’ll stick with .Net.
    I realize obviously that I am dependant on Microsoft and that I would be never able to carry out really professional applications.
    However, I could never have amused me as I do it without Net framework.

  36. raggi says:

    I’d say there’s a metric dick ;-) load of the same class of developers in every space, and you find more of them at large companies.

    I’ve seen rails shops with people just as blind to the outside world, for example, they only use OSX, and they can only code ruby, and generally only just well enough to get by.

    I’ve seen Java/solaris shops with same thing.

    I’ve seen PHP/linux shops with the same thing.

    On the somewhat contrary, I’ve also met developers who’ve tried to learn tons of languages prior to becoming really sufficiently proficient at one in order to learn more about the art of actually designing and writing code. These developers skill sets really extend to writing bad code in a ton of languages, rather than writing slightly above average code in one. I don’t know style ends up in a better place sooner, but I know which style I’d rather refactor out.

  37. grimy says:

    I don’t think it is a simple choice. Because there is so much learning involved, most developers get locked in and stick to what they know. They can only improve their knowledge and skills incrementally. Very few developers master more than one IDE, let alone more than one language. Let the Eclipse vs Visual Studio flame wars begin :)

  38. Joe says:

    I’m a MS dev to.
    I’ve started developing with PHP (which is an obnoxious programming language) and was went over to .NET/C# for commercial reasons. Using .NET you need one fourth of the time to archive something compared to PHP and the half compared to Java. Am I a bad developer? I dont think so. Currently I’m studying IS and I had to learn Scheme and some other exotic languages. I’m not a friend of this functional paradigm because it’s to complicated for the majority of real world enterprise programming problems.

    F# is, as well as Scala, a good multi paradigm approach but it will remain niche product for algorithms that need to be proofed.

    Thats not because MS/Java (quite the same with Java devs as with .NET devs) devs are stupid, the reason is that you need to much time to archive everyday tasks and that the advantages are not as big as some advocates of functional languages claim.

    To come to a conclusion: beeing a good developer is not a question of technology/tools but of qualification. A self-educated developer won’t become as good as some who has studied computational engineering, no matter if he is using C++, LISP, Java or a .NET language.
    That MS devs are not used to have other language in mind is just a question of workload and need. You can’t stay up to date with .NET development and learn/maintain your knowledge of several other languages and you don’t need it if you have a solid education and are aware about other/upcoming languages and technologies.

    BTW: Somebody wrote that .NET developers aren’t aware of design patterns. This is not true in general because .NET does not replace a good software design.

  39. danish says:

    Its really weird,last 2 hours I have been thinking exactly the same thing and Codeproject newsletter brings me here..:D

    The thought I had is MS has made clerks out of geeks and it was not always so.

  40. MehGerbil says:

    Some people see the choice of developer tools as competence, others see solving the business need as competence.

    I’ve no interest in the former, I make a good living with the latter.

    For every pushy Java/PHP/Ruby/Apple snob that sneers at me for using exclusively MS Products I’ve got a dozen clients pleased to have solutions that “just work”.

    Let me know when tech snobs start paying.
    Until then, I’ll follow the money.

  41. MeziLu says:

    I think that anyone that knocks .net is someone that has never gotten beyond basic programming skills and seen just how robust and powerful .net is.

    I mean, if you haven’t pushed it beyond lame programs, how can you judge it to have limitations?

    The toolset is simply amazing. And, it’s flexible. If you want to write traditional C or C++ (including pointers, pointers to arrays of structs or classes, pointers to functions, threading, etc), you can.

    If you want to call the API directly, you can.

    If you want to do robotics or interface scientific instruments, you can.

    I know for myself, I am MUCH more productive and write MUCH more sophistocated programs that I did with gnu/Linux, Mac, DOS, and VS6 C++.

    That translates to better programs and faster for my company that I could ever do with those other platforms.

    What’s wrong with that? A language is only as powerful as the sophistocation of the programmer coding it. If you aren’t sophistocated, then you’ll never be happy with any language.

  42. Seth says:

    I think in some ways Joe is a smart guy. I mean, I am all for expanding your horizons and learning new ideas, but in recent years there has just been an explosion of technologies and it is really, really hard to keep up. Sure, it has always been the case that you have to stay on your toes in this business, but you also have to decide if you want to be a true expert in a specific technology or if you want to know a little about everything. There just aren’t enough hours in the day to do both.

    I consider myself an expert in C# and .Net programming. I know just enough to be dangerous in PHP and F#, but I will never have enough time to devote those languages to become an expert. It makes me a little uneasy to hang my hat on one technology for sure, but I’m not sure there’s a better option.

  43. Dan Korn says:

    I found it interesting to read this article right after this other one:
    http://coderoom.wordpress.com/2010/06/23/criminal-overengineering/

    Both were included in today’s CodeProject mailout:
    http://www.codeproject.com/script/Mailouts/View.aspx?mlid=8014

  44. As they say, “YAPL!”… “Yet another programming language”…

    Functional programming is another attempt to sell a product. Not that it does not have its uses. And it will most likely find its niche in the development community.

    I have been in this field a very long time and I have seen more fads come and go than I can remember. And this one reminds me of the hoopla that was generated over Prolog in the early 1990s. That language was supposed to save the world also.

    We also now have embedded into our psyche that Object-Oriented Programming is the key to writing correct code when analysts have found OOP to be a complete technological failure in terms of its promise.

    All languages have their place in our industry since the more specialized ones are attributed to certain problem solving techniques. However, until development environments reach the level of fantasy that Star Trek promises, the core languages we all know and love will be with us for many years to come. And the majority of developers will keep on using them since that is what we know and business environments are hardly arenas for rapid or intelligent change.

    As to the narrow-minded focus of MS developers, the same could be same of Linux and Java developers, most who curse the day Microsoft was incorporated.

    I am a Microsoft developer and I happen to believe that you are not going to get much better than the .NET development environment for productive output. However, I don’t believe that the Linux\Java world has any less quality. Its just my opinion. However, given the breadth of both development environments it is simply not feasible for one to cross-over in terms of what brings home the bread & butter. There is simply too much to know and understand with each of these environments in order to be able to either one proficiently.

    • Richard says:

      Who are these analysts that say OOP is a failure? Before OOP there was structured programming – OOP is better in my opinion.

      Remeber when everything written for the government was going to be in ADA?

  45. Tanner says:

    They may be trying to change the programming world but it’s going to be slow to take because people get accustomed to a certain way of doing things and don’t like to change. I’m not one of “those people” but I deal with a lot of them.

    I however welcome this attempt at fusing together two different programming schools of thought. I will be exploring f# on my own time and hopefully it will make me a better developer. At minimum it will at least show me a different approach to problem solving.

  46. Brian says:

    As a new developer who is learning C# to enhance existing applications as well as write new ones to solve business problems I face in my own personal bubble, I can’t fathom learning something else outside the MS stack right now. To me (again as a noob) it seems that everytime I further educate myself about the .NET framework and ecosystem, I’m finding something new and also finding out how much I don’t know. Since this is also being done in my spare time I think that it will take me several years (at least) to become good at it (and I really want to become good).

    I’m discovering that I really enjoy developing and I would be excited to learn languages and techniques outside the realm of .NET but I feel, at this point, I would become much less productive in doing so. Instead I will stay focused on learning the toolset that I’ve chosen and go from there as time permits.

    • Richard says:

      I’ve been a programmer for 30 years and learned a lot of languages and I totally agree with you. At first I learned other languages because they weren’t COBOL, but once I got a job writing for Windows 3 in C, I realized it took most of my time to become really good at what I needed to do the job. Remain open, but focused. Good luck to you – it’s much tougher now than when I started.

  47. Ra88 says:

    This is why I never post articles online – too much time is taken defending yourself from critics. Read it for what it is. If you don’t like it, agree to disagree. Move on. Instead of spinning your wheels critiquing articles, spend more time learning. Debate is fruitless and our users don’t care as long as our programs work.

    @ m Oppenheimer – “Fanaticism is always a bad thing…”
    so true…

    There is no black or white, it’s all gray. Such dogma is for religion and politics not for people who actually use their gray matter.

  48. Lord Geddy says:

    I must say that I am quite amazed at the vitriolic direction this whole topic has taken. If you step back and simply look at the basic point Antonio is making, this article should not cause the knee-jerk reaction that it has.

    Simply put, Antonio was just putting forth a view of what he sees as the tendency for Microsoft developers to become so entrenched in their toolset/chain/environment (because it CAN do so many (or all) of the things they need it to do) that it becomes easy to not look outside of the Microsoft world for new (or old) technologies that could benefit their development activities.

    Case in point, how many MS developers do you constantly hear trashing SourceSafe that have never even explored git, cvs, svn, mercurial, etc. Existing tools that are far superior AND can integrate into a Dev Studio environment?

    For the record, I am primarily a .NET developer as the company I work for uses this as our development environment. However, I often utilize other technologies to complement .NET to achieve my project goals.

    Bottom line, Antonio, your point is well made and I agree that it is easy to become complacent when you have a company like Microsoft that does offer “one-stop shopping”. However, that complacency can seriously limit your skill sets. After all, if I had to walk to work and someone introduced me to a bike, I would think that I really had found a more efficient way to get there. Until I get passed by a car…

    Regards,

    Mark

    • RAVI says:

      The matter of the fact is Microsoft introduces bike with easy to ride features when compared to other bike providers who removes all the fun of bike riding and make it a hell to ride

  49. josh says:

    the one thing that Microsoft does good is RAD development their Operating system is no good all windows 7 is.is a knock off of Gnome for anyone who uses Ubuntu doesn’t it fill almost the same. I think anyone who programs needs to learn code first just encase they have problems with the program they can look at the code to fix it.

  50. A Mighty Wind says:

    Could you also write this article about a Java Dick, who doesn’t know anything about M$? This article is offensive on its face. If I don’t need a language, I have learned not to spend time on it.
    I have a day job, and I don’t study things that are useless. Its something you learn how to do when you realize this is not your life, its just a job.

    LISP anyone??

  51. mark says:

    Hi Antonio,

    I’m surprised by the negative comments. I thought your article was great, and it may have been that some of the readers realized they were “dicks”, and were a little touchy about it.

    Have a great life. :-)

    -Mark

  52. Bruce says:

    I used to work for IBM and was hired away by a competitor, who much later laid me off, and now work for a small company dedicated to Microsoft products, although my partially enlightened boss gives me some time to experiment with the LAMP stack and other non-Microsoft products.

    Both IBM and now Microsoft have these qualities:

    1. They both used legal but unethical methods to try to own the marketplace.

    2. They make life difficult for people who want interoperability and the freedom of possibilities.

    I did a bit of consulting in between jobs, but to afford either an IBM mainframe or a fully populated Microsoft server to keep up my skills and possibly support my own business on the side is too much for me as an individual to justify, so the consulting didn’t last long – I needed a job. What I hate are:

    1. Microsoft or IBM trying to own me.

    2. Not being able to write once and have it run anywhere, because of IBM and Microsoft deliberately or blindly making interoperability difficult. (This is in addition to people who insist on continually making new languages, and requiring that I keep rewriting almost the same code over and over again in different forms.)

    3. Those monopoly worshipping business owners that try to keep us in their expensive proprietary trap, making it difficult to branch out on my own if I lose my job or need more money.

    So, the Joes or Dicks need to be insulted – they are suffocating.

  53. Glenn says:

    I agree with your analysis. However I should note the primary reason the company I work for pushes us to use the MSFT coding umbrella.

    Stability. Code that was written 15 years ago still runs fine on almost any PC. When you think about it it is amazing. So if you are less worried about time to market and more concerned with supporting your large consumer base. MSFT usually has you best interest in mind.

  54. Richard says:

    In 30 years I have probably developed fluency in at least 30 languages, if you count assembly. But at any given time I’m only fluent in what I use. Off the bat, I could no more write RPG II than I could fly, and I would probably struggle with COBOL, but at one time they were my bread and butter. I would have forgotten Forth completely if not for Postscript. Even C++ would be a challenge and that’s only a few years ago. But my real point is, I don’t know C# (for instance) as well as I’d like and probably never will. I’m open to new languages if they fill a need, even functional programming, but if I don’t use something, I can read an article and understand it then forget it in a week. As for MSFT, Windows 3 let me get free from COBOL, for which I will always be greatful.

  55. Bob says:

    I think everyone needs to take a DEEP breath here. I have worked for large companies, yes even MS, and you use what they use! At EDS I used COBOL and FORTRAN. WHY? Not because they were the best tool for the job or what I loved to program in, but that was what I needed to do to get that task accomplished. At MS I started in C++ and moved to C# as the climate changed. In another company I used Ruby on Linux. I have worked on a dozen OSes and over 20 languages and you know what that makes me?

    A PROGRAMMER. A DEVELOPER. AN ARTIST IN CODE.

    Who cares which language it is in or what OS it runs on? That needs to be picked by the project requirements or by the environment you are in. In the RARE case in which you get to specify these things, the people you work with will still be in the they do what they have to in the environment you spec.

    If you love to code you are ALWAYS learning a new skill set and mastering none except that one called logic. Everything comes back to that from assembler to the most esoteric one offs anyone has built. CAN YOU THINK LOGICALLY? After that it is all syntax and the value you add to the project using your mind translated into that logic via the syntax to make that OS DANCE!

    OK, it is a BIT of a rant, but yeesh guys, code is code, learn to THINK!

  56. Rajeev says:

    there are many Joes in others worlds too… you can’t apply it on MS alone any php developer don’t know ABC of programming, just using the CMS developed by others… without knowing whats and why of code behind

  57. Bezarah says:

    Cangiano,

    Judging by the comments I’d say most of your audience isn’t really reading your blog, they’re just skimming it.

    For those of you that think the author is not familiar with .Net or that he believes all MS developers/development suck, please read the article again. He’s really talking about what he sees as a lack of curiosity and narrow minded thinking in many, not all MS developers.

    I’ve been developing with MS technologies since the ’90s, and I completely agree with the article. The small exposures I’ve had along the way with other technologies have made me a better MS developer.

  58. TheDarkLord says:

    Well if i’m a new developer why i would want to learn old frameworks and old programming languages, when there is new one like .NET and new simple languages like c# which have fantastic environment(visual studio), more readable, fast and easy which save a lot of time and it has many new features and it has a very big support.

  59. Samir says:

    Is there any “rule” that every programmer/developer should know Linux/Mac or Ruby/Python/OCaml, blah blah blah…

    Everyone got their own choice or limitations and as of what I know, many devs are just “Carrier devs” who want to know just what is required for their particular job.

    And me, i’m not a Carrier dev, I have worked on PHP, a bit of Python, C/C++…assembly lang… and currently working on MSFT’s .Net and as Antonio says i’m also interested in F# (and many other langs)

    So, what I think is everyone has many options to choose and no one can complain

  60. Daryl de Reus says:

    I’m new to the functional programming languages, but are there specific advantages of F# as compared to C# for example? If there are, can they be mixed like it’s possible to mix vb and c#?

  61. mario says:

    Believe I’ve worked with enough .NET monkeys who only drink from the MSDN well that your story applies to *many* .NET developers. There are a few like Rob Conery of Subsonic fame who do not wear blinders.

  62. Jon Phenow says:

    It’s a pitty programmers don’t all attend colleges that teach using basic concepts such as REFACTORING and REVISION CONTROL. I don’t understand how Micro$oft has gotten away with keeping people away from such basic tools. That’s why I’m happy I’ve been attending a college that teaches using Open tools and tries to go over all of the topics, like refactoring and revision control. I’m an intern for a small company doing some programming and I look like some sort of prophet when i bring up Subversion or Git.

  63. Preets says:

    @Antonio

    You said >> due to a strict adherence to the Microsoft view of the programming world – and perhaps a lack of intellectual curiosity

    So you’re saying most average Joe’s “lack intellectual curiosity”? If Joe knew EVERYTHING in his “Microsoft world” then surely he was curious about something! May be he was curious about how to get this project out of the door and make a huge profit. Why would you play down his character by suggesting he lacks curiosity? How does this attribute in any way help you in proving MS is doing a good thing by bringing F# to the .NET world?

    You said >> the guy did manage to be somewhat adequate at his job. Not spectacular by any stretch of the imagination

    I would like to know why Joe is only adequate at his “Microsoft ONLY” job. Didn’t he know everything there was to know around Microsoft? Why then is this typical “Joe” only average?

    That being said, I do agree Microsoft allows for a lot of average programmers to make it into the programming world. Microsoft has turned programming into a “regular” profession which some people might find hard to digest.

    Not all taxi drivers are practicing for the Grand Prix.

    • Hi Preets,

      thanks for stopping by. By answering your question, I hope to clarify something for everybody.

      So you’re saying most average Joe’s “lack intellectual curiosity”? If Joe knew EVERYTHING in his “Microsoft world” then surely he was curious about

      something

      something! May be he was curious about how to get this project out of the door and make a huge profit.

      Many people commenting are under the impression that Joe was a master of his (.NET) trade and I’m dismissing his abilities on the basis of his ignorance of tools and techniques that are not strictly needed for his job. In reality he lacked both breadth and depth, with many holes in fundamental programming concepts. Above all he was not interested in expanding his knowledge one iota, unless his job was in jeopardy. He reluctantly studied .NET because he was more or less forced to.

      He was not a focused .NET master. Just “an average Joe” with not much passion for the craft of programming.

  64. Preets says:

    Fair enough.

    So to put it all together, the point would be that Microsoft is making the programming community better by bringing concepts like functional programming to the “average” Joe. Something that would otherwise be quite unlikely.

    Which also means, an average Microsoft programmer is better off than an average non-MS programmer because he has a big daddy taking care of him. After all, what are the chances that an AVERAGE non-Microsoft programmer would ever discover and work on Haskel?

    • So to put it all together, the point would be that Microsoft is making the programming community better by bringing concepts like functional programming to the “average” Joe. Something that would otherwise be quite unlikely.

      Correct.

      Which also means, an average Microsoft programmer is better off than an average non-MS programmer because he has a big daddy taking care of him. After all, what are the chances that an AVERAGE non-Microsoft programmer would ever discover and work on Haskel?

      For the most part, yes. This is why I praise Microsoft for exposing innovative programming concepts to millions of developers.

Leave a Reply

I sincerely welcome and appreciate your comments, whether in agreement or dissenting with my article. However, trolling will not be tolerated. Comments are automatically closed 15 days after the publication of each article.

Copyright © 2005-2014 Antonio Cangiano. All rights reserved.