Warning: this post won’t teach you anything technical. It’s about how I see myself. That may be of interest to you, or it may not. If not, feel free to skip it knowing you’re not missing anything else.
One of the great problems of the world today is undoubtedly this problem of not being able to talk to scientists, because we don’t understand science. They can’t talk to us because they don’t understand anything else, poor dears. (Michael Flanders)
For a while, I’ve made myself slightly miserable (only slightly – I’m generally a very happy guy) by seeing just how impoverished my own understanding of computing is compared with my “heroes” in the industry: Eric Lippert, Joe Duffy, and Wes Dyer to name but three. I always learn a lot from their blogs, but often I don’t manage to take it all in. I understand enough about Wes’s post about monads to realise that I’ve probably implemented a monad with my (incredibly primitive) Future classes in “push LINQ” – but my grasp of them is tenuous at best. I understand enough about threading to be able to reason about concurrency in my day-to-day life, but I’m never going to have Joe’s depth of knowledge of either the Windows-specific stuff or the underlying principles and theories. I can hold an interesting (to me) conversation with Eric over email, but I suspect that if we were talking in real life I’d have to constantly ask him to slow down.
This used to bother me. I used to almost feel that it was unfair that others were so much smarter than me. Yes, I know how arrogant that sounds even in terms of ambition, and I’m not going to flinch away from the term. However, I’m a bit more comfortable with my place in life now. You see, just because they’re so much smarter than me doesn’t mean I’m useless. I want to be a bridge.
People have occasionally used the word “expert” about me, entirely inappropriately. I’m not an expert in threading, or floating point, or text encoding. I know a bit more about those topics than most developers, and sometimes that’s all that’s required to be labeled as an expert these days. After the last ten months, I could probably agree with the label when applied to C# as a language, although certainly not .NET as a framework, or even the act of developing in C#. I happen to have read the spec more closely than most people, and retained that information reasonably well, that’s all.
The trouble is, real experts can be hard to understand sometimes for the “average developer” (again, I know how that sounds; I’m not putting myself above this “average developer” in all or even many respects, just on the topics I happen to write about). Don’t get me wrong: it’s not because they lack communication skills (although that’s sometimes the case). It’s that a lot of what they talk about is at a level of depth which requires a lot of background knowledge for one to properly understand it. This is where I believe I can play a useful role – I like explaining the most useful bits of what I’ve understood from the experts, but in a way which hopefully any interested developer can understand.
C# in Depth is a good manifestation of that. If you want the unadulterated “truth” about C# (at least in theory) you look at the spec. But that’s frankly a pain to read, and there’s very little to distinguish the bits which are really important from the corner cases which you’re unlikely to ever encounter. I hope my book covers provides more depth than the level of knowledge most C# developers already have (and more depth than most other books provide), but without going so deep as to be impenetrably difficult to understand.
Having identified this role, I’m really quite happy to try to fulfil it. I just hope I can keep doing so. It’s a lot of fun.
5 thoughts on “Bridging gaps, and finding my role”
Did you try the Myers-Briggs personality type questionnaire? You’d be able to see if the role you found matches the results.
You can find this test online for free on several websites. It may help you to learn even more about your personality.
Very nice post I thought, I tend to feel the same in a lot of ways, though I may be a small country cobblestone bridge and you, Mr. Skeet, are more like a double-decker suspension bridge ;)
Your old skool posts on yoda are what got me started on the more complex subjects (like multi-threading) earlier in my career.
These days I read the Duffy directly but I had I been exposed to the Duffy before your stuff my head would have exploded.
It was indeed bridge that enabled me to get to the more complex stuff later.
Thankee ! :D
You are very kind Jon, but I think you are being too hard on yourself. It’s not a question of raw smartness, it’s a question of priorities.
Four years ago I could not have given you a concise definition of “contravariant”, much less implemented it in a compiler. But I’ve spent about 8000 hours over the last four years studying the C# language and its implementation, so I’d darn well better be an expert on it.
That was time not spent studying, say, networking. I am still completely mystified by even simple tasks involving getting my home network working. That’s not because I’m dumb, its because I have no time to think about it.
When I joined the C# team I did so because I was making a conscious decision to “go deep”. (I was also offered a job on the XBOX team, which would have been my opportunity to “go broad”, and learn a little bit about a lot of things — operating systems, security, audio, video, game design, etc.) Going deep is neither better nor worse than going broad, it’s just the choice that worked for me.
You’ve made other choices and I am sure as a result you know lots of valuable things that I’ll never understand well because I am so narrow-focused on what I love, which is designing and implementing programming languages.
I think Eric Lippert hit the exact point i was going to make with his comment (and its much better coming from him lol).
Priority dictates a lot of what we become, my own priority has been so “all over the place” that over the last two years I dont think i’ve become an expert in anything whatsoever. This also brings me down sometimes as i read your blog or other Internet posts and they blow me away!
I think its all relative, and its all priority. Most of us dedicated software engineer (addicts) are descent at what we do, but without a real focus its hard to take it all in.
For what its worth Jon, you’re me hero!