.NET authority and author of C# Station web site
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
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
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
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
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 and managers.
Q: Which features of the
C# language do you find most useful and where do you still see that
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 software
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
Q: How will C# evolve in
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
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
Q: Where do Windows
Forms, ADO.NET, and ASP.NET fit into the development process?
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) gives
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 application scenarios.
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 management?
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 can visit
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
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, production.
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
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
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 Management process.
Q: Please share your
little known secrets about the .NET programming languages and
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
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 Geotechnical Services,
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 apps?”
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
A: .NET and Web Services
are hot. They're both in their infancy and have much to offer in the
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
A: Dell Pentium IV, 1Gb
memory, 80Gb HD, WinXP Pro, VS.NET 2003 Enterprise Architect, SQL
Server, MS-Office Pro, C#Builder Architect.
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 three questions 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 significant?
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 existing code.
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.