I just came across a blog entry that disturbed me entitled Should the hobbyist programmer matter to Microsoft? by Rory Blyth of Neopolean.com. It was not so much the blog entry by Rory that really disturbed me, but the tone of the comments he received (over 100 at the time.) As I started writing this post, I planned to comment on those comments. Instead, all my comments instead focused on Rory’s post. Maybe I’ll comment on the comments in a future blog.
Divining Microsoft’s Responsibility
Rory was commenting on Kathleen Dollard’s Guest Editorial at Visual Studio Magazine entitled Save the Hobbyist Programmer (I think it regrettable that Kathleen choose the term “hobbyist programmer” rather than something like “occupational programmers” because the post’s comments seemed to attack more of what the term “hobbyist” implies than the actual concepts it seems Kathleen was trying to convey.) In his post, Rory starts out by saying:
“Microsoft’s responsibility is not to hobbyist programmers. As someone who makes his living by working with Microsoft technologies, I would be rather ticked off if MS were catering to people who weren’t professional coders.“
I found that quote most interesting because nowhere in his post did Rory reference Microsoft’s corporate by-laws, mission statement, or analyst presentation where thye indicated they had explicitly chosen to avoid meeting the needs of “non-professional coders.” As far as I know, Microsoft has issued no such statement of direction so I’m not sure why Rory would state Microsoft’s responsibility is not to hobbyist programmers. Has he been speaking to Gates or Balmer and just not told us?
She turned me into a Newt!… Well I got bettuh.
Continuing, Rory goes on to state:
“I’m not so sure where the increased complexity is. I did quite a bit of VB6 programming before moving to .NET. I found the switch to be a bit of a shock, but when I was over the hump of getting accustomed to .NET, I found my job much easier.“
Odd. If there were no increased complexity, what “hump” would there have been to get over?
Compare apples and oranges; they are both eaten
In his post Rory also implies an analogy comparing an older vs. newer car with the hobbyist programmer vs. the professional programmer:
“Making changes to accommodate the tinkerers would be like rolling back advances in auto engineering. My car is held together by more electronics and gizmos than you’ll find at NASA Mission Control. I can’t change my own oil, and I sure as hell wouldn’t try to yank a spark plug out. Although I’ve been denied the chance to put my car on blocks and work on it over the weekend, I’ve been granted an automobile that is much more efficient, reliable, and powerful than I would have had if it had been built with accessibility to non-mechanics in mind. “
I tried to understand this analogy, but I just could not get it to fit:
- Changing oil and spark plugs is routine mechanical maintenance. Programs have no mechanical maintenance. Assuming programs are designed correctly then never “wear out.” There is simply no equivalent in software for the changing of oil or plugs.
- Automobiles were generally designed to address a common use case: transportation. As designed, they meet the needs of most people who use them, although probably never perfectly but almost always good enough. Automobiles are far more analogous to applications like Word and Excel than to development tools which are designed to create software for new use cases.
- It is simply not possible for one person with only intellectual resources to modify or create a new type of car to meet new use cases.
- In the automotive field, the better analogy with development tools might be the tools required to fabricate new automobiles. Still, the physical requirements of creating an automobile to meet a new use case vs. the lack of such requirements for programming seem inexact analogy at best.
Maybe another analogy would be the professional drivers whose job it is to use cars (and trucks) to transport people or things from one location to another such as truckers, taxi drivers, package deliver drivers, and so. By comparison there are many non-professional drivers who also transport people or things by cars (and trucks.) We could possibly imagine a professional driver saying about General Motors:
“General Motor’s responsibility is not to hobbyist drivers. As someone who makes his living by driving General Motor’s vehicles, I would be rather ticked off if GM were catering to people who weren’t professional drivers.“
It would seem that might not make the most sense for GM as its market for drivers who transfer people or things from one location to another is larger if it does not ignore the “hobbyist” driver. I won’t further comment on this.
Mommy, where do “Professionals” come from?
Elsewhere in his post Rory states:
“Gone was the horrible combination of procedural and OO programming styles. I no longer wrote code that made use of some mysterious global function that existed in god-knows-what library. My web applications are no longer monolithic pages of stand-alone code that’s about as reusable as a condom. Life is better.“
Strange. By implication Rory states he is a professional programmer, but my understanding is that if one is a professional programmer one wouldn’t large monolithic modules of stand-alone code that are not reusable. But maybe that is naive on my part as technically the definition of “professional” means “they get paid to do it.” So maybe “professional” doesn’t mean one is actually reasonably skilled in their profession?
But maybe that too would be an unfair interpretation. Maybe when Rory used the term “professional programmer” he meant someone who has developed a level of skill and expertise in the area of programming, and someone who would be considered a “professional programmer” by others holding the same designation. That’s probably what he meant?
Assuming that definition, let’s revisit Rory’s last quoted statement above. Is it possible that Rory was not always a professional programmer but instead actually learned his skills over time? Maybe Rory is now a skilled professional programmer, but earlier he was not? That would seem logical as I don’t believe on the day of one’s birth, a person has ever left the mother’s womb carrying with them the designation of “professional programmer.” (please post comments and provide references if any readers know otherwise.)
Based on that postulate, wouldn’t logic dictate that the state of being a professional programmer would require a transition from being something less of a professional programmer? Further, it would seem logic would also dictate that is it not possible to instantaneously transition from being “not-a-professional” to being a professional if being a professional by definition requires expertise?
If my logic is all correct, that would then explain how Rory could be consider a professional programmer now yet at one time his code was previously “implemented using a horrible combination of procedural and OO programming” which is inconsistent with how a professional programmer would implement code. Clearly in the past he was not (as much of) a professional programmer as he is today?
The logic would also appear to reveal that there are not just two states, one of being a “professional programmer” and another being a “hobbyist programmer“, but instead an almost infinite series of states in between the two extremes. Given that, it would follow that it would be very difficult to determine just exactly to whom Microsoft has responsibility, assuming there was some way to determine, in this area, just to whom that specific responsibility would be.
Since any given state along the continuum between hobbyist and professional is infinitesimally small, how could Microsoft limit its target focus to one exact state along the continuum? Given the costs of creating and supporting development tools, would not Microsoft be required by the laws of economics to provide tools that could be used by a broader range of programmer’s along the continuum?
If so it creates the quandary of where to stop along the continuum as one targets professional and expands target toward hobbyist. Since all it is that appears to limit the hobbyist from the professional is skill and expertise, then would not catering to the hobbyist in turn generate more professionals since the hobbyist becomes like a professional each day programming? That would tend to support the earlier argument that a programmer transitions from being not-a-professional to a professional over time.
Divining Microsoft’s Responsibility, Redux
To finally bring this all to closure let’s consider the modern publicly-held corporation in a capitalist society. My understanding is that such a corporation’s primary responsibility is to its shareholders, and public company shareholders generally want, all other things being equal, for the share price to be increased. Since Microsoft is a modern publicly-held corporation in a capitalist society, it would seem Microsoft’s responsibility is to its shareholders and hence to increase the price of its shares.
In the past, ignoring government intervention, Microsoft has proven itself rather adept at increasing its share price (I personally am glad I bought Microsoft shares many years back, which I have since sold at a gain.) I think it can be argued Microsoft’s strategy’s for increasing its share price have generally been to increase the installed user base of Windows.
Further, I think it is reasonable agreed computer users generally purchase computers because they provide applications that provide the users with some level of value. Since developers create applications, it would seem empowering developers would help increase the number of applications available. Simple math would then imply that the more people developing applications for Windows, the more potential users would find applications for Windows they would value and hence be more likely to purchase Windows from Microsoft. Further it would seem logical that users would be more likely to value applications developed by programmers whose skill and expertise levels were greater because those programmers would be more likely to create programs of higher quality.
Given all of these postulates and theorems, it would seem Microsoft’s best strategy would be to focus on creating as broad a base of programmers as possible, and enable as many of them as possible to move from “hobbyist” to “professional.” Doing this would be most likely to increase the number of quality applications available for Windows, which would likely increase the number of people buying Windows, which would likely increase Microsoft’s share price. Would this not be the most logic strategy for Microsoft given the analysis?
How I see it
Assuming I have not made any logic errors in my prior analysis, it would then seem that, regarding Microsoft’s “responsibility“, the following could be said:
“Microsoft’s responsibility is not only to professional programmers but also to hobbyist programmers, and all programmers in between. Anything less, as a modern publicly-held corporation in a capitalist society, would be a dereliction of their duties to their shareholders to whom they have ultimate fiduciary responsibility.“
Anyway, that’s how I see it. :-)
Good points, Mike.
I remember when VB was introduced and the C++ snobs derided the programmers that used it.
I agree about the term "hobbyist", which is Microsoft-speak, being misleading. The majority of VB programmers have always been business-people or scientists first and programmers second. They used VB to do a job. That doesn’t mean they are not professionals, just professionals with a different focus.
One reason VB 1,2 3 were so successful was that they enabled people who understood business problems to tackle their solution: It was easier to teach them programming, than to teach C++ programmers business.
Microsoft risks losing something if it leaves the majority of its base behind in its pursuit of IBM and the data center.
Thanks Jim. It’s an honor to have you comment positively on my essay.
"Odd. If there were no increased complexity, what "hump" would there have been to get over?"
*Change* is not necessarily the same thing as increased complexity. In the case of VB6 to .NET, the "hump" is *change*.
It’s like going from English to, for example, French. I don’t find French to be any more complex than English (simpler in many ways, actually), but there was still a "hump" to get over, and the hump was *change*.
"Is it possible that Rory was not always a professional programmer but instead actually learned his skills over time?"
Of course, although I don’t understand where you were going with this whole argument. It seems as though you’re implying that I have something against hobbyist coders, or that I think hobbyist coders don’t matter, which isn’t the point I was making. Re-read the opening bits of my post, and you’ll see that I didn’t want to see tools dumbed-down for the sake of hobbyists at the expense of ease of use for professionals.
You *do* seem to enjoy listening to yourself talk, so I suppose that could be the source of the long-winded argument out of left field ;)
"If my logic is all correct, that would then explain how Rory could be consider a professional programmer now yet at one time his code was previously ‘implemented using a horrible combination of procedural and OO programming’"
The "horrible combination of procedural and OO programming" was a direct result of using VB6. Show me VB6 code that *isn’t* like this.
Anyway, to get back to the meat of your post…
All in all, I think you simply ignored the opening of my post:
"Before things get too out of hand, I want to be absolutely clear: I am not saying that Microsoft should "ditch" hobbyist coders or anything of the sort. I’m saying that MS should not cater to them at the expense of creating better dev tools for professionals. I am not arguing against hobbyist coders, nor am I saying they should be wiped out of existence."
I honestly don’t understand what the point of your response is. Some of it seems to be an attempt to tear apart my arguments with some high-brow intellectual masturbation, while the rest of it seems to approach my post as though I were arguing that hobbyists don’t matter, which isn’t something I said.
As long as you choose to ignore my points, your post just reminds me of the typical college expository paper, complete with the pretentious and self-important pseudo-philosophical rambling found therein…
>> and the hump was *change*.
I’ll buy that argument.
>> You *do* seem to enjoy listening to yourself talk,
Not really. If one is going to attack someone’s position one must word things very carefully lest one open themselves up for a reverse attack.
Also, I’m just really frustrated with the state of the world right now, where everyone seems to be trying to takes things away from others. Your post, if Microsoft followed it, would take away the ability for me and all the other occupational programmers to use Microsoft’s wonderful tools. According to how I read your post that wouldn’t bother you a bit as long as you got what you wanted. That type of attitude really frustrates me. Conversely, I don’t want to compromise what you get if at all possible and will even take slightly less of what I want if both our needs can reasonably be met. But with that approach I seem to be in the minority in the world today.
>> Show me VB6 code that *isn’t* like this.
Ever heard of Rockford Lhotka? Fransceco Balena? Dino Espesito? Carl Franklin? They are just a few of many who have written books and articles showing good quality VB6 code, and they all have been highly praised for that work. (Of course I know you know Carl. :)
>> As long as you choose to ignore my points,
I made no conscious effort to ignore your points. I read your post, gathered my conclusions, and wrote my blog. I missed them because they were mixed in with other points that diverted my attention. If I were to ignore your clarification here I would be ignoring your points, but I am not doing that. I get your points better now that you have clarified them. However, what you didn’t address in your comments here, and what I was most disturbed by, was your tone.
Let me repeat the following: "I would be rather ticked off if MS were catering to people who weren’t professional coders." That statement, in my opinion, left you wide open for "attempts to tear apart your arguments with high-brow intellectual masturbation" as you call it. Rory, let’s be real. Your statement conveyed attitude and selfishness, not a well reasoned argument. If you are going to show attitude and selfishness, then yes, you will get called for it.
Back to your comments about my ignoring your points. Would you mind addressing this one? (Suggestion: you could respond as I did to the first point in your comment, which is you could acknowledge how badly if was perceived.)
BTW, I had intended to blog about something almost completely different, but by the time I was done, this post was what I wrote.
Mike –
"Also, I’m just really frustrated with the state of the world right now, where everyone seems to be trying to takes things away from others. Your post, if Microsoft followed it, would take away the ability for me and all the other occupational programmers to use Microsoft’s wonderful tools."
Actually, what I called for was *not* to remove anything from anybody, or to take away any features.
Rather, what I was arguing was that Microsoft should prioritize the professional over the hobbyist. If something makes sense to the professional who has experience developing, and if that thing will make the professional’s life easier, then don’t even *think* about excluding for the purpose of keeping a system dumbed-down to make it accessible to hobbyists.
When I was much younger, I taught myself assembly by piecing together what I could from a copy of the "IBM ROM BIOS Pocket Reference" and a few bits of source that I managed to find on some BBSs.
The truth is that a hobbyist will find a way in if (s)he really wants to. If someone can get into assembly as a hobbyist, then we shouldn’t even begin to think about designing high-level languages and systems to be "easier."
Don’t misunderstand, either: I have nothing against things being easier. It was my experiences with assembly/C that taught me to love systems like .NET, but the simplicity should *make sense* to the people who are going to be working with the system day after day, rather than those who might just tinker with it. I’m all for the huge code reduction promised by ASP.NET 2.0, but I wouldn’t want to see it simplified to the point that *I* lose power while Joe Florist is suddenly able to "just add water" and grow a web site for his little business – that’s what Frontpage is for.
The initial argument that sparked my response had to do with the possibility that .NET might be losing the hobbyist because of its "complexity," and I think that’s just crap. VB.NET, for those who want to learn it, is *easier* than VB6 because it’s consistent and doesn’t force a decade of cruft on the coder. I don’t think that VB.Next should be modified to make things "easier" when that’s already been done, and I don’t think that we should *focus* on the hobbyist.
"According to how I read your post that wouldn’t bother you a bit as long as you got what you wanted."
I want the system to make sense to professionals *before* it makes sense to anybody else. Coding isn’t rocket-science (it’s actually dirt simple, but has a reputation for being difficult on account of decades of stories about mainframes, etc.), and any hobbyist who wants to learn it ought to be able to do so, but they should not be the priority. The priority should be the people who *pay* for the tools, and who make their livelihood with the tools.
You might argue that hobbyists *do* pay, but in my experience (and, yes, this is anecdotal evidence, and therefore really weak), hobbyists don’t pay for anything unless they absolutely have to.
">> Show me VB6 code that *isn’t* like this.
Ever heard of Rockford Lhotka? Fransceco Balena? Dino Espesito? Carl Franklin? They are just a few of many who have written books and articles showing good quality VB6 code, and they all have been highly praised for that work."
My argument was that VB6 *forces* you to adopt a system that’s founded in a kludgy mix of procedural and OO styles (just like C++ (ick)), and that there isn’t anything you can do to get around it.
That’s one reason I’m so opposed to the calls for "simplicity" in a so-called "VB6+" or in VB.Next. VB is finally a full-blown OO language, and as a result can be used to produce *extremely* clean code. There are still issues, such as using the compatibility libraries rather than going directly against the framework, that clutter the code with something that *looks* like procedural garbage in the middle of a nice system, but VB is now a million miles ahead of where it used to be, and VB coders now at least have the *option* to write code that doesn’t call out to mysterious libraries housing poorly named and classified global functionality.
So, to say that [Coder X] wrote "nice" VB6 code is a little bit like saying that Mozart could have done "his best" with an orchestra composed of accordions, bagpipes, and kazoos – several instruments that don’t exactly compliment each other.
However, give Mozart a piano, and *then* we’ll talk.
The tool, in this case VB6, *forced* bad coding. There are people who did a good job of working with that obstacle, but it doesn’t get around the inherently messy nature of mixing methodologies.
"Let me repeat the following: ‘I would be rather ticked off if MS were catering to people who weren’t professional coders.’ That statement, in my opinion, left you wide open for "attempts to tear apart your arguments with high-brow intellectual masturbation" as you call it. Rory, let’s be real. Your statement conveyed attitude and selfishness, not a well reasoned argument. If you are going to show attitude and selfishness, then yes, you will get called for it."
It’s a *blog*. Attitude drives the thing. I’m not writing the dry papers that I wrote in college in an attempt to prove to some self-important professor that rhesus monkeys placed in a centrifuge for three hours are more likely to throw-up than rhesus monkeys placed in the Disneyland Tea-Cup ride. I’m arguing emotionally, and my post was an *emotional* response to something I had read. In a way, it’s because a reasoned argument *will not* catch most people’s attention. The reason can come later, but you must first get your point across by sounding your barbaric yawp over the rooftops of blogworld. The reason can happen behind closed doors, and in the form of emails with the people who make changes.
Another issue is that attitude and emotion are provocative. I got many more responses from the emotion than I would have from pure reason. As a result, I got some riff-raff, but I also got a good idea of what people really thought about the situation. The comments were lengthy, and the responses on other blogs were numerous. The emotion sparked controversy, and the controversy created a conversation. In the conversation, I got the chance to see what other people thought.
The way that I write on my blog is *not* the way I conduct myself in person, or "off the air." I’ve just learned a lot in the past few months about communication, and what people will respond to.
If you want an answer, then you have to get people to make an emotional investment in the topic at hand since 99% of them have other things they’d rather be doing.
In the end, though, I would never, *ever*, **ever** want to end a discussion like this with an emotional argument. Emotion is just the way to get things started.
That’s why I was so peeved when I found your post – it was an academic response to a "street" argument which is like shooting fish in a barrel. The fact that you belittled me in your response didn’t help, either.
On the other hand, I can’t entirely blame you. If you weren’t previously familiar with the nature of the writing on my blog, then it’s understandable that you might not see that a reasoned argument was avoided out of *choice*. All the same, though, belittling someone who makes an emotional argument is *not* a good way to convince them that "your way" is a good way.
Anyway, I’m rambling now.
Rory:
And I thought *I* was long winded… :)
>> Rather, what I was arguing was that Microsoft should prioritize the professional over the hobbyist. If something makes sense to the professional who has experience developing, and if that thing will make the professional’s life easier, then don’t even *think* about excluding for the purpose of keeping a system dumbed-down to make it accessible to hobbyists.
I agree they should offer a system that is not "dumbed-down" but disagree professionals should be prioritized over hobbyists; I think they should both be addressed, ideally with internal champions for both to ensure both needs are met. Given the great architecture of .NET, I honestly believe they can address the needs of both.
>> The truth is that a hobbyist will find a way in if (s)he really wants to. If someone can get into assembly as a hobbyist, then we shouldn’t even begin to think about designing high-level languages and systems to be "easier."
I either completely disagree, or we are running into the problem that the term "hobbyist" has been used by to describe a group that might be better described as "Occupational Programmers." OPs WILL NOT find a way if it is not easy; they have a job to do and for them programming helps them get their job done. If it takes too long for an OP to learn how to do something, then it is not helping with their job and they have to do it another way.
If you’ve been thinking of the "hobbyist" as the one who is programming for fun because he loves to program but doesn’t get paid for it as opposed to my OP, then we are talking apples-to-oranges. The former can learn to use the professional’s tools; the latter can’t afford the time. *I*, given my role, am often an OP though in my past I was a professional programmer and all things being equal, wish I still could be. I would, but I don’t want to give up my company to do so.
>> The initial argument that sparked my response had to do with the possibility that .NET might be losing the hobbyist because of its "complexity," and I think that’s just crap. VB.NET, for those who want to learn it, is *easier* than VB6 because it’s consistent and doesn’t force a decade of cruft on the coder.
That is were you don’t understand the problems that the non-full time programmer faces. I agree VB.NET is more consistent and I like it a lot more. But doing things like writing to a file take a LOT more conceptual understanding that with VB6. My biggest issue is with the learning curve; I think it can be addresses without causing professional programmers grief, as I detailed in my VBScript.NET.
>> I don’t think that VB.Next should be modified to make things "easier" when that’s already been done…
It has not been done enough, if for one reason that the IDE is too overwhelming for an non full-time programmer.
>> …and I don’t think that we should *focus* on the hobbyist.
Ignoring the mismatch in terms again, what is *focus*? 100% effort on true focus, but that won’t happen. If they spend 50% will that be a problem? How about 25%? How small a percent of their resources would you allow them to devote to "hobbyists" in order for you to give your blessing? Is 1% too much?
Also, can you define "should?" The word "should" assumes a goal or a standard. To what goal or standard do you apply your "should?" I detailed in my essay about my goals and standards; to increase shareholder value. According to that metric, I damn well think Microsoft *should* devote significant attention to OPs (I’m a shareholder, btw :)
>> I want the system to make sense to professionals *before* it makes sense to anybody else.
I understand, but why if the market is much, much larger for OPs?
>> The priority should be the people who *pay* for the tools, and who make their livelihood with the tools.
So if OPs pay for the tools, will they be allowed priority? For example, if the tools for OPs are $100, but there are 100 times as many of them who buy it then professional developers, shouldn’t they get the priority?
>> You might argue that hobbyists *do* pay, but in my experience (and, yes, this is anecdotal evidence, and therefore really weak), hobbyists don’t pay for anything unless they absolutely have to.
Again, I think we are comparing apples and oranges. OPs vs. hobbyists. I don’t care as much about hobbyists (though I think Microsoft still should, and I think they are with things like ROTOR), but I do care about OPs because I think they really matter.
>> My argument was that VB6 *forces* you to adopt a system that’s founded in a kludgy mix of procedural and OO styles (just like C++ (ick)), and that there isn’t anything you can do to get around it.
I probably disagree, but since you are talking in abstracts I can’t really debate any specifics. Do I like VB.NET much better than VB6? Definitely. Do I think it is impossible to write good code in an absolutely sense using VB6? Yes, you can do a reasonable job with VB6.
>> That’s one reason I’m so opposed to the calls for "simplicity" in a so-called "VB6+" or in VB.Next. VB is finally a full-blown OO language, and as a result can be used to produce *extremely* clean code. There are still issues, such as using the compatibility libraries rather than going directly against the framework, that clutter the code with something that *looks* like procedural garbage in the middle of a nice system, but VB is now a million miles ahead of where it used to be, and VB coders now at least have the *option* to write code that doesn’t call out to mysterious libraries housing poorly named and classified global functionality.
I don’t think I disagree with you at all on that. Note I am not in favor of a VB6+.
>> It’s a *blog*. Attitude drives the thing. I’m not writing the dry papers that I wrote in college in an attempt to prove to some self-important professor that rhesus monkeys placed in a centrifuge for three hours are more likely to throw-up than rhesus monkeys placed in the Disneyland Tea-Cup ride. I’m arguing emotionally, and my post was an *emotional* response to something I had read. … That’s why I was so peeved when I found your post – it was an academic response to a "street" argument which is like shooting fish in a barrel. The fact that you belittled me in your response didn’t help, either. … All the same, though, belittling someone who makes an emotional argument is *not* a good way to convince them that "your way" is a good way.
Did I belittle you? I don’t think so. I tried my best to only belittle your arguments. Of course if I belittle someone’s arguments sometimes it is hard for them to see the difference.
That said, you should *definitely* understand that my post was an emotional response to yours. But I don’t like spouting off and then having to do damage control for days, which is why I so very carefully worded my post. I was actually steaming mad as a wrote it. So you spout attitude, and I "masterbate intellectually", as you call it. Tit for tat! :)
BTW, I hope you take this all in good discourse. I mean you no ill will. If you spout off and it strikes a nerve with me, I’ll attempt to tear it apart. All part of the game. :)
>> If you want an answer, then you have to get people to make an emotional investment in the topic at hand since 99% of them have other things they’d rather be doing.
Wow. Have you been studying Sean Hannity? :)
It is great to see writers criticising each other’s work. This is how we grow as a writer. If you want to be a good writer we need to reach our readers. This genre’s audience are people like me who are logical thinkers. A reasoned logical argument would reach me, and I do believe most of your readers, as opposed to an emotionally based rant. As to the argument itself I agree with Mike providing tools for the full spectrum of programming skill level would lead to more competitiveness and better quality. I think MS is in support of this as they have lessons for beginner to intermediate coders online for free. They have created an express edition of Visual Studio also for free. It would seem they want us to code learn and grow and to be honest if I were in their position I would have done the same thing.
@Oscar: Thanks for the comment. Note that over 6 years have past since I wrote this so yes, lots have changed! For me, I’ve left the Microsoft/Visual Studio fold and am programming with PHP and MySQL on Apache. Haven’t looked back either. :-)