Partners

 

 

 

 

 

 

 

 

 

 

Careers: Interviews
CLR Expert: Kevin Burton

This week, Stephen Ibaraki, I.S.P., has an exclusive interview with Kevin Burton. Kevin is a widely known and respected senior software design engineer, C++ veteran, and an international expert in COM development, who has authored many articles and edited books on C# [C sharp]. His most recent book, “.NET Common Language Runtime Unleashed,” [CLR] by SAMS is unique in that it focuses on the CLR which is the heart of .NET [dot NET].


Discussion:
Q: Kevin, it’s a real privilege to have you with us. Thank you for agreeing to this interview and sharing your incredible 20 years of experiences, and considerable skills with our audience.
A: You are very generous in your introduction and I thank you for this interview opportunity. I hope my comments are helpful.


Q: You have a most interesting career. Can you highlight the key decisions you made in your career, and how did you got into programming?
A: Actually I got into programming quite by accident. I have enjoyed programming ever since my high school days when I would write programs in BASIC or Z80 assembly on my dad’s TRS-80. I took some courses in numerical analysis that I thoroughly enjoyed but at that time computer science was a field that attracted the students that could not handle the math in electrical engineering so I was not interested in a degree in computer science. My first job involved designing a complex communications assembly which depended on a real-time executive written by a consultant. Towards the end of the project and before the actual integration of the software and the hardware the consultant in charge of the software (firmware) was let go. Of course the integration failed and I was charged with figuring out the code and making it work. My next job with the flight controls group and Northrop was more software development and from then on I exclusively had jobs doing software development.

I guess some of the key decisions that lead me into programming were the classes that I took while in college, the decision to take over the project from a software (firmware) consultant, and the decision to stay in that line of work.


Q: Describe your relationship with Microsoft’s .NET CLR team and what development tips/pointers you can pass on from this interaction?
A: After acting as a technical editor for Sam’s Publishing I was asked at first to co-author then to author a book on the CLR. Although I had a good deal of experience with beta versions of the .NET Framework I felt that I did not have the requisite “insider” knowledge required to author a book on the subject, so Sam’s arranged for me to spend two weeks on the Microsoft campus interviewing members of the CLR team. Microsoft arranged for me to have an office and with great cooperation from the members of the CLR team I was able to come away with a much better idea of the inner workings of the CLR than I had before.

Every part of the CLR has a champion. Each area security, interop, reflection, performance, networking, exceptions, threading, remoting, etc. has a person responsible for that feature in the CLR. After that initial contact I continually received support and tips from the CLR team members. They were very willing to help and more than willing to offer tips and suggestions regarding their particular area of expertise. And all of this help was essentially on their own time, and believe me, with a major release of the product that you have been working on for two plus years looming, that time was not very abundant.

This is an extremely bright and dedicated group of developers. Within the .NET CLR development team there are some of the brightest and most dedicated software engineers certainly that I have ever met. Not only that they were just nice people. If there was one tip that I could offer from my interaction with them is that the .NET CLR has been developed by some of the brightest minds and with some of the best resources available. Any time that I started to wonder why was something done the way it was, there was always a very good reason.


Q: What prompted you to write your most recent book on the CLR, what did you learn from the experience, and what would you do differently?
A: I was first drawn to the .NET Framework because I could see from the first beta that I installed that this was a new way to develop software. I spent a good deal of time coming up to speed on the whole .NET initiative. To add fuel to my interest I was asked to be a technical editor for C# Unleashed. After a few months working as a technical editor I was asked if I would consider authoring a book. I jumped at the chance because I could see a great opportunity to learn more about the CLR and .NET. I found that the company that I work for (Avid Broadcast) became very interested in .NET and my efforts on the book and “work” dovetailed very nicely.

What did I learn from the experience? I have gained a very solid understanding of the CLR and the .NET Framework. I have also built some relationships with some very key people at Microsoft that have been very helpful in my climb up the learning curve.

What would I do different? In hindsight I would have tried to keep a more steady pace during the writing process. There was so much work to do that I would sometimes “rest”. Or I would be stumped on a particular topic and I would be waiting for a response. Overall it would have been better to switch gears to a different topic during these “lull” periods. This amounts to not much more than better time management.


