Ask HN: What are some books where the reader learns by building projects?
A continuation of https://news.ycombinator.com/item?id=13660086 which has been incredibly useful to me.
I recently finished this phenomenal book called "Building Enterprise JavaScript Applications":
https://www.packtpub.com/web-development/building-enterprise-javascript-applications
Which takes the reader from zero to building a non-trivial production fullstack application with JavaScript. I also recommend "Building Git". The title is self-explanatory:
https://shop.jcoglan.com/building-git/
Other resources:
https://github.com/AlgoryL/Projects-from-Scratch
https://github.com/tuvtran/project-based-learning
187 comments
[ 2.0 ms ] story [ 268 ms ] threadIt takes you through implementing some classic AI examples (such as Eliza) and teaches you how to write code in a data-first style through Lisp.
I worked through the whole thing building it in Clojure and learnt loads (not just about AI, but about writing readable code in general). I can't recommend it highly enough!
It doesn't actually cover game programming per-se, it's more of an introduction to 3d graphics programming book, but each chapter builds upon the last and there are assignments at the end of each chapter that allow you to play around with concepts that he walks you through so you can build a good understanding.
I've seen other books that are often recommended, and they're great by themselves, and they are nowhere near as utilitarian as this book. I cannot recommend them to beginners even if they're marketed as such.
By the end of it, you have a very good handle on a variety of concepts that you can readily apply towards, say, building a modern-day PBR pipeline.
It was my first exposure to spaced repetition learning, before I knew such a thing existed.
There are a lot of "good" books on graphics that jump you from one topic to another but never really integrate what you learn or ask you to take something covered earlier, but now combine it with a newly-learned concept to create something novel (novel in the eyes of a beginner). We need more books that integrate, because a lot of very recent (as of SIGGRAPH 2019) graphics development is about taking a set of concepts you already know, and exploiting them in different ways.
I wish that there was an equivalent for learning OpenGL or Vulkan.
[0]: http://aosabook.org/en/index.html
It would be cool to see something like this for data science projects. Like a recommender system in 500 lines or less.
I never did get a working Go AI though. I'm a Go beginner and never created an AI that was close to challenging to me. I didn't follow the book exactly though, I did my own thing loosely guided by the book, so my failures do not necessarily reflect poorly on the book.
Did you ever get a working Go AI?
https://www.nand2tetris.org/
Could not recommend enough.
You just set up a framework in the book, but this is all easily extendable to whatever you want. I'm not the best at Go, so it's a useful "nightly devotion" of time to spend working through it for an hour or so.
I've also been going through Writing an Interpreter in Go, and have picked up the companion to that Writing a Compiler in Go. So far, that's pretty good too, but I'm focusing on Black Hat Go first, to complete it.
It's a pretty good introduction to embedded programming, with several projects included. Valvano's course at University of Texas is also available as a MOOC.
Soon to become a real book published by No Starch Press!
It literally started with an explosion in a can, and then progressively enhanced that idea step-by-step: add a lid to the can to capture the energy, add a lever to keep the can lid from flying away, and then attach the lever to a wheel so that it returns the lid to the top of the can for another explosion, add walls to guide the lid, ta-da! Piston.
It goes on like that, adding each piece of the puzzle in a logical way, until you have a mental model of an internal combustion engine. You definitely feel like you could build one from scratch (if you had the metallurgy skill.)
I was a kid when I read it, and the book was already old, so publication date circa 1970-80. Best I can do. I trawled through book cover images but no love.
- - - -
edit to add: It's probably "Auto Mechanics Fundamentals" by Stockel. I'm still looking for pictures of the insides of the book, but going by what I can see here, it's very likely:
https://archive.org/details/automechanicsfun00stoc/page/n5
The typography matches my memory, and the description in the introduction sounds spot on, eh? Cheers!
Maybe?
>>> "It is the aim of Auto Mechanics Fundamentals to provide a thorough understanding of the design, construction and operation of automotive units. Each unit is approached by starting with basic theory, then parts are added until the unit is complete. By following this procedure, the function of each unit is explained, and its relationship to the complete car is made clear. Hundreds of illustrations were drawn especially for this text. Important areas are featured in these drawings, and many are exaggerated to place emphasis on parts being discussed. Unfamiliar words are defined immediately following the words. In addition, the Dictionary of Terms in the back of the book defines more than 1,100 terms..."
https://www.amazon.com/Mechanics-Fundamentals-Construction-O...
(This one is blue but there is another version in red)
Don't want to link it as I am at work, but it's on YouTube.
It follows the same philosophy--start with a tube. Add a bolt. Add a trigger. Add a magazine. Etc.
https://www.youtube.com/watch?v=CcVeslwTvAw
https://www.youtube.com/watch?v=HJnhr08aIJs
https://www.youtube.com/watch?v=MJGu8prreZM
https://www.youtube.com/watch?v=-7Tx8OO3JGU
https://aiprobook.com/deep-learning-for-programmers/
You can buy it or read it free online (thanks again to O'Reilly for allowing us to release it under creative commons):
https://buildingtoolswithgithub.teddyhyde.io/
No prior experience with the languages are required, so it is good for a beginner wanting to dip their toes into that language and/or facet of the API.
https://bigmachine.io/products/a-curious-moon/
You don't start with simple selects, but importing data from files and normalizing it. You're intern at aerospace startup after all.
I'd say it's _refreshing_ compared to prevalent approach to teaching SQL
https://www.masterywithsql.com/
via his comment history :)
2. Do you have a TOC or expected date for this to be out? Extremely interested!
https://pbrt.org/
I’m writing one right now on building a mini trading bot platform.
It would be great to hear what you like/dislike in these types of books.
I don’t have any marketing website up at the moment but I created this mailing list if you’re interested in following the developments http://bit.ly/tradingbotplatformbook
(Link redirects to https://cdn.forms-content.sg-form.com/f306b813-475c-11ea-9be...)
The Go stuff is really just a means to an end, the real value comes from the practical learnings of how to build a functioning interpreter and compiler (and virtual machine!) for a programming language the author made up called Monkey.
It's not a book full of theory but it lays some nice foundations that might help you understand the theory better :)
I really should kick myself up the arse and go beyond chapter 3, I'm doing Go in a real project now.
Its not exactly from scratch as there is some boilerplate code to keep you focused on concepts. It was quite fun, except I didn't really like working with SML (OCaml would have been nicer IMO, and I think you can choose to use that by finding the ported boilerplate on Github). Also has C and Java versions of this book.
In the first half of the book you write an interpreter for a simple scripting language; in the second half of the book, you write compiler to bytecode + vm.
Very clear, fun, excellent writing. Highly recommended.
It was also kind of amazing to very quickly have something that ran more quickly than python!
This book (although an older edition) is largely what got me into programming, and taught me so much about Rails.
* Programming WebAssembly with Rust - https://pragprog.com/book/khrust/programming-webassembly-wit...
This book steps through learning about web assembly, writing it by hand, and then implementing a server for webassembly. I had so many misconceptions about webassembly/wasm before reading this.
I noticed that it was released Sept 2018. That's not too old, but I'm curious if there's a more up-to-date version.
There really shouldn't be any JS books in print...
But the core value of the book is not in the tools themselves, but the concepts and principles of these tools, and how these tools work with each other. And these don't get outdated as easily!
In any case, thanks for the feedback!