Careers: Interviews
Widely Regarded, Internationally Renowned Developer on: .NET, XML,
UML, C++, Java, ASP, VB, 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 (www.visualc-kickstart.com)
and four editions of Special Edition Using Visual C++ (www.usingvisualc.net).
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 (www.microsoft.com/rd),
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 (http://www.stephenforte.net/Pictures/03Dallas/)
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. |