Windows 1.0 and the Applications of Tomorrow (2005)
charlespetzold.com
charlespetzold.com
Seeing how similar the Windows 1.0 API was to the current Windows APi for desktop apps, I'm actually sad that Microsoft decided to (mostly) abandon that legacy for the new "modern" Windows apps under Windows 8 and Windows Phone 8.1. There's no reason why the classic Windows API couldn't have been adapted for these new-style immersive apps running inside sandboxed containers. But I guess the Windows API gained too much of a reputation for being old, crufty, ugly, and unapproachable for new developers; that's certainly how I saw it when I got my first copy of Visual C++ in 1998. But now I wish Microsoft hadn't responded to that perception by abandoning that API, which has now evolved for decades.
Did this insane focus on backwards compatibility hurt Microsoft? I don't think you can conclusively say. Did it hurt me as a former Windows developer? Only at best tangentially; all the backwards compatibility crap is pretty abstracted from you if you hang out in .NET land. (Except when it isn't.[1]) And at any rate, I don't think the bleed-through is noticeably worse than e.g. POSIX intrinsics showing up in OS X. But I think the argument that the engineering required to ensure Windows maintained such a strong backwards compatible stance ate out of resources that could've kept Windows more up-to-date has a point.
[1]: http://bitquabit.com/post/zombie-operating-systems-and-aspne...
Well, we seem to have overcome that worry. I think most programmers of that vintage must be horrified by the amount of bloat in modern computer systems. I gave up worrying about not knowing what every file in my operating system does several years ago, but I still feel bad about throwing in the towel.
I guess it's like being someone that used fix their own care and tune the engine etc., only to have modern vehicles increasingly turn into black boxes that require more and more specialized equipment. I don't love such troubleshooting enough to want to make it my full-time occupation, so I suppose it's an inevitable one-way street.
Compare to my first PC which did 800x600@8bit.
May the best fork win.
Having gone through a few cycles in language changes, I look forward to the day C is drinking its retirement tea together with PL/I, and the industry finally understood the path taken by the Algol/Mesa/Cedar languages for memory safe systems programming.
It might take a few generations, but it will happen.
The same way it did to many of my fellow developers that saw C and Pascal dialects as high level bloat.
On other ones, it will eventually change. Microsoft already killed C on their tooling[0], although it lives on as C++ subset.
Then we have things like MirageOS happening.
On any case I wasn't talking about near future. After all, there are still PL/I systems out there.
[0] Current decision, might of course change, as all decisions.
Yes, I do like it. Specially given that WinRT builds on the original idea of .NET (COM based native programming), before they went MSIL. It is like Microsoft just recovered the Ext-VOS project before their Java love.
http://blogs.msdn.com/b/dsyme/archive/2012/07/05/more-c-net-...
I do consultancy for Fortune 500 companies and at least for the next decades, it will surely be around.
> What should we write for the desktop now? Which desktop is "the desktop"?
What we always did. Make use of the native languages and frameworks to provide the best user experience.
What language is the .NET infrastructure in?
I don't think Microsoft has ever produced any self-hosting language except C/C++. Until that fact changes, C/C++ will still be around.
C++, C#, VB.NET and F#
> What language is the .NET infrastructure in?
C++, C#, VB.NET and F#
> I don't think Microsoft has ever produced any self-hosting language except C/C++. Until that fact changes, C/C++ will still be around.
QuickBasic, QuickPascal
You don't need C and C++ to bootstrap a compiler. Ever.
I only started to use C for real when I started to work with Xenix.
EDIT: This myth that one needs C or C++ to write compilers needs to fade away.
EDIT2: C# 6 and VB.NET 6 are self-hosting, and while .NET Native plugs into VC++ backend, they can eventually choose another backend.
https://github.com/fsharp/fsharp & https://roslyn.codeplex.com/
I just recently debated a colleague on the merits of AltJS languages. He's of the opinion that Javascript is all we need and is happy to be a "Javascript assembly programmer" for the foreseeable (and perhaps unforeseeable) future.
There is a significant difference between the asm/C jump and the C/managed jump though- even though early C compilers had a performance penalty, the C language semantics are very amenable to optimization and the cases where you could do better in asm are pretty rare.
Your typical dynamically typed, garbage collected scripting language, on the other hand, is not very nice to optimize. It may be "good enough," but there's plenty of good reasons people still start new projects in C++, and there's a reason for the recent resurgence of more static languages like Go, Julia, Swift, Rust, etc.
I've been writing apps for computers since 1978, and I'm seriously horrified by bloat. It appears to be an unstoppable force, however, so these days I'm mostly interested in ways to harness bloat. I believe this is also a principle activity of my peers.
Visual Studio, C#, Mono .. these are all big harnesses, keeping the resources tied to the rock.
I'm not. I don't miss the days of manually copying data from the floppy drive buffer into the screen device, or word processors writing out bitmaps to print heads.
Some people see bloat. I see not having to care if a file-like object is coming from my hard drive, a URL retrieved via HTTP, a network filesystem, or an in-process fake file generator because they all look exactly the same to the apps I'm writing.
Abstraction is inherently expensive. If you want to support printer A and printer B, the common driver interface has to support the union of both their featuresets. A's driver will be bigger than it has to be because it has to handle stub calls for B's functions. Know what? Having lived the alternative, I have zero desire to ever go back.
EDIT: Pondering this is enough to make me regret that I perpetuated the cycle by buying a newer, faster PC a year ago. It seems to me that the upgrade treadmill and the accompanying waste will only stop if we software developers deliberately develop and test our software on underpowered machines.
The entire web is still client/server. Web apps? Client / server. Databases? Client / server. Just because more apps now insist on having a server to store data instead of making use of the microcomputer that they're running on doesn't change the fact that the last 25 years has been a reinvention of the same concepts again and again.
And even when "Rich Internet Applications" was the craze of the 90s, that was still just client/server, the concept that 70s mainframes had been coping with - they were servers and served clients.
Sure, there are loads more programming languages now instead of the choice of C and C++ (and maybe Delphi?) for Windows in the 1990s but underneath it is still doing the same. Apart from now we have intermediate virtual machines and CLRs to intercede, perhaps unnecessarily?
A 2007 iPhone with similar specs could do all that just fine. Probably the biggest difference is what we ask of our systems. I'm typing this into one of eight browser tabs, each running some JavaScripty thing or another. I'm also running an end-to-end test suite of the software I'm working on today, and that suite hits PostgreSQL, Mongo, Redis, and some other stuff all running on the same laptop. There are a bunch of Internet-connected apps doing their own thing in the background - polling Twitter, listening to Hipchat conversations, and downloading a playlist from my iTunes Match account. And through all this, I have an instantly-reactive, shiny desktop with drop shadows and transparency in quite a few spots.
Maybe the difference is that we expect our computers to wrap around our needs now and not vice-versa. It's been years since I quit one app so that I could run another, and I'd upgrade my laptop in a heartbeat if running that test suite made other stuff sluggish. I effectively don't have to care about my machines limitations anymore and I like it that way.
Of course, the big differences from 1999 is that I'm also sitting in front of 3840x1080 pixels. Something that my previous computer from 6 years ago couldn't handle adequately. I have a game open in a window that uses 23GB of harddrive space -- and it's totally worth it! I have 60 browser tabs open and any one of them could be play HD video in real time from the Internet (In 1999, HD wasn't even a real thing yet). It's never been easier to write software or create any sort of media content. It's not bloat -- we're making use of the power that we have. Anything less than 100% utilization is a waste.
You could pick tech in no time at all to build something. Then devdiv went batshit and started spewing frameworks galore. Now we have runtime hell and not a soul knows where to start.
I occasionally use an NT4 VM and it makes me sad that such a clean OS has turned into a bloated pile of crap.
Back in the day, I spent weeks writing a basic DOS-based windowing framework for one of my applications. Today, an equivalent (well, vastly more powerful) framework comes out of the box with 3 clicks of the "create a new app" wizard on just about every platform out there.
I also spent weeks, if not months, fine-tuning my apps so that they would run at a sensible speed on the hardware we had, would fit into the 500K or so of RAM that was available, and would pretty much never crash as issuing a patch involved me manually copying hundreds of floppy disks and posting them to clients.
Modern hardware/OSs/languages may be far less efficient in their use of CPU/memory etc, but they allow me to be far more efficient in the use of my time to deliver actual functionality to users.
That was only a 20 year old computer at that point. I can play media from 50 years ago easily. I'd argue that software are more appliances (they do things) than media, and appliances from 20, 30, 40 years ago are still serviceable and working.
Yet we are amazed when a Raspberry PI can serve web pages, despite the fact that it's many factors of more powerful than many circa-1998 web servers.
The past was full of a lot more paging to disk and it was awful. I mean, sure, things haven't progressed as much as they could I suppose, but I also don't know the last time I had to wait 5-10 minutes for a computer to shut down.
That's the kind of stuff I'm talking about. A Text Messaging app shouldn't have perceivable load time. My phone shouldn't freeze doing a transition between desktops. Computer desktops shouldn't take time to open up a menu.
We've come a long way, and have tons more raw performance, but I just feel that we squander it on things that don't add any value.
Those sounds just went through my head. That noise hurts just to think about.
but I also don't know the last time I had to wait 5-10 minutes for a computer to shut down.
Windows 7 seems to take 5 minutes to shut down, even if I give it a head-start by explicitly closing all applications I can see or understand.
There are 137 "processes" and over 200 "services" running right now on the Windows 7 machine I am at. I can't watch them go away when I shut down, because if I leave the task manager running, Windows 7 complains about the Task Manager still running when I want to shut down.
There are many things that are much better today, but it seems that some things are getting worse.
I've recently managed to get an ubuntu server to boot as quickly (with preconfigured network interfaces and a few other things), but for years I could find the magic combination that would boot a usable system that quickly.
And I haven't seen a Windows machine that boots to usable state in less than 15 seconds (SSD, 30 seconds on magnetic hard drive) in a long time. "Usable" means you double click on something and it responds, btw - not that it shows the desktop.
How small were desks back then, not having room for a mouse?
>> Well, with Windows, for the most part the mouse is optional. I won’t be using a mouse at all during this demonstration.
I remember feeling 'cool' that I could use a Windows machine from only the keyboard back in the 90's.
People then still did lots of paperwork and needed space for other things. Of course they didn't have space for a mouse yet.
It probably helped that I played RTS and FPS for years, lol.
http://en.m.wikipedia.org/wiki/File:Bundesarchiv_B_145_Bild-... shows a desk that is way larger than the typical desk one had at home, with its separate tray for the keyboard.
Even if you had such a desk, that tray doesn't have room for a mouse.
Edit: also, mice were terribly unresponsive. You had to move the mouse for decimeters to get from one edge of the screen to the other, even if that screen had only 640 pixels.
Desks weren't necessarily small, but the amount of paper, paper handling and organizing equipment on the typical office desk was unbelievable to the modern office worker.
http://www.devoncornwallexecutive.co.uk/wp-content/uploads/2...
http://www.bbc.co.uk/northyorkshire/content/images/2008/06/2...
http://www.sundaynightimprov.com/files/images/Tom2.preview.i...
Actually, if you want to see a modern version of this, the Japanese have kept the paper office alive and well.
http://www.accountant-tokyo.com/wp-content/uploads/2014/04/J...
It does look neater, and it's the only enforceable equilibrium given the variety of approaches people take to tidiness. But I'd never made the connection, that it may be a form of signalling - our company is modern and doesn't need all the gubbins to process paper.
Can't remember exactly what it was, but this was Ireland in mid 1980s and the hardware was already pretty creaky so some low end model from the 1970s. Print jobs were formatted by placing a loop of punched paper tape on two sprocket wheels before sending the job request to the mainframe, and offline storage was to giant vertically-mounted spinning tapes. Our department's prize possession was a 286 with a 10mb hard disk, which was what I learned DOS on. I got told off for installing Desqview without permission XD
Having recently switched to Linux, I've been astonished that some X applications seem to require the use of a mouse, and that many graphical environments don't have default keyboard shortcuts assigned to certain tasks. At least it's much easier to create and redefine shortcuts, and you can always open a terminal and type in the full commands as needed.
This is one of the things that's very annoying about applications that hide the menubar or lack a menubar entirely. Cycling through menubar options with a keyboard is far, far more efficient than attempting to use a keyboard with many of the poorly-thought-out experimental UIs that seem to be increasingly prevalent.
I would agree that X / Linux applications fail in this respect.
Also, Mac OSX by default will only tab between certain UI elements, and the option to force it to tab between all UI elements cannot be reached with the keyboard only, meaning if you start up without a mouse you can't turn on the relevant option to use it with a keyboard, with a keyboard...........