Careers: Interviews
C# & .NET Expert Christian Nagel

This week, Stephen Ibaraki, I.S.P., has an exclusive interview with Christian Nagel. Christian is a highly respected authority on C#, and application development and author of, “Beginning C#” which is intended for beginners or relatively inexperienced programmers, e.g. programmers who write scripts for ASP development. This book explains the basic of C# programming and gives an in-depth look into object oriented programming plus discusses the basics of Windows programming, dynamic web pages, and web services. He has co-authored two additional books: “Professional C# Web Services” and “Data Centric .NET Programming with C#.” Professional C# Web Services covers both ASP.NET Web Services as well as .NET Remoting. Data Centric .NET Programming with C# provides information to create data-centric applications and covers ADO.NET, XML, Active Directory, Messaging Services, etc. As a reviewer, Stephen finds all of Christian’s books of the highest quality. Stephen conducted this interview with Christian who resides in Austria and works in Curriculum Management Software Development for Global Knowledge and as MSDN Regional Director Austria.

*****
Q: First of all, thank you Christian for agreeing to this interview. What does your family think about your career as a noted author?

A: My wife fully supports all my activities. We both are workaholics and our motto is “full speed ahead”.


Q: For your latest book on C# and .NET development, you were on tight deadline. Please expand on the topics you were forced to delay?

A: There was a tight deadline, but it didn’t influence the topics covered in the book. Beginning C# has all chapters useful for a beginner doing software development with C# and the .NET Framework. We not only cover the syntax of C# and an introduction to object oriented programming, but also major topics of the .NET framework like creating rich client applications, database access, Web services, and so on.
Of course I had to reduce and to delay some of my other activities, e.g. I reduced the time that I spent for Kart racing to a large extent.


Q: Christian, 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: All what you say is correct: .NET is a new way to build distributed applications, desktop applications, mobile applications, and it is very different from classic COM. But the major issue with .NET is that the time required to program applications can be reduced. Today it is very important to get solutions fast to the market, if the development cycle takes too long, the product is already old and cannot be sold anymore.

We have to reduce the time dealing with technology issues and focusing on the solution. .NET helps a lot with these issues; no matter if desktop, distributed, mobile, Web, etc applications are to be developed.


Q: What is C#?

A: C# is a new component-oriented programming language that was designed for the .NET Framework. There are many similarities with C++ and Java, but there are also many new ideas added that help with component development.


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: First the syntax of C# or any other programming language and concepts of object orientation must be learned before going into the .NET base class libraries. The chapters of the book Beginning C# are very well ordered in so far that the reader learns about the C# syntax, gets grips with object orientation, and digs into the classes of the .NET framework. Not only reading the book, but also doing the exercises that complete every chapter helps a lot learning the class libraries. Besides reading the book, the courses at Global Knowledge lead to a profound understanding of .NET.


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 note expert on application development?

A: Now I have been working with different systems like PDP11, VMS, Unix, Windows, different technologies like X-Windows, Motif, DCE, DCOM, MTS, … for many years. Before writing books I have created special courses for Global Knowledge, and I was a reviewer for a lot of ATL / COM titles at Wrox Press.


Q: Can you share your 20 leading tips for those thinking of getting into the computing field? Can you describe your role with your company and how you plan to shape the company one year and two years into the future, and in the long term?

A: I don’t have 20 tips, but here are a few I regard as really important:
The most important tip is that it is awfully necessary to have an irresistible urge for diving into the computing field. If you want to be successful, don’t ever think about a 40 hours job. In this field you have to be open-minded for new things which include continuous learning.

Be aware of your talents. There is an immense broad spectrum of talents needed in the computing field. Graphical talents are required for the user interface design for both Web and Windows applications, interaction with customers, writing talents, mathematically thinking… You shouldn’t be afraid of trying something out; from the beginning it is often not clear what your talents really are.

At Global Knowledge I’m trainer and Curriculum Manager for the software development business in Central Europe. Global Knowledge is the world’s largest independent IT training and certification company offering more than 700 courses in more than 60 international locations. Every year, Global Knowledge trains more than 300.000 IT professionals on the leading edge technologies which their companies need to stay competitive. In Austria we are very successful in teaching software development; during the last years we succeeded in growing this business line dramatically. For the next years I plan to extend this success to Germany and Switzerland as well.


