Go Is Unapologetically Flawed, Here's Why We Use It - <AUTHOR> http://bravenewgeek.com/go-is-unapologetically-flawed-heres-why-we-use-it/

<comment><USER2> The comments about Java are wrong. There's an HTTP server in the standard library (under com.sun). It's not well known but it's there and the documentation is quite reasonable. The API is very simple. I've used it a few times and whilst I wouldn't run a major website on it, it's fine for smaller tasks.

From Java 7 onwards files can be read with a single method call. Look at the static methods on the Files class.

I find the article to be poor. He says he likes Go, and then proceeds to illustrate why nearly all the features of it are dubious. Then he admits that any article that criticises Go had to be prefixed with his disclaimer because otherwise the community will get nasty, so does he really like Go? Hard to say. His employer requires him to use it so it's not like he can openly say he hates it.

Finally he says Java is ghastly, but his only evidence for this is he doesn't like one of the frameworks built on it ... a framework that Go has no equivalent to anyway. Ok... so don't use j2ee then. Use something like Play or Ninja. He would then benefit from good GC and working debuggers/CPU profilers.

<comment><USER3> Agreed, I also didn't understand the real point the author was trying to make: if you hate it, say so and be done with it, don't wrap it in a 'I love you to death but..' kind of way.

I think with 'go' as a language when you start with it, there's a lot to love: things are simple again; "Look ma, a real program that does something with almost no code and also no magic shit behind the scenes!". But things are always simple and nice in the beginning, when you are focusing on just a small part of the complete picture.

The problem with 'simple' is that unless it abstracts away all complexity you'll ever need to deal with, you'll need to do a lot of work yourself: it's the typical RISC/CISC argument from yesteryear: do you want a small instruction set which is simple but results in a longer program, or a complex large instruction set which results in a smaller program?