Q: Can you provide us with five or more tips from your book and why Dennis Angeline, Lead Program Manager for Microsoft, says, “…Regardless of the language you use or the type of application you’re building, this book offers a rare insight into how your application and the CLR operate. It offers a perspective that nearly every developer using the CLR will find invaluable.”
A: I think you are really asking what I consider to be the most important services that the CLR offers. It would be hard to prioritize these because the level of importance of any given service depends on the application using it, but here are what I consider the key services of the CLR and how you can get the most out of each:

1. Resource management. Because of the type-safety inherent in most .NET applications along with the garbage collection provided by the CLR a whole class of memory management problems has disappeared. .NET. Programmers no longer need to spend inordinate amount of time checking for buffer overflow, memory leaks, using memory after it has been freed, etc. Handling non-memory resources and unmanaged resources are a little bit more complicated but there is a recommended pattern to handle these situations that I outline in my book using IDispose.

2. Interop. It does not matter how great the new development environment is if it requires the old to be discarded it will not be adopted very readily. There is a huge installed based of COM applications and arguably even a bigger base of Win32 DLL’s. The interop layer that has been built into the .NET Framework allows for a very seamless integration between COM and Win32 DLL’s. The important point here is that the interop layer maintains model consistency. For example the COM programmers are used to receiving error information in the form of HRESULTs, .NET on the other hand exclusively handles errors with exceptions. The interop layer automatically transforms exceptions into HRESULTs and HRESULTs into exceptions. There are many more examples but the overriding theme is model consistency. The .NET programmer can treat the COM component as a .NET object and the COM programmer sees the .NET object as either another COM object or interface.

3. Types and Values. I spend the first five chapters of the book describing the type information, the intermediate language instructions, the assembly format, and how the CLR manages each of these. The organization and infrastructure of the CLR is fascinating and yields great dividends in understanding how your application is executed. In my mind this is a step above (in terms of abstraction) traditional object-oriented programming and hence requires some “getting used to”. But, as you will see much of what the CLR provides (language independence, security, resource management, meta data, etc.) is in large part due to the Common Type System (CTS) and the Common Language Specification (CLS).

4. Security. A managed program has the unique position to regulate security within an application. The CLR has the chance to check for security violations with each function call. This is a tremendous service for an application to take advantage of.

5. Reflection. From remoting to simple serialization to debugging the metadata that is associated with a program can be used so many ways to ease the development cycle and make a program more understandable and maintainable.


Q: What future book titles and articles can we expect from you?
A: I am currently working as a co-author on a book on .NET performance with a member of the Microsoft CLR team.


Q: You have a long computing history filled with considerable and valuable experiences. Can you describe some of the projects that you have worked on and what tips you can pass on?
A: I am sure that I am dating myself but I started out in the computing field with programs written on cards and was fascinated by the advances to teletype printers and VT100’s. My first programming job was with the Bureau of Reclamation overseeing a number of hydroelectric power generation plants. The bureau used a CYBER computer located in Denver and we connected to it via a 1200 baud modem. The main language that we developed programs with was FORTRAN. After I graduated I worked with Hughes Aircraft on a spread spectrum communications system for the Navy. After that was canceled I worked with Northup on the Stealth Bomber in the flight controls group. From there I move into the commercial arena to develop CAD applications for printed circuit design. It was with this job that I started to use ‘C’ extensively in developing programs. Virtual memory was still not really part of main stream applications so I spent a good deal of time worrying about the memory used by my application. ‘C’ became more and more popular as I worked on inspection systems for printed circuit boards and applications tied to a scanning electron microscope. My first exposure to C++ was as I was developing image processing algorithms for various applications for an image processing consultation firm. I continued to firm up my knowledge of object-oriented design and C++ as I assisted in the development of a TV news broadcast automation system. And it was here that I am spear-heading the effort to build the next generation news room automation system using the .NET Framework.

