Readit News logoReadit News
Posted by u/stardustpie 3 years ago
Ask HN: What bits of fundamental knowledge are productivity multipliers?
I recently realized that certain kinds of knowledge allow one to be significantly more productive when solving a large class of problems.

For example,

* Regular expressions for simple text processing.

* Parser combinators for parsing.

* Parser generators (esp. packrat variety) for parsing.

* The concept of fuzzing and property testing for testing code.

* Calculus for solving all sorts of problems.

* MCMC for solving a huge class of probability problems.

* Search algorithms for solving a variety of problems (e.g. all NP-hard problems, sudoku, HTNs, scheduling, planning).

* Gradient descent for solving a variety of optimization problems.

* Vector Space embedding as a conceptual tool for a variety of complex AI problems.

* Effect composition (Haskell's IO or Scala's ZIO) as an incredibly powerful paradigm for concurrency and parallelism.

What are some examples of 10x multipliers that come to your mind? Fundamental ideas without which you would be drastically less productive.

dmos62 · 3 years ago
- Writing as form of (or tool for) thinking; Leslie Lamport said (maybe quoting someone) that if you're thinking, but not writing, you only think that you're thinking;

- High tolerance for feeling ignorant, confused, silly, inadequate, a novice: none of these states should phase you: you should not have a comfort zone: let your mind feel at ease in not understanding something: go to the eye of the storm and weather it: you'll come out being more capable;

- Formal specification (maybe TLA+) when doing something unintuitive, like non-trivial concurrency; or, simpler put, think before you do;

- Functional programming, immutability, state machines, reactive programming: whatever you can do to make your systems more declarative and their state easier to reason about;

- I'm a geek for tools, and I know that not everyone is like me, but for me choosing the right stack for the job is a big deal, and when saying stack, I mean every tool I'll be using, from the programming languages, to deployment tech, to testing setup; a good tool can effortlessly solve a host of problems.

kalev · 3 years ago
> High tolerance for feeling ignorant, confused, silly, inadequate, a novice: none of these states should phase you: you should not have a comfort zone: let your mind feel at ease in not understanding something: go to the eye of the storm and weather it: you'll come out being more capable;

I’d love to be more at ease on uncomfortable situations. Any tips?

ketzo · 3 years ago
I will give you a fairly specific answer that comes from my history of going to therapy for anxiety and depression.

Whenever I find myself in an anxious or uncomfortable situation, the thing that I need to remind myself is that things are going to turn out okay for me, whatever happens. I do this by working my way up a version of Mazlowe's hierarchy:

1. Am I physically safe? Can I breathe? Can I move my body?

2. Do I have access to shelter? Do I know where my next meal will come from?

3. Are my loved ones safe? Do I have friends and people who care about me?

4. Do I have skills that I care about? Can I do work that I'm proud of?

5. Do I have a job that gives me money? That I like to do?

In pretty much any uncomfortable situation you're in (at least in the context of career improvement), almost all of these things are totally unaffected. The sun will rise tomorrow, even if I bomb this programming interview. My friends will still be my friends, even if I do a bad job networking at this event.

And the fact that so many of the good things in my life will still be good, even if an uncomfortable situation goes as badly as it can, gives me a lot more confidence.

And then, like anything else in the world: practice, practice, practice. The more uncomfortable situations you put yourself in, the more you practice reminding your brain that "everything is okay, actually," the less uncomfortable you'll feel in any given situation.

vorpalhex · 3 years ago
I'm going to go a different advice route then other commenters here.

If you went to the gym and did a really easy workout that was comfortable.. that would be a bad gym session. The goal is to push yourself. Not to injure yourself but to go until failure.

We don't learn in the comfort zone. We learn and grow by pushing ourselves where we feel like we might fail and then pushing until we fail.

Success isn't a game of avoiding failure. Success requires learning and growing from repeated failure. Failure isn't the opposite of success, it's part of it.

Feeling dumb, not knowing where to go, having difficulty even reading and comprehending material is when we know we are engaged in building ourselves.

bbertelsen · 3 years ago
Learn a new language! Be fearless when speaking it even when you know you're wrong. The results are humbling often hilarious and get you accustomed to frequent failure. This is also a good approach for people who are socially awkward or want practice just speaking to people. There are literally millions of people interested in doing "language exchange" sessions, where you do x minutes in your native tongue in exchange for x minutes in their native tongue. Not only will you learn a new language, but asking questions about idiom you do not understand is amazing practice for "anything" you don't understand.
dmos62 · 3 years ago
This isn't really an answer, but I'd say that everyone's different. What works for you might be wildly different than what works for me.

For what it's worth, I'd say that it's about being at ease with being uneasy. I find it unproductive to try to get rid of uneasiness.

pmayrgundter · 3 years ago
For me it's practicing art.

Mainly playing music with a group, sometimes writing and occasionally drawing or painting. It focuses me on the emotional experience and response to entering the unknown and finding flow there

There's a book called Art and Fear that nails the tao of it.

abirch · 3 years ago
Read Richard Feynman. The man was a genius and would ask as many simple questions early on. If he can check his ego, all of us should be able.
Frummy · 3 years ago
For me, it's closing my eyes, taking a few deep breaths, and then continuing. It's okay to be nervous and feel ones heart pounding and just notice all those physiological reactions, but keep going despite that. My old tendency was to switch task to something more comfortable, but just take a silent minute without switching tasks and then keep going.
muzani · 3 years ago
I have a friend who took anti-anxiety meds and was immediately extremely productive.
hi41 · 3 years ago
> High tolerance for feeling ignorant, confused, silly, inadequate, a novice

What are some tools to do this? When I feel I don’t know something, I feel very anxious, stupid and unhappy. How did you develop the skill to be okay when ignorant?

dmos62 · 3 years ago
This is pretty much about learning to deal with your feelings. Different things work for different people. Mindfulness and acceptance have been interesting concepts to explore for me. Though there too exist a variety of approaches. Explore related literature.
CyanDeparture · 3 years ago
Wow, I've never thought of "functional programming, immutability, state machines, reactive programming" as time savers, just better ways of coding stuff, I'm a self-taught engineer and literally all of these just seem like correct way to code stuff beacuse it's much smoother and less faff.
adampk · 3 years ago
Not technical but the self-knowledge of how to put yourself in a productive state. Knowing how to sleep well, eat well, exercise well to allow yourself to perform at a sustained high-level.

Someone may be more technically competent at a problem-space (at the start), but if you are able to work diligently at the problem over a sustained period, you will have 10x better results than those who crash/burnout/lose interest/try to sprint to the finish.

Ancapistani · 3 years ago
As someone who struggles with ADHD and depression, this isn’t always possible.

At 38 years old, what I have discovered are ways to make myself valuable to my employer even when I’m not at my peak. The move to a more “architectural” role has been a Godsend for me. It means that I’m a let to serve to some degree in an advisory capacity for others. When I’m not able to enter “flow” with my primary project, I can usually find someone else with a problem that they’re struggling on, pair up with them, and help them get over whatever is in their way. This makes the team as a whole significantly more productive.

As a bonus, I often find that focusing on a problem of short duration helps me overcome the mental barriers to becoming engaged in my work and lets me get done what I was struggling not to avoid doing in the first place.

giraffe_lady · 3 years ago
ha, lucky. I have a similar constellation of problems and never found an employer willing to tolerate it long term. I can put large volumes of high quality work for 3-5 weeks at a time followed by 2-4 weeks of a low output slump. I usually get fired on the fourth or fifth cycle, freelance for a while, then try again.

Always hoping to find somewhere willing to accept the inconsistency in output but haven't found it yet. Anyways it's cool to hear someone in one of these threads acknowledge this reality for a lot of people. The general HN consensus seems to be that anyone who isn't a top 10% technical star and an incredible productivity machine doesn't deserve to touch code.

