← Back to context

Comment by hardwaregeek

5 years ago

I suspect the dissenters and Dan are not as far apart as one would expect. What I see in the dissent is a rejection of the specific brand of Silicon Valley rah rah productivity cult. There's a lot of mysticism in SV style productivity, whether it's the new hottest app or the latest lifestyle craze. It's also almost always directed at squeezing more work out of someone who's already working far too much. What Dan's proposing is a much more concrete, much more grounded sense of productivity. It's the difference between trying to get an overworked line cook to fulfill the job of 3 regular workers and watching a master chef work with no extra movements, no wasted energy.

I'm sympathetic to the analogy of practice. Too many people are extremely static in their assessment of their skills. They make overarching claims like "oh I'm just not good at cooking" or "I just can't type very fast", when they can remedy these issues with practice. Of course they aren't obligated to do so, but it's a useful mindset to see weaknesses as potential places of improvement instead of permanent failings. It's also true that if you're racing against someone who doesn't see it as a race, you'll win. Granted they probably won't care, but sometimes people get to the end, realize they did care about the race, and were just never clued into the fact that it was a race.

Something Dan is not talking about at all but is at the core of my personal productivity troubles is energy level management. There is a world of difference between my average productivity and my peak productivity as I tend to work in short productive bursts then need a lot of time to recharge.

My yearly work output is OKish but my daily or weekly productivity has very high variance, which has caused me some trouble in the past (especially in agile shops where constant productivity is expected).

Personally I haven’t found any magical way to meaningfully improve my average productivity. Every time I think I just found a magic bullet, it usually boils down to working closer to my peak productivity for some time (sometimes without noticing it myself) then realizing I can not sustain that on a full year / full decade / full career.

Before thinking of improving specific skills, just being able to be focused and working without distraction all day every day would be an order-of-magnitude improvement for me.

  • > Before thinking of improving specific skills, just being able to be focused and working without distraction all day every day would be an order-of-magnitude improvement for me.

    I solved this problem by going to a psychiatrist, getting diagnosed with ADHD (at age 35), and starting medication.

    Not an exaggeration—I struggled with compulsive video gaming for almost my entire life; now on medication that issue has just completely vanished.

    • Thank you.

      I was fearing/expecting someone to mention ADHD. I have never been formally diagnosed but everything I read about it feels suspiciously similar to the way my brain is wired. I might have to look into it more seriously. I’m currently 33.

      4 replies →

Very well put. This was sort of my attitude to programming years ago - to try to get really good at the craft. But the question is, is that going to be rewarded or recognized at all? Who makes more, the programmer dedicated to their craft and domain getting better every day, or the leetcode expert who jumps from one FAANG to another getting 30% raises each time? What is the track for promotion at most companies - being a better programmer or learning project management and becoming a manager/lead who only spends 10% of their day coding?

I could try to get really good at programming. I could try to really learn something like databases or systems programming extremely well. But is a recruiter looking at my resume going to see that? Is a management chain that doesn’t really understand software going to reward that? Does the 100th startup building your average webapp need that skillset at all? Does your manager even look at a pull request and have any idea of the quality of your code, or do they simply evaluate # tickets / day?