Q: You have a reputation for being plugged into the stream of computing consciousness about where it’s going now and in the long term. You’ve also done a lot of research. Can you comment on the studies that you’ve performed, what you have learned, and your experiences? Where is technology today and where is it going?

A: I am happy that I started development on the PDP11 system where I created assembler programs to test devices. That way I’ve learned how a system really works. Later I’ve created applications on VMS and UNIX systems, before I turned to Microsoft technologies. Here I used C++, OLE, COM, COM+, etc before I learned .NET in the summer of 2000.

Looking back to that way, the applications that are developed become more and more complex. This is only possible by adding abstractions so that the focus can be put more and more on the solution instead of the technology. One abstraction was done with virtual memory and threads. Managed code adds another important layer where the runtime deals with a lot of issues that we had to deal before. These abstractions make it possible to create more complex applications in a shorter time.


Q: Can you comment on the integration of mainframe, Unix, and Windows-based technologies and how they all fit in large, complex, enterprise environments?

A: Let’s set a step backward. We have CORBA, DCOM, and EJB for object communication. CORBA from the OMG has the problem that different implementations couldn’t be well integrated even if they were running on the same platform. Microsoft founded the Active Group that built DCOM not only for Windows, but also for UNIX hosts and mainframes. But don’t expect a mainframe administrator to install some Microsoft technology on the host. Sun has EJB where Java is a requirement. All these technologies have their market place, but we cannot expect that one of these technologies will get 100% market share and all the others disappear.

With XML Web Services we have a way to integrate these different technologies. The SOAP protocol used by XML Web Services is a standard initiated by Microsoft where many different vendors – including Sun - agreed to. XML Web Services is the way to go to integrate different platforms.


Q: What are your views on top four programming environments and their future?

A: Instead of programming environments I want to put my focus on languages.

As for me C++ will not be that important as it is today. It will still be used to create device drivers, but the importance for creating business solutions will drop. Java still has the advantage of being platform independent. .NET still needs some time to meet such a requirement. For development on Windows systems, .NET already has a lot of advantages and is the way to go. I don’t think that C# will be the only important language on this platform. Visual Basic is used by a lot of programmers nowadays. Working with .NET they have to learn many new things. For example Visual Basic 6 didn’t support full object oriented programming, this is now possible with Visual Basic .NET. In the future I’m convinced that .NET programming will be made easier for Visual Basic .NET programmers with some designer extensions and design time controls. I believe that C# will be the major language on this new platform. It is not only newly designed to have an extremely good fit for .NET, it is also made available as a standard (see http://www.ecma.ch). C# will not only be available for Windows systems, but for other platforms as well. Therefore C# will be the most important language in the future. All other languages I didn’t talk about will not play a major role.


Q: What are your views on XML and its future?

A: XML is an important technology that laid the foundation for most of the new technologies we see today. A lot of standards based on XML that are necessary for the rich business applications still must be defined, e.g. the Global XML Web Services Architecture (GXA) that includes reliable messaging, transactions, security, referral, licensing… for web services.


Q: EAI, CRM, B2B are exploding? What are your views about these in related areas for the current and future marketplace?

A: Exploding? Of course there are some products in these areas that are really hot-sellers. But there is more need for EAI, CRM, B2B products; I still see a lot of growth. The problem I have with existing products is that they are too expensive and complex for smaller companies. .NET makes it a lot easier to build EAI, CRM, and B2B products, so I see great opportunities for cheaper and not so complex solutions.


Q: For those relatively new in the computing field and for seasoned veterans, which 10 areas should they target for future study, what are the high-growth areas, and can you provide specific advice?

A: Web services are the most important part to look into. This does not only mean to know XML, SOAP, UDDI…, but also future infrastructure protocols and SOAP modules where transactions, security, licensing will be added to web services.
Many web applications that are now based on Active Server Pages, Perl, Java Servlets and Java Server Pages will be written with ASP.NET because the time to market can be reduced. So Web Forms with ASP.NET is another area that should be targeted for future study.

