Am I not cut out for computer science?
March 16, 2016 1:09 PM   Subscribe

I'm not sure if I'm lazy or if things will never "click" for me. So, how do I stop comparing myself to Joel freakin' Spolsky?

The tl;dr: I feel that my grades are mediocre and my projects are slightly embarrassing, but since women/minorities are often underrepresented and unreliable reporters of their abilities in CS, I'm not sure if I'm overreacting or reacting just right.

First off, background: I'm a woman in computer science. In high school, I did well in math (straight A's), but never excelled at math extracurriculars. In college, I learned about reading and writing proofs, and I LOVED it, and did well in all of my proof-based classes. I got the top grade in my 100% proof-based Calculus class. In classes that were more about number-crunching and problem solving, I did well, but not extraordinary (from a B+ to an A-, depending on the difficulty and how much work I put into it).

I also enjoyed technology in high school. I was always a gamer/gadget-lover. I started making very dorky webpages for myself (and for school projects, when I suggested it to my teacher) in the fifth grade, and the next year I taught myself how to use HTML and CSS. (I never would have thought I was capable of it, but I happened to meet an older girl that year who could write websites so I thought I'd give it a go.) I made a lot of personal websites and thought it was fun, though I was never a designer, so I was always a little more curious about what went on behind the scenes. I knew there were programming languages and had a very vague idea of what you could do with them, but I was too intimidated to give it a go.

In college I majored in math/computer science, thus the proof-writing, and in my first year at a state school I got straight A's. I really liked learning Java (though again, GUI stuff was a little tortuous for me) and discrete math.

I then transferred to an Ivy, where things got much harder. I'm still hanging in there, but my 4.0 went to a... 4.0, but then a 3.7, and after this semester probably a 3.5-3.6. Like many Ivy Leaguers, I've always been a 4.0+ student, so I'm always feeling like an idiot.

So, those are the highs and lows of my personal experience with math and coding. I know there's a lot more to cs right now than grades. I've built a couple web applications on my own time (things I just wanted to use for myself, basically), and have a part-time job as an assistant web developer, and have a summer internship working on a suite of apps for a local university. I'm involved in women's computer science groups, so I've gotten scholarships to go to conferences, won mentorships, etc. There's so much of that stuff out there for women, though, that I often feel like an imposter... like I don't deserve it, and a girl who wins math awards and has a 3.8 GPA does.

I'm also kind of hoping to move beyond web stuff, but I'm just starting to dip my feet into non-web programming. I feel like I'm very far from having code I'm not embarrassed of on my github, and even further from being experienced enough to have ideas about cool things to build (that aren't on the web). I'm very interested in theoretical computer science and concepts, but when it comes to implementation I kind of suck at writing things elegantly and end up with a lot of crappy code. (Not spaghetti code anymore, but just kind of not-great code. Often I will have a good idea about how to do something more powerfully but I'm afraid of running out of time / not getting it done so I go for the ugly, brute force way.)

Sometimes I feel like I'm just a leeeeeetle bit too math-dumb to be a good programmer. Like I'll never be good at abstract visualization, or whatever. I know there are good female programmers out there, I'm just starting to think maybe I wasn't born to be one.

I'm kind of bad / inexperienced at seeing the big picture. I'm not good at saying "here's what I want to build, what are the parts?" On the other hand, I almost never try or practice doing that. I'm bad at talking about technical stuff with people, including technical interviews, though again I think part of that is inexperience with practical programming.

I see a lot of people around me who are a lot smarter / more experienced than me and I'm definitely feeling like I am way lame compared to them.

I guess I just think I need better skills, hard and soft. I'm definitely not a certified genius. I admire elegant math and cs concepts. I'm the kind of person who glomps on to technical problems and loves solving them. I'm also the kind of person who occasionally has a technical problem that makes her feel totally hopeless and like an impostor who should be fired/kicked out of school. I'm bad at asking for help, and I've never had a code review.

How do I stop feeling like such a dope? I have a plan for myself which so far looks like:

1. Work harder
2. ...


The thing about working harder is it's great, I learn more, I become better, but if I "fail" (i.e., don't get A's) then at the end of the quarter I'm filled with despair. It's not a whole lot better if I don't work harder, but usually I feel like I have some semblance of a life to get back to and a locus of self-esteem if I don't obsess about school every waking moment. I guess I need to work harder, but work smarter, and also get some kind of technical self-esteem, but I don't know how to do that.

I want to have a healthier approach while also learning more and learning smarter. If you have had this kind of self-hating impulse, especially in cs where people are in your shit all the time, what helped you? And how did you... feel better while also working on getting better? And make the best use of your time?
posted by anonymous to Education (46 answers total) 24 users marked this as a favorite
It sounds to me like:

a) You're doing fine, but you have no other goals than excellence, and

b) You haven't found something you care about actually _creating_ yet.

Once (b) is taken care of, maybe you will start focusing less on (a). It's fine if you haven't found your life mission yet, but once you do, you might start being more comfortable with yourself since you'll focus less on comparing yourself to others. You'll be able to focus more on what you actually care about.
posted by amtho at 1:17 PM on March 16, 2016 [10 favorites]

I want to give you a massive hug because you sound so much like me. You are good enough!

Here's the thing: there are a *lot* of terrible programmers out there and you don't need to be a complete fuckin' rockstar or even more than average to have a good and satisfying career in programming. It is okay to be good enough. It's also true that software development and infrastructure functions a hell of a lot like a traditional trade in that your years of experience and actual stuff that you build counts for basically everything - your GPA is completely irrelevant in the actual world of work. I know fantastic people who never even went to college. If you like to solve problems and you're tenacious and can work things out for yourself that is 80% of the battle.

For me, I graduated with an low-average CS degree from a pretty decent university and spent a couple of years as a dev before stumbling into systems administration and it suited me a lot better because I have a terrible attention span and I hate GUIs and long projects bore the shit out of me. I've been a sysadmin for ten years and I have worked with some absolute rockstars who eat, breathe and sleep it and I am not one of them (because I enjoy doing other things with my time too) but I really like what I do and I'm good at it, good enough to hold a senior position in which I'm respected and listened to despite being a woman in a shitty male industry. Not comparing myself to others helps. I am good enough at what I do.

You're doing fine. You don't need to be an A* 10x ninja bullshit artist at Facebook or Google. Basically every company needs developers. Just do what interests you. Check out the ops side. MeMail me if you want to chat more about being a woman in tech or whatever :)
posted by corvine at 1:21 PM on March 16, 2016 [8 favorites]

