7 ms·
Ask HN: 30s and “senior” software engineer, but I suck at programming
No I don't think its imposter syndrome. I got into tech a few years ago because I find building cool stuff, especially clone apps, to be really fun. It's like legos for me, and I build a bunch of projects using various technologies so I keep learning some new frameworks and languages. I feel good working on all sorts of applications, from backend to web and mobile apps.
Unfortunately I tried to do some mock interviews (leetcode) and got demolished. I have been practicing for the last couple of months, but I just cannot solve a single medium problem on my own without looking at some help and even then it is hard for me. I think that I'm hitting my limits because I'm finding that I am not that good at actually "programming". I have a hard time thinking about some of these problems, because I can't comprehend the question itself.
I can build UIs, or build a backend api application deployed on some cloud provider, but I don't know I just can't seem to do actual programming like the stuff you do with leetcode. This has made me really question myself and my abilities, and I'm not sure how I'm supposed to find a better job when I can't get past the technical screening.
I'm depressed because I make a decent base salary but I don't really know how to solve some of these tough algorithmic questions. I'm feeling stuck and I don't know how to get out, because I just feel overwhelmed. I want to do something interesting and hopefully make more money, but I've hit a wall. Help!
- caslon 4y agoTake an algorithms course, or read an algorithms textbook. You'll probably be surprised at how much better at everyday programming you'll seem.
- anyfoo 4y agoIn my mind this is the only answer (at my time of reading this thread) that hits the nail on the head. Algorithms and Data Structures is something you learn. And disregard everyone who says "I don't actually need this in my job". They may have just forgotten how trivial it is for them to implement a binary search instead of a linear scan at the proper place with a second thought. Or they really don't... and have code out there that does in 15 seconds (or much worse) what could have been happening in the fraction of a millisecond. But, like most "mathy" subjects, this is not something that you usually pick up on the go. At the very least you need a solid foundation, and that only comes through serious studying. Taking a textbook, opening it at the first page, and starting to work through it is one of the better ways to achieve that. "Mathematics, you see, is not a spectator sport." - George Pólya
- dc-programmer 4y agoMy experience lines up with your position that these things can’t be learned passively. An alarming number of new grads I’ve interviewed have a tenuous grasp of the fundamentals (the less likely the material is to show up in an interview the shakier the understanding - looking at you computer org). And a lot of these are graduates of their state’s flagship public university. I can only assume the schools are more than willing to just let students go through the motions. Every new grad filling their electives with AI/ML classes probably doesn’t help either
- yamisobad 4y agoThank you. Do you have any suggestions? I bought a book that was recommended to me, CLRS intro to algorithms. I've tried going through the book, but maybe I'm too dumb (I didn't go to college for engineering) and I find a lot of the math concepts in there confusing.
- caslon 4y agoI very strongly recommend an actual course. As a senior dev, you should be able to afford a bit of travel, and most universities allow walk-ins at no cost. Georgia Tech also has a critically-acclaimed online MS program, which might be worth looking into. That said, if you're not wanting to do an actual course, I'd recommend Sedgewick's book. The trick when reading an algorithms book if you're not presently at its mathematical level is to skip all of the math you can't currently understand. You'll eventually pick up on it, but in the meantime, you'll also get a lot from just reimplementing the algorithms from the book in whatever your favorite language is, and doing whatever exercises you're capable of handling with a bit of effort.
- popularonion 4y agoAs an alternative, you could pick up “Algorithms Illuminated” by Tim Roughgarden. Get the Part 1 book, read it casually a few times to get a sense of what’s in there, then go back to the beginning and start slogging through the exercises. Don’t hesitate to look for stuff on Google and YouTube when you’re stuck, but keep reviewing as much as necessary until you’ve legit learned the material. This is the approach I’m taking. Too soon to say if it’s working out yet. I’m thinking long term rather than getting a job offer at X company in Y months. There might be other books that work better for you than the one I recommended. I’m also in my 30s and have a job I’m more or less satisfied with currently.
- jamra 4y agoI have this book. I found it to be very unnecessary in my leetcode journey. What worked for me is repetition. It’s mostly just pattern matching. I got into three faangs recently so my strategy worked for me.
- quantified 4y agoWell, being a good engineer is about more than knowing all the leetcode algo ins and outs. If you're bound and determined to work someplace that interviews primarily on that basis, treat the leetcode like an entrance exam- cram cram cram and you won't need the leetisms very much after you pass. Do you understand how to set up testing for the right things, how to design for testability? Do you understand the ins and outs of HTTP and object API design? How to review code for the right characteristics per PR? How to distribute and scale computations, how to build for economical operation as well as CPU and memory performance? How to write a spec or an onboarding doc? Leetcode is a do-it-the-way-prominent-companies-did-it meme. It's not wrong on its own, but it's one dimension out of many, and the best leetcode problem solver I ever interviewed was a terrible senior engineer.
- keikobadthebad 4y agoPeople want to pay for backend api apps deployed on a cloud provider. Some people are autodidactic, it doesn't mean you 'suck' at programming, just canned quizzes don't align with what you are good at.
- gostsamo 4y ago95% of developers don't have to solve actual algorithm problems in their daily jobs and very few of us actually do leadcode style of programing. I'd agree that an algorithm book/course will help, but solving people's problems is not always the same as solving algo problems. So, yes, read on the theory, but also look for companies who are just looking for people with practical skills. Good communication and diligent work are diferentiators as well.
- AnimalMuppet 4y agoThis. "What customers want" is not for you to solve a leetcode problem. Never. You may have to solve such a problem to get them what they want, but what they want is something else - some problem solved, or to be entertained, or some such. If you can deliver that, then who cares about leetcode? (I know, some interviewer did. And the FAANGs really do, because a small improvement can add up to a huge number of machines for them. But for most employers, it really doesn't matter. You can find ones that don't interview that way, too.)
- deleted 4y ago[deleted]
- karaterobot 4y agoTwo options are to either continue studying Leetcode questions until you just know how to answer Leetcode questions, or apply at jobs with a more sane technical screening process. They do exist: I just talked to a friend who was expecting an offer from a large company. He said: "They didn't ask me a single whiteboard question, they just sat down and talked to me about programming. It was weird." I know this dead horse has been beaten a lot already, but isn't it funny how so many companies evaluate people for a job by asking them to answer questions that actually doing that job will not make you signifcantly better at answering?
- starwind 4y agoThe best boss I ever had asked me to whiteboard factorial recursively. I don't think it needs to be much harder than that to see if someone can solve a basic problem and knows—at least basic—CS stuff. I won't work at a company that goes crazy with the leetcoding
- teledyn 4y ago"When I'm not working, I sometimes think I know something. When I am working I realize I don't" - John Cage Programming is not a hard science, it isn't a bunch of Engineering tables, there is no equation that returns an app. Donald Knuth said it then, and it is just as true today, Programming is an ART. You have techniques, usually they mean nothing, or need real massaging, you have experience, but the conditions have changed, you have a reputation, but you don't 'paint' like that anymore. and those tests HR hands out. Man, don't make me laugh. You want to be a journalist? Ok, let's test your typing speed, oh, fine, ok, you're hired. It is not only madness, but I suspect it is a contributing factor to the horrors my industry has unleashed over the past 50 years. My teachers didn't call themselves "computer engineers" unless they built chips, no one said "software engineer" except maybe NASA; I think we could do better as computer /scientists/ but industry doesn't /do/ science, there's no money in it. #end of curmudgeon rant what you have is the ability to see the problem to be solved, the facilities and resources that may be available, maybe not, and a mind that folds, and sifts, and tucks and whittles and reforms that chaos into something no one has ever seen before, nor will see again (competitors legally can't replicate your experiment!) and that, I would say, defines a software program more than it describes yet another condominium or suspension bridge clone. So, now, what is it about the reality of the situation that makes you think you suck at it? Right: EVERYTHING. We /all/ suck at it, every last one of us to the end of our days, because it is like music, or painting, or writing plays, no matter how many times you try, it always falls just a little short, and somewhere, painfully known to you, someone else does that bit a bit better. John Coltrane admired John Gilmore of the Sun Ra Arkestra, he said, "John has it." That feeling is not going to go away, sorry. So ... what needs doing now?
- deleted 4y ago[deleted]
- phendrenad2 4y agoLeetcode isn't programming. Leetcode is pattern-matching which rote-memorized algorithm will solve a problem in the expected time/space. If you want to get better at programming, find some side projects you're passionate about and make time to work on them (if you can). If you want to get better at leetcode, force yourself to do them N hours per day. If you find both of these distasteful, you'll have trouble in your dev career, and might find management more enjoyable.
- yamisobad 4y agoThank you, I'm definitely not giving up on the LC I just need to figure out how to build a solid foundation for it. As for career, I really enjoy building products. At work I've been the lead on a few end to end full stack projects that I'm very proud of. I like to set up projects and then get a lot of pride feeling knowing that in the future other developers will be extending this base project as it grows. I am trying really hard to find a job where it involves understanding the customer and business needs (I really like to get on calls with our product manager/designer, and then work together to develop and test the solution), and building the best product. My favorite feeling is shipping something that people find useful, so idk which companies or what roles would really let me shine best there. One of my goals is to get better at networking, to see if I can get some job like a technical co-founder of a startup I think that would be a dream for me. If you know anything let me know, I'll check it out. Sorry for blurting out a lot of details I guess I'm just feeling defensive still after that mock interview lol. I feel like how can I be a co founder when I cannot even pass a Leetcode?
- sn9 4y agoHave you taken an algorithms course? Working through Skiena's Algorithm Design Manual [0] would be a good start and/or watching his lecture series on Youtube [1]. Other great books include Elements of Programming Interviews [2] which comes in Java, C++, and Python flavors. It can help to focus on a smaller subset of Leetcode problems to learn the tricks that underlie most of them. Neetcode [3] is a good collection of those problems on which you could focus your time and efforts. I don't think it's realistic to expect to do well on Leetcode without practicing the above skills to some degree, so I wouldn't be hard on yourself if it's been years since you even looked at the material. [0] https://www.amazon.com/Algorithm-Design-Manual-Computer-Science-dp-3030542580/dp/3030542580 https://www.amazon.com/Algorithm-Design-Manual-Computer-Scie... [1] https://www.youtube.com/watch?v=dphSwq5jP1A&list=PLOtl7M3yp-DXbHTFe_w9zFPXeau28CDao https://www.youtube.com/watch?v=dphSwq5jP1A&list=PLOtl7M3yp-... [2] https://elementsofprogramminginterviews.com/ https://elementsofprogramminginterviews.com/ [3] https://neetcode.io/ https://neetcode.io/
- whateveracct 4y agoTry to break into Haskelling - leetcode doesn't apply + it's a lot more fun that normal programming. I don't normal program anything large anymore. Waste of consciousness-seconds :)
- notjustanymike 4y agoSounds like you can do a bit of everything. Time to become a manager and make leetcode someone else's problem!
- stolenmerch 4y agoI'd recommend doing some of the free Stanford or MIT CS courses online and really trying as if you needed the credits to graduate. Don't quit when it gets hard because ultimately you want to be compensated for not quitting when problems get hard.
- ashleyn 4y agoYou know, I used to feel the same way, "good at my job bad at leetcode", but after asking around a bit, now I'm genuinely wondering how many people out there actually can get optimal solutions on leetcode problems without any practice - which seems to be the real insecurity that gets under people's skin when they write another lamentation on the state of tech hiring. It sounds to me like the primary purpose of these difficult DSA questions seems less about accurately gauging one's ability to do the job and more about paring down a veritable tidal wave of applicants that big-name companies like FAANG routinely get. As such I don't think it's so unreasonable to get demolished by these kinds of problems if you haven't done any practice at all on them. Rather than looking at it as an indictment of your programming skill, it's probably more indicative of you not having trained enough for the "FAANG-lympics". They're all basically competitive programming problems. Of course you're going to get demolished if you haven't trained for a competition. With that in mind I think if you look at smaller shops, they may not give you these academic-tier math questions (I know we sure as hell don't), more stuff like fizzbuzz or recursive factorial or any other very trivial whiteboard style question. At least where I work I know we don't get people beating the door down, and if we just cargo-culted Google's process on the comparative trickle of applicants, we wouldn't get any asses in the seats at all. Of course we also can't afford to pay FAANG-tier wages. I guess you can look at it like this: the highest paying jobs all have the most difficult interviews. Almost everyone I talked to literally practiced to do them, it's not a talent thing, or might not be anyway. This can be avoided by applying to smaller, less-paying shops, so I guess it's ultimately a question of how much you're willing to practice and for what salary.
- roflyear 4y agoWhat's a few example problems that you'd be surprised people can solve?
- Ismail-Maj 4y agoIt's not a LeetCode problem but I'd be impressed if someone can come up with the 4-liner recursive solution for the Tower of Hanoi problem. https://cses.fi/problemset/task/2165 https://cses.fi/problemset/task/2165 https://www.mathsisfun.com/games/towerofhanoi.html https://www.mathsisfun.com/games/towerofhanoi.html https://www.geeksforgeeks.org/c-program-for-tower-of-hanoi/ https://www.geeksforgeeks.org/c-program-for-tower-of-hanoi/
- jfrbfbreudh 4y agoJust keep leetcoding. I couldn’t imagine solving a medium on my own a year ago and now I’ve done 450+ mediums and have one of those jobs that I thought only “geniuses” could get. After enough practice, it’s just becomes muscle memory.
- uhtred 4y agoI'm not sure what to make of this. Does it mean Google, Amazon, whatever companies do all this leetcode stuff in interviews are just full of people who have superhuman motivation to memorize stuff but perhaps don't really understand it on a deep level? (no offense) If so it all seems a bit ludicrous.
- phil_kahrl 4y agoA "few years" might be considered a long time in software development terms but in the rest of the world, not so much. To be proficient you need to put in your 10,000 hours which translates into 10 - 20 years depending on how much time you actually spend coding in your current job. In many jobs, the work required of you is mundane and may not provide the practice or challenge you need to progress to the next level, so it may be helpful to take on a side project or other means of building your skills. 30 is still pretty young, and "senior" software engineer is in fact a mid-level position, most senior software engineers have not achieved true expertise. So keep plugging ahead, if you want to get better, otherwise you can always switch roles and go into management if you don't want to put in the time.
- charlie0 4y agoSaw the 10K hour thing and just want to give a counter to it. I've been reading Steve Kotlers book, Art of the Impossible and it's been a great read so far. One of the take aways is that mental flow state can really shortcut certain mental processes. This including picking up new skills in a much shorter time span. Would recommend the book and just as a disclaimer, I'm still in the process of implementing some of the ideas in the book. Seems promising though.
- charlie0 4y agoI'm also on my thirties and having some difficulty with leetcode. Something that has really helped me is Grokking the Coding Interview. It goes through a few patterns for solving algos. I'm not smart enough to figure these patterns on my own and the patterns I have learned have given me a really good place to start from.
- GauntletWizard 4y agoFuck leetcode. It's a good exercise for the math inclined. It's useful to do a few to learn how to pattern match. It's not the be-all-end-all of programming. I ask a leetcode question, ask people about approaches, and I'm more concerned that they can write any code and that they can figure out how to problem solve than any particular problem. A good train of thought is as valid as a working solution, though I do expect to see some code (and will ask fizzbuzz if there's not any algorithm for my problem in the first 15 minutes) Code. Practice Coding, in both leetcode and real forms for an interview. It's an unfortunate necessity that you study a little for an interview, and sometimes a lot.
- b20000 4y agomath inclined? it has nothing to do with math, but more with memorizing certain optimal solutions to obscure programming problems.
- johnamata 4y agoI also had that problem, I grinded through 200+ problems but I felt like I was just memorising leetcode solutions. I dont wanna be a shill but if you can pay, then check out a site called structy.net, it's a hidden gem. Nevertheless you dont need to pay as 50% of its content is free. Compared to famous paid interview prep resources like algoexpert, it's way cheaper, explanations are more succinct, and personally I find it explains things better. I worked through it and I'm confident I can smash leetcode mediums, especially trees and graphs. Arrays and Strings I found to be the hardest at leetcode hard level as there are a ton more corner cases to handle and there's almost no problem solving patterns in solving many of them, unless it's the "easy-hard" type (usually backtracking types like Sudoku Solver are manageable). Most leetcode hard array problems are just pure manipulation and observational/ad hoc types and it's hard to get good at them as there's little practice available in leetcode to ease you to such problems. One has to go to sites like codeforces to practice these ad hoc types, and it's annoying as codeforces problems are mathy. Luckily, those hard array problems dont appear in leetcode style interviews. Anyhow, structy and the "top interview questions" from https://leetcode.com/explore/interview/ https://leetcode.com/explore/interview/ were enough for me to go from "forgot everything from algorithms class" to interview ready.
- foooobaba 4y agoOnly one way to get better, keep at it. Eventually you’ll learn it, who cares if it takes you longer than what you would consider normal. It would be a shame if you gave up just because it is hard. It’s a worthwhile challenge. Try not to be in a rush too much, and just spend some time on a particular class of problems that you’re struggling with. Watch videos, look at the solution and try to understand it. Sketch out the given solution on paper if you need to. Implement the solution a couple times until you can do it without looking, perhaps in different ways. If you just get in a habit of practicing (and do without stressing yourself) and you’re patient, you’ll get there. At first it will seem like you’re not moving anywhere but eventually the work will pay off and you’ll have gained a cool skill, and probably improve your thinking skills in general.
- dinkleberg 4y agoI just watched a video today that I think may help a bit https://youtu.be/hIJdFxYlEKE https://youtu.be/hIJdFxYlEKE. Besides the advice he gives in that video, I’d highly suggest trying out Anki if you haven’t. Memory is related to how often you encounter something and with code interview type topics you rarely actually encounter those on a daily basis so it is hard to actually memorize it “naturally”. But using something like Anki allows you to choose what you want to remember.
- d--b 4y agoYou shouldn’t even want to work as a dev in a position that is screened by leetcode. Not because the interview sucks, but because you’re going to hate the job. You won’t be using legos, you’ll be building lego bricks. It’s not the same job. low level engineering is nerdy and often tedious, and is not for everybody. You may like cooking, but don’t necessarily enjoy building the oven. There is a place for people like you in tech. Just do your thing, stop worrying and let the leetcoders be.
- aristofun 4y agoOn one hand you don’t have to be algorithm-smart to handle many real world challenges, since software engineering nowadays is mostly business, architecture, product, not math. On the other - you can and should learn some fundamental CS ideas and algorithms until it’s in your fingers, otherwise you’ll find yourself often missing crucial details and making not optimal decisions in your work. You don’t have to be a genious to learn most of it. It’s a matter of time, practice and perseverance usually. Not many people i know who get these things quickly and naturally.
- vagrantJin 4y agoIf your job is to solve Leetcode type of problems and it is under threat, then by all means feel free to depress yourself. If your job is to put out functional products within a team to the consumer so that the company can make money to pay your salary, then you have nothing to worry about.
- _benj 4y agoLC is a bad measurement for your abilities as a software engineer since it only measures a very small subset of what software engineering is, heck, of what programming is! You spend a lot more time in plumbing and debugging than implementing algorithms, and if you ever have to use one, it’s very likely that your manager would prefer you use a well tested library and move on to the next story in Jira. Saying that LC is “actual programming” is a bit narrow. Actual programming takes into consideration architecture, code maintainability and readability, judgement calls between using external libraries vs building in-house, proper use of tools (IDE, cli tools, etc…) and a bunch of other stuff. I’ve suffered working with code written by individual that are good at LC but wrote such unreadable spaghetti code that I wonder if they thought they had a 40m timer like in LC that they couldn’t bother writing a complete word as a variable name. So no, don’t measure your worth by the fang sieve of LC and the likes of it. I actively avoid companies that use those as their measure to assess technical abilities because it makes me question what type of coworkers would I have.
- ab_testing 4y agoYou can try and get into non programming roles. Those usually pay on the lower end but depending on the visibility, can offer a faster growth path. There are roles like Business Analyst, Data Analyst, Scrum Master, Project Manager, Product Manager. You could also do non-programming certs like AWS, Salesforce etc if you want to get out of programming.
- Mandatum 4y ago> I'm depressed because I make a decent base salary but I don't really know how to solve some of these tough algorithmic questions. Talk to a therapist. You're tying your ability to solve fucking Leetcode to your self-worth.
- franzwong 4y agoEven I can solve it at home, I can't do that during interview.
- joshxyz 4y agoI'm a full stack dev and I avoid applying to large corporate companies because I hate doing puzzles like leetcode just to please the HR.
- flakyfilibuster 4y agoOne of these again?
- kypro 4y agoThere are different kinds of programmers I find. Some are more algorithmically / mathematically minded. Some are less skilled when it comes to writing the low-level code, but great at architecting and building clean scalable solutions. Others are less interested in the tech generally and more product orientated -- they're just looking to build cool things that users enjoy using (often frontend devs). I think you first need to understand where your strengths and interests lie. I think I'm probably a bit like you in that I just like building stuff (used to love lego as a kid), but my math abilities and technical abilities are nothing that impressive. I'm a full-stack dev, but I find I'm definitely more useful on the frontend. I tend to be the dev who spends a lot of time tweaking buttons and making the general UX improvements that other devs don't care about or have less of an eye for. I think I've built some really cool things in my time even though many of them haven't been that technically challenging. On the other hand one of the best programmers I know has built some extremely technically challenging things that go way beyond my abilities, but his UI/UX is so bad that everything he builds is basically unusable by anyone but himself and he doesn't seem to think that's a problem. Do you you really feel you have nothing of value to offer as an engineer? Are there any type of problems that your team tend to come to you first for answers? I really believe that building a great product requires engineers of all different mindsets and skillsets -- I actually think this is a mistake a lot of companies make when hiring, you probably want some people who are bad "fits" for your team instead of looking for clones of your existing devs. There might even be an argument to make that sometimes great engineers are actually fairly bad engineers. I've worked with guys before who are excellent at documentation and communication but less strong technically. In my opinion they were still really valuable members of the team though, they just focused more on ensuring we had good dev docs, improving tooling and arranging dev meetings to discuss things like tech debt. I'm yet to meet a engineer with nothing to offer. It might just be that the company you're working for isn't making the best of your skillset. Some things to think about anyway...