I've noticed since I got back from my vacation how quiet it now is
during the day. All the kids are back at school and in my neighborhood
a welcome silence envelops the street during the heat of the day. Mind
you, the traffic during the early morning and late afternoon is a
sight to behold as parents drop their kids off at school or collect
them, but during my productive daytime hours, it's quiet.
So the little blighters are back in classrooms learning English and
Mathematics and Civics ready to become the adults of tomorrow. What
about us adults? Especially those in professional employment; not just
doctors and lawyers, mind you, but also software developers and
designers and architects. Shouldn't we be learning still?
My wife, who is a prosecutor, has to pick up Continuing Education
credits in various aspects of Law, including the important ethics
credits. To maintain her right to practice law she has to get so many
credits per year, and they expire after three years. To get a credit
you have to attend a lecture or seminar of some aspect of the law. In
fact, she's just come back from a conference where she picked up the
remaining credits for this year.
Ditto for professionals in the medical field as far as I understand.
But we software people? There's no (real) professional body, no (real)
requirement to stay on top of your profession. In fact, I would
venture to say that the only reason some people keep up with new
technology and ideas is to put them down on their resume (cynical,
moi?). I still feel that the Microsoft certifications are more about
learning stuff by rote and getting the initialisms on your Curriculum
Vitae than any real connection with what you may see or do in your job
(man, I'm being really cynical today).
And I'm staggered at some of the emails I get where the writer hasn't
the foggiest about some standard computer science-y topic. No, I'm not
talking about the pros or cons of B-trees, say (a subject still dear
to my heart), but about people who discover regularly every now and
then that fractional decimals generally aren't exact in an IEEE
floating point variable. And that's even before you consider those
people who have highly incorrect assumptions about Windows; topics
that Raymond Chen
does so well at debunking and explaining. Case in point: I was talking
to a friend who was saying that an architect at his company was trying
to convince him that many threads in a single process could lock the
same mutex at the same time.
Look, this stuff isn't rocket science. It may have been at one stage,
but that was an awfully long time ago when computers occupied entire
buildings and you had to wear a white lab coat to program them. The
basics of computer science just aren't that hard to learn. You
certainly don't have to learn the concrete mathematics needed to prove
some of the assertions; just accept the conclusions and move on. Ditto
for Windows concepts and CLR concepts. There are any number of good
books that talk about these things.
We, as a group, must not only learn about WCF, WPF, Silverlight and
any other fabby-dabby technologies coming down the line, but learn
about the basics of our business. That includes not only algorithms
(my favorite subject), but also things like why they're called lambda
expressions (what's lambda got to do with it? And what's this about a
church?), why they're called regular expressions (what's regular about
them?), why C# is moving to a functional programming paradigm (it is?
and what's curry got to do with it all?), why multithreaded
programming is hard (bwhahahaha!), what is the difference between
latency and throughput and why is matters in our AJAX applications,
and any number of other interesting basic questions.
So go on. Think of something that's puzzled you for a while, do some
research on it, learn about it, so that you understand it enough to
even write a blog post about it. And then do exactly that and let me
know. Let's learn!