89 comments

[ 2.9 ms ] story [ 156 ms ] thread
Time. Work. Those two things are the only things that can deliver on your aspirations. By your definition I'm a real programmer, and yet after well over 20 years programming I'm still humbled by what I don't know.

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.

There do seem to be a lot of rather "precious" induhviduals coming into the industry these days who seem to easily get obsessed with trivial stuff whilst missing the bigger picture.
coming to the industry? I am working with a bioinformatics team leader who seems to be obsessed with his hipster stack Mongo, Node , Angular, hang on... nope, changed to Tokyo Cabinet, Nope, its Elastic Search this week.

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.

Don't worry, it won't be Node for long either.
The filesystem is the database. Because we need to use NoSQL.
great essay. ime, the best programmers are equal part artist and hacker. but, the synthesis would be impossible to describe or even recognize by most non-programmers. and: conversations about their abandoned or unrealized projects are sometimes more interesting than their completed ones.
they are also engineers and computer scientists. Even in these fields creativity allows one to look at problems from different angles, and through experience, recognize or innovate solutions. This may not always be a vocational skill picked up by anyone over a few years
Well attended a JS conf last year and I got to be at the same room as TJ Holowaychuk. I had no idea who the guy was and ended up asking where he came from, what he works with, etc. Shame on me haha.
Its interesting to hear from someone who's more of a hobbyist programmer. You don't meet so many, mainly I think because once you become half-decent at programming you have access to a range of well paid jobs. Of course as you say, those jobs come with certain conditions that aren't for everybody.

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.

I'm a hobbyist programmer, but I'm able to use my programming in my work - even though it's not strictly related.

Programming skills can be a nice extra to a creative or administrative skillset, especially in smaller & boutique companies.

The job title gets thrown around as "data scientist" sort of evolved out of a mix of "Professional Programmer/Amateur Statistician" and "Professional Statistician/Amateur Programmer" types.

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...

> programming has always been something I do, not something I am

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.

I have worked as a maintenance programmer for a large bank. Fucking boring. Crap stack (VB6). Stressful. No care about code quality, just have it working by Friday. Better pay options, and career potential than where I currently am - programming the database and web interface for a sequencing centre. I choose the stack, I get to design it. I see that when I make good design decisions it often pays off.
Another hobbyist here. Back when I was a late teenager I might have contemplated doing it professionally but nowadays it would not my choice. Due to discovering other domains I am interested in along the years - like animation or game design - I chose to stay as a generalist instead of dedicating myself to one these 3 domains. Consequently I am at best average in all of them, programming included. The thing is, I may not be tackling very difficult problem like optimizing an emulator or a 3D engine but I still feel some satisfaction when fixing an issue in my code and more importantly, learning from it. In fact whatever your level is there are always new things to learn, be it in your field or another one.

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.

funny, I've no problem with being a paid-up programmer. Programming is something I can do for a living without being too much of a hassle, but I seldom work on side/open-source projects. On the contrary, I like to play at gigs and could be a professional musician, but I can't bear the working conditions.
In my experience there are two kinds of programmers. Those who program (largely based upon practices they are told are good) and those who also really think about their own programming and try to develop their own paradigms in response to their own problems.

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.

The distance thing is the best way to improve your own code in my opinion. I have a medium sided codebase to look after. When I have not touched a bit for a few months and I need to go back, it should make sense to me very quickly (I wrote it after all). If it doesn't I ask myself why it doesn't and what I would expect to find to make it more understandable. Then refactor from there. Its too easy to be focused on the details of a piece of code, and not see the bigger picture. That's why being away from a piece of code gives me the best opportunity to evaluate it objectively.
Learning 30+ years of CS knowledge from scratch doesn't sound very efficient. The truth is, anyone who constantly delivers must have the capacity to understand _why_ but they'll still be largely benefiting from the trails marked by others.
Certainly we all learn from others. However there is a difference between those who sit back at the end of the day and say "what worked well?" and those who say "We should do things this way because it's a best practice."
if crud developer,should easily create a generator.but user experince anf business knowledge quite hard to explain.
> Since I started about 3 years ago

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!

It seems the OP is trying to compare himself with the internet. We may hear about great achievements every day, but often those achievements while only taking minutes to read about took years or even decades of work and labor and were hardly achieved by one person alone.

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.

Tech is such a rabbit hole anyway no one person can learn everything and the internet can be a curse throwing constant suggestions of the stuff you 'need' to learn!

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!

Agreed. Reading it, looks like OP is reading too much into things yet fails to understand that each person he listed, those folks have spent years understanding and developing.

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.

One of the most revealing lessons to me, as a young programmer, was when my uncle (worked on the Java project when it was Oak, published his own network architecture, distributed systems professor, etc. etc.) asked me which content management system he should use for an important project, and I was able to help him out with that. You'll always know something that the "Greats" don't.
something about this aspirational mumbo-jumbo rubs me the wrong way. there are plenty of objective standards to judge one's self against, most of the best ones are available to the general public in one form or another these days.
The real issue is a guy who has been programming for 3 years is trying to compare himself to people who have programmed for 30. Practice makes perfect - if you've only been coding for 3 years, I can almost guarantee that you don't understand a big chunk of the code you use. Once you've been coding for awhile though, you really can get to a stage where you understand everything from the bottom up. At that point, creating new frameworks, languages and algorithms becomes an obvious task.

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.

I have a feeling that feeling satisfied with one's knowledge will also come with experience. I couldn't agree more on your second sentence though: not only will you learn a lot more, you will be able to hone your problem solving skills, which is what I wish to achieve now.
Nonsense like this

> 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.

Agreed. If there's one danger to our industry, its notions like this.