Small devices will get more and more important. With hand-held devices Microsoft outperformed the competition again. The .NET compact framework will play an important role. To support such devices across the Internet, and even small cellular phones, the Mobile Internet Toolkit should be looked at.
Last but not least I expect the Tablet PC with pen based input to become a huge success.


Q: What changes do you see for the future of computing, conducting business, and the use of the Internet?

A: The Internet already changed our lives a lot, but so far we have only seen the beginning. Information at your fingertips will become reality. Today we can be contacted by mobile phones no matter where we are. In the future it will be completely normal to have access to information at any place with any device.


Q: You are highly regarded and I have no hesitation in recommending your book for the seasoned professional. Please describe your book, how and where they are available? How did you get involved in being an author and what would be your 20 biggest tips drawn from the book on C sharp? What additional books are you planning in the near and far term? What would you do different if you started again, having gone through this authoring experience over the years?

A: The book Beginning C# is intended for beginners or relatively inexperienced programmers, e.g. programmers who wrote scripts for ASP development. This book explains the basic of C# programming and shows an in-depth look into object oriented programming. We also discuss the basics of Windows programming, dynamic web pages, and web services.

This book can be bought in book stores, or on the Web, e.g. http://www.amazon.com, or http://www.bookpool.com.

I have co-authored two books that are released soon: Professional C# Web Services and Data Centric .NET Programming with C#. Professional C# Web Services covers both ASP.NET Web Services as well as .NET Remoting. Data Centric .NET Programming with C# provides information to create data-centric applications and covers ADO.NET, XML, Active Directory, Messaging Services, etc. At this stage I cannot comment on my future plans, but you will read it soon.

With this authoring experience I have now I would not change a lot. Maybe I would start writing books earlier in my career path.


Q: What would be your recommended top ten references for the serious developer?

A:
 
Q: It’s a blank slate, what added comments would you like to give to enterprise corporations and organizations?

A: Often I have seen project teams that used a good technology, but they failed. Either the technology was used in a wrong way, or they simply chose the wrong technology for their problem. Many hours work can be reduced by using the correct tool in a correct way. The problem why these teams failed was because of missing knowledge. Investment in good training and consulting pays off easily!


Here are some interview questions with a focused technical bent where I would be interested in your perspective:

1. Can you discuss .NET?

A: In the 70s our programs were written using machine code using physical memory interrupt handling for specific CPU’s. Using virtual memory, threads and user-mode code added an abstraction to the program development that made it much easier to write applications. Managed code adds another abstraction layer to application development. The .NET compilers produce Microsoft IL code that can be managed by the runtime. The runtime can check the code at runtime for uninitialized variables, unsafe casts, and deals with security, exceptions, memory allocations, etc.


2. What’s the main benefit of .NET?

A: The .NET platform is a robust and secure execution environment that dramatically simplifies application development and also simplifies deployment and management.


3. Give an overview of.NET?

A: There are many aspects of .NET to look at. With .NET we not only talk about the .NET platform. Microsoft server products are grouped in category .NET Enterprise Server. Upcoming web services are called .NET My Services. The successor of the Windows 2000 Server is the Windows .NET Server. And of course we have the .NET platform that is available for nearly all Microsoft operating systems, and can also be implemented by different manufacturers as it was sent for standardization. The essential parts of all these .NET products are web services.
But let’s look at applications written for the .NET platform. A .NET application consists of assemblies. A .NET compiler creates assemblies that include Microsoft IL code with metadata that describes the assembly. When the application is started, the IL code is translated to native code before it runs. It is also possible to generate native code at installation time.


4. Define the Common Type System and .NET base class libraries?

A: The .NET runtime was designed to support multiple programming languages. The Common Type System defines rules how data types can be defined and such used from different languages.

A: The .NET base class library has many multi-purpose classes that can be used for any application types, e.g. collection and thread classes.


5. Overview the Common Language Specification and the Common Language Runtime?

