
Good books for deep hacks - signa11
https://begriffs.com/posts/2017-04-13-longterm-computing-reading.html
======
PaulRobinson
This is more reading material than some Master's programmes.

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...](https://static.guim.co.uk/sys-
images/Guardian/Pix/pictures/2012/5/23/1337810776607/sideburns940.jpg)

Code is punk. Go start a band.

~~~
rootlocus
> 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.

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](https://github.com/pluralsight/git-internals-pdf)

~~~
yellow_postit
What's the ROI? I tend to agree with the author on this subject here. In my
case I care for just enough git to get by so I can focus on the projects I'm
using git to facilitate.

~~~
rootlocus
Learning "recipes" on the internet and copy pasting commands is a sure way to
mess something up and could bring a lot of frustration. You only need to spend
a few hours to understand how git works underneath to avoid any of that.

~~~
ptero
You should not have to learn the internals of any decent source control system
to use it in a way that does not lead to a mess. An overview of _usage_
principles and examples should be enough and should provide enough insight to
search for more information if needed.

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.

~~~
rootlocus
Lots of "should"s, but we're talking about advice on using git, not "any
decent source control system". This is a problem I see with people not
understanding git. They treat it like they think it should be treated. Like it
or not, that's not going to work for git.

You don't give python advice to a C++ developer, regardless of how much you'd
like C++ to be like python.

~~~
taeric
This logic also works on computers. Or, well, anything. You'd be surprised at
just how useful people can find things while still making a mess of them.

So, yes, if you have the time, learn the internals. But no, that is not in any
way a prerequisite. Nor should it be.

~~~
rootlocus
> You'd be surprised at just how useful people can find things while still
> making a mess of them.

You mean like this? [http://www.thisiscolossal.com/2017/12/tatsuo-horiuchi-
excel-...](http://www.thisiscolossal.com/2017/12/tatsuo-horiuchi-excel-
artist/)

~~~
taeric
I wouldn't have thought of that, but yes. :)

Most of my inspiration nowadays comes from my kids.

------
bla2
_Depending on the hack, I’ll be using Haskell or C. Why mess with the things
in between? (What’s up with everyone nowadays using a misbegotten child of the
browser wars as their main language?)_

What is it with so many Haskell folks being so full of themselves?

~~~
begriffs
(Author here) sorry, I should work on my tone. Sometimes it feels fun to write
strong statements, knowing in your own mind that you're just trying them on.
Then when other people read the stuff I realize it doesn't sound daring, it
just sounds arrogant. Realized this a few days ago when some podcasters
covered an OpenBSD article I wrote, and when they read some of my statements
_out loud_ it sort of made me wince.

------
dorfsmay
The recommendations feels random...

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.

~~~
beefield
> Harrison and Steele book.

I guess you mean Harbison

~~~
dorfsmay
Yes. I can no longer edit my original message. Thanks for your correction.

------
MichaelMoser123
Now i suspect that someone will come up with a totally different list - in ten
years when you will be finished with this one. (i foreone still didn't get
what those monads are all about :-) (nothing to be proud about...)

------
sryOnTheRoadATM
>you can’t beat the C language for intrinsic simplicity.

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.

~~~
begriffs
That's really interesting. I used Delphi back in the day to build little
Windows GUI programs for personal projects, and it seemed fine. Subsequently
haven't thought of Pascal much, so I guess I simply overlooked it while making
The List. :)

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?

------
CalChris
Nothing on compilers.

    
    
      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 Reference

------
mwfogleman
I found this helpful not necessarily for the particular book recommendations,
but for the topics it suggested looking into.

------
gymshoes
I have 5 of the books on this list. I'll start with them this year.

------
matonias
So much stuff to learn.

------
muzani
Not a helpful list. It doesn't cover why some books are recommended.

~~~
barrkel
Handily enough, the links go to goodreads where you can read reviews and
determine that for yourself.

Consider 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.

~~~
paulie_a
So what value does this list have? Anyone can throw together a list of books,
without explanation.

~~~
verletx64
It's a list of books per topic that the author thinks are valuable books for
some topic. With the link through to Goodreads, it actually probably doesn't
really matter _why_ the author liked it - I don't know the author, so the
authors reasoning would be the opinion of a random person, and Goodreads
collects the opinion of a whole bunch of random people.

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.

------
andrewgjohnson
Nothing on PHP?

------
mark_l_watson
A good list, but not for me. My interests are in general AI, specifically
machine learning, and recently in a few open source blockchain platforms. The
world would be a boring place if we were all into the same things.