I have never worked at a FAANG or any of these beautiful environments with amazing people dedicated to the craft of engineering. I have worked in places where great engineering is not recognized, or (more often) just not as important as okay engineering + project management + communication + being friends with the right people. The job of a modern software developer in most places is only partly about programming. Pure programmers are just low value cogs in an assembly line, and being a great programmer only makes you a slightly better low value cog because it won’t be recognized. Your average manager sees you do the task in X days and assumes it was about X days worth of work - they have 0 idea if it would’ve taken someone else 5X the time. Its a luxury to work somewhere where your job really is just engineering and good engineering is recognized and rewarded. When your chances of working somewhere like that are low and you have limited time, maybe its not worth investing time and energy into leveling up as an engineer.

  • I think you're kind of mythologizing both FAANGs and Leetcode here. Leetcode won't get you further than doing amazing work and making your co-workers and colleagues happy. The OP is about how to get serious upgrades in the work you do. Leetcode is a thing that gets you in the door.

    Likewise, FAANGs are not in every case "beautiful environments with amazing people dedicated to the craft of engineering." The most toxic person I ever met in my life spent years at Google, and he was not an impressive engineer by any stretch of the imagination. Amazon, Microsoft, and to a lesser extent Netflix are all notorious for having Squid Game cultures where everybody knows somebody will get fired soon and they're working hard to make sure it's not them.

    Also, this is just false:

    Pure programmers are just low value cogs in an assembly line, and being a great programmer only makes you a slightly better low value cog because it won’t be recognized.

    I'm not saying it isn't true at any company. But as a statement about the overall industry, it's false. Great architectural decisions can add substantial amounts to a company's bottom line.

    Likewise, this feels very naive to me personally:

    What is the track for promotion at most companies - being a better programmer or learning project management and becoming a manager/lead who only spends 10% of their day coding?

    Principal engineer can be an astonishingly lucrative role.

    • Principal engineer can be an astonishingly lucrative role.

      Nearly as lucrative as mid-level manager.

  • You should not expect a better payment from your company because you are a better programmer. Payment is according to demand and offer. Your company will mostly demand what you say: OK engineering, management skills, good communication skills, getting well along with your colleagues.

    But from being a better programmer you can still derive better monetary gains. Instead of striving to become a lead or manager or product owner, you can either become an entrepreneur or search for a company where being a better programmer is a highly desired skill.

  • If your motivation is to be able to work "at a FAANG or any of these beautiful environments with amazing people dedicated to the craft of engineering", then maybe it's more useful to think of the advice in terms of, making it easy to get a job "where your job really is just engineering and good engineering is recognized and rewarded". Or is this not actually your motivation and it's more to lightly mock people who grinded to get such jobs? If you've never worked at a company that has amazing people, that was a beautiful environment, that had dedication to craft, then it might be difficult to believe that such companies do exist. But once you enjoy it and recognize it, then that just becomes your standard for companies, so you'll only interview at companies that you think might meet that standard, you carefully evaluate them during the process, and you switch if you find that not to be the case.

  • > What is the track for promotion at most companies

    A point he hammers home in the article is that he likes to be more productive so that he can go home earlier and do what he loves.

    > Pure programmers are just low value cogs

    The idea of improving productivity here is not only applicable to programming. One example he mentions is improving meetings. If you're a business person, you could improve at spreadsheet jockeying.

> Too many people are extremely static in their assessment of their skills. They make overarching claims like "oh I'm just not good at cooking" or "I just can't type very fast", when they can remedy these issues with practice.

