Live data from Hacker News

John Carmack: Career Advice

twitter.com

151–160 of 178 posts

Re: John Carmack: Career Advice

#151
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…

I was nodding along until the last sentence of:

> In unkind learning environments like tennis, jazz, or marketing, the key is to learn as many things as you can as broadly as you can, to gain a reservoir of ideas to use.

I think this very much applies to kind (programming) too. Sometimes the biggest programming level ups requires broadly knowing about this, that and the other thing.

For example, you can practice writing file upload code until your eyes bleed but if you're unaware of the implications of what uploading to local disk brings in a containerized or Heroku-like platform then a lot of what you know suddenly falls apart. Your entire basis of what you've been doing might need to be rewritten or drastically altered (creating a "storage" abstraction, etc.).

With software development it's super valuable to get a broad understanding of many parts of the stack, not just individual features. I say "feature" here because in a golf analogy a feature would be putting within 6 feet, chipping under 20y, or using a driver. In golf you can individually learn these things in isolation and your overall game improves in the end. In programming this isn't as clear cut IMO.

Re: John Carmack: Career Advice

#152
post #114

Earlier quoted context omitted.

Let’s say I’ve picked a data structure. How would you suggest identifying the great papers and best conferences related to it?

A few ideas: 1. Add "abstract" to your search query to surface papers. 2. Search for "... reading list". For example, Heidi Howard maintains https://github.com/heidihoward/distributed-consensus-reading... 3. Read blogs like "The Morning Paper" ( https://blog.acolyer.org ) but skip fields that are outside your scope. You don't have time to follow more than one or two (or three) major fields. 4. Use Google Scholar to f…

Yeah similarly “review” “survey” in google scholar will work. Identify major authors (they keep cropping up). Find the big textbooks. See who those kinda people cite, follow that trail.

Re: John Carmack: Career Advice

#153
post #131

Earlier quoted context omitted.

> In kind learning environments like programming I'd agree this is the case up to a point with programming, but some of the most important aspects of the job are in the things that are unkind, like how well your design will hold up under future maintenance. Often times there are no feedback mechanisms whatsoever for whether you've done a good job. Or they're slow and coarse and can be ignored or justified away. It's…

The description of programming is kind really depends on what you are doing: are you building things that all sorts of different systems need to integrate with that you don't necessarily know what the technical specifications of these systems are = unkind are you designing a database schema and writing queries against it = kind are you doing frontend development (or something similar where fast paced change means new…

  are you designing a database schema and writing queries against it = kind
I worked in a project using MongoDB. Initial implementation was easy and quick to iterate. After a few years when it was evident that it was not sustainable. Two years of painfull effort was required to squeeze out MongoDB.

  are you doing frontend development (or something similar where fast paced change means new technology, new best practices etc. all the time) = unkind
React already won, front-end tech is stable in last 4 years. It is an easier part of my job. Front-end development require high upfront learning, but it is boring at some point.

  are you doing text processing analysis of structured data following well understood schemas = kind
I know some pipelines on structured data that are hell. I worked with XML (FpML) and systems that produced/consume these, It would make most people cry. It is very easy to create massive technical debt where data is flowing. Any change needs to be done from both ends. It is not like front-end where I can refactor components as much I want.

Because programming is such diverse field, I would be careful with labeling anything kind/unkind.

Re: John Carmack: Career Advice

#154
post #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) t…

Let’s say I’ve picked a data structure. How would you suggest identifying the great papers and best conferences related to it?

Start with the foundational paper(s) on the topic. Then use google scholar or your bibliography tool of choice to see who's cited it. It takes a little work but just burn down the list reading abstracts as well as noting how heavily each of these papers has in turn been cited. Those are likely the most influential derived works. It's common for grad students to do survey papers as well, so keep an eye out for those as they often give you a great roadmap to the current state of things.

Also pay attention to authors. If someone has done an influential paper on a topic, it's likely there will be additional work or tech reports in that area on their homepage or with their research group.

To find conferences/venues just note where the more recent papers are published.

Re: John Carmack: Career Advice

#155
post #14

