Microsoft's first great developer might have been Charles Simonyi. The mission of his new company, Intentional Software, is to destroy the disconnect that exists between domain experts and software developers:
You are tackling the software development bottleneck problem. Can you elaborate on the problem and how you plan to solve it?
The goal is to do something about the bottleneck, to analyze the systemic problem and redeploy the resources in a way that helps resolve the problem. Tools have to be involved--that's the business proposition for our company--but they have to operate in a new relationship between subject matter experts and the programmers.
Currently, the key element to a killer app is what the application does for people. In health care, for example, helping doctors with patient care is a tremendous opportunity. You need subject matter experts, like doctors and health care administrators, who understand the issues of their domain. The biggest problem is that what a subject matter expert is trying to accomplish is not expressed in the code. The code is really the first truly precise description of the problem. The intent of the subject matter expert, however, is not apparent in the code."
Software to cut the digital fat
In response to a request for a 'cheat-sheet' on Hungarian Notation, I wrote the following email to a couple of the younger developers with whom I work. The last paragraph is the 'inside joke' given the proclivity of modern academia to stress Java as the de rigeur programming language.
> > RECOMMENDATIONS for HUNGARIAN NOTATION
> > The following are some common recommended Hungarian Notation prefixes for variables defined in MFC projects:
> > BOOL bFinished;
> > BYTE byteLastProcessed;
> > BYTE* pbyteLastProcessed;
> > CHAR cFirst;
> > CHAR (null-terminated) szCommandBuffer;
> > CHAR* (null-terminated) pszCommandBuffer;
> > CByteArray cbaExplodedValues;
> > CByteArray* pcbaExplodedValues;
> > CCriticalSection ccsArrayProtector;
> > CButton* pButton;
> > CDocument* pDoc;
> > CEdit m_edtLogWindow;
> > CEdit* pedtLogWindow;
> > CFile cfileLog;
> > CListCtrl m_lcDevices;
> > CListCtrl* plcDevices;
> > CMapStringToString mapCommandLookup;
> > CMapStringToString* pmapCommandLookup;
> > CPropertyPage m_pageConfigurationOptions;
> > CPropertySheet m_sheetSetup;
> > CString strPrefix;
> > CString* pstrPrefix;
> > CStringArray csaCommands;
> > CStringArray* pcsaCommands;
> > CWnd* pwndParent;
> > DWORD dwValueCount;
> > DWORD* pdwValueCount;
> > HANDLE hBitmap;
> > HDC hdc;
> > HICON hiconMaster;
> > HWND hwndParent;
> > INT nRangeBegin;
> > INT* pnRangeBegin;
> > LONG lTemp;
> > RECT rectClient;
> > I hereby waive all royalties due me for use of these prefixes provided that users acknowledge that the one true hierarchy of programming languages is as follows: "C/C++, PHP, Assembler, Pascal, Perl, FORTRAN, Smalltalk, LISP, Java, Visual Basic, BASIC, ADA, PL/I, COBOL". Users will also acknowledge that C# was recently named "Rookie of the Year", but is - as yet - unranked.
More on C. Simonyi
JOS had a link to a wonderful interview with Mr. Simonyi. Some excellent quotes:
On the Beauty of a Program
I'll bet you that from ten feet away I can tell if a program is bad. I might not guarantee that it is good, but if it looks bad from ten feet, I can guarantee you that it wasn't written with care. And if it wasn't written with care, it's probably not beautiful in the logical sense.
On Hungarian Notation
So if you have a structure with certain properties, instead of giving it some arbitrary name and then having everybody learn the association between the name and the properties, you use the properties themselves as the name. This method has a lot of advantages. First, it's very easy to create a name--as you think of the properties, you write them down and immediately have the name. Second, it is very understandable, because as you read something you learn a lot about the properties from the name. As these properties get more and more numerous, it becomes difficult to describe them concisely. So "Hungarian" introduces some abbreviated notation to encode the properties in a short space. Of course this is a complete jumble to the uninitiated, and that's the joke.
Interview with Charles Simonyi