So this does not really describe one or two projects but it describes how I arrived at where I am now. And that is the tip that I would like to pass on. It hasn’t been that long and I have seen at least three major shifts in the way software is developed. It started with the crude methods of punch cards and VT100 terminals. You had all the control that you wanted and just enough rope to hang yourself. Then I saw a move to larger and larger disks and memory getting cheaper and cheaper. Virtual memory, paging, and swapping became everyday terms in a programmers dialog. Then came object-oriented design which at first was rather faddish but soon reached the main stream as the preferred way to develop software. Now there is .NET. Each successive development improves the quality of the software and the productivity of the programmer. But with each new shift it required an adjustment by the programmer that wanted to keep up. .NET requires such an adjustment but based on experience it will not be the last change. I can’t predict what the next shift will be but I can almost guarantee there will be another. In a very popular book “Who Moved My Cheese” the author uses the allegory of two little people and two mice who come one day to find that the cheese that they depended on to be there day to day was moved. It was gone. The mice almost instinctively immediately started the search for new cheese, while the little people bemoaned the fact that they were being “picked” on and insisted on spending unproductive time asking questions like “Why me?” I think with each shift that I mentioned above the cheese was moved. .NET has definitely moved the “cheese”. The response will be how the good programmers are differentiated. And the good programmers need to be aware that the “cheese” will be moved again. You can count on it.


Q: What are the ten top traps or pitfalls that developers should be wary of and avoid?
A: Again I have not taken the time to order these but here are some pitfalls that come to mind:

1. Don’t rely on intuition to tune an application. Instead devise specific tests, measure, tune and re-measure. I can’t tell you how many times I have tried to optimize a function only to find that the changes that I made only accounted for a small percentage of the performance.

2. Up front, seek to use good tools. Learn how to get the most out of these tools. It is so expensive to develop software; it is well worth the cost for a good editor, compiler, debugger, etc. to provide the best development environment possible. Similarly it is important that you learn to use the tools available to the maximum benefit. For example, spend time learning how you can automate some of your routine tasks with the development tools, program so that the compiler works with you to help detect problems, use the tools available to characterize the software what you are building (complexity, line count, etc.).

3. Be careful that what you develop is what you are expected to develop. While there is reward for innovation if it takes the place of what you are paid to develop it loses its luster.

4. As a corollary to the above point make sure that you understand and your customers (it may be your boss, marketing, etc.) what the software you are developing will and won’t do. No body likes surprises. If it is unclear what you are doing make sure that all concerned know that it is unclear.

5. Avoid the temptation to go off in a corner, develop something and “unveil” it. Network with your co-workers and interact with customers. If you are the local expert make sure that you take some time to mentor.

6. Try not to become too specialized. Talk to your boss about rotating the types of work you do.

7. Keep you eyes open and your ears to the ground. Stay abreast of the current technology. Invest in good books and magazines.

8. Be prepared to swallow your pride and “buy” a solution if needs be. Any good developer can implement just about anything but at certain points it is better to use a canned solution than spending the time developing your own. Avoid the “not invented here” syndrome.

9. Remember that the software that you develop will more than likely outlast you. In other words it is highly likely that someone else will inherit your code. Make sure the code is well documented, well commented, and modularized so that its functionality can be easily grasped.

10. Have fun. Software development can be demanding at times but the sense of accomplishment when a piece of software functions as it should is what has kept me in the business. I enjoy developing good software.


Q: Can you share your 10 leading career tips for those thinking of getting into the computing field?
A: I don’t know if I can come up with 10 but here are some tips that I hope will be useful. No order but these are some tips that I might pass on:

1. Each job that I have had involved an initial period of doing tasks that I was not that excited about. But following that period I found I niche in the company that I enjoyed and was beneficial to the company and me. I think that it is essential that each person find that spot in what ever job they are in.

2. Stay focused. Work smart and be prepared to work long hours every so often. That is just the nature of the software development business. But at the same time continually look for signs that you are getting burned out.

3. Be aware of industry trends.

4. Make sure that your company is keeping up. Companies rarely just shut their doors overnight without some warning signs. Listen to the heartbeat of your company. I have been in big companies and small companies. When it comes to a layoff or downsizing the size of the company does not seem to matter.

5. Make sure you regularly invest in yourself. If your company cannot turn itself on a dime (and most can’t) you may need to bide your time by becoming familiar with leading edge technology on your own. Then when the company is ready to invest in new development you will be there to assist in the effort.

6. Insist on who you work for to regularly invest in training. This shows that the company is interested in you. The company should realize that this will instill greater loyalty and greatly reduce “burn out”.

