Careers: Interviews
.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 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 and managers.


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 software development.


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 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 them.


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 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, 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 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 Management process.


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 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 interesting work.


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 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, 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.


Suggestions for this page?
Email NPA Web Services: click here

NPA      facebook      LinkedIN logo
© Copyright Network Professional Association® 1994-2024 All Rights Reserved.
NPA Privacy Statement