diff --git a/README.md b/README.md index d86d86f..edd1d31 100644 --- a/README.md +++ b/README.md @@ -40,6 +40,7 @@ If you want to be a reliability engineer or systems engineer, study more from th - [About Video Resources](#about-video-resources) - [Interview Process & General Interview Prep](#interview-process--general-interview-prep) - [Pick One Language for the Interview](#pick-one-language-for-the-interview) +- [Book List](#book-list) - [Before you Get Started](#before-you-get-started) - [What you Won't See Covered](#what-you-wont-see-covered) - [Prerequisite Knowledge](#prerequisite-knowledge) @@ -312,6 +313,140 @@ Read more about choices: You'll see some C, C++, and Python learning included below, because I'm learning. There are a few books involved, see the bottom. +## Book List + +This is a shorter list than what I used. This is abbreviated to save you time. + +### Interview Prep + +- [ ] [Programming Interviews Exposed: Secrets to Landing Your Next Job, 2nd Edition](http://www.wiley.com/WileyCDA/WileyTitle/productCd-047012167X.html) + - answers in C++ and Java + - recommended in Google candidate coaching + - this is a good warm-up for Cracking the Coding Interview + - not too difficult, most problems may be easier than what you'll see in an interview (from what I've read) +- [ ] [Cracking the Coding Interview, 6th Edition](http://www.amazon.com/Cracking-Coding-Interview-6th-Programming/dp/0984782850/) + - answers in Java + - recommended on the [Google Careers site](https://www.google.com/about/careers/how-we-hire/interview/) + - If you see people reference "The Google Resume", it was a book replaced by "Cracking the Coding Interview". + +If you have tons of extra time: + +- [ ] [Elements of Programming Interviews](https://www.amazon.com/Elements-Programming-Interviews-Insiders-Guide/dp/1479274836) + - all code is in C++, very good if you're looking to use C++ in your interview + - a good book on problem solving in general. + +### Computer Architecture + +If short on time: + +- [ ] [Write Great Code: Volume 1: Understanding the Machine](https://www.amazon.com/Write-Great-Code-Understanding-Machine/dp/1593270038) + - The book was published in 2004, and is somehat outdated, but it's a terrific resource for understanding a computer in brief. + - The author invented HLA, so take mentions and examples in HLA with a grain of salt. Not widely used, but decent examples of what assembly looks like. + - These chapters are worth the read to give you a nice foundation: + - Chapter 2 - Numeric Representation + - Chapter 3 - Binary Arithmetic and Bit Operations + - Chapter 4 - Floating-Point Representation + - Chapter 5 - Character Representation + - Chapter 6 - Memory Organization and Access + - Chapter 7 - Composite Data Types and Memory Objects + - Chapter 9 - CPU Architecture + - Chapter 10 - Instruction Set Architecture + - Chapter 11 - Memory Architecture and Organization + +If you have more time (I want this book): + +- [ ] [Computer Architecture, Fifth Edition: A Quantitative Approach](https://www.amazon.com/dp/012383872X/) + - For a richer, more up-to-date (2011), but longer treatment + +### Language Specific + +**You need to choose a language for the interview (see above).** Here are my recommendations by language. I don't have resources for all languages. I welcome additions. + +If you read though one of these, you should have all the data structures and algoritms knowledge you'll need to start doing coding problems. +**You can skip all the video lectures in this project**, unless you'd like a review. + +[Additional language-specific resources here.](programming-language-resources.md) + +### C++ + +I haven't read these two, but they are highly rated and written by Sedgewick. He's awesome. + +- [ ] [Algorithms in C++, Parts 1-4: Fundamentals, Data Structure, Sorting, Searching](https://www.amazon.com/Algorithms-Parts-1-4-Fundamentals-Structure/dp/0201350882/) +- [ ] [Algorithms in C++ Part 5: Graph Algorithms](https://www.amazon.com/Algorithms-Part-Graph-3rd-Pt-5/dp/0201361183/) + +If you have a better recommendation for C++, please let me know. Looking for a comprehensive resource. + +### Java + +- [ ] [Algorithms (Sedgewick and Wayne)](https://www.amazon.com/Algorithms-4th-Robert-Sedgewick/dp/032157351X/) + - videos with book content (and Sedgewick!): + - [Algorithms I](https://www.youtube.com/user/algorithmscourses/playlists?view=50&sort=dd&shelf_id=2) + - [Algorithms II](https://www.youtube.com/user/algorithmscourses/playlists?shelf_id=3&view=50&sort=dd) + +OR: + +- [ ] [Data Structures and Algorithms in Java](https://www.amazon.com/Data-Structures-Algorithms-Michael-Goodrich/dp/1118771338/) + - by Goodrich, Tamassia, Goldwasser + - used as optional text for CS intro course at UC Berkeley + - see my book report on the Python version below. This book covers the same topics. + +### Python + +- [ ] [Data Structures and Algorithms in Python](https://www.amazon.com/Structures-Algorithms-Python-Michael-Goodrich/dp/1118290275/) + - by Goodrich, Tamassia, Goldwasser + - I loved this book. It covered everything and more. + - Pythonic code + - my glowing book report: https://googleyasheck.com/book-report-data-structures-and-algorithms-in-python/ + + +### Optional Books + +**Some people recommend these, but I think it's going overboard, unless you have many years of software engineering experience and expect a much harder interview:** + +- [ ] [Algorithm Design Manual](http://www.amazon.com/Algorithm-Design-Manual-Steven-Skiena/dp/1849967202) (Skiena) + - As a review and problem recognition + - The algorithm catalog portion is well beyond the scope of difficulty you'll get in an interview. + - This book has 2 parts: + - class textbook on data structures and algorithms + - pros: + - is a good review as any algorithms textbook would be + - nice stories from his experiences solving problems in industry and academia + - code examples in C + - cons: + - can be as dense or impenetrable as CLRS, and in some cases, CLRS may be a better alternative for some subjects + - chapters 7, 8, 9 can be painful to try to follow, as some items are not explained well or require more brain than I have + - don't get me wrong: I like Skiena, his teaching style, and mannerisms, but I may not be Stony Brook material. + - algorithm catalog: + - this is the real reason you buy this book. + - about to get to this part. Will update here once I've made my way through it. + - To quote Yegge: "More than any other book it helped me understand just how astonishingly commonplace + (and important) graph problems are – they should be part of every working programmer's toolkit. The book also + covers basic data structures and sorting algorithms, which is a nice bonus. But the gold mine is the second half + of the book, which is a sort of encyclopedia of 1-pagers on zillions of useful problems and various ways to solve + them, without too much detail. Almost every 1-pager has a simple picture, making it easy to remember. This is a + great way to learn how to identify hundreds of problem types." + - Can rent it on kindle + - Half.com is a great resource for textbooks at good prices. + - Answers: + - [Solutions](http://www.algorithm.cs.sunysb.edu/algowiki/index.php/The_Algorithms_Design_Manual_(Second_Edition)) + - [Solutions](http://blog.panictank.net/category/algorithmndesignmanualsolutions/page/2/) + - [Errata](http://www3.cs.stonybrook.edu/~skiena/algorist/book/errata) + +- [ ] [Introduction to Algorithms](https://www.amazon.com/Introduction-Algorithms-3rd-MIT-Press/dp/0262033844) + - **Important:** Reading this book will only have limited value. This book is a great review of algorithms and data structures, but won't teach you how to write good code. You have to be able to code a decent solution efficiently. + - To quote Yegge: "But if you want to come into your interviews *prepped*, then consider deferring your application until you've made your way through that book." + - Half.com is a great resource for textbooks at good prices. + - aka CLR, sometimes CLRS, because Stein was late to the game + +- [ ] [Programming Pearls](http://www.amazon.com/Programming-Pearls-2nd-Jon-Bentley/dp/0201657880) + - The first couple of chapters present clever solutions to programming problems (some very old using data tape) but + that is just an intro. This a guidebook on program design and architecture, much like Code Complete, but much shorter. + +- ~~"Algorithms and Programming: Problems and Solutions" by Shen~~ + - A fine book, but after working through problems on several pages I got frustrated with the Pascal, do while loops, 1-indexed arrays, and unclear post-condition satisfaction results. + - Would rather spend time on coding problems from another book or online coding problems. + + ## Before you Get Started This list grew over many months, and yes, it kind of got out of hand. @@ -1232,7 +1367,7 @@ interview books, too, but I found this outstanding: No whiteboard at home? That makes sense. I'm a weirdo and have a big whiteboard. Instead of a whiteboard, pick up a large drawing pad from an art store. You can sit on the couch and practice. This is my "sofa whiteboard". -I added the pen in the photo for scale. +I added the pen in the photo for scale. If you use a pen, you'll wish you could erase. Gets messy quick. ![my sofa whiteboard](https://dng5l3qzreal6.cloudfront.net/2016/Oct/art_board_sm_2-1476233630368.jpg) @@ -1244,81 +1379,13 @@ Supplemental: - [Exercises for getting better at a given language](http://exercism.io/languages) **Read and Do Programming Problems (in this order):** + - [ ] [Programming Interviews Exposed: Secrets to Landing Your Next Job, 2nd Edition](http://www.wiley.com/WileyCDA/WileyTitle/productCd-047012167X.html) - - recommended in Google candidate coaching - - this is a good warm-up for Cracking the Coding Interview - - not too difficult, most problems may be easier than what you'll see in an interview (from what I've read) + - answers in C, C++ and Java - [ ] [Cracking the Coding Interview, 6th Edition](http://www.amazon.com/Cracking-Coding-Interview-6th-Programming/dp/0984782850/) - - recommended on the [Google Careers site](https://www.google.com/about/careers/how-we-hire/interview/) - - If you see people reference "The Google Resume", it was a book replaced by "Cracking the Coding Interview". - -**If you have time** -- [ ] [Grokking Algorithms](https://www.amazon.com/Grokking-Algorithms-illustrated-programmers-curious/dp/1617292230) - - This is a great book for review of CS concepts, and a very quick read. - - Did not have as much Python code as I had hoped for, but has a great chapter on dynamic programming, so I worked through that and finally got the concept. -- [ ] [Write Great Code: Volume 1: Understanding the Machine](https://www.amazon.com/Write-Great-Code-Understanding-Machine/dp/1593270038) - - The book was published in 2004, and is a bit outdated, but it's a terrific resource for understanding a computer. - - The author invented HLA, so take mentions and examples in HLA with a grain of salt. Not widely used, but decent examples of what assembly looks like. - - These chapters are worth the read to give you a nice foundation: - - Chapter 2 - Numeric Representation - - Chapter 3 - Binary Arithmetic and Bit Operations - - Chapter 4 - Floating-Point Representation - - Chapter 5 - Character Representation - - Chapter 6 - Memory Organization and Access - - Chapter 7 - Composite Data Types and Memory Objects - - Chapter 9 - CPU Architecture - - Chapter 10 - Instruction Set Architecture - - Chapter 11 - Memory Architecture and Organization - - For a richer, more up-to-date (2011), but longer treatment, pick up [Computer Architecture, Fifth Edition: A Quantitative Approach](https://www.amazon.com/dp/012383872X/) -- [ ] [Elements of Programming Interviews](https://www.amazon.com/Elements-Programming-Interviews-Insiders-Guide/dp/1479274836) - - all code is in C++, if you're looking to use C++ in your interview - - a good book on problem solving in general. - -**Perhaps** - -- [ ] [Programming Pearls](http://www.amazon.com/Programming-Pearls-2nd-Jon-Bentley/dp/0201657880) - - The first couple of chapters present clever solutions to programming problems (some very old using data tape) but - that is just an intro. This a guidebook on program design and architecture, much like Code Complete, but much shorter. -- [ ] [Algorithm Design Manual](http://www.amazon.com/Algorithm-Design-Manual-Steven-Skiena/dp/1849967202) (Skiena) - - As a review and problem recognition - - The algorithm catalog portion is well beyond the scope of difficulty you'll get in an interview. - - This book has 2 parts: - - class textbook on data structures and algorithms - - pros: - - is a good review as any algorithms textbook would be - - nice stories from his experiences solving problems in industry and academia - - code examples in C - - cons: - - can be as dense or impenetrable as CLRS, and in some cases, CLRS may be a better alternative for some subjects - - chapters 7, 8, 9 can be painful to try to follow, as some items are not explained well or require more brain than I have - - don't get me wrong: I like Skiena, his teaching style, and mannerisms, but I may not be Stony Brook material. - - algorithm catalog: - - this is the real reason you buy this book. - - about to get to this part. Will update here once I've made my way through it. - - To quote Yegge: "More than any other book it helped me understand just how astonishingly commonplace - (and important) graph problems are – they should be part of every working programmer's toolkit. The book also - covers basic data structures and sorting algorithms, which is a nice bonus. But the gold mine is the second half - of the book, which is a sort of encyclopedia of 1-pagers on zillions of useful problems and various ways to solve - them, without too much detail. Almost every 1-pager has a simple picture, making it easy to remember. This is a - great way to learn how to identify hundreds of problem types." - - Can rent it on kindle - - Half.com is a great resource for textbooks at good prices. - - Answers: - - [Solutions](http://www.algorithm.cs.sunysb.edu/algowiki/index.php/The_Algorithms_Design_Manual_(Second_Edition)) - - [Solutions](http://blog.panictank.net/category/algorithmndesignmanualsolutions/page/2/) - - [Errata](http://www3.cs.stonybrook.edu/~skiena/algorist/book/errata) - -- [ ] [Introduction to Algorithms](https://www.amazon.com/Introduction-Algorithms-3rd-MIT-Press/dp/0262033844) - - **Important:** Reading this book will only have limited value. This book is a great review of algorithms and data structures, but won't teach you how to write good code. You have to be able to code a decent solution efficiently. - - To quote Yegge: "But if you want to come into your interviews *prepped*, then consider deferring your application until you've made your way through that book." - - Half.com is a great resource for textbooks at good prices. - - aka CLR, sometimes CLRS, because Stein was late to the game - -**Removed** -- ~~"Algorithms and Programming: Problems and Solutions" by Shen~~ - - A fine book, but after working through problems on several pages I got frustrated with the Pascal, do while loops, 1-indexed arrays, and unclear post-condition satisfaction results. - - Would rather spend time on coding problems from another book or online coding problems. + - answers in Java +See [Book List above](#book-list) ## Coding exercises/challenges