Today (or maybe tomorrow, depending on who you talk to) is the 25th anniversary of Borland’s introduction of the Delphi RAD environment for Object Pascal. Delphi changed my life as a programmer forever. It also changed my life as a book publisher for awhile. The Delphi Programming Explorer, a contrarian tutorial book I wrote with Jim Mischel and Don Taylor and published with Coriolis, was the company’s biggest seller in 1995. We did a number of other Delphi books, including a second edition of the Explorer for 32-bit Windows, Ray Konopka’s seminal Developing Custom Delphi 3 Components, and others, including Delphi 2 Multimedia Adventure Set, High Performance Delphi Programming, and the ill-fated and much-mocked Kick-Ass Delphi. We made money on those books. A lot of money, in fact, which helped us expand our book publishing program in the crucial years 1995-1998.
It took OOP to make Windows programming something other than miserable. I was interested in Windows programming from the outset, but didn’t even attempt it while it was a C monopoly that involved gigantic switch statements and horrendous resource files. With OOP, you don’t have to build that stuff. You inherit it, and build on it.
There is an asterisk to the above: Visual Basic had no OOP features in its early releases, and I did quite a bit of Windows BASIC work in it. Microsoft flew a team out to demo it at the PC Techniques offices in late 1990 or early 1991. A lot of Windows foolishness was exiled to its runtime P-code interpreter, and while a lot of people hate P-code, I was used to it from UCSD Pascal and its descendents. What actually threw me back in my chair during the Thunder demo (Thunder being VB’s codename) was the GUI builder. That was unlike anything I’d seen before. Microsoft bought the GUI builder from Tripod’s Alan Cooper, and it was a beautiful and almost entirely new thing. It was Visual Basic’s GUI builder that hammered home my conviction that visual software development was the future. Delphi based its GUI builder on OOP, to the extent that Delphi components were objects written within the VCL framework. I enjoyed VB, but it took Object Pascal within Delphi to make drag-and-drop Windows development object-oriented from top to bottom.
People who came to OOP for the first time with Delphi often think that Delphi was the first Borland compiler to support OOP. Not so: Turbo Pascal 5.5 introduced OOP for Pascal in 1989. Although I wasn’t working for Borland at the time, I was still in Scotts Valley writing documentation for them freelance. I wrote about two thirds of the Turbo Pascal OOP Guide, a slender book that introduced OOP ideas and Object Pascal specifics to Turbo Pascal 5.5 users. A little later I wrote a mortgage calculator product using BP7’s OOP features, especially a confounding but useful text-mode OOP framework called Turbo Vision. I licensed Mortgage Vision to a kioskware vendor, and in doing so anticipated today’s app market, where apps are low-cost but sold in large numbers. I cleared $17,000 on it, and heard from users as late as the mid-oughts. (Most were asking me when I was going to start selling a Windows version. I apologized but indicated I had gone on to other challenges.)
I mention all this history because, after 25 years, a lot of it has simply been forgotten. Granted, Delphi changed the shape of Windows development radically. It did not, however, come out of nowhere.
One of the wondrous things about Delphi development in the late 90s and early oughts (and to this day, as best I know) was the robust third-party market for Delphi VCL components. I used to wander around Torry’s Delphi Pages, marveling at what you could buy or simply download and plug into Delphi’s component palette. I have all of TurboPower’s Delphi VCL products and have made heavy use of them down the years. (They’re free now, in case you hadn’t heard. Some but not all have been ported to the Lazarus LCL framework.) I’ve also used Elevate’s DBISAM for simple database apps, and Raize Software’s DropMaster for drag-and-drop data transfers across the Windows desktop. Those are simply the ones I remember the best. There were many others.
I don’t use Delphi much anymore. I still have Delphi 7, and still use it now and then. The newer versions, no. It’s not because I don’t like the newer versions. It’s because what I do these days is teach “intro to programming” via books and seminars, and I can’t do that with a $1,000 product. Well, what about the Delphi Community Edition? I tried to install that in 2018. The binary installed fine. But the registration process is insanely complex, and failed for me three times for reasons I never understood. Sorry, but that kind of nonsense gets three strikes and it’s out. On the other hand, if I were actively developing software beyond teaching demos, I’d probably buy the current version of Delphi and go back to it. I’m willing to deal with a certain amount of registration kafeuthering, but I won’t put my students through it, especially when Lazarus and FreePascal can teach the essentials of programming just as well.
Nonetheless, Delphi kept me programming when I might otherwise have given it up for lack of time. It allowed me to focus on the heart of what I was doing, not on writing code for user interface elements and other mundane things that are mostly the same in all applications. Back when Delphi was still a beta product, Project Manager Gary Whizin called Delphi OOP programming “inheriting the wheel”. That’s where the magic is, and Delphi is strong magic indeed.
When I first saw the title of this article, “Delphi Turns 25”, appear in my RSS reader I immediately thought of Delphi the computer network. Then as I began to read the article it sunk in that the Delphi I remembered is approaching its 40th birthday. At one time back in the early 1980s I was on The Source, Compuserve, Delphi, and GTE Telemail. I eventually added AOL to the list, then Apple’s AppleLink and eWorld, and finally Apple’s Dot Mac, MobileMe, and iCloud. Of all of these email addresses spanning 40 years I now have just my Dot Mac (Me, iCloud) email address. Ah, the History of the Computer Age.
I was already angry at Borland’s upgrade pricing. I had been a faithful customer since Turbo 2, and then they were letting people “upgrade” from Microsoft products for less than they wanted from me?
Not no, but *hell* no; they never got another penny from me. The Dephi versions I used for were bought by employers.
I loved Delphi 1 once I got my head around how it worked. But the pricing of 2 was hard to take, and you had to pay even more for the add-ons to make it useful for what I wanted to do. And later versions were priced up into “you’ve got to be kidding” land. Even the employers balked at that.
I was also pretty upset over their Paradox product, where I kept running into bugs. Borland had all kinds of support paths, but they would only post the patches for bugs on Compuserve, which meant a CIS account and paying to download patches for a product I’d already paid plenty for… I went through that maybe five times; I couldn’t possibly have been the only person to run into them (mainly database corruption isues); Paradox looked really slick, but after a while I simply didn’t trust it any more; not enough to write software people depended on and that I had to support.
I never really found out what happened to Borland. They looked fine on the outside… until they just gave up and walked away, or at least that’s how it looked out in paying-customer-land.
Delphi 1 runs fine under Wine, and Delphi programs run seamlessly on my Linux desktop. How cool is that?
As cool as it comes. I assume the compiled executables run under Wine as well? I bought Crossover Linux some years back and found it very useful, and if Win10 gets under my skin too much in the next few years, I may end up doing mostly the same thing. If I upgrade my 2011 quadcore to a modern multicore system, it may not run Win7 for lack of drivers. That happened with my NUC machine.
What is also cool is compiling (lightly adapted) Delphi projects under Lazarus and then running them native on Linux. Or on the Raspberry Pi 4–which boggled me, given that the damned thing is almost too small to see, heh.
Yep, the executables run fine under Wine too. Delphi’s developers apparently stayed with just the basic documented Windows functions instead of haring off into undocumented-function-land, so the compiler and its output are some of the most well-behaved Windows applications you’re likely to see.
I really, *really* liked Lazarus… and then I got annoyed because I kept running into things that only worked on the Windows version. Hey, I understand, there are OS-dependent things that are nice to have, or common functions that programmers used to that OS will look for, so you provide them. No objection there. But they refused to document those cases in the help files, and every time I ran into a “bug” the response was “not implemented in Linux; it’s open source, so do it yourself.” That was simply wasting my time, and that of every other programmer who slammed into that wall.
I guess I should check it out again and see if things have changed.
Finishing the novel (which could happen in the next couple of days with any luck) has soaked up most of my energy for a year or so, but there’s an interesting fork of Lazarus that I’ve been itching to try in some detail for a couple of years: Code Typhon. I like docked UIs better than floating windows, but the really wild thing about CT is the huge collection of components that come preinstalled. I’m looking for a Lazarus database engine that compiles into the executable and doesn’t require a lot of fussy client-server installation/configuration. The BDE had its flaws, but it made teaching database fundamentals a snap. Such things exist; DBISAM was great, but they went to SAAS and I dropped it. I’n hoping somebody figures out a way to wrap SQLite in a component shell, and maybe if I ask for it on the forums someone will do it.
Hm. I may set it up in a VM and see what it looks like. The installation instructions for Linux stood up the hair on the back of my neck, though:
–snip–
If you use nano editor you can simply enter the following into the Terminal:
su
nano /etc/sudoers
Once you have the sudoers file open, add as last line:
user ALL = (ALL) NOPASSWD: ALL
–/snip–
No reason why it would be necessary in the first place, and no admonition to change it back when you’re done…
I realize I may be a little touchy on security stuff, but “WTF dude?!” comes to mind…
I guess I was lucky; I never ran into any problems with the BDE, though I admit I didn’t do anything really complicated. But some of the databases I loaded into it were so big we had to buy new hard drives to hold them.
And I admit, watching live data in the components in the edit window was coolness beyond words. Made troubleshooting orders of magnitude easier, too.
>I never really found out what happened to Borland. They looked fine on
>the outsideā¦ until they just gave up and walked away
In my opinion – the beginning of the end for Borland was when Microsoft poached Anders Hejlsberg and then the “quickening” of their decline was the release of .NET
I dunno, I was never impressed by .NET. Microsoft failed pretty hard at explaining what it was or why I should want it. Asking its advocates got wildly varying answers, half buzzword bingo, half pie in the sky. I *think* it was some enormous runtime library / “application framework” that was supposed to be portable across MS compilers, which would work because there was only going to be one compiler to rule them all, with ‘skins’ to look like C, BASIC, etc.
Nobody seemed to be sure, back then. But it was going to be wonderful…
By then I’d moved completely to Linux, and I admit to not caring much, other than to marvel that Microsoft was spending so much money to promote a product without ever themselves describing what it was…
I remember being gobsmacked when I found Anders Hejlsberg had defected to Microsoft. Hey, I can look that up now! [clickety] Here’s a take on that: https://www.cnet.com/news/microsoft-resistance-is-futile/
$1.5M signing bonus and $200K/yr was serious money in 1996… then they wasted him by putting him to work on some skeezy Java products. I suspect the established pecking order viewed him as an outsider and didn’t want him on anything important to them.
Heh – I do agree that Microsoft has always fallen prey to buzzword bingo and “marketechture” terminology. Trying to explain most of their offerings to people outside their ecosystem is difficult. Then, their constant re-naming… MSN Messenger… which then became “Windows Live Messenger”, whilst… on the corporate/’Enterprise’ side of things, they had “Office Communicator”, which begat “Lync”, then… they bought Skype – for it’s use-base and brand recognition, so they re-named “Office Communicator” to Skype for Business – and now they are replacing with Teams (Slack/Discord clone)…
Don’t even get me started on the history of OneDrive (‘for Business’) and their various ‘synchronization’ offerings.
Yeah – the defection of Anders was bad – IIRC, there was also a court-battle over their headhunting tactics… At one point they would send cars/limo’s to pickup candidates from their workplace to bring them for interviews elsewhere…
While I don’t think the introduction of .NET is what technically killed Borland (as .NET took awhile to gain momentum) – it was the beginning of the end – and other vendors, like Borland got suckered into making .NET tooling (C# Builder…) – that was dependent on an API platform/runtime fully controlled by a competitor. – at a point-in-time where there was no other viable runtime like ‘Mono’.
I worked from 2001-2012 at a company with a small division that did Delphi. I started with Delphi 4 and we later officially upgraded to Delphi 7. We were doing near real-time projects in an industrial environment.
What broke it for us is that a lot of the code was directly based on legacy Turbo Pascal for DOS, before my time there. When Borland/Inprise changed the base definition of String we couldn’t move on to Delphi 10.
There was too much really bad code design from the 90’s to effectively just change to the new definition. Starting over would be great but the library rewrite was too large of a task.
The upgrade & support charges were also a killer for our small department. In 2012 the division was closed after a merger of the main business with another company.
At my new company I moved on to Visual Studio and C#, rewriting some of the old projects with lessons learned from the past.
Wow… Trip down memory lane… Man, I loved Delphi… True OOP, in version “1”, while VB3 was still component-composition.
It was the only product I was able to create and self-publish true commercial quality software for Windows…
You want a Windows screensaver, deployed via a single .SCR file with no runtime dependencies? No problem, Delphi!
You want a kiosk solution, that interacts with hardware for payment, a dial-up modem and runs as a Windows service AND controls the available GUI of an embedded webbrowser component? No problem, Delphi!
You want a database reporting solution that would allow end-users to customize their reports via a GUI, yet also have more features and cost less than Crystal Reports with Visual Basic? There was not one, but multiple commercial reporting engines available – at a lower price than Crystal…
Oh – you need to drop-down to a very low-level Windows API, that requires the ability to use pointers and access memory blocks directly (memory-mapped files?)… heh, try doing that in Visual Basic…
The sheer number of quality commercial and open-source VCL components was amazing…
Delphi made things powerful, fun and fast.
> I was still in Scotts Valley writing documentation for them freelance. I was still in Scotts Valley writing documentation for them freelance.
—
I made an entry into my “quotes” file long ago:
“…in order to understand the solution you must first understand the problem.”
— Borland Pascal 6.0 User’s Guide, page 93
Your name popped into my mind as soon as I saw that; was that you?
No, but that’s an important element of my software design philosophy. It’s so fundamental to the whole concept of programming that I’m poleaxed at having worked with people who thought all problems could be pounded into boilerplate solutions that only needed a little tweaking. That Way Lies Madeness.
I wrote the bulk of the OOP Guide that came with TP 5.5, and that was the beginning and end of my contribution to Borland’s doc. I might have done more, but in October of ’89 we shifted into high gear on creating The Coriolis Group, and my energy and attention were elsewhere. We left California in early February 1990, which means The Coriolis Group is now basically 30 years old. Egad, how could that be??!?
It’s obvious to you because you’re a linear thinker. Each step is connected to the previous and following steps, moving in a logical progression. “What is it doing? How can I make it do it again? What are the steps it would take to make it do that?”
I’ve worked with people, not just in the software or admin fields, who don’t think that way. They have the knowledge, they just don’t think to apply it the way you do. Those are the kind of techs checklists are made for.
Lately I’ve had some encounters with the healthcare industry. Yes, I understand the realities of insurance coding, HIPAA recordkeeping, and the difference between “best practice” and “liability”, but waayyy too many of these guys appear to be little more than sock puppets for the testing labs. If the lab doesn’t come back with “here it is!”, their only action is just to move you to the next seat on the referral-go-round.
I’m disgusted; my GP’s opinion is incinidiary…
Honestly, if anyone at Embarcadero can read that Jeff Duntemann was unable to install Delphi and not be deeply ashamed, then there’s no hope for their souls.
I used the Community Edition for a while and it got me back into using Delphi for a bit, just on a couple of simple projects. Lately I’m doing work for a company that has upgraded all the way to 10.2 from Delphi 6 and before that Turbo Pascal. The whole change to how strings work has also been a hassle that we’re yet to fully deal with.
It’s sad how many ugly bugs from 1995 are still there in 2020: the useless help system, the flaky code completion, the 1960s-era case statement, the TERRIBLY IMPORTANT distinction in the VCL palette between Windows 3.1 and Windows 95 components, the stupid way units are located on the search path… It’s a classic example of the fear of fixing your past mistakes that forces many more users to live with them. Eric Lippert wrote recently (27 Feb 2020) about “Hundred Year Mistakes”; this is a good demonstration of that.
Meanwhile, Marco Cantu’s blog has some stuff reposted from Chuck Jazdzewski about the early design decisions of Delphi. It’s a nice trip down memory lane, and it name drops you, Jeff!
Yes, saw that. It was a catch-phrase of mine for awhile back in the late 80s and early 90s: You put the front door on the second floor. The learning curve on Turbo Vision was diabolical, but I cracked it, and made $16,000 USD selling my mortgage calculator for a few years. There’s actually a clone of sorts bundled with FreePascal, but I’ve never tried it and probably don’t consider it worth the time to learn. The days of text screens are long, long gone.
The problem was not installing the product. Delphi installed just fine. It was the activation system that kept spitting me out. I understand the need, but stuff like that needs to be absolutely bulletproof, lest new customers and tire-kickers come away with a bad impression of the product.