The people with the biggest blockers are those who argue along the lines of "learning skill X isn't even important, no learning skill X actually makes you worse!". That is the perspective so many here takes on becoming faster at programming. They actually argue that practicing being fast will actually make you worse at your job! Such people will never improve, they are stuck where they are forever.

  • No one argued against that. We argue that the value proposition is dependent on defeating the other. I prefer not to because, how many others will I race against in life? The indefinite race is unfulfilling. More commonly, we call this the rat race.

    I’ve beaten people in the race, and have been beaten myself. My career as a perpetual online matchmaking ranked game is … in so many words, not what I want.

    To be forever racing, in age, under duress, or worse, needlessly, villages are not built this way.

    Agile pits people against each other in an ultimate form of relativism. The constant question is ‘what did you do yesterday’, every single day. Hey, I did what I could, with the constant retort being ‘oh, but the other did this’, it’s gladiators. Forever stuck in the coliseum. And there will always be the other.

    They use the simplest shittiest psychological tactic.

    • I think the rat-race idea got baked deep into SV largely because of the setup of the post-1970 economy, and specifically California's rules: every startup had to be "fast" and "hit the ground running" not just because of literal business pressures, but because implicitly, everyone intends to exit and move on to the next thing immediately, so a slow-moving part-time effort would be a no-go. That derived just from mundane realities about the market, legal and financial environment, and protections afforded towards workers and businesses - everyone knows that we moved in the direction of corporations squeezing the workforce because they "couldn't afford" to build them up. Therefore career mindsets filtered to accommodate only those with the gold rush viewpoint, because the only way to win that game was to strike it rich and retire.

      4 replies →

  • I wish I could identify a finite set of tasks at which to practice and get much faster. The tradeoff between getting faster at one thing and learning a new thing that could potentially improve my productivity even more is never really clear to me. Someone can have perfected their craft in X and then something better comes along and replaces the whole paradigm.

    • Your question: There is no finite set. There is no end to it. This is a process. You do it over and over. You don‘t invest into a set and be done with it (and likely over-invested in some). One step at a time. And once in a while reevaluate the territory.

    • I offer nothing definitive, but one of the greatest benefits of StackOverflow has been to quantifiably classify most of the common problems in computer science, programming, analytics (and to a lesser extent the other StackExchange communities ...)

      If you go there, search for a tag, sort by popularity, etc. - most of those techniques and approaches and patterns are, if not timeless, then mostly timeless and relevant.

    • Master the basic building blocks of programming. Frameworks comes and go but the basics are the same. Master as in "I do X correct the first time even without thinking" not "I know how X works". The "do without thinking" is when your subconscious is doing it for you so your conscious doesn't have to. You want to put as much as your work there as possible, it is like putting work on a GPU instead of your CPU, so every reusable programming trick and pattern should be there. This also helps you reason about code since now your sub consciousness can build code on its own and therefore help you reason in much larger chunks.

      A person who hasn't mastered loops and conditionals will fail FizzBuzz. That is bad, you recognise that I hope. But it doesn't end there, you can master so many more powerful parts of programming and get as fast as you were at FizzBuzz att many other much more complicated tasks as well. Ultimately programming takes time due to all the parts you didn't master, but when you have mastered enough parts then you can fit just about any problem into parts you have mastered and code them up extremely quickly.

      So the speedup you see is roughly the speedup you saw from at first struggling a lot with loops and conditionals early on when learning programming, to today when you do them effortlessly and instantly. Now the other things to master aren't as simple patterns as loops or conditionals, but the end result is the same improvement in speedup and effort.

      For example, competitive programming is about mastering a ton of such chunks. You don't memorize solutions to get fast, you master thousands of such chunks and compose them to solve problems in 5 minutes that would take regular programmers 5 hours if they can solve it at all. I went that route and it is similar to how people master chess, a grandmaster makes better moves after a few seconds of thinking than a typical chess player who has played for years thinking for many minutes.

      It took about a year and then I could solve hard problems at similar pace as the best in the world with basically no errors, compare that with spending 4 years in college, I think the practice is worth it, I have never needed to practice that again as the chunks I mastered doesn't go away, it is like learning how to ride a bike. You forget the details, but your subconscious wont forget those chunks. Of course I can't solve hard competitive programming problems in 5 minutes today, but I can solve most leetcode "hard" problems I haven't seen before in under 15 minutes and basically all of them in under 30 even though I haven't practiced these things for many years.

      Now, this wont solve all your programming woes, you still need to understand requirements, talk to customers, learn API's etc. But at least you are no longer bottle necked by composing programs. Instead you can throw together MVP's quickly, show prototypes to make discussions more fruitful etc. Also most jobs doesn't requires this level of mastery, only do it if you aim to join top teams using your technical skills if you really get good at this then many teams that wouldn't care about you before now gets very interested in you since so few are this fast, or if you want to build your own products on your own, or if you find mastering things fun.

      Edit: Sorry for edits, but here is last bit. When I worked at a high performing team at Google I averaged over 500 lines of code a day going through code review and running in production when I wasn't constrained on non-programming bits like understanding the problem etc. To do that you write 10 changes, each about 50 lines and trivial to review since everything is super clean, otherwise you can't get through code reviews fast enough. Code reviews, unit tests, fixing edge cases etc, none of that are excuses for being slow. Now it is still fine to be slow, I don't blame people, I'm just saying it is possible to be fast if you deliberately practice a lot to be fast.

      14 replies →

    • I feel the same way, but I also think that in all of the time I've spent thinking about it, I could have learned a bit of Vim or better typing, or something.

  • There is only a limited amount of time in life. It matters on what you spend it. Given that the way programming in industry is done is generally fucked up, working super hard at becoming super fast at doing that brand of programming can be a waste of time. Of course that depends on what your goals are.

    • Interesting POV. Can you elaborate on an alternative to the way of industry programming? Or more simply, list some of the ways in which industry brand programming is flawed?

      3 replies →

  • Yes, it is a common psychological defense. Rather than suffer the pain of inadequacy one either decries the whole idea of merit as meaningless/harmful or adds enough mushiness to the ranking method as to render it useless. Either way your envy subsides and you can back to living a professional life of un-examined mediocrity.