By: Clay Shannon
Abstract: OOP guru Bruce Eckel talks about his initial skepticism about C# (but now calls it "a better Java"), wishes Borland would create a Python IDE, explains why he's suspicious of Mono, and asks us to click the wombat.
Bruce, as the author of many popular books on those subjects, you are a well-known OOP, Java, Python, and C++ guru. Has OOP now reached the acceptance level and garnered the respect you hoped for when it was first designed? Do you see even more shops implementing OOP methodology in the future, or will some other methodology or paradigm steal OOP's thunder?
From my perspective OOP has reached mainstream acceptance. It seems like everyone has had enough collective experience to consider it part of the foundation of programming and not an odd offshoot. That said, keep in mind that I typically only hear from people that are interested in OOP, so for all I know the majority of the world is using Fortran, COBOL, C and Perl and has no interest in OOP.
Did you experience an "aha!" moment when you first really grokked OOP? What methodology were you using prior to that--structured?
I did study structured programming methods and languages, but I started as an computer engineer and embedded system programmer, so I have a fair amount of experience with assembly language as well. You can find a more detailed history of my programming experience http://mindview.net/WebLog/log-0030 here. I have experienced many "aha" moments, each one usually causing a correction to what I thought I knew before. The first time I understood polymorphism, I thought that's what OOP was all about, and went around looking for ways to understand polymorphism. Generics threw me for a long time until I began to understand weak typing. The Design Patterns book says that you should "prefer composition to inheritance," which was a giant step sideways -- understanding that polymorphism was a tool, but that the real goal was simple composition. Many of the design patterns have given me a deeper understanding. I'm still grasping things like metaclasses, aspects, closures, functional programming, and the comparison and contrasting of languages and features. So it's many "aha" moments, many of which erase or modify previous "aha"s. It seems like it will be enough to keep me entertained for a very long time.
You wrote "The Tao of Objects: A Beginner's Guide to Object-Oriented Programming" with Gary Entsminger. Will that book ever be updated (it has examples in Delphi, and Delphi has grown up a lot since that book came out).
Not that book per se -- it's really Gary's project and he has been working on other things lately. However, I am working on a new book that I think will do something similar. I've put it off for years, but I can finally see a way to do it right. I probably won't say anything more about it until I have something to show, but I feel pretty good about the project.
Your books (such as "Thinking in Java", "Thinking in Python" and "Thinking in C++" have been very well received. Which Java and C++ IDEs did you use when writing those books?
My goal for those books was to teach those languages and not custom libraries or IDEs, and as a result I didn't use anything -- a plain text editor. I would have had to edit the results of code generation anyway, so it was cleaner to do it by hand.
I will say that the IDEs I would have used would be Borland C++ Builder for C++ (which arrived too late, unfortunately), especially for anything under Windows (MFC, as most will admit, was an abomination). We still test all our C++ code on the free C++ Builder download. For Java, keep in mind that I am mostly doing text coding, not GUI building. I did all the programming with a text editor, but at one point started using IntelliJ Idea. I grew a bit frustrated with that for various reasons and also it wasn't something we could expect everyone to buy, so when IBM's Eclipse started appearing I moved to that for bigger projects, but I still primarily use a plain text editor. Primitive as it may sound, it's the least common denominator and therefore accessible to everyone.
Do you think Borland should develop a Python IDE?
I think they could create something I like a lot. Projects like Boa Constructor have made steps in this direction, but just because Python is free doesn't mean people wouldn't pay Borland for something really stellar. C#/.NET is free (or at least free-ish), but people pay for development environments for that.
Also, Borland could add some killer support, such as seamless integration between Python and C++ (which is much better now with Boost.python, but still...).
If they came up with something that did work for me, I'd certainly pay for it, and promote it to others. One of my main goals is leveraging productivity (the reason I like Python in the first place), and I believe that any time you can increase someone's productivity they'll pay for it.
What do you think of JBuilder compared with other Java IDEs?
The biggest problem I had with JBuilder was that I was expecting it to work like Delphi or C++ Builder, so I was expecting to be able to start building a GUI right away. When I was told that it was really easy and that all I had to do was go through this sequence of steps, I lost track and interest in trying to build a GUI that way. However, I think the code-editing portion of JBuilder is quite nice, and I like the approach of giving away the basic free version.
Perhaps its an age thing -- I've seen so many products over the years, all of them claiming to be the next great thing. I've also gotten attached to some of them, and then they started stumbling or not fixing bugs or having interminable delays between updates (IntelliJ went through a phase like this which is where they lost my confidence). You get to the point where you don't want to learn a new tool every other week, so the first time a problem shows up you drop the product, since from experience it's more likely that there will be more problems coming -- the product escaped the way that it did, so there's probably some management problem that may or may not get fixed, and I don't want to be put through the wringer while that's going on. So these days, I don't get on board with certain types of products unless it appears that they are going to maintain a long-term direction on the path where I want to tread (Python is an excellent example of this). I definitely like the direction that Eclipse, JBuilder and IntelliJ are going, and I've been a Borland fan from way, way back to Turbo Pascal (my very first book was "Computer Interfacing with Pascal and C," which used Turbo Pascal), so I'm glad to see the fandom that JBuilder has.
What do you think of C++ Builder compared with other C++ IDEs?
For building C++ GUI apps under Windows, I don't know of anything else I would use. The problem is that most apps that I create are more quickly made with Python than with C++ or Java, so its very hard to justify creating a full app in C++ anymore. In addition, I try to create things that are cross-platform.
Do you have any other books in the works?
Certainly. Some are longer term than others. Chuck Allison and I are now finishing "Thinking in C++, Volume 2," which has been a long time coming. It deals with more advanced issues in C++ and it covers topics that I don't think you'll see treated anywhere else. I'm getting started now on the book on Objects mentioned previously, and I've been working for a long time on "Thinking in Patterns," which is in Java, and I've made a pass at a translation of that book into "Thinking in Python: Design Patterns & Problem-Solving Teqniques," which you can find on my web site, but it will be a while before I get that book done (I need to finish "Thinking in Patterns" first). Also, there's "Thinking in Enterprise Java," an early version of which you can find on the web site. It's hard to know how that one will progress since it involves multiple authors, each with their own schedule.
Compare and contrast Java, C++, Delphi, Python, and C#--what are the advantages/disadvantages of each?
At this point I'd have to say the primary strength of C++ is performance. That's the only compelling reason to use it at this point, because the downsides are many -- the excessive complexity of the language and lack of garbage collection are the two biggest time-wasters. I still enjoy C++ as an intellectual puzzle; I keep learning from it. But I would be very reluctant to use it exclusively for a significant project, unless there was a constraint that required it.
Although Pascal was one of my first languages, I can't speak authoritatively on Object Pascal and Delphi. Delphi has many things in common with C++ and I know people who are very productive with it. Borland keeps coming out with new versions and my friend Marco Cantu has sold many copies of his Delphi books so clearly it provides value to people, but I haven't spent much time with the language. My friend Zack Urlocker was the original product manager -- I remember telling him that I thought it was a good product name (Delphi was originally just the internal name of the project) and being incredibly impressed by the builder and libraries. But at the time what I really wanted was a C++ Builder, and by the time it came out I had moved on to Java so only ended up spending a bit of time on it. And in the meantime, somehow, MFC had taken hold. If C++ Builder had come out earlier, I think the world could be a very different place. Timing can be really important.
Java was a huge step forward. The two main "revolutionary" features over C++, I think, were automatic garbage collection and a unified error-reporting mechanism (for a long time I believed checked exceptions were very important, but I have since revised my opinion). In addition, the large set of standard libraries makes a big difference (that's one of the main reasons Python is so great; you can find a library for anything), but I think the cross-platform goal caused a lot of problems. I think it's an admirable goal, but it put a lot of constraints on the language that Python, for example, doesn't have, even though Python is cross-platform. In Python, if I want to do something platform-specific, the language doesn't slap my hand and tell me that's innapropriate. I can do it. In Java, I'm going against the intent of the language so it won't let me do it. And to achieve this cross-platform goal, they had to make lots of compromises and sometimes they would fling out a library without reviewing it (AWT comes to mind), and then they might require another try to get it right (Swing, which was too slow for a long time). Java has a great deal of momentum now and many of the bugs worked out, but it's been a bit painful in the process. I also have concerns about the stability of Sun as a company and the restrictions of the JCP. However, if anything did happen to Sun I believe that IBM would take over the funding of Java language development, so I'm not really concerned about the long-term viability of the language. It's just been kind of a bumpy road.
I was incredibly skeptical about C# at first, for quite awhile. However, as time passed and I began to learn about the language, I started to see that it really is a better Java. They didn't discard everything possible from C++, for example. Like operator overloading -- In Java, they basically say operator overloading is evil and you shouldn't be able to do it, but then they include operator + and += in the String class, so obviously someone didn't think it was so bad. Yes, you shouldn't use it everywhere, but occasionally it comes in real handy. And C++ operator overloading is incredibly complex to get right -- I spend a whole chapter on it in "Thinking in C++" -- but a lot of that comes from the memory-management issues. In C# (and in Java, if they would have thought about it) operator overloading is much simpler to use, and far less dangerous.
Another example is C#'s use of Run-time type identification (RTTI). C++ effectively considers RTTI a dangerous thing to be avoided. Java makes significant use of RTTI/Reflection, and C# seems to positively revel in it, and you can see the Delphi roots of what Anders did in C#. The realization that it's very helpful to investigate and manipulate types at run-time is one of the things that makes the IDEs so powerful. And the idea of attributes is very important. It took me awhile to understand these, but attributes have concepts in common with both aspects and metaclasses, and the root of all these ideas is an important addition to the way we think about programming.
Of course, the big problem with C# is that it is dedicated to a single platform. Yes, the Mono project is trying to port C#/.NET to Linux but I have my suspicions. Somewhere in there we will run across copyrighted APIs that can't be re-implemented for Linux, and that's where things will come to a halt. Sure, you can have the general stuff, but you won't be able to write full cross-platform programs. I can't see Microsoft giving away any strategic advantages, regardless of how badly they want to lure people back from Java.
One very good effect that C# has had is in providing competition for Java. JDK 1.5 already has a number of features that have clearly been inspired directly by C#. I'm very glad to see this, because it had begun to feel to me like the Java designers had lost the feeling that they had to serve my needs. With C#, they seem to be paying attention again.
Saving the best for last, I've said in numerous places that Python is my favorite language, and this is because I'm most productive in that language. I can get so much more done in Python than in any other language I've encountered that it's very hard for me to use those other languages, because to do so means throwing away time. Also, I've found the Python community to be my favorite group of language people; I can't figure out how or why this is the case, but it retains the gentleness and enthusiasm that I most value in my interactions with a language community. I look forward to when I finally get my plate cleared enough that I can continue working on "Thinking in Python."
I noticed on your web site, in one of your MindView newsletters (http://mindview.net/Newsletter/Archive), that you give seminars all over the world. I found it interesting that some from the US find it cheaper to attend a seminar in Prague than stateside (plus they get to visit the Czech Republic). What percentage of attendees at your seminars in Europe are from the US?
Because of the world situation, the last couple of years it's been less. But it seems like it's at least been 10% or more. People who've come have had more than just training, but the adventure of seeing a beautiful European city.
Do you enjoy traveling around the world giving seminars, or is it just something you have to do but would prefer to stay home?
I actually try to schedule seminars in places that I want to go (which is why I've given seminars in Prague, and we are thinking of Dublin next year), and I won't give a seminar in a place that I have no interest in going as a visitor.
Where do you live, exactly? If you are not native to that area, where are you originally from, and where else have you lived?
Summer and fall I live in http://mindview.net/Seminars/Locations/CrestedButte/CrestedButte.html
Crested Butte, Colorado. (The URL has pictures and details). When I'm there I really don't like to leave, so I try to schedule my travel for the rest of the year, when I'm in California (on the central coast, near San Luis Obispo). I grew up in San Diego, and went to college in various places around L.A. I lived in Seattle for 5 years, Pennsylvania (south of Philadelphia about an hour) for 3 1/2 years, and San Francisco for 6 years.
How did you get started in programming (How were you introduced to it, when did you realize you wanted to pursue it as a profession)?
This is fully discussed in this weblog:
How many years experience do you have as a programmer? What was your career path to where you are now?
See above. I worked about 5 years for companies before I went off on my own.
Would you recommend a career in programming to young people today?
Yes, in the US programming and related jobs account for the top half of career growth, despite the current economic situation. I go into detail in this weblog:
What courses would you recommend they take? What languages/technologies should they key on?
For me, I find it's more powerful to understand concepts than particular languages. Of course, you do have to understand languages in order to have implementations, but if I were designing a computer curriculum, I would teach Python first so that people could easily acquire depth in concepts, and then much later introduce languages like Java, C++ and C#, after they had reached the point of not getting confused by details. I think students could acquire the important skills much more quickly that way, and it would make a better use of their time. I'm not alone in this idea; there are more than a few college professors who feel the same way.
Which software project/product that you have participated in are you most proud of?
Oddly enough, I just found out about it this past year. When I worked at Fluke near Seattle (they make multimeters) I never considered myself the best employee in the world, and while I wasn't fired I was eventually encouraged to leave. But while I was there I created an assembly-language program to drive a vacuum-flourescent display. I put a lot of time and effort into carefully designing and documenting that program, and after I left I assumed that it had only ever been used in the Fluke 45, the meter I worked on while I was there. Last fall Fluke asked me to come back and speak at their company conference. I couldn't refuse because I had never felt great about the way I had left; I was just too curious. When I was there, some of the engineers told me that my code was still being put into new projects. So no matter how mediocre I felt I was when I was there, the project I created saved the company tons of money over the long term, so I more than paid for all the time that I had spent goofing off (actually, I was always learning, it just didn't always apply to the project at hand). It turns out you just never know what kind of impact you have, even if you think you're being a slacker.
What project[s] are you currently working on?
Books, CDs, audio and video as described above.
What is the name of your business and/or employer?
What is your web site URL?
www.Mindview.net or www.BruceEckel.com
What do you do when you're not involved with work, directly or tangentially? (Hobbies? Sports?)
A lot of hiking and mountain biking here in Crested Butte. I try to go to Yoga class regularly, and practice a bit. I seem to be remembering how to ski.
I see way too many movies, but I can sometimes pretend that it's research. I try to attend writing workshops (typically fiction-oriented) whenever I can. I've experimented with many art forms over the years; lately I dabble in painting, mostly watercolor.
What was the most interesting experience you've ever had related to programming?
Generally, learning the Python language and having it open my understanding of features in other languages. More specifically, participating in Zope3 Sprints, which have been very intense but terrific ways to learn about Zope3.
What was the most frustrating experience you've ever had related to programming?
Trying to learn to work with other people. I always hope that everyone will just do the right thing without a lot of supervision from me. Basically, I guess I hope that people will work like computers and follow instructions to completion, so that I can get 100% leverage on my time. What I keep discovering is that a project that someone else is working on usually requires 50% of the time in supervision and management than I would have to put in on such a project if I just did it myself, so the leverage is not so great. And even then, that's probably a pretty decent number. It's not too hard to find someone that takes more than 50%, and then the value starts to become questionable.
I've also learned that I have to be very careful and clear about contracts and agreements. Not only that, but projects have to be reviewed regularly to make sure the projects are following the agreements. Management is hard; my estimation of what it takes to be a good manager keeps going up.
What 3rd party tools do you find essential?
I use Word a lot, although I'm gravitating towards OpenOffice. It's easier to work with others if the tools are free, and you can insist everyone have the latest without worrying about cost. Also they look like they're really trying hard to make it better. In the meantime, my books are created in Word, we have Macros and Python-COM tools for automation, and then the books are turned into Acrobat files for uploading to the printer.
As mentioned, I use http://www.Python.org a lot. In addition, I'm very addicted to Cygwin http://www.Cygwin.com, since it solves most of the problems of trying to use Windows to do anything serious. For example, I do most of my building with makefiles, and these run seamlessly with Cygwin.
I do an awful lot with plain text and so use a plain-text editor for a great deal of my programming; I've been using JEdit more recently; it's free. As mentioned, my choice of Java tools is heavily based on easy/cheap availability for students, so I tend towards Eclipse http://www.Eclipse.org, but the free version of JBuilder is fine too -- we don't insist that students in seminars use any particular tools; they can use what they do at work or feel comfortable with.
My mail reader has been Calypso, which is no longer being supported, and several friends have moved to The Bat http://www.ritlabs.com/the_bat/ and I am sure I will too, when I get the time.
My web server runs Linux and Zope. I don't think we've had any problems that we haven't caused ourselves; Linux and Zope have been excellent and I wouldn't change. I've been able to do great things with Zope.
Which programming web sites do you have bookmarked?
To keep up with Java, I usually go to Elliotte Rusty Harold's Cafe Au Lait site
http://www.cafeaulait.org/ (interesting aside: I lived in the building next to Rusty's in Brooklyn for a couple of months 1.5 years ago; I found out when I saw him walking through the Brooklyn Botanic Gardens and we had lunch).
For Python, I read the Daily Python URL http://www.pythonware.com/daily/.
More and more I've been going to my friend Bill Venner's http://www.Artima.com web site; I think he's been developing that into a very good place for exchange of information and opinions about programming.
How do you keep current with your programming skills?
Reading and practice. A lot of reading happens through the web, but as an author I also get a lot of books. And then I try new things whenever the opportunity arises. For example, I take every opportunity to try the new features in Python when I'm solving problems.
Which Borland Conferences have you attended?
I attended and spoke at conferences 1-11, and was on the advisory board for the first one. At conference 10, they had people sit down as the number of conferences they attended came up. I was the only one left standing at #10 (Except for David I., of course).
Which was the best one, and why?
Probably the first one because everything was new and exciting. Also, that's where I met my long-time buddy Richard Hale Shaw, on the advisory board.
Who do you consider to be the best programmer you know personally, or know of?
Possibly Rickard Oberg, the original creator of JBoss. He has amazing ideas. I also found Blake Stone and Joe Nuxoll to be very impressive programmers for the work they did on JBuilder. Certainly Guido Van Rossum (creator of Python) and the core Python team -- amazing people. And Jim Fulton, creator of Zope. Can't forget Anders. Andrew Koenig seems to have incredible breadth and depth in languages. And I know there are others I can't think of right now. As you can see I have a rather hard time narrowing it down.
What is your "claim to fame" outside the realm of programming?
I didn't get famous for this, but before I studied computer engineering, I was an undergraduate Physics student. This was during the days of the energy crisis and solar tax credits, and I was focused on various forms of solar energy. In fact, what I wanted to do for my master's degree was kind of a general engineering degree, as I was interested in trying to make control systems for solar energy installations. The only graduate engineering courses taught regularly at Cal Poly SLO at the time were in computer engineering, so although I took solar and mechanical and electrical engineering classes as well, I ended up with a degree in computer engineering, sort of by accident.
But during my college years, I was able to get several summer jobs in the solar industry. The first was a research project in solar air conditioning for the navy, using ammonium nitrate (it gets cold when you add water). The second was for a water-source heat-pump company, and this was really mechanical engineering and was quite interesting. But my senior project in physics was in solar distillation -- making fresh water from salt water -- and I worked one summer for a company that made solar panels, and wanted me to create a solar still for them. I had done quite a bit of research and was able to apply various principles to come up with a very efficient distiller, using half-painted fiberglass cloth, which was my own design. I never published it, but it was very satisfying.
If you weren't a programmer, what do you think you'd be doing for a living?
I'd probably be some kind of engineer, building things. Although I did get a strong start in journalism and writing and so it's possible I would have pursued that, maybe in fiction.
If you could live anywhere on earth at any time, when and where would it be, and why?
I'd probably alternate between Crested Butte in the Summer and early Fall, and Seattle in the Summer and Early fall (there's the rub). More practically, I might choose New Zealand for their summer and fall (opposite hemisphere) when I'm not in CB.
If you were given 30 seconds of free television air time, to be broadcast all throughout the earth, and could say anything you wanted, what would it be?
These guys say it best, I think:
http://www.globalcommunity.org - click on the wombat
What is your favorite programming book?
Currently it's probably Eric Raymond's The Art of Unix Programming http://www.catb.org/~esr/writings/taoup/html/.
What is your favorite non-programming book?
Little, Big, by John Crowley is the one that popped into my head.
What is your favorite movie?
It changes. I can tell what my favorite is because I'll begin to study it by seeing it over and over until I finally get whatever I'm going to get out of it and move on. For a long time it was "Made in Heaven" and other movies that Alan Rudolph made. For awhile it was "Groundhog Day," then "The Matrix." I went through a phase where I liked "Meet Joe Black" a lot. Movies about death or reality seem to catch my interest. I can't think of a current favorite, and I've also gotten more particular about films.
What is your favorite song?
"Optimistic Voices" from the Wizard of Oz. Dorothy and entourage have escaped the forest and poppies, and are approaching the gates of the Emerald City.
You're out of the woods
You're out of the dark
You're out of the night
Step into the sun
Step into the light
Keep straight ahead for the most glorious place
On the face of the earth or the sky
Hold onto your breath
Hold onto your heart
Hold onto your home
March up to the gate and will it open.
You can hear the song by searching for it on the web.
What is your favorite musician or musical group?
Sting (aka Gordon Sumner) or Tom Petty. Something about their lifestyle or integrity appeals.
Finally, the question I always like to ask: What would you rather eat: the fat from behind a caribou's eyeball, or a frosted poptart?
Despite living here in the Rocky Mountains part of the year, where they hunt elk and so a similar substance might be available, I think an occasional poptart can be quite the comfort food. I think that some of the flavors have gotten better, and that they even have "double-stuff" poptarts now (they always seemed too crusty to me). Despite all that, it's been quite awhile since I've had one.
This interview was conducted via email June 2003.
Clay Shannon is a Borland and PDA-certified Delphi developer and the author of "Tomes of Delphi: Developer's Guide to Troubleshooting" (Wordware, 2001) as well as the novel he claims is the strangest one ever written, "the Wacky Misadventures of Warble McGorkle" (see Wacky Warble, etc. for more information on the 4 Novels application, which contains this and three other novels he has penned).
You can find out more about Clay at: http://hometown.aol.com/bclayshannon/myhomepage/index.html
You can look into Clay's shareware and determine his current availability at: http://hometown.aol.com/bclayshannon/myhomepage/business.html
You can contact him at: BClayShannon@aol.com
Free 30-day trial! Develop for Windows, Mac, Android, iOS, devices and gadgets!
More social media choices:
C++Builder on Google+
@RADtools on Twitter
Server Response from: ETNASC01