I was having a conversation with one of my mentors last week about a specific challenge I was facing, and she made this observation, and gave me a brilliant piece of advice that completely transcends that discussion and put so many things in context for me.
If it’s affecting your confidence, then we have a problem.
The tech industry is stressful. That’s just how it is, and you have to manage it. Expectations get overstated, priorities get changed, deadlines get missed. Most programmers seem have a degree of control freakery, and yet what we have control over (our own code) is the least of it. Writing code is invariably the least stressful part of my day. A day when I do nothing but write code is by definition awesome.
And how much of the external stress matters? Some, but not all of it. A lot of it, I just need to let it go – and that’s something I need to get better at. I care, deeply, about the things I build, and the process and standards that are part of that process. In many ways that’s a good thing, but it’s also often a source of angst.
This advice, I see it as a framework for evaluating stress. OK, that sucked. OK, that was hard. That, yeah, that annihilated your confidence, that’s the real problem.
She’s completely right – at a functional level, nothing has ever been more damaging to my productivity than having my confidence shattered. Unhelpful feedback that has left me not knowing where to turn or what to focus on. Having my decisions second-guessed and having to endlessly justify them. Getting steam-rollered in a discussion, when it seems like my points aren’t being heard. Gaslighting – because nothing makes me question myself like questioning my view of reality.
In fact anything gendered, or historically-gendered – it strikes at my core fear that I am not a nerdy boy, and thus don’t really belong. Maybe that bit is impossible to avoid, but for my own sanity it needs to be minimised.
To be clear, this isn’t every interaction where I am in some way, lacking; it’s those interactions where I am some way lacking, and I have nowhere to go with that information. I got some really helpful, constructive feedback on Wednesday. It was so clear – this is what you should be doing, here’s something realistic to aim for. And then, I was so productive. Things just seemed to make more sense as a result. Knowing that there’s something I need to do better, or more of, is not a confidence annihilator. It’s helpful.
Anyway, that’s what I am doing and thinking about with this piece of advice, and I’ve found it really helpful – passing it on in the hopes that someone else might, too.
You might have noticed that last weekend, I overhauled the design on my blog. I felt that it was time for a change, and it’s one that is related to a change in attitude that I’ve had of late.
One of the things I’ve changed is my tag-line. It’s now:
Cate extends Human implements Programmer
Good coding practice would suggest the use of generics here, so:
Cate<T extends Profession> extends Human
Or, better, through dependency injection – because I don’t think Programmer is determined at instantiation, and also for reasons of testability. But, well, that’s a lot more code. And as entertaining as this debate has been with my geekier friends, that’s not what this is about.
Here’s what it’s about. I’m a geek. And I’m OK with that. I’m done pretending that I’m not. I have subscribed to xkcd, and I don’t always get it, but mostly – I do. It’s hilarious and adorable and awesome.
For years, I’ve been pretending that I’m not a geek. It started in my first year of uni when I was in computer science by accident and it seemed like the compsci boys (many of whom were very much like the stereotype) discounted me for being a girl. I preferred to be feared than patronized. Rapidly I discovered the easiest way to scare a nerd. It is a short skirt or a tight/low-cut top. So that’s what I wore. Now I’m no longer 18, or a size 4, I tend to scare with high-impact sports instead, specifically kickboxing.
Anyway, I got sidetracked into this place where I thought not being geeky was what differentiated me. Not my programming skills. Not my work ethic. Not that I read widely, and voraciously. Not my creativity.
No, it was my fashion sense and my ability to pass for a non-compsci. Wow, that’s a low bar!
Instantiation would be: Cate cate = new Cate(). By Programmer not determined at instantiation, I mean that I don’t think that’s the only thing I could be. I don’t necessarily think I will be a programmer forever – maybe I’ll go into Project Management, or User Experience, or maybe I’ll become a Data Scientist. The thing is, I don’t know. And that’s OK. It doesn’t matter that I don’t know what I’ll be doing in 5 years, that I don’t know what I’ll be getting excited and passionate about. Hell, I don’t know where I’ll be living and horrifying as that may seem to some people – it’s absolutely fine by me. It’s part of the adventure.
What I do know, what I’m 100% clear on, is what I want to do next. I want to code. I want to create. I want to program a smarter, and happier planet – one line of code at a time. I want to be part of a team that makes software that makes people’s day a little brighter, a little easier – a little better. I want to inspire other girls to want to do the same.
Lofty dreams. Big goals. I may not meet them, but hey – I’m a dreamer. And a geek.
Credit: xkcd
I’m really sorry if you happened upon my blog on Sunday – I had to disable caching and made a number of alterations to the theme, it might have looked a little random! If you subscibe to my RSS, I’m really sorry about the old posts that were sent out again on Sunday – this is because they were originally imported from my old blog so when I had to make some minor modifications to work with the theme they got sent out again. I’m going to try and work out a better way so that I can make the adjustments I need without spamming people – if anyone knows how to stop this happening, please let me know!
My friend Chris Olson created a new header for me, which I’m really happy with. Check out his site for more of his design work!
There’s a fractal I’ve been wanting to make for a while. And the other week I woke up with a flash of insight and coded it, and it looked like this:
Initial Fractal
And I was really happy, until I realized it wasn’t the fractal that I’d meant to make. Oops. So I revisited it and remembered some ancient trigonometry… and it didn’t work.
So I checked my trig. And then rechecked it. And then redid it completely. Got infuriatingly close. Checked some more – wondered why the lines that I thought would be pointing up were pointing down, and vice versa.
Eventually, I stared in complete bafflement at a line that should have had an 18 degree angle to the x-axis, but was more like 45. Stared at my code. At the line.
Checked the API. Realized I should have been using radians. Kicked myself repeatedly.
My math had probably been right all along – it was just so easy to doubt my ability that I kept doubting myself, rather than debugging.
Anyway, now I have a pretty fractal. And a little more confidence in trig!
This is a post I co-wrote with Douglas Gresham. Douglas is a software engineer at Google, who blogs at www.douglasgresham.co.uk (less often than he should, go bug him for updates).
Credit: flickr / stevehdc
I’m a graduate student, though I firmly believe that great programmers are not the result of university courses in programming. But university courses take us in, with no idea of what we’re doing and eventually spit us out, mediocre or – hopefully – competent, programmers. And then we’ll go out into the world, where we really master our art. Hopefully.
Going in to university knowing a little bit of C, I came out knowing a moderate amount of Java, some Python, some Haskell, some more C, a little of ML, Prolog and javascript, and very little (though more than I think anyone should have to know) of Tcl. Coming out of grad school, I think I’m a better programmer. Not because I’ve learnt more languages, or because anyone’s sat me down and taught me anything new, although reading Effective Java definitely helped, but because I’m more confident.
For some reason, I’ve ended up doing a lot of teaching over the past 4 years or so. And I’ve come to think that the difference between the mediocre and the competent programmer is confidence. When we take an assignment, a clearly defined task with a definite solution, believing that we can work out the answer is the most crucial thing to succeeding. I wonder if this is related to there being fewer women in computer science, as women are often less confident (also this article).
I’ve seen this not just with my students, who sometimes email me checking their correct answer because they are shocked they happened upon it, but with my own experience. If there was one thing that stopped me achieving my potential during the first years of my undergrad, it was my lack of confidence in my own abilities. I felt that I was at the bottom of the pack, but since I’ve come to realize that that was mostly in terms of arrogance.
Not that I advocate being arrogant – but having a little more faith in yourself might make a big difference, it has for me at least. If it takes 10 years to learn to program, by my calculations I’m less than half way there. Now, I can’t wait to go out into the real world so that I can make the progression from competant to good, and I hope eventually – great.
My friend Dig makes me believe this is possible, and his thoughts on what makes programmers great are below.
Credit: flickr / Don Solo
Having been living in the Real World(tm) for a couple of years now, I’m acutely aware that the rules are somewhat different than at university. You’re not working on self-contained projects for your own grades any more, and you’re almost certainly working with people who are smarter and more experienced than you are (at least to start with). Out here, confidence still matters, but you have to ground it in something – it’s not for nothing that the Dunning-Kruger Effect is reflected in new grad CVs more than those of seasoned vets (you are not a Java expert if your name isn’t Josh Bloch, I’m afraid!).
I’m firmly of the opinion that programming confidence should come only from working with great programmers. The reason for this is pretty simple: programming – or more accurately, software engineering – is about putting together complex interactions based on a whole heap of assumptions you have, be they about users, the type of input you’re going to get, the systems you’re interacting with, the performance of the hardware you’re running on, and so forth. Assumptions have a nasty habit of being completely wrong, but non-obviously such that they come back to bite you much later on.
Working with other programmers means having to justify your assumptions or revise them in light of others’ opinions. Working with great programmers means you have to do a damn good job of that justification, and that the revisions you make are going to be of a higher quality and frequency. As you do this, with any luck the ratio of justification to revision improves, and with it comes deserved confidence. It should never go to 1:0 though, that would be terrible both for personal development and humility. If it does, seek out more great programmers to disagree with pronto!
I say ‘working’ with other programmers, although I should really say ‘interacting’. Manipulating the same codebase, having to use each others’ designs and – if you get the chance – pair programming are definitely the best ways to achieve this, but the discussion over a mailing list or around a table (coffee in hand, naturally) are equally worthy, especially since you can balance the daily make-it-work hackery with the conceptual ‘ideal world’ solution. One of the best programmers I know is completely addicted to Stack Overflow – I’m sure the two factors feed into each other hugely.
I’d also qualify ‘programmers’ as being explicitly plural. One other opinion is never enough, particularly given the predisposition of compscis to get over-enthusiastic about the One True Path to code nirvana. It’s the same with design patterns, IDEs, languages and so on (every object-oriented coder should be made to write some functional code), but vital with others’ opinions. Many inputs makes it easier to spot the zealots and avoid becoming one yourself – or at least being able to justify it more competently!
Finally, there’s the bootstrap – you can’t sit anyone next to a great programmer and expect greatness to transmit via osmosis. This is probably worth a whole book in itself, but I’d say solid core computer science (especially algorithms and data structures, but I would say that as it’s my thing), a flair for design and an ability to break down your assumptions, both technically and psychologically, are all key (try Test Driven Development, even if you don’t stick with it long-term as it teaches you those).
Of course, this is all one opinion from someone a long way off of greatness, so by my own logic you should ignore me. Ah well.
I went back to school because I didn’t think I knew enough to go and join the real world, yet.
Then I got to graduate school, and realized it wasn’t the place to learn it.
I’m not a better programmer than I was before I came. I know a little more about some things, but not a whole lot.
But – graduate school gives your space for other things. Defining my thesis topic has give me a better idea of what interests me. I’ve been able to experiment with different presentation styles, and become better at public speaking. I found that I had something to write about on this blog – and – still incredible to me – people would be interested to read it. Discovered that I can bring something to the table in conversations about technology, and education, and the future. Expanded my horizons by teaching and presenting in French. Learned how to write better. Learned to read academic papers, they’re not always as boring as I thought. Realized that other graduate students know no more than I do. Some may even know less. Tried this being a leader malarky. Tried to find balance in my life. Experienced being an expat. Felt lost. Felt lonely. Felt a great sense of achievement when I realized I’d come over with nothing and built a life.
Saw that the amount I didn’t know was even bigger than I expected. Realized a PhD was not the place going to help me get that knowledge.
Gained confidence – I still don’t feel I know enough, but realize I never will. I no longer want to postpone joining the real world, in fact – I’m excited to be a part of it.
Some people say graduate school is a terrible idea. But I’ve got as much out of it as I expected to – perhaps more – it’s just it wasn’t the type of value I was expecting.
Cookie Consent
We use cookies to improve your experience on our site. By using our site, you consent to cookies.