I don't want to be a Real Programmer
verybadalloc.com
verybadalloc.com
I've been programming for nearly 16 years; code is not as fun as it used to be, and most programming jobs are inconsequential bullshit of buzzwizardry and magic frameworks, agile standup chicannery and the dread of dealing with the zesty pimple pricked CS graduate who just loves AngularJS and thinks he can code his way out of a paper bag when he's never done reverse engineering. Never made a web scraper. Never messed with shell code or assembly. Never wrote a game hack using hooks/detours. Never written a line of C. Etc etc. Programming is full of happy go lucky adult kids. Real programming is for getting shit done, that's all it ever was and will ever be to a seriously learned seasoned programmer. Whether it's building something, destroying something, modifying something, binary or source, the seasoned programmer has the skills; but don't expect him not to sigh when you bring up your giddiness surrounding menial programming labor for worthless causes; or just plain repeats of the last decade.
The latter tend to be, in the long run, far more productive than the former. However, this takes both motivation and it takes extra time between iterations to think about what problems you are having with development and how to solve them. Continuous iterations get in the way of it, but it isn't clear that the heavy engineering waterfall model gets people to do it either.
Sometimes you need some distance so you can come back and ask "is this good code? What can I do better?" Without distance, it is like editing your own essays.
After 10 years of coding professionally and over 20 years of programming experience, I find that that capacity, which is entirely independent of how many hours someone actually spends coding, is the best indication of how productive someone will be.
If I am ever hiring programmers, my questions won't be puzzle questions. They will be questions like "how do you decide what needs testing?" or "when and why do you comment your code?" Those questions are likely to tell me more about how much someone has thought about their own code experiences than whether they can solve a certain puzzle or not.
Pro tip: Those 'Real Programmers' who's JS experiments make your CSS look quaint aren't the world's best programmers. They're 'yet another frontend guy' to, for example, those who write Java servers. Guess what, those writing the Java servers are 'just end-users' as far as the JVM hackers are concerned. Likewise, the JVM hackers are 'just end-users' for the OS developers. The OS developers are 'just end-users' for the hardware guys. The hardware guys are 'just making an interchangable commodity' as far as the sysadmins are concerned, as they virtualise everything away. And, of course, the frontend devs laugh at the sysadmins for not being programmers.
You might think of some Node.js guy as a demi-god, but I've never heard of him since I don't particularly care about Node.js. Likewise there were a lot of tributes being paid recently to a Ruby developer who passed away. It's touching to see how many people he'd positively impacted, but again, I've never heard of him because I don't particularly care about Ruby.
Am I an 'imposter' since I don't care about these things? Not at all. I have a high-level knowledge of what they are, and I even played around with Node.js a bit (unfortunately it was just after 0.4 had broken compatibility with most libraries in NPM!), but I can't go too far down those rabbit holes because they're not the stacks I use. Likewise, I don't expect those who are deeply into Node.js and Ruby to care about, for example, the recent death of John Reynolds, or Robert Harper's kidney transplant.
Just stick with the rabbit hole you've chosen, as long as you're enjoying it; let the work of others guide you down, and if you reach the bottom you'll suddenly find yourself to be a 'Real Programmer' who can help with the digging. Alterntively, if you disagree with or don't understand some of the decisions/conventions on the way then you should absolutely start digging in your own direction, even if it doesn't go anywhere.
PS: Knowing APIs inside-out does not make one a 'Real Programmer'. My day job is PHP, but I still tend to Google the most basic built-in functions (which, admittedly, is an artefact of PHP's poor API). You should instead strive to understand your problem inside-out, from multiple perspectives, then you can pick and choose any API/stack you like and let the docs guide you through the tedious act of plumbing it all together. Or write your own :)
On the other hand, Mathematicians are just those people who write blog posts which tell the Web designers which type of graphs to use in the analytics section of their app, once all of the real work has been done.
Everything is relative.
I wrote frameworks in PHP.
But if someone on an interview would ask me to _code_ a solution to a simple problem in PHP on paper, I would probably fail.
> For sure, they are plenty of Real Programmers out there, who easily agree to the 80+ hours/week workload.
has to stop.
I think the opposite is true: if someone is working 80 hour weeks they either overcompensate for their lack of skill or are being willfully exploited.
(Most) humans aren't supposed to work 80+ a week. I say most because there are always those superhumans you come across that just seem to be able to do it; but most can't.
I always try to look at statements like this through the eyes of a would-be programmer. If I was about to start down the programming route and was told I could never achieve my aims without accepting an 80 hour work week then I'd run a mile.
I don't think they're superhuman, they are people who have no lives and will burn out in a short period of time. I can only feel sorry for them.
An example of this is academia where every prof I've met 'works' insane hours but are completely (and happily) absorbed in their fields. The whole thing feels like a hobby to them. The only thing they'd want to get rid of is the paperwork (research assessments, etc) so they could spend that time with students and research.
If you do stuff you don't really like or it's 'just' a job then I wouldn't even work 40 hours for it, but I really don't see what's wrong with 'always on' if this happens to be your life.
But the other argument is that, after so many hours, returns on effort are reduced, and I don't see a good argument for this being not true whether a person is in love with their vocation.
I would posit that a likely scenario, is that the 80-hour-a-weeker's passion for their work their concern for efficiency. They don't get as much done per hour, but they don't care as much because they love the parts even where they are just plodding along.
"Losing sleep to hit a deadline the next day is valid, but it isn't a productivity enhancer. I have always needed a full 8hrs for good work." https://twitter.com/ID_AA_Carmack/status/436351780243259393
So its got more to do with extended concentration on one task, vs the actual hours? If the work has several tasks (e.g. rehearsing, the gig, songwriting, negotiating) then maybe its not the same as sitting in front of a screen the same time.
The multitude of tasks bit is true. Where my BS meter starts to twitch is when it's a developer telling me that they've been hacking 12 hours a day for x years and feel fit as a fiddle. In those instances, I've gotta imagine the quality output vs. time quotient is lower per capita than the average 30-50 hour per week dev.
Compare it to other things, say for example, musicians.
When a band goes on tour, it could be looked at like they're putting in 168 hours a week. Really though, they're doing maybe 8 hours a week of actually playing in front of people, maybe like 5-15 hours of practice, and that's all the solid "work" they're doing. That's not where the job ends though...100% of their life is their job because they are always potentially writing new material.
If I'm coding for someone else in exchange for money, that's work. If I do it on my own time for free, it's not work. That's a pretty clear distinction, since I can't do both at once.
Whether they suffer some epic burnout in years to come remains to be seen but I hope not for their sake.
I learned from graduate school that you get the most productivity when your mind is sharp. It makes no sense to work an 80 hour work week programming if your mind can't handle it, and especially if your employer isn't compensating you appropriately - the most I've done is 56 hours, and that was due to having to quickly turnaround a broken project upon starting work at my current job (the most I've worked in a week since then was 48 hours I think).
That said, when I leave work, I often am coding at home on side projects and other self-learning/experimentation initiatives, but at my own pace. I have the freedom to do a lot of extra coding, or none at all, and that in itself can be invigorating when it comes to programming.
I've noticed the best programmers are the ones who have actually coded their own compiler, frameworks, etc even if they were only toy implementations. The understanding that comes from building a 3D engine or high performance message bus is usually impossible to obtain in any other way.
No offense to Holowaychuk, he certainly does appear to have contributed enormously to the server-side JS ecosystem, but I do not care for JS, so I have not heard of him. This is all assuming he's not a collective pseudonym.
I agree with the user goldenkey in this thread, and will quote him:
Most programming jobs are inconsequential bullshit of buzzwizardry and magic frameworks, agile standup chicannery and the dread of dealing with the zesty pimple pricked CS graduate who just loves AngularJS and thinks he can code his way out of a paper bag when he's never done reverse engineering. Never made a web scraper. Never messed with shell code or assembly. Never wrote a game hack using hooks/detours. Never written a line of C. Etc etc. Programming is full of happy go lucky adult kids. Real programming is for getting shit done, that's all it ever was and will ever be to a seriously learned seasoned programmer. Whether it's building something, destroying something, modifying something, binary or source, the seasoned programmer has the skills; but don't expect him not to sigh when you bring up your giddiness surrounding menial programming labor for worthless causes; or just plain repeats of the last decade.
I find it disturbing that "real programmer" is being reduced to a trendy magpie web developer code monkey who goes to hackathons. Lord.
Ultimately though, you just have very warped definitions of what this whole thing constitutes. My advice is to relax, keep doing what you love doing and let go of these false ideals.
I've often thought of quitting professional programming and it to become a hobby instead. I think sometimes great things come from playing around and working on projects you want to and enjoy working on as opposed to the 'drudgery' of implementing someone else's vision. In my experience although the job has its perks, very few 'real' programmers actually care much about the products they work on. Sometimes they do when they start but it doesn't take long for the pressure of getting something done vs. getting something done you have real pride in generally breaks you eventually.
At the end of the day I think if you can write some code, you are a programmer, whether you are a hobbyist or not. Some of the best developers hack on open source projects and live off very little and they're pretty happy with their lifestyle. A lot of paid-up programmers are in fact more like 'impostors' than these guys.
Programming skills can be a nice extra to a creative or administrative skillset, especially in smaller & boutique companies.
Anyway, for me, programming has always been something I do, not something I am... I think this might lead to the exclusionary nature of our field a bit - I know I've looked around and seeing people who identify as programmers, not really doing the same, and wondering if I belong...
I think this is important, it's the kind of thing that I read and think "Yes, how obvious, of course!" but in practice I wouldn't think of it myself. A very healthy way of seeing things.
On a side note programming as a hobbyist gives me sufficient technical knowledge to be able to communicate with developers using their own language, which can be very useful when doing the interface between a customer and a development team for example.
A Real Programmer is simply one who keeps on learning and doing. It is important to look back occasionally on what you have achieved, instead of what you have not.
Some times in work i feel inferior to my buddies until someone asks a question about something close to my heart.
A detailed explanation later which no one within 100 miles could give and it hits you, we're all excellent at something no matter how bad your impostor syndrome gets!
I fell into the same trap in the past. I started learning one thing, others were quick to comment on that I should learn this , this, this, and that as well! That caused me to spread out way too thin.
Programming can be overwhelming. Once you start digging into it, you'll then realize how much you don't really know and how much of it is out there.
Who?
If you pick up a guitar because you want to be better than Jimmy Page some day you're going to burn out. You might not even realize that you don't even like playing guitar until years later when it becomes apparent that you're not achieving the success and fame you thought you would.
We're all subconsciously reinforced to believe that with hard work, perseverance, and that hidden spark of special talent in each of us that we can achieve our dreams. This fantasy is the perfect entry way into our brains to implant desires and ambitions. You want to believe you're the hero of your own story because the reality is certainly not preferable.
Don't get caught up in it. Create your own narrative. If programming is only interesting because you want the attention showered on other people then programming is not going to be interesting to you in five, ten years when your fantasy fails to materialize.
Programming will always have it's greats just as any field, industry, or art form. Learn from them. Don't try to be them. Many of them are about as talented, smart, and clueless as you anyway.
Donald Knuth didn't spend half a life-time and counting writing TAoCP just to speak at conferences. That kind of work takes dedication that only an intrinsic love of the craft can produce.
There's so much I could write here about where to focus (focus on a real problem, forget about agile or lean, focus on the joy of the moment, worry less about whether you chose the right stack), but I've got work to do...
I will leave you with one thought - every time I finished a project badly I learnt something profound that was scarily relevant in the next project, and made that next project successful. It's that continuous motivational cycle that's so addictive.
Its basically a relational problem we are trying to solve, but because it is moderately big data (will be a few terabytes in the end), we NEED to use NoSQL.
Let's get some perspective here. If you were an undergrad you'd just be about to graduate. Nobody would expect you to be particularly good at programming at this stage -- your career is literally just beginning!
To get on topic: Don't give up just yet! Yes you can not be awesome at everything that you read here on HN. But if you, e.g., care about squeezing out great pixels out of your CSS, you can certainly become awesome at that. Maybe it's more awesome in your eyes to churn out a new iPhone game every week, then you certainly can be good at that. You just can't be good at most things you do. Either you are mediocre at everything, or quite good at one thing and quite bad on the rest. If you think a programmer is so much better at everything, learn to know these people better. You'll see that they might be awesome Node developers, but they might not know even part of what you know about bash and vim. Or English might be their mothertounge, while it is actually your second fluent language, etc. Most of the awesomeness you see in people on stage is biased observation.
And certainly you don't get to be awesome if you slave away at 80+h/week. Better stay in the 30-50h/week range and spend the rest of the time to prioritize tasks, stay healthy, networking, etc. With the first approach you will be nothing more than a machine after just 2-3 weeks. With the second approach you can learn and get better every week of the year.
Isn't it interesting how we're telling everyone to learn how to code, but then people feel like impostors? Well you can't learn good programming and cs standards in a few days or weeks, even in a few years. So no wonder a lot of people feel like impostors.
Having said that, it takes quite some time to really develop as a software engineer into a real software engineer. You need to know architecture, design, best decisions, security, caching and more. That's what I call a real programmer. Can you design a search service? If you can't, can you learn enough to design it? How would you even start? Everyone can code, but not everyone can design a system that is scalable, fast, robust and secure.
In addition, to be a real programmer, I think you need to start thinking about the future...how will people want to use a browser in the future? If I'm a developer, how can I make XYZ easier and faster to build for other developers? How can I make it so that the code is reusable? Will a framework make it easy? How should that framework be built? How are people going to use it? Etc...
Some of it is deliberate thinking and some of it is work experience.
So a lot of this kind of thinking comes from real problems software engineers faced while working. Discussions, debates, etc... They found a solution and it was elegant enough for others to use.
That's how I think someone goes from an impostor to a real programmer.
Look around, find out what interests you.. probably look away from the web, because the web is over-caffeinated with a lot of churn that resembles real progress. (Not that there isn't a lot of cool stuff on the web, just that it's a confusing ecosystem to measure yourself against.)
It's an art and a science.. it's not about 80 hour weeks and writing 10,000 libraries a year. Maybe there's something you have to contribute that you only work on for 5-10 hours a week and it takes you 2-3 years to complete it and it still blows our socks off.
I do not want to malloc
Mother I'm afraid
I do not want to learn ARM
Mother, I am afraid
Waking up as Tron Guy
Waking up as Tron Guy
Waking up as Tron Guy
>Oh look i do hackathons, OSS contributions at all times of the day, try new stuff, etc etc, and feel like an impostor.
Shit man, how does that leave me?
Incidentally, think the presentation on that page is excellent. And I like the domain name too.
"Badalhoco" translates to naughty.
The people at the small company I worked for made me feel like I'm a JavaScript guru.
Last month I did some small stuff for Mozilla and felt like an idiot.