So, to be able to deal with all possible complexity in all possible scenarios, either the language has to be vast in its expressiveness (go isn't) or it has to come with a vast standard library which offers additional expressiveness through classes / methods / functions / subsystems or whatever the language is lacking, OR you have to write it all yourself.

In the end, the net-result is the same: the system as the end result of your work is the combined complexity of the code written by the developer(s) and the complexity of the libraries used. Go doesn't change that, it just moves the divider between 'own code' and 'libraries' more towards 'own code', even if that's simpler to write because the language lacks things which some people might consider 'oh god this is complex, I'll never understand this'.

</comment></comment><comment><USER4> I like Go, but I agree with most said in this article.

One nitpick about his comment about sending to closed channels. This is indeed programmer error and SHOULD panic, in my opinion. It is clear the author has not read up on the semantics of channels. Channels should only be closed by the sender. If you have multiple senders, how on earth would it be a valid situation for one of these senders to close the channel if the other sender still has data to send? You're going to need some form of synchronisation mechanism for this.

<comment><USER5> I believe the idiomatic way to solve multiple writers would be to give each writer it's own channel, and multiplex the output of those to a single channel. The problem is, without generics you need to create a new multiplexer for every type of channel payload.

Also, if semantics make life complicated, they should be changed. Since there's already an 'ok' return flag for channel receive, I have hard time understanding why there can't be one for channel send.

<comment><USER6> Yeah, I've found the simplest way to have multiple writers / readers is a mutex.

I was suprised to read that they actually consider removing the sync/atomic packages. It's crucial in my opinion, and would complicate a lot of code if had to be written with channels.

</comment></comment></comment><comment><USER7> Summary: No generics. No versioning. The author said they wanted to bring more to the conversation, but it seems that they really didn't after all.

<comment><USER8> Also using straight mutexes are faster then channels, and many parts of the standard library use them because of this.

</comment></comment><comment><USER9> _A copy of the comment I posted on the author's blog_

I agree that generics are very useful when writing reusable libraries, but I disagree they are absolutely necessary when writing and maintaining software at large scale. At large scale, at some point, processes communicate with other processes on the same machine or over the network, and you have to marshal/unmarshal and type check at runtime.

Your example with the function isInt64InSlice is a good illustration of why the lack of generics is annoying at small scale, but it hardly shows why this is a problem at large scale.

PostgreSQL is an example of a complex piece of software, written in C, which doesn't use generics and is still very readable and maintainable.

A few other technical points:

\- "Cannot add methods to types from a different package": Would you want something like extension methods in C#?

\- "Channels are slow": I've read there is some work going on to improve them. That said, you admit yourself that Go is still one the best option among the "concurrent" languages. Are you aware of another language with a similar mechanism builtin in the language or the library and that performs better on this matter?

\- "Accidental implementation of an interface": I agree this a problem in theory, but in practice it's very rarely an issue. Have you been beaten by that often? Do you think the benefits of implicit implementation are not worth it?

\- "Cannot implement your own exceptions": Yes you can. You can pass some value to panic and retrieve it upper in the call stack with recover and decide what to do depending on the value. It's not something Go developers do often, but there is some use of this technique in the standard library for example. It's explained in "Effective Go".

\- "Map returns a bool instead of an error": I don't see the issue here. A lot of other languages do the same and return a default value and/or a boolean at false when you probe a map with a missing value.

\- "Adding an item to a closed channel panics": This is a programming error, like a division by zero or an out of bounds array access.

\- "Channels as iterators": Goroutines and channels are not designed to build iterators. They offer a general low-level mechanism for concurrency. How would you expect the goroutine to know that nobody is listening anymore and shutdown?

About the community, I would not call it "stubborn". In my experience, it is generally helpful and very professional. But I agree that the topic of generics has become a taboo, which I regret. It looks like the core team wants to focus on improving the compiler, the runtime, the library, the tooling and the garbage collector, and because of that wants to keep the language stable in the meantime. I understand the frustration, but don't you think their decision makes sense and is the best way to use the limited resources of the core team?

You wrote that "a language can have considerable depth while still retaining its simplicity". What languages would you recommend that solve the flaws of Go while preserving its simplicity (in terms of user experience)? It's a sincere question. I'd like to use such a language.

More generally, you ask how can we make developers more productive and how can we enable them to solve problems? That's interesting because this is precisely the question Go tries to answer. Are you sure the answer lies in a more powerful programming language? What about the runtime, the tooling, the libraries?

The Go team thinks the answer lies in simplicity (light syntax, garbage collection, interfaces, composition over inheritance, builtin arrays/slices/maps), builtin concurrency (goroutines, channels), great tooling (speed of compilation, go test, gofmt, godoc), easy deployment (no virtual machine, static binary).

Do you think the answer lies in having type parametricity, algebraic data types, pattern matching, immutability, Hindley-Milner type inference, higher kinder types, etc.? I'm not saying they are not useful or desirable. I'm just saying that the low hanging fruits in terms of developer productivity may be elsewhere.</comment>


Why bad software architecture is easy to monetize - <AUTHOR> http://tojans.me/blog/2014/02/17/why-bad-software-architecture-is-easy-to-monetize/ <comment><USER2> > In housing, usually stories like these are not possible, because there is a > minimal - legal or other - standard that housing needs to comply to.

"My sweet summer child"

Housing has a lot of regulation, and also a lot of dirty tricks to cut corners without the buyer having recourse (and it's usually minor enough problem thatvit's not worth fightig), and building in specific ways so the owner comes back to the same contractor with a high probability.

I remember once a contractor explaining "we're the only shop in the region that can use this super fancy system", and it's really a way to declare clients will come bck to them when it breaks

</comment><comment><USER3> In reality, housing works exactly like he described, just over a longer time frame. Human housing didn't start with water and electricity and insulation. That came much later. It started as just very bare bones shelter from the elements.

The Great Fire of London occured in part because thatched roofs and other cheap solutions common at the time turned out unexpectedly to be a fire hazard in a dense city environment, something that hadn't really existed before. Afterwards, the UK banned thatched roofs from city limits. It's still legal to have them on farm houses in rural locations because thatched roofs aren't evil incarnate. They work fine at a small scale.

The developed world we have today wouldn't exist if humans had to start with modern, highly regulated housing standards. In fact, it's a hardship for some and fueling homelessness that we have largely eliminated many "lesser" forms of housing in the US.

In business, same thing. You may not even need the fully developed thing with all the bells and whistles. You may be in a position where the cheap, half- assed solution now is absolutely perfect and allows you to grow your business where you both can need and afford the extras.

I'm reminded of an article title: "I'm going to scale my foot up your butt!" Scaling problems are good problems to have. It's a sign of success. But worrying about scaling when you should be writing an MVP is putting the cart before the horse.

In anything, whether housing or software, the real trick is accurately determining which cheap, half-assed solutions are good steps and which are "oh, god, no!" Cheap housing that's small and bare bones isn't necessarily a problem. Cheap housing that's, say, a health hazard may not be worth it. You may be better off sleeping in a tent. There's no doubt software equivalents to those metrics.

</comment><comment><USER4> What about the fact that money paid later is always cheaper than the money paid today?

What about being a rational actor and actually asking what are you going to get from the contractors who are requesting 200000 upfront? Surely their contract would have more detail the cheaper one lacks.

</comment><comment><USER5> without reading TFA i can tell you. because the software architecture is irrelevant to monetizing a product. a great architecture is also "easy" to monetize.

if you look past 0->1 then the better arch starts to pay off.

<comment><USER5> too late to edit, but the article title is beyond misleading. it's completely irrelevant.

this article is about how any contractor (commonly seen for home improvement and software, as the examples in the article are), will bid exactly to spec and not do anything else, which you as employer may have just assumed would be part of the deal.

it's about how not to be a stupid employer. in homebuilding, you do that by hiring a GC. is there an equivalent for software?

</comment></comment><comment><USER6> Tl;dr version of the answer:

There are 3 ways a job can be done: fast, cheap, good. You can pick only 2.</comment>


How we built eightbitbeats.com in 48 hours - <AUTHOR> http://somethingcoded.com

<comment><USER2> Great write up, guys. There's some good advice in there, especially the Feature Creation bit. If only more projects had such discipline! I found it interesting to see how you made certain decisions and great to see which articles you used as reference.

I'm glad to hear the project will continue after the competition. I wonder if this could evolve into something bigger than a game. Perhaps an arcade game music community for indie game devs...

</comment><comment><USER3> I'm pretty sure you guys owe my employer for several hours of time I've spent playing with eightbitbeats over the past few days.

<comment><AUTHOR> haha don't get fired!

</comment></comment><comment><USER4> This has to be the best weekend project ever. I wish I had seen it time to vote. Great call on the feature bucket, I can't even imagine how many ideas must have come out of your individual and collective heads. I thought of a few handfuls just after 1 minute of playing with it.

</comment><comment><USER5> Wow. Love the project

<comment><AUTHOR> Thanks a lot! It was a bit unexpected, but we plan on building out the features a lot once judging is over.

</comment></comment><comment><USER6> Nice write up.

<comment><USER7> Thanks crenshaw. In the near future, we plan to do a little more behind the scenes as well as a few more in depth technical write ups that focus on specific aspects of the project. Sounds crazy, but there was a lot to talk about for a short 48 hour period and we had to cut it down for this post.

</comment></comment><comment><USER8> so proud of you guys, great work! =D

<comment><USER7> thanks for all the support man!

</comment></comment><comment><USER9> Epic.

<comment><USER10> Thanks, cardoni. Let's jam!</comment></comment>


Microsoft defines irony; recommends Chrome to fix Hotmail issues. - <AUTHOR> http://thenextweb.com/google/2010/08/10/microsoft-defines-irony-recommends-chrome-to-fix-hotmail-issues/ <comment><USER2> No, it would be ironic (or at least noteworthy) if they were recommending Chrome _instead of IE_. In fact, IE works fine in this case; they recommend Chrome to users of old Firefox and Safari versions.</comment>


Ireland to Order Facebook to Stop Sending User Data to U.S. - <AUTHOR> https://www.wsj.com/articles/ireland-to-order-facebook-to-stop-sending-user-data-to-u-s-11599671980 <comment><USER2> This has been a long time in coming, and is significant for the EU as a whole because of Ireland is the designated lead regulator for data privacy issues. This Politico article [0] from last year has a great overview of the history including background on how Ireland wound up taking a lead role on tech regulation in Europe.

[0] [https://www.politico.com/story/2019/04/24/ireland-data- priva...](https://www.politico.com/story/2019/04/24/ireland-data- privacy-1270123)

<comment><USER3> "Designated lead regulator" \- isn't it just that most companies picked Ireland simply because their privacy authority was the one least willing to take any action?

Them finally doing something would be huge.

<comment><USER4> These companies came to Ireland not because of this but because of lower corporate taxes and an English speaking population; they arrived long before privacy regulation was on the table in Europe.

<comment><USER5> As well as being the only English-speaking country in the eurozone

</comment></comment></comment></comment><comment><USER6> When Russia did it it was reported as "Move Seen as Part of Drive to Curtail Freedom of Information"

[https://www.wsj.com/articles/russia-steps-up-new-law-to- cont...](https://www.wsj.com/articles/russia-steps-up-new-law-to-control- foreign-internet-companies-1411574920)

<comment><USER7> British Columbia also has a similar law which has been reasonably well received.

<comment><USER8> If I make a Google Doc from British Columbia, it is transferred to and stored on 15 servers in 5 datacenters, all outside British Columbia.

An image in the same document ends up in (kinda, depends how you measure) 4 servers in 3 locations - also none of them in BC.

Is Google breaking the law here, or is there some exception?

</comment></comment></comment><comment><USER9> Just to be clear, this isn't about data on Irish persons, it's about data on EU persons.

</comment><comment><USER10> Regulations like this only widen Facebook's moat. Compliance is a huge challenge for resource starved startups.

<comment> 52-6F-62 Surely only if their model involves imitating Facebook's practices surrounding user data?

<comment><USER11> I think the parent means that having to partition data by region is difficult/expensive and hard to do if you're a small company.

<comment><USER12> Is it? Really? It's only when you get to data centre scale that this kind of policy becomes harder to implement... sure even when I create storage instances "in the cloud" I can say where I want the data located.

<comment><USER13> And you won't have to build one storage instances for the US, one for the EU, one for China, and one for every single country that decide that their privacy regulation are superior than others countries...?

Facebook can have a pretty big team to engineer that kind of infrastructure, while the startup won't have that luxury. It's even worse when you need to go through a lawyer to make sure every single regulations are followed to the letter.

<comment><USER12> So what? Like I said, it's literally zero hassle to create new instances. What makes you think you're entitled to mix all your users into one database anyway. If you've a hundred users in one country it's worth your while having an instance just for them.

Lawyers will oversubscribe for _everything_ it is up to you to familiarise yourself with the legal aspects and get your engineers to design within these constraints. You didn't think engineering was just programming did you?

<comment><USER13> And you still fail to see how all of this make this much more easier to apply for Facebook than any startup?

> If you've a hundred users in one country it's worth your while having an > instance just for them.

What? No. We are on the web, you forgot that what made Facebook a billion dollar industry was that they could get pennies out of billions of users every month?

If you can get hundred of paying users, sure, but then to me that has nothing to do with the web, that's simply selling a product. The web is more than selling, it's about allowing access, which sadly, is more than selling.

</comment></comment></comment></comment></comment></comment></comment><comment><USER14> Is a Facebook friendship between an Irish resident and a US resident US user data or Irish user data?

<comment><USER15> 1) Is a US resident permitted to declare on their Facebook page that they are friends with [ARBITRARY STRING OF CHARACTERS HERE]?

2) Is US Facebook allowed to record a user-provided and recipient-approved statement of metadata association that references a "Person/Entity" that could potentially be in the EU?

3) Is US Facebook allowed to benefit from processing of metadata without receiving GDPR-compliant permission from the "person/entity" referenced?