Unless you're planning on entering a very specialised field, maths has just about nothing to do with being a good programmer. In the last 5 years, the most complex maths problem I've dealt with is summing a bunch of numbers.

Also, I've been in the business for almost 20 years now (deus help me), and I can tell you that, once you're a professional programmer, you'll be respected for getting the job done, not how you did it. For me, the most annoying people I have to work with are those that spend hours agonising over coming up with a 'perfect' solution when all we're judged on by the people who pay the bills is getting the f'ing thing out the door to paying customers.
posted by veedubya at 1:21 PM on March 16, 2016 [11 favorites]

Imposter syndrome as a woman in tech is just part of the experience at this time for many people that don't have gargantuan egos. I think the biggest "gift" that you're lacking is a superabundance of confidence, rather than brains/spatial reasoning.

My two cents - if you're interested in the most "prestigious" "abstract" CS things - give them a go. Try your best on a project in one of those spheres for a pre-determined time, say 3-6 months. At the end of the time period, evaluate how you feel on that work. Did you enjoy the challenge? Do you feel good about what you created? Try to get some outside perspective on it too, from a professor or TA or someone whose opinion you trust.

If you don't feel good about it, for whatever reason, give yourself the freedom to move outside of that abstraction and the CS-oriented prestige. There is a whole world of very project-oriented CS that relies on knowledge synthesis from other fields, like robotic manufacturing or bioinformatics. Search out professors at your university in non-CS fields (e.g. biology or engineering) and see if they have undergrad-accessible projects that need some coding skill. Try out some new specialties and see what fits best.
posted by permiechickie at 1:25 PM on March 16, 2016 [7 favorites]

Let me put on my gross-generalization-hat : As a person who doesn't code but has hired many coders ... dudes tend to think they are a lot better than they are. Confidence is almost never the problem I run into among dudes I interview. Genius or Moron they think they are going to be an angel descending upon my projects. They rarely are.

My #1 piece of advice find something you want to make. Make a dumb game, make a dumb analytical tool, make a dumb app. Just do it for you, not a for a grade.

Failure is not getting a B. Failure is giving up.
posted by French Fry at 1:25 PM on March 16, 2016 [15 favorites]

I have this article, The Importance of Stupidity in Scientific Research, taped to my office door.

Key line: "The crucial lesson was that the scope of things I didn't know wasn't merely vast; it was, for all practical purposes, infinite. That realization, instead of being discouraging, was liberating."
posted by yarntheory at 1:44 PM on March 16, 2016 [6 favorites]

Oh man I can relate. I seriously 100% suggest counselling or therapy. It is hard to overstate how much I benefited from therapy in terms of finding my way to an improved sense of self-worth. You ask what helped me? Therapy helped me.
posted by PercussivePaul at 1:45 PM on March 16, 2016 [1 favorite]

I'm a woman in computer science. By most accounts, I've been "successful": I graduated with highest honors and had the choice between a job at a prestigious major tech company or a CS PhD at an Ivy (I picked the industry job).

But: I had go through a secondary diversity committee to get my job offer. I only got into the one grad school, which isn't in the top 5 for my field. And I have the least math background of anyone I work with: intermediate applied statistics and discrete math, that's it, not even linear algebra. I got honors in my majors but wasn't in the top 15% of my class GPA-wise, and it would have been much worse if I hadn't taken 2/3rds humanities and social sci courses (my CS and math grades fluctuated between A and B+/B).

My first point, the one that occurred to me as I read your question, is that your math background is ABSOLUTELY not below par. You excelled in a proof based college math class, which is the litmus test for abstract thinking in math. My second point is that I still feel like an imposter and a near failure every day, but most people would disagree with me. What I'm telling you is: believe those people, not yourself.
posted by serelliya at 1:52 PM on March 16, 2016 [5 favorites]

Also, honestly, as someone whose more glamorous professional activities include hanging out in beach houses working on open-source projects (and whose less-glamorous professional activities include teaching a lot of calculus) your description of your accomplishments made me want to recruit you.
posted by yarntheory at 1:53 PM on March 16, 2016 [5 favorites]

Sometimes I feel like I'm just a leeeeeetle bit too math-dumb to be a good programmer. Like I'll never be good at abstract visualization, or whatever. I know there are good female programmers out there, I'm just starting to think maybe I wasn't born to be one.

