3 ms·
Reading your comment here made me feel worse about my impostor syndrome. I don't know that I have very many things that I have genuinely accomplished, which I t
by liweiyang 6y ago
Reading your comment here made me feel worse about my impostor syndrome. I don't know that I have very many things that I have genuinely accomplished, which I think gets at the heart of the issue. When I do mimic accomplishing various things, this mostly comes from taking various portions of online example code, reformulating it, and doing some basic data plumbing to make it work the way I want it to. Almost everything that I have "written" looks like modified example code glued together with stackoverflow-plumbing. I have in fact built tons of projects and worked on large codebases, but I'm not certain that makes me an engineer or that any of this is a genuine accomplishment. It isn't.
At the same time, I feel stupid trying to learn how to program properly at my age. I should already know all this at this point in my career so it feels really demeaning, depressing, and embarrassing to do programming exercises. I can't get out of this middling-tier programming skillset, and I have to keep up appearances that I am not middling.
Every time I do go back and try to fix my understanding I'm caught in a loop. I get bored/upset by shuffling through the same basic intro-type work that I already know if I go back too far into intro material I already know by heart. At the same time, when I try to pick out less introductory projects/exercises I just end up spending the whole time googling for stackoverflow questions every few minutes. Getting me back into the "this project is just a string of answers I looked up" head space. The project never feels like a true accomplishment.
- bonoboTP 6y agoToo much ego. What I find important is to consciously separate stuff that I actually care about and believe in and fluff stuff for appearances. The second part is like acting and bullshitting when it is required and incentivized. Don't confuse the two. > I don't know that I have very many things that I have genuinely accomplished, which I think gets at the heart of the issue. Good. Maybe you actually haven't accomplished much, maybe you have. But clarifying it is important and you have to face it honestly to have a straight up baseline. It may also be okay. Clarify why you want to achieve those things in the first place and what those are exactly. > I have in fact built tons of projects and worked on large codebases, but I'm not certain that makes me an engineer or that any of this is a genuine accomplishment. It isn't. Clarify why do you want to call yourself an engineer. Vague envy of an imagined idealized capital letter "Engineer" is not useful. Engineers aren't some kind of demigods. The important thing is to apply the best techniques to the job at hand, not to cargo cult and clone prestigious other fields. Try to collect examples of "genuine accomplishments" and dissect them. Are they really that magically genuine? Or were they the product of a lot of stumbling, tries and retries, sleepless nights and luck? Focus on humble, respectable people and take their advice, not the bullshitting LinkedIn blogger and CV streamliner who wants to make everything look like they just accomplished one thing after the other purely out of their natural genius. Difficult things are messy and not a straight arrow from scratch to genius accomplishment. > At the same time, I feel stupid trying to learn how to program properly at my age. The first step to learning is admitting that you don't know yet. Pretending won't help. Give up your ego and keep honing your skills. > I should already know all this at this point in my career so it feels really demeaning, depressing, and embarrassing to do programming exercises. Perhaps you should know it already! But you can't time travel, so the best recourse is to learn it now. I think overall, it's much better to approach things as they come up. Instead of setting out to "now do this project to feel better about myself", you just see what topics come up when you try to accomplish a real-life goal. Say you want to build some nontrivial application or machine for a real existing use-case that you genuinely want to have and will use. Then who cares if it's all glued together existing code? Most of the time the existing code won't work for your exact use case and you need to read documentation and understand that domain, how their algorithms work, what the constraints are what the design looks like. That's learning. You don't have to create prize-winning earth-shaking inventions each time you do a project. The point is to learn a technology and the theory behind it. But if you only copy code without understanding what you're doing that's also not great. Don't be ashamed to sometimes read books, to doodle diagrams and bullet points on a physical notebook or pace in your room up and down submerged in thought while you try to grok what's going on. Read some Feynman interview books, like "What Do You Care What Other People Think?" and "Surely you're joking Mr. Feynman!" I always get inspired to cut off the bullcrap and focus on curiosity and learning for the sake of it, without caring about stroking my ego. If I'm a noob in a new language and make mistakes, who cares? I'll do my best and try to achieve what I can. It's also a fine balance to learn how to respect others who are genuinely more skilled than you are and have the humility to learn from them. The two failure modes are 1) to idolize them and think you are a zero and will never achieve anything and it's too late and everyone is leagues better than you and 2) to try to downplay their achievements and pretend they aren't actually more skilled than you are or that merit doesn't actually exist, or that self-improvement doesn't exist and everyone is already perfect, etc.
- towaytie4567 6y agoThanks for taking the time to post such a thoughtful comment. The parts about your ego getting in the way of genuine learning are especially insightful.
- jkingsbery 6y agoTo add to bonoboTP's useful comments: > When I do mimic accomplishing various things, this mostly comes from taking various portions of online example code, reformulating it, and doing some basic data plumbing to make it work the way I want it to. What you've described is common. It's the basis for the punchline to https://xkcd.com/1988/ https://xkcd.com/1988/ . > I have in fact built tons of projects and worked on large codebases, but I'm not certain that makes me an engineer or that any of this is a genuine accomplishment. I don't know your background, you'll need to figure out some yourself. I've heard in my career two conflicting opinions. Opinion A: "You can't be a real engineer unless you built something from scratch." Opinion B: "You can't be a real engineer unless you've worked on a large scale project." The number of engineers that have worked continuously on one project from inception to millions of customers is pretty small. Most of us either take a project from inception to some small scale over the course of a couple years, or we are dropped into an existing project that has scaled to one size and we keep it up and running (and maybe growing) for a couple years. There are different challenges with both taking a project from inception to a small scale and with managing something at a large scale, and they are both valuable. > I should already know all this at this point in my career. I don't know how far along you are in your career, but programming exercises are valuable whether you've been programming for a couple years or several decades. There's always more to learn. Not knowing something about software engineering doesn't disqualify you from being a software engineer. One other thing I do I forgot to mention: ask others for specific feedback. If you're not sure about how you did on something, hearing from someone who you trust to be honest can be helpful relieve your concerns, or help you to at least make your gaps more concrete.