diatone · 3 years ago
Came here to say this. The library of Alexandria fell into disrepair. Try not to let the same thing happen to you, or all that knowledge will be for nothing.
brianhorakh · 3 years ago
The mental model for this state is known as "flow" or atheletes sometimes call it "the zone"
catchclose8919 · 3 years ago
...lots (most?) of the actual work that needs to be do is "grinding" or "working against tons of hard/impossibly to remove friction": you'll never achieve any kind of flow doing this kind of work!

So the productivity multiplier advice is this: learn to cope and be productive at doing the kinds of work where flow is impossible/unfeasible!

(This way you'll not be already tired and behind when you get to the work for which "flow" is possible...)

stncls · 3 years ago
If you deal with computationally hard problems, I think there's a whole toolbox of utilities with unbelievable performance, in which millions of PhD-holder-hours have been poured, but that get ignored more often than not.

- SAT modeling languages & SAT solvers

- same for SMT (satisfiability modulo theories)

- Constraint programming

- MIP (mixed-integer programming) and its special cases, like

- TSP (traveling salesman problem)

The latter is maybe more anecdotical (as in: fewer direct applications), but it is emblematic of the whole phenomenon. We see a steady stream of claims that NP-hard problems are "impossible" or take "billions of years to solve". We also see blog posts with the latest ML approach "doing the impossible" and providing reasonable (not optimal) solutions to 50-city TSPs. All this while ignoring that with proper maths, we could solve 50-city TSPs to optimality by hand in the fifties, and now Concorde routinely solves 100k-city instances in seconds on an iPhone.

sidpatil · 3 years ago
Mathematical programming (LP, (M)IP, etc.) feel like superpowers to me. Working with them also helped me realize that many optimization problems are actually just closely-related variations of the same problem.
pdhborges · 3 years ago
Maybe because Linear Programming is P-Complete.
mw888 · 3 years ago
I could certainly read more about this, it sounds fascinating. Will appreciate more of your knowledge or a thoughtful hyper link.
knodi123 · 3 years ago
Buttons840 · 3 years ago
The ability to type 30+ WPM. This is a pretty low bar to cross.

About half the people I have worked with when faced with the task of writing a 40 character line of code will do something like find a similar line and copy and paste it, and then change a character or 2, and then go find a 6 character variable that they need to type and instead of just typing the 6 characters, they highlight another copy of the variable with the mouse and then copy and paste the 6 characters. The whole thing is really frustrating to watch when you're pair programming with them. I'd be surprised if they're getting more than 10 WPM through all of this. It's got to be a huge mental burden for them as well; I mean, getting a few characters on the screen shouldn't be a mental exercise, you shouldn't be thinking about where you can find a similar line you can copy/paste, and you shouldn't be thinking about where else you can copy/paste variable names from. Getting a line of code onto the screen shouldn't be a creative endeavor.

I know being able to type 100 WPM isn't a great advantage when programming, but a minimum of typing skills, a mere 20 or 30 WPM, is important.

garfieldnate · 3 years ago
This honestly blows my mind. It's very difficult for me to imagine a programmer who is bad at typing. Do you live somewhere where personal devices are uncommon? They made us learn to touch-type in high school (when I was 15), and it made it so much easier to interact naturally on AIM. It was the most immediately-useful course I'd ever had.
lkesteloot · 3 years ago
http://steve-yegge.blogspot.com/2008/09/programmings-dirties...

"Here's the industry's dirty secret: Programmers who don't touch-type fit a profile. ... Here's the deal: everyone is laughing at you. Or if they're your close friend, they're just pitying you. Because you suck."

pnutjam · 3 years ago
copy and paste can be a good tool to avoid typos. But I see alot of people who don't know basic keyboard shortcuts or word autocompletion with tab...
danhab99 · 3 years ago
My dad is annoyingly like this. I'm so grateful that I learned vim shortly after he taught me how to code.
angarg12 · 3 years ago
I roughly divide these skills into three tiers:

* Micro-optimizations: e.g. a shortcut that saves you a few seconds several times a day.

* 'Mid'-optimizations: e.g. writing an script that saves you an hour once a week.

* Macro-optimizations: e.g. pushing back against building a useless feature that saves you several months in a year.

Most developers focus in the micro level, but I believe 10x productivity lives in the macro level. Also the macro level doesn't need as much tech skills as it does soft skills and domain knowledge.

As an exhibit, in my career I've seen two projects that

a) never launched