So one thing to say here is that, if you are getting straight As in your proof-based classes, there is absolutely no way you are too "math-dumb" to be a good programmer. (If anything my guess is you might be "too" smart, which allows you to see the shortcomings in perfectly decent code that does the job but could be more elegant. Whereas the stereotypical ultra-confident coder-bro just doesn't even think about it.)

I think it might also help to think about the narrative of "born to be a good programmer". Needing some kind of innate "spark" of brilliance is a common kind of narrative about what it takes to excel in many STEM fields, but the evidence I've seen doesn't actually support this. And there are complicated and extremely problematic ways this narrative interacts with the gender gap. Like most things programming really requires lots of practice and effort over time to get decent at it, and almost no one has this in college. Instead of your "1. Work harder", you probably just need "1. Keep working".
posted by advil at 2:06 PM on March 16, 2016 [13 favorites]

I'm definitely hearing a good deal of impostor syndrome in your question. A B+ average at a tough Ivy League CS program is nothing to sneeze at one bit. I'd ask yourself why you feel you need all A's? Is that something you really want, or just something you've been aiming for so many years that you haven't considered what achieving means to you?

Beyond that, there's a decent sized difference between Computer Science, as it is taught at many schools, and the professional day-to-day practice of programming. It sounds like you enjoy the problem-solving and general activity of programming. If you do, then I think you should absolutely stick with it.

There are a lot of types of problems to be solved in both programming and CS (and those are different things). Not everyone can or should be good at all of them. It's normal for there to be some areas you enjoy and excel and some areas you dislike and/or aren't the best at. As you do more, you'll come to find out what areas of the field fit you best and you can gravitate toward them. Seeing the big picture and designing architecture is hard; there's a reason that kind of job is often given to more senior "architect" level engineers.

You mention the mentorships offered as part of women's computer science groups. Have you considered really taking advantage of these? I know, as you recognize, that it's hard to ask for help, but sharing some of the concerns you've given us here with someone may be really useful. I'd venture to bet that you'll get a lot of "yeah I feel like that all the time" from many men and women alike.

It sounds like you've realized that simply working harder is not the answer, and there's no point in going through college without having a life. To that end, I think internships are really helpful in this field, because you can work with actual professional teams and work on real-world problems for several months. Working on apps with the local university may or may not give you that kind of experience, but I'd encourage you to pursue some tech company internships, for next year if nothing else. Work with the resources in your CS department on your tech interviewing skills and participate in on-campus recruiting for internships at Facebook, Google, Amazon, Apple, etc… If you're comfortable with some basic whiteboard coding-type tasks, I see no reason you wouldn't be an attractive candidate for an internship at any of these companies.


Not spaghetti code anymore, but just kind of not-great code. Often I will have a good idea about how to do something more powerfully but I'm afraid of running out of time / not getting it done so I go for the ugly, brute force way.)

This describes the better two-thirds of 99.999% of code written professionally. There's always pressure to get it done and nothing is ever as good as we want it to be. Feeling that tension is normal and doesn't make you any less of a programmer. At the end of the day, we make stuff with the hope that it is useful, and getting it done and out the door, flaws and all, is a key part of that process. Real artists ship.

I'm also the kind of person who occasionally has a technical problem that makes her feel totally hopeless and like an impostor who should be fired/kicked out of school.

Professional programmers bang their heads against their desks routinely too. This is also perfectly normal. While this field has a reputation for geniuses, you don't actually have to be a genius, let alone a genius at everything all the time, to do well. Heck, some days, it's not clear to me that you have to be competent. You sound more than competent, and I see nothing in your question that indicates you aren't doing really well.
posted by zachlipton at 2:07 PM on March 16, 2016

I think "Work Harder" is a vague action. Since CS is as much an art as a science, I would suggest that "Practice" would be an actionable item here.

School usually runs through at a frenetic pace and nothing has much time to set in.

If you want some practice on your own, just about every language has a decent linter or formatter you can work with to sharpen your style. Read through a few style guides for pointers: is what we use.

If you haven't had a code review, I see that as the fault of the school, not you.

Hang in there, sounds like you're doing just fine for where you are at. When you graduate you'll get someplace where you get to hone your skills. There will be times you hit your head on the keyboard, but you'll work through it. The great thing about modern programming is it is a team and you can work through problems together with the strength of a variety of experiences.
posted by nickggully at 2:16 PM on March 16, 2016

You're absolutely going to have a lot more options when you graduate than I did from a mid-tier university (degree of computer engineering). Your lowest academic lows are higher than almost all of my academic highs! The important thing isn't are you an impostor it's do you enjoy the field you're in enough to do it for a chunk of your life. And it's not even something you necessarily have to stick with forever. But if you do switch, do it because you don't like the work not because you feel inferior to others. That way lies nothing but heartbreak.

There's so much of that stuff out there for women, though, that I often feel like an imposter... like I don't deserve it, and a girl who wins math awards and has a 3.8 GPA does.

Look, you're as deserving as anyone of aid. If that hypothetical girl who wins math awards wanted aid she can join the same groups. Some day when you're in a position to aid someone will you look at them and go "you didn't win an award, to hell with you and be gone from my sight!"? I doubt it. You'd be thrilled there was someone trying to do something she wants to do.

So I also think having someone to talk to and help you avoid negative thinking like this would be good for you. But I think you're doing fine and I think that once you get away from this kind of environment you'll feel better. Academia's blessing and curse is that there's a very clear metric to compare yourself to other people with. Most jobs aren't like that, it's just are you getting the work done? yes or no. And even a 'no' isn't that big a deal in a lot of cases! You have teammates to watch your back so if you can't do something you can get help you out and vice versa.
posted by Green With You at 2:16 PM on March 16, 2016 [1 favorite]

I'm a woman in math, not CS, so I can't speak to the specifics of your field, but I felt basically the exact same way you do when I was in my sophomore year. I had a few flaws on my transcript and felt a ton of shame and inadequacy about not being as smart as my brilliant classmates. So maybe I can speak to that part of your question.

I think all of the things people said above are correct and I think that your biggest problem is a lack of confidence. I also know that it's not necessarily realistic to think that you can just will yourself into having confidence on your own. The best thing that I did for myself as a terrified undergrad was finding a respected professor to act as an advisor for me who believed in me and was willing to advocate for me. You mention that it is hard for you to ask for help, and it was hard for me as well; what I did was figure out which professor was known as the most understanding about things like gender pressures, mental illness, etc, and then choosing to cultivate a relationship with him. Fortunately, he didn't give a damn that I hadn't gotten straight As and wasn't the stereotypical math genius boy. :)

So yeah, I really encourage you to try to find a mentor and to show them that you are great, because you sound really great, and you deserve to hear it. Guys get tons and tons of external validation and oh my god having that external validation helps so so much--once I had heard from someone respected that oh yeah, I was actually not totally shit at math, I started having more confidence to try harder problems (and fail at them, a lot, and learn a ton) and to work productively without some sort of background noise telling me that I wasn't any good at anything I was doing. And I ended up doing way better in grad school admissions than any of the guys I was so intimidated by my sophomore year (although even during my senior year, my advisor basically had to yell at me to get me to apply to any of the top schools in my field).