I believe the answer will end up being Yes, Yes, No; Facebook EU/US can permit two world citizens to intentionally declare their friendship each other, and the cross-site link is user-specified and passes a "judgment call" opt-in test — but Facebook US cannot make use of that data record in any way that benefits Facebook (such as training models, tracking via social network data, or targeting advertising) _other than_ to exclusively deliver minimum functionality. For example, not okay: "automatic face recognition tagging"; okay: "instant messaging", "wall posting".

Disclaimer: I am not your lawyer, I have not prepared citations for your review, please seek legal counsel if you're considering actions based on my opinion, etc etc.

<comment><USER13> > Disclaimer: I am not your lawyer, I have not prepared citations for your > review, please seek legal counsel if you're considering actions based on my > opinion, etc etc.

That say a lot....

<comment><USER15> It does, yes.

1) IANYL is not widely-recognized, so I have to spell it out. The unusual phrasing, versus the typical IANAL, is because "I am not a lawyer" is inappropriate to use. If you are perceived as having given legal advice, it isn't necessarily relevant _whether_ you're a lawyer, and if you _are_ a lawyer you might not be allowed to 'practice law' in the jurisdiction of every reader, and find yourself subject to enforcement actions if you are found to have failed to highlight this distinction. Specifying clearly "I am not your lawyer" clearly indicates that you are not acting in any capacity as lawyer with respect to the reader, denying any opportunity for misinterpretation otherwise. It also clearly highlights that no duty to clarify, followup, or respond exists as a result of the comment, which is frequently misunderstood by Internet forum participants (see also following).

2) HN users frequently seek citations for opinions. Whatever their motivations, I have none to offer here. Clearly stating so helps them correctly perceive this as an opinion posted on an Internet forum, rather than misconstruing it as legal advice provided by a lawyer. They may choose to reject the opinion as it is insufficiently supported, which is of course their right. See also above.

3) Finally, "seek legal counsel" reminds the reader that a profession exists to make judgement calls about these things, and recommends consulting formally with such a professional rather than depending solely on an Internet forum comment. It also reiterates the "this is not legal advice" sentiment that the above try to convey, offering an additional layer of defense again people somehow misunderstanding the degree of legal advice that an Internet forum comment can provide and then suing for recompense when they don't like the outcomes of their actions.

If you can think of a shorter way to say it, I'm open to considering it, but IANAL certainly isn't enough.

<comment><USER13> Sure but my point is that it's so complex that you need to seek a lawyer or else you may not be able to do it.

That's what I always like about software development. It was simple, it was accessible... but now, you need a lawyer for each individual jurisdiction.

</comment></comment></comment></comment></comment><comment><USER16> This seems like an impossible task unless you have a European Facebook and a US Facebook and a user of one can't interact with the other.

If a US-based user interacts with data posted by the European user, is that not considered "Sending data to the US?"

<comment><USER17> An analogy: it is not because I occasionally send and receive email to and from US citizens that my mail provider needs to send my complete mailbox, user credentials, profile and interaction data to the US.

<comment><USER13> Sure but the interactions aren't occasional over Facebook, they are pretty regular, in fact it's the whole concept of the platform to constantly share that data to your friend group.

Sure it could be only accessed when you friend request it, but then it goes over a whole lot of performance issue and complex infrastructure, all that over something you voluntarily decided to publish... while not having any advantage. Facebook still has access to that data either way. You still have to believe their pinky sweare they won't do anything bad with it.

I would agree with anything sensitive, like banks information, medical information, etc... Things that make sense to pay for an actual regular audit, but for a social network like Facebook... that become completely absurd.

<comment><USER17> There is a clear distinction between data I share publicly, data I share explicitly with US Facebook users, and data that I share in a limited setting not involving any US users.

Unless caught red handed, we generally trust companies to comply, but sometimes verify.

The technical argument, that it is too inconvenient to comply with the regulation. has little merit in this case.

<comment><USER13> > There is a clear distinction between data I share publicly, data I share > explicitly with US Facebook users, and data that I share in a limited > setting not involving any US users.

You lost me there. You shared it with Facebook users, which are worldwide. Are you from Canada? Well look at you reading my comment I voluntarily pushed over HN, a website accessible worldwide while I'm Canadian. Isn't it absurd that because I'm in Canada I wouldn't expect you to be able to read it? You and everyone else that are on HN? This is not something I send specifically to YOU, this is not something

> Unless caught red handed, we generally trust companies to comply, but > sometimes verify.

Isn't it what we complains about here though? We do not expect Facebook US to handle the data correctly. Yet they do expect them to do it in Europe? I can see your point, Europe can't verify what Facebook do in the US. It's a good point, but I would have been less against their idea if that was the solution, requiring them to allow Europe to verify or else they wouldn't let them hold that data.

</comment></comment></comment></comment></comment><comment><USER18> Interesting. Does Facebook already have separate infrastructure for Europe, but just forwards user data to the US mothership? Or is the infrastructure all "mixed together"? I'm curious how hard it would be to comply.

<comment><USER19> Facebook's infrastructure is one global transparently replicated database. Siloing data by legal jurisdiction is a huge engineering change. Fortunately they have a head start - there was a big project to enable this for when they still had hopes of operating in China. It's kind of sad to think that this is now going to be used for Europe.

<comment><USER20> I find it hard to believe that the inherent risks of this engineering choice (one globally transparently replicated database) weren't discussed.