b) took several people several months to build

c) would have never been built had someone pushed back and asked the right questions at the start.

andrei_says_ · 3 years ago
I am not a great dev but having worked long enough in the industry I know where to push back on the macro level and that allows me to build things with incredible speed.

So much effort is spent on building the wrong things for the wrong reasons.

joeman1000 · 3 years ago
I use these tips as a civil engineer (who knows how to program):

- fully specify the problem before jumping in. Write what you know, the context and the unknowns.

- Write the steps of the solution before jumping into a problem.

- If writing a report, create the outline/heading structure before doing any other writing.

- If you want to do something non-trivial, quickly search the web to see if someone has written a library or has a one-liner to save you time.

- 80% of your results will come from the first 20% of the total time you spend working on something. Anything after that is polish. This helped me to overcome perfectionism.

- If you don’t know something, ask a colleague or peer. They will be thankful for the opportunity to teach you something.

- If you’re ‘stuck’ on something, completely switch context for an hour or even a day. The subconscious mind does serious heavy lifting, it just needs time (and rest!).

- if you’re learning a new concept and struggling, don’t write detailed notes straight away. Your notes at this stage reflect a naïve understanding. Letting an idea ‘ferment’ before writing about it will result in primo notes.

- Don’t spend too much time buggering around with tools and tech. If you’re spending more than 30% of the total task time on ‘ceremony’ or ‘config’, it’s a hindrance.

There’s more but these are the main ones.

nicbou · 3 years ago
You sound like a pleasant coworker
cconcepts · 3 years ago
Using "primo" and "buggering" like that: I think I spotted a Kiwi?
joeman1000 · 3 years ago
Close! Aussie. I thought primo was a yankee word though.
jstx1 · 3 years ago
Most of these aren't really productivity multipliers, they just enable you to do the thing you need to do.

It's unlikely that someone is doing task A without any calculus but another person who uses calculus is 10x more productive on the same task.