(That's another point--I also think that like me, you're probably underestimating not just your ability, but also your accomplishments. A 3.6 at an Ivy is really really really not bad. I think you're in a much higher tier than you think you are.)
posted by bergamot and vetiver at 2:25 PM on March 16, 2016 [3 favorites]

A second, more general point: For those of us who were for some portion of our lives the best at something; It can be hard in college or early in our careers to adjust our expectations from the best to good enough or excellent or above average. Take it from this slightly older nerd, that can have a major impact on our self-esteem even if we intellectually always understood that we were not the best. Knowing on a mathematical level that there are 1000 people better at your thing than you are is different from meeting those people. You're in a vacuum right now, the world is big.
posted by French Fry at 2:35 PM on March 16, 2016 [4 favorites]

If your goal is just to "get" CS, then it sounds like you are well on your way there and you already have the skills and initiative to be successful. If you goal is to graduate top of your class and land a job with an elite tech firm, then you will have to be very driven.

To deal with the self-loathing, you could see a therapist, maybe do some CBT. If that's not your cup of tea you could experiment with hallucinogens (weed, shrooms, maybe LSD). It's much easier to deal with these problems when you are able to do so without negative emotions interfering. Then it is much easier to listen to all of the other reassuring things (which are very true) people will say in this thread.
posted by unrulychild at 2:47 PM on March 16, 2016

How interested are you in actually working as a software engineer? I was a woman in math and computer science at an elite undergraduate institution and I loved proof based courses and theoretical computer science best. I was OK (let's say about a 3.6 student) at coding based classes but I found them frustrating and didn't love them all that much. Luckily for me, the CS department at my school at the time was incredibly theory-biased and I never had to do much coding and no one cared if I had projects on github or apps to my name.

I imagine if I were in school now when there is a much stronger "culture of tech" and the idea of "going into tech" is a much more established career path I might have gotten swept up in it. Are you sure that's what you want? Because you sound very talented and like you have a love of the subject that could serve you wonderfully in academia or industry doing something besides writing code all day. Operations research and bioinformatics were high on my list before I decided to do what I do now (which is medical school, but that was in spite of my love of CS, so not necessarily putting that on the table for you).
posted by telegraph at 2:55 PM on March 16, 2016

Somebody already said this above, and I favorited the comment, but I feel so strongly about this I've gotta say it myself. You are going to be fine. Just build your thing, whatever that is. Conceive a project and see it through to the end. Do not worry about writing elegant code. It's more important to finish.
posted by spudsilo at 2:55 PM on March 16, 2016

Put simply, the people you are feeling inferior to have likely been programming longer than you have. From what I'm reading, you only started writing actual code (Web pages don't count) in college. And you're still in college. People who started programming in high school may have four years on you, and people who started even younger could have as much as a decade more experience than you have. Some people also take to the subject more naturally than others. The reason you feel like such a noob is that you are a noob.

But that's okay. Technology is a huge field and no one ever masters all of it. Once you get over a certain hump, then it's all learning about new stuff, for everybody, for their entire career. If you fail to continually learn, you are obsolete and will be replaced with a newer model. You will probably hit that hump a few years after college (you'll learn a lot about software in college, but probably not so much about how software development is actually done). The important thing to get out of college is foundational and theoretical stuff, so when you go to learn something new, you don't have to learn everything it's based on. If you can, get experience with tools and techniques used by career programmers (the fact that you even have a github is a great start) and learn their basics by doing a few projects with them.

Don't sweat the GPA as long as you graduate. The only company that has ever even asked about my GPA was Google, and so now I work for one of the other ninety bazillion tech companies that aren't Google. *shrug*
posted by kindall at 3:04 PM on March 16, 2016

I'm just starting to think maybe I wasn't born to be one.

Personally I don't believe in this. Everyone is at their own level and has their own interests. Writing code is not one thing, you can do it however you want, you can learn it however you want, what's important is that you're interested in what you're doing. As long as that's true, and you're not forcing yourself to do what you're doing, I think you're doing great.

Of course this comes from someone you don't know, and so I don't know if my opinion has any value to you, but that's kind of my point. Ignore me. Play your own game, find your own meaning, create your own opportunities, stay true to yourself and don't worry about finding yourself in the world's hierarchy— which will be imposed on all of us more than we'll enjoy anyway.

I see a lot of people around me who are a lot smarter / more experienced than me

As long as these people are also nice, or clever, or sympathetic, or interesting, then I think it's great you have these people around. The people you know are a major advantage in a stone soup sort of way.

I guess I just think I need better skills, hard and soft. … I'm bad at asking for help, and I've never had a code review.

Everyone has to learn somewhere. Getting out there, putting code up on github despite your worries & fears, contributing to other people's projects, getting engaged in something, that's how you get help, code reviews, skills, etc. Of course this is hard with the emotional component of the situation you're describing. The first time is probably the hardest. It's like going swimming. You can dip your toes in or jump in but eventually you're going to end up in the water and how you got in won't matter, you'll be completely wet and swimming around. Just need to get started.
posted by doteatop at 4:17 PM on March 16, 2016

Your grades are fine. You're doing great. Math isn't super important to programmers but if you like proofs you're doing well enough on it anyway. A lot of this uncertainty is in your head (which isn't to say it's not real, just that it's not super warranted). Sounds like you're honestly ahead of where I was as an undergrad, and now I do this for a living.

Memail me if you'd be interested in interning at Google; I'll send you some possibly relevant info. I think you'd be a great fit.
posted by Itaxpica at 4:56 PM on March 16, 2016

(Which is to say, Google has specific internships for non-senior college students, especially from underrepresented groups like women and minorities, targeted way more at learning and building confidence, and I think that that would work really well for you).
posted by Itaxpica at 4:58 PM on March 16, 2016

If you had seen the code that PhD physicists with like a bazillion papers write, you would know that your code is fine. Caring about it not being spaghetti code, much less whether it is ideal is better than great. If your code does not make someone go "you can do WHAT with an #include statement!?" you are doing better than some really smart people who get major prestige for working with some of the biggest supercomputers on the planet. You are the sort of person who is terrifyingly smart and hard working, even if she doesn't believe it.

Look, you're in a place where a lot of really smart, really motivated people are, and that's kind of the bubble you're in right now. It's tough to deal with the fact that you might no longer be the best, the smartest, the most talented at the thing you care about. I mean I'm sure you knew that there were smarter people before, but this is the first time you've had to deal with it for real. You're not used to having there actually being someone right there in your position where you even could think "oh I'm not as smart and hard working and motivated as that person." And it's hard.

But look, when I got to physics grad school, it was the same sort of shock. But the people who couldn't hack it were the people who couldn't handle being only the really good of the best instead of the best of the best, who lived in the past instead of adapting to the situation of being surrounded by people who were just and smart and motivated as they were. And that's kinda sad, because being surrounded by smart and motivated people is awesome. So don't work yourself to death, don't freak out too hard about grades, focus on learning and making it stick and making friends. Because once you get that degree, grades only maybe matter a little bit for your first job. Friends and skills you will keep for much longer and will matter more in the long run.
posted by Zalzidrax at 5:23 PM on March 16, 2016 [2 favorites]

I think it might also help to think about the narrative of "born to be a good programmer". Needing some kind of innate "spark" of brilliance is a common kind of narrative about what it takes to excel in many STEM fields, but the evidence I've seen doesn't actually support this.

Sometimes it feels like this can lead to a spiral of decreasing confidence, because when you fail it's evidence that you lack that "spark" rather than that you need to learn something. Also, you expect other people to judge you on whether you possess the "spark" instead of on your actual progress, so you may be afraid to ask questions, or afraid to show that you're making an effort. As long as you mostly succeed at everything it's OK, but when you start struggling you withdraw.

For me sometimes one of the things that breaks me out of that is forcing myself to admit my ignorance and ask questions. So, next time somebody says "I'm working on a frobnozzle", I stop them right there and say "remind me what a frobnozzle is?", even if I'm pretty sure it's something I was supposed to know already.... Often I find I catch up a lot faster than I expected, and get a fun conversation out of something that might have otherwise been one-sided and awkward.
posted by bfields at 5:43 PM on March 16, 2016

Many years ago, I was very similar to you. At a top CS school, getting a mix of As and Bs (more Bs than I had hoped) in my CS classes, looking at my classmates and thinking they were all so much better than I was.

Fast forward, and I have had an incredibly successful career as an engineer, even though I struggled for a while in my early 20s feeling like I couldn't find my groove in the industry and almost dropped out. I would say I have been as successful, if not more successful, than my classmates who were better programmers, knew more CS, were better at "abstract visualizations."

So, here's some thoughts about getting a CS degree:

1) Getting a degree where you get some Bs is GOOD. It shows that you are willing to try to do things that are hard for you, and push yourself through learning them. You do not have to get As in everything, in fact, if you are getting As in everything, you might not be pushing yourself to learn! I realize that's against what people say about school and talent but I really believe that being willing to try things a bit out of your comfort zone and not ace them is a sign that you are capable of pushing yourself and growing.