A: COM already supported multiple programming languages. With COM it is possible to create a component with C++, and use this component from Visual Basic. Using COM we always had to develop the component in a way that it could be used by the target language. Each language has different characteristics, so a scripting language can only use IDispatch interfaces and cannot ask for interfaces other from the default interface. That’s different with .NET. The Common Language Specification defines exactly what is needed to support other languages. It is still possible that we use the features of a language to some extent which cannot be used by other languages. By setting an attribute CLSCompliant which means that we are compliant with the Common Language Specification it is guaranteed that all other languages that support .NET can use this component.


6. Does C++ worth with .NET?

A: Microsoft extended C++ in the ANSI spirit to support .NET. .NET classes can be used from C++, and it is possible to create .NET types with C++.
The advantage of Managed C++ compared to C# or Visual Basic .NET is that this language can be used to mix native and managed code – not only within a program, but also within a class or within a method. If there is an existent C++ class library, Managed C++ is the best way to make this available for .NET.


7. Where does IL or Intermediate Language code come into play with .NET?

A: The .NET Managed Compilers produce Microsoft IL code that is translated to native code when the program is started, or at installation time. Contrary to the Java byte code, the Microsoft IL code is not designed to be interpreted; it must be compiled to native code.


8. Overview both metadata and reflection in .NET?

A: An assembly is described by its metadata that is stored in the assembly itself. Using custom attributes it is possible to store custom information in an assembly that can be used at design- or runtime by reading the metadata information using .NET reflection. Examples where such attributes are used are XML serialization to define the XML elements and attributes how an object should be stored, web service attributes that define the WSDL information, COM+ attributes, etc.


9. How does a namespace differ from an assembly?

A: The name of an assembly and the namespace are two completely independent concepts. The namespace is used to uniquely identify types. The assembly has a manifest with version, security, and culture information. Classes from the same namespace can be spread across multiple assemblies, and a single assembly can hold classes from different namespaces.


10. Overview private and shared assemblies?

A: With COM all components can be found in the registry where the path of the component can be found. So in principle all COM components are shared. With .NET we differentiate private and shared assemblies. Private assemblies are copied with the application; shared assemblies can be used by multiple applications. With shared assemblies we use a strong name to uniquely identify an assembly. Part of this strong name is the version and a public key.


11. Overview unmanaged code and data?

A: We have to differentiate between managed code and managed data. C# and Visual Basic .NET always produce managed code. The Managed C++ compiler generates both managed and unmanaged (native) code. But this is different from managed data. With C# we can use pointers to access .NET components. Using pointers we have to pay attention that the garbage collector doesn’t move the object where the pointer points to in memory. We have to pin the object to a fixed address. This is where unmanaged data comes into play. Unmanaged data is not managed by the garbage collector.


12. Can .NET work with older software such as the Win32 API and COM?

A: One of the major goals with the design of .NET was the support of legacy software such as Win32 API and COM. There’s no need for a complete rewrite of existing components and libraries. COM and Win32 can be easily used from within .NET. The same way it is possible to use .NET components as COM components in a legacy application.


13. Is there security in .NET?

A: Security is an important built-in concept with .NET. Components can be downloaded from the Internet, started from a network server, etc. .NET security is based on the identity of the code, and can be administratively configured via policies.


14. Overview application deployment in .NET?

A: Components no longer need the registry to store information. Deployment can be as simple as an xcopy. For an application only the assemblies and configuration files must be copied. This doesn’t mean that the Microsoft Installer technology makes no sense anymore. If it should be possible to select product directories and specific features for installation, the Windows Installer adds a lot of features for the installation of Windows applications. How installer packages can be created with Visual Studio .NET can be read in the book Beginning C#.


15. Overview C#?

A: C# is a new language that is designed for .NET. It follows many ideas from C++ and Java, but adds a lot of new features that make it easier to create components.


16. Give us a history of the C#?

A: C played an important role as structural programming language in the 70s. Stroustrup created C++ by extended and adding features for object orientation to the language. The new language C# took the ideas from C++ without the necessity to be compatible with C++ and added features for component programming.


17. How is C# better than traditional C++?

A: With managed code it is no longer necessary to deal with memory leaks, fragmented memory, etc.


18. What can’t you do with C#?

