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.
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."
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 :)
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.
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."
That's genius, I have a huge respect for 'xkcd' really. Some presentations are beyond amazing. That said I think it's spot on, Mathematics is the language of the Universe.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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 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.
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.
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.
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.
> If you are anything like me, you want to become as good as TJ.
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.
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.
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!
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.
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 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.
If you are really a programmer for just 3 years, then being lean was hot long before you even thought about starting to program. Currently hot means big data.
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.
By saying you don't want to be a real programmer, I'm hoping you don't mean a good/great programmer.
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.
Newsflash, your hero TJ Holowaychuk probably does not even exist. Seriously imo this guy tries to compare himself to everybody else on the internet, which is dangerous.
I would usually never respond to so,ething like this. But.. "programming" isn't just one thing. "Real programming" is pretty specific to your own values as a 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.
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.
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
I enjoyed reading this. I must have 10 to 15 years on Anas, but I can confirm the feeling doesn't dwindle all that much. The important thing is that you make sure you're enjoying it.
Incidentally, think the presentation on that page is excellent. And I like the domain name too.
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.
I wouldn't fall into the trap of thinking more hours = more production. I find I am most productive and efficient when I don't work 80 hour weeks, that's when the code I write creates problems.
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".
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.