Leading authority on .NET
technologies gives his tips...
Interview by Stephen Ibaraki, I.S.P.
This week, Stephen Ibaraki, I.S.P., has an exclusive
interview with the widely respected author, consultant, and
trainer, Joe Mayo.
Joe, with more than 17 years of industry experience, is an
acknowledged authority in software development, specializing
in .NET technologies. He opened his C# Station Web site in
July of 2000.
His latest book is Borland C#Builder Kick Start.
Q: Joe, thank you for sharing your considerable knowledge
and experiences with our audience.
A: You're welcome. I am pleased to do so.
Q: Please provide a profile of your long successful career
leading to the present. What motivated you to get into
computing and writing? What challenges did you face, with
lessons learned, that you can share with our audience?
A: In 1986, the US Air Force sent me to computer programmer
training in Biloxi Mississippi. My first assignment was as
an assembly language maintenance programmer for the DoD's
Automated Digital Network (AUTODIN), which was a message
passing communications system. Throughout my military
career, I had a variety of experiences that included
Windows, Unix, and proprietary systems. An interesting
highlight included a North Atlantic Treaty Organization
(NATO) assignment where I participated in building and
deploying a new Command and Control System. Before
retirement from the US Air Force, I was a supervisor for one
of the data processing centers in Cheyenne Mountain in
Colorado Springs, CO. My time in the Air Force was a
wonderful career that I look back upon with satisfaction.
However, I eventually became eligible for retirement and was
restless to transition to civilian life.
When I joined Corporate America in April 2000, my first job
was as a software developer for Qwest Communications in
Denver, CO. My original intent was to begin a new career and
this was a perfect fit, where I could leverage my years of
communications experience. This all changed on the 4th of
July 2000 (one of my favorite holidays) when I was browsing
the Internet and caught an announcement, where Microsoft had
announced their new programming language, C#. There was
something special about this language and Microsoft's .NET
initiative that impressed me so much that I started the C#
Station web site that very day. I had no idea what I would
do with the site, but it was there as a single main page
with a link to that C# Language announcement. As I spent the
next couple of weeks pulling resources and doing research,
the Microsoft Professional Developers Conference (PDC) came
and they announced the release of the .NET Framework SDK,
which I downloaded immediately and started cranking out
code. As more people gained interest, there were many
questions, but little formal guidance on how to program with
these new tools. Having years of experience with mentoring
and training, it was just natural to reach out to others
with assistance. So, I began sharing my experience with
articles on C# Station. This evolved into a formal C#
tutorial, which many people throughout the world have used
over the last few years to get their start with C#
programming. Today there are many very good sites dedicated
to .NET and C# Station is simply one of many.
Back then (in 2000), C# Station stood out because there
wasn't much else available. I'm not quite sure how it
happened, but shortly after the PDC, a few publishers found
interest in my work and a couple began talking to me about
the possibility of writing a book. I followed through and
eventually wrote my first book, C# Unleashed, with Sams
Publishing. Though writing a book is very difficult, I found
it to be a wonderful experience and will always be thankful
to the people, such as Shelly Kronzek, who made this
opportunity available for me.
While writing C# Unleashed, I became restless with corporate
life. No, I wasn't laid off – I resigned by my own choice.
So, I started Mayo Software Consulting, Inc. as an
initiative to take more control over my life and career.
What this move did was provide me with the flexibility and
freedom to find out where writing would take me and look for
the type of work that I want to do. During this time, I
started a few writing projects, but for one reason or
another they didn't work out. In April 2003, Borland's
initiative to create a new C# IDE caught my eye. Since I
already had a good experience working with Sams, I contacted
them with this idea. Things jelled quickly because they
liked my proposal and had a new book series, Kick Start that
they felt would be a good fit for me and my idea. On October
8th, 2003, C#Builder Kick Start was published, which was
just a couple weeks ago.
Q: Describe your latest book? Who should read this book and
what background should they have to get the greatest value
from it? Why would someone want to carefully study this
book—what makes this book particularly unique and special?
A: The title, C#Builder Kick Start, conjures up images of a
book about an IDE, but once you open it, you'll find much
more between the cover. My goal was not to simply enumerate
tool options and mechanics, but bring language, platform,
and tools into focus so readers may be proficient at
building .NET applications using C#Builder. Most people can
run a wizard, type some code, and press a button to run a
program, so I left things like this up to the reader to
figure out. Instead, I talked about the .NET platform, the
CLR, the C# programming language, and integrated these
things with how the reader could be productive programming
in this environment with C#Builder.
It is my firm belief that presenting simple facts is not
enough. The value to the reader is in understanding the
foundations their environment is based upon. They need to
know "Why?" They need an explanation of the right way to do
things and an understanding of the associated trade-offs.
C#Builder Kick Start, at 416 pages, packs a lot of
information in a small space that helps developers get
started in the right direction with building .NET
applications with C#Builder.
Q: What advantages can be gained by using C#Builder?
A: C#Builder has several benefits that make it an attractive
tool that increases developer productivity. Firstly, it has
all the productivity tools that allow a developer to create
almost any type of .NET application, including Windows
Forms, ASP.NET, ADO.NET, Web Services, and more. The reason
I say "nearly" is because C#Builder doesn't support mobile
development and lacks the Compact Framework, which is
included in Visual Studio .NET. Additionally, C#Builder has
great integration with other tools such as UML Modeling,
Caliber RM Requirements Manager, Star Team Code Management,
OptimizeIt Profiler, and others. These tools fit an
integrated concept that Borland has where tools and process
meet, called Application Lifecycle Management (ALM). Another
tool that ships with C#Builder Architect is Enterprise Core
Objects (ECO) which is a runtime modeling tool. Besides
being a very nice IDE for the developer, through ALM,
C#Builder offers features that are attractive to architects
Q: Which features of the C# language do you find most useful
and where do you still see that it’s lacking?
A: I like C# because it is both simple and powerful as an
object-oriented language. It feels very natural to C, C++,
and Java programmers, all languages I have experience with
from pre-C# days. Because of its type safety and component
oriented features as first class concepts, C# is a
productive, best-of-class language for present and future
There isn't much I don't like about C# because it allows me
to do everything I want. The next version of C# will
introduce new features that I am looking forward to.
Q: How will C# evolve in the future?
A: Microsoft has announced four significant new features to
C# v2.0 that will help developers be more productive:
generics, iterators, partial types, and anonymous methods.
Generics are forms of parameterized type that help
developers build type safe data structures. They're similar
to Templates in C++ but have a different implementation,
performance characteristics and additional features.
Iterators will help make it easier for developers to create
enumerations over a type. Today, with IEnumerable types,
things can get tricky, but iterators will simplify this.
Partial types will be valuable for use with development
tools and people doing code generation. They are essentially
a way to split a type into pieces where each part can reside
in different files and contribute members to a single type.
Anonymous methods allow developers to declare methods
in-line, when they are assigned to delegates and events. It
will simplify event handling and produce less code.
Q: Where do Windows Forms, ADO.NET, and ASP.NET fit into the
A: Windows Forms, ADO.NET, and ASP.NET are Microsoft
framework libraries that are a part of the .NET Base Class
Library (BCL). These libraries are often the primary reasons
that developers are attracted to .NET in the first place.
Once a developer is drawn to .NET by one of these
technologies, they soon learn the advantages of a managed
development environment that the Common Language Runtime (CLR)
Windows Forms is a client GUI technology for building
Windows applications. It is object-oriented and abstracts
the chores of creating Windows applications that have
traditionally been built with Win32 or MFC.
ADO.NET is a new Database interface library that offers more
capability than its predecessors. In addition to traditional
connected data processing, it offers a disconnected model
that is scalable and well-suited for Internet and mobile
ASP.NET is the most productive environment there is for
building Web Applications. You have an object-oriented
model, separation of presentation from logic with
code-behind pages, the ability to create re-usable controls,
and Caching. The ASP.NET framework is also the supporting
technology for Microsoft's XML Web Services. Because of the
extensible infrastructure of the ASP.NET model, you can bet
there will be many new features in future versions.
A discussion of Microsoft technologies is just not complete
without talking about the CLR. Once developers see the
productivity they gain with framework libraries such as
Windows Forms, ADO.NET, and ASP.NET, many begin to realize
the benefits of working in the managed environment. More
specifically, it is the CLR that provides automatic memory
management, garbage collection, loading, versioning, and
security. These are all concepts that were conceived in
unison with the CLR and the .NET framework. Although the CLR
provides behind-the-scenes services, it is a major reason
why software engineers should consider .NET as their
development environment of choice.
Q: Can you comment on UML, debugging, and project
A: While the industry is migrating toward managed
environments as superior platforms for building
applications, we're at the threshold of a new generation in
software development with a concept known as Model Driven
Architecture (MDA). Those who want more background on MDA
http://www.omg.org. In the spirit of MDA, Borland has
packaged a new runtime modeling tool called Enterprise Core
Objects (ECO) with C#Builder Architect. ECO uses UML as its
language to build models that are translated directly to C#
code. While UML is the ubiquitous language for today's
analysis and design, it is also the language being used to
describe the MDA meta-model, which is the basis of the OMG's
current modeling theory.
I like to think of MDA as the next generation in programming
because of the way it raises the level of abstraction in the
software development process. Think of how computer
languages moved from machine language to assemblers and then
from assemblers to high-level languages. At each step, the
lower level language became the plumbing and the higher
level language became the artifact. Along the same lines,
future development will be done with modeling languages and
the C# code we write today will become the plumbing and the
modeling language will be the artifact. Going back to the
modeling language, today it is UML. However, we must
consider whether UML will be descriptive enough for all
modeling tasks. Sure, it is evolving, but will it evolve
with bolted on capability or will a new modeling language
supersede it with first-class capabilities, just as C# was
conceived with first-class component capabilities built-in?
On the subject of debugging, we have some very sophisticated
debugging environments in our IDE's today, for which I'm
very thankful, but there are concepts that exist and are
evolving in practice that are integral to the debugging
process. My view goes back to the old saying "An ounce of
prevention is worth a pound of cure." Looking at the forms
of bug prevention, there are traditional good software
engineering practices, environment support, and development
tools. Using proactive techniques decreases reliance upon
fixing code after it has reached testing, or much worse,
In software engineering, we know that catching bugs closer
to the requirements gathering phase is cheaper than finding
them in test or production. A good process (pick your
favorite) is the single best approach to debugging.
A managed environment, such as that provided by the CLR,
eliminates entire classes of bugs by its very nature. For
example, with memory management and automated garbage
collection, C# developers avoid the numerous bugs caused by
pointers in unmanaged C++. The CLR offers other services
that collectively enable developers to write more robust,
secure, and verifiable software.
Another notable evolution in the art of debugging is third
party tool support in areas such as unit testing and
profiling. Adherence to unit testing with automated tools
makes a developer's code more robust and helps developers to
construct more reliable components. Application performance
represents a class of bugs where a program doesn't meet
performance requirements. Profilers help developers identify
and avoid serious bottlenecks in their code as well as
enhancing code performance. Later in the application
lifecycle, testers can use profiling tools to ensure an
application performs appropriately. These tools help
developers find and fix real and potential bugs earlier in
the application lifecycle.
Our IDE's are becoming more sophisticated by including
capabilities to integrate with other tools. I believe the
continued integration between tools and the development
environment will be a very helpful addition to the Project
Q: Please share your little known secrets about the .NET
programming languages and development framework.
A: What I know about .NET is available publicly to anyone
with a desire to seek out the information. Therefore, I have
no real secrets, but perhaps I have pseudo-secrets. Because
there is so much information available, it is impossible for
people to digest it all. My pseudo-secret is recognition of
the productivity gains and services provided by the CLR.
Developers should understand assemblies, which are the .NET
unit of deployment, execution, identity, and versioning, the
fact that assemblies contain self describing meta-data, and
that the CLR uses assembly meta-data to provide advanced
code execution and management. Understanding the services
provided by the CLR is the single greatest advantage to
becoming a successful developer in the .NET environment.
Q: Describe in detail your current work?
A: I'm a consultant specializing in .NET technologies,
serving customers in the Denver, CO area. The project I'm
currently working on is with a company called NSA
http://www.NsaGeotech.com. They have a government
research grant, funded by the Advanced Technology Program
(ATP), for building an application for 3D visualization of
seismic modeling and calibration. I can't say much more
except that we're using Microsoft .NET and it is very
Q: Can you describe future projects, books, and articles?
A: I always have several half-baked irons in the fire, which
may or may not materialize. What you can expect is that I'll
be engaging in more activities that educate developers. I'm
committed to my community site, C# Station, which will
evolve and offer deeper content. I will continue to write,
but am not sure about the form it will take.
Q: Can you make some predictions about specific
technologies, future trends, winners and losers; “killer
A: Looking toward the future, I think several technologies
will be hot: Web Services, Handheld devices, Wireless.
Q: What are the hottest areas in IT? Which skills and
knowledge sets must businesses and IT professionals have to
remain competitive? How will these evolve over time?
A: .NET and Web Services are hot. They're both in their
infancy and have much to offer in the future.
Q: Where do you see yourself in two, five, and ten years?
A: Things in our industry tend to move faster than we can
predict so you have to roll with the changes. At each phase
I expect my business plan to meet or exceed expectations.
You can also expect that as time goes on that I'll be
stepping up to greater challenges, whatever they may be.
Q: Describe your computer setup?
A: Dell Pentium IV, 1Gb memory, 80Gb HD, WinXP Pro, VS.NET
2003 Enterprise Architect, SQL Server, MS-Office Pro,
Q: If you were to do it all over again?
A: The process is nondeterministic. If you change the
inputs, the outputs may not meet specifications. Since I'm
satisfied with the current results, I can't say that
altering inputs would be desirable.
Q: If you were doing this interview, what threequestions would you ask of someone in your position
and what would be your answer?
A: 1) Joe, you talk about the CLR a lot. What is different
from the development you did before .NET and why is it
Think about how code was developed with C++, VB6, or pick a
favourite native unmanaged language before .NET came along.
In C++, you had numerous reliability problems with pointer
bugs and VB6 lacked type safety. The applications were
insecure because anyone could write a virus that attached
itself to code, remaining hidden until the code executed or
a virus checker caught the infection. Another heinous
problem involved code versioning in a situation known as DLL
Hell, where updating code with a new DLL could break
The CLR solves these problems by providing memory
management, relieving the developer from having to use
pointers and manage their own memory. Because .NET
assemblies contain meta-data, the CLR can verify code and
guarantee that it is secure. Viruses may attach to a .NET
assembly, but the CLR will not run the code. The CLR also
manages code access security where security is based on code
and not just on the role the user of the code is granted,
which is more secure in Internet scenarios. The CLR also
supports versioning, where separate assemblies can run
side-by-side, eliminating the vagaries of DLL Hell. The CLR
makes the developer more productive.
2) I want to begin development with .NET, but I have a lot
of legacy code and it would be expensive and painful to
rewrite it all. Is .NET an all-or-none proposition or is
there a way to preserve my investment?
Fortunately the .NET designers recognized your concerns and
built in a few Interop capabilities that allow developers to
preserve their investment and offer a clean strategy for
migrating code to the managed .NET environment as finances
and time permits. The available Interop options are Platform
Invocation Services (P/Invoke), COM Interop, It Just Works
(IJW), and Web Services.
P/Invoke allows programs to efficiently call into Win32 Dlls.
This is a good way to call Win32 API's for OS specific
behaviour. COM Interop offers a two-way method of
communicating with COM components. You can make calls from
.NET to COM or from COM to .NET components. IJW is a
capability of managed C++ to communicate with traditional
unmanaged C++. You can wrap legacy code with Managed C++ and
call the wrapper from C#. Web Services offer a way to
provide communication between various computer systems in a
platform independent manner.
3) From what I understand, with .NET I can use any language
I want. What are the advantages of C# over other languages?
You are correct, you can use any of the other .NET languages
(I believe the list is approximately 30 and growing) and
accomplish anything that you can with C#. The choice of
language largely comes down to personal preference. If you
feel comfortable in a language then go for it. Since I have
experience developing in C, C++, and Java, C# was a natural
progression (pardon the pun). Another point to consider is
job availability and salary. In June 2003, Visual Studio
Magazine published an article with a salary survey
indicating the C# developers earned more money. Besides the
money, C# is a very nice language to develop with.
Q: Joe, with your long and successful career, you have
shared a lot of accumulated wisdom and knowledge with our
audience. Thank you!
A: You're very welcome.