I was going to write this a as a comment on Grant’s blog post, but it ended up being way too long.
In Grant’s post, he makes the indisputable point that within an organisation, regardless of each individual’s specialisation, be it sysadmin, dba, developer, SAN admin, or even “devops”, each of them share a common focus on helping the business serve its customers, defined in the widest sense.
Taking a step back, there’s another way in which all of these technical specialisations have something in common.
It’s easy enough for “real developers” to be dismissive of the “point-and-click” brigade, whether this refers to the system administrators, the SharePoint consultants, or the Access developers. Thinking more abstractly though, if a system admininstrator uses the “metro” Server Manager to add a server to a domain, all that is really going on is that he is instructing the “system” – considered abstractly – to behave in a certain way. Unlike in a “real” programming language, these instructions are expressed through a sequence of clicks, rather than through a sequence of statements, expressions, and operators, compiled into a file to be placed in position (by “devops”?)
Consider the Scratch tool for creating simple games. Massively simplifying, this allows a child (or adult!) to drag and drop pre-defined elements to assemble a simple computer game. Now, the server that hosts Scratch has a way of persisting these clicks so that the game can be played in a repeatable fashion, just like Active Directory has a way of persisting the clicks in Server Manager so that the “system” responds in a repeatable fashion. No-one would deny that Scratch is “programming”, but somehow this conceptual leap is further in the case of Server Manager.
What Scratch and Server Manager have in common is that they are both high-level abstractions, and like many high level abstractions, are designed to suit a fairly specific purpose. They suffer from many of the problems of high-level abstractions, such as the difficulty of collaborative “development”, not least because of the problems with source control (VBA, anyone?), and their lack of adaptability to tasks outside a specific purpose.
Another example of such an abstraction is Transact-SQL, of course, which is great for database access but has far fewer capabilities outside the database than COBOL, for instance, which is a much lower level of abstraction.
In the case of Server Manager, for example, the tool can’t be adapted to configure a Sharepoint site, you need to use a different tool:
Again, we create our “program” for Sharepoint through a series of clicks, and the result of these clicks is magically persisted somehow.
If we switch to a lower level of abstraction, such as Powershell, then we can use this single tool to do both of the tasks above, and probably do them quicker to boot. Instead of clicking, we create a “special” file, (our .ps1 file) and put it in a folder somewhere and ask the system to do something with it. Again, this result is magically persisted. From the perspective of the user, of course, a Sharepoint site configured using Central Admin is exactly the same as one configured using Powershell. We could equally use C# to do any of the tasks above, as well as a bunch of other stuff that is beyond the remit of Powershell.
Powershell is of course an abstraction itself, of the .NET framework, which itself abstracts the Windows API, etc. etc. The difference is that real programmers do their pointing and clicking by placing special files that they make with “compilers”, or placing scripts in special places so they can be converted into such special files.
So, in terms of the end result, all of the above activities can be considered “programming”, it’s just that they operate at different levels of abstraction; it’s not until you meet a guy with a soldering iron that you have got to the end of the abstractions. All the activites are directed at making a “system” respond to “input” in a certain way, and presumably this behaviour is defined by a “customer” of some description.
So what is this if it’s not “programming”?