Good books for deep hacks
begriffs.com
begriffs.com
Here's a shorter alternative:
Choose a few languages, play with them for a few months, get to the point where you can write some idiomatic code. Focus on SOLID code and what that means idiomatically in those languages. Learn strengths and weaknesses of each. It's never enough to just learn one language, I think, in the same way no good musician should only ever learn one genre. Do you really want to be like the woman in the bar in Blues Brothers ("We do both types of music, Country and Western")?
Learn how to debug and profile. Ideally, learn how to write automated performance tests (along with unit and integration tests) that run on every build so you can keep track of what's going on for those critical pieces. Don't aim for 100% test coverage, aim for enough coverage to help you catch yourself from regressing working code.
Learn just enough git to create a repo, create branches, push and merge, and all that. Anything more complex? Google it when you need to like the rest of us.
Now go build something. Want to do something with chat? Sure, go read up on IRC and XMPP and Signal and Wire and all that. Want to do something with email? Sure, go read the RFCs and scramble around that area. Interested in UX? Go and read guidelines for your favourite app store and do that, even if you never plan to submit there: it's good advice.
The idea of reading 110+ books first in the hope you'll then start your epic hack sounds to me like epic procrastination.
Here is one of the most iconic pages from punk history: https://static.guim.co.uk/sys-images/Guardian/Pix/pictures/2...
Code is punk. Go start a band.
Bad advice. Learning git internals is surprisingly easy and has a lot of ROI. This tiny book has everything you need https://github.com/pluralsight/git-internals-pdf
User level documentation should be sufficient for user actions. If someone wants to learn internals, great; but this should be an option, not a requirement.
You don't give python advice to a C++ developer, regardless of how much you'd like C++ to be like python.
So, yes, if you have the time, learn the internals. But no, that is not in any way a prerequisite. Nor should it be.
You mean like this? http://www.thisiscolossal.com/2017/12/tatsuo-horiuchi-excel-...
Most of my inspiration nowadays comes from my kids.
I have been bitten by coworkers submitting preposterous pull requests because of a lack of understanding of what you can do with git and how it works that could have been avoided by taking the time to really grok git.
To your point: mostly agree, but for anyone who lives and breathes your spirit, a collection of 110+ books isn't a dangerous distraction but a welcome enriching augmentation. After some hours of coding the brain demands, deserves, benefits from --- a break. Every couple of weeks, a full day or 3. After some months, even a full week. My point? I noticed that even reading "books that deep -dive into interesting technical topics" is recreational and leisurely compared to high-intensity coding (different brain areas get stimulated and others get rest, I guess?) --- so no need to watch sitcoms, reality TV or anonymous image-boards for "a brief intermission of needed low-brow relaxation" (although nonetheless just-as-permissible).
So this list is most welcome for whenever "book pace" is biologically-mentally demanded (or simply wanted) for-a-change and for a bit.
Although I understand the spirit behind this, code is most certainly NOT punk. That's what the JS / PHP / Flash script kiddies from the early 00s wrote. Or rather, it shouldn't be punk if you want to build something that is reusable, maintanable, and solid.
The sad reality is that code is jazz - you can get started with Autumn Leaves or the blues, but if you want to go far you better be prepared to learn tons of theory.
But I agree, you don't necessarily need to do it upfront.
Sometimes I wonder if much of the discussion/confusion that we have about 'programmers' and 'programming' arises because we treat it as a something more specific than it is.
It would be like blogging, discussing, identifying with and arguing about 'writing' without distinguishing between novelists, administrative workers, legal workers, academics, poets, instruction manual writers, translators, and so on.
OP used "code is punk" as a metaphor for "just do it without getting bogged down by theory".
I have changed his metaphor to "code is jazz" to express that he's wrong, you DO need to learn a lot of the theory.
I am not quite sure how what you are saying comes into this.
The book list is also too broad, IMO. It's much better to find a niche and specialize.
It's 2018. It's been 60 years since the memex and the mother of all demos. The ideas in computers aren't new or revolutionary, we know a wheel is round. The next stage is making a wheel that works better.
That might work well for your crud day job, but for your own projects, why not learn from the mistakes of others and not your own? It's much simpler to read why you should do something than figuring out all the ways you shouldn't.
>get to the point where you can write some idiomatic code
What does this even mean? I know C back to front and there is no such thing as idiomatic C. You write one type of C for embedded, one for batch numeric, one for systems, one for real time all are "idiomatic" and all have next to nothing to do with each other. It's even worse in higher level languages.
There's value in learning from others, but in general, people learn more quickly from trying things right away.
Totally. I guess I should have mentioned that for me, at least, the books will be paired with hands-on hacking.
> The idea of reading 110+ books first in the hope you'll then start your epic hack sounds to me like epic procrastination.
Not planning to read book after book by the fire while the computer collects dust. :) For instance, I'm reading SQL books now and have done experiments that I then wrote about. Like transaction isolation levels, deferrable constraints, types/domains.
Lots of fun stuff to build. I find that the books help to give me a broader idea of the possibilities, that's all.
What is it with so many Haskell folks being so full of themselves?
K&R for C was very confusing for me and I really couldn't write in C until I discovered the Harrison and Steele book. This wasn't just a personal preference either, this was the book recommended on the C lang FAQ on Usenet 25 years ago.
I'd argue that today's reference to modern/advanced SQL is Markus Winand's book which isn't mentioned either.
I guess you mean Harbison
21st Century C: C Tips from the New School
Modern C [1]
[1] http://icube-icps.unistra.fr/img_auth.php/d/db/ModernC.pdfModern C is a dense read. I kind've just pick at it.
The book is solid for learning C and I would totally recommend it. The only gotcha is that I actually had to read it three times to properly understand all concepts (especially pointers, their relation to arrays, function pointers and their types etc). So yes it was confusing but not because the book was confusing but because the concepts are confusing (especially to a novice programmer having headaches from pointers).
Beyond K&R I would also recommend the Deep C secrets book (the one with the fish) for going "deeper".
I like begriffs for his Haskell work, but I disagree with him on C. Simplicity is a good reason to prefer Wirth languages. They are similarly low-level, but beat C on safety and don't have C's abundance of undefined behavior. I suggest Free Pascal. It is similarly easy to write, compiles faster, helps you catch more bugs early and even has genetics. As I see it, there are only two major downsides to using Free Pascal: the syntax is more verbose and you have to generate and store bindings for C headers.
Am I in a bubble, or is it true that C has become much more popular than Pascal? If so, why did it get popular?
Dragon Book
LLVM Essentials
Nothing on machine organization and assembly. Computer Organization and Design
ARM Cortex A72 Software Optimization Guide
Intel® 64 and IA-32 Architectures Optimization Reference Manual
The microarchitecture of Intel, AMD and VIA CPUs
Parsing Language Implementation Patterns
The Definitive ANTLR 4 ReferenceConsider the list as a discovery mechanism and then use your own judgement to determine whether it's worthwhile or not. The value is in the discovery, rather than a (non-existent) review.
So why this article? Yeah, it is pretty much a discovery mechanism. To me, the author is saying "I liked these books," or "I think these books are good," and "Here's what other people said about these books." I knew of some of the books and I didn't know of others, so mission accomplished, to be honest.
I already have a bottomless list of books to read, so some form of filter would be nice. There are better methods of discovery, like finding respectable programmers in a field and then reading what they like.
Unless I'm missing something, the article doesn't make any effort to establish credibility, so it's similar to any other teenager recommending a stack of books.