(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.

> (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

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.

This thread seems to assume that there's a clear distinction between 'work' and 'not-work'. That isn't always the case as it's entirely possible that someone can love what they do to the extent that the lines completely blur (yes, that means those people could be exploited for that passion).

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.

Yep; there is no off switch for me for over 20 years already. I have a clear goal in life which happens to involve a LOT of programming and I work over 80 hours/week for all that time but I don't really see or feel it as work. The fact I make plenty money with it does not make it feel like work. And my family and social life is thriving (I seem to be one of the few people I know who makes new really good (I met 3 of my best friends while I was well over 30) friends all the time while being almost 40). I'm just 24/7 thinking/working on this goal and it involves 12-13 hours of coding/coding related work every day. So what? It's just a hobby which happens to be something people pay well for. I hope I never reach my goal; i'm happy always as I have this goal, it's like a religion I guess, it gets me up in the morning, gives me energy when I need it etc.

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.

The "work is their passion so it's not work" contrarian-ism is certainly not uncommon. But the argument against 80 hours is generally stress-induced health and productivity related. Given, if a person "loves what they do" then the stress part is probably lower, reducing the negative effects of the first.

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.

I agree, arguably one of the most productive programmers of all time apparently still manages to get 8 hours of sleep usually:

"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

It gets a bit fuzzy when what you do for a job is also a fun hobby. I don't spend 40 hours a week hacking on code outside the office, but a productive week (working on my game or on another side project) might put me around 20.
You have to be doing something for all the hours in the week. We don't get stresses out playing tennis or having sex (well...) or going to the movies.

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.

I'd ask the professional tennis player or porn star if their jobs are/would be stressful at 80 hrs per week... but in the spirit of it I can definitely agree.

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.

This.

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.

>This thread seems to assume that there's a clear distinction between 'work' and 'not-work'.

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.

I'd be inclined to agree with you but I know less than a handful of people who work crazy hours and maintain a great social life, and have done so for many years.

Whether they suffer some epic burnout in years to come remains to be seen but I hope not for their sake.

That crossed my eyes as well - if I feel unproductive, I take a break. If I feel drained mentally for the day, I leave, even if it means leaving 2 hours early.

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.

It can be quite humbling to realise how large a particular field is, but it in no way makes one an 'imposter'.

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 :)

(comment deleted)
A sufficiently high-level static-typed language is similar to Math. Are mathematicians 'just end-users' to someone? In your world of abstractions you are the god.
Maths is a noble pursuit that's been around for millenia. The greatest achievement that a programmer can aspire to is writing/improving/optimising the libraries (linear algebra solvers, numerical routines, etc.) which enable Mathematical advances.

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.

Are you aware that programming itself is a branch of mathematics? Don't put things on pedestal. "The greatest achievement that a mathematician can aspire to is helping to improve software, for even our minds are software."
Erm, yes? That was exactly my point, hence my contrast of two completely opposite viewpoints and the claim that it's relative.
lol, I know this problem.

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.

Same here. Ask me to build a distributed web crawler with a Lucene-based search engine in Rails or whatever, I can code it in a month. Ask me to write a function that does something stupidly simple like converting a character to its ASCII equivalent, and I'll fail.
Like everything else, that is a matter of practice. Coding on paper or whiteboards is a skill you can become proficient with. Get a whiteboard, get something like skienna's algorithm book, and start practicing coding problems there while talking through what you are doing. Start simple then go more complex. After enough hours, this will become second nature. I realize this is a silly exercise, but if want to work in the circus, sometimes you have to jump through hoops.
I don't get the big deal about whiteboard coding and such. I have to write code on paper for my CompSci class exams and it's never been really difficult. If it were PHP it would be though because it's hard to predict the argument lists and function names.
OP: just would like to point out that you might get some weird looks when mentioning your domain name to the portuguese speaking crowd. Visually it looks a lot like "very badalhoco".
Google translate did not return any result. I assume it is some kind of swear word?
I actually laughed when I realized. :)

"Badalhoco" translates to naughty.

I think the only solution is to code if it makes you happy.
I would be curious to see if there has been any study to see which profession has the most skilled workers who think that they are "imposters". I have to admit that I fall into this category and I have been seeing increasingly more people also admitting to this in our industry. It's nice to know that others feel this way, and it's nice to see many of the encouraging comments that allude to the thought that imposter syndrome may be more a matter of perspective, rather than one of performance.
80 hour weeks? Hell no, if that's what it is then I don't want to be a real programmer either. Maybe it's because I'm old and cynical, but you young guys can knock yourself out. If you're working that hard you better be working for yourself, otherwise you're just being taken advantage of.
I'm switching between superior and imposter all the time.

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.

Want to b a "real" programmer? Don't be so attached to your code. It doesn't represent you. It does represent where you are and it does indicate where your going but it doesn't define you. If you identify as a programmer, then you are. Physics tells us that, to a large extent, we create Our own realities and our perceptions of such. Put your code out there and don't give a shit what people think. Is there a better, newer way? Yep. Always will be. So keep learning and don't get comfortable with your current skill set.
The viewpoint in this article is disillusioned at best. A real programmer is not someone who loves programming and attends hackathons to build iOS apps that map the sewer rats in NYC for fun. That stuff might be fun to the hipster who just learned iOS, sure. But I doubt someone who's been programming for 15+ years wants to build an app for bullshit. Every line counts more, because the capability is higher. Wasting time is dreadful, when one has been programming for so long.

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.

It's really a shame we probably don't live in the same place because holy crap would I like to hang out with you.
This might be the single greatest comment in the history of Hacker News.
It's this exact type of blog posts, that are constantly on HN front page, that make me feel like an impostor.

>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?

A prolific Node.js developer is what constitutes a "real programmer" these days? Honestly?

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.

Mother I'm afraid

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

OP is indeed not a real programmer. I guess that ends the conversation.