Without any doubt The Art of Doing Science and Engineering by Richard Hamming. I have accomplished more in 5 years after reading it than I did in 15 years before. Much of it I attribute to the change of perspective the book brought about for me and to the fact that I have a vision of my future now. It also helped develop my own style.
Second would be The Language of Mathematics by Baber. As someone who did not do well with math in school or uni but was always good with languages and programming, I have benefited greatly from it by finally “getting” math.
I was Googling your suggestions and found out that Richard Hamming has series of lectures on Youtube. I'm two hours into them and they're excellent. Thanks for your suggestion.
Here's the link for anyone else who might be interested: https://www.youtube.com/watch?v=2hhXS6cODQg&list=PLctkxgWNSR...
I'll second The Art of Doing Science and Engineering. Oustanding book that covers problem solving approaches, traps to avoid, and how human interactions deal with tech.
I remember feeling like that when I did not have clearer goals, it felt like I was drowning in the middle of a vast ocean and it did not matter which way I swam. What I needed was a glimpse of land to swim towards, that made all the difference.
I can recommend Richard Hamming's book Art of Doing Science and Engineering [0], that is what helped me put things in perspective. To quote a famous passage from it:
"It is well known the drunken sailor who staggers to the left or right with n independent random steps will, on the average, end up about sqrt(n) steps from the origin. But if there is a pretty girl in one direction, then his steps will tend to go in that direction and he will go a distance proportional to n. In a lifetime of many, many independent choices, small and large, a career with a vision will get you a distance proportional to n, while no vision will get you only the distance sqrt(n). In a sense, the main difference between those who go far and those who do not is some people have a vision and the others do not and therefore can only react to the current events as they happen.
...
You will probably object that if you try to get a vision now it is likely to be wrong—and my reply is from observation I have seen the accuracy of the vision matters less than you might suppose, getting anywhere is better than drifting, there are potentially many paths to greatness for you, and just which path you go on, so long as it takes you to greatness, is none of my business. You must, as in the case of forging your personal style, find your vision of your future career, and then follow it as best you can.
Under FDIC, any account less than $100K or so will be redeemed at par, even if the bank is completely and totally insolvent. Your checking account is actually probably backed 1:1 in reserves because your bank needs the cash on hand to match withdrawals at any time; it's your savings account that is less likely to be so reserved.
Furthermore, even in a fractional reserve banking scenario, your bank will have 1:1 assets backing it up, since the money it loans out is counted as an asset, although it needs to be recognized that the loan is valued at less than par because of the risk of default. There is quite a lot of legal regulations on what capital can back up accounts, and the minimum ratios of various kinds of quality of capital.
Bank reserves are 1:1. If a bank's reserves ever dip below that ratio, the bank is insolvent, and is in deep shit.
Only a fraction of those reserves are cash. Hence fractional reserve. The remainder aren't liquid, but they are worth enough to cover the reserves, under best accepted accounting practices.
Tether's non-cash reserves largely consist of "A money launderer stole our money, but pinky swears that they'll give it back." It's not like a fractional reserve bank, it's just a straight up fraud. It's why despite many assurances from Tether, it has still not been independently audited.
I love Common Lisp, which is definitely on the other end of the spectrum, but still enjoy Go a lot too.
For me it is a perfect fit for writing automation, services and command line tools. It is stable, it is simple to use/write/read, it is easy to deploy, it has great IDE support and tooling, it just makes sense in the enterprise, as author himself notes.
I like Rust too, but compared to Go it has the feel of a research project. I think Rust has great future, I definitely see using it, but for now I will stick with CL/TS/Go.
Out of curiosity, do you use Common Lisp for work or just for fun? I get to do Clojure about half-time (it was an easy sell due to a lot of our stack being Java), and really like it, but haven't used Common Lisp at all.
If you do get to use it for work, how does it scale (programmer/code-wise, not efficiency-wise) for "real" projects?
I used it at work[0] for a few years and it was great, but I did not scale that project to large number of people, mainly because it did not need to.
Folks at Grammarly have a writeup about how they are using it, it might have more relevant information for you[1].
I would definitely consider using it again, but proper buy-in takes time, and I have simply been moving too fast since then.
I am still not a big fan of Clojure myself, but it is definitely seems easier to sell than CL. In my humble opinion, if you are already a convert the benefits of going from Clojure to CL will not be as great as the ones for going from Java to Clojure.
I actually went Haskell->F#->Clojure in terms of job progression, so I am ok with largely theoretical stuff.
The reason I ask is that Clojure is an easy-ish sell largely because there's a near guarantee that you will never be blocked due to lack of libraries, since you can mooch off of anything in the Java ecosystem (similar arguments can be made for F#). I hate Java, but it has been around a long time and is extremely popular, and as a result there is a library for virtually anything for it. As far as I know, there is no such guarantee for CL...unless I'm mistaken (which wouldn't surprise me).
When using it for work, did you ever get stuck because of a lack of libraries (e.g. JSON parsing, protobufs, socketing stuff, threadsafe collections)?
> When using it for work, did you ever get stuck because of a lack of libraries..?
Nope, I did find some to be less well documented than ideal, but pretty much everything had tests and/or examples making up for it. Have a look at Quicklisp[0] and explore yourself.
CL has many implementations[1], including the one targeting the JVM, so you can make use of Java ecosystem from it too.
CL has been around a long, long time. First edition of CLTL[2] was released in 1984! and at that point Lisp had already been in heavy use for almost three decades. The standard has not been altered since 1994, and likely never will, but due to its nature innovation continues in the individual implementations and in the community, and there is a well established culture of portability libraries.
I do something similar in the evening to relax before sleep, albeit more freestyle and I write it down on paper, but doing it at the start of day sounds like a great way to set the mood, going to adopt it.
I always thought that sentiment to be too broadly applied. A good craftsman should be able to make use of the tools he is given, but nonetheless not shirk his duty to improve upon them.
Not to say I have any real complaints about Python.
I don't think Python is a bad language but that quote is a pretty ridiculous response to criticism when the discussion on this article is a far cry from people blaming failures on Python/Python tooling.
Second would be The Language of Mathematics by Baber. As someone who did not do well with math in school or uni but was always good with languages and programming, I have benefited greatly from it by finally “getting” math.