Windows Development
General development
"What do you say to people when they say that programming is not demanding?
Ask them if writing a small 100 page novel in English without a single spelling or grammatical error is mentally demanding.
Further explain to them that this novel is actually someone else's story that you have to write as they explain it to you.
That person only speaks Chinese (luckily you are bilingual), so you have to translate it from Chinese to English as you go.
Then to top it off, the person isn't exactly sure what the story they want is, so they can only help you get it right by informing you when you have done it wrong from their vague descriptions.
You have to complete this in 3 days.
Now is it demanding? "
- Dan McGrath
Windows Development
Most standard software applications for MS Windows (like MS Office, Internet Explorer, Firefox etc) use a combination of
C/C++ as the programming language, MFC/QT/wxWidgets as the framework and Win32 as the bottom layer in Windows (organizations often use C# and .Net for internal development).
The C/C++ language is a very powerful and complex language, and most programmers only use a subset of it. C++ is a multi-paradigm, general-purpose programming language. This means that it can be used for both low-level (drivers, OS) and high-level (applications) development, and you can choose between procedural, object-oriented and generics style programming.
Similarly, each of the wrapper libraries MFC, QT and wxWidgets are very powerful and very complex, and most programmers only know a subset of one of them. The wrapper libraries also evolve differently, and you cannot change from one library to another.
This means that choosing a library "locks you in" for the future, and you cannot control any changes to the library.
In contrast to the wrapper libraries, the Windows API (Win32) is a very stable foundation which is designed to be backwards-compatible. This means that even when Windows and the Windows API evolve, most programs will continue to work without changes (a program can run on Windows 95, 98, XP, Vista and Windows 7 with minor/no changes if programmed correctly).
Ideally, the MFC/QT/wxWidgets wrapper libraries should make programming against the Win32 API easier, but the complexity of each library and the big difference between each library often increases complexity instead of reducing it.
The programming language should make the wrapper libraries easier to use, but the complexity of C++ often makes even the most basic tasks difficult.
"If you think C++ is not overly complicated, just what is a protected abstract virtual base pure virtual private destructor and when was the last time you needed one?"
- Tom Cargill, C++ Journal, Fall 1990
PpcSoft iKnow development
PpcSoft focused on development for Windows Mobile devices in the early days, and this limited the number of available frameworks. Win32 was the only dependable framework as others were "work-in-progress" on Mobile (if available at all).
Interacting with the Win32 framework directly is possible, but very cumbersome, so it was decided that a small wrapper library named "AI Framework" should be developed for easier and faster future development.
As most other companies, PpcSoft only uses a subset of C++, but with a few unique features resulting in a language we nicknamed C* (C star) to simplify documentation.
The goal of both C* and the AI Framework is to reduce complexity and make the programming easier and more productive.
External links
- The Law of Leaky Abstractions (Joel On Software)
- Good software takes ten years. Get used to it. (Joel On Software)
- How many Microsoft employees does it take to change a lightbulb? (fun)