Hacker Newsnew | past | comments | ask | show | jobs | submitlogin

Interesting; my strategy has been almost the polar opposite of his ('learn widely', not 'deeply'), and it served me well so far. It's the whole discussion of being a specialist vs. a generalist, to some extent. Do you want to know stuff about a lot of things, or know a lot of things about some stuff?

TBH I also believe in knowing fairly deeply a few areas (you have to have _some_ depth too, not just breadth); but I suspect Carmack is not exactly a narrow-field specialist, with him founding Armadillo Aerospace and all... his knowledge might very well be both wider & deeper than mine :)



> Interesting; my strategy has been almost the polar opposite of his ('learn widely', not 'deeply'), and it served me well so far.

This whole kind of advice is not very useful in practise. Copying a recipe for success from a person that is wildly different in personality than you will not lead to the same outcomes.

If you've read Masters of Doom, it is evident that Carmack is not neuro-typical. Few people have the ability to concentrate like him. There is no point trying to become like him, this will only make you miserable. Don't fall for post-hoc rationalisation: he naturally gravitated towards it and became successful. 200 years ago he might have been a scholarly monk, or a watchmaker tinkering.

You have to choose your own path. Doesn't mean you cannot learn from the mistakes of others, but this will probably be about how and less about what.


My number one tip for this strategy is: good generalists need deep knowledge of the fundamentals which apply to their general field.

If you know the fundamentals and the theory of programming/CS well enough, you can contribute to almost all kinds of programming projects (given some time to acclimate). Some examples of what I mean by fundamentals:

- data structures;

- computer architecture (no need to design your own hardware, but you should know how all the components interact);

- basics of complexity theory;

- at least one scripting language.

- knowing how to write low-level programs in at least two operating systems. For example, write a simple HTTP proxy in C by using just the C standard library and BSD sockets. If you don't want to use C, use another compiled language but avoid any fancy libraries for this kind of exercise.

If you're good at all of the above you'll never run out of companies that want to hire you. You won't know everything, but you'll be able to learn most things quickly enough.


I agree with all the above, except:

> If you're good at all of the above you'll never run out of companies that want to hire you.

If you're good at all the above, you'll be hit with whiteboard monkeydance and the interviewer will walk away convinced you don't know how to write an if statement.


> TBH I also believe in knowing fairly deeply a few areas (you have to have _some_ depth too, not just breadth);

There's a specific term for this, it's called "being T-shaped". You have breadth at the top and then depth in one subject area.

I think the ideal balance probably varies from person to person. Some people really enjoy going deep on a subject (these are the kinds of people who get PhD's). I personally can't keep my interest on one thing for too long so I end up with a lot of breadth, but I make sure there are a few subjects I revisit a lot so that I manage to build some depth.


To me it makes more sense to learn widely early on as a junior. You’ll get a sense of what you enjoy and what you’re good at over the years. Then you can focus on what you like as you become senior and have a foundation.


Depends on the needs of the team too. In most of my roles, having good breadth has been more important to keep an eye on the big picture and to be able to contribute in various areas and tell when the Jr's are doing something unwise.


Indeed. The most senior engineer on a team typically needs to have sufficient broad knowledge to understand (in detail) what everyone else on the team is (or should be) doing.

That said, Carmack clearly has wide-ranging enough knowledge to run rings around entire engineering teams - despite his preference for learning in depth.




Consider applying for YC's Winter 2026 batch! Applications are open till Nov 10

Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: