I'm a techie; currently I am living in the world of Linux
1. I didn't always think I would be. In my teens, I was into computers. That meant that in the late 90s, I was chatting to folks on IRC over a dial-up modem. I didn't consider myself technical, just lucky to have an internet connection with enough wherewithal to understand how to use the applications
2. I liked to learn how the things I used worked, but I couldn't do anything with that knowledge. I learned bits of IP and TCP until I realised I didn't have the programming chops to make what I wanted to make; sure, I did a bit of c++ when I was 13, but never got past for loops. Also, a friend of mine was seriously getting into programming at the time, and was zooming ahead with programming. That friend also made a lot of noise about himself and his skills. He believed his own press, and so did I.
Also, because I was trying to figure out my own gender issues around the same time, I spent more time with online trans communities than pursuing things like programming. Like I said, I was satisfied with a Win95 box, an mIRC client, my Netscape 3 suite with its mail/news utilities. Some of the people in that community also bigged up their skills and their involvement in the open source communities and whatnot. Their press machines were in full flow, and I believed them like I did with my friend. I didn't believe I could measure up in any meaningful way. Hell, I didn't know much about Linux. My friend had Linux (an early Redhat
3 if I remember correctly) on his machine. So did my girlfriend, who was coding. So did the Open Source guru, and if she was to be believed, she wrote parts of it. I decided I wanted different dreams; I wanted to be a psychologist
4.
Sure, I was good at Maths in school, and I was good at science... But there was a talk in my school from some software developers, and they tried to move people away from the image of a maths and science person. "We don't want
NERDS", I remember one of them saying in a thick country accent. "We want team players; we want the type who do well in soccer." Given that I knew I was a bit of a nerd in school, I took that as a deterrent. I don't think the general encouragement managed to really sink into the ears/brains of those around. That said, the class-mates I took for shoo-ins in computer science never actually went for that course in college. Good thing I had already decided on psychology.
By the way, psychology didn't work out for me. There are a whole number of reasons, but the main one was that when we learned about the nervous system, and neurons, and the general hard biology of the brain, I realised I really liked those details, and while I like asking if the psychological experiments we did actually demonstrated what we were taught they should demonstrate, the rest didn't hold me. So I decided I wanted to be a Scientist; a Theoretical Physicist to be exact.
In my science course, I had to take an extra module, so I took one in Java programming. I did pretty well. I surfed by on some of the stuff I learned when I tried to teach myself c++, and was able to figure out the rest from some basic maths. "Functions? Man, they look an awful lot like the polynomial functions used in maths, and I think all the variable types are just hints to a compiler so it knows what sort of data goes in and out." I knew just enough to know when I knew something, but also knew enough to know when I didn't know something, and would have to work it out by myself. So I did a lot of internal monologuing, and told myself a lot of stories about how I thought things worked. Then I figured out if it worked the way I thought, and amended the story appropriately. I did extremely well in that module. Unfortunately, while I did extremely well in that module, I didn't do so well in my 2 physics modules
5, to the point where my programming score was twice that of my two physics modules combined
6.
Anyway, I didn't do well enough to continue to second year, so I dropped out, worked for a year in a clerical role, hopping from one short 1-3 month to the next contract, always on the lookout for a new job because I was never sure if my employer would renew the contract. Eventually, I got the chance to try one final time for a degree. I knew what I wanted to do now. I did computer science; and I worked hard at it
7. While I wasn't top of my class, I did well, and I've been working in the tech industry for nearly 5 years now. I count myself extremely lucky in that story. There are so many place I could have failed before I got to where I am now.
In that time, I've looked back at some of the things that those technical people did. I realise now that a lot of it wasn't so big. They just were able to talk about it well. My friend in my teenage years, looking at his code from back then makes me wince. I hope it makes him wince as well, otherwise he's probably not learned much from it. Another talked about being able to make certain tools in a few evenings, and I realised a few years back how easy that job would have been.
What really stuck with me is that talk I got in school. I think I get what they mean now, although their delivery was, quite frankly, piss poor. I think they thought that they could get a more diverse bunch interested in the IT business if they appealed to the not-a-nerd crowd. I think they went about that in the wrong way, while potentially alienating the people who thought they wanted to be in that field.
For years, I've thought about how I'd deliver a similar recruitment speech to schools. I thought about how I'd deliver it to young men and women to see how I could get them in the door. I don't know about the rest of the world, but people keep concentrating on maths as a skill. I disagree. But before I go on, I'm going to digress for a second
8.
I believe we need more women in the IT fields. Far more articulate people can detail why. Personally, as a trans woman (in a very odd position by way of transition), I want more diversity in general, and I think addressing the basic gender imbalance would make a pretty good start. That said, I'm not going to call myself an advocate, just an ally at best. I don't have the energy, nor do I think that my direct involvement based on my own issues are going to help much
9. That said, I do take a keen interest in what others are doing, and can appreciate what is being done in that area. So when I saw
she++, a video talking about women in tech, while also trying to encourage women to try technical roles, I was very interested.
Overall, I love what it's doing. I like that there's honesty, and I also like how it's nothing like
the EU's ill-fated attempt to encourage women in science10. That said, some elements of it really reminded me of that recruitment talk in school.
What follows isn't a criticism of the video. I think it's excellent. However, it did raise various gut reactions in me. Thing is, I know
this video isn't for me, so I would be mortified if any of these ramblings were used to try and justify demanding that the video be changed, especially if it's by a group this video isn't for.
So, tying back into how I'd want to present a recruitment drive in schools. I'd want to dispel the idea of maths being a necessary thing in computer science. Near the end of she++, there seemed to be a lot of emphasis on that. You know what? In the last 5 years (basically my entire working life in IT), maybe a little more, I haven't needed major maths, just some understanding of addition and multiplication. I think the last thing I needed it for was some pretty heavy and trippy stuff involving neural networks. And before that, when someone tried to teach me lambda calculus.
Let me just say: No. I mean, yeah, lambda calculus is a fairly core theorem in computer science, but it doesn't impact on my day to day life. In stuff like neural networks, it's domain knowledge. Similarly, if I was programming a simulation of particle collision, I'd need to know, and understand, some formulæ that model the world. But aside from domain specific knowledge, and understanding some of the seminal contributions to the theory of computing, I can't say it's absolutely crucial.
What I think is essential is language, and task subdivision. Can you break down a task into its most fundamental elements. Could you take those fundamental elements, and then sit down with a creativity-impaired 4 year old and communicate those fundamental steps to that kid? When you see the kid mess up, can you put yourself in their very literal shoes and figure out where you went wrong in your instructions? If you think you can, then congratulations, I think you could make it as a computer scientist.
A computer is a like a really dumb, but really fast, toddler. Don't believe me? If you have an hour to spare, listen to
Richard Feynman on the topic11. Realistically, in this day and age, unless you're working on a really low level, you'll be treating a computer like a toddler giving it simple instructions. The difficulty of my job is not in the maths,
it's the careful and unambiguous expression of what I want the computer to do.
That said, I'm biased. The way I learned programming, and general tech stuff in my adult life was by telling myself stories about I thought things worked, and refining and retelling those stories until I had a small working model of computers in my head. To me, programming is about words, stories and clear expression.
That's not to say that maths isn't a bonus; it really is a bonus. Chances are, if you're good at the maths side of things (or any science), you're probably good at the sort of logic needed for programming, and for breaking a problem down into its constituent parts. Also, if you happen to end up making a program to analyse statistics, you probably want to understand the maths behind the stats calculations.
So, what about the stuff like lambda calculus, should that get thrown by the wayside? No, I think that understanding that really helps you understand other things, but I've seen
lambda calculus expressed in interesting non-mathematical ways.
Anyway, communication doesn't stop there. Communication and collaboration is needed in pretty much any technical job. More than likely you're not going to be the solo techie on a project. Even if you are, you'll either have a customer, or a boss, or someone else that you need to talk to. In general, if you're skinny-dipping in code, you're not going to able to speak to humans that well for a few minutes after surfacing. No really. Specific words take on very specific meanings in the field; one word is not always substitutable for another. It has the effect of limiting your active vocabulary for a while, so that when you're talking to non-techies you may sound like you're speaking a different language for a little bit. That said, if you're someone who's good with their words, you will have less of a problem getting back to a point where you can speak human. If you really know your stuff, and are articulate enough, you can be a good intermediary between non-techies and techies. I honestly believe that the tech sector lacks diplomats and translators (purely because of the mismatch of expectations on both sides) - this is somewhere I would love to end up, although right now I enjoy working in pure tech too much to consider an intermediary role.
Communication is necessary in all levels of my job. I need to be able to talk to, and collaborate with my colleagues. I need to be able to tell my various bosses what's going on in various levels of detail, while still giving them what they need to know. I need to be able to train in, and mentor, new joiners. I need to communicate what I'm doing to the customer. Each needs varying degrees of detail, and I need to deliver it in an effective way that conveys what they want/need to know, without too much embellishment. Last, but not least, I need to tell the dumbass computer what it's bloody well meant to do.
There were some other little things in the video that rankled my wrinkles, namely the implication that being good at tech meant you were better at everything. Yes, the skills of being able to break down a task into its constituent parts is a good thing, but the general hubris can be annoying. Almost every time I go on reddit, I want to smack that attitude out of some CS student who seems to think that because they can tell a computer what to do that they know how to do everything and that they have a solution to all the world's ails. Yes, you are trained in the use of a very powerful cognitive tool, but if all you have is a hammer, everything looks like a nail, and this world isn't made of nails. You also need to know when to turn off that bit of your brain. It's only a minor snag, but I reckon the less encouragement we can give folk to think that they can rule the world because they're a computer whisperer, the better.
That said, an excellent point was made that programming lets you look at your hobbies a different way, and your hobbies help you look at programming in a different way. Have a look at juggling some time. I see a beautiful marriage of a simple set of instructions, motion, and hand-eye coordination. I've recently taken up crochet, and find it really satisfying in the sense that there's an order that I could probably model in a machine. Who knows? Maybe those things will help me think of a solution to a programming problem I have some day.
Anyway, on the subject of how I'd sell my field to kids in school, I haven't thought further than trying to express the fact that it's down to communication. Sure, if you're good at maths, that's great, we want to hear from you. But if you're good at communication or are able to express yourself in different languages (which always felt like I was using the same bits of the brain for that as I do for programming), we also want to hear from you too. I just wish the guys who came to my school managed to put it that way, rather than alienating the self-identifying nerds.
As for the video, I really did love it, and want to see more like it. It just got folded into my general rambling rant because I happened to see a link to it when I was thinking about writing a blog post talking about the habit of misrepresenting CS as a maths-only kind of deal, which I think does an injustice to IT.
The final thing I want to say is for anyone starting in IT. The she++ video does a
really good job at identifying and calling out the sort of stuff that leads to impostor syndrome. The really funny thing is, even though I looked like one of those speed-ahead folks in the labs, I was still trying to figure my way out. I also slowed right down in the "weeder" modules in the following year; it humbled me.
If I could offer one bit of advice to anyone looking the others speed ahead it's: Don't. I know it's hard, but don't look at those speeding ahead if you can at all. The last time I was in fresh meat, I was struggling along, and could only see the skaters who lapped me time and time again. It was incredibly hard not to feel like I was the runt of the litter. The funny thing was, when I stood off-track for a session, I noticed the really good skaters but how few of them there were, and how the rest were in the same position. I even remember telling another trainee skater, at the end of that session, how she honestly wasn't doing as bad as she thought she was; she was keeping pace with most of the rest, but could only see the really good ones overtaking her. I realised she was doing the same thing I was
13, and I managed to feel a bit better about myself. Unfortunately, because of an injury I wasn't on track again to put that knowledge to the test.
Anyway, I know how hard it is to conquer the feeling that because one person is racing ahead, that everyone else must be doing the same as well, so the simplest advice (even though it's so much easier said than done) is to ignore it, and keep doing what you're doing.
If that doesn't work, comfort yourself with the fact that, like a lot of the people who made me feel like tech wasn't for me, probably a lot of them are churning out crap in the name of looking like they're racing ahead, or because they think they know it all already.
( Herein lie the (gargantuan) footnotes )