CIPS CONNECTIONSINTERVIEWS by STEPHEN IBARAKI, I.S.P.
Widely Regarded, Internationally Renowned Developer on: .NET, XML, UML, C++, Java, ASP, Perl, Internet, Web Services
This week, Stephen Ibaraki, I.S.P., has an exclusive interview with the internationally renowned developer, speaker, and author, Kate Gregory.
Kate Gregory is the author of numerous books for Que Books, including Microsoft Visual C++ .NET 2003 Kick Start and four editions of Special Edition Using Visual C++. She teaches (and writes courses on) .NET, XML, UML, C++, Java, and the Internet. She is also in demand as an expert speaker, with numerous cross-Canada tours for Microsoft Canada, and has spoken at DevDays, TechEd USA, and TechEd Europe, amongst others. Kate is the Microsoft Regional Director for Toronto, a founding sponsor of the Toronto .NET Users Group (www.torontoug.net), a founding partner of Gregory Consulting Limited (www.gregcons.com), and a member of adjunct faculty at Trent University in Peterborough.
Gregory Consulting Limited has been providing consulting and development services throughout North America since 1986. Based in Peterborough, Ontario, the firm has grown to five people and has clients throughout North America. Gregory Consulting specializes in software development with leading-edge technologies, integration projects, and technology transfer. They also provide training, mentoring, and technical writing services. Typical projects involve Microsoft .NET, XML, Web Services, Visual C++, Visual Basic, ASP, Java, and Perl.
Q: Kate, you are held in such high regard for your remarkable history in software development; we are very fortunate to have you with us. Thank you!
A: Youíre welcome, and thank you for your interest in my work.
Q: How did you get your start in computing? Detail the many lessons you have learned.
A: I did an undergraduate degree in Chemical Engineering at the University of Waterloo, and as part of their co-op program I had jobs in industry; I started programming on those job assignments and discovered a knack for it. I began to realize that I wanted to do more than just the usual engineering assignment of the early 80ís, but did not want to be exclusively a programmer. I was in the lucky position of being able to define the job I wanted, because I had two work terms with the same employer and they were willing to find a good place for me. When I left that job to begin graduate studies, I defined my program of study and my research so that I could combine engineering and programming. By the time I had completed my Ph.D., I had also started a consulting firm with my husband that has enabled me to continue my cross-disciplinary ways to the present day.
The lessons I see looking back are all about noticing opportunities and taking them. One opportunity was when the Human Resources officer I was writing software for said, ďif you could have whatever job you wanted here when you graduated, what would it be?Ē He was not just making conversation; when I told him what I wanted, he made it happen and I got just the job I wanted. Another was spotting a recruiting ad in the grad student common room for a full-time employee in Calgary, and writing to them offering to do the work on contract remotely from Toronto. I was confident they would want that: the number of people graduating with a Ph.D. in Chemical Engineering who were solid C++ programmers was very small in 1993. I might well have been the only one. It worked out very well for our fledgling consulting firm. A third opportunity was the posting on Usenet asking for proposals for a book about Usenet. I put some effort in, wrote a proposal, and while that proposal was not accepted it did lead to my first book. Later, someone called me and asked me to speak at a local conference I had never heard of. I knew you had to speak at conferences and such to promote a book, so I did it. And at that conference someone heard me speak and came and asked me to speak at another conference, and so it went. Thatís been the story all these years.
If youíre good, and you work hard, opportunities will arise. Someone will think ďwow, sheís good, we have to find a way to get her on board.Ē But taking those opportunities isnít always my first impulse. I have to remember to rise to them, or to ask for something a little out of the ordinary, or to take people at their word when they ask me what I want.
Q: What valuable experiences can you share from your speaking engagements at DevDays, TechEd USA, and TechEd Europe?
A: Speaking at Microsoft events is tremendous fun. I really enjoy speaking to crowds; the larger, the better. Iíve spoken to about 2000 people at Toronto events. At TechEd USA the largest room holds all 9000 attendees: someday Iíd like to speak to that room. The thing is, you work your way up to the big stage. I started with a one-hour talk with one demo, based on one chapter in a book I had written, speaking to maybe 20 people. However, that led to another opportunity, and when I did well there, it led to another and another. The key is to enjoy it, and to do it well.
Itís not possible to over-rehearse. Especially when youíre new to speaking, say for the first two or three years, you really need to rehearse a lot. My rehearsal process is very consistent. I go through the slides and make some notes Ė once if I wrote the slides, two or three times if someone else is providing them to me. I might note something like ďdonít go into detail here, thereís a slide following on each bullet of this page.Ē I try hard to avoid that moment in a live talk where you say ďah, Iíve already covered everything on this slide, earlier.Ē Itís so much better to say things when people have the visual aid to back it up, not three slides too soon. Then after Iíve been through the slides, I rehearse the demos. I scribble all over the demo script making sure Iíve got everything just perfect, and I know the sorts of things that can go wrong if you skip a step, or click OK too soon, and how to fix them quickly. I might do the demos ten times if theyíre tricky. And I donít just sit and type, I rehearse showing the audience the code, showing them the results, talking about what Iím doing, that sort of thing. During this process, I am making sure that all the fonts in the tools Iíll be using are nice and big, I have a good colour scheme in all the tools, and so on. Iím making excellent notes for resetting and restarting the demos.
Once the basics are in place, I have a timing rehearsal. I do the whole thing in one piece, and make notes on timing. If Iím significantly long or short, I decide what to do about it: donít explain something so much, or drop a slide, or paste code into the demo instead of typing it. Sometimes I have to add material, but thatís rare; Iím more likely to have too much to say than not enough. If I need to, Iíll do another timing run. All this preparation is why my talks go so well.
Big conferences, with thousands of attendees, are wonderful exposure for any speaker. But more importantly, they are a chance to meet your heroes on a relatively even footing; to hang out in the speakerís lounge with people you have seen and admired on stage. Any conference is a tremendous source of opportunities Ė book deals, more conferences, consulting gigs Ė and itís important to take full advantage of being there. Iíve done the fly in, talk, fly out thing and I wonít do it again. I want to have the impromptu dinner with a bunch of folks who wrote the product Iím using, or three people from my publisher, or whoever else I didnít yet know I wanted to meet. And to have fun Ė conferences are a lot of fun once your talk is over!
Q: Describe your duties as the Microsoft Regional Director for Toronto.
A: Briefly, I represent Microsoft to developers, and developers to Microsoft. And I do this without being a Microsoft employee. I get plenty of opportunities to speak on topics that developers care about, and I listen to the questions and comments I get, there and elsewhere. I also listen to developers that I meet in my business, and to my clients. I pass back what Iíve heard Ė that a particular product is too expensive for a particular group of users, or that something is hard to learn, or doesnít work very well. If itís your job to write a compiler, or some other development tool, how can you know what most users of that tool are looking for? At the same time, I get a tremendous amount of information from Microsoft, information about current and upcoming products that makes me a valuable resource in my community. Iím in a lot of beta programs, and some alphas, I get invited to some special presentations Ė I get all the information I can absorb.
Q: Describe your current role and major projects.
A: Iím a partner in Gregory Consulting Limited, and that means I take care of my clients and my staff. I do a fair amount of project management, sales, and planning, but I do get to write code from time to time. I do a lot of our design and architecture, too. Weíre helping firms adopt .NET technology right now, and itís making some things possible that we couldnít have imagined five years ago. Intranets, especially built around Sharepoint, are helping firms deal with the information overload. Web Services and BizTalk are simplifying application integration projects. And ASP.NET is making web programming far more productive than it used to be. Some of the recent work weíve taken live includes a content management system for a small municipality that lets city staff update the website quickly without knowing any HTML; an intranet for a mining company with locations throughout the world that simplifies document exchange, scheduling events, and even finding phone numbers; and a paperwork-support system that helps accounting staff find and compare authorized signatures quickly and easily without giving up the flexibility of their paper-based system. Weíve also been doing some mentoring projects, and I think I enjoy those most of all. People learn a new technique or a new way of working while at the same time their project is designed or their new architecture is settled or half their code is written. Itís tremendous to be part of that.
Q: Where do you see yourself and your company in five years?
A: Iíd like to see us about the same size we are now. Iíve been through the times of doubling every year, and I donít care to go through that again. It was stressful on the way up, and horrible on the way down. I am working towards longer contracts and a little more predictability as the market for consulting improves. And of course, weíll all have learned some new technologies by then, and opened some more doors to possibilities that canít be implemented today. Iím looking forward to that: I like new problems to solve and I love telling clients ďwe can do that!Ē
Q: What prompted you to start writing?
A: An opportunity presented itself. As a high-schooler I had been convinced I would be a writer, meaning a fiction writer, but I hadnít considered technical writing. Of course I wrote manuals and documentation Ė anyone who can write clearly soon gets asked to do the writing on each project Ė but a book didnít occur to me. When I learned someone wanted a book on a topic I knew really well, I decided to take the opportunity. I had wonderful editors, not just for things like grammar and spelling but more importantly for how to structure a whole book and how to plan your work.
Q: As an experienced writer, please share your most valuable writing tips.
A: Thereís a quote Iím probably mangling which says no-one likes writing but everyone likes having written. The most valuable writing tip is that you just have to write. Put your fingers on the keyboard and do it. If you have a strong outline, you canít really be blocked in the sense of not knowing what to do next. The outline says youíre going to explain what a database is, then what ADO.NET is, then set up the sample, and so on. So you do that. Sometimes I canít think of a decent sample idea. I deal with that by adding descriptions of the samples to the outline whenever they occur to me.†
My other tip, and itís a good one, is not to stop at a natural stopping point. Say you have just finished a chapter, or just finished a section. The temptation is to stop there. Instead I keep going, using the momentum of feeling good about finishing something, for another half an hour or so. Then I stop right in the middle of a paragraph or at least of a section. Perhaps Iíve just written a sentence thatís going to introduce a list of some kind. Thatís where I stop. When I come back to it, getting started is easy. Thereís no big inertia to overcome as there might be starting a whole new chapter from a blank page. I just need to write that already-introduced list, finish describing that pasted-in code, or pull together a concluding paragraph. Thereís nothing intimidating in that. And then youíre off and running and keep can keep going.
Q: In your extensive travels as an expert in computing, you must have experienced many humorous eventsóplease share two stories.
A: Iíll spare you the usual ďstupid usersĒ story Ė weíve probably all heard them all anyway. I had a great deal of fun at TechEd USA 2003 being part of the ďborrowingĒ of a life-sized cardboard figure of Juval Lowy, a California Regional Director, by Ė well, letís just say another RD did the actual taking. We took the cardboard fellow to the hotel, briefing meetings, the RD party, karaoke, and so much more. Lots of us got involved planning situations in which the cardboard Juval could be photographed. He had almost as busy a Tech Ed as we did Ė and I loved the way Juval ďstole himself backĒ. It was a multi-day gag and involved many people, which is probably vital to any funny time.
I also enjoy the ďsmall worldĒ aspect of this business. My mother, Pat Cross, is a software quality consultant and trainer, and so our business circles sometimes overlap. Most notably, we both train for the same Toronto firm from time to time. Since we donít have the same last name, not everyone we meet knows our relationship. One mutual acquaintance of ours was trying to impress her with how well he knew me and how far back we went Ė and ended up asking her ďso, how long have you known Kate Gregory?Ē The best part of this story is that almost every time I tell it in a group, someone gasps ďPat Cross is your mother?Ē while ignoring the rest of the story. I donít know why, but people donít seem to think geekiness can run in a family.
Q: Provide your viewpoints on the major technologies today and where you see them in the future. For example: XML, UML, Web services, the Internet, Java vs C#, VB, C++, and other ones that you may wish to comment on.
A: Iíve already mentioned that the .NET technologies are making things possible that we just couldnít do before. Theyíre making other things easier and more affordable, which means that projects are happening now that would not have been approved in the past. Iíve been through three huge changes in the development world: first the rise of the PC, then everyone noticing the Internet, then XML. Each has ďchanged everythingĒ for those of us who solve business problems with software, and each wave have been marvelous to be part of. Web services are changing the way we make software and are especially useful with merged companies and other application integration challenges.
I donít get too caught up in language fights. The number of things that can only be done in one particular language gets smaller every day. I think itís good for people to know several programming languages, because each language carries its own idioms and its own ways of thinking, and it stretches your mind to be exposed to more ways of thinking. I am pleased to see Managed C++ finding its niche as the premiere interop language. You know, people used to ask me ďwill Java kill C++?Ē and now they ask ďwill C# kill C++?Ē or ďwill C# kill Java?Ē My answer is always, ďdid C++ kill Cobol?Ē Languages can co-exist and each serves their purpose. Each is important to those who have taken the trouble to learn it, and who have a library of working code written in that language. Thatís why the .NET Interop story is so important, whether itís language interop, COM interop, or any of the other myriad ways to access your legacy from the ďnew world.Ē
As far as future trends for these technologies, XML will become even more important, that much is clear to me. Language choice will become less relevant. UML will continue to gain acceptance Ė people convert to it and Iíve yet to meet anyone who has stopped using it. Web services have yet to reach their potential as a tool for stranger-to-stranger communication and I think we will see growth in that area for sure.
Q: Youíre an acknowledged guru. Give your detailed thoughts on Microsoftís Longhorn and Yukon?
A: I am really excited by what I have seen so far. The integration of managed code into more and more of the work developers have to do is going to be very helpful. At the same time, there are already questions arising about where to draw boundaries, which layer your calculations or validations should live in, and so on Ė that means mentors, architects, and gurus will still have plenty of work to do. I love what I have seen of Indigo and Avalon, and at the same time, I see lots of training opportunities because developers are going to have to learn how to do these things.
Q: You have spoken at major conferences so can understand the pros and cons of attending. If IT professionals could only choose two to attend, which ones would be your pick for the top two and why?
A: Assuming travel costs are not an issue, I would say TechEd and the PDC. I choose TechEd because of the size. When you have 6000 attendees, you have a lot of little niche topics that can be covered. There are things that only 1 in 100 attendees care about at all, and only when you have over 5000 attendees can you justify a talk on those tiny topics. Going to a huge conference increases your chances of spotting a talk on something thatís really important to you. It also raises the chances that you can meet an associate there: more of the people you know are likely to be going too. Itís a fun time socially if youíre going to bump into people you went to school with, people you used to work with, clients, vendors, and so on. It amazes me that with so many people there, I am constantly just bumping into people I know, just walking past each other in the convention centre.†
Do I learn anything new at TechEd? Of course I do Ė you canít know everything about your industry. Sometimes the best talks are the ones you go to almost by accident Ė like the one I went to in 1999 that described ďhow code running on a Unix machine can execute a method of a COM component over the InternetĒ Ė something that went on to become Web Services.
In a year where a PDC is held, I go, no questions asked. This is your chance to see what is coming, what things will be like in the future, and whatís most exciting now. Itís also a good place to meet people who are forward-looking and interested in whatís coming next. A lot of the information released at PDC has not been shared before anywhere, even to those of us with a mile-high stack of non-disclosure agreements, beta programs, and relationships with the product team. This is the place to be if you like to learn everything first.
If plane tickets and hotel rooms arenít in your budget, take a look at the conferences scheduled near you and go to the developer-focused one with the largest attendance. I donít bother going to the sorts of conferences that are also about choosing a networking card or how to be a project manager. You need some focus. Then also go to a Microsoft product launch or MSDN tour event when one comes through town. These are generally free and provide good content on Microsoft topics. The speakers are top-notch, too.
Q: What do you see as the major differences between managed and unmanaged C++?
A: Unmanaged C++ is still the same old friend weíve known for so long. It compiles on a variety of platforms, itís not necessarily dependent on a particular operating system or even any libraries beyond the CRT and the STL, and while you have to do all the work yourself, it works everywhere. Managed C++ is taking that syntax, that power and flexibility, and integrating into the CLR so you can have garbage collection, you can use the .NET libraries, you can create components that can be used from VB and C#, you can have all the goodies of the .NET world, but youíre still typing C++. There are some tasks, like setting up custom marshalling for platform invoke, that can really only be done from Managed C++. It bridges the worlds of managed and unmanaged code and provides access to the highest performance forms of interop.
Q: Can you comment on creating test harnesses using the .NET Framework?
A: One of the tiny things that happened with the first release of Visual Studio .NET was that VB programmers could create console applications. And most of them said ďso what?Ē but I was very pleased to see that. A console application is a perfect test harness: a little application that exercises a piece of code. Testing a Windows application or a Web application can be very tedious: click here, fill something in here, click this and then this and then this, at which point this label should display the correct answer. Itís labour-intensive. A console application runs in the Command Prompt (what I still tend to call a DOS box) and it doesnít do any graphics, but it can be a test harness and exercise your code. You can run a console application from a batch file, you can redirect the output to a file and archive it so that you have test results to refer to again later, you can automate big pieces of the process. That saves time and more importantly, it ensures more thorough testing. This sort of thing used to be a ďsecret weaponĒ of experienced C++ programmers Ė we could whip up a console application that would prove the new library worked. Now all the .NET developers can do this Ė and they should.
Q: Provide some background on Windows forms and Web forms.
A: These two libraries, common to all the .NET development languages, provide rapid application development support for Windows applications and Web applications respectively. Both feature standard UI components such as buttons, check boxes, text boxes and so on as well as more complex structures such as data grids, calendars, and so on. Using the same UI components whether you develop in C++, C# or VB reduces everyoneís learning time and helps to create consistent applications. It also provides a consistent experience for users of these applications. And of course in the years to come weíll see these two come closer and closer together in the form of Avalon.
Q: What are your recommendations regarding .NET remoting?
A: .NET Remoting is so much easier than DCOM ever was, and it works well in a variety of situations. Today itís a high-performance approach to two-way client-server work: for example the server can raise a .NET event and the client code can catch it Ė transparently. In some ways, it outshines Web Services for that. But I want to be sure that a project actually needs what Remoting offers before I use Remoting. Thatís because with Indigo coming down the pipe, what we use Remoting for today I will use Web Services for eventually. So if itís a toss-up between the two technologies I will choose Web Services to make future transitions simpler.
Q: Your ideas about Web services and SOA?
A: As Iíve mentioned earlier I think these technologies will change the way we make software and what we make software do. Being able to connect disparate pieces of software through a clearly defined interface, being able to focus on the services that are offered to me and utterly ignore the implementation behind the service, and being able to describe a service in a machine-readable and human-readable way with one file Ė these things canít help but change the state of our art. I am seeing a philosophical shift happening with architects who have been using Web services for a year or two now: they start to see Web services where they might not have seen them before Ė and their applications come together more quickly than they used to. SOA as a way to cross boundaries Ė machine-to-machine, enterprise to enterprise, application to application Ė are a natural extension to that. We wonít be leaving object oriented thinking behind for the way we build the insides of our components, of course.
Q: Comment on creating and using COM components in .NET applications.
A: Using a COM component from a Managed C++ (.NET) application is actually quite a bit simpler than from, say, an MFC application. There are some tricky bits in COM interop, I wonít deny it, but you write so much less ďgooĒ and there is less to worry about. Of course, thatís not the motivating factor. The reason I want to use COM components from my new managed code (C++, VB, or C#) and the reason I want to expose my new .NET objects as though they were COM components is to avoid the giant all-in-one port of a large application to the .NET world. Thanks to interop, I can pick up one part of the application Ė one library, or the user interface, or the back end, and port it over to the .NET world. The rest of the application can stay untouched. Once the port is started, if I picked the right piece to start with, I can begin to gain benefits right away. If I ported the business layer, for example, perhaps I can toss in a Web service that exposes some of that business layer, or perhaps I can build a second UI that uses the same business layer, and the benefits of the .NET world will start to manifest themselves. Over time, Iíll port the rest of the system, shedding interop as I go, until the whole thing is ported. There isnít the giant commitment of spending months and months porting everything and wondering if the new system will work or not.
Q: Provide some thoughts about building DLLs to be used from managed and unmanaged C++.
A: Thanks to a C++-only kind of interop known as It Just Works, ďclassicĒ unmanaged C++ can be called from managed C++ without issues. Building a library to be used from old and new applications doesnít require any special work at all. If the ďclassicĒ code is to be called from VB or C#, you might want to write a little bit of managed C++ to smooth the way. Being able to use your working, tested code from your new applications while still gaining all the benefits of the .NET world is what interop is all about.
Q: What are the compelling reasons why readers should study your recent book, ďMicrosoft Visual C++ .NET 2003 Kick StartĒ?
A: The book is designed to move an experienced C++ programmer quickly into the .NET world. A number of developers are moving to .NET from MFC, some are using a Microsoft environment for the first time, and others have been using C++ libraries other than MFC to develop for Windows. These developers donít need explanations of object-oriented concepts or C++ syntax, nor of the basics of how a Windows application is used. They need to ďhit the ground runningĒ to be able to make working code with Visual C++ .NET 2003. Since Visual C++ .NET can create both managed and unmanaged code, I cover both, and since C++ is the premiere language for interop I cover a lot of interop topics. However, this isnít just an introductory book: I cover remoting, services, and other topics you wonít find in introductory courses or books. My assumption is that the reader is already aware of the basics and wants to see how using this tool can improve their applications or their life as a developer. The pace is fast and I donít use up pages listing options, constants, and other things you could just look up in the online help.
Q: What are the enhancements in Visual C++ .NET 2003?
A: I often call the 2003 release of Visual C++ .NET the ďstill in love with C++Ē release, borrowing the headline of a Stanley Lippman article. The first release of Visual C++ .NET had to achieve some truly amazing things, most notably It Just Works interop, and as a result it didnít have the full slate of ďgoodiesĒ that the VB and C# tools did. In this release there is a visual designer for WinForms, code outlining is on by default, you can generate document web pages, and probably most important of all, the compliance to the C++ standards is phenomenal, about 98%. That means that libraries like Boost, Blitz, and Loki will now compile in Visual C++ .NET 2003 Ė no previous version of Visual C++ was able to handle these libraries. You can write some amazingly fast code with those libraries, and thatís the heritage of C++, after all.
Q: What additional tips can you share from your book?
A: Probably the most important tip is to relax and trust the library. Iíve seen a lot of people writing things the hard way because they are in the habit of ďrolling their ownĒ. We C++ developers are especially vulnerable to this habit. The .NET Base Class Libraries have an incredible amount of code in them Ė collection classes, encryption, communications, XML processing, and so much more. And if you like to Google for examples of how to do something, donít stop at the first example you find. Iíve discovered lots of over-complicated examples written by people who knew one method in a class but werenít aware of the others. If a particular piece of code is ugly and uneven, donít assume life just has to be that way. Maybe it does, but maybe you can find the nicer way if you poke a little harder. Intellisense helps a lot here, showing you what methods and properties are in the object youíve decided to work with.
Q: Provide your predictions about the evolution of hardware and software. Are there any areas we should be watching?
A: Iíve been in this business long enough now that Iíve learned not to predict. I know weíll see something in the next 5-10 years that will change everything. And on our way there weíll see the usual march towards faster, smaller, more ubiquitous. I plan to enjoy the ride, and since I canít entirely keep myself away from predictions, I will be paying a little more attention to small wireless intelligent devices along the way.
Q: Share your top ten study tips for learning Visual C++ .NET programming.
A: 1) Start by knowing C++ as a language. If youíre still not sure when to use . and when to use ->, or what const is, then youíre going to be struggling with that while youíre learning the libraries and the tool.
2) Realize that since the .NET Base Class Libraries, ADO.NET, and so on are common across all programming languages, you can use VB and C# samples to guide your C++ programming.
3) Donít just read, code. Try running any samples you are given, try modifying them a little so they write to a file instead of to the screen, or use a different control on a user interface, or work with some other sample you have that does a different task. Try converting a sample from some other .NET language to C++.
4) Get the original sample working first, as provided, before riffing on it. Some samples donít work. Some are left over from earlier versions, some are just plain wrong. You can bang your head against the wall for a long time assuming youíve made a mistake when you havenít.
5) Read your error messages. Especially in this version, theyíre really helpful. Too many people race off to fix things when they still arenít sure exactly what the problem is.
6) Use the tool to its fullest. For example, if you get a compiler error, double-click it to go to the problem line of code: donít waste your time opening the file and paging through it yourself.
7) Let Intellisense help you. In C++ itís relatively unobtrusive, and doesnít come up as quickly as in VB. You can bring it up yourself, along with parameter tips. Check the Edit, Intellisense submenu and note the keyboard shortcuts.
8) Set yourself a goal and a path, and decide what to ignore. Maybe you donít need to deal with data access just yet, or you want to write Windows applications and youíre going to ignore ASP.NET at the start. That lets you focus your resources on what youíre trying to learn.
9) Read everything you can find. Books, the articles in the MSDN library (on your CD or DVD,) online columns and articles, paper magazines, blogs, you name it. If you donít understand it, move on Ė it will be around to read again later. Just remember that some people are not good at explaining things, and yet they write articles and columns. Itís not always that youíre not ready for the topic yet.
10) Pace yourself. The .NET world is enormous. You can get productive very quickly, but you wonít be an expert for a long time. Thatís OK: software development isnít going anywhere.
Q: What are the ten most compelling issues facing technology professionals today and in the future? How can they be resolved?
A: Oh my, if I knew that I wouldnít need to buy lottery tickets. Still, Iíll pick out a few.
1) Privacy. People are starting to really care about what you store and whether youíre storing it safely. The encryption support in the .NET library is one-step towards making this manageable for developers but the thought involved in designing applications that respect privacy is non-trivial.
2) Human scalability. Iím not referring here to throwing more RAM or CPU at a problem, but rather to whether itís OK for ten or a hundred applications to make the assumptions so many applications make. How are you imposing on your users instead of helping them? Why do you get away with that? What will happen when all the applications your users rely on impose on them like that? For example, giving everyone their own ID and password in your application may seem harmless, but users who need to remember ten or twenty of these get fed up. Better to leverage Windows security: itís quicker and easier for you and for your users too.
3) Security, security, security. Everyone gets attacked someday. Learn how to make your applications secure, learn how to use the support that is there. And donít stop learning because this is a moving target.
4) Small devices. We get used to writing applications that use a lot of memory or a lot of disk space, because theyíre cheap. Then we are tasked with writing a mobile application and itís like going back in time. If youíre old enough to remember some of the old tricks and techniques, this is your oyster. If youíre not, start hanging around the folks with grey in their hair.
5) Integration. I hear a moan rising in offices everywhere, ďwhy do I have to retype this? Why do I have to copy and paste? Why isnít there some sort of connection between these applications?Ē A lot of this work can be done right now with the tools we have. Someone just has to decide itís important while the architecture is being settled.
6) Reinventing the wheel because your head is in the sand. Have you looked at Sharepoint? Do you know what it can do? How about developing for Office using the Primary Interop Assemblies for Office 2003, or Visual Studio Tools for Office? How about BizTalk? You can write the whole thing yourself or you can use whatís been written already. If you can find folks who are willing to pay for handwritten weaker versions of free or low-cost tools, please send them along to me, Iíll find a use for their money.
7) Keeping up with all the changes in technology. The best you can do is to commit to yourself that you will try. Read compulsively, go to conferences, try new things, and remember that these changes are supposed to help you. There is benefit to you in adopting them, or at least some of them.
Q: List the 10 best resources for technology and business professionals.
A: 1) MSDN Ė documentation and online help, whitepapers, articles, books, and so much more. Everyone who develops with Microsoft technologies should have an MSDN subscription.
2) User group meetings Ė a presentation on something relevant, and a chance to talk to other people doing what you do.
3) Books, of course. Canít have too many. Mine are good, if youíre into C++.
4) Codeguru.com Ė and not just because my column is there.
5) Codeproject.com Ė full of useful examples.
6) Gotdotnet.com Ė samples, whitepapers, FAQís, utilities, blogs, and message boards, all about .NET and a heavy Microsoft presence, to say the least.
7) Informit.com Ė articles, sample chapters, and online books.
8) Conferences, and not just the presentations. Informal conversation with other attendees can be extremely enlightening.
9) Google. But donít assume everything it turns up is worthwhile. Develop some judgment skills.
10) The DevelopMentor mailing lists, details at discuss.develop.com. Some of the lists are very high volume, but this is where the people who are really working with emerging technologies share their thoughts.
Q: You pick the topics: now provide us with those valuable rare ďgemsĒ that only you know.
A: You just canít overestimate the importance of design. Even just an hour spent thinking before you code can make all the difference. Draw a picture of some kind. Explain the whole thing to someone Ė the dog if thereís no one else to listen. Donít type anything until youíve put that time in.
When Iím doing design and architecture, I insist that first drafts of diagrams are drawn by hand, preferably on a whiteboard. Itís easy to draw as quickly as you think, and you donít stop thinking about your design to mess around with the tool youíre using or try to make the diagram beautiful. Because youíre using your muscles as well as your brain, you get more involved in the design youíre building. If itís too coupled, if thereís too much repetition, if itís not clear how information will make it from one end of the system to the other, youíre more likely to notice if youíre making the diagram yourself instead of trusting a tool to make it. Once you have a good approach to your problem you can use a tool to make a good copy of your diagram.
The only other thing I want to tell designers, architects, and coders is that itís OK to get passionate about what youíre doing. If your plan for a system is good, you should get excited about it and like what youíre seeing. If you donít like it before itís even coded, it probably isnít going to be very good.
Q: What future books can we expect from you?
A: Thereís a new version of Visual Studio headed our way, so I have to plan revisions of my current books. Nothing else is firmly planned at the moment. I canít go too long without writing, so you can be sure thereíll be something.
Q: What do you consider to be the most important trends to watch, and please provide some recommendations?
A: 1) I think the days of large projects are over. Firms that used to allow multi-year projects now want to see something delivered and installed every few months. Teams are smaller and so are milestones. You need a strong architectural vision to build for this reality, and you had better be good at your job, because if youíre not thatís going to become clear sooner rather than later.
2) Continuous learning has been a buzzword for a long time but the successful architects, designers, and developers I spend time with are the ones who donít just pay it lip service. They take courses on their own time, they read all those magazines that come by their desk, they accept the free training and conferences when theyíre offered, and itís making a difference.
3) Integration is becoming a must-have. Whether itís dealing with firms that have been merged or with a trading partner who doesnít want to swap paper any more, if your application doesnít play well with others it may not get to play at all. Accept it and learn the tools (Web Services, BizTalk, and XML to name three) that will make integration achievable within ordinary budgets.
Q: What kind of computer setup do you have?†
A: The firm has two offices, with four servers, one machine for each developer and admin, and some spare boxes for those projects that canít be allowed on regular machines, all running assorted flavours of Windows. Thereís one Linux machine that we use for testing on some projects, and several ďsacrificialĒ machines for putting beta (or alpha) products onto, that we wonít mind reformatting if we must. We have a rigorous development process: our developers canít get their code onto the testing servers themselves, for example. I use a laptop that I can carry back and forth between the offices or to a client site. Iím wanting a tablet, but have yet to find one thatís powerful enough to let me develop code, not just handle email and documents.
Q: If you had to do it all over again?
A: I donít think Iíd change much. There are a few decisions that in hindsight werenít right, but at worst they were learning experiences. We should have shrunk the firm more quickly during the 2001 downturn instead of soft-heartedly carrying people when there wasnít enough work, for example. (Donít I wish I could have that money back!) But so much has gone right over the years that I wouldnít want to mess with the path I took.
Q: What drives you to do what you do?
A: Itís so important to me to control what I do. I need to have variety day to day and I need to know I am making a difference. This way of life gives me that. I do really exciting work, I can spend time with my children when most people are at the office, I can work according to my own rhythms and my own priorities. I can travel, meet many more people than I would if I had a normal job, and experience a lot more what the world has to offer. In the short term, thereís nothing like knowing other people are counting on me to make me go the extra mile. I often say that whoever started that saying, ďif you want something done, ask a busy personĒ is just lucky Iím too busy to hunt him down and kill him. Seriously, I thrive on challenge and I decided long ago that I would take the hard parts of this way of life right along with the benefits.
Q: How do you keep up with all the changes?
A: I make myself put the time in. I have a lot of information that comes to me, paper magazines, email discussion lists, CDs and DVDs, and I make myself go through it. I have time in airports, evenings when thereís nothing good on TV, and other slow times when flipping through that sort of information is more appealing than my other options. I donít watch much TV, and often work from home, both of which add many hours to my day. Iím a very fast reader and I have access to some very smart people to help me when Iím stuck trying to understand new things. Probably my ďsecret weaponĒ is the talks Iím asked to give. Learning something well enough to present on it ensures that you really learn it Ė and on a deadline!
Q: If you were doing this interview, what five questions would you ask of someone in your position and what would be your answers?
A: Q1: Do you think itís relevant that youíre a Canadian, writing for American publishers and speaking at conferences in the USA?
A1: I think it gives me an interesting perspective, but many people have no idea that Iím not based in the USA. I have to watch my spelling Ė I keep Word set on US English most of the time Ė but thatís about all. Many years ago, I had a cryptography chapter in a book and I asked someone else to write it, because cryptography was much harder in 1995 than it is today, and he couldnít discuss most of the chapter over the phone with me, though it was OK for me to read the printed book. I think itís also intriguing that I am rural-based. I live on a gravel road with no other houses in sight, and I donít even have high-speed Internet access at home. But I donít need to be in a big city to do what I do.
Q2: Is it difficult being a woman in a field thatís mostly male?
A2: It has its moments. By and large itís worked out well for me; people remember who I am. I am sure there have been prospects over the years who discounted me because they preferred a male consultant: I have to think of that as their loss, not mine. The world of conference speakers and book authors is even more male-dominated than programming in general, and Iíd like to see that change in the years to come. Iíve met some amazing women who have overcome a lot more difficulties than Iíve faced and risen further than I have. I like to encourage young developers to think about writing, speaking, and other forms of technology transfer, and the women (in general, of course) need more encouragement to consider doing that.
Q3: Your business partner, the other Gregory in Gregory Consulting, is your husband. Whatís that like?
A3: Itís fantastic. Weíre the classic finish-each-otherís-sentences team. We work very well together and complement each otherís skills. Whatís more, since we own the company, we just donít have the work-life issues that so many couples face. If we decide thereís a good business reason for me to go to a conference, for example, I donít have to go home and persuade my husband to agree to it. And if we agree that for family reasons weíre going to let a particular opportunity go by, I donít have to go to the office and explain that to my business partner. We have the freedom to set our hours, and to set our priorities together. Weíre a great team, and after 22 years of marriage and 16 years in business together, I think we know what weíre doing.
Q4: Would you like your children to follow the path youíre following?
A4: The path I followed isnít there anymore. I started using the Internet before the Web existed. I was using C++ before Microsoft had a C++ compiler. Iíve been adopting new technologies, learning them quickly, and helping others start using them for over 20 years. But looking at it more generally, the path of creating your own business, living a varied existence, and controlling your own destiny is still a path anyone can follow. I think Iíll advise them to be more traditional Ė after all, if this is the way you should go, youíll go no matter what advice you get. So I might as well suggest a conservative, traditional life for them and then weíll see what happens.
Q5: Whatís the hardest part of being a writer, consultant, speaker, and expert?
A5:† Knowing when to stop. I love this stuff and tend to assume everyone else does too.
Q: Do you have any more comments to add?
A: I wouldnít have believed I had this many comments in the first place if it hadnít been for all these thought-provoking questions! I think Iíll rest my brain for a while now.
Q: Kate, thank you again for your time, and consideration in doing this interview.
A: Youíre very welcome. Itís been an enlightening process. Thanks for your interest in my work.