Ask HN: What's an (article|book|vid) that changed the way you view programming?
--- For me it's these:
- Watching DHH/the video that introduced me to Rails. I was a student coding in PHP/CodeIgniter, and it blew my mind re: the speed at which things got done. (Now, not so much, hehe.) - Watching [Destroy All Software](https://www.destroyallsoftware.com/), I think that was the first time I saw someone with a high mastery of the Vim editor, and the first time I saw someone write tests/talk about app/class design. The next week, I was pulling my hair out trying to learn Vim. - Non-programming: [Cracked article on harsh truths.](cracked.com/blog/6-harsh-truths-that-will-make-you-better-person/) I read that several years ago, and every year I try to add a new skill to learn. It's still my auto-complete when I type in "cr" on my browser.
30 comments
[ 3.4 ms ] story [ 63.9 ms ] threadAlso his talks on transducers in clojure changed the way I think about functional programming
The course that really changed my perspective on development in general was this one https://watchandcode.com/. Its a javascript based course that looks at one simple CRUD (todomvc) app in both vanilla js and jquery.
It assumes you know nothing about programming. To give a crash course overview of what the contents look like
First,
- It doesn't waste time making you setup a dev environment
- First step it asks you to do is play with the todomvc app, to get familiar with the end product
Iteratively,
- The author asks you to write the requirements of the next steps, e.g. "It should have a way to a place to store todos"
- Next, the author teaches you just enough things to meet those requirements in the console
- You implement those simple things per your requirements
- Repeat
- Throw in some computer science concepts only when its needed in context of next problem
What sets it apart from other courses is it teaches you how to "think" like a programmer regardless of what programming language you use. I would say its a modern day video implementation of something similar to books like "Clean Code" or "Pragmatic Programmer" where it discusses why things are done in certain order.
At the end of it you have a nice implementation of the todoMVC app in a prototype pattern / MVC format, and you understand why it was written this way. Next video series he goes into how this implementation is different than the jQuery implementation of todoMVC. But first you would have to understand how to read someone elses code, so he covers how to methodically break down a codebase (what to read, what not to read, how to determine starting points to understand what the code is doing).
Then he introduces you the tools to do so (debugger). Then how to write your own native javascript reduce function and break down the MDN docs. Then how to write TDD (test driven development) based on things discussed earlier on the course. What the `this` object is, what `apply` is, what routing and templating are used for, in context to singular project made above
I haven't finished the 2nd series he's made (26% finished), but it goes into much more detail later about regex, clojures, etc. I think by the end of it you can largely ignore what YDKJS has to offer since its all covered in this course, in a slow methodically well planned out manner. To give you a perspective of how long the series is
- Series 1 is short and to the point (4-5 hours)
- Series 2 is ongoing and about 30-40 worth of video content. On one video he talks about writing a native javascript reduce implementation for 2 hours.
Watching this series makes me realize how my lackof knowledge of discrete math / core math / data structures would ideally make a lot of programming concepts much easier
It’s very readable.
Famous first words ...
"I'd like to welcome you to this course on computer science. Actually, that's a terrible way to start. Computer science is a terrible name for this business."
... and this is where it all clicked to me ....
"Well, similarly, I think in the future people will look back and say, yes, those primitives in the 20th century were fiddling around with these gadgets called computers, but really what they were doing is starting to learn how to formalize intuitions about process"
[1] https://www.youtube.com/watch?v=2Op3QLzMgSY
If you ask me John Romero made Eidos his b*h, not his fans!
also,
Clean Code: by Robert Martin
Game Programming Patterns by Robert Nystrom
Free book is available here http://www.gameprogrammingpatterns.com/
C++ How to Program Dietiel and Dietiel
Algorithms by CLRS
Here’s one of the talks, nothing is something : https://youtu.be/29MAL8pJImQ
Though I already understood recursion pretty well when I read this, the explanation Paul Graham gives in section 2.7 of ANSI Common Lisp was pretty useful [2].
[1] http://web.mit.edu/Saltzer/www/publications/endtoend/endtoen...
[2] http://ep.yimg.com/ty/cdn/paulgraham/acl2.txt
Especially this comment chain: https://news.ycombinator.com/item?id=13571159
I've started re-factoring code before adding new features, our code base is getting a little better every day (more maintainable) which reversed a trend, it was getting harder to add features, now it is easier; plus when I design now, my designs are cleaner and result in maintainable code.