7. Avoid specialization. This is not good for you or the company. Often one person becomes the expert in a particular area of the company. It is easier and short term less costly for the company to maintain one expert, as tasks that pertain to that area are most easily and quickly done by that person. Also the transfer of knowledge is not cheap or quick. It is not good for you because if the company should be downsized, sold, or simply go bankrupt (it does happen) you may possess a lot of knowledge about an area that no one is interested in (Where would someone go who has experience in the fine art of reading paper tape?). It is not good for the company because even though a person seems diligent and very much involved in their area they could be becoming burned out and up and leave. A reliable feature now becomes a single point of failure and may force the company to remove or redevelop that feature.

8. If it does not exist already then start a grassroots effort to build some methodology to your teams development efforts. Set up some sort of source control, insist on requirements documents, do what you can to strengthen QA and testing, automate your build process, start a process to review software design, etc. Doing these kinds of things though frustrating at first, will help improve the software that you develop [and] the software quality of your team.


Q: You have a reputation for staying on top of the latest technologies. What are the hottest topics that all IT professionals must know to be successful in the short term and long term?
A: I am partial to .NET right now but I would think that it is crucial for all IT professionals to become familiar with the whole idea of a managed code environment. Java, VB, and various functional languages have had the vision of a managed code environment for some time now. I think that the .NET Framework manages code better that most any other environment but I think it is still too soon to see who is the dominant player. IT professionals need to understand the issues involved with managed code as far as garbage collection, security, meta-data, interoperability, etc. Don Box made the statement that he could foresee the day when all code either ran under the JVM or the CLR. If that is even partially true then I think you can see that it is pretty important to understand each of the managed environments.

Next in importance are the concepts behind SOAP, XML, and Web services. XPath, XQuery, XLink, and XSLT associated with XML are key technologies in their infancy. It is very important that IT professionals become familiar with the standards and the tools available to implement the standards. I feel that we will see the move from traditional relational databases to relational-object databases that recognize XML as a first class data type. Already the big three (SQL Server, DB2, and Oracle) have announced plans to introduce an XML database of sorts. For the foreseeable future standard relational databases will dominate as FORTRAN dominated the programming world, particularly in numerical software, but eventually we will see more and more XML databases.


Q: What would be your recommended top ten references for the serious developer?
A: I would go to the following Web sites:
• http://msdn.microsoft.com
• http://www.gotdotnet.com
• http://csharptoday.com
• http://www.asptoday.com
• http://www.dotnetjunkies.com

Also, I would recommend the DOTNET newsgroup sponsored by DevelopMentor. Whenever possible try to listen to Don Box’s various keynote addresses. Subscribe to MSDN, C++ Journal, and Dr. Dobbs as well as “free” magazines to professionals such as eWeek. Unfortunately the shelf life of books is not very long. Currently I seem to be referring to the following:

.NET Common Language Runtime Unleashed, Kevin Burton (mine)
Applied Microsoft .NET Framework Programming, Jeffrey Richter
A Programmer's Introduction to C#, Eric Gunnerson
XSLT Programmer's Reference, Michael Kay
ASP.NET Unleashed, Stephen Walther
.NET and COM: The Complete Interoperability Guide, Adam Nathan


Q: You have so many accomplishments. What do you do to relax?
A: Actually far too few accomplishments. It might be more appropriate to ask, what takes up my “free” time. Well I am married and have children so my family takes up a good bit of my time. We have a dog that loves to go on walks. I like to run. I have completed six marathons, two being the Boston Marathon. My PR is 3:10 and I hope to break 3 hours next year. So between work, a book, and my free time activities I really don’t “relax” a lot, but I do enjoy life.


Q: If you were doing this interview, what two questions would you ask of someone in your position and what would be your answers?
A: I think that you have already asked what I would ask. I would try to gain some insight as to where they saw the software industry going and how they planned to keep up. I think you have asked those questions already.


Q: It’s a blank slate, what added comments would you like to give to enterprise corporations and organizations?
A: It is important to realize that your employees are your most valuable asset. Every dollar spent in training and educating each employee is well spent. Even if the training for some reason cannot be applied your employee will long remember the investment that the company made in them. Good employees are smart employees and smart employees are good employees.

Q: Kevin, thank you for sharing your valuable insights with us today and we look forward to reading your books, and articles.
A: Again, thank you for this opportunity


RETURN TO INTERVIEW LIST

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


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