└── README.md /README.md: -------------------------------------------------------------------------------- 1 | # Awesome "Aha!" 2 | 3 | Some times you don't know where to start. Sometimes you just dont "get" it. 4 | We're flooded with information and resources, but we, the more experienced lot, 5 | all know which ones really made it sink for us. 6 | 7 | This is a list of the best starting points that helped experienced 8 | people learn new things quickly, and those pivotal resources that made an "Aha!" moment. 9 | 10 | 11 | **NOTE: as such, this list is very carefully groomed, not all suggestions will be accepted, 12 | but we'll do our best** 13 | 14 | 15 | _Guidelines for submitting a topic:_ 16 | 17 | * It should be critically acclaimed. 18 | * Prefer the original, timeless, resource over a derivative of it (such as a blog post). 19 | * Prefer a derivative (such as an article, blog post, book) of the original when it really 20 | is known to explain the subject in a better way. 21 | * Any form of a resources is good: Books, videos, courses, talks, and more. 22 | * When in doubt, just submit a PR and we'll help find the best way to make it into the list. 23 | 24 | _Legend_: 25 | 26 | * :pushpin: - timeless 27 | * :book: - book 28 | * :coffee: - accessible, coffee time reading 29 | * :mortar_board: - academic / heavy reading 30 | * :pineapple: - fresh, recent development 31 | * :wrench: - makes you a pragmatic programmer 32 | 33 | 34 | 35 | Many thanks to everyone on the contributor list :) 36 | 37 | ## Technology 38 | 39 | _How to judge technology and develop a good gut feeling_ 40 | 41 | * :pushpin: :coffee: [Five things we need to know about technological change](http://web.cs.ucdavis.edu/~rogaway/classes/188/materials/postman.pdf) - a classic, mind opening essay about technology and people. 42 | * :coffee: [Beating the Averages](http://paulgraham.com/avg.html) - how programming languages are related to a mindset. 43 | 44 | 45 | ## Operating Systems 46 | 47 | _Understanding the almost-mechanical pieces on top of which we run our software_ 48 | 49 | - :pushpin: [Operating Systems: Three Easy Pieces](http://pages.cs.wisc.edu/~remzi/OSTEP/) - probably the most accessible book about operating systems. Don't have to read this cover to cover, just hunt out interesting bits you like. 50 | 51 | 52 | ## Unix 53 | 54 | _It's an operating system, but also a mindset and a cult_ 55 | 56 | * :pushpin: [The Cathedral and the Bazaar](http://www.catb.org/esr/writings/cathedral-bazaar/) - "get" open source. 57 | 58 | 59 | 60 | 61 | ## General Programming 62 | 63 | _Pure programming, problem solving, detached of specific technology_ 64 | 65 | * :book: :pushpin: [Programming Pearls](https://www.amazon.com/Programming-Pearls-2nd-Jon-Bentley/dp/0201657880) - programming and problem solving. 66 | * :book: :pushpin: :mortar_board: [SICP](https://mitpress.mit.edu/sicp/) - Structure and Interpretation of 67 | Computer Programs. For some, hard read. However, pivotal for understanding 68 | abstraction and Scheme makes the perfect beginner FP language. If you have 69 | time, invest it. Otherwise, try finding gists of the ideas in this book such 70 | as [here](www.sicpdistilled.com). 71 | * :book: :wrench: :pushpin: [The Pragmatic Programmer](https://www.amazon.com/Pragmatic-Programmer-Journeyman-Master/dp/020161622X) - a classic on a pragmatic thinking for programmers. Was a pivotal part 72 | of driving a new era of thinking, tools, languages and platforms. 73 | * :coffee: [better errors](http://elm-lang.org/blog/compiler-errors-for-humans) opens your mind to the idea of giving humans better compiler errors (as implemented in Elm, written by Elm's creator). 74 | * :mortar_board: [The LISP Paper](https://www.brinckerhoff.org/clements/csc530-sp09/Readings/mccarthy-1960.pdf) _1960_, this is where John McCarthy introduces [LISP](https://en.wikipedia.org/wiki/Lisp_(programming_language)), and introduces the world to: recursion, naming 75 | variable with more than a single letter (as was done because of math), and if/else expressions. Later, non-functional languages would adopt it. Thanks, John!. 76 | * :coffee: [Greg Young on Software](https://vimeo.com/108441214) - (video) a few observations about what makes a good or bad codebase, a good or bad design. Spoiler: it's the code size; sort of. Has many 77 | other good observation if you have not a lot of experience. Very repetitive, but good. 78 | * :coffee: :pushpin: [Rob Pike's Notes on Programming in C](https://docs.google.com/document/d/1ZhB5a7MoY1hEkKcbn9TAB4bMSjyZZWer_6Q-EHKJeOc/edit?usp=sharing) - Really this could have been 79 | called "shit people knew in 89' that people today will keep rediscovering and fight about - but will never stop to realize they're really reinventing a flatter wheel". 80 | * :coffee: [Design Stamina Hypothesis (Fowler)](https://www.martinfowler.com/bliki/DesignStaminaHypothesis.html) - The emerging pop computing trend challenges good design because people keep adopting buzzwords and slapping stack overflow code snippets onto production. This 81 | essay reminds us why good design is important and why it's so hard to justify good design or architecture in general. 82 | * :coffee: [ID Software's 90's Programming Guidelines](https://www.youtube.com/watch?v=E2MIpi8pIvY) - (video) Amazingly relevant still, even today. 83 | 84 | 85 | ## Functional Programming 86 | 87 | _Functional, and functional-style programming_ 88 | 89 | * :book: :pineapple: [Mostly Adequate Guide (to functional programming)](https://drboolean.gitbooks.io/mostly-adequate-guide) - a great tutorial if you want to short-circuit years of wax-on wax-off to properly 90 | "get" FP. Start with this if you don't have FP background, or have some university clue, and progress to more heavy hitters such as Haskell, Lisp and so on. 91 | * :coffee: :pineapple: [FP Jargon](https://github.com/hemanth/functional-programming-jargon) and [The Perfect API](https://james-forbes.com/?/posts/the-perfect-api) - pair the "Mostly Adequate Guide" with these, either while reading, or after finishing reading it, to bolt in 92 | place all of the FP magic. These will also serve as a good cheatsheet for later. 93 | * :coffee: [Some History of Functional Programming Languages](https://www.cs.kent.ac.uk/people/staff/dat/tfp12/tfp12.pdf) - Turner summarizes part of the history of FP languages. Good to skim and to get a feeling of the evolution. 94 | * :pushpin: [Introduction to Functional Programming](https://www.amazon.com/Introduction-Functional-Programming-Prentice-Hall-Paperback/dp/B00OVNLJTS) - Wadler and Bird's classic. Many FP concepts first introduced here. Search on Google for more usable copies. 95 | * :pushpin: [What's a Transducer](http://raganwald.com/2017/04/30/transducers.html) - A modern take on explaining transducers with Javascript (ES6), but read it any way because it intros map, filter, reduce and so on. 96 | 97 | 98 | 99 | ## Patterns 100 | 101 | _Design patterns in depth_ 102 | 103 | * :pushpin: :mortar_board: [MVC](http://heim.ifi.uio.no/~trygver/1979/mvc-1/1979-05-MVC.pdf), [MVP](http://www.wildcrest.com/Potel/Portfolio/mvp.pdf) - the original articles. MV-[wildcard] patterns will keep popping up, 104 | but you must understand their original context, and see that it was so different than what they are used for today. 105 | 106 | 107 | 108 | 109 | ## Data 110 | 111 | _How to treat data, and datastructures_ 112 | 113 | - :pineapple: :coffee: [Log structured merge trees](http://www.benstopford.com/2015/02/14/log-structured-merge-trees/) - the data structure that powers 114 | a lot of recent big data products. 115 | 116 | 117 | # Ops 118 | 119 | _Servers, ops, and compute centers_ 120 | 121 | - [My (Rob's) Philosophy on Alerting](https://docs.google.com/document/d/199PqyG3UsyXlwieHaqbGiWVa8eMWi8zzAn0YfcApr8Q/edit) - The orignal raw document that kickstarted [this case study](https://www.oreilly.com/ideas/monitoring-distributed-systems) by Rob Ewaschuck. I prefer 122 | the raw original because it passes a sense of "There's no silver bullet" so I treat it as a discusion or knowledge sharing. Don't take 123 | it as the prescriptive way to go (and, of course, do read the [Google SRE book](https://landing.google.com/sre/book.html), etc.) 124 | 125 | 126 | 127 | 128 | ## Programming Languages 129 | 130 | _High precision pointers into various programming languages_ 131 | 132 | ### Go 133 | 134 | - [Golang Notes](https://github.com/luciotato/golang-notes) - coverage of several subjects from a programmer's perspective, including a bit of internals. 135 | 136 | 137 | 138 | 139 | ## Effectiveness 140 | 141 | _Be a more effective engineer_ 142 | 143 | - :coffee: [How to read a book in a week](https://hbr.org/2016/02/how-to-read-a-book-a-week) - this is good for some nonfiction books, but all academic papers. 144 | - :coffee: [How to read an academic paper](http://blizzard.cs.uwaterloo.ca/keshav/home/Papers/data/07/paper-reading.pdf) - changed the way I read papers and made me immediately more effective. Wish I had that when I was in university. 145 | 146 | 147 | ## Frameworks 148 | 149 | _High precision pointers into various frameworks_ 150 | 151 | ### React 152 | 153 | - :coffee: :pineapple: [React implementation 154 | notes](https://facebook.github.io/react/contributing/implementation-notes.html) 155 | and the [guiding 156 | principles](https://facebook.github.io/react/contributing/design-principles.html). They are simple to understand and 157 | well crafted. Read these even if you don't know what React is. If you're 158 | still not convinced, read [their implementation 159 | principles](https://facebook.github.io/react/contributing/design-principles.html#implementation), it felt like my 20 years of experience trying to build perfect APIs distilled into a small number of simple ideas. 160 | 161 | 162 | 163 | ## Mechanics 164 | 165 | _Focusing on tools and practices_ 166 | 167 | ### Programming Languages 168 | 169 | - :wrench: [Learn X in Y Minutes](https://learnxinyminutes.com) - a highly 170 | effective website for polyglots, for refreshers, and the gist of many 171 | programming languages. Use this if you're already experienced with 172 | programming. 173 | 174 | 175 | ### Vim 176 | 177 | - :pushpin: :coffee: [Seven habits of effective text editing](http://www.moolenaar.net/habits.html) 178 | - :wrench: [Vim Bootstrap](http://www.vim-bootstrap.com/) - a great `vimrc` generator with sane defaults. 179 | - :coffee: [A Good Vimrc](https://dougblack.io/words/a-good-vimrc.html) - a soft and reasonable introduction to vim configuration that makes sense. 180 | 181 | 182 | 183 | 184 | 185 | ## You 186 | 187 | _About your own self, mental modes, and more_ 188 | 189 | ### Habits and Learning 190 | 191 | - :coffee: [Summary of Super Human by Habit](https://sivers.org/book/SuperhumanByHabit) by Derek Sivers. Most of the points listed are great and some are so-so; you can get the gist of the ideas without reading the book. 192 | 193 | 194 | ## Next Steps 195 | 196 | _Where to go from here?_ 197 | 198 | You might want to discover things on your own. When you're done with this list, I'd recommend spending some time with these. 199 | 200 | - [papers we love](https://github.com/papers-we-love/papers-we-love) - an amazing compilation of academic papers on many subject. Remember, there _are_ probably papers that are missing from this repo out of copyright reasons. 201 | - [Microsoft research portal](http://academic.research.microsoft.com/) - Microsoft grabbed a lot of pioneers in computer science, there's plenty of great content there. 202 | - [Google research](http://research.google.com/pubs/papers.html) - same for Google. 203 | 204 | --------------------------------------------------------------------------------