Live data from Hacker News

John Carmack: Career Advice

twitter.com

101–110 of 178 posts

Re: John Carmack: Career Advice

#101
post #95

David Epstein's Range has a lot to say about this topic. Carmack's idea of 'deep' work [0] is environmentally dependent. It works for him and for the places he has been at. But it is not a universal rule for learning in all environments. Epstein uses Tiger Woods and Roger Federer as his headline case, but goes into many other forms of learning. Woods' golf is a kind learning environment ; the rules are clear, the fee…

This is an interesting perspective, from a technical view it seems like the difference between writing library and debugging a system.

Programming a library referencing an RFC seems kind, the rules are already there.

Debugging a performance issue in a large distributed system is unkind, you need a lot of existing knowledge and ideas to know where to start.

Re: John Carmack: Career Advice

#102
post #79

Earlier quoted context omitted.

Thanks for the comprehensive explanation! I also find it quite interesting that you mentioned git specifically, because I’ve been going back and forth for the last few days with myself about whether I should spend the rest of Winter Break and next semester (I’m an undergrad with one semester left) learning git internals deeply. So, this felt somewhat validating of the perspective that I should learn about git more de…

I agree with the sibling comment that trying to implement a limited version of git (but that can work on a real git repo) would almost certainly a great way to learn git (there are multiple "implement git yourself in X" projects for different languages X that you can find online). There is no harm in reading through Pro Git (which is a fine git book) either, but generally, and I wish I had been more acutely aware of…

> generally, and I wish I had been more acutely aware of this myself when I was at school, if you really want to learn something you have to either implement it yourself or use it in anger in a realistic setting.

This is so true! Only towards the end of my formal education have I begun to learn the same thing. In many ways, I’m still biased towards just reading things —- partly because implementing something and running into issues I feel I’m not knowledgeable enough to solve/failing really bugs me —- but I’m gradually learning that failure is just part of the learning process, and doesn’t imply I’m incapable of doing something.

I’m definitely going to try it out over the break! :)

Re: John Carmack: Career Advice

#103
post #84

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 s…

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.

Re: John Carmack: Career Advice

#104

Earlier quoted context omitted.

I'm sure many will come down hard on my comment and disagree. But speaking as someone who teaches at a university and also works in industry and is involved in hiring, I don't think becoming an expert in git is worth your time. At this stage in your career you should spend your time mastering algorithms, data structures, and a compiled language like Java or C++. I would put emphasis on learning how to use your langua…

I'm pretty sure (well hoping) that all of the advice to go deep into one thing would always be in addition to actually being able to code. I completely agree with you that understanding git very deeply is not needed or useful to the level of detail suggested here in other comments. The level of understanding of git you need to stand out is very very limited in my experience. Most devs in "regular" companies struggle…

It wasn't clear to me that the other comments were starting from "know how to code," which is why I made my comment. If OP spends time honing their coding abilities then by all means learning more about git is a great plan.

I am really surprised by your comments about git at "regular" companies. If all we are talking about in this chain is understanding workflow and how to rebase, cherry pick, etc. then I completely misunderstood the discussion.

I have certainly gotten myself into some hairy situations. Since I avoid making massive commits, if things get too bad I have always been able to quickly resolve the issue by just doing a clean clone somewhere else and moving my changes over. As a last ditch effort it works quite well and does not take too much time (or stress :) ).

Re: John Carmack: Career Advice

#105
post #94

Earlier quoted context omitted.

> Much more programmerly than "1/n" On the other hand, null-terminated strings are avoided by most modern programming languages, which tend to explicitly store the string's length.

Twitter uses a static buffer size of 280 characters to avoid this problem.

I meant the scheme used to indicate it's part of a multi-part message.

the 1/n scheme indicates the length of the sequence upfront, whereas the backslash scheme doesn't.

Re: John Carmack: Career Advice

#106
Here are some ways to learn deeply and be relevant:

1. Pick a data structure (such as a hash table or LSM-Tree) then read all the literature there is to read, every single paper that's great, following the best conferences year after year, and implement a 10x faster or more scalable version for the std lib of your favorite language.

2. Pick a fault model (such as storage faults, network faults, cryptography faults) then read all the literature there is to read, every single paper that's great, following the best conferences year after year, and write a fault injection or fuzzing harness to break some of the most respected storage/network/cryptography systems (for examples, see the work done by Remzi and Andrea Arpaci-Dusseau on storage faults, Kyle Kingsbury on Jepsen, and Guido Vranken on Cryptofuzz: https://github.com/guidovranken/cryptofuzz).

3. Pick a software field (such as web applications, mobile applications, native applications, file formats such as Office Open XML, or protocols such as SMTP, MIME, HTTP, QUIC) then read as many CVE reports and bug bounty reports as you can find, and then start participating in bug bounty programs within this field. Pick a target and give yourself a goal, e.g. DoS, RCE or read/write access, and do the work to make it happen. Chain as many steps as you can. Automate and enumerate. You'll find a way in if you keep at it. There's nothing like crafting an exploit to change the way you think about programming.

As you gain experience in data structures, storage/networking/cryptography, and security, you'll find this translates well to most software engineering work. You'll gain a speed/safety/security way of thinking, you'll have fun being curious and learning along the way (and hopefully you'll earn a bounty or two and get some CVEs under your name).

Re: John Carmack: Career Advice

#107
post #95

David Epstein's Range has a lot to say about this topic. Carmack's idea of 'deep' work [0] is environmentally dependent. It works for him and for the places he has been at. But it is not a universal rule for learning in all environments. Epstein uses Tiger Woods and Roger Federer as his headline case, but goes into many other forms of learning. Woods' golf is a kind learning environment ; the rules are clear, the fee…

> Federer's tennis is an unkind learning environment; the rules aren't as clear, the feedback isn't as quick, and the skills are more murky. A lot of tennis is the mind-game aspect and in elite tennis, you don't get the same person very often.

The Inner Game of Tennis [0] for folks interested in learning more about this.

[0] https://www.amazon.com/Inner-Game-Tennis-Classic-Performance...

PS Novak's probably more clutch than Rog.

Re: John Carmack: Career Advice

#109
post #84

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 s…

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.

Re: John Carmack: Career Advice

#110
post #26

To be honest, getting career advice from John Carmack is just like getting career advice from a lotto winner, not everyone has the luck/genius.

Depends on what part you listen to. Carmack's work ethic is legendary and ability to output high volumes and exceptional work are things a lot of people can aspire to, especially startup entrepreneurs. I certainly have taken those words to heart in my business.

One source for his legendary productivity: http://bookofhook.blogspot.com/2013/03/smart-guy-productivit...
Post reply on HN