2) It takes a long time to go from the abstract world of school to the real world of making things with tech, at least it did for me. Not everyone has this experience. I'm an excellent developer across many types of projects and have a long track record for delivering complex systems, but man am I terrible at certain things that others find easy, like anything involving a UI. I hesitate to endorse the calls to "make something on your own" unless that feels like a thing you would enjoy. There are many ways to find your groove as an engineer and not everyone falls into the side projects groove. I don't really like doing projects on my own.

3) I promise you that if you can do an ivy league CS degree without failing out completely you can be a great working engineer. Hell, even if you DID fail out completely. I've worked with and hired people from all backgrounds. CS degrees are useful for certain very narrow areas of tech work, but they are certainly not indicative of success as a software engineer at large.

4) Almost no one in college writes beautiful code. I mean, really. Almost no one OUTSIDE of college writes beautiful code. I really doubt your classmates are as perfect as you think they might be.

5) You're in undergrad. You need to give it time. Most people don't have interesting code to share with the world until they've been doing it for quite a bit longer. Additionally, it's incredibly hard to judge your skills as an undergrad because frankly grades don't give you a strong indication of what it means to be a good programmer. Plenty of folks with great grades have mediocre careers, and vice-versa. Grades aren't everything, careers aren't everything, and it's very hard to predict a life from a series of tests.