A: You cannot write device drivers with C#.


19. Overview how .NET is superior to using Microsoft Foundation Classes (MFC) and Active Template Library ATL?

A: Writing programs using MFC and ATL you have to know the libraries inside out. Instead of focusing on the problem domain for the solution to be built we have to know the inside of these libraries to a large extent. That’s different with the .NET base classes. They are a lot easier to use, but they are also extendable if they don’t fit the purpose exactly. Another big issue I like to mention is that the .NET classes can be used from any languages. MFC and ATL is built only for C++.


20. Overview System.Object, the common root of all C# objects?

A: Unlike to C++ but similar to Java .NET has one root class. This is the reason why every class supports the methods of the base class System.Object, e.g. ToString() to get the string representation of a class. With the Object class it is also possible that every object can be passed to methods that accept an Object parameter. Useful examples are methods of collection classes that can manage objects of every type. The VARIANT type used with COM is now obsolete.


21. In one sentence how does C# differ from C++?

A: C# adds syntax for a component based approach.


22. What does the preprocessor do in C#?

A: In C++ preprocessor is a heritage of C. With C++ there are a lot of features that make many parts of the preprocessor obsolete; Macros and constants can now be created differently. C++ just paid the price for compatibility with C. Today the preprocessor still is useful to differentiate build versions, e.g. a debug and a release build of the code. For C# a simple version compared to C++ of the preprocessor is available to support different build versions.


23. Overview some complex data structures in C# and compare to C++?

A: C++ really makes no difference between structs and classes. With C# a very useful differentiation was found: structs are value types, where classes are reference types.
Because pointers don’t have the big use in C# as they have in C++, arrays are much more powerful. In C# we have a different syntax for rectangular multi-dimensional and jagged arrays.
Strings are a very complex beast with C++. We have to differentiate ASCII strings, DBCS, Unicode, BSTR, etc. This gets easier with .NET: all the .NET strings are Unicode.


24. Are pointers used in C#?

A: Pointers are an essential language construct with C++, and often pointers are the reason for programming errors. In most applications pointers are no longer needed with C#. But there is a way to use pointers with C# in unsafe code segments. This can be especially useful if some complex methods in legacy DLL’s must be called.


25. Overview value and reference types in C++ and C#?

A: With C++ if a variable is put to the stack or the heap depends on the declaration. Using a pointer and the new operator with C++ results in a reference. C++ does not make any differences with structs and classes. With C# Microsoft found a good way to distinguish between structs and classes. A struct defines a value type, a class a reference type. In contrast to Java we are no longer embarrassed to create custom value types.


26. Overview dynamic memory allocation in C#?

A: With the new operator memory for reference types is allocated on the heap. The garbage collector manages the memory. It is not necessary that allocated objects must be deleted because this is the job of the garbage collector. The garbage collector can reclaim the memory if there is no longer a reference to the object. To boost the performance of the garbage collector it uses a generational model to differentiate the objects based on their lifetime. For short-lived objects the probability is higher that they are not needed anymore on the next run compared to long-lived objects.


27. Overview garbage collection in C#?

A: There is less need to implement destructors as dynamically allocated memory will be freed automatically. However if unmanaged resources are used there is some code necessary that should run when the object is destroyed. Here it is important to pay attention to the behavior of the garbage collector: the time when garbage collection happens is not defined, the destructor code can be run by a different thread, and the order of objects destructed is not defined. Finalization code should only be implemented if there are some unmanaged resources that must be freed. Typically if a destructor is added to the class, also the interface IDisposable should be implemented to make it possible to release the unmanaged resources at an earlier time.


28. Overview the difference in inheritance between C# and C++?

A: C# only supports single inheritance with classes, C++ supports multiple inheritance. The rare case where multiple inheritance is useful doesn’t justify the problems multiple inheritance adds.


29. Overview polymorphism in C#?

A: Polymorphism is very similar to C++ with the exception with C# there are more thoughts about versioning because it is not necessary to recompile the derived class if the base class changes. To override a virtual method in a base class the overrides keyword must be used.


Copyright Network Professional Association® 1994-2017. All Rights Reserved.
NPA Privacy Statement