Slightly unrelated: I love that Carmack uses backslash (\) to escape 'EOL' and signify that this will be a thread and not a standalone tweet. Much more programmerly than "1/n" and "Thread".

Anyone who uses Twitter to post threads / long-form content is fundamentally misusing the platform - they should write a blog post (they’re free at Kmart) and link to it in a tweet. I don’t read Twitter threads because of this - how to trust the judgment and opinion of someone who misunderstands the medium they are using to such extent?

less people are going to click a blog link, thats just facts.

Re: John Carmack: Career Advice

#156

Survivorship bias. Not everyone has the opportunity to be a programming geek at the beginning of a new era of PC gaming.

New era of PC hardware and adoption, maybe. Carmack arguably created that new era of gaming by catalysing the rise of the FPS.

Re: John Carmack: Career Advice

#157
post #43

Earlier quoted context omitted.

very kind of you to offer help where most of us down vote. this person does seem like they need someone to talk to.

I related with "my only friend is a few thousand miles away. We watch movies together and talk via discord." It's normal to end up in that situation. Or at least, I've been there. I hope they'll take me up on the offer, since it's interesting to get to know people. I'd reach out to them directly, but there's no contact info in their profile.

Unfortunately they never reached out. But, wherever you are, I hope you're having a Merry Christmas, daodedickinson. Everyone should!

Don't worry too much about stuff. Things will get better. (Prozac also helped me.)

Re: John Carmack: Career Advice

#158
post #136

Earlier quoted context omitted.

Calling it mediocre is just calling it common or average and lacking in special insight not that it’s false. It’s good advice that anyone in the industry would give to people trying to break in.

not too get too pedantic but i dont think something can be both "good" and "mediocre" - both descriptors you just used. but i'm not gonna get into an extended discussion over word choice :)

Heh, contextually you sure can. ;)

Re: John Carmack: Career Advice

#159

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

So for technical interviews, yes you should absolutely grind algorithms, and not just any algorithms, but exclusively the stuff that comes up in leetcode, and yes you should do weeks of daily practice at leetcode or hackerrank if you want to get hired at a FAANG (or many other places). Up to a certain level getting better at leetcode problems will even improve your actual programming skills (BTW: I would be extremely interested to hear about any data concerning this improvement).

Beyond bandwagon effects I suspect these tests originally became so popular because they are an unproblematic way to select for people who are highly intelligent but also do as they are told.

This also points to a potential shortcoming of the "grind leetcode" strategy: it is applicable to the extent you meet the above characteristics and even if you do well enough to commend yourself as a high-spec corporate cog, and get that FAANG job, it does little to differentiate yourself against other high-spec corporate cogs (unless you are one of the tiny top fraction of competitive coders, maybe).

So with the exception of mastering algorithms (as taught in uni beyond leetcode needs) or mastering C++ or Java[+], I wholeheartedly endorse your advice, but becoming really good at some suitable and economically useful X is, I think, a more widely applicable strategy with a higher ceiling.

Also, I find it interesting that although I explicitly mention that my idea of learning git deeply would involve the ability to implement it (rather than memorizing the man-pages, say, and presumably validated by actually taking a stab at it) a few people pointed out that git is essentially too pedestrian to be useful. This is not the case, in my experience: both in that understanding git well will go way beyond the antiquarian and also in that lacking git skills are in fact a productivity drain at many or most companies.

[+] Algorithm courses at uni seem to gravitate towards what's neither interesting nor useful. Of course, go a head and concentrate of C++ or Java if your interests require it (e.g. Games programming). Otherwise, I suspect the best languages to master early are either python or javascript. If you care about machine learning or science, master python, if you care about web and app development or graphics, master javascript; otherwise pick the one you like better. Either will deliver much better bang for the buck in terms of skilling up and being able to do interesting things in a short amount of time than Java (which risks pulling you towards enterprise antipatterns unless you have good guidance) or C++ (which requires mastering an enormous amount of antiquarian knowledge to get anything done). I would maybe complement this with learning enough C to be comfortable with heap, stack and pointers and enough Rust, Ocaml or Haskell to have a glimpse at what a language with a proper type system looks like.

Post reply on HN