6) Be stubborn! You must have some stubbornness to be a woman in your position right now (I wish it weren't true but it is). Hold on to that stubborn belief that You Are Enough. You can do this. I mean it. Be stubborn, don't give up. This is not going to be the end of your struggles, unfortunately. School is hard, the first few years of working are almost always harder. But you can and will survive, and you're gonna be great. Just keep going. You like tech, you're good at it. Keep going.

If I could leave you with one thought, it would be to read Mindset and think about how your notion of innate ability is impacting your perspective. This stuff is all incredibly learnable. If you keep at it, you will be fine. You do not have to be perfect to be a great engineer, I promise you. I really wish that someone had told me when I was in your shoes that I didn't have to be perfect to find my way, because I really didn't have to be, and I wasted so much energy beating myself up over stuff that just didn't matter at all.
posted by ch1x0r at 5:53 PM on March 16, 2016 [2 favorites]

Everything you say about yourself makes you sound like people we admit to our top-15 math Ph.D. program. Those people are good at math; so are you.

I agree with the people who say it might be good for you to have a specific thing you want to do, rather than a course you want to rock. Because, yeah, if a course has 100 kids in it, somebody's going to rock it more than you do, and then you're going to end up asking whether you really did well. Whereas when you are doing a thing, there's just you and the thing, and you rock the thing, and you feel great. Which is all by way of saying -- one of the things an Ivy offers that a giant state school sometimes doesn't is the opportunity to do a senior thesis or project. If you have that opportunity, I would definitely take it. You will end up with a thing that's yours, that you made, that you're proud of, and that's way better than an A for your sense of self as a scientist / engineer / coder.
posted by escabeche at 6:07 PM on March 16, 2016 [1 favorite]

I then transferred to an Ivy, where things got much harder. I'm still hanging in there, but my 4.0 went to a... 4.0, but then a 3.7, and after this semester probably a 3.5-3.6. Like many Ivy Leaguers, I've always been a 4.0+ student, so I'm always feeling like an idiot.

You are crushing it. I wish I were smart enough to pull a 3.5 in CS at at an Ivy. I went to one and graduated with a 3.3 GPA in Math (much lower average GPA in my major classes) and have never had a problem getting a job. I am embarrassed by my GPA, and wish that I had studied harder in school, but after your first job you can take it off your resume and then all people will see is your school and major. Many of my friends in college graduated with CS majors and GPA in the low-mid 3's and they are all gainfully employed, mostly in cool jobs.

If you want to get a job as a developer after school, you will definitely be able to, or you could go for tech-adjacent job like Business Analyst. In my experience, people in the business world grade GPA's on a bit of a curve*, where a 3.5 in a "hard" major, like CS or Physics or something, is comparable to a 3.8 in something like History, Poly Sci, or even Econ.

* I'm not saying that this is fair or even a good idea; just that it's a phenomenon that I have observed.
posted by Aizkolari at 6:32 PM on March 16, 2016

Let me nth that you are doing fine and will have lots of opportunities if you want to exercise them. I'm likely 20 years older than you and I can say that I've literally had the same impostor syndrome feelings about comparing myself to Joel Spolsky.

Stop that. Full Stop.

(I realize that is hard to do but you must). Most people in the world don't write specifications for Excel programming languages so don't compare yourself to him. There is variety of opportunities in all sorts of different areas for above average graduates from great schools (and you most certainly are and will be one of those).

One thing to keep in mind that lots of people you see because they have a big web presence is because they are ridiculously deep in an area but not wide. Case in point, I've met and heard Doug Lea speak on multithreading and Java. He is quite possibly the most knowledgeable person in the world on this topic. He will however admit in his talks that he has next to zero skills or experience in using his deep arcane knowledge to build anything specific or useful. Likewise, I've been to plenty of tech conferences run by Microsoft and Oracle and the like where you can talk to Program Managers of the different sub-systems of their products. They are ridiculously smart and know everything about their kingdom. You would be shocked to know that almost without exception they know next to nothing about the rest of the product they work on. It can be incredibly frustrating to know as a consumer I know more about the product as a whole than this supposed insider.

The point I hope you get out of this is that you are almost assuredly doing well, there will be lots of things you can do with your knowledge and the experts you see have tons of holes in their knowledge/experience.
posted by mmascolino at 6:35 PM on March 16, 2016 [2 favorites]

One other thing you might consider doing is look into talking to a counselor or therapist. I would strongly bet that Yale offers such services to their students. I took advantage of such services for a few sessions when I was in school and it helped.
posted by mmascolino at 6:38 PM on March 16, 2016

Your grades sound more than fine to me. I went to a top-tier STEM school and came out with a 2.8, yet I've worked at 2 of the biggest names / "top companies to work for" tech firms and also several startups. Almost no one cares about grades, at least after your first job.

As far as math goes, most programming jobs you rarely encounter difficult math issues. I mean, it depends some on what you're working on, but thats easy to avoid. And honestly it sounds like you're selling yourself short there anyways. The only significant theory/math stuff I've had to deal with has been in interviews! But for those, you just need to study up on data structures and algorithms basically, and practice "whiteboard coding".

For people coming out of ivys or top STEM schools, its normal to be a little theory-heavy and good-coding-practice light. Thats completely accepted/normal at most tech companies --- after all, you'll get better at the day-to-day of coding in your job, its the other stuff that they won't take the time to teach you. I had very little practical coding experience when I graduated.
posted by thefoxgod at 6:39 PM on March 16, 2016

Also, Joel Spolsky is a smart programmer, but you have probably never made a decision as dumb as the one he took to write his own in-house programming language.
posted by Aizkolari at 6:39 PM on March 16, 2016 [1 favorite]

You sounds like an awesome person, who is in the perfect environment to come down with a raging case of imposter syndrome:

1. At a competitive school, where nearly everyone assumes that they were the admissions committee's one mistake.
2. A woman in a field where the prototypical genius is male (sadly, most fields). Even if you have faith in your own abilities, it's hard not to internalize what's in the air.
3. In a field where you can work extremely hard, and still make only halting progress. It can feel like banging your head against a brick wall.

Both cases #2 and #3 are compounded by cognitive dissonance. You may know that there are many fantastic female coders, but if you get the message from your environment--either implicitly or explicitly--that the best coders are male, your brain is going to start wondering whether perhaps you're not as smart as you think you are. And even if you're working really hard to attack a difficult problem, if you're banging your head against a brick wall for a long time, eventually your brain is going to conclude that it's your head that's the problem (and not that the brick wall is really, really hard).

Do you have anyone in your circle who is 100% on Team You? I say this because it can be so easy to lose perspective on your abilities and accomplishments, especially in an environment like the one you're in. I don't always believe that I'm capable of doing the things I want to do (these things involve a combination of math and computers). But I do have people who tell me that I've set myself extremely hard problems to solve, and that I've solved hard problems in the past. They seem to believe that I can solve the problems in front of me now. Even if I can't always believe in myself, I can trust that they are telling me the truth, and it makes a world of difference.

Good luck. I'm rooting for you.
posted by MrBobinski at 6:53 PM on March 16, 2016 [1 favorite]

I'm a man rather than a woman, and I'm well out of school, but this sounds pretty familiar to me. I did a BS in Math at a decent private school and have made a career of programming. In both contexts I have had to confront my own limits, which have included some significant getting stuck and even failures.

I think there are two problems for anybody in fields like Math & CS:

(1) A lot of this stuff is genuinely difficult. Writing elegant code? I'm pretty sure it's literally every last programmer on earth who struggles with that, though some particularly talented people have learned to write elegant code maybe as high as 25% of the time and delete the rest. Reasoning about other people's code? It's arguably on par with writing the same code in the first place. Upper division/graduate math is often conceptually difficult, professors make haha-just-joking-but-really-true remarks about the fact that you shouldn't expect to understand certain things, you just get used to them. So... these are fields in which reasonably bright people often feel stupid, because human intelligence is kind of ill-suited for them.

(2) There's always someone better. It'd be reasonable to assume that since you're in an Ivy program and have kept a higher GPA than I did that you're probably brighter than I am. Congrats! But you probably know someone who makes it look even easier. Maybe even someone for whom it *is* a lot easier. It happens, there are in fact people for whom it comes more naturally and they also work hard at it. And the more difficult the field, the more these people stand out.

So the bad news is that I think these are bad fields if you don't want to feel perplexed and even stupid sometimes.

The good news is that these fields are big and there's a lot of work to be done. Maybe a bottomless amount. And you're doing well in an Ivy program. That means you have baseline capabilities which mean you can make a contribution.

And the best news of all is that it sounds like you *like* solving problems and coming to new understanding!

Personally, I think that keeping that last part alive is the most important thing. Sure, work hard. You'll have to, and it will help you get better. But never feeling lame or dopey is probably not in the cards. So... develop a sortof studied tolerance for it, knowing it's going to be part of the experience. And *then* do whatever you have to do to nurture that intrinsic motivation, that love of making a solution you're satisfied with, of arriving at the point where you get to appreciate the elegant concepts like a beautiful view.
posted by wildblueyonder at 6:57 PM on March 16, 2016 [2 favorites]

Sometimes I feel like I'm just a leeeeeetle bit too math-dumb to be a good programmer.

Nope. In general logic is more important than maths when it comes to programming.

but when it comes to implementation I kind of suck at writing things elegantly and end up with a lot of crappy code.

This is the sort of thing that benefits greatly from experience - keep doing it and you WILL get better.

The field of software development is very broad - and not at all like what you will be encountering in CS class.

Find an area you're interested in. Write some stuff - write more. Once you have something working, re-work it - can a newcomer understand your code? Can you structure it better so that they can?

Don't listen to the self-doubt. We all started writing crappy code that would embarrass us today. The thing is to recognise it, and figure out how you can do it better. Over time, it'll become 2nd nature.

(i.e., don't get A's) then at the end of the quarter I'm filled with despair.

Once you're out in the Real World (TM), this stuff will matter not a jot.

I'm definitely not a certified genius... How do I stop feeling like such a dope?

You don't need to be a genius to write code. You do need a certain mindset, and you do need experience. In the world of software engineering, competence is often worth more than genius. Find a niche where you enjoy working, it might be web stuff, it might be UI stuff, it might be embedded, or device drivers, or any of dozens of possible areas, but it helps a lot if you can do something that is fun and meaningful to you. Then you master it, which will take time. Forget comparing yourself to others, just be the best you that you can be. Actually that's good general-purpose advice for any area.
posted by HiroProtagonist at 7:46 PM on March 16, 2016

I'm fresh out of college, and just started working full-time for a contractor writing software at a NASA facility. I got the job as an extension of an internship a few summers ago. The internship was pure luck. It literally was because I went to the same school as my two supervisors. They told me so. Somewhere in the first week of work. 3 years later, I still feel like an impostor.

The first project, a bunch of miscellaneous scripts and small programs for a science team, was run by great people who were really supportive.

The second project, a web application, had 3 talented people working on the project, but the team lead was utterly useless. He had no clue about how to create a good project. Agile development meant that we made shit up as we went along. I wrote some very embarrassing code that I hope nobody ever looks at. The final product was an abomination. In the process I learned a lot.

Third and current project is another web application run by a man and a woman who are absolutely brilliant, and the team is super organized. I'm kind of intimidated. I've been flailing around for 2 months, trying to learn three new frameworks. Literally this afternoon, the one lead came in when everybody else had left for the day and said, "The other team lead and I were talking, and ..." I thought I was about to be fired. Instead we looked at solving a new problem, and I actually contributed something they didn't know about.

All of us got lucky in some way. Nobody expects you to know everything coming out of school. Everybody prefers working with somebody who has a realistic attitude about their skills, willingness to work with a team, and the desire to learn more. Hot shots are a pain in the ass, and usually aren't nearly as good as they think they are.
posted by circleofconfusion at 8:21 PM on March 16, 2016

I'm a woman who majored in CS at a top school, and I'm now 6 years out from graduation and working as an engineer. It was rough even though I worked a ton, but the things that helped me out:

1. I realized that lots of my male peers were bending the truth - they said they only spent 6 hours on the programming lab, but they actually took 9 hours. I was doing just fine compared to their reality.
2. I figured out that a lot of the conversation and bravado - the "me and my partner stayed up all night rewriting our virtual memory system to be faster/better/stronger" - was actually poor planning and a bad understanding of what tradeoffs mattered. I was much happier planning ahead and not pulling all nighters, even if it meant I didn't have war stories to share.
3. I figured out what I liked and didn't like - I like solving real problems, I don't like solving abstract problems. That means that I have no code on github and haven't had a side project in years, but I still have a good job.
4. It gets better. You learn what you do and don't like and spend more time doing the things you do like, you gain more experience so you're more confident in the things you're doing, and everyone chills out and becomes way less competitive a year or two after graduation.

If you ever want to chat or a code review, meMail me. I've worked with a lot of interns and recent grads, and I think everyone goes through this - I'm happy to help!
posted by asphericalcow at 8:26 PM on March 16, 2016 [1 favorite]

I'm also a woman who majored in CS. My grades were great and my professors loved me, but in the last year or two of my program I experienced imposter syndrome or something close to it. Turns out I was realizing that I do not care about computer science itself. I just wanted the practical computing skills so I could go and apply them in some other field.

Funnily enough, this was the reason I got into CS in the first place! I wanted practical skills that I could use in other fields that I am actually interested in. I just lost track of that original goal while I was in the program and contorting myself to be like my tech-loving classmates. I felt so out of place around the people who loved academic computing, research, and tinkering with algorithms for fun in their spare time. I felt hollow and phony.

Now I'm away from that environment and I've worked in several different non-computing fields using my computer skills (e.g., education, the arts). I love it. I feel fine that I don't care about playing with computers for the sake of it, and I love the logical skills that my CS degree helps me bring to these fields. Being in a real-world applied-CS situation makes me feel much more comfortable about my computing skills and my level of interest in computing.
posted by cadge at 9:18 PM on March 16, 2016

I'm a woman who pretty much was born to be a programmer. And what I mean by that is I'm not great at math (scraped through second year linear algebra) and I'm not really on top of the current frameworks (never even got to be an expert at Angular and now we're moving to React) and asking me to write a parser pretty much makes me forget how to count, but I fucking love this work like it was invented for me to enjoy - even though sometimes I'm pissed off at spending an entire day tracking down an issue (that was totally obvious to anyone with half a brain who just understood that cryptic comment seventeen files back which only makes sense if you already know about the problem it's describing), and I look at my code and think that it's high school grade crap that is embarrassing to put on github (these days I don't think its any better, but i put it up anyway because frankly employers still don't look at a github profile anyway, so it can't hurt me and it's such a convenient way to keep stuff).

