

How Microsoft is changing the programming world - alexkay
http://programmingzen.com/2010/06/23/how-microsoft-is-changing-the-programming-world/

======
gruseom
Wow, I have to pipe up here. The commenters so far are completely missing the
point of this article. The author is making two observations, both of which
are quite correct in my experience. First, the mainstream MS developer
universe -- the overwhelming majority of it -- is parochial. People learn new
things when MS release some new technology and not before. (I'm talking about
the smart ones here. The mediocre ones don't bother learning.) Back when I was
an MS programmer, the place to learn new things was MSDN Magazine. There is
very little interest in looking outside the village gates; in fact it tags you
as a little weird. This phenomenon is so well-established that I'm surprised
anyone would deny it. I've commented about it on HN many times myself.

The second and main point is that since this large programmer population
receives its knowledge almost exclusively from MS, it's a really good thing
that MS have started teaching functional programming. It's probably the best
chance FP has ever had to break into the mainstream. Even if it takes over
just a corner of the MS world, that corner is probably larger than the rest of
FP put together. This is a really good thing, and it massively kicks the ass
of the crap that MS used to feed their "Elvises" and probably still do.

I'll add a third point. We know why this is happening. It's because a little
less than 15 years ago, MS changed their direction, acquired some top-notch
people (starting with Hejlsberg), and started moving in a direction more
informed by CS and PL theory. This process is slow, but good. One can finally
see it yield real fruit in the form of F# and the recent enhancements to C#.
People like Meijer are having a very real influence. Come to think of it,
that's probably why people like Meijer went to MS to begin with.

~~~
gaius
Well, I'd say that MS-only developers ignore Linux because it's not directly
relevant to their day-to-day work. They just want to do their jobs with the
tools they know then go home (and there's nothing wrong with that). On the
flipside, Linux-only developers actively avoid Windows on ideological grounds.
The latter is where this article is coming from. You can't really say a LAMP
developer is any more cutting edge than an ASP.NET developer. Both adhere to
the orthdoxy of their preferred platform.

Simon Peyton-Jones is another heavy hitter at MSR.

~~~
gruseom
I didn't mention Linux or LAMP. I said that the MS programming world is
parochial. It's closed-in on itself and remarkably ignorant of the rest of the
software universe. I worked in the MS space for years and observed it closely.
There simply isn't any doubt about this, or at least wasn't at the time.
Possibly things are changing as MS' power wanes; possibly the people who
frequent HN are outliers; possibly some people just don't like hearing this;
possibly all of the above. But I can walk you down the street from where I'm
sitting and take you to my friends' consulting shop where life is all-MS-all-
the-time and introduce you to a dozen or so smart programmers who can tell you
all about Linq-to-objects and ASP MVC, not one of whom knows anything they
haven't gotten from MS, except what they learned at school.

~~~
gaius
On the flipside of that is people using MySQL who have no idea what MSSQL can
do (for example). The Linux world is no better or no worse in this respect.

~~~
Daishiman
No, it's much, much better. For one, there's no such thing as the Linux world.
"The Linux world" is everything else in this context, which includes Java,
Ruby, Python, Web, C, and dozens of different technologies. With the exception
of the Java community, none of those communities come even close to being as
insular. None. Every Ruby and Python dev I know has at least checked out Java
and C# before going back to their primary language. Every Java developer has
dozens (too many, perhaps) of choices for libraries, app servers, and even
other language that run on the JVM. Even PHP developers have some notion of
other tools used for web development (generally Flash and Flex). It's true
that many of these communities might not have much exposure to deeper subjects
of more dubious relevance, like CS theory and classic FP languages like Lisp,
but they at least know and understand that there are other choices out there.
Meanwhile, most MS-only devs don't even know about Apache, SVN, or even the
notion of using a text editor as your primary development environment.

------
kenjackson
It is an arsurd article. I can point you to web devs on LAMP from the same era
that were equally ignorant of other languages or paradigms. The real question
for developers isn't, "what things, do I consider important, do you know?",
but rather "what have you shipped?" If the only language you know is C++, but
you're the lead dev for the Halo series, that gives me a lot more respect than
if you know 20 languages and your great contribution is a website where you
criticize what other people don't know.

And I think he doesn't understand the difference between language features
making it to your production language and the feature existing elsewhere
(especially if elsewhere is an obscure academic language). I can be sincerely
interested about lazy evaluation showing up in language -- but that doesn't
mean that I hadn't used it for the past 20 years in toy projects.

~~~
cageface
People that read this as an anti-Microsoft article are totally missing the
point. I've met plenty of these "Dicks" and they're not necessarily bad
programmers, they just work entirely within the MS domain, which is easy to do
because it's pretty comprehensive.

Like the author, I commend Microsoft for using this influence to help bring
functional techniques into the mainstream. The programming challenges we face
today are more suited than ever to FP and the backing of a big vendor with
mature, sophisticated tools is exactly the kind of boost FP has been waiting
for. This can only be a good thing in the long run for Haskell, Clojure,
Scala, Erlang etc.

I deplore a lot of Microsoft's business practices but the work they're doing
in this area and in support of the Haskell team deserves kudos.

~~~
pbz
It's not what he's saying that gives it the anti-Microsoft flavor; it's
calling every Microsoft programmer a Dick. Hiding behind this moniker that is
obviously insulting -- and the author proves he knows this when he says "short
for Richard, of course" -- all the while pretending it's innocent is what does
it.

~~~
gruseom
You're quite right, that was uncalled for and, well, a dick move. For some
reason I didn't notice it this morning.

On the other hand MS don't treat their own workaday programmers much better by
calling them "Mort".

------
hga
Through " _the impact it’s currently having on making functional programming,
or at least some degree of it, more mainstream._ "

Go, Microsoft! ^_^

------
cabalamat
The other day I was browsing through computer books. One, on LINQ for VB,
seemed very enthusiastic on this radical new technology Microsoft had brought
out -- and the example they used to illustrate this was something Smalltalk
had 30 years ago.

Incidently, Smalltalk isn't normally considered a functional programming
language (do doubt because object orientation overshadowed it) but with its
closures (called blocks) and select:, collect:, reject:, inject: etc methods
it seems (to me) as much so as Scheme.

~~~
kenjackson
Which book?

~~~
cabalamat
This one: [http://www.amazon.com/Pro-LINQ-Language-Integrated-
Query/dp/...](http://www.amazon.com/Pro-LINQ-Language-Integrated-
Query/dp/1430216441/ref=sr_1_1?ie=UTF8&s=books&qid=1277320215&sr=8-1)

The example on page 3 was:

    
    
       Dim greetings() As String = {"hello world", "hello LINQ", "hello Apress"}
    
       Dim items = _
         From s In greetings _
         Where s.EndsWith("LINQ") _
         Select s
    

Which In Smalltalk would be:

    
    
       greetings := #('hello world', 'hello LINQ', 'hello Apress').
       items := greetings select: [:s | s endsWith: 'LINQ'].
    

Needless to say I was not completely bowled over by this stunning Microsoft
innovation.

~~~
kenjackson
I don't think this one line is exactly where all the innovation is. But it is
representative of getting your toe in the water.

But this is the typical argument I hear from people about anything. "Hey, that
was a good movie"... "Dude that plot is basically a derivative of Hamlet with
a twist of Revelation, chapter 3. Nothing really new there". Or the most
standard, "Actually you can do that with Lisp." I'm sure you probably know
that everything in that Linq query is pure syntatic sugar. Not runtime changes
needed.

But with all that said, I'm sure MS didn't do this to be "innovative". At
least I hope not. I assume they did it to make the lives of developers easier.
That's the real test, not if no other language ever implemented the feature.

~~~
cabalamat
> _I assume they did it to make the lives of developers easier._

I imagine you're right, and it's an entirely reasonable thing for MS to do.
What I took exception to is the way the book spun it as an amazing new
technology.

~~~
kenjackson
I agree. The "has your world been shaken yet" (or whatever the line they use)
was over the top. Unnecessary. For most users, the code speaks for itself.

------
rbanffy
I am not sure I can agree with the article. By hiding so many aspects of what
a program is made of, Microsoft did a disservice to C programmers. Visual
Studio programmers that can write a makefile are not many and, by hiding the
gory details inside an IDE, Microsoft created - and enjoyed - a good excuse
for, if not creating gory details, at least allowing them to exist and thrive.
The recent "embrace" of functional programming is too little, too late.

Plus, I have a personal feeling those gory details are there by design -
Microsoft has every incentive to make it hard to port Microsoft code to any
other platform and no incentive to play nice with code that will run
elsewhere.

I cannot imagine going back to a career limited to a fully-Microsoft stack.
There is just too much missing.

~~~
georgieporgie
> Visual Studio programmers that can write a makefile are not many

I'm curious why you think it would be important or valuable for a VS developer
to write makefiles.

Your subsequent statements seem to indicate that you believe it allowed MS to
put more project complexity, hidden by the IDE. I don't particularly see
anything wrong with that, but maybe I'm misunderstanding you.

My view on this is: I write code to create sellable product. I don't sell
makefiles.

~~~
rbanffy
You write code to make sellable products and every avoidable complexity, every
thing you don't understand in your code or build system will eventually come
back as increased cost when you need to extend, adapt it to the next Microsoft
OS or simply debug it in an environment that looks like what your clients use.

Of you don't understand your build system, you really don't know what you are
shippin.

~~~
tansey
Have you ever use Visual Studio or written a production app in C#?

VS provides the ability to do all of those things. You can both extend the IDE
and create DSLs. And .NET runs on a VM, so it's write-once, run-everywhere
(unless you're trying to port to Mono/Linux, but that's not what .NET is
designed for). It also has the absolute best debugging toolkit of any IDE,
ever.

Make files are for the people deep down in the guts of systems, writing bare-
metal code. This isn't 1990, we don't to force ourselves to use these
antiquated tools for all sides of development.

The idea that you need to "understand your build system" is particularly
ridiculous. I understand that my code compiles, has no warnings from VS,
passes all my test cases, and works fine in beta testing. Why do I need to
write a make file to do what VS is smart enough to do automatically?

~~~
rbanffy
I have used the Visual Studio family from 1997-ish to 2001 (VB, ASP/VBScript
and C) and then, again in 2002 (C for WinCE) and 2004/2005 (this last time,
with C# for IIS), so, I would say, I have used it quite enough. I have also
used NetBeans since the time it was called Forté and Eclipse for
Java/J2EE/J2ME. I find they are all at the same level in terms of debugging,
with some advantage to the Sun complete toolset when running under OpenSolaris
and when you want to optimize your C code for multiprocessors.

As for this not being 1990 (or 1980, BTW), I agree. One should not use
antiquated tools to do a job, but I find your willingness not to understand
what you are doing quite amusing. If I cared, I would find it distressing,
but, since I don't, I will leave it as it is.

~~~
georgieporgie
> I find your willingness not to understand what you are doing quite amusing

Being condescending and rude isn't moving your point along any. In fact, I
still don't know what you point _is_. You appear to think makefiles are
inherently superior to VS solution/project files, but for no obvious reasons.
The only reason you give seems to be that VS users don't understand their
build system, whatever that means.

------
joeyh
Watch various SPJ lecture videos for a take from the inside. He'll sometimes
talk about working with collegues at MS to add things from FP to these
mainstream languages.

------
nathanwdavis
The 'Dick' he writes about didn't know functional programming concepts in
early 2000s. If HN existed at that time, you probably could have said that
about the HN readers. OOP was the big deal then and the majority of non-MS
programmers didn't grasp functional style either.

I sure didn't in 2001. The author is an idiot.

~~~
seiji
You're missing the age of Dick. If Dick is 18, sure, it's excusable. If Dick
has been programming for 30 years, his lack of knowledge isn't so excusable
(assuming one's goal is to amass 'knowledge').

So many Kids These Days feel the entirety of Computer Science and Programming
has been developed since 2000. I'm pretty sure LISP and functional programming
existed in literature, learning, and practice before early 2000s.

~~~
kenjackson
Unless your an encyclopedia or going on Jeopardy! I don't think that amassing
knowledge is a very interesting goal. To each their own, but I think creation
is a lot better than amassing knowledge.

And to be honest, there was little practice in Lisp before 2000... and frankly
little after 2000.

~~~
chc
Creation without understanding is shallow. You don't just learn the technique
of playing piano and then crank out beautiful symphonies. You don't learn how
to draw a blueprint and create world-class architecture. You don't memorize
the times table and start doing advanced physics calculations. Knowledge of
the history and state of the art is a huge component in creating great things.

And the statement that there's "little practice" in Lisp is a statement about
the current mindset of most programmers, not about the language itself.
Whether it's useful is orthogonal to whether people use it.

~~~
kenjackson
Understanding necessary for creation is... well... necessary. But "amassing
knowledge" is simply amassing knowledge. I can amass knowledge all day long,
but if I don't understand or create it really is simply mental masturbation.

And my statement about Lisp was just about the state of the world. It's a fine
language, but we shouldn't pretend that its used more than it is. Actually in
teaching it is used a fair bit, and teaching is practice of a sort.

------
ryanelkins
Blah - this is just trying to hide an anti MS screed by wrapping it in an
article about functional programming. You'll find good and bad developers that
use any language. A few anecdotes about how well he knows Dick (this name
choice backfires on the author more than once) isn't really going to persuade
me that most MS devs are clueless. Functional programming is new to MOST devs
regardless of their preferred platform I would imagine. MS may not be as
innovating as it once was but at least it isn't stagnating.

------
backroomcoder
I think the accessibility of any language nowadays has the potential to create
many more dicks than microsoft ever did. I also think Microsoft go to more
effort to teach good programming practices than they are given credit for. I
also don't subscribe to the view that I have to learn everything in order to
pick up new tricks. I learn the languages, platform and tools which enable me
to ship my chosen products in my chosen markets. I think too many assumptions
are being made about microsoft programmers.

------
ergo98
This article is terribly bitter, with a contrived, unsupported sense of
superiority.

I'm a pretty well-rounded developer, but I know there are innumerable things
that I don't know. I also know that I research enough that the things I'm not
comfortable with aren't particularly important for me or my projects.

I've never developed anything real in a functional language, for instance,
aside from doing some tutorial tests and realizing that the friction (with
coworkers trying to maintain, for instance) overwhelmingly demolished any
potential advantage.

I will say one thing though -- the most mediocre developers I've ever worked
with tended to have the widest "range" of "skills".

It's a way to compensate for never being able to provide solutions. Instead
they always weaved, always sure that if you just embraced the latest thing and
did things entirely differently it would be so much better (which they never
actually _do_ themselves because their role is more "OMG, you don't know about
{X}? OMG!")

------
georgieporgie
This article reeks of bitterness.

I find it curious that he seems to knock 'Dick' for not being well-rounded
enough for his tastes. If his company doesn't pay him to develop Linux
products, why on earth would he learn about developing for Linux? Or other
languages. Or tools.

I'm all for picking up new languages (learning PHP changed some of my
approaches to C++), but there's a lot to be said for sticking to your tools
and learning them thoroughly. I can either be highly productive in C++ or
flail around in a functional language/new platform. I'll stick with the
productive one until someone wants to pay me to flail.

~~~
cabalamat
> _If his company doesn't pay him to develop Linux products, why on earth
> would he learn about developing for Linux?_

If programming is just a job, and you don't care about it when you leave the
workplace, that's a reasonable attitude.

If, OTOH, programming is something you care about and that actually interests
you (which is true of nearly all good programmers), it's an attitude you won't
have.

~~~
georgieporgie
> If, OTOH, programming is something you care about and that

> actually interests you (which is true of nearly all good

> programmers), it's an attitude you won't have.

Whoa! So what you're saying is that if I don't know the recent trends in
functional languages, I don't care about programming? Seriously?

Do you see the problem here? This guy is laying out arbitrary things which
appear in _his_ domain of knowledge, and discounting others for not having the
exact same set of experiences. I see this a lot among software people.

Sure, broadening your horizons gives you new insights, but there is a _lot_ to
be said for mastery and focus.

Additionally, why is it that there is an expectation in software that my job
has to also be my hobby, or else I don't care and/or I'm no good? Do you think
mechanical engineers working for an auto manufacturer are expected to be at
home designing bicycles, lest they be thought of as not caring?

~~~
cabalamat
> _So what you're saying is that if I don't know the recent trends in
> functional languages, I don't care about programming?_

No, I'm saying that if you're not interested in different programming
paradigms, you're not interested in programming. You don't have to know about
"recent trends" in functional programming (it's not actually that recent --
Lisp has been around forever, and the Haskell standard is over a decade old).
But if you're not interested in functional programming at all, then no, you're
not interested in programming.

> _This guy is laying out arbitrary things which appear in his domain of
> knowledge, and discounting others for not having the exact same set of
> experiences._

But I'm not doing that. I'm saying that programmers ought to have some
familiarity with some of the basics of the technology they work with. Knowing
nothing about functional programming is like knowing nothing about HTML -- it
is a big gap in one's knowledge.

> _there is a lot to be said for mastery and focus._

I agree. Focus is good. But you can't have mastery without knowing the right
programming techniques and paradigms -- these can change a 500 line program
into a 100 line (and easier to understand) one, or a 5000 line program into a
500 line one.

> _why is it that there is an expectation in software that my job has to also
> be my hobby_

I have no such expectation. I neither know nor care what you do for a living
or in your spare time. What I am saying is:

1\. some skills take a lot of effort to master.

2\. programming is one such skill

3\. you're more likely to take the time and effort to learn a skill if you
like doing it

4\. therefore, programmers who program because they like doing it are going on
average to be better at it than programmers who program because it's just a
job

~~~
georgieporgie
> I'm saying that if you're not interested in different programming paradigms,
> you're not interested in programming.

I'm going to go ahead and call B.S. on that. At my most interested, I've had
no interest (nor awareness) in functional programming.

Now I'm aware of it, but still not particularly interested in it. What I _am_
interested in is working with a platform that has better foundations (e.g.
.Net vs raw C++).

> Knowing nothing about functional programming is like knowing nothing about
> HTML -- it is a big gap in one's knowledge.

Completely arbitrary. A lack of HTML knowledge would be shocking only due to
its ubiquity.

> Focus is good. But you can't have mastery without knowing the right
> programming techniques and paradigms

You seem to be saying that functional programming can be used to greatly
reduce code. But if my employer doesn't allow it, and my teammates aren't
experienced in it, what good is it to me?

> therefore, programmers who program because they like doing it are going on
> average to be better at it than programmers who program because it's just a
> job

I agree with this statement, which is nothing like your earlier statements.

~~~
cabalamat
> > I'm saying that if you're not interested in different programming
> paradigms, you're not interested in programming.

> I'm going to go ahead and call B.S. on that. At my most interested, I've had
> no interest (nor awareness) in functional programming.

FP is just _one_ programming paradigm. Other important concepts in programming
include: object orientation, stack based languages, model-view-controller,
macros, templates/generics, structured programming, lazy evaluation /
dataflow-based programming, interrupts, cooperative v. coercive multitasking,
memory protection, pipes between processes, serialisation, event loops,
modularity / seperation of concerns, common data structures such as lists,
arrays, binary trees, hash tables, etc.

My contention is that a programmer who doesn't have a large number of concepts
such as these is likely to build bad software when confronted with a large,
complex software project.

> You seem to be saying that functional programming can be used to greatly
> reduce code. But if my employer doesn't allow it, and my teammates aren't
> experienced in it, what good is it to me?

Functional programming doesn't just mean esoterica like Haskell. In the wider
sense of the term, it means anywhere where you're passing a function as a
parameter or the return value form another function. You can do it in such
mainstream languages as Python, Ruby, C#, and JavaScript. They're even adding
closures to Java.

I'd be very surprised if your employer has a blanket edict against higher-
order functions, because employers are either clueful or clueless -- clueful
ones will allow it, clueless ones won't know what it is.

~~~
georgieporgie
> FP is just one programming paradigm. ...

Right, but _this article_ was bashing people for not knowing, specifically,
about functional programming. My entire point has been that it is ridiculous
and petty to do this. Let's say you know A, B, C, and E. Aha! What about D, I
ask. You're clearly an idiot, I can't believe you don't know about D. And here
you get F, which is related to D, and you act like it's something new to the
world. Pssh!

See?

> I'd be very surprised if your employer has a blanket edict against higher-
> order functions

Er, every employer I've ever had has been very strict about the introduction
of _any_ new technology, library, language, etc. This is because every
employer I've had is concerned with maximizing productivity and shipping
product. Tinkering with new stuff on the job can be rather dangerous to one's
employment.

Again, I'm not promoting ignorance, what I'm doing is speaking out against
this alpha-nerd judgment of others.

~~~
cabalamat
> _Er, every employer I've ever had has been very strict about the
> introduction of any new technology, library, language, etc._

Your experience differs from mine. For me, while I've often been told what
language to write code in, I've never been told what features of the language
I am or am not allowed to use. Regarding libraries, I've always used relevant
open source ones, paying attention to licensing issues as appropriate.

