- 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…
Defining “Occupational Programmer“
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.
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
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. :)