If you like formal proofs and math, you might find it fun to learn some Haskell. If you find yourself falling back on "get it done" for assignments, perhaps a coursera course would give you a lower stress way to try more challenging solutions (although taking classes in your spare time might be the kind of thing that's only fun when you don't take classes in your daytime anymore!).
posted by the agents of KAOS at 9:19 PM on March 16, 2016 [1 favorite]

Getting a 3.5 in a computer science degree at an Ivy is literally being a certified genius with respect to most of the population. You are obviously capable of being a good enough programmer to do whatever useful programming work you put your mind to.

I bet that all the time when you try to program stuff, you run into awful depressing problems that slow you down and stop you from doing it all the way you wanted. Maybe you wanted to use some library that seems like it should do X, but then it doesn't work the way you thought it would and now you have to do X some dumb-looking way. Maybe you are making a website and you have no idea how to get the pixels on the one thing aligned with the pixels on the other thing. Maybe you are trying to use SSH to log into a computer and it just makes an error every time and you thought you followed all the instructions but now you have no idea how to log in or even figure out what is wrong. It's easy to feel like these problems are symptoms of being dumb, but they aren't. They are just symptoms of being a programmer trying to do things.

I personally guarantee you that Joel Spolsky has had thousands of hours of these problems. Google engineers have these problems. Hot startup programmers have these problems. MIT CS students with perfect GPAs have these problems. These problems are unavoidable steps in the process of learning about the big list of all the stuff.

Regardless of these problems, as long as you can keep pointing to something at the end of the day and say "I learned this," it was a good day, and you are on the road to being a great programmer. You are making a dent in the big list of all the stuff, and eventually you will learn how to decompile the library and read how it works, and about all the weird CSS attributes and why they are weird, and how to debug the SSH connection. There is just a lot of stuff and it takes years to really get through enough of the list that it doesn't hit you in the face every time you do something new.
posted by value of information at 9:31 PM on March 16, 2016 [3 favorites]

This is not directly related, but please consider if you can attend the Grace Hopper Celebration of Women in Computing conference. It'll be in Houston in October, and you can apply for a scholarship until 30 March. It's really inspiring and I found it really good for fighting imposter syndrome, personally, to be around other people that are really relatable, as opposed to my day-to-day room-fulla-white-guys career.
posted by sldownard at 1:07 AM on March 17, 2016 [1 favorite]

Do you tend to be a perfectionist? It's totally okay to let things slide a bit. A 3.5+ is good, if not great. And it's fine to ask for help too, everyone is struggling to some extent.
posted by Standard Orange at 1:45 AM on March 17, 2016

