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. Discussion: 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. |