States coming to a variety of conclusions and making a variety of decisions about how to treat a private US company holding an unimaginably large amount of social data and metadata... was an eminently knowable and completely obvious set of risks going in, so I have little sympathy for Facebook "failing" to plan a mitigation for those risks. It's hard to see it as anything but a deliberate choice.

Unfortunately, given their past history I suspect the hope was that the company would be able to have its cake and eat it too, by playing on legislators' and citizens' lack of technological literacy and adhering to a "better to ask forgiveness than permission" policy. Throwing up engineering hurdles to compliance just benefits Facebook in this case, because they're banking on states' inability to simply ban Facebook. Facebook can force them to the table, with the deck stacked against them.

"Won't your citizens be angry if you make Facebook inaccessible to them?"

"Everyone uses it! That could be seen as censorship!"

"Let's work together to find a solution that benefits everyone."

It's the same story as with Uber and AirBnB.

<comment><USER21> One thing EU can do is to fine FB, you don't need to censor FB, but until FB does not cooperate just charge 10% of revenue. (and increase 1% every year)

Problem solved

<comment><USER22> GDPR allows fines up to 4% of global(?) revenue (not profit). That's a pretty significant chunk of change for companies the size of Facebook and Alphabet.

</comment></comment></comment></comment></comment><comment><USER23> How is anyone going to enforce this?

<comment><USER24> Like any other regulation?

Rules, Letters to enforce those rules, Strongly worded letters to enforce those rules.

Announced and unannounced audits to ensure compliance.

In the extreme case and only if needed, fines, warrants and searches or revocation of access to customers (EU companies wanting to advertise) and resources (FB users in Europe).

FB knows that and they also know this particular case is very public so they will either comply (probably hesitantly and last minute) or withdraw from the EU market if the bean counters say it's not worth the effort.

</comment></comment><comment><USER25> Anyone know what this means for U.S.-Irish dual citizens living in the U.S.?

I've never heard a clear answer about how GDPR applies in dual-citizenship or non-EU-residence situations.

<comment><USER26> All official wordings suggest it is based on residence, not citizenship:

[https://ec.europa.eu/info/law/law-topic/data- protection/refo...](https://ec.europa.eu/info/law/law-topic/data- protection/reform/rules-business-and-organisations/application-regulation/who- does-data-protection-law-apply_en)

<comment><USER24> One might thing that the territorial principle based on the users (possibly long term) or companies location applies here.

</comment></comment></comment><comment><USER27> that's cute. fb market cap is double their gdp. they should just acquire ireland

</comment><comment><USER28> How do you get the benefits of using distributed architectures when you have to keep data within a single region? Seems so annoying

<comment><USER29> Probably not a big deal if your business model doesn't revolve around harvesting user data.

<comment><USER7> Implement a messaging system where people in two countries communicate but each person's data must remain in their own country.

Now search for users in your "add friend" dialog. Are you now querying a database per country?

<comment><USER29> So you're saying email beyond one's border can't exist under GDPR?

<comment><USER7> No, it just makes it more complicated to stitch together since each country can't have a full replicated copy of the data.

<comment><USER29> There's more nuance to it, but IMO this is a good thing for consumers. We've been collectively pretty horrible w/ the security of user data even when we're not sharing it w/ third-parties intentionally.

Storing user data _should_ be difficult, otherwise there's no incentive to really think about how you store it and how securely.</comment></comment></comment></comment></comment></comment>


Ask HN: What, in your opinion, are the greatest and most useful textbooks? - <AUTHOR> For self-education from books, textbooks are essential. They are literally designed to convey information on a subject to students. But there are a lot of textbooks. Which ones are the best?
Preliminary research has suggested Spivak is best for Calculus. SICP is another famous one I've heard of. What about Physics, Biology, Chemistry, Anatomy, History?
Any contributions to this list are much appreciated. <comment><USER2> The Art of Electronics taught me most of what I know about electronics.

It has informal and approachable style and even has a companion study book full of experiments. [1]

One of my favourites from my university days was also Introduction to Heat and Mass Transfer. [2]

Universe is a great introduction to Astronomy [3]

Wind Energy Handbook is also a comprehensive introduction to... well I think you can guess. [4]

[1] [https://learningtheartofelectronics.com/](https://learningtheartofelectronics.com/)

[2] [https://www.abebooks.co.uk/9780471457282/Fundamentals- Heat-M...](https://www.abebooks.co.uk/9780471457282/Fundamentals-Heat-Mass- Transfer-Incropera-0471457280/plp)

[3] [https://www.goodreads.com/book/show/705558.Universe](https://www.goodreads.com/book/show/705558.Universe)

[4] [https://onlinelibrary.wiley.com/doi/book/10.1002/97811199927...](https://onlinelibrary.wiley.com/doi/book/10.1002/9781119992714)

<comment><USER3> I learned more about electronics by hacking LTSpice, reading Jim Williams and Bob Pease, than from textbooks.

<comment><USER4> Interesting, could you provide some links to what to read from them?

<comment><USER3> 1\. Get Williams books. I think there are two. 2\. Figure out a way to get Pease's columns from Electronics Design archives. 3\. Download all the old Linear Technology App Notes while they are still available from Analog Devices. 4\. TI has great app notes too, and software. 5\. Learn LTSpice, perhaps the best engineering freeware ever.

</comment></comment></comment></comment><comment><USER5> You might be also interested in checking the post "The Best Textbooks on Every Subject" from LessWrong: [https://www.lesswrong.com/posts/xg3hXCYQPJkwHyik2/the- best-t...](https://www.lesswrong.com/posts/xg3hXCYQPJkwHyik2/the-best- textbooks-on-every-subject) For each topic they look at at least three alternatives and provide a brief argument for their recommendation.

</comment><comment><USER6> Everyone's gonna inundate you with their 20 favorite textbooks when you have such a general question.

For me, books for self-studying should have a slightly informal tone and ramble a little. The book is your teacher, and I'd like my teacher to speak to me as a student, not a theorem prover, as least when I'm starting. Spivak, Pugh and Axler are some good examples, while I could only grok Rudin after learning all the basic.

Not a lot of experience with physics but I like Symon's Classical Mechanics and Purcell for the same reason. Kleppner's mechanics book has very good exercises too.

<comment><USER7> Spivak's Calculus is the best-written textbook I've ever encountered and one of the more beautiful examples of book design also.

<comment><USER8> I like Spivak's Calculus but I think it's a lot of effort to learn Calculus from (probably very rewarding though). I've currently been studying from Real Analysis 1 by Terrance Tao and I find the explanations to be great, [https://www.springer.com/gp/book/9789811017896](https://www.springer.com/gp/book/9789811017896).

</comment></comment></comment><comment><USER9> \- Norvig's AI: Doesn't have much deep learning, but you get through it and understand the expansiveness of the field.

\- Algorithms - Papadimitrou and Vazirani: I had a professor who described this as a poetry book about algorithms. Alternative is Sipser

\- An Introduction to Statistical Learning: This is like a diet form of Elements of Statistical Learning which is much more approachable and pragmatic.

\- Janeway's Immunobiology - De facto standard of immunology. Great.

\- SICP: duh

\- Principles of Data Integration: This is more because the subject matter is so important and nobody really has studied fundamentals. Did you know general data integration is AI-complete? If 99% of work in AI was spent on data integration, the field would move so much faster.

<comment><USER10> Assuming you are referring to Russell & Norvig's Artificial Intelligence: A Modern Approach, a 4th Edition was just released, including chapters about deep learning. With contributions from amongst others: Ian Goodfellow about Deep Learning and Judea Pearl about Causal Networks (see [http://aima.cs.berkeley.edu/ack.html](http://aima.cs.berkeley.edu/ack.html))

[http://aima.cs.berkeley.edu](http://aima.cs.berkeley.edu)

[https://www.pearson.com/us/higher- education/program/Russell-...](https://www.pearson.com/us/higher- education/program/Russell-Artificial-Intelligence-A-Modern-Approach-4th- Edition/PGM1263338.html)

</comment></comment><comment><USER11> On History: Not textbooks, but if you want an enticing read to relatively recent times, I suggest biographies.

Ron Chernov: Alexander Hamilton. An excellent introduction to the birth of US. As a european US history is not that well covered in our school. There's also _the_ musical version by Lin Manuel Miranda which alone is worth a few books of education alone.

On the birth of modern india: Herman: Gandhi & Churchill: The Epic Rivalry that Destroyed an Empire and Forged Our Age

On the roman world: Julius Caesar: Gallic wars. This is a surprisingly readable book given that it's a propaganda piece written two thousands years ago. Highly recommended as it gives insight to just how organized-yet-cruel the ancient world was.

General history:

Acemoglu: Why nations fail. This is a must read. It attempts to explain (with great success) how institutions have molded the modern states into the way they are now, and what exactly seems to be at the root of inequality and prosperity.

If I had to recommend two books, "Why nations fail" would always be one on that list.

<comment><USER12> Glimpses of World History, a book published by Jawaharlal Nehru in 1934, is a panoramic sweep of the history of humankind. A People's History of the World: From the Stone Age to the New Millennium

</comment></comment><comment><USER13> Edward Tufte's books, "Envisioning Information" and "The Visual Display of Quantitative Information".

Why suggest these books that seem just about graphic design, to an audience of mainly software developers? Well, aside from the stylistic points about graphical plots and figures, it is more deeply about being able to communicate effectively, with intention.

I find that all too commonly, many junior people who code are unable (or maybe more charitably, unpracticed) at formulating arguments or explanations for why something exists in the form it does, or how it ought to be designed, in a way that they can coherently explain to someone not deep in their code. It usually means that they have not spent time thinking about it deeply, and are stuck in the "show me lines of code to explain what something is" mode of thinking. Or that they can only explain the approach in terms of the specific lines they are writing -- they have not moved beyond that level of understanding.

I won't say it to the person generally, but I really have to bite my tongue when working with someone who has no way of explaining something (at an overall approach level) other than showing me lines of code. Stepping out of that realm into graphical communication is one way.

Being able to think graphically in a coherent way as a software developer means you start to think about how to explain your work to others as more than lines of code -- and in explaining to others, improving your own understanding of what you're writing. Btw, it also probably means that you're more likely move beyond the role of just a plain old software developer and become someone responsible for the design of systems, the direction of work.

</comment><comment><USER14> For whatever reason people are often tempted to victimize themselves and assume that everyone has it better than them. Which is an incredibly slippery and dangerous slope(looking at the news over the last few years). And with that in mind, "Factfulness" by Hans Rosling is a __MUST__ imo. Once you wrap your head around the facts, a next good choice is "The Black Swan" and "Antifragile" by Nassim Nicholas Taleb, despite some (to a certain extent justified) bashing on tech people. Note to self: need to pick up "Skin in the Game".

Completely with you about Spivak, as far as calculus goes.

Physics: recently picked up Walter Lewin's "For the Love of Physics" and it's a masterpiece. Didn't get the chance to finish it because of the pandemic and it got locked in the office but it appears he's managed to cram in an entire university course in one book.

Biology and anatomy - "The Selfish Gene" by Richard Dawkins is brilliant entry point for people with limited knowledge on the subject.

Chemistry - no idea, that's the one subject which I hated with a passion since I was a child. Very paradoxical, given that physics was arguably my favorite subject ¯\\_(ツ)_/¯...

History - Yuval Noah Harari's books, though somewhat anecdotal as far as history is concerned. I'd say there are way too many to list here and there is way too much to read about all major events in history to fit in just a few books.

<comment><USER15> Half of the books here are pop science books, they are not textbooks.

<comment><USER14> ~ish. All of those are imo perfect introductions to each of those subjects and can give you an idea where your next step should be.

<comment><USER15> No they are not. It is an absolute disgrace to the other sciences if you put stuff like _The Selfish Gene_ in the same class as Spivak. Do you want people to go around telling CS beginners that _Hackers and Painters_ is an introductory CS textbook? Or to tell a student of complexity theory that the best way to study NP-completeness is through reading _Gödel, Escher, Bach_?

<comment><USER14> I'm sorry, when exactly did I say they are in the same class? I'm not a biologist in any way, nor I ever claimed to be one. You could say the same about Harari in that respect. I am talking about introductions. It's the same story with Lewin. It's nowhere near The Feynman Lectures on Physics but those are simply not something suitable for self-education(which is what OP has clearly stated).

</comment></comment></comment></comment></comment><comment><USER16> The 2nd edition of Statistical Rethinking by Richard McElreath came out recently and is great. It's a rare thing to want to read a statistics textbook cover to cover but I did with this and enjoyed it. The practice questions are very well designed and I think get the difficulty about right for the target audience (natural and social science post-grad students).

If R isn't your bag then there are many translations of the code examples to other languages available online.

<comment><USER17> Statistical Rethinking is solid for learning very, very, complicated concepts, such as various tricky implementations of Markov chain Monte Carlo.

</comment></comment><comment><USER18> I'm not sure whether David Mackay's Information Theory, Inference, and Learning Algorithms (freely available at [http://www.inference.org.uk/mackay/itila/book.html](http://www.inference.org.uk/mackay/itila/book.html)) counts as a textbook, but it's one of my favorite books, on any topic, in any genre.

<comment><USER19> He also has a sense of humor, so plus one for him.

[http://www.inference.org.uk/mackay/itila/Potter.html](http://www.inference.org.uk/mackay/itila/Potter.html)

<comment><USER20> _Had_. Unfortunately Professor MacKay passed away from cancer in 2016. We lost a great soul.

I concur that his textbook and sense of humor were fantastic. It was very enjoyable for me to learn the material from his lectures. They are a great supplement to the textbook (or maybe vice versa?) and you can find them here: [https://youtu.be/BCiZc0n6COY](https://youtu.be/BCiZc0n6COY)

</comment></comment></comment><comment><USER21> For Chemistry - Atkins' Physical Chemistry and Claydens' Organic Chemistry are the bibles.

Will take you from undergrad to bits of grad school. Encompassing and clear.

It was a bit harder to find as good a bible for inorganic chemistry.

Softley' Atomic Spectra and Keeler's Why Chemical Reactions Happen are phenomenal primers too but are a bit smaller in scope than the aforementioned two.

The same Atkins from above also wrote Molecular Quantum Mechanics which is also a solid text

<comment><USER22> I'm a big fan of all of these. Clayden is very gentle (or maybe that's just Org being easy...). But Atkins gets hard quite fast—-the chat from first years is that beginners will find it a bit tough. I'd generally recommend the cut down Atkins to start (Elements of...) or if you prefer pop Sci The Second Law was great as an UG trying to wrap my head around this. Creation Revisited also rocks.

<comment><USER21> Yeah Atkins was quite heavy. That said, I think it does a good job of being self-contained. You could more or less get 80-90% of what you need with only that text from high school knowledge. But without additional resources and teachers supplementing, it will probably be too gruelling.

I think that's more because physical chemistry is quite hard

<comment><USER23> I second atkins, it's a classic and covers base to more advanced subjects very well imo.

I feel it takes time to read, but it's the one book that provided the most value in my understanding of chemistry.

</comment></comment></comment></comment><comment><USER21> SICP is great for me because I get new things from it on repeated readings. The original content is ostensibly suitable for a freshman (provided you are familiar with the mathematical domain) but the ideas around abstraction and modularity are timeless. If you study and reflect on the content, Sussman and Abelson are truly trying to guide the student to arrive at an appreciation of software engineering concepts.

I remember there being a question where after implementing a tree where the leaf nodes are represented as a list, they then pose the question - how much of your code needs to change if you needed to reimplement them as a pair?

The point being a pithy lesson in indirection/abstraction - had the student set up named accessors, there would be very little code to change.

<comment><USER11> To me the crown jewl of SICP is the universal scheme interpreter they build in the later chapters. That opens the book to be used in _any_ language. Now we have an internet there are hobby schemes implemented in every language, so it's fairly easy to find ideas if you are stuck implementing the necessary substrate using the language of your choice (ie. mostly tokenizer, parser and some form of eval/apply).

</comment></comment><comment><USER24> History: imo, forget about textbooks. Books are much much better. Textbooks are less readable meant for people who will force themselves to go to lectures, revise, revise, write notes and actually study.

\- "The Third Reich Trilogy" from Richard J. Evans about Germany during WWII is the best thing I read about WWII.

Now I am reading "The rebellious life of Mrs Rosa Park", pretty good too, although the topic is super specific.

Also, I would also recommend to have a look at "Lectures in History" podcast from c-span. They are are lectures from universities about American History. The lectures also contain book recommendations, so if you are interested in this or that topic, they are good source of books.

</comment><comment><USER25> Computer Systems: A Programmer's Perspective. Flies a little under the radar. I'm definitely biased here (TA'ed the class that originated it). But by the end of it I left with a decent understanding of x86-64 assembly to the point that I could hand compile C functions. And also a rough and ready understanding of how shells, malloc, and web servers work.

<comment><USER26> I am planning to go through this book later this year. Can you help me understand what the difference is between this and Hennessey Patterson's book Computer Organization and Architecture? Like, why would/should I study x86_64/ARM/RISC V/MIPS/anything else? Is there a difference in approach or the architecture?

<comment><USER27> They are complementary and not the same. I very highly recommend that you get and study "Computer Systems: A Programmer's Perspective, 3rd edition" since it is a very practical and detail oriented book(i.e. no hand-waving and full of code for x86-64) for the Programmer. Hennessy & Patterson's "Computer Organization and Design: The Hardware/Software Interface" is more high-level with not enough depth while their "Computer Architecture: A Quantitative Approach" is full on theory book.

</comment></comment></comment><comment><USER28> In my field it is Computer Networking: A Top-down Approach by Kurose. I've been using it as the main textbook for computer networking course for more than ten years.

On related notes, for the past few weeks I've spent countless hours searching and compiling good to excellent textbooks in the field of engineering and computer science. Perhaps I can share the information in the near future.

<comment><USER29> Look into teachyourselfcs.com. They have a good list of areas every good programmer should be comfortable with and a recommendation for books/lectures that teaches that well. They explain why each area is important to learn and why the book is an apt choice.

They recommend Kurose and Ross for networking too, though I disagree. I feel like High Performance Browser Networking (free at hpbn.co) is superior.

</comment></comment><comment><USER30> I can second Spivak. Apart from the classic calculus textbook, he has written Calculus on Manifolds which is also a nice introduction into differential geometry.

He also has a huge multi-volume textbook on differential geometry per se but I never read it. Probably brilliant as well.

</comment><comment><USER3> Halliday and Resnick, 60's version. Feynman's Lectures. Thomas's Calculus books. The Scientist and Engineer's Guide to Digital Signal Processing Steven W. Smith, Ph.D. (Has always been available free. So good, I bought a hardcover one.)

</comment><comment><USER31> For the theoretical part of computer science, Introduction to the Theory of Computation by Michael Sipser is the best there is.

It covers three main topics: \- Automata theory \- Computability \- Computational Complexity

What I especially liked about the book was how he approached proofs. When introducing a proof, there is first a short "proof idea" paragraph that emphasizes the main approach behind the proof informally. He then gives out the full, formal proof. For self-study, those proofs can sometimes be intimidating, and not strictly necessary depending on your goals, but understanding the ideas was important to understand the topic.

</comment><comment><USER32> Pretty much any book by W. Richard Stevens, but in particular Unix Network Programming, which made a cameo appearance in Wayne's World.

Intro to Statistical Learning by Hastie, Tibshirani, James and Witten: [https://www.amazon.com/Introduction-Statistical-Learning- App...](https://www.amazon.com/Introduction-Statistical-Learning-Applications- Statistics/dp/1461471370/ref=sr_1_2?crid=1QHWMLAHV5B9Z&dchild=1&keywords=hastie+tibshirani&qid=1591858692&s=books&sprefix=hastie%2Cstripbooks%2C211&sr=1-2)

</comment><comment><USER33> Clinical Microbiology Made Ridiculously Simple.

Fantastic breakdown of micro into understandable and memorable concepts, helped me get through intense classes while making it interesting via funny if cheesy mnemonics and artwork: [https://www.amazon.com/Clinical-Microbiology- Made-Ridiculous...](https://www.amazon.com/Clinical-Microbiology-Made- Ridiculously-Simple/dp/1935660152)

All of the "Made Ridiculously Simple" texts from that publisher are fantastic, but imo the Clinical Microbiology is the best of the best.

</comment><comment><USER34> Statistics by Freedman et al is a great introduction to statistics. It took me a year to fully read it but the exercises are fun, real world examples of applying statistical methods.

</comment><comment><USER35> Visual Complex Analysis is the best mathematics book I've ever read.

Siegel's free (and source available IIRC) textbook on quantum field and string theory (can't comment on treatment of the latter) is a nice, if completely impenetrable by virtue of being enormous, book.

I recommend "Advanced Tire Mechanics" to anyone looking for a proper, modern, book on the subject - Pacejka's writing is messy and dull.

</comment><comment><USER36> History:

I asked on /r/askhistorians for book suggestions on the history of China.

> _The History of Imperial China series edited by Timothy Brook consists of > six roughly 200-page long volumes, each of which covers one or two dynastic > periods._

I read the first volume and enjoyed it. And I feel safe in recommending the set given the endorsement from a scholar on the topic.

<comment><USER37> That sounds interesting. Does it exist as an audio book?

</comment></comment><comment><USER38> Behave: The Biology of Humans at Our Best and Worst, by Robert Sapolsky [1].

A fascinating multidisciplinary approach to explain what happens behind our most consequential behaviours.

[1] [https://www.goodreads.com/book/show/31170723-behave](https://www.goodreads.com/book/show/31170723-behave)

<comment><USER39> He is also a fantastic lecturer! Just the right amount of humor. [https://www.youtube.com/results?search_query=robert+sapolsky](https://www.youtube.com/results?search_query=robert+sapolsky)

</comment></comment><comment><USER40> Highly subjective but:

K&R indeed and K&Pike's 'The Practice of Programming'.

Vince's 'Mathematics for computer graphics' (haven't read his calculus book but it's on the wishlist).

Petzold's 'Code'.

Leventhal's Z80 and MC68000 books back in the day.

</comment><comment><USER41> On Food and Cooking is a wonderful introduction to practical everyday food science.

</comment><comment><USER42> In mechanical engineering:

\- Mechanical Engineering Design, Shigley

\- Mechanism and Mechanical Devices Sourcebook, Sclater

\- Foundations of Mechanical Accuracy, Moore

\- Machinery's Handbook

\- Structure and Interpretation of... Classical Mechanics, Sussman

And just for fun:

\- 507 Mechanical Movements, Brown

\- Handbook of Compliant Mechanisms, Howell

</comment><comment><USER43> Michael Sipser's Introduction to the Theory of Computation. Teaches you formal languages, decidability and complexity theory in a very rigorous way with little prerequisites.

</comment><comment><USER44> It's great that you're the sort of person who learns from text books, but I'm seriously bad at it. Maybe it has something to do with learning styles?

</comment><comment><USER45> Paul Marino, The ICU Book.

Sapira's Art and Science of Bedside Diagnosis

</comment><comment><USER46> On Baking

It has some good recipes in it, but the instruction it provides on baking and pastry making has really helped me improve my technique over the years.

</comment><comment><USER47> For biology, assuming a CS/engineering background:

Campbell's Biology

Synthetic biology: A Primer

An introduction to systems biology by Uri Alon (get the 2020 edition)

O'Reilly: Biobuilder

<comment><USER36> A good Open Courseware companion for the SynthBio texts is 20.305x Principles of Synthetic Biology.

</comment></comment><comment><USER48> The Elements of Computing Systems - Noam Nisan and Shimon Schocken (MIT Press)

It's used in the Nand2Tetris course[1].

It guides you through building a computer and writing an assembler and compiler.

It's not so much a textbook you read as a textbook you _do_.

[1] [https://www.nand2tetris.org/](https://www.nand2tetris.org/)

</comment><comment><USER49> Computer system architecture

Morris Mano

At the end of the book, you are able to design the entire computer architecture from humble logic gates.

<comment><AUTHOR> It's a funny coincidence you reccomend that book, since it's already in my library. Found it at a local dump by chance. Had no idea it was well-regarded.

<comment><USER49> It holds your hand through creating memory, adders, muxers from logic gates and then finally ending up with a virtual machine you can actually program with a made up assembly language.

Because of it, I have a perspective on constraints and state machines that helps with my day job as a programmer and distinguishes me from collegues.

Sometimes even a dump can contain great wisdom.

</comment></comment></comment><comment><USER26> "Breaking India" By Rajiv malhotra - [https://en.wikipedia.org/wiki/Breaking_India](https://en.wikipedia.org/wiki/Breaking_India)

This book shows the systematic intervention in undermining and uprooting hinduism in south india.

</comment><comment><USER50> My choice although its not comp.sci is '22 immutable Laws Of Marketing' As most coders marketing doesn't come as easy to me as coding but damn this old little gem is full of practical mental models and use cases. Very easy read and does not read like a textbook.

<comment><USER51> you mean 22 right?

<comment><USER50> Darn ! Lol sorry yes !

</comment></comment></comment><comment><USER52> In Computer Graphics, I'd give mad props to Wolfgang Engel. He's authored, edited and contributed to foundational reference series: GPU Gems, ShaderX, GPU Pro, GPU Zen. He was also an evangelist for GPGPU a decade before it became the modern basis for AI research ;)

</comment><comment><USER53> Never Split the Difference, by Chris Voss, a former FBI hostage negotiator. Not a textbook exactly, but its the book on negotiation I think everybody should read. His interviews and lectures on youtube are pretty good too.

<comment><USER54> I found it a little bit naive. His examples from hosting situations are very interesting, but I think the generalizations too vague to be useful and the application of the discovered principles in business quite unrealistic.

<comment><USER11> "application of the discovered principles in business quite unrealistic."

I'm not so sure. The main point of the book I think was that very few negotiations are rational. That's the key message. Then there are lots of anecdotes and self promotion which are not that helpfull. But the key message, I think, is solid.

Most people go to a room expecting some sort of analytic hammering out between two equal parties, when in reality if the other party is prepared with some sort of influence tactic based script and the one is not, the one with the plan comes out winner, especially if the other party is not prepared.

Just ask telemarketers.

If one of the agent in a two party negotiation has a script and a strategy then if the other party does not, the one that has _any_ kind of strategy and script is usually ahead. And another key point was - the winning script does need to be rational, it can target emotions and feelings as well.

Again, telemarketers. "Do you want to buy our insurance? No? Wait, think about _how terrible_ it would be if something bad like <insert insured event> would happen? _Surely_ you would like to be prepared for such an eventuality"

These are of course applicable only to adverserial negotiations, and not all negotiations need to be like that.

<comment><USER53> Yes, thats definitely a key point: people are not rational creatures, but emotional. The rest of the book is just about ways you can tap into or get around that.

Another key point of the book is to let your counterpart talk as much as possible, while you listen. _Really_ listen. Again, the techniques discussed are tools to help with that.

Everything else is sbout calming the person down, making them feel understood and heard, and unearthing what it is they actually value.

</comment></comment></comment></comment><comment><USER55> Baby Rudin, you'll come out a different person. (There might be some tears..)

</comment><comment><USER56> For programming, I enojyed reading Oh! Pascal 2nd Edition by Doug Cooper et al.

</comment><comment><USER57> I think _Concrete Mathematics_ is the most polished textbook I know of.

</comment><comment><USER12> Physics Grob: Basic Electronics The Feynman Lectures on Physics - [https://www.feynmanlectures.caltech.edu](https://www.feynmanlectures.caltech.edu)

</comment><comment><USER58> Cooking: Larousse Gastronomique

History/Anthropology: Seeing Like A State

<comment><USER59> How does that compare to 'On Food and Cooking' by Harold McGee?

</comment></comment><comment><USER60> For Newtonian Physics - Concepts of Physics by HC Verma

</comment><comment><USER61> Spivaks Physics for Mathematicians is a blessing - even for physicists. and Quantum Field Theory for the gifted amateur is a surprisingly fun read.

</comment><comment><USER62> Digital Signal Processing by Alan V. Oppenheim and Ronald W. Schafer

Microelectronic circuits by Adel Sedra and Kenneth C. Smith

Introduction to Linear Algebra by Gilbert Strang

</comment><comment><USER63> A Short History of Nearly Everything by Bill Bryson is a nice read on the history and development of science and mathematics.

</comment><comment><USER64> If you develop software, Martin Fowler's "Refactoring" is an excellent journeyman level book.

</comment><comment><USER65> Concepts of Programming Languages by Sebesta. This helped me understand what abstractions are all about.

</comment><comment><USER66> I see young people don't swear by Knuth anymore, like we did in the good ole times .

</comment><comment><USER67> Hennessy and Patterson's book on computer architecture.

Gray and Reuter on transaction processing.

</comment><comment><USER68> The Little Schemer by Friedman and Felleisen, and Naive Set Theory by Paul Halmos

</comment><comment><USER69> History, long form: Durant & Durant, "The Story of Civilization"

History, short form: Orwell, "Animal Farm"

(One of these 20th century works is an extended treatment of a bunch of animal bad apples who lie, cheat, and steal to maintain power over their fellow animals. The other is fiction)

<comment><USER70> Animal Form is not a textbook in any way whatsoever. Downvoted.

</comment></comment><comment><USER71> For Biology, and especially for Molecular biology I'd go for:

\- Albert's Molecular Biology of the cell - [https://www.amazon.com/dp/0815344325/ref=dp-kindle- redirect?...](https://www.amazon.com/dp/0815344325/ref=dp-kindle- redirect?_encoding=UTF8&btkr=1) \- It introduces basic Biochemistry, a lot of Genetics and Gene-regulation and Developmental biology. The book also touches other areas (but very vaguely) like Immunology... I think if you read this book you will be able to understand modern Molecular Biology papers.

\- Biochem: Legninger's Principles of Biochemistry [https://www.amazon.com/dp/B01K0PYUYQ/ref=dp-kindle- redirect?...](https://www.amazon.com/dp/B01K0PYUYQ/ref=dp-kindle- redirect?_encoding=UTF8&btkr=1) \- Our prof taught us from this, it has great visuals and covers a lot of areas.

\- Developmental biology: Gilbert's - [https://www.amazon.com/Developmental- Biology-Tenth-Scott-Gil...](https://www.amazon.com/Developmental-Biology- Tenth-Scott-Gilbert/dp/0878939784) \- it introduces more genetic regulation and development for all walks of life

\- Human developmental biology: Bruce M. Carlson - Human Embryology and Developmental biology - [https://www.amazon.com/Human-Embryology- Developmental-Biolog...](https://www.amazon.com/Human-Embryology- Developmental-Biology-Book- ebook/dp/B07KYNPMGJ/ref=sr_1_fkmr0_2?dchild=1&keywords=bruce+m+carlson+embriology&qid=1591859392&s=books&sr=1-2-fkmr0) \- Again it's the choice of my prof, but I loved it, great images and visual explanations.

\- Anatomy: I'd definitely go for anything by Netter -> [https://www.amazon.com/Atlas-Human-Anatomy-Netter- Science/dp...](https://www.amazon.com/Atlas-Human-Anatomy-Netter- Science/dp/0323393225)

\- Cancer: Robert A. Weinberg - The biology of cancer - [https://www.amazon.com/Biology-Cancer-2nd-Robert- Weinberg/dp...](https://www.amazon.com/Biology-Cancer-2nd-Robert- Weinberg/dp/0815342209)

\- Plant biochem: Biochemistry and Molecular Biology of Plants - [https://www.amazon.com/Biochemistry-Molecular-Biology- Plants...](https://www.amazon.com/Biochemistry-Molecular-Biology-Plants- Buchanan/dp/0470714212) \- A very good book with great illustrations.

For electronics and Embedded:

\- Art of Electronics by Paul Horovitz - [https://www.amazon.com/Art- Electronics-Paul-Horowitz-ebook/d...](https://www.amazon.com/Art-Electronics- Paul-Horowitz-ebook/dp/B01BYJO2JU) \- I saw that others also suggested it, great book

\- Paul Scherz - Practical Electronics for inventors - [https://www.amazon.com/Practical-Electronics-Inventors- Fourt...](https://www.amazon.com/Practical-Electronics-Inventors-Fourth- Scherz/dp/1259587541) \- I was introduced to electronics via this book. Not really a textbook but it's I think it's a great book to get started, it covers almost the same topics as the Art of Electronics but not as deep and with better visual explanations.

\- Embedded systems - Michael Barr - Programming Embedded Systems in C and C++ - I was introduced to embedded software development by this book, when I was working for an IoT company and only had experience with systems and web programming.

Programming (my cherry picked favourites):

\- Hacking: The Art of Exploitation - I love this book. I've read it after I had a few years of professional programming experience with C#. It introduces programming via C, also every example program is disassembled with GDB. It gives the reader an intuition of how C code compiled and what happens on the register level.

\- C in a Nutshell: The Definitive Reference - Usually when you search for good books to learn C from, you get titles like The C programming language, Deep C Secret. But I think C in a Nutshell beats all other C books. (Especially when you read it together with C related chapters from The Art of Exploitation).

\- Functional Programming in Scala - [https://www.manning.com/books/functional-programming-in- scal...](https://www.manning.com/books/functional-programming-in-scala) \- I saw that other people suggested SICP, and I agree with that, it does a great job introducing to some parts of functional programming. But FPIS also introduces a strictly typed aspect of FP, functional parallelism, functional designs patterns... It's a great book.

\- Concurrency in Go: Tools and Techniques for Developers - [https://www.amazon.com/Concurrency-Go-Tools-Techniques- Devel...](https://www.amazon.com/Concurrency-Go-Tools-Techniques- Developers/dp/1491941197) \- I love the Go language and how it handles concurrency. This book does a great job of describing how the go runtime works, and does a great job explaining concurrency in general. Also there are a lot of good design patters in it.

\- Professor Frisby's Mostly Adequate Guide to Functional Programming - [https://github.com/MostlyAdequate/mostly-adequate- guide](https://github.com/MostlyAdequate/mostly-adequate-guide) \- It's not a textbook. This is the book that introduced me to FP. I love it, great book.

\- Computer Systems: A Programmer's Perspective - [https://www.amazon.com/dp/9332573905/ref=dp-kindle- redirect?...](https://www.amazon.com/dp/9332573905/ref=dp-kindle- redirect?_encoding=UTF8&btkr=1) \- This was the suggested textbook for [https://courses.cs.washington.edu/courses/cse351/](https://courses.cs.washington.edu/courses/cse351/) that was also available on Coursera. Great book.

</comment><comment><USER72> Sicp is outdated

</comment><comment><USER73> I loved Willard's General Topology.

</comment><comment><USER74> ecology of the planted aquarium by diana walstad

</comment><comment><USER75> K&R, Spivak, Randal's Learning Perl, Cricket's DNS and Bind, Petzold's Windows Programming

Flipping through the Smalltalk books was an eye-opener back in the day.

There's an amazing but little-known book in the same printing style as K&R about systems software from the MCC consortium, with tons of C source code.</comment>