Absolutely it's just
a.) this:
Imposter syndrome as a woman in tech plus

b.) this:
Put simply, the people you are feeling inferior to have likely been programming longer than you have

I was honestly expecting to see much lower GPA numbers when I opened this post. Your brain is fine for this - you're doing better than I did in school, I'll tell you that. I keep trying to come up with the right way to explain the contrast between how you feel about this and how I did as a guy who matches the image of a programmer very closely but I'm worried that it will sound like I'm wallowing in it which is not my point but rather just that this self-image makes a big difference. The one advantage I had over you in term of actual skills at the corresponding point in my life was experience programming, and you can get experience.

The only thing I'd say is I think there are some personalities more suited to the practice of programming than others, because it is frustrating so you need something that keeps you coming back. You'll have to figure out how you feel about that. But you already seem to know that you do like the math/theory side and I suspect you're formally qualified enough to find opportunities in that direction.

Often I will have a good idea about how to do something more powerfully but I'm afraid of running out of time / not getting it done so I go for the ugly, brute force way

Also this... kinda happens a lot in the commercial software world.
posted by atoxyl at 2:37 AM on March 17, 2016

I'm very interested in theoretical computer science and concepts

If you like this stuff and are interested in grad school, concentrating on math and statistics can make you very valuable in positions that involve modeling, optimization, data analysis, stuff that requires a more theoretical background.

I recommend getting involved in a research project that interests you. Look at professors doing work in areas that look interesting to you and see if you can get a student assistant position with them for a semester. It doesn't even have to be in computer science! In fact, looking at work in other departments that need computer programming support can be very rewarding and informative. Your problem is definitely not that you're bad at programming, it's that you don't know what you want to do yet.
posted by demiurge at 7:43 AM on March 17, 2016

Rambling response follows.

You are good at proofs, you have math through calculus, and you are getting a 3.5 at an Ivy.

Just a guess, but you seem pretty good at this. The impostor syndrome is real (I've heard it affects women more than men) and I have it to some degree. Then I started thinking it through. I'm fooling everyone. Really? I'm fooling all these smart people? They are soooo much smarter than me and I've got them conned? Either I'm the Rainman of bullshitters or something else is going on.

You might not be in the top 1% (although, 3.5 at an Ivy? That's got to put you up there in the population of programmers), but most people aren't and you don't have to be in the top 1% to be a very, very good programmer. If you compare yourself to the very best, the most outlandish then you will always fall short. No, you aren't Linus Torvalds or Fabrice Bellard (who wrote a PC emulator in JavaScript that lets you boot and run Linux in your browser I can't even believe I typed that what the hell how is that shit even possible?????) or any one of a hundred other people. Most of us aren't.

I see a lot of people around me who are a lot smarter / more experienced than me and I'm definitely feeling like I am way lame compared to them.

You're at an Ivy league school. A school that rejected valedictorians who compose poems in Old English because they were insufficiently well rounded. It's a tough crowd.

As for being embarrassed about your code... your code right now is shit. My code in college was shit. It took me years to be able to write anything substantial that had any organization at all. A few years ago I dug up some old code that I did for a graphics class 20 years ago. I found a bug on the first page. The code was awful. I was young and foolish and today I am equally foolish but have the advantage of 20 years of experience and I've made most of the mistakes that can be made in this field multiple times so I can see them coming.

Computer science is going to cover a lot of different things and not all of them are going to click with you. Some parts of it are very mathy. Some actually are math. Some parts are less mathy, but require lots and lots of code. Don't assume you are just good for web programming (although there's nothing wrong with web programming) and check out other areas. They will be hard. That's okay. This is supposed to be hard. Some of them won't click. That's okay, they don't all have to click.
posted by It's Never Lurgi at 10:51 AM on March 17, 2016 [1 favorite]

So, those are the highs and lows of my personal experience with math and coding. I know there's a lot more to cs right now than grades. I've built a couple web applications on my own time (things I just wanted to use for myself, basically), and have a part-time job as an assistant web developer, and have a summer internship working on a suite of apps for a local university. I'm involved in women's computer science groups, so I've gotten scholarships to go to conferences, won mentorships, etc. There's so much of that stuff out there for women, though, that I often feel like an imposter... like I don't deserve it, and a girl who wins math awards and has a 3.8 GPA does.

I work for a state university, paying students to break fix servers. You've likely heard of impostor syndrome, but not considered its mechanics. There's a certain type of personality that signs up for way too much stuff, and then feels bad that they're not knocking everything out of the park like their peers.

Are you perhaps, for any given goal in your life, comparing your results the best person in your circle for that goal? Perhaps you are comparing your personal failures with everyone else's public successes, without realizing they have an equal or greater number of personal failures they aren't so loudly trumpeting. The people with awesome github repos generally have terrible GPAs. The people with stellar GPAs study so much they don't have time for part-time jobs writing code. The guy blogging about software development is basically summarizing a popular book from before you were born, and was described as "a basically ignorant junior employee" by one of the three original Chief Software Architects at MS.

You're a successful Ivy league student, working a part time job, with an internship lined up. It doesn't matter that your personal projects aren't leveraging the power of Big Data, that you didn't get an A in that physics class, or that your python code isn't fully PEP8 compliant. Your future is safe, and on a completely different trajectory than mine or many other commenters here today.

I'm bad at asking for help, and I've never had a code review.
I guess I need to work harder, but work smarter, and also get some kind of technical self-esteem, but I don't know how to do that.

Now for some constructive advice. Your employer should be requiring peer code reviews. My students submit pull requests to our private github repos. This is good for improving quality of code released to production, but a well run review process is also good for improving self-esteem. The lesser known finding of the famous Dunning-Kruger study is that having people grade other's work improves their evaluation of their own performance relative to peers, so performing peer review of code should have a similar effect.

I'm not sure if I'm lazy or if things will never "click" for me.

Take it from no finer a mathematician and computer expert than von Neumann: "In mathematics you don't understand things. You just get used to them."
posted by pwnguin at 1:33 AM on March 18, 2016 [1 favorite]

Lots of good advice on gaining confidence that you are good enough at math and programming; I don't have much to add on that. I will add that, since you love proofs, you might like areas of programming and computer science that emphasize proofs. Find a professor who can tell you about Leslie Lamport, reasoning about programs, Edsgar Dijkstra, model checking, Haskell, Coq, Agda.
posted by at at 11:41 PM on March 18, 2016

« Older Why is Gmail refusing to quote the text of the...   |   About those 10,000 steps.... Newer »
This thread is closed to new comments.