bmj · 3 years ago
I think it's also possible that some of these lead to a I've-got-my-hammer-and-everything-is-a-nail approach to problem solving. You may then find yourself parsing HTML with regexps (https://web.archive.org/web/20111009133402/http://stackoverf...), which is never a good idea.
noduerme · 3 years ago
I'm a big fan of `for (x of y)`, skip the functional version, manipulate variables in and out of scope, hell, use globals. Sometimes you show up wearing a tux, other times you just have to rock the party in a hoodie.
brianhorakh · 3 years ago
This is called "law of the instrument"
i0nutzb · 3 years ago
You may want to NOT underestimate one's ability to add TONS of if/elseif/else (or switch/case) statemens in order to put things on track...

There are various cases of „programming hoorrors” stories where you have a calculator implementation that, instead of doing the ... you know, math, will actually go through all X combinations.

jstx1 · 3 years ago
True, as I wrote the calculus example I remembered this post about a medical researcher rediscovering integration - https://news.ycombinator.com/item?id=26384357

But it still feels more like unknown unknowns causing you to put in a lot of extra effort; I wouldn't classify these as productivity multipliers.

noduerme · 3 years ago
I just had a recent situation like this which initially presented as a simple calendar / due date list, but then spiraled into some dreaded fuzzy set of if/then cases as the client began to add requirements for due dates of certain items in a certain order that would take priority over other items due on the same date, or missed items, or future items that could be done in advance.

After two weeks of increasing horror, and four attempts to write the algorithm, I sent the client something I called the "Blueberry Muffin Problem" email, as a reference to that scene in Casino. But there is no logical way to do this, I said. Anyway. This led to a series of conference calls in which we finally were able to see a clear strategy.

End result: 40 lines of immaculately clean code, roughly $10,000 at $200/hr, problem solved.

I obviously wasn't paid for writing the code in this situation; it was for spending enough time with the problem to find all the edge cases, and figure out the right questions to ask to get to the solution they needed.

sanderjd · 3 years ago
This is well put. It gets to my ambivalent response to this list. Understanding parsers is important ... if you're parsing things. Etc.
futureshock · 3 years ago
I think the true 10x multiplier is not a technical skill at all. It is the ability to quickly cut through irrelevant tasks and actions to focus on the thing that will move the business goal forward fastest. It is enshrined in the concept of the MVP and the short iteration cycle. Quicky building something that does not solve a business problem is not productive. Work=force*displacement. No movement, no work.

A closely related skill is the ability to cut through all the abstractions and interfaces to get to the root cause of what is broken or needs changed. A technical and organizational debt buster if you will.

escapedmoose · 3 years ago
Absolutely this. I was a chronic procrastinator prone to intense anxiety and breakdowns just before deadlines. Then I took a really good ~3 hour course on time management, and it seriously changed my life. I can’t even describe how much more productive I am. It’s changed how I approach every task, professional and personal. I can’t even remember the last time I felt any sort of stress or anxiety about my to-do list. A big part of it is figuring out what doesn’t have to be done right now (“positive procrastination”).

Edit to add that the course was “Time Management Fundamentals (2016)” by Dave Crenshaw. I completed it on LinkedIn learning. For those of you who’d like to give it a try, my advice is: do all the exercises. You won’t get the full value out of the course unless you actively incorporate the whole routine into your workflow. There’s a learning curve, but it’s absolutely worth it. Also be warned that the presenter’s personality is a little off-putting (to me, anyway), but he absolutely knows what he’s talking about, so listen to him.

garfieldnate · 3 years ago
I'd like to second the recommendation for Dave Crenshaw's courses. I never realized before that I wasn't actually managing my time; I was just desperately chasing the non-existent end of my entire life's to-do lists. I'm still working on getting through my initial in-box (the one you create by going through his trigger lists), but all the important stuff got done, and I have confidence that the things I haven't gotten to yet aren't important enough for me to panic about (otherwise I would have done them!).

The "time management tips" one is a kind agglomeration of his advice on managing your time, your relationships, your reports, etc., and is a good follow-up. He has a course on having productive meetings, as well, which is well worth the time. It may make you hate meetings at your work, though XD.

Honestly his courses provided a lot of relief and validation to me, as well as hope for a future working in companies. I can't recommend them enough.

tpoacher · 3 years ago
What course was this, may I ask?

I might watch it ... later :p

duckmysick · 3 years ago
I started going through the course three days ago, right after you posted it. I can already feel improvements in organizing my time.

The course doesn't offer anything novel - for example it has elements of Getting Things Done. But it's presented in a more accessible way that resonates with me. It also focuses on making good habits, something I already discovered in another book recommended on HN, Tiny Habits.

Thanks for the recommendation. I really appreciate it.

HomeDeLaPot · 3 years ago
I'm also interested in what you learned and which class you took!
knckl · 3 years ago
Could you share any tips or the name of the course?
hyshai · 3 years ago
Can you share this resource?
bayofpigs · 3 years ago
Curious what course you took and if you have time, a summary of the most valuable skills you learned?
replyifuagree · 3 years ago
This. Which isn't to say that technical knowledge doesn't matter, it truly does. But, the primary problem in the industry right now is that the majority of finished code generated by professionals goes unused. The amount of waste is staggering. Working on the right thing is way more than a 10x multiplier.
mountainriver · 3 years ago
Yes! I often tell people this in interviews and they act like I don’t have enough technical knowledge. The cult of Leetcode has made this so much worse.

You rarely, if ever, need Leetcode. What you need is to understand deeply what you should be building so you don’t waste everyone’s time!

kqr · 3 years ago
And it's not only about features that go unused, but also features that are used but only in support of workflows that improves nobody's life. Or functionality that's used but is a wildly inefficient version of what could have been.
9wzYQbTYsAIc · 3 years ago
> The amount of waste is staggering. Working on the right thing is way more than a 10x multiplier.

How much of that waste would you attribute to 1x programmers and how much would you attribute to 0x managers?

copperx · 3 years ago
> the majority of finished code generated by professionals goes unused

What are you referring to?

edelans · 3 years ago
Amen. or as Peter Drucker puts it (he is dubbed as "the founder of modern management" on Wikipedia) :

"There is nothing so useless as doing efficiently that which should not be done at all."

https://en.wikipedia.org/wiki/Peter_Drucker

saidajigumi · 3 years ago
And likewise, this theme shows up in Tom DeMarco's classic book Slack, which contrasts "efficiency" (the rate at which an organization is moveing towards some goal) vs "effectiveness" (the ability of the organization to choose and steer towards better goals). An important theme of the book is that an organization running full-tilt (maximum "efficiency") intrinsically reduces/eliminates its needed human "slack" to reflect and iterate towards the correct goals. DeMarco also digs into into the many organizational and management anti-patterns, with supporting research, that harm both effectiveness and efficiency (and just plain human well being...)
rawgabbit · 3 years ago
"If you don't know where you are going, it doesn't matter how fast you get there."
noduerme · 3 years ago
This is the right answer.

The proof is that a good coder spends about 10x as long thinking about it before actually committing any code. In a sentence: Be able to visualize the problem in your head first. The actual code, if it's elegant and succinct, is incidental.

rco8786 · 3 years ago
> The proof is that a good coder spends about 10x as long thinking about it before actually committing any code.

This seems antithetical to the post above yours. Or at least how I'm reading it. In bigger tech co's this looks a lot like massive design documents with a dozen reviewers, all giving enormous amounts of time and thought to the idea in the pursuit of "building it right". Design processes that can take weeks or months for what is otherwise an MVP.

mertnesvat · 3 years ago
Exactly I'm living proof that seniority comes with the ability to spend more time on problems to understand all the details before committing stuff which no idea how that works.
graycat · 3 years ago
Nice: Ah, FedEx founder F. Smith just booted himself out of the CEO slot and to just Chair of the BoD.

At one time he was scared of the problem of scheduling the fleet. Yup, if describe the problem in complicated terms, then the scheduling problem gets wildly complicated, e.g., in NP Complete, etc. -- could have a big team working months on just the first version. But he needed answers right away and, to satisfy concerns of some investors on the Board, needed the answers also to apply to the whole, planned company (eventually it grew to something much bigger than the initial plans).

I was in a meeting looking for a solution with several people, and it was all confused. Finally I just announced that I'd solve it.

I was teaching computer science at Georgetown and had 6 weeks to go to the end of the semester. So, I wanted to be done in six weeks. How'd I do that? Sure, just concentrated on what the business actually needed and threw out the rest. So, in six weeks had the software putting out nice schedules.

Our two representatives of BoD member General Dynamics and major investor evaluated the schedule and announced "It's a little tight in a few places but it's flyable.". The BoD was thrilled.

At one point Smith stated that my work "solved the most important problem" facing the company. The 10X, maybe 1000X, difference was essentially just in delivering what the business needed and dropping the rest.

CalChris · 3 years ago
The main thing is to keep the main thing the main thing. --Steve Covey
bookreturn · 3 years ago
It is the ability to quickly cut through irrelevant tasks and actions to focus on the thing that will move the business goal forward fastest.

"Landing the plane" as they sometimes say.