[ed: this interview was performed in late 2002, when I was still an independent consultant]
Chris, what is your own history – the way to the top of IT-world?
I can't claim to be "the top of the IT-world." I'd argue that BillG still out ranks me at the very least. : ) As far as my history, I started programming pretty much full-time with an Apple II+ when I was 12 years old. I still went to high school, of course, but that was secondary to figuring out what I needed to do to bend the computer to my will, which is what I've been doing in the 21 years since. I started with Applesoft BASIC and moving my way through Unix, the Mac OSes, Pascal, Fortran, C, Win32, C++, MFC, ATL, COM, Jscript, Visual Basic and now .NET and C#. Along the way, I've worked at start-ups and giant corporations, shipped and maintained bunches of commercial and free software, produced several books and short-course, thrown three conferences, been awarded a patent, consulted for dozens of companies, answered hundreds of developer questions, given talks to thousands of developers and composed hundreds of thousands of lines of code, most of which is cataloged or referred to at sellsbrothers.com.
How did you get your experience?
I got my experience by trying all kinds of different things. Except working at Microsoft, which I consider a unique experience all its own, I believe that I've done most every kind of technical thing that can be done, including coding, training, writing, speaking and consulting, start-ups, independence and big companies. Along the way, I've had some successes, but far more mistakes. The key to making the most of any experience is not being afraid to make mistakes and to learn from them.
Where did you work? What is your current place of work?
My first programming job was dbase for the Plant Pathology department at the University of Minnesota (that was tracking *real* bugs : ). After that, I did telephony programming from Spanlink Communications and then for Intel (which lead to my first real book). After getting frustrated with the large corporate bureaucracy, I found my way to DevelopMentor, where I spent 7 very happy years going back and forth between employee and contractor, instructor and director of software. Currently I'm an independent doing consulting, writing and speaking on .NET, including some new services that I'm launching in 2003.
What are you doing (developing and writing) now?
I find that I work best when I've got a bunch of things going at once, especially when I'm collaborating. At the moment, I'm working on four books, directing the development of a couple of source-available projects, including Genghis (http://www.genghisgroup.com), expanding my business into new services, writing for MSDN Magazine, adding ref-counting to Rotor, speaking at a few conferences, adding various features to my web site and doing a couple of projects that I can't even talk about yet, all of which are done in conjunction with my friends and colleagues.
The new services, available on my web site, include a problem solving service for subscribers, a remote WinForms conference that is ideal for international developers that can't easily travel, collections of several years of my work on CD, including a free copy of my WinForms book when it's available, and a small group mentoring meeting.
Could you tell more about the books, which you are writing now?
I'm currently working on four books. The first is Windows Forms for C# Programmers, which is my first solo book for a while. It's about using Windows Forms to build stand-alone and connected applications in this age of Intranets and the Internet. The second is Windows Forms for VB.NET Programmers, which is being ported from C# by Justin Gehtland.
The third book is Mastering Visual Studio .NET, which is being written by Ian Griffiths and Jon Flanders. It's about getting the most out of VS.NET and extending it when you need it to do more.
The fourth book is ATL Internals, 2/e, which is being re-written for ATL7, including ATL Server, by Kirk Fertitta.
You'll also want to check out Essential .NET by Don Box. I worked with Don to make that book the definitive work on the .NET CLR and Don did a fabulous job. You'll also want to read Pragmatic ADO.NET, by Shawn Wildermuth. I gave extensive feedback on that book and wrote the forward, so I'm hardly unbiased, but it really does a good job covering ADO.NET issues in connected world.
How long do you work every day? Do you have any free time?
Well, as I write this, it's 8:38pm on a Friday night, so that probably answers a lot of your question. : ) However, I try to keep my working hours to 60/week so that I can have evenings and weekends free with my wife and the Sells brothers, i.e. my two sons.
The glory is often greater than the real power and knowledge. What do you know really well? Your opinion.
Just a year ago, I would have said that I knew C++, ATL and COM pretty much as well as anyone, but lately I try to block that stuff. After a couple of years of working with .NET, both with Don on Essential .NET and as an instructor, I know the core of the CLR pretty well, including the relatively few ins and outs of C# and VB.NET. Of course, after working on the VS.NET and WinForms books, I know those pretty well. My whole web site is ASP.NET, so that's near the top of my knowledge as well. Luckily, since I like to learn, the .NET Framework is vast and I doubt if I'll ever be able to learn it all, even if Microsoft wasn't continuing to add to it at a feverish pace.
Why is your life connected only with Microsoft technologies? Why is it not Sun or Borland?
Microsoft builds the best stuff.
You are the only man who doesn't praise .NET. Why? May be you are disappointed?
.NET's not perfect, although as a whole, it's better than anything else for most development tasks. However, I miss things from the unmanaged world, like deterministic finalization, MFC-esce application framework features and templates. Luckily, .NET is expandable in all kinds of ways that let me scratch my particular itches.
For example, to let folks mess with the low-level bits of .NET, Microsoft has made the source code to a Common Language Infrastructure (CLI) implementation available called Rotor. With this and some funding from Microsoft, I'm adding ref-counting into the CLI at the JIT level, allowing me to have the best of both garbage collection for memory management and ref-counting for other kinds of resources.
Along these same lines, I miss the lack of C++ style templates, which is also available in beta form for Rotor. However, I need templates, specifically parameterized collection classes, in my shipping CLR work, so I can't just do Rotor. For those cases, I built CollectionGen, which is a custom tool add-in to VS.NET that will take parameters specified in an XML file and generates C# or VB.NET code to implement type-safe collection classes.
Moving up the stack even further, the Genghis project is all about adding the application features that MFC programmers are going to miss moving to .NET, including things like document management, support for building wizards, command line parsing and tons of other things. This project has more than a dozen contributors and is growing all the time to add in the features that the WinForms team forgot.
Also, while I love XML's capabilities and several of the technologies built on top of it, most notably XPath, I'm not a big fan of any XML API ever invented, including any of those built into .NET, or any of the raw XML languages for manipulating XML, e.g. XSLT (although XQuery looks very promising). I don't blame .NET for this, but I want to have a combination of the features and expressiveness of XML and OO and not have to pick between the two. So far my favorite is to use the command line tool "xsd.exe" with the "/classes" argument, passing in an XSD and getting out a .NET class that knows how to read and write instances of the XML documents described by the XSD. I even built support for it into VS.NET via XsdClassesGen, another custom tool that will generate the serialization code each time the XSD changes.
Of course, that's not all of my complaints about .NET. For example, in my consulting work, the major issue I see client after client reinventing is some kind of strategy for going back and forth between databases and objects. There are 3rd party tools that support this (including DeKlarit, which I've done some work with), but nothing built into .NET provides this service. Along the same lines, ADO.NET lacks a really good story for database transparency, so it's very hard to write database code that can work across database vendors.
Another thing that I think is holding .NET back is the adoption by VB6 programmers. The VS.Net language is hugely different than VB6 for no particular reason that I understand. If the Eiffel guys can implement multiple inheritance and Design by Contract on top of .NET, I think that the VB team could have implemented Let and Set. The reticence of VB programmers to move to new technologies, especially those that require a porting effort instead of a recompile, have slowed down .NET's adoption unnecessarily, in my opinion.
And finally (for now : ), I wish that Microsoft would mention that .NET is great for just about everything you'd do in Windows, not just this new thing called "web services." I'm a huge fan of web services and I think they represent a major break-through, but most folks aren't going to do them for a while if at all, so if .NET is perceived as being just about web services, that keeps people from understanding just how general-purpose and wonderful .NET really is.
Could you give examples of situations when companies ask you to consult them?
My goal in consulting is always to make sure that companies have the information they need to make the correct use of .NET, even during their first significant project. Based on that goal, I perform a number of different consulting services.
As an example, a lot of times I'll help a company get up to speed on .NET, both with introductory training or consulting on their specific issues. A large part of that is helping them transition their existing code base to take advantage of the new features in the managed world of .NET, but not giving up the advantages of an existing, working unmanaged code base. I also do a lot of reviews, both of designs and code, to make sure that a project is making the correct use of .NET.
Other times, I'll write reviews of nearly complete or just shipped products. This not only gives the product a review from an experienced developer talking to other developers, but also points out issues early so that they can be fixed before they become customer support problems. Along these same lines, for companies with products that I really like, I often become an evangelist.
Another service that I've been providing for the last year is mentoring. The idea is that a company sponsors an individual developer who's at the top of their game and may not few peers in their company. I push them into new directions and challenge their entrenched ways of thinking, keeping them fresh and engaged on their projects.
Finally, in 2003, I'm offering two new consulting services. The first is a small group of only ten developers and architects, also at the top in their respective companies. They come together in a single room for two days and we discuss their common and specific issues as a group, while still giving each developer 1-1 time with me on their specific issues. It's called the .NET War College and it's all about making sure that developers and architects get the right information on .NET from real practitioners.
The other new consulting service I'm offering in 2003 is Ask The Wonk, which is an online subscriber service for asking those difficult questions as well as seeing answers to questions asked by fellow subscribers. Again, the goal is to be able to get people the information that they need to make correct use of .NET.
Once you called .NET the "multi-language Java that acknowledges the platform" and C# the "Java with enums". Do you think .NET is not better than Java? Compare them, please.
.NET is better than Java in every way I can think of except for real cross-platform capability and maturity. In my experience, Java is nearly unusable for Windows programmers unless they get to write all of their code from scratch. The interop story of .NET is 100x as full-featured as it is in Java for getting to existing code, which represents most of what Windows programmers have to do in the real-world. Also, while Java theoretically supports multiple languages for different kinds of problems and different kinds of programmers, .NET supports it for real with multiple, commercial grade languages, as well as a bunch of research languages.
As for Java. How do you feel, why Java haven't become a standard?
Java hasn't become a standard because Sun wasn't willing to give up control. Sun tried to be their own standards body and it just didn't work.
Some people think that Microsoft forgets C++ playing with C#, but C++ is still widely used language. Could you comment it?
Microsoft has absolutely *not* forgotten C++. Most shrink-wrap applications are C++ because it's the smallest, tightest way to build apps and requires the least support from the OS itself. There is tons of existing C++ code in the world and Microsoft has implemented pure magic in the managed extensions for C++. MC++ allows you to flip a compiler switch, recompile your C++ code and begin producing and consuming .NET types immediately, all without changing your unmanaged types. In addition, the MC++ IJW (It Just Works) technology provides the lowest overhead interop layer between managed and unmanaged code, making it the best way to bridge the gap between the two technologies. Also, VS.NET 2003 provides a C++ compiler that compiles unmanaged C++ code down to smaller and faster code than ever before, while increasing ANSI C++ compliance to the highest level of any C++ compiler that I know of. I can't say enough good things about Microsoft's continued support for C++. I don't know of anyone doing more.
Can we say that .NET has moved COM to the background? Is COM a perspective technology today?
.NET is a replacement technology. It's meant to roll up all the APIs to Windows developed over the last decade, including Win32, MFC, Ruby (VB's object model), ATL, COM, DirectX and every other API they've ever invented into a consistent object model equally accessible to all .NET developers. In other words, Microsoft means for everyone and everything to switch to .NET. For those cases where .NET hasn't yet replaced an API, e.g. extending the shell, .NET provides COM and Win32 interop so that you can still build your software with .NET. For those cases where it's not yet possible to use .NET, because of memory usage, deployment or existing code base reasons, COM and other unmanaged APIs are still an option, but those will fall out of use increasingly as time goes on. I wouldn't write any new code in anything but .NET if I could help it.
How do you feel the future of MFC in current .NET-world?
MFC will continue to exist while there is existing MFC code to maintain and extend. Like COM, I don't see it being a good place to write new code if I can help it.
Could you make a prognosis about feature evolution of IT world?
I see .NET taking off in 2003 as Microsoft fixes the marketing message and more VB6 programmers take the plunge. Also, I see more real web services making their way into the world, mostly as a way for close partners to optimize the communication needed for their business relationship. This will make way for commercial web services for hire in 2004.
Windows dominates the software industry today, but do you think its perceived flaws (cost, constant upgrades, stability) will make Linux more popular in the future. What is your opinion on the future of operating systems?
No software is perfect, not Windows and not Linux. Windows is the most attacked software in the history of software for two reasons: 1) it's the most used and 2) Microsoft has a lot of detractors. In terms of mindshare and marketshare, I see Windows and Linux being chief competitors for a long time to come, although I also see Mac OS X having an influence, if for no other reason than to give Microsoft more ideas for future versions of Windows.
Have you read Jeffrey Richter's or Jeff Prosise's book about .NET?
I've read early drafts of both Jeffs' books and own the release copies of both, but I've been so busy writing and participating in writing my own .NET books, courses and materials, that I admit to falling behind on my reading of others'.
Have you ever got proposals from Microsoft to become their employee?
Why have you rejected them?
I believe that .NET needs people that don't work at Microsoft to provide an independent opinion of what's real and what's not about the .NET hype. Since most of my friends have already been hired by Microsoft, e.g. Don Box, Tim Ewald, Martin Gudgin, Yasser Shohoud, et cetera, I guess the duty of being the best independent .NET resource falls to me. : )
What event could name the most seriuos in your life?
The most serious events in my life are all personal events and not technical in nature. It's the things that really matter that give us perspective when we're wrapped up in work-related issues.
Would you like to say our readers anything? (They are coders, developers, architects and etc.)
The IT industry is at a financial and morale low right now, but it will get better. Hang in there and keep doing things the best way that you know how.