8 ms·
The Mediocre Programmer
- yarg 6y ago> before we can become better programmers we have to pass through being mediocre programmers Sure it's true, but it leaves out a fundamental truth about programming (and technically complex disciplines in general): most people that attempt programming will never be a good programmer - indeed most never even cross through the gate of mediocrity. There seems to me to be a superegalitarian notion that all people given the same opportunities will be capable of achieving, if not the same, then comparable results on a given task (or set of tasks of a given type). That simply is not true - "fake it 'till you make it" is not universal.
- croissants 6y agoEh, mediocre is usually defined as something like "middling" or "middle-of-the-road" or "average". It's plausible to me that most reasonably intelligent people who try very hard can become "above average" programmers. "Good", I don't know.
- yarg 6y agoSure, but I don't think we're working with a single peak distribution here - and good luck coming up with a workable definition for "reasonably intelligent".
- shoo 6y agoOn another hand, many commercial programming tasks or programming roles are relatively mundane or lower-skill, and do not require exceptional levels of programming ability. If an exceptional programmer was dropped into one of these roles, they might quit out of boredom, or try to refashion the role into building tooling or systems to automate away some or all of the drudgery, but perhaps at the cost of not delivering enough immediate business value to justify their employment, or spending 100 hours building a beautifully elegant solution for a class of problem of which there will only ever be a single instance, which can be solved with 1 hour of bad scripting & manual data tweaking in a spreadsheet. Mediocre work performed in situations demanding mediocrity can be sufficient while producing economic value & providing for one's income.
- tartoran 6y agoI agree that an exceptional programmer would not only not be appreciated in a job like this but their work/code will also be misunderstood and create a huge libility for the company. Hence tgh industry dumbed everything down to the lowest denominator (not absolutely lowest but quite low) such that every role is replaceable (hint: it has to look like an ordinary cog in a system)
- orangeoxidation 6y ago> I agree that an exceptional programmer would not only not be appreciated in a job like this but their work/code will also be misunderstood and create a huge libility for the company. Writing complicated and unmaintainable code is not the hallmark of an exceptional programmer. Rather it is writing simple code to solve simple problems and writing understandable code to solve hard problems. Code other's cannot wrap their head around is not good code and even the clever author will have a harder time debugging, re-factoring or adapting it. Chances are it would be a liability even on a solo project.
- tharkun__ 6y agoBuilding something in 100 hours that satisfies a class of problems but will only see use once is definitely not smart. It's called taking advantage of your employer to satisfy your own curiosity. Do that in your free time of your job is not one where that solution will see millions of uses (meaning you are not working for - depending on decade we are talking - Bell Labs, IBM, Microsoft, Amazon etc.). If you are that good but work at a regular company, build an awesomely good script that is maintainable by even a mediocre programmer that comes after you and spend the other 55 minutes of that hour doing the next task. Then go home when everyone else goes for lunch without anyone noticing because you did the work of 2 people already anyway. If you have a good boss they won't care and give you awesome life work balance that you definitely would not get at Bell Lab, IBM, Microsoft or Amazon because they know how to exploit your drive and passion for their own good. No you don't make enough money to get that time of your life back.
- username90 6y ago
- baby 6y agoI feel like if you're reading this book, there are good chances you're already better than most and that you're a good programmer or on path to become one. The difference between mediocre and good is often that you're seeking to improve.
- gonzo41 6y agoI gotta ask, What do you consider good? There's plenty of working software that's good enough. Made by fair programmers who don't care about lisp or FP. Is your scale of good affected by what you see here on HN? Because I feel like the front page of this site has the same effect as Facebook for skewing views of reality.
- the_only_law 6y agoI’m not sure how to express it very well, but I interact a bit with people who I’d consider “good” programmers. I don’t think I’d correlate it with experience or effectiveness at a job, a good many of them haven’t even made it out of school yet. But they tend to be able to internalize programming/mathematics concepts that by many are considered difficult or complex. I know some will disagree with this, arguing that things related to experience like domain knowledge, ability to effectively work and lead in a team, understanding business needs, etc. and I don’t want to diminish the importance of these things in a professional context. However, I think there’s a good bit to programming that’s more purely technical and more related to raw intelligence (IQ or whatever you want). These people are able to easily understand things that I can’t seem to put together in my head very well.
- throwawayboise 6y agoI'm not sure how relevant it is today but one litmus test I found years ago was how naturally they grasped the concept of a pointer. If a programmer grokked pointers that was a good indicator that s/he was on the path to being a good programmer. It's probably just a proxy for being able to think at a level of indirection.
- deleted 6y ago[deleted]
- setpatchaddress 6y agoThis was one reason I thought programming the classic Mac was great training — the nature of the memory manager, where most data structures were double-indirected pointers and the inner pointer could move at will -— you had to understand pointers or you’d never be able to produce a stable program. Edit to add: and yeah, I’m also not sure it’s relevant outside OS-level programming, which most people never get near at this point.
- the_only_law 6y agoYeah I’m not sure. I’ve had a good bit of passion for programming through both my hobbyist and professional career (naturally more through the latter) and these days I find the things I get most excepted about or find most interesting I’m not really able to understand fully. I guess we all have our limits, but I’ve tried a few different things in recent years that I’ve effectively had to give up because things wouldn’t “click” no matter how much I read. Unfortunately it’s kinda killed off a good bit of that passion, and I’m not particularly interested in what options it’s leaves me.
- onethought 6y agoSimply not true? Given exactly the same opportunity you think they cannot get comparable result? So you are saying there is genetic (dis)advantage to technical things that cannot be overcome?
- yarg 6y agoAsk people with foxp2 mutations whether or not genetics can convey insurmountable obstacles.
- onethought 6y agoI was referring to more subtle gene mutations in terms of the “average healthy human” kind of range. But you knew that.
- yarg 6y agoDon't be disingenuous - you were attempting to overrule a reason based conversation with an emotional call to the notion of universal genetic equality. (So I dismissed you with a sarcastic quip.) That's not how evolution works, no matter how unfair you deem it to be. Life does not give a shit about fair - all that matters is what survives long enough to proliferate. Feelings be damned. The genes that convey contextually useful characteristics (although generally inclined to spread rapidly) are not at any point evenly distributed. In some context genes that were useful in ancestoral context loose their use, or even become a burden. Genes for intelligence may increase the ability to handle novel situations, but they also increase energy utilisation - which makes them a dietary burden.
- onethought 6y agoYou’ve attributed a lot more to what I said, than I actually said. Apologises for the trigger. Not my intent.
- yarg 6y ago
- mapgrep 6y agoThese statements are perfectly compatible with one another: “ most people that attempt programming will never be a good programmer” “ all people given the same opportunities will be capable of achieving, if not the same, then comparable results on a given task” Persistence is exceedingly rare. Falling short of your capabilities is exceedingly common.
- chillacy 6y agoYea this. "people given the same opportunities will be capable of achieving" leaves out the difference in time spent. On the one hand, I don't know anyone who has put in thousands of hours and not been a decent programmer. On the other, that mixes cause and effect a bit, since it takes a certain type of person to even want to throw a thousand hours into programming in the first place.
- smoldesu 6y agoIt seems like the author addresses that in the contents of the book. In the first chapter, they say that there is no way to close every gap of knowledge, and the only difference between a good and mediocre programmer is contentment.
- pm90 6y agoConsidering that there’s no consistent definition of what is meant by mediocre programmers vs “good”, “really good” etc, I get the feeling that this isn’t a very productive approach to measuring the skill of programming. As the responses to your comment demonstrate, it’s hard to get a common definition and thus I feel this discussion to be fairly pointless. I will say this though: there is nothing magic about programming, or really any technical skills like it. It’s all about practice and getting better with time. I do sincerely believe that anyone can be a productive programmer that delivers within the constraints that are demanded of them. If you’re talking about “prodigies” or “polymath” or people that have certain conditions that allow them to be more productive without the same amount of effort, yes, I do agree such people exist. And they exist in every field. I don’t think they should be what most programmers should try to emulate though.
- charlesu 6y ago> but it leaves out a fundamental truth about programming (and technically complex disciplines in general): most people that attempt programming will never be a good programmer - indeed most never even cross through the gate of mediocrity. Isn’t this true of almost everything? Most people who attempt [x] will never be at a good at [x]. Technical fields aren’t special in this regard. Replace [x] with running and it’s just as true despite the fact that just about everyone attempts to run at some point. And yet the vast majority of people aren’t proficient runners in any shape or form. But just about any activity could replace running and it’d be just as true. Attempts aren’t worth much. Intention and dedication are what make most people at least OK at their craft.
- scsilver 6y agoOTOH humans are some of the best long distance runners of any species, with the proper daily routine, most humans can endurance run better than most animals in the world. Depends on what yard stick you are using and in what context.
- cccc4all 6y agoNot only this, but very few people even ask the simple question, how do I become a better software engineer. The four quadrants of competence applies. Q1. Unconscious Incompetence. Q2. Conscious Incompetence. Q3. Conscious competence. Q4. Unconscious Competence. Most people never leave Q1 phase, just muddling through their career and stagnate or burn out. It takes lot of effort to jump from Q1 to Q2 and become aware how difficult things are in reality. Some take effort to become better and these types will usually succeed over time. Lot of senior level people end up in Q3 and it's comfortable zone to be in. But, it takes more significant effort to jump to Q4, where they can gain additional pull to be able to lead and make significant more money. It's significant journey and the timescale is not linear, it's logarithmic in some situations and extremely long in other situations.
- fouc 6y ago> The Mediocre Programmer is a book about the journey of becoming a better programmer. But before we can become better programmers we have to pass through being mediocre programmers. Mediocre doesn't mean a bad programmer --- far from it. It means lacking skill Great idea.. We're all mediocre programmers at some aspect of development even after spending a decade in the industry. And conversely many still suffer imposter's syndrome. Seems like a great topic to address.
- georgeoliver 6y agoThe funny thing is that another definition of mediocre is 'low quality'. And it seems plausible to me that even expert programmers can write low quality programs.
- free_rms 6y agoExpert programmers should write 'low quality' programs if that's what the situation calls for. Most of us are solving business problems, and lateral thinking can be worth more than perfect engineering or fancy algorithms.
- qwantim1 6y agoNeeds an index.
- discordance 6y agohttp://themediocreprogrammer.com/build/html/the_mediocre_programmer.html http://themediocreprogrammer.com/build/html/the_mediocre_pro...
- qwantim1 6y agoThanks! The PDF didn’t have one.
- lwigo 6y agoThere should be a fourth fear in the "Giving Up" section: giving up a decent to great salary when being mediocre cuts it just fine in a lot of positions.
- qwantim1 6y ago> Instead of trying to avoid it or wishing for comfort, we can instead relish that we're in uncertain territory and feel those brief twinges of fear and doubt.[1] Generally true, but it also sounds like you’ve not made big mistakes. Big mistakes often involve slight twinges of fear and doubt also. [1]- http://themediocreprogrammer.com/build/html/the_mediocre_programmer.html#resistance-and-the-container http://themediocreprogrammer.com/build/html/the_mediocre_pro...
- u678u 6y agoAren't most people mediocre? Its only a handful of achievers that are the best. And that doesn't usually mean its desirable.
- User23 6y agoIntellectual ability is more or less normally distributed, but even asking this question about programming is a pretty good signal you're nowhere near the mean of said distribution. I don't know, or really care for that matter, whether or not ability among the subset of the population that chooses to learn to write software is also normally distributed, but even if it is the mediocrities are still exceptional compared to the general public.
- username90 6y agoBeing a mediocre professional is great! Do you complain when the guy cooking your meal at a restaurant is a mediocre restaurant cook? Or when the doctor prescribing your medicine is a mediocre doctor? Anyone who is mediocre in their profession should still feel pride in what they do. Are you among the best? Maybe not, but you are good enough that people value what you do and that is what matters the most. If you find yourself in a position where nobody values what you do then you have a problem and need to fix it as soon as possible. But in that situation you aren't mediocre, instead your main goal will be to work hard so that you can become mediocre.
- Waterluvian 6y agoBe the best darn USAF cargo pilot there is!
- username90 6y agoYeah, it is great to aim at the top but at some point you have to be happy with what you have achieved instead of constantly feeling bad for not achieving more. Getting to the level where you can be considered a mediocre programmer is a huge achievement and hundreds of millions of people in the world would love to be in your shoes.
- mathgladiator 6y agocomparison is the thief of joy.
- EVdotIO 6y agoI'm a mediocre programmer, able to create interesting stuff, and have built tangible value in companies I've worked for, but mid pack in terms of programming chops. The problem is getting work, and hovering over destitution gets incredibly old.
- 29athrowaway 6y agoThe mediocre caveman: I have everything I need. I do not need to learn about nature. Caves are very comfortable. Raw meat is tasty, chewing it with my 3 remaining teeth is great. I do not need innovation. I can happily live to my 30s... if I am lucky, and do not get killed by a wild animal or a member of my tribe. By the way, what is a justice system? sounds very complex, I do not care about it. I will fix all my grievances through violence. Oh, by the way, some guys showed up mounting horses and using metal weapons and enslaved us. Perhaps I should have spent more time trying to innovate. This is exactly what the mediocre programmers and mediocre organizations sound like. People about to get rekt by people that develop an understanding of their world and their craft and innovate.
- username90 6y agoAs long as there aren't enough great programmers in the world to satisfy all programming needs we will need mediocre programmers to cover for them. Programming isn't a competition and hence it doesn't matter if others are much better, all that matters is that there is a need for what you can provide.
- 29athrowaway 6y agoIf you train a developer, educate them about good practices, reward responsible behavior and engineering rigor, and amplify their impact giving them good infrastructure and tools, it is hard for that engineer to stay mediocre. If you show developers thay you do not care about how they do things, they will become mediocre. Unless they are ethical and do it anyways.
- ShroudedNight 6y agoI half read, half skimmed the contents, and what I found was significantly divergent from what I was hoping for. I was hoping to find some combination of a breakdown of potential paper cuts that hold programmers back, and an insightful breakdown of seemingly insurmountable problems that keep programmers in their provincial comfort zones, providing a series of bite-sized victories to lead one to greatness. Instead I found number of already well-tread tropes of self-acceptance, limiting the amount one compares one's self to others, finding friends, and taking breaks. Furthermore, it does this without presenting any kind of new model to achieve this within the programmers existing emotional, executive and motivational budget. I don't know if I'm staggeringly abnormal but I'm already acutely aware of those requirements. Absent some seemingly miraculous improvement in my executive function, in order to effect change (at least in me), the content needs to provide either compelling anecdotes as to why I should try harder, or a new model that provides a path where the extra smashing of face is not required. I fully acknowledge I have no claim of liability for the content not meeting my hopes, given the generous lack of cost, but I must say I'm disappointed.
- papandada 6y agoWithout any sarcasm, maybe that's the content you need to write.
- username90 6y agoThe point of the book is to help people manage the struggle, not how to become a great programmer. If that isn't what you want then you can go find some other book. The authors own explanation: > There are plenty of books on how to become a better programmer out there. Books like this tend to have checklists and other advice that the author deems important enough for you to do in order to become a better programmer. They tend to focus on specific improvements like choosing a better editor, writing better test cases, or drinking lots of water. Those books have lots of useful advice, but they read like a laundry list of things that you must do all at once in order to succeed. This book will try not to saddle you with more work (you likely have enough as it is). Rather, we'll discuss what it feels like to be a programmer. We'll talk about the emotions in being a programmer; the feelings of frustration, guilt, anger, and inadequacy. We'll cover the struggles in learning new things and keeping your skills current. We'll talk about those times when you feel like giving up and walking away from computing and whether those feelings come from a place of love or a worry that you're not keeping up.
- deleted 6y ago[deleted]
- brody_hamer 6y ago> Rather, we'll discuss what it feels like to be a programmer. We'll talk about the emotions in being a programmer; the feelings of frustration, guilt, anger, and inadequacy. We'll cover the struggles in learning new things and keeping your skills current. This is a refreshing change from the productivity-focus that seems prevalent here. Thank you. A book about minimalism boils down to "It's ok to say no". But that doesn't mean it's wasted breath to talk through it. Sometimes simple, valuable lessons take time to digest. Likewise; This book may have a simple lesson at its core, but such a valuable lesson is worth unpacking. It's worth taking some time to relax and digest it. I'm looking forward to reading this. :)
- 8bitsrule 6y agoQuick review: Hope this guy doesn't code like he writes.
- tomerbd 6y agoMediocre programmer + Domain Expert >> Expert programmer + Mediocre domain knowledge I'm not sure if the book discusses it, but I think the top number differentiation between being a mediocre to an expert programmer is actually being an expert in the problem domain and less in computer/programming specific.
- mouzogu 6y agoI don't think it's so much about being a "programmer" as a just a better person. In my experience the worst programmers usually have some bad personality traits, either lazy, unqualified or whatever else or sarcastic, rude, arrogant and runs across the spectrum of bad to good in terms of ability. I think one of the keys to being a better programmer/person is having a good ability for self reflection and self awareness. Unfortunately these skills are developed at a very young age and in many cases it is too late to cultivate that mentality except some rare cases.