Development Expert David Conger
Stephen Ibaraki, I.S.P., has an exclusive interview with noted
development expert and independent consultant, David Conger.
David is a 20 year veteran in open source, network programming,
computer graphics, C, C++, C#, and Java. He has written the
documentation for numerous technologies from Microsoft, authored
several books on programming plus worked in education as a professor
of Computer Science and Business Computer Programming.
Q: You have such a long and distinguished career in computing. Thank
you for agreeing to this interview and sharing your insights and
years of experience with the audience.
A: Well, thank you for this opportunity.
Q: Your experiences as a respected and widely known guru would be of
benefit to many veterans. Can you detail your personal history and
how you came to write? What personally prompted you to enter the
computing field? What led you to becoming a noted expert on
A: I got into computers the first opportunity I had, which was in
college. I graduated from high school before most high schools gave
kids access to computers. My first term in college, a friend of mine
advised me to take a BASIC programming class. He had taken it the
semester before and told me, "You'll love this stuff." Less than a
week into the course, I knew that I'd be doing something in
computers for the rest of my life. In less than a year, I got my
first contract programming job to help me pay for school.
Interestingly enough, my parents actually had a tough time
understanding the value of what I was doing. When I went home for
the summer, my father (an accountant) told me, "You won't go into
business, you hate selling things, you got a bad back (from an
injury in high school) so you can't dig ditches or do construction,
what else is there?" A year or so later, he computerized his office
with IBM XTs. I instantly became his tech support center, even
though I was thousands of miles away. He never questioned my choice
of major after that.
Over the years, I've focused a lot on graphics and network
programming. Early in my career, I wrote firmware for parallel
processing, real time graphics display controllers used on the F15E
fighter jet and the OH58D military helicopter. I also spent some
time as a game programmer for a company called American Laser Games.
Writing was something I thought I'd never do. In fact, a few years
ago, my father reminded me that I used to complain about having to
take English in high school and college. I used to say, "Why do I
need this stuff? I'll never be a writer!" Famous last words.
I was encouraged to become a writer by a college professor of mine.
I was taking a class in Asian humanities at the University of
Hawaii. The professor, J. P. Sharma, liked to have us analyze Asian
folk literature and explain what it showed about the people who
originated it. So in each paper, I would tell the story in my own
words, and then present my analysis. The professor had a young
daughter that came into her dad's study one day to see what he was
doing. She pulled my paper off the top of the stack on his desk and
began reading. He told me that she so enjoyed the way that I retold
the stories that, from then on, any time he came home with
assignments, she would go through the stack to find my paper and
read it. Professor Sharma encouraged me to write a collection of
folk tales instead of the final paper. When I did, he encouraged me
to get them published. That became my first book, Many Lands, Many
I set writing aside until the early 1990's. While I was teaching, I
was asked by a publisher's representative to submit some of my class
materials to possibly be developed into a book. Shortly thereafter,
I got contracts for 5 programming books. A few years later, that led
to a contract job at Microsoft, where I wrote documentation for many
of their graphics and networking technologies.
Q: What are your personal goals 1, 3, and 5 years into the future?
A: My number 1 goal is to invent a time machine, go back to the mid
80's and beat my younger self silly for selling all my Microsoft
stock. If I hadn't, I'd be retired.
As far as goals for the future, well, I think my biggest priority
has to be what it's always been – to stay on top of things. In this
industry, you have to keep learning constantly or you're obsolete in
a year or two. When I was teaching, I used to read about 1500 pages
a month of computer books, plus articles from about 2 dozen computer
magazines in our school library. These days, I don't read quite that
much about computers. Maybe it's age, but I've branched out into
things like religion, philosophy, history, languages, and music.
In addition, I'd like to make a bigger contribution to the Open
Source movement. I can't discuss the details, but I'm currently in
the process of setting up something that I think will give a big
boost to a couple of specific Open Source projects and to Open
Source in general. I'm having to convince certain companies that
these projects are not as “out there” as they might seem at first.
They're reluctant to be the trail blazers. If things go well, I
should have something out this time next year. If so, that's where
my energies will be focused for the foreseeable future.
Q: What ten career pointers would you provide specifically to people
who wish to enter the computing field?
A: I could only come up with 8, and here they are:
Tinker, tinker, tinker. When you get new hardware, software, or
a new operating system, tinker with it. Stretch it to its limits
and beyond. Be curious. That's how you become an expert.
Never stop learning. You'll go obsolete if you do.
Find mentors. I didn't have many. It made my road a bit rougher.
Find someone knowledgeable and pick their brains as often as
possible. Watch what they do to stay on top of their game. Do
the same thing.
Develop backup plans for your career. With the uncertainty of
today's economy, you never know how the industry is going to
change. The dot com bust is a prime example. The bubble burst,
and suddenly thousands of people were out of jobs. Plan what
you'd do if you lost your job. Where else could you apply? Where
would you relocate to? Besides the type of company you normally
work at, who else could use your skills?
Be versatile. Miyamoto Musashi was possibly the greatest samurai
warrior that ever lived. He taught in his Book of Five Rings
that a warrior should never have a favorite weapon. To be a
great warrior is to be versatile in all weapons. The same idea
applies to a computing career. Computing is an extremely
flexible field. You can be a developer, tester, writer, go into
sales support, be a network administrator, web site
administrator, etc, etc. Think flexibly. Develop backup skills
sets so that you can jump into something else if you have a
career setback in what you're doing.
Don't get religious about technologies. By that I mean, don't be
too proud to use a particular technology. This goes along with
#5. As an example, ask the average C++ programmer if he'd mind
writing you a program in Visual Basic. When he finishes either
choking or laughing (or both), ask him why he feels the way he
feels. He'll probably have great technical reasons why he
doesn't want to use VB. Nevertheless, there are some perfectly
valid reasons why a business would want a program written in VB
(many do). You can't always use the technology you like best. Do
yourself a favor and be relaxed enough to go along with things
until you're in a position to make technology recommendations or
decisions. If you get too emotionally tied to a particular
technology, programming language, or whatever, you can get a bad
reputation in a company. I've seen excellent programmers shoot
themselves in the foot this way.
Develop alternate skill sets. If you want a successful career,
you've got to have something to fall back on. That can be
something in computing, or something completely different. I
know of a guy who, when he was laid off from a development job
and couldn't find another, entered the ministry in his church.
For years, he studied his religion as well as computers. In his
spare time, he began developing software for churches and
charitable organizations. I know another guy who got a teaching
certificate in his state. He substitutes as a math, science,
physics, and programming teacher in high schools to supplement
his income from his consulting practice, which is suffering
these days. These guys have found other ways to apply their
skills and developed skill sets outside of computing.
Get as much education as you can. Although you can get into
computing without a degree, you'll find much better
opportunities if you have at least a Bachelor's. Don't stop
studying when you graduate. Get additional certifications from
important organizations. These can include the ACM, Microsoft,
Oracle, Red Hat, IBM, and IEEE. There's no doubt about it,
degrees and certifications open doors for you that would
otherwise be closed.
Q: Can you comment on the open source movement and where it’s
A: Open Source is an interesting sort of an animal. It's democracy
in technology. I strongly support it. However, I'm going to be a bit
critical for a moment and say that too much of Open Source is about
Microsoft. Open Source may or may not be the "Microsoft-buster" that
so many want it to be. And anyway, MS isn't any more the Evil Empire
than say Oracle, or any of the other big players in the industry. I
had to laugh when Judge what's-his-name stated that Bill Gates had a
Napoleon complex. Well, duh. That's how he got where he is today.
All of the heads of big companies have Napoleon complexes. So what?
What's that got to do with technology?
Open Source needs to be about technology, not personalities. It
should be about innovation, not attacking a particular company. In
my opinion, a well-crafted technology is truly a thing beauty. It's
a work of art. Because of business pressures, there is not enough
opportunity in our industry for developers to be artists at what
they do. Open Source gives us that opportunity. I honestly think
that the business needs of a company often result in the production
of inferior technology. Open Source divorces technology from
business necessities and gives those of us who love development a
chance to craft something that is actually innovative and unique.
One trend in Open Source that disturbs me is the tendency to just
copy whatever Microsoft is doing. Although I can see definite value
to .NET knockoffs such as Mono (http://www.go-mono.com),
I don't think it's the best use of Open Source resources. In my
opinion, it's better do use the freedom that Open Source provides
and develop better technologies that provide the same functionality.
A good example is the DotGnu project (http://www.dotgnu.org),
which provides the same functionality as .NET, but does it using an
architecture that's much more open.
In the short term, the bad economy may prove a boon for Open Source.
Why, for instance, would anyone pay $125/copy for an office suite
when they can get OpenOffice (http://www.openoffice.org)
for free? I use OpenOffice all the time. Writer, which is included
in OpenOffice, is a great word processor. I write books with it. I
wanted it on CD so I ordered it from a distributor. It cost me $16,
including shipping. It saves to MS Word format when I need it to, so
I can collaborate with people using Word.
In the long term, Open Source needs to focus more on the developer
and the end user. We need Open Source tools that are as good as or
better than what commercial companies provide. Although there are
some excellent efforts going on, I really don't see a development
suite that's a strong competitor for Visual Studio, for example.
On the end user side, there's not near enough documentation for Open
Source projects. The documentation that exists is woefully
inadequate. Open Source teams need to do more to attract
professional writers. Having the developers write the docs just
doesn't cut it.
Q: You have your finger on the pulse of future trends. For those who
have long established careers in computing but wish to change, what
ten computing areas would you recommend that they should focus on?
What do your forecast as hot topic areas to start researching now?
A: They are:
Open Source, Open Source, Open Source. If you are a developer,
and you really want to carve out a name for yourself, then take
a long look at Open Source. Anyone can start an Open Source
project. If your project is both innovative and well-crafted,
you could suddenly find yourself on top of the industry. That's
what happened to Linus Torvalds. With Open Source, it can happen
to anyone with the right amount of imagination, development
skills, and advocacy skills.
Look for a niche in .NET. Microsoft is betting the company on
.NET. It's a massive effort, very unlike anything the industry
has ever seen (IMHO). Because it's so large, there are a lot of
technological niches to specialize in. That's why I wrote my
book on .NET Remoting. .NET Remoting is a great move forward in
distributed objects. But Microsoft doesn't hype it as much as
say, ASP.NET. Why? Because .NET Remoting is a Microsoft
implementation of an industry standard. ASP.NET is a Microsoft
implementation of a Microsoft standard. But, in my opinion, .NET
Remoting is the more powerful and flexible of the two
technologies. I would be very surprised if it didn't become
important in the industry. So I decided that it was important
for me to get a book into that space. When you're looking for
things to be an expert in, look at lesser-known .NET
technologies that will probably be big, and take a chance on
Look at non-Microsoft technologies. Yes, the industry tends to
follow MS, but there are some excellent competing technologies
that there's a shortage of gurus in.
Don't give up on mobile computing. Hand-held and mobile
computing is rather passé in the publishing industry these days.
But it's still a definite growth area. There are lots of
development opportunities here.
Take a look at aspect oriented programming. I don't think that
AOP will cause the kind of massive shift in the industry that
OOP did. Nevertheless, it's an important new way of approaching
development that every programmer should learn.
Don't neglect design patterns. If you don't already know what
design patterns are in programming, find out now. This is an
area no developer should neglect. There are a lot of excellent
books on the topic. Get some and read them. You'll be glad you
Distributed objects are only getting more important. With the
advent of Web Services, .NET Remoting, J2EE, and similar
technologies, distributed objects are getting easier to create
and more important to a company's bottom line. This is a
definite growth area. However, distributed applications are
still tough to implement. They're a real booger to debug. If
you've got experience in parallel processing, you'll find that
your skills transfer well to distributed systems.
Keep an eye on games. Yes, games. The game programming industry
really pushes the envelope in a lot of ways. They do more than
just graphics. Game programmers develop really advanced
techniques for efficient processing, network applications, and
user interfaces. The most innovative user interface designs are
coming from games. Game designers have to invent ways of
communicating complex information sets between people and
computers in ways that are simple, intuitive, and fun. Being
familiar with what's going on in the game industry can give you
extra techniques that most software designers ignore.
Security is vital. In the post-9/11 world, security is more
important in computing than ever. Every developer should become
familiar with it and incorporate it into their personal
Be a language maven. C++ is the big favorite of many developers.
Of course, Java has put on a great showing in recent years. C#
looks like it will do the same. It's best to know them all.
Q: You have worked extensively with advanced C++ programming. What
experiences and real world examples can you share with our audience?
What are your top tips/code examples for C++ programming?
A: C++ is a fantastic language. I like it a lot. However, in complex
systems, inheritance hierarchies can get to be a real problem fast.
The problems with multiple inheritance are well known and well
documented. When dealing with deep inheritance hierarchies, I don't
think developers use abstract base classes enough. Used properly,
they really go a long way toward solving inheritance hierarchies
Another way to flatten inheritance hierarchies is to use templates
rather than inheritance, or use templates with inheritance. Because
templates are so flexible, they can often take the place of multiple
layers of inheritance. I've found that I can flatten my inheritance
hierarchies a lot by having my template classes derive from base
classes that include some of the functionality that would normally
go in the middle layers of the hierarchy. This also enables me to
easily include functionality that is difficult to get into the
template otherwise. In addition, it makes the template easier to
debug. It can even make the footprint of your application smaller.
Code in templates get instantiated for each instantiation of the
template. Code inherited into a template only appears once in the
Q: You helped develop the .NET Mobile Internet Toolkit. Can you
provide your experiences, practical examples and insider coverage of
the ‘plumbing’ for .NET Web Services?
A: Actually, that statement needs clarification. It was written by a
marketer for the cover of one of my books. While it's true as it
stands, what I actually did was write the documentation in the
toolkit, not the code. However, the people who write the
documentation for Microsoft are required to know their technologies
almost as well as the people who write the code. While there, I got
to see a lot of the internals of the MIT. It's really a rather
elegant implementation underneath. Because of deadline pressures,
there were (in my opinion) some problems in the user interface for
the VS.NET designer for the MIT. I think the developers on the
project would agree. However, their software architecture is both
robust and extensible. I really like it.
I can't get too specific with “insider” information due to a
non-disclosure agreement I have with Microsoft. But the whole
question of Web Services, ASP.NET, and .NET Remoting is an
interesting one. These three technologies are changing the balance
of computing, especially when combined with mobile computing.
When I started in computers, everything was mainframes.
Microcomputers were brand new. The first computer I ever programmed
on was the Apple II. In those days, applications centered on
mainframes. The advent of the microcomputers pushed that to the
desktop. Now, Web Services in general, and certain specific
technologies (ASP.NET, .NET Remoting, and mobile computing) are
pushing the “center” of the application back toward the server. The
primary difference now is that, often, the server is no longer a
mainframe. In many cases, it's a PC cluster. This is why so many
people are saying that “the network is this system.”
The focus of an application's functionality now is in its
middleware. Its center lies somewhere between the end user device
(whether that's a desktop PC or a mobile phone) and the server.
Middleware is what .NET is all about. It's Microsoft's attempt to
tie servers running Microsoft server technologies (SQL Server,
server-side user interface controls, and so on) to pervasive
computing devices running Microsoft software (Windows, Windows CE,
Pocket IE, etc.).
Q: You have recently written a book on Remoting with C# and .NET.
What examples or scenarios can you provide from your rich store of
knowledge in this area? How can COM/COM+ developers make the jump to
Remoting, the new Microsoft technology for creating and accessing
remote objects on an intranet or over the Internet?
A: There's two important points to make here. First, although I
don't think Microsoft has said so publicly, COM/COM+ is dead. I know
a fair number of people won't like me saying that. Nevertheless, it
is true. To the best of my knowledge, Microsoft has no long-term
plans to support COM/COM+. They'll be phasing it out. I don't think
I'm revealing any big secrets there. Everyone knows that MS is
betting the company on .NET. This means that COM/COM+ developers
must start to make the jump to .NET as soon as possible.
Secondly, I strongly advise developers on existing systems to plan a
staged move to .NET. Because of its design, .NET can be used in
conjunction with existing COM/COM+ components. Basically, the
COM/COM+ components that communicate with .NET objects can be put
into wrappers that makes them look like .NET components. You can
also create COM/COM+ wrappers for .NET components.
A staged approach means that you can build remote objects with .NET
Remoting and have them talk to COM/COM+ objects. In fact, the
COM/COM+ objects that you're replacing can be used at the same time
as the .NET Remoting objects. So if there's a serious development
error in the .NET Remoting objects, you can still keep your existing
COM/COM+ components online. You application continues to run
normally during deployment. Once you've determined that the objects
built with .NET Remoting work properly, you can remove the COM/COM+
The sheer magnitude of new .NET technologies can mean major
renovations to a company's system. A staged deployment helps make
the move much less painful and decreases the potential for serious
errors. Each new component or technology can be incorporated into
the system one by one, giving you time to do the integration testing
that ensures your application is robust.
If you're going .NET for new systems, I strongly recommend you build
them completely from managed .NET code. The biggest security hole in
.NET is its interface to unmanaged code. COM/COM+ components
comprise the biggest chunk of unmanaged code in almost every
If you do use unmanaged code, be careful. Yes, Visual Studio can
automatically generate nice wrappers so you can use COM/COM+
components with .NET components. But do the wrappers provide the
security you need? Maybe. Or maybe not. Either way, COM/COM+
components should be seen as less trusted than .NET components, both
in terms of reliability and security. If you build your system with
this mindset, it's much less likely to be compromised by a
malfunctioning or malicious COM/COM+ component.
Q: You have authored books and written documentation for
technologies? Please share your experiences from doing this work.
What ten tips and examples can you provide to others who wish to
work in this area? What stories can you share from your work in this
A: Most early software manuals were written by the developers who
wrote the program. They were garbage. Programmers who can write
documentation worth reading are not very common. If you're a
programmer that can write, you can do developer documentation and
probably make more money than you can as a programmer. However,
you'll be working on contract a lot, with all that implies. There
are good full-time opportunities for programmer/writers. But you
probably won't be able to write books on the side if you're a full
time employee of some company. So you have to choose.
It takes years to get to the point where you can make a living
writing books. You have to write a few while you're working another
job. Either that, or save up a lot of money before you quit. You
need at least a year's salary saved up, and I'd recommend two. It
takes that long before you get a decent revenue stream built up from
your books. Carving out a niche for yourself writing books takes
careful planning and time.
Before anyone will look at you for a book, you've got to have some
writing credits. Start by writing articles for developer magazines
and local computer publications. After you've been published a few
times, you can try to get a book contract.
Whatever you do, don't do what I did. Don't go it alone. I got
several contracts right away, which was good. But I didn't negotiate
well, so I didn't make much money on my first few books. If you've
got an idea for a book, put together an outline and a proposal. Then
find an agent. Here's a bit of a promotion, but my agency is Studio
B (www.studiob.com). I don't hesitate to recommend them.
Your agent looks over the proposal, and will probably help you
develop it into a format that publishers like it to be in. Next, he
or she submits the proposal to the publishers that he or she thinks
will most likely publish it. If it's a good proposal, you'll get a
contract. Then you write.
If you've got some writing credits on your resume, but haven't done
a book, you may want to consider coauthoring with an established
writer. Established writers can walk you through the process of
getting published and handle the production issues that writers have
to deal with. This lets you focus on the writing process and get
that down before you have to deal with other issues related to
producing a book. It's a common experience for writers to not make
any money on their first book. Teaming with an experienced writer
can help avoid that.
I'm always on the lookout for reliable, knowledgeable programmers
who can write well. In fact, I'll be teaming up on a book with a
brilliant astronomer/software engineer/writer. He's someone I think
will do well writing books. Brilliant guy. But he's never done a
book before. It's good for me because, with his help, I can take on
larger projects or get projects done faster. It helps him because I
can show him how to organize a book and teach him pedagogy that
One tip I would give all aspiring writers. Look at other people's
books. If you like a book, ask yourself why. What elements of the
writer's style work well for you? What pedagogical elements seem
particularly effective? Basically, what makes the book good? When
you figure it out, copy those elements shamelessly. As an author of
computer books, you're really a teacher. There's nothing wrong with
copying good teaching style. Just don't copy content. That's
Q: You are an international and well respected authority on C#
development and its pitfalls and shortcomings. With your extensive
experience, you have developed solutions and techniques for
improving performance. What are your top specific solutions for
major C# programming problems?
A: C# is not now, nor do I think it ever will be, the high
performance language that C++ is. But that's ok. It's not intended
for those types of applications. It is a direct competitor to Java,
and it has many of Java's same strengths and weaknesses.
Some of C#'s bottlenecks are also the same as those of C++. For
example, deep inheritance hierarchies can be a real slowdown. Using
interfaces and abstract base classes can really help.
Also, like C++ and Java, throwing exceptions in C# can cause some
real performance problems. Exceptions should only be thrown in
Some of C#'s best features are the ones that cause the biggest
performance bottlenecks. Take reflection, for example. Very cool
feature. But using it to determine the type of an object, and then
dynamically create and use the object at runtime is slow. Think
carefully before you use it. Make sure your implementation really
Q: Your books are highly recommended. What led you to write these
A: Thanks for those kind words. I wrote my textbooks because, when I
was teaching, I couldn't find any textbooks with a good mix of
theory, hands-on application, and real world experience. Most books
either focus on theory or application, but don't present a balanced
view of both.
Books like The Complete Idiot's Guide to C# Programming and Remoting
with C# and .NET were projects suggested to me by publishers that I
thought would be fun. And they were. They both were in areas that I
have strong experience in, so that helped.
As a writer, I really enjoy what I do. There's a certain level of
what I call “overhead work” that you have to do when you write for a
living. Mainly stuff like writing proposals and so forth. That's not
bad, but I'm always in a hurry to get through it so I can start
researching and writing. That's the fun part of the job.
Q: Describe future book titles and articles can we expect from you?
A: I've got some projects related to game programming that look
likely. Also, because DirectX is going .NET, I'll probably be
working in that area. In addition to some projects related to Open
Source, I'm developing some book ideas focused on C#.
Q: Can you describe some of the projects that you have worked on and
what tips you can pass on?
A: I've found that the success of failure of projects almost never
is determined by technological factors. Almost without exception,
it's something else. Usually, that something else is poor
For example, I once worked on a very pioneering game. It was
intended to be an interactive movie aimed at girls. We used
digitized video in which the actors talked to the camera like they
were talking to a person. When you played it back on a PC, they
looked like they were talking to you. The player could make choices,
which caused the video to branch. The story being told had many
different endings, depending on what the player chose along the way.
Disaster set in when the president and CEO of the company assigned
his wife to the project. Originally, I was running it. By about
halfway through the development cycle, everyone was suddenly calling
her the “Executive Producer” and me the “Technical Producer.” You
see the difference.
Unfortunately, the “Executive Producer” had never run a project of
any kind. The result was chaos. Eventually, the game was released.
It contained 7 CDs of video. To my knowledge, it was the largest
game ever released. But it became clear that they project would bite
the dust about 3/4 of the way through. We started hemorrhaging
people - all of the best people - in a big way. Before the game was
released, I left to go write software for Microsoft's Interactive TV
effort (which they later canceled, bummer).
The game, although notable, was a failure. But it wasn't for
technical reasons. I wrote the proof of concept demo early in the
project. Technically, we knew exactly where we were going. We had
great writers and actors. The writers accomplished miracles, in my
opinion. The game was a failure for no other reason than it had a
terrible management situation. In fact, the game was such a
spectacular failure that it made the company go out of business.
The point here is that I learned the hard way that you have to
really be aware of your employment situation. As developers, we tend
to focus on the fun of making new technology. Forgetting to watch
out for your career can put you into bad situations. It's important
to have good managers and pick your projects carefully.
Q: Please provide your views on UML, and XML?
A: Simply put, UML is vital for every software engineer to know. You
can't get by without it. XML is rapidly becoming just as necessary.
At the very least, XML will be the standard for exchanging data
between distributed objects and programs for the foreseeable future.
Q: What are the hottest topics that all IT professionals must know
to be successful in the short term and long term?
A: Without a doubt, middleware, .NET, and security. Without a solid
knowledge of these topics, you're not going to make it in today's IT
Q: What would be your recommended top ten references for the serious
A: Anything written by me. Ok, the serious answer is, it can depend
on what language you're developing in. But I'm going to assume that
most people want to be as versatile as possible, so they're learning
C, C++, C# and Java. Here's my recommendations (with a little
For those new to C#, here's my book on the subject:
The Complete Idiot's Guide to C# Programming David Conger
C# For Experienced ProgrammersHarvey M. Deitel Paul J.
Deitel Tem R. Nieto Marina Zlatkina Jeffrey A. Listfield Cheryl
Design Patterns: Elements of Reusable Object-Oriented
Software Erich Gamma Ralph Johnson Designed by Grady Booch
AntiPatterns: Refactoring Software, Architectures, and
Projects in Crisis William J. Brown, Raphael C. Malveau,
Hays W. "Skip" McCormick III and Thomas J. Mowbray
The Art of Computer Programming Volumes 1-3 Donald E.
The C++ Programming Language Bjarne Stroustrup
Effective C++ : 50 Specific Ways to Improve Your Programs and
Design Scott Meyers
More Effective C++ Scott Meyers
Effective STL: 50 Specific Ways to Improve Your Use of the
Standard Template Library Scott Meyers
Inroads to Software Quality Alka Jarvis, Vern Crandall
Software Implementation Michael Marcotty
Software Optimization for High Performance Computing
Kevin R. Wadleigh, Isom, L. Crawford
C is not dead yet. People are still
learning and using it. Here's my book on the subject.
Software Development in C: A Practical Approach to
Programming and DesignDavid Conger
The Waite Group's C Primer Plus Stephen Prata
Java How to Program 4TH Harvey M. Deitel Paul J. Deitel
OK, so this is more than 10, but who's
Q: You have done extensive research in a number of high-tech areas.
Can you describe the results of your research and tips you can pass
onto the audience?
A: I used to do a lot of work in parallel processing systems for
military applications. Parallel processing PCs are becoming more and
more affordable. Increasingly, parallel processing and
multithreading will become common in programming. These two topics
do not receive enough attention from most programmers. Many types of
programs could achieve better performance by using one or both of
Q: David, can you expand on how .NET is so different: a new way to
build distributed desktop applications; a new way to produce mobile
applications; very different from classic COM (no class factory,
doesn’t use IUknown, no registration in the registry)?
A: I can't really say enough about how much easier and better .NET
is when compared to classic COM. To be honest, I've always hated
COM. And I mean always. I thought it was a crippled solution from
the first time I saw it. The Win32 API and the Windows registry have
also long been favorite targets of my criticisms. .NET gets rid of
it all. You don't have to deal with the Win32 API, you don't have to
worry about putting object GUIDs in the registry, As you mentioned,
there's none of that silly IUnknown crap to worry about. No
reference counting, and so on, and so on. It's so much easier to get
a distributed system up and running quickly.
In addition, distributed apps under .NET are much more customizable.
The .NET Remoting architecture is very extensible. You can write
your own channel sinks, enhance the proxy, and much, much more. All
of this involves a lot of digging into the guts of .NET in general
and .NET Remoting in particular. That's not easy, especially because
the Microsoft documentation for .NET is not always correct (at
least, it isn't in the current release). When something complex
should work and it doesn't, you've got to consider the possibility
that the system does not work like the documentation says it does.
Q: Where do you see C# positioned and where do you see it evolving
over the next five years?
A: C# will challenge Java and VB. I think a fair number of VB
programmers will shift to C#. Java, on the other hand, will always
have a loyal following.
Q: What are your tips for learning the types defined in the .NET
base class libraries since this is the heart of .NET and not
necessarily learning the syntax of C# or other supported languages?
A: Just tinker with it. Use Visual Studio's object browser a lot.
Learn to use Microsoft's documentation. There's something of an art
to it. You have to be willing to learn related concepts. For
example, if you haven't had a lot of experience with .NET, the
underlying architecture of .NET Remoting can seem very confusing
until you understand the underpinnings of .NET itself. In most
cases, how things are done in the guts of .NET Remoting is just an
extension of how things are done in the guts of .NET.
Q: Can you comment on the integration of mainframe, Unix, and
Windows-based technologies and how they all fit in large, complex,
A: They fit badly right now. Vendors need to be more willing to
agree to standards. The advent of XML, SOAP, and so on are helping
in a BIG way. But down in the trenches, sysops, developers, and
testers are struggling unnecessarily due to the failure of vendors
to consider integration issues with their competitor's products.
From their point of view, I can see why they don't spend as much
effort on it as they should. Nevertheless, their customers would be
a lot happier if they made a better effort to make their software
“play nice” with other products.
Q: What changes do you see for the future of computing, conducting
business, and the use of the Internet?
A: The situation is so open to major change right now that I
wouldn't even try to make a prediction.
Q: What would you do different if you started again, having gone
through this authoring experience over the years?
A: I'd get an agent right away. I'd have collaborated with
experienced authors on a couple of books. I'd have started with
smaller projects that I could get out quickly and that had a larger
market. I started with textbooks while working a full time job. Each
book took me about a year to write. As you might expect, some made
money, some didn't. So an entire year might go by with no real
advancement in my writing career. Doing smaller projects at first
gives you more books to potentially get income from. Books like that
tend to die out quickly. But they give you a revenue stream to work
from. The larger projects stay on the market longer. You should
shift toward them as you get more established.
Q: If you were doing this interview, what five questions would you
ask of someone in your position and what would be your answers?
A: If I were doing this interview, I might ask what the main
advantages are of being a writer (and teacher) rather than a
developer. As I see it, the main advantage is that I get to have a
life as a writer. I live way out in the sticks. No DSL is available.
Cable modem Internet access just came this year. Not far from where
I live (western Washington state), millions of people flood the
highways every day in a commute that often lasts 2 hours. That is,
it lasts 2 hours unless it rains, which seems to cause everyone to
forget how to drive. In that case, it can take 8 hours to get from
Microsoft to my house. It's happened to me before.
As a writer, I can live where I want and not have to commute. If I
want to teach as well, I can get a job at most community colleges or
universities. So there are really not many limits on where I can
All this sounds good, but it takes years to get to. Fighting your
way out of the rat race is a long, hard struggle. But it can be
Q: It’s a blank slate, what added comments would you like to give to
enterprise corporations and organizations?
A: Consider Open Source. Starting an Open Source project to produce
software for your industry can make you the company or organization
that sets the standards. Anyone can see what that's done for
Microsoft. You can have an influence in your industry that is larger
than your company could have any other way by creating and giving
away the software that your entire industry uses.
Q: Thank you for sharing your valuable insights with us today and we
look forward to reading your books, and articles.
A: It was a pleasure. That's for the opportunity.