Contents
- Defining “Occupational Programmer“
- Professionals need Industrial Strength
- Hobbyists need to Learn
- Occupational Programmers need Productivity
- Occupational Programmers need Discovery
- Occupational Programmers need to Experiment
- Occupational Programmers need Progressive Disclosure
- Occupational Programmers need their Skills Grown
- But Don’t Sandbox Occupational Programmers
- Focus on Languages and Frameworks, not GUI Tools
- Not Hard to Serve this HUGE Market
- Other References
- I’m Available…
- Comments
Defining “Occupational Programmer“
I made two posts recently that muddled serveral issues so I am creating a seperate post here to isolate them and provide a location for comments specific to this issue:
Microsoft is not meeting the needs of “Occupational Programmers.”
The first thing I should do is define the term “Occupational Programmer“:
“An Occupational Programmer is one whose job is something besides programming. The programs they write are related to their main job such as streamlining tedious processes or automating labor intensive tasks. These people only spend a small percentage of their time programming.”
Professionals need Industrial Strength
Occupational programmers have significantly different needs than professional programmers or even hobbyists. Professional programmers need industrial strength developer tools. I could blather on forever defining that but I think most professional programmers know what they need as that’s what they focus all their time doing.
Hobbyists need to Learn
Hobbyist programmers main need is to learn. For them each learning experience grows on the past. Further, I would argue most hobbyist programmers are either younger (i.e. in elementary school, high school, or even college with a lot of free time on their hands) or older (i.e. retired and looking for something fun to exercise their brain.) I’m sure there are many hobbyists in between but I’d argue they are not the majority. Hobbyists goal is often to get better at programming, and I believe they are by definition both passionate about it and interested in learning in ways that occupational programmers simply are not.
Occupational Programmers need Productivity
Occupational programmers don’t have time to learn; they’ve got a real job to worry about. And occupational programmers often don’t care about learning the intricasies of programming at a professional level. Most importantly, occupational programmers don’t program frequently enough to transfer their learning from short to long term memory. Tellingly, Microsoft has a Coding4Fun website for hobbyists, but doesn’t have a Coding4Work website for occupational programmers!
Occupational Programmers need Discovery
Occupational programmers also need to be able to discover how to do things without lots of prerequisite knowledge. They need to be able to be highly productive every time the sit down to code. In that vein Microsoft’s “My” object is intuitive enough and addresses discovery.
Occupational Programmers need to Experiment
On the other hand, occupational programmers need to painlessly try things to see what works and not be distracted by lots of complexity. It is here where even Microsoft’s Express Editions fall short. They need a far simplier environment that allows them to type in a single line of code, highlight it, and then press a key to run it; no other prerequisites required. And if, for example, the code won’t run because of a missing reference the environment should pop up a suggestion based on an index of all available components on the user’s system, the occupational programmer should never be left trying to figure out where to go next to solve his problem.
In other words the occupational programmer needs a powerful interpreter but one that works more like SQL Query Analyzer than a command line interpreter. SQL Query Analyzer’s is it’s “canvas” that allows one to leave lots code lying around in various states of completion while it only executes the code that the user has currently highlighted.
Occupational Programmers need Progressive Disclosure
occupational programmers need Progressive Disclosure. They shouldn’t open up a development environment with numerous items competing for their attention. They shouldn’t have to worry about projects or properties or toolboxes, they should have a screen where they can start writing code and the equivalent of a (well designed) “Start” button and menu/wizard system.
Occupational Programmers need their Skills Grown
Additionally, the languages and tools used by occupational programmers should empower they to continually improve their skills without even trying, as they end up building significant systems over time. Some will even change careers to become full-time professional programmers eventually. If they are sandboxed with dead-end language and environment, think VBA or Visual Studio Tools for Applications, that’s no good either.
But Don’t Sandbox Occupational Programmers
And occupational programmers should be given the same languages professional developers use, but in a less-restrictive form; one potential example being a dynamic version of VB.NET with duck typing, etc. This is so professional developers can reuse and refactor the occupational programmer’s components and code. Occupational programmers have specialized knowledge that professional developers simply don’t have and putting them in two different sandboxes doesn’t make sense.
Focus on Languages and Frameworks, not GUI Tools
Further, the tool builders should focus on language and framework first, not the visual tools. Although this applies across the board for developer tools, it’s especially important to state related to occupational programmers because the tendancy is to just throw lots of GUI at less experienced developers, but that approach is fraught with peril (anyone remember Visual InterDev Design Time Controls?) I can acutally write a long post on this topic alone, and plan to, but suffice it to say that the focus should be on making it very easy to implement something in code using the language and the framework, and then create the visual tools to streamline this last.
Not Hard to Serve this HUGE Market
I believe there are tremendous number of occupational programmers out there whose needs are not being served and the irony is that I’m not proposing anything complex. On the contrary, Microsoft has partically all the technology it needs to build and ship the first version of what I’m envisioning within six months or less assuming a 3 to 5 person “SWAT team” that’s sheltered from politics (by 3 to 5 people I mean everyone; development, testing, documentation, marketing, etc.) It would be a tiny investment, and if it was released below the radar and sans Microsoft’s full hype machine it’s benefit to prospective users could be evaluated before they committing Microsoft to supporting any legacies it might create. And Microsoft could call this tool “Power Developer” (I chose that name because of PowerShell.)
There’s a lot more I could say on this issue (and I’ve said some of it in the past), but I’ll leave it at this and await your comments.
Other References
P.S. Here are some posts I made over 2.5 years ago on this and related subjects:
- Why .NET needs the (option of) less strictness (2004-March-19)
- Woe be it for the Hobbyist Programmer (2004-March-15)
- A Modest Proposal: VBScript.NET, aka “Helping Mort use .NET” (2004-March-11)
- Development Tools Need Transitionality (2004-March-10)
And these are some posts over people have made and/or posts with related comments, in no particular order:
- Reclaiming the Soul of VB
- Save the Hobbyist Programmer
- Many responses to Kathleen Dollard’s op-ed piece on Occupational (aka Hobbyist) programmers
- Thoughts on creating a .NET language targeted at “occupational” programmers
- Why do hobbyists matter?
- Article: In pursuit of perfection. New Year Resolutions for Java
- Windows Powershell: Encoding Operations Knowledge
- The Hobbyist Renaissance at Microsoft
I’m Available…
P.P.S. If any decision makers at Microsoft are listening but don’t currently have the right person on the inside to champion this idea, they should be aware that I am, at the time of this writing, available to help. :)
You’ve done a great job explaining exactly who Windows PowerShell is targeted to.
It would be helpful if you could articulate where you think we are falling short of meeting these needs.
Jeffrey Snover [MSFT]
Windows PowerShell/MMC Architect
Visit the Windows PowerShell Team blog at: http://blogs.msdn.com/PowerShell
Visit the Windows PowerShell ScriptCenter at: http://www.microsoft.com/technet/scriptcenter/hubs/msh.mspx
Hi Jeffrey,
Thanks for commenting. Serendipitously, I wrote about the issues with PowerShell meeting the needs of the Occupational Programmer just a few days ago:
http://www.mikeschinkel.com/blog/clarifyingmymicrosoftdeveloperdivisionrant/#powershell-061231
I’d love to know *your* thoughts on this once you read my comments.
> Doesn’t have a development environment,
Our IDE is the console and notepad. :-)
Seriously though, in V1 we focused on the interactive experience for all the reasons you mentioned above: discoverability, experimentation, iteration (ok you didn’t mention that but I’m sure you would agree with it). A number of good development environements are available from 3rd parties: Sapien’s PrimalScript 4.1, PowerShellIDE.com, PowerShellAnalyzer.com (modeled after SQL Query Analyzer).
> Can’t be used for web development,
There are 2 sides to Web development:
1) Consumption of web services which people are doing just fine today with PowerShell.
2) Creation of Web Services and applications. You can do this with PowerShell V1 but we’ve done a very poor job of documenting how as it was not a core scenario. We are committed to getting better samples and documentation out ASAP.
> Doesn’t have a compiler for creating components for use in other .NET languages.
True – we’ll be addressing that in an upcoming release. I think of this as being a good .NET citizen vs a critical requirement for Admins or Occupational Programmers. Do you concur or am I thinking about that wrong?
> Doesn’t have transitionality allowing it to scale up for much more complex projects as the developer’s experience grows
Could you say more about this – I didn’t understand what that means or what being good at it would look like.
Thanks!
Jeffrey Snover [MSFT]
Windows PowerShell/Aspen Architect
Visit the Windows PowerShell Team blog at: http://blogs.msdn.com/PowerShell
Visit the Windows PowerShell ScriptCenter at: http://www.microsoft.com/technet/scriptcenter/hubs/msh.mspx
Thanks again Jeffrey:
>>>> Doesn’t have a development environment,
>> Our IDE is the console and notepad. :-)
hehe.
>> Seriously though, in V1 we focused on the interactive experience for all the reasons you mentioned above: discoverability, experimentation, iteration (ok you didn’t mention that but I’m sure you would agree with it).
What do you mean by iteration? But you are right, I will probably agree. I’ve liked what I’ve seen from you (and your group) at lot thus far.
>> A number of good development environements are available from 3rd parties: Sapien’s PrimalScript 4.1, PowerShellIDE.com, PowerShellAnalyzer.com (modeled after SQL Query Analyzer).
Hmm. I wasn’t aware of the latter two, or that PrimalScript had PowerShell support. I will definitely check out the latter two.
When I was at Xtras, we actually resold PrimalScript so I’m well aware of it, but my contact there has moved on. At the moment I unfortunately have zero budget for software purchases for my own personal use. :-(
Now, why don’t you guys buy and/or hire one or more of those products/developers? Having it come from Microsoft is *essential* to get adoption, and without adoption you don’t get tons of blog posts or similar. Then I could get with my MSDN subscription… :)
>>>> Can’t be used for web development,
>> There are 2 sides to Web development:
>> 1) Consumption of web services which people are doing just fine today with PowerShell.
I was referring to building websites.
>>>> 2) Creation of Web Services and applications.
>> You can do this with PowerShell V1 but we’ve done a very poor job of documenting how as it was not a core scenario. We are committed to getting better samples and documentation out ASAP.
I would LOVE IT if you could build MVC websites like Ruby-on-Rails instead of ASP.NET (HOW I dislike ASP.NET…)
>>>> Doesn’t have a compiler for creating components for use in other .NET languages.
>>True – we’ll be addressing that in an upcoming release. I think of this as being a good .NET citizen vs a critical requirement for Admins or Occupational Programmers. Do you concur or am I thinking about that wrong?
I would seperate Admins from Occupational Programmers. For the former, I think you are right. For the latter, I think it is a requirement (though not critical in the first version, I’ll give you that. But soon.) For me, I know that if I focused on learning it I would be at a dead-end until a future version allowed me to create components with it.
As I see it PowerShell is optimized for Admins, not for Occupational Programmers (although most Windows Server admins I’ve known don’t think like programmers and don’t write scripts to automate things, they do things with GUIs. Which makes the focus on admins strange to me. Or maybe I was just unlucky in who I knew…)
But it sounds like you might want to headed in the right direction for Occupational Programmers too.
>>>> Doesn’t have transitionality allowing it
>>>> to scale up for much more complex projects
>>>> as the developer’s experience grows
>> Could you say more about this – I didn’t
>> understand what that means or what being
>> good at it would look like.
As for what transitionality means, read my 2004 writeup[1]. If you are really interested, look at all the articles[2] in that category (reading from bottom up.)
As for why PowerShell doesn’t have transitionality, well, um…, uh…, Well actually I wrote that because I remember that being my impression when I reviewed PowerShell but I don’t remember exactly why. Vaguely I seem to remember that PowerShell’s language design was optimized for the command line (which I think was stated explicitly in the docs, no?) and as such it wasn’t designed to have a features a professional developer would want. I’ll try to reread those docs soon and get back to you.
Further, AFAIK there are no professional developers currently using PowerShell to build mission critical apps or software for sale of significant scope which means it’s not been proven to be able to scale.
That said, of all the happenings at Microsoft, PowerShell has me feeling most hopeful…
[1] http://www.mikeschinkel.com/blog/developmenttoolsneedtransitionality/
[2] http://www.mikeschinkel.com/blog/category/Transitionality/
Hi Jeffrey:
I went back and re-read a document I printed off a while back called the "Windows PowerShell (PS) User Guide" (evidently it was an earlier version than [1], which I was able to find at [2] linked from [3]), and found several places where I though it implied that PowerShell was optimized more for command line use than real programming. When I first read it I developed an impression from those part that PowerShell was designed to work great for command-line use but not for building a serious applications.
After re-reading it, though I was able to identify two parts that gave me the impression that it wasn’t designed for building real apps I have to admit that the docs didn’t explicitly state that PowerShell wouldn’t be good for serious programming. And frankly, based on my re-reading, I now find it hard to argue that the docs made those statements strongly if at all. At best (worst?) I would now say that the User Guide I read might have given some people the wrong impression. But given that it’s no longer the current version, it probably doesn’t matter. For posterity, the specific parts that gave me concern are listed below:
==========================
p34-p35: Note two ~ mentions of "language for interactive use."
A NEW LANGUAGE
To take advantage of the new functionality that this shell presents, we have created a new language that creates the tools that enable a way to interact with the objects that are available from the system. We investigated a number of different options; whether to extend the current CMD.EXE syntax or to modify the current Visual Basic to better enable an interactive use. After looking at many different possibilities, we decided that a new language that was built from the ground up would be best because it would enable us to provide a more consistent environment. We were inspired by concepts in the UNIX shells; other scripting languages such as PERL, PHP, PYTHON and programming languages like C# to create a consistent, intuitive language that is an interactive environment.
p175: Note last sentance: "…rather than a … or ‘programming’ environment."
IT’S ALL ABOUT THE COMMAND LINE
We have made a number of decisions about the behavior of the language that might seem strange to those who are used to a more strictly typed environment. However, we wanted to be sure that we built an interactive environment first, and foremost, rather than a "scripting" or "programming" environment.
==========================
BTW, I noticed that you use the ActiveX object MSXML2.XMLHTTP to retrieve an RSS feed. HAVE YOU CONSIDERED making HTTP a first class feature, and more importantly, a URI/URL a first class data type? Both HTTP and URL/Is have so peremeated technology I would argue they should be elevated to first class features. For example, I’d love to be able to type (of course PowerShell might already allow this, but I’m wished for thise when programming in VBScript and VB.NET):
$url= http://wiki.welldesignedurls.org/PowerShell
I look forward to your reply.
[1] http://blogs.msdn.com/powershell/archive/2006/11/30/powershell-documentation-pack.aspx
[2] http://www.latenighthacking.com/archives/reference/PowerShellDocumentationPack_rc1/PowerShell%20User%20Guide.doc
[3] http://www.latenighthacking.com/archives/reference/
i love this post. it resonates to me alot.. I am the author of powershell analyzer.. you can check out a video demo runthrough at http://www.powershellanalyzer.com/demos . I a developer more than an admin, yet recently have gone into a role that is more admin, but still developing, more like an "occupational developer".. i Did this on purpose , so that i could understand the broad range of needs from network admins, system admins, application support, developers etc, in designing powershell analyzer. I love the powershell engine, it has such great potential for "instant gratification", and great reuse of components and what you learn. it just didn’t have good support for productively sculping your 1 or 2 liner, or 20 or 50 liner. One of the key concepts for me was something I call "developer fatique".. In my dev life there have been many many cases where i have though "oh i could make a program to do this or that, or automate this or that", but then the thought of the effort required made me back off, however with powershell and the productive interactive experience of powershell analyzer , on a daily basis i do that, creating and sculpting one liners to do almost everything i want, in the meantime building up a toolkit of reusable functions/cmdlets and techniques that make the next day even more productive.
This post is interesting. I enjoyed reading it! Nice work!