├── CODE_OF_CONDUCT.md ├── CONTRIBUTING.md ├── Curriculum.md ├── LICENSE ├── PULL_REQUEST_TEMPLATE.md └── readme.md /CODE_OF_CONDUCT.md: -------------------------------------------------------------------------------- 1 | # Contributor Covenant Code of Conduct 2 | 3 | ## Our Pledge 4 | 5 | In the interest of fostering an open and welcoming environment, we as contributors and maintainers pledge to making participation in our project and our community a harassment-free experience for everyone, regardless of age, body size, disability, ethnicity, gender identity and expression, level of experience, nationality, personal appearance, race, religion, or sexual identity and orientation. 6 | 7 | ## Our Standards 8 | 9 | Examples of behavior that contributes to creating a positive environment include: 10 | 11 | * Using welcoming and inclusive language 12 | * Being respectful of differing viewpoints and experiences 13 | * Gracefully accepting constructive criticism 14 | * Focusing on what is best for the community 15 | * Showing empathy towards other community members 16 | 17 | Examples of unacceptable behavior by participants include: 18 | 19 | * The use of sexualized language or imagery and unwelcome sexual attention or advances 20 | * Trolling, insulting/derogatory comments, and personal or political attacks 21 | * Public or private harassment 22 | * Publishing others' private information, such as a physical or electronic address, without explicit permission 23 | * Other conduct which could reasonably be considered inappropriate in a professional setting 24 | 25 | ## Our Responsibilities 26 | 27 | Project maintainers are responsible for clarifying the standards of acceptable behavior and are expected to take appropriate and fair corrective action in response to any instances of unacceptable behavior. 28 | 29 | Project maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any contributor for other behaviors that they deem inappropriate, threatening, offensive, or harmful. 30 | 31 | ## Scope 32 | 33 | This Code of Conduct applies both within project spaces and in public spaces when an individual is representing the project or its community. Examples of representing a project or community include using an official project e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event. Representation of a project may be further defined and clarified by project maintainers. 34 | 35 | ## Enforcement 36 | 37 | Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project lead at `abhishekbhattacherjee@live.com`. The project lead will review and investigate all complaints, and will respond in a way that it deems appropriate to the circumstances. The project lead is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately. 38 | 39 | Project maintainers who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent repercussions as determined by the project's leader. 40 | 41 | ## Attribution 42 | 43 | This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, available at [http://contributor-covenant.org/version/1/4][version] 44 | 45 | [homepage]: http://contributor-covenant.org 46 | [version]: http://contributor-covenant.org/version/1/4/ 47 | -------------------------------------------------------------------------------- /CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | # Contributing to CS Resources 2 | 3 | First off, thanks for contributing to this book list (it's not as lame as it sounds)! Although suggestions are welcome from everyone and in every form, it needs to follow a little structure unless the end-goal is to descend into a chaotic list of books. Apart from book suggestions, there's a host of other things to keep in mind when contributing to this repository (I know, I know, it's just a list). 4 | 5 | ## Table of Contents 6 | 7 | - [Code of Conduct](#code-of-conduct.md) 8 | - [Why Contribute?](#why-contribute) 9 | - [Ways to Contribute](#ways-to-contribute) 10 | - [I want to suggest something like grammar or spelling!](#i-want-to-suggest-spelling-formatting-grammar-errors-or-basically-anything-that-isnt-related-to-books-or-material) 11 | - [I want to suggest a book!](#i-want-to-suggest-a-book) 12 | - [I want to add an entire topic!](#i-want-to-add-an-entire-topic) 13 | - [I want to suggest better ways to organise this list!](#i-want-to-suggest-better-ways-to-organise-this-list) 14 | - [I want to do something else!](#i-want-to-do-something-not-listed-above) 15 | - [Issue Guidelines](#issue-guidelines) 16 | - [Pull Request Guidelines](#pull-request-guidelines) 17 | - [Style Guide](#style-guide) 18 | 19 | ## Code of Conduct 20 | 21 | This repository follows the Contributor Covenant Code of Conduct. By any form of participation, the contributor is expected to uphold the aforementioned code. Any unacceptable behaviour may be reported to `abhishekbhattacherjee@live.com`. 22 | 23 | ## Why Contribute? 24 | 25 | In the [readme](readme.md/#cs-curriculum-textbooks-and-references), I had described that I was unable to find a suitable list of books to learn subject matter from. It is therefore the goal of this repository, not only for me but for anyone interested in any topic of Computer Science, to have a comprehensive list of textbooks to refer to. Such a list would be a great way to point to the sources that people already in the field use(d). 26 | 27 | Apart from that, I also found a frustrating problem that has happened more than a few times now. My curriculum constantly recommended some book (obviously in the best interests of the curriculum) only for me to find out halfway through reading it that there's another _way_ better book that blows the current one out of the water, whereupon I no longer have enough time to complete the book that I want to. I hope that stops happening to me and everyone else out there. Hopefully, this is sufficient motivation for YOU to contribute to this repository! Go ahead to the next section! 28 | 29 | ## Ways to Contribute 30 | 31 | It is pretty obvious that the list will not suit everyone's taste, so contribution is strongly encouraged. A diverse opinion would only be better for future readers. 32 | 33 | ### I want to suggest spelling, formatting, grammar errors, or basically anything that isn't related to books or material! 34 | 35 | Come on over to the [relevant Pull Request Guidelines](#submitting-a-grammar-spelling-or-other-correction)! You sure as hell can expect your name in the **Contributors** list. 36 | 37 | ### I want to suggest a book! 38 | 39 | Thank God you're here! Don't hesitate at all! Although it'd be great if you've read the book yourself and have thoughts to share, it's not necessary. Now there's two ways this could go : 40 | 41 | - **The book you're suggesting isn't listed** 42 | - Money! If it falls under an existing topic, go ahead and add it. But before that, remember that I like order. It makes our lives much easier. So, take a moment and go through the [book suggestion Pull Request Guidelines](#submitting-a-book-suggestion). 43 | - If it's from a topic not listed, you may have hit the jackpot here! If you're lazy like me and only want to suggest a book, submit a Pull Request following the [relevant guidelines](#submitting-a-book-suggestion-for-a-non-existent-topic). But if you've got more than just a book to offer, [see below](#i-want-to-add-an-entire-topic). 44 | 45 | 46 | - **The book you're suggesting is listed** 47 | - Don't worry! Go ahead and tell me why you wanted to suggest the book in mind! You can also suggest relevant resources, courses linked on the web, perhaps your personal notes you made while studying, the possibilities are endless. Go through the [relevant guidelines](#submitting-book-related-info) and submit a Pull Request! Personal experiences have not been categorised as of now. A [relevant issue discussing the matter](https://github.com/AB1908/CS-Books/issues/19) has been opened. Join the discussion if you have ideas! 48 | 49 | ### I want to add an entire topic! 50 | 51 | You. I love you. You can go ahead and add the whole damn thing in a fork, keeping the [Pull Request Template](PULL_REQUEST_TEMPLATE.md) in mind. Have a cookie. But make sure you're careful enough to follow the template properly. With great power comes great responsibility! Also go through [the Pull Request Guidelines](#submitting-an-entire-topic). 52 | 53 | ### I want to suggest better ways to organise this list! 54 | 55 | Come to papa! You might have noticed that this project doesn't have a fancy discussion channel, so come submit your ideas over at Issue #18. Hopefully, it'll be a big help! 56 | 57 | ### I want to do something not listed above! 58 | 59 | Well, er, submit an issue and (hopefully) follow up with a pull request? The kinds of issues I expect to see here are contributions towards the "Community Docs", but I expect surprises. 60 | 61 | ### Note 62 | 63 | It is strongly recommended that the book(s) suggested be suitable to approach the majority of the topic they fall under. Such a responsibility is left to discretion of the contributor. 64 | 65 | ## Issue guidelines 66 | 67 | - Include a relevant title describing the issue in short. 68 | - Write a detailed description of the issue. 69 | - Suggest your ideas to remedy the issue and submit them in a Pull Request if possible. Make sure to abide by [Pull Request Guidlines](CONTRIBUTING.md/#pull-request-guidelines). 70 | 71 | ## Pull Request Guidelines 72 | 73 | A Pull Request can only be created once you have forked the repository and made changes to the fork. So if you haven't already, go ahead and fork it! Then, create a new branch labeled `relevant-topic-name` where you'll make all your commits and make changes according to the guidelines described below. All your commits should (ideally) follow the [Style Guide](#style-guide). You can directly view the template for formatting [here](PULL_REQUEST_TEMPLATE.md). 74 | 75 | In case you wish to modify this template, first join the discussion on Issue #18 and propose the changes. This is because the changes (if accepted) need to be made to the entire list. 76 | 77 | ### Submitting a grammar, spelling or other correction 78 | 79 | Make all the necessary changes in a fork and it'll be merged by the maintainer(s) ASAP! Please try to explain the mistake (unless it's a trivial spelling mistake) when submitting and be patient with the maintainer(s). 80 | 81 | ### Submitting a book suggestion for an existing topic 82 | 83 | If the book isn't already in the list, submit a Pull Request with the book(s) added under the appropriate topic in either the "**Standard Textbooks**" or "**Alternative/Supplementary**" section. I shouldn't have missed standard textbooks, but if it does happen (it probably will), I strongly recommended **adding a reference to the source** declaring it as a standard textbook in the "**Notes**" section for the topic. See the [Pull Request Template](PULL_REQUEST_TEMPLATE.md) for the formatting guide to follow. 84 | 85 | ### Submitting a book suggestion for a non-existent topic 86 | 87 | You'll need to make the topic anew while closely adhering to the formatting in the [Pull Request Template](PULL_REQUEST_TEMPLATE.md). It's not necessary that you submit the topic in complete, but make sure to make the proper formatting before any book suggestion, no matter how small. 88 | 89 | ### Submitting book-related info 90 | 91 | Personal experience with a book is extremely valuable here. Submit a pull request having made the following changes in a fork: 92 | 93 | - All personal experiences and other info should go in a separate file labeled [`personal-experiences.md`](personal-experiences.md). Simply look for the appropriate topic header, add the relevant `[#]`(be a little careful with this one) and write away! Don't forget to tag yourself at the end with your GitHub handle! 94 | 95 | If you have other info like some helpful resources for the book, a guide on what to read, a relevant instructor's course, personal notes, errata or anything else at all that would be helpful to future readers, please add them in the "**Notes**" section under the relevant topic, with an appropriate `[#]`. Make sure you add your link in the correct category (with the page title/appropriate description) under "**References**" too! See the [Pull Request Template](PULL_REQUEST_TEMPLATE.md) for the formatting guide to follow. 96 | 97 | ### Submitting an entire topic 98 | 99 | This isn't as hard is I've built it up to be but it takes a good chunk of time. In your fork, make commits after every stage adhering closely to the [commit style I've described](#style-guide). If you're unsure of a workflow or why I recommend that commit style, take a look at an [old commit of mine](https://github.com/AB1908/CS-Books/commit/83d0dd8ca9ab9a2fa15a4dc459b83e08947767b3) to get an idea. I usually make changes incrementally and then while merging the branch, I squash all the commits so they look like one nice list of steps I took. You **must** go through the [Pull Request Template](PULL_REQUEST_TEMPLATE.md), otherwise I'm going to have one hell of a time merging your Pull Request. Once you're done, you deserve an extra special thanks for your effort. 100 | 101 | ## Style Guide 102 | 103 | The formatting style for pull requests is described in the template linked above. Apart from those, I would also strongly encourage good commit messages in adherence to the following: 104 | 105 | - Use the present tense ("Add feature" not "Added feature") 106 | - Use the imperative mood ("Move cursor to..." not "Moves cursor to...") 107 | - No period/full stop after the commit message 108 | - Limit the first line to 72 characters or less 109 | - Reference issues and pull requests liberally after the first line 110 | 111 | Further resources on how to write good commit messages can be found [here](https://chris.beams.io/posts/git-commit/), [here](https://gist.github.com/robertpainsi/b632364184e70900af4ab688decf6f53), and [here](https://hackernoon.com/what-makes-a-good-commit-message-995d23687ad). If you're unfamiliar with Git in general, I'd recommend reading through the [Official Pro Git Book](https://git-scm.com/book). 112 | -------------------------------------------------------------------------------- /Curriculum.md: -------------------------------------------------------------------------------- 1 | # CS Curriculum Textbooks and References 2 | 3 | ## Table of Contents 4 | 5 | - [Data Structures and Algorithms](#data-structures-and-algorithms) 6 | - [Database Management Systems](#database-management-systems) 7 | - [Principles of Programming Languages](#principles-of-programming-languages) 8 | - [Computer Organisation and Architecture](#computer-organisation-and-architecture) 9 | - [Algorithm Design and Analysis](#algorithm-design-and-analysis) 10 | - [Theory of Computation](#theory-of-computation) 11 | - [Operating Systems](#operating-systems) 12 | - [Data Communication](#data-communication) 13 | - [Microprocessors and Microcontrollers](#microprocessors-and-microcontrollers) 14 | - [Discrete Mathematics](#discrete-mathematics) 15 | - [Computer Graphics](#computer-graphics) 16 | - [Information Theory and Coding](#information-theory-and-coding) 17 | - [Compiler Design](#compiler-design) 18 | - [Computer Networks](#computer-networks) 19 | - [Software Engineering](#software-engineering) 20 | - [Distributed Systems](#distributed-systems) 21 | - [References](#references) 22 | - [Websites](#websites) 23 | - [Courses](#courses) 24 | - [Resources](#resources) 25 | - [Miscellaneous Links](#miscellaneous-links) 26 | 27 | ## Data Structures and Algorithms 28 | 29 | ### Standard Textbooks 30 | 31 | 1. **Introduction to Data Structures with Applications** - Jean P. Tremblay and Paul G. Sorenson 32 | 2. **Data Structures and Algorithms** - Alfred V. Aho, John E. Hopcroft and Jeffrey D. Ullman 33 | 3. **Data Abstraction and Problem Solving with C++: Walls and Mirrors** - Frank M. Carrano [[1]](#DAPSC) 34 | 35 | ### Alternative/Supplementary 36 | 37 | 1. **Data Structures and Algorithm Analysis in C** - Mark Allen Weiss 38 | 2. **Algorithms in Java** - Robert Sedgewick [[2]](#AiJ) 39 | 3. **Data Structures and Algorithms in Java** - M. Goodrich, R. Tamassia, and M. Goldwasser [[3]](#DSAJ) 40 | 4. **Data Structures and Algorithms Analysis in Java** - Mark Allen Weiss [[4]](#DSAAJ) 41 | 5. **Data Structures: Abstraction and Design Using Java** - Elliot B. Koffman and Paul A. T. Wolfgang [[5]](#DSADUJ) 42 | 6. **An Introduction to Programming through C++** - Abhiram G. Ranade [[6]](#IPCPP) 43 | 7. **ADTs, Data Structures and Problem Solving** - Larry Nyhoff [[7]](#ADSPS) 44 | 8. **Data Structures, Algorithms and Applications in C++** - Sartaj Sahani 45 | 9. **Data Structures and Algorithms: Concepts, Techniques and Applications** - G. A. V. Pai 46 | 10. **Data Structures** - D. Samanta 47 | 11. **Data Structures** - Seymour Lipschutz 48 | 12. **Fundamentals of Data Structures in C** - Ellis Horowitz 49 | 13. **How to Solve it - Computer** - R. G. Dromey 50 | 14. **Data Structures Through C In Depth** - Srivastava 51 | 15. **Handbook of Algorithms and Data Structures - in Pascal and C** - G. H. Gonnet and R. Baeza-Yates 52 | 16. **Fundamentals of Data Structures in Pascal** - Ellis Horowitz and Sartaj Sahni 53 | 17. **C++ Plus Data Structures** - Nell Dale 54 | 18. **Data Structures And Algorithms Made Easy** - Narasimha Karumanchi 55 | 56 | ### Notes 57 | 58 | - This topic includes a significant overlap with the one on [Algorithm Design and Analysis](#algorithm-design-and-analysis). Many concepts carry over from this topic and one may find it useful to study them side-by-side. Many of the courses linked also may not follow a similar syllabus and may be at higher level than intended. 59 | - There are numerous amounts of online resources including lecture videos. Such a list may be found elsewhere. An online [Learning Assistant with Animations](http://courses.cs.vt.edu/~csonline/DataStructures/Lessons/index.html) on VT's website may be useful for visualisation and explanation of certain concepts. Daniel Liang has also created some relevant animations which can be found [here](http://cs.armstrong.edu/liang/animation/animation.html). USFCA also [hosts a visualiser](https://www.cs.usfca.edu/~galles/visualization/about.html) on their website and also includes instructions to create one. 60 | - [PLDS210 at UA](https://www.cs.auckland.ac.nz/software/AlgAnim/ds_ToC.html) does not have a particular reference textbook. Instead it uses a combination of many books as a source for lecture notes. Each topic has it's own list of references, which are the recommended material instead of the lecture notes. 61 | - [CMU's 15-111](https://www.andrew.cmu.edu/course/15-111-kesden/) uses an [online textbook](http://www.cs.cmu.edu/~clo/www/CMU/DataStructures/). 62 | - [CS 61BL at Berkeley](https://sp18.datastructur.es/) uses a [set of free notes](https://joshhug.gitbooks.io/hug61b/) by the instructor for the first half, and **Algorithms** by Sedgewick and Wayne for the second half. 63 | - [Data Structures and Algorithms (Level 1/C) at UoB](http://www.cs.bham.ac.uk/~jxb/dsa.html) recommends using 3 free ebooks linked on the course page. 64 | 65 | ^1 - Used as a reference for 66 | 67 | - [CS 302 at UNR](https://www.cse.unr.edu/~mgunes/cs302/cs302fa12/) but covers only Data Structures and also assumes prior background in Algorithms 68 | 69 | ^2 - Used as a reference for 70 | 71 | - [CS 226 at Princeton](https://www.cs.princeton.edu/~rs/AlgsDS07/) which is **Sedgewick's own course** 72 | 73 | ^3 - Used as a reference for 74 | 75 | - [CSE 2010 at FIT](https://cs.fit.edu/~pkc/classes/ds/) 76 | 77 | ^4 - Used as a reference for 78 | 79 | - [600.226 at JHU](http://www.cs.jhu.edu/~hager/Teaching/cs226/) 80 | - [CS 315 at UT Austin](http://www.cs.utexas.edu/users/novak/cs315.html) a set of lecture notes [hosted online](https://www.cs.utexas.edu/users/novak/cs315contents.html) are the primary material 81 | 82 | ^5 - Used as a reference for 83 | 84 | - [CS 206 at BMC](https://cs.brynmawr.edu/cs206/) 85 | 86 | ^6 - Used as a reference for 87 | 88 | - [CS 213(M) at IITB](https://www.cse.iitb.ac.in/~ranade/cs213/) which is taken by **Ranade** 89 | 90 | ^7 - Used as a reference for 91 | 92 | - [CS 240 at SUNY, B](http://www.cs.binghamton.edu/~steflik/cs240/cs240.htm) but covers only Data Structures 93 | 94 | [↑ Back to Table of Contents](#table-of-contents) 95 | 96 | ## Database Management Systems 97 | 98 | ### Standard Textbooks 99 | 100 | 1. **Database Management Systems** - Johannes Gehrke and Raghu Ramakrishnan [[1]](#DMS) 101 | 2. **Database System Concepts** - Abraham Silberschatz, Henry F. Korth & S. Sudarshan [[2]](#DSC) 102 | 3. **Readings in Database Systems** - Joseph M. Hellerstein and Michael Stonebraker (*The (Databases) Red Book*) [[3]](#TDRB) 103 | 104 | ### Alternative/Supplementary 105 | 106 | 1. **Principles of Database Systems** - Jeffrey D. Ullman 107 | 2. **An Introduction to Database System** - B. Desai 108 | 3. **An Introduction to Database Systems** - Christopher J. Date 109 | 4. **Fundamentals of Database Systems** - R. Elmasri, S. Navathe, S. B. Navathe, R. Sunderraman 110 | 5. **Database Systems: The Complete Book** - Hector Garcia-Molina, Jeffrey D. Ullman and Jennifer Widom [[4]](#DSCB) 111 | 6. **Transaction Processing: Concepts and Techniques** - Jim Gray and Andreas Reuter 112 | 7. **A First Course in Database Systems** - Jeffrey Ullman and Jennifer Widom [[5]](#FCDS) 113 | 8. **Database Systems** - Carolyn E. Begg and Thomas M. Connolly 114 | 9. **Database Concepts** - David M. Kroenke and David J. Auer 115 | 10. **Physical Database Design: the database professional's guide to exploitingindexes, views, storage, and more** - T. Teorey, S. Lightstone and T. Nadeau 116 | 11. **Database Modeling & Design: Logical Design** - T. Teorey, S. Lightstone and T. Nadeau 117 | 118 | ### Notes 119 | 120 | - This is a rather modern theoretical topic which is the backbone of many systems we commonly use. Database books are also not available in as much variety as the other topics. 121 | - [TYCS](https://teachyourselfcs.com/#databases) recommends going through [video lectures from Berkeley](https://archive.org/details/UCBerkeley_Course_Computer_Science_186) before textbooks. 122 | 123 | ^1 - Used as the reference for 124 | 125 | - [CS 186 at Berkeley](http://www.cs186berkeley.net/home) 126 | - [CS 4320/4321 at Cornell](http://www.cs.cornell.edu/courses/cs4320/2008fa/) 127 | - [COMS 4111 at CU](http://www.cs.columbia.edu/~coms4111/ewu.html) 128 | - [Introductory Databases at UoB](http://www.cs.bham.ac.uk/~rjh/courses/IntroToDBs/2017-18/index.htm) 129 | - [CMPT 354-D1 at SFU](http://www.cs.sfu.ca/CourseCentral/354/rfrank/course_information.html) 130 | - [CS333 at USFCA](https://www.cs.usfca.edu/~ejung/courses/333/index.html) 131 | - [CMPSC 431W at PSU](http://www.cse.psu.edu/%7Eyul189/cmpsc431w/index.html) 132 | - [EECS 339 at NWU](https://www.mccormick.northwestern.edu/eecs/courses/descriptions/339.html) (Note: Syllabus page only) 133 | - [CS/SE 4347 at UT Dallas](https://www.utdallas.edu/~muratk/courses/undb07.html) 134 | - [CS662 at UoV](http://www.cs.virginia.edu/~son/cs662.s06/) 135 | 136 | ^2 - Used as the reference for 137 | 138 | - [CS 23500/33550 at UoC](https://www.classes.cs.uchicago.edu/archive/2017/winter/23500-1/syllabus.html) (Note: Syllabus page only) 139 | - [15-445/645 at CMU](https://15445.courses.cs.cmu.edu/fall2017/) 140 | - [CS 348 at UoW Canada](https://cs.uwaterloo.ca/~david/cs348/) along with [^](#DMS)1 141 | 142 | ^3 - It is the recommended book on [TYCS](https://teachyourselfcs.com/#databases). Used as the reference for 143 | 144 | - [ECS 165A at UC Davis](http://web.cs.ucdavis.edu/~green/courses/ecs165a-w11/) 145 | 146 | ^4 - Used as the reference for 147 | 148 | - [CS145 at Stanford](http://web.stanford.edu/class/cs145/) 149 | 150 | ^5 - Used as the reference for 151 | 152 | - [CS x265 at VU](https://my.vanderbilt.edu/cs265/) but strongly recommends going through **Jennifer Widom's** self paced ["**Databases Course**" on Stanford Lagunita](https://lagunita.stanford.edu/courses/DB/2014/SelfPaced/about) 153 | 154 | [↑ Back to Table of Contents](#table-of-contents) 155 | 156 | ## Principles of Programming Languages 157 | 158 | ### Standard Textbooks 159 | 160 | 1. **Essentials of Programming Languages** - Daniel P. Friedman, Mitchell Wand and Christopher T. Haynes (*EOPL*) [[1]](#EOPL) 161 | 2. **Concepts in Programming Languages** - John C. Mitchell [[2]](#CPLref) 162 | 3. **Programming Languages: Application and Interpretation** - S. Krishnamurthi (*PLAI*) [[3]](#PLAI) 163 | 164 | ### Alternative/Supplementary 165 | 166 | 1. **Programming Language Pragmatics** - Michael L. Scott [[4]](#PLP) 167 | 2. **Types and Programming Languages** - Benjamin C. Pierce (*TAPL*) [[5]](#TAPL) 168 | 3. **A Formal Semantics of Programming Languages: An Introduction** - Glynn Winskel [[6]](#FSPL) 169 | 4. **Structure and Interpretation of Computer Programs** - Harold Abelson, Gerald Jay Sussman and Julie Sussman (*SICP*) [[7]](#SICP) 170 | 5. **Concepts of Programming Languages** - Robert W. Sebesta [[8]](#COPL) 171 | 6. **Practical Foundations of Programming Languages** - Robert Harper [[9]](#PLPL) 172 | 7. **Programming Languages: Design and Implementation** - T. W. Prat & M. V. Zelkowitz [[10]](#PLDI) 173 | 8. **Programming Languages: Principles & Practices** - Kenneth C. Louden [[11]](#PLPPR) 174 | 9. **Programming Languages: Principles and Paradigms** - Maurizio Gabbrielli and Simone Martini [[12]](#PLPPA) 175 | 10. **Programming Languages – Concepts & Constructs** - Ravi Sethi 176 | 11. **Foundations for Programming Languages** - John C. Mitchell 177 | 12. **The Lambda Calculus: Its Syntax and Semantics** - H. P. Barendregt 178 | 13. **Principles of Programming Languages** - Chopra Rajiv 179 | 14. **Principles of Programming Languages** - Dowek 180 | 15. **Design Concepts in Programming Languages** - Franklyn Turbak and David Gifford 181 | 16. **Concepts, Techniques and Models of Computer Programming** - Peter Van Roy and Seif Haridi 182 | 17. **Paradigms of Artificial Intelligence Programming: Case Studies in Common Lisp** - Peter Norvig 183 | 18. **Theories of Programming Languages** - John C. Reynolds [[13]](#TOPL) 184 | 19. **Type Theory and Functional Programming** - Simon Thompson 185 | 186 | ### Notes 187 | 188 | - **Benjamin Pierce** has a [**list of Great Works in Programming Languages**](https://www.cis.upenn.edu/~bcpierce/courses/670Fall04/GreatWorksInPL.shtml). 189 | - [CSE526 at SUNY, SB](https://bsd7.cs.stonybrook.edu/~cse526/) has a list of readings from different books and papers in addition to the lecture notes. 190 | - [Principles of Programming Langugages at DEIB-P](https://home.deib.polimi.it/pradella/PL.html) has a list of readings from every language and has a list of papers to go through. There is no recommended textbook from the list above. 191 | - [CS 152 at Harvard](https://www.seas.harvard.edu/courses/cs152/2018sp/index.html) uses notes for their readings but also recommends [^](#CPLref)2, [^](#TAPLref)5, [^](#FSPLref)6 and [^](#PLAIref)3 for additional reference. 192 | - [CS 6110 at Cornell](https://www.cs.cornell.edu/courses/cs6110/2018sp/index.html) has no required textbook but recommends [^](#FSPLref)6 and [^](#TAPLref)5 for additional reading. 193 | - A [free version](https://www.cs.cmu.edu/~jcr/tpl.html) of [^](#TOPLref)13 is available for reading. Any related course material was not found. 194 | - [601.426/626 at JHU](http://pl.cs.jhu.edu/pl/index.shtml) use their own book created by a course instructor. The book itself is available under Creative Commons License [here](http://pl.cs.jhu.edu/pl/book/book.pdf). 195 | - An extensive list of resources can also be found at [Programming Language Theory](http://steshaw.org/plt/). 196 | 197 | ^1 - Used as the reference for 198 | 199 | - [CS 6848 at IITM](https://www.cse.iitm.ac.in/~krishna/courses/2015/odd-cs6848/) along with [^](#TAPLref)5, with [^](#CPLref)2 and [^](#PLPLref)9 for additional reference 200 | - [Principles of Programming Languages at Oxford](https://www.cs.ox.ac.uk/teaching/courses/2017-2018/principles/) 201 | - [CS G111 at NEU](https://course.ccs.neu.edu/csg111/) 202 | - [CSCI-UA.0480-006](https://cs.nyu.edu/wies/teaching/popl-15/) and has a host of other useful links 203 | - [CS704 at UWISC](https://github.com/barghouthi/cs704) and has a number of other recommendations as well 204 | - [CSCI 3155 at Berkeley](http://csci3155.cs.colorado.edu/s18/) but the recommended readings are from notes with a bunch of other resources linked 205 | 206 | ^2 - Please make sure to go through the [errata listed](http://theory.stanford.edu/people/jcm/books/cpl-errata.html) when using this book. Used as the reference for 207 | 208 | - [CS 59 at Dartmouth](http://www.cs.dartmouth.edu/~sergey/cs59/syllabus.pdf) is a syllabus only page with many other materials on the instructor's website and also uses some material from [^](#SICPref)7 209 | - [CSCI 334 at WC](http://www.cs.williams.edu/~dbarowy/cs334s18/) 210 | 211 | ^4 - Used as the reference for 212 | 213 | - [CS 245 at BMC](https://cs.brynmawr.edu/Courses/cs245/fall2010/) 214 | - [CSc 520 at UAT](https://www2.cs.arizona.edu/classes/cs520/spring06/) 215 | - [CSCI 3136 at Dal](https://web.cs.dal.ca/~nzeh/Teaching/3136/index.html) which also recommends reading [^](#SICPref)7, [^](#CPLref)2, [^](#PLDIref)10 and [^](#TCBref)**The Cinderella Book** 216 | 217 | ^6 - Used as the reference for 218 | 219 | - [COMP 411 at RU](https://www.cs.rice.edu/~javaplt/411/14-spring/) 220 | 221 | ^8 - Used as the reference for 222 | 223 | - [CSC 272 at AU](https://home.adelphi.edu/~siegfried/cs272/) 224 | - [CS 3MI3 at MMU](http://www.cas.mcmaster.ca/~franek/courses/cs3mi3/) 225 | 226 | ^9 - Used as the reference for 227 | 228 | - [15-312 at CMU](https://www.cs.cmu.edu/~jcr/tpl.html) 229 | 230 | ^11 - Used as the reference for 231 | 232 | - [CMSC 245 at HC](https://www.haverford.edu/computer-science/course-pages/2016f-cmsc-245-principles-programming-languages) (Note: Syllabus page only) 233 | 234 | ^12 - Used as the reference for 235 | 236 | - [TIE-20306 at TUT](http://www.cs.tut.fi/~popl/nykyinen/index.shtml) along with a free *Finnish* textbook 237 | 238 | [↑ Back to Table of Contents](#table-of-contents) 239 | 240 | ## Computer Organisation and Architecture 241 | 242 | ### Standard Textbooks 243 | 244 | 1. **Computer Architecture: A Quantitative Approach** - David A. Patterson and John L. Hennessy [[1]](#CAHP) 245 | 2. **Computer Organisation and Design: The Hardware/Software Interface** - David A. Patterson and John L. Hennessy [[2]](#CODHP) 246 | 3. **Computer Organisation** - V. C. Hamacher, Zvonko G. Vranesic and Safwat G. Zaky [[3]](#CO) 247 | 248 | ### Alternative/Supplementary 249 | 250 | 1. **Computer System Architecture** - M. Morris Mano [[4]](#CSA) 251 | 2. **Computer Organization and Architecture: Designing for Performance** - William Stallings [[5]](#COADP) 252 | 3. **Computer Architecture and Organisation** - John. P. Hayes [[6]](#COA) 253 | 4. **Computer Systems Design and Architecture** - Vincent P Heuring and Harry F Jordan 254 | 5. **Fundamentals of Computer Organization and Architecture** - Mostafa Abd-El-Barr and Hesham El-Rewini 255 | 6. **Computer Systems: A Programmer’s Perspective** - Randal E. Bryant and David R. O’Hallaron [[7]](#CSPP) 256 | 7. **Introduction to Computing Systems: From Bits and Gates to C and Beyond** - Patt and Patel [[8]](#ITCP) 257 | 8. **Structured Computer Organization** - Andrew S. Tanenbaum 258 | 9. **The Principles of Computer Hardware** - A. Clements 259 | 10. **Fundamentals of Computer Architecture** - M. Burrell 260 | 11. **Computer Architecture: Pipelined and Parallel Processor Design** - Michael J. Flynn [[9]](#CAPPD) 261 | 262 | ### Notes 263 | 264 | - There are plenty more books than listed and more courses than I'd care to link. 265 | - [TYCS](https://teachyourselfcs.com/#architecture) recommends [^](#CODHPref)2 (after going through **The Elements of Computing Systems** by Nishan and Schocken) for an introduction to the fundamental ideas of Computer Organisation and Architecture. It is extremely well written, has plenty of depth, and is built upon in [^](#CAHPref)1 by the same authors. 266 | 267 | ^1 - Widely regarded as an authoritative reference for Computer Organisation and Architecture. It is written by Turing Award winning Computer Scientists David Patterson and John Hennessy, but also assumes the reader is already well versed with concepts of Computer Architecture. For the beginner, [^](#CODHPref)2 is widely recommended as _the_ book to start with. Used as a reference for 268 | 269 | - [CS146 at Harvard](http://www.eecs.harvard.edu/~dbrooks/cs146-spring2004/) 270 | 271 | ^2 - Used as a reference for 272 | 273 | - [CS 312 at UMSL](http://www.cs.umsl.edu/~sanjiv/classes/cs312/) 274 | - [ECE 411 at UIUC](https://ece.illinois.edu/academics/courses/profile/ECE411) 275 | - [B62006Y-01 at UCAS](http://english.ucas.ac.cn/index.php/admission/undergraduate/course-syllabuses/620-school-of-computer-and-control-engineering/4471-principles-of-computer-organization) (Note: Syllabus page only) 276 | - [18-447 at CMU](http://www.ece.cmu.edu/~ece447/s13/doku.php?id=schedule) along with [^](#ITCPref)8 277 | - [CS 3410 at Cornell](http://www.cs.cornell.edu/courses/cs3410/2016fa/) 278 | - [CS 61C at Berkeley](http://www-inst.eecs.berkeley.edu/%7Ecs61c/sp15/#Resources) 279 | 280 | ^4 - I didn't find this book stimulating at all. 281 | 282 | ^6 - I found this book incredibly dull and difficult to understand. Good luck. 283 | 284 | ^7 - Used as the reference for 285 | 286 | - [CS 2505 at VT](http://courses.cs.vt.edu/~cs2505/spring2018/) 287 | - [15-213/18-213 at CMU](http://www.cs.cmu.edu/%7E213/) 288 | - [CS107 at Stanford](http://web.stanford.edu/class/cs107/) 289 | 290 | ^9 - Used as the reference for 291 | 292 | - [EE382 at Stanford](https://web.stanford.edu/class/ee382/) 293 | 294 | [↑ Back to Table of Contents](#table-of-contents) 295 | 296 | ## Algorithm Design and Analysis 297 | 298 | ### Standard Textbooks 299 | 300 | 1. **Introduction to Algorithms** - Thomas Cormen, C. Leiserson, and R. Rivest and C. Stein (*CLRS*) [[1]](#CLRS) 301 | 2. **Algorithm Design** - Jon Kleinberg and Éva Tardos (*KT*) [[2]](#KT) 302 | 3. **Algorithms** - Christos Papadimitriou, Sanjoy Dasgupta, and Umesh Vazirani (*DPV*) [[3]](#DPV) 303 | 304 | ### Alternative/Supplementary 305 | 306 | 1. **The Algorithm Design Manual** - Steven Skiena [[4]](#ADM) 307 | 2. **Algorithms** - Robert Sedgewick and Kevin Wayne [[5]](ASW#) 308 | 3. **Introduction to Algorithms: A Creative Approach** - Udi Manber [[6]](#IAACA) 309 | 4. **Fundamentals of Computer Algorithms** - Ellis Horowitz, Sartaj Sahni and S. Rajasekaran 310 | 5. **An Introduction to the Analysis of Algorithms** - Robert Sedgewick and Philippe Flajolet 311 | 6. **Design and Analysis of Algorithm** - P. H. Dave and H. B. Dave 312 | 7. **Design Methods and Analysis of Algorithms** - S. K. Basu 313 | 8. **Algorithms in a Nutshell: A Practical Guide** - George T. Heineman and Gary Pollice 314 | 9. **Algorithm Design: Foundations, Analysis and Internet Examples** - Michael T. Goodrich and Roberto Tamassia 315 | 316 | ### Notes 317 | 318 | - Algorithms are a vast topic and merit their own course altogether due to there being many subtopics such as randomised, parallel, approximation and so on, each having entire textbooks on them. This particular topic is meant to serve as an introduction to each subtopic by focusing on the underlying principles used in designing the algorithm. There are many MOOCs to cater to students, again linked [here](). 319 | - There are, again, numerous resources on the web related to the topic and if a major course related to it hasn't made it to the list, contributions are extremely welcome. 320 | - [TYCS](https://teachyourselfcs.com/#algorithms) recommends using [^](#ADMref)4 to study Algorithms, and also links to his freely available online videos. 321 | - [CSC2420 at UoT](http://www.cs.toronto.edu/~bor/2420f12/) does not use a single source. Instead it uses a combination of [^](#CLRSref)1, [^](#DPVref)3 and [^](#KTref)2. 322 | - [5] is used as the basis for [Sedgewick and Wayne's online course on Coursera](https://www.coursera.org/teach/algorithms-part1) with a [second part](https://www.coursera.org/teach/algorithms-part2). 323 | - [^](#KTref)2 has a [revised version of slides](http://www.cs.princeton.edu/~wayne/kleinberg-tardos/) to accompany the textbook. 324 | - [**Algorithms, Etc.** by Jeff Erickson](http://jeffe.cs.illinois.edu/teaching/algorithms/) is a set of notes that covers the material necessary for his course at University of Illinois, Urbana-Champaign. 325 | - *TAOCP* also serves as a useful reference for many algorithms typically studied as part of an undergraduate level course. It is quite mathematical so typically many students find it a hard read. 326 | 327 | ^1 - Typically used as an encyclopedic reference for most topic, rather than an introduction to algorithms. Used as the reference for 328 | 329 | - [CS 600 A at SIT](https://www.cs.stevens.edu/~swetzel/CS600/spring11/) 330 | - [15-451/651 at CMU](https://www.cs.cmu.edu/~15451/) which also recommends [^](#DPVref)3 but either can be used, while an [older version](http://www.cs.cmu.edu/~avrim/451f09/index.html) has it's own set of notes 331 | - [CS 466/666 at UoW Canada](https://cs.uwaterloo.ca/~eblais/courses/F17/CS466/) with [additional material](https://cs.uwaterloo.ca/~eblais/courses/F17/CS466/outline.pdf) 332 | 333 | ^2 - Used as the reference for 334 | 335 | - [CSci 256 at WC](https://www.cs.williams.edu/~lenhart/cs256/index.html) 336 | - [CPSC500 at UBC](http://www.cs.ubc.ca/~condon/cpsc500/) with [^](#DPVref)3 additionally recommended along with other texts 337 | - [CS 7200 at WU](http://cecs.wright.edu/~tkprasad/courses/cs7200/cs7200.html) with [^](#CLRSref)1 additionally used for reference 338 | - [CS 161 at Stanford](http://openclassroom.stanford.edu/MainFolder/CoursePage.php?course=IntroToAlgorithms) where Tim has made his lecture videos available to all 339 | - [CS 7820 at Cornell](http://www.cs.cornell.edu/courses/cs6820/2009fa/) taken by **Jon Kleinberg** 340 | 341 | ^3 - Used as the reference for 342 | 343 | - [CS 157 at Brown](https://cs.brown.edu/courses/cs157/) 344 | 345 | ^4 - Used as the reference for 346 | 347 | - [CSE 373 at SUNY, SB](http://www3.cs.stonybrook.edu/~skiena/373/) which is taken by **Steven Skiena** 348 | 349 | ^5 - Used as the reference for 350 | 351 | - [COS226 at Princeton](http://www.cs.princeton.edu/courses/archive/spring18/cos226/) with a [condensed version of the book](https://algs4.cs.princeton.edu/home/) available for reference 352 | 353 | [↑ Back to Table of Contents](#table-of-contents) 354 | 355 | ## Theory of Computation 356 | 357 | ### Standard Textbooks 358 | 359 | 1. **Introduction to Automata Theory, Languages, and Computation** - John E. Hopcroft and Jeffrey D. Ullman (_The Cinderella Book_) [[1]](#TCB) 360 | 2. **Introduction to the Theory of Computation** - Michael Sipser [[2]](#TOCS) 361 | 3. **Elements of the Theory of Computation** - Harry R. Lewis & C. H. Papadimitriou 362 | 363 | ### Alternative/Supplementary 364 | 365 | 1. **Introduction to Formal Language and Computation** - Peter Linz [[3]](#ITFLAC) 366 | 2. **Theory of Computer Science: Automata, Language and Computation** - Mishra & Chandrasekharan 367 | 3. **A Text Book on Automata Theory** - Nasir & Sirmani 368 | 4. **Introduction to Languages and The Theory of Computation** - John Martin 369 | 5. **Computability, Complexity, and Languages: Fundamentals of Theoretical Computer Science** - Martin Davis, Ron Sigal, Elaine J. Weyuker 370 | 6. **An Introduction to the Theory of Computation** - Eitan Gurari 371 | 7. **Theory of Computation** - James L. Hein 372 | 8. **Models of Computation and Formal Languages** - R. Gregory Taylor 373 | 9. **Essentials of Theoretical Computer Science** - F. D. Lewis 374 | 10. **Automata and Computability** - Dexter C. Kozen 375 | 376 | ### Notes 377 | 378 | ^1 - Used a reference textbook for many courses around the world. It closely matches what Jeff Ullman [teaches online at Lagunita](https://lagunita.stanford.edu/courses/course-v1:ComputerScience+Automata+Fall2016/about). (Duh) 379 | 380 | ^2 - Used as the reference for 381 | 382 | - [CS 3102 at UoV](http://www.cs.virginia.edu/~robins/cs3102/) 383 | - [CS-251 at EPFL](http://theory.epfl.ch/cs251/Home.html) 384 | - [CS 3800 at NEU](https://course.ccs.neu.edu/cs3800f17wc/policies.html) 385 | - [CS39 at Dartmouth](https://www.cs.dartmouth.edu/~ac/Teach/CS39-Spring18/) 386 | - [AU's COMP 674](http://www.athabascau.ca/syllabi/comp/comp674.php), a graduate level course. 387 | 388 | ^3 - Used as the reference for 389 | 390 | - [UPenn's CSC 4170-50](https://www.seas.upenn.edu/~cit596/notes/dave/syllabus.html) 391 | 392 | [↑ Back to Table of Contents](#table-of-contents) 393 | 394 | ## Operating Systems 395 | 396 | ### Standard Textbooks 397 | 398 | 1. **Operating System Concepts** - J. L. Peterson and A. Silberschatz (*The Dinosaur Book*) [[1]](#TOSDB) 399 | 2. **Modern Operating Systems** - Andrew S. Tanenbaum [[2]](#MOS) 400 | 3. **Operating Systems, Internals and Design Principles** - William Stallings [[3]](#OSIDP) 401 | 402 | ### Alternative/Supplementary 403 | 404 | 1. **Operating Systems: Three Easy Pieces** - Remzi H. Arpaci-Dusseau and Andrea C. Arpaci-Dusseau (*The Black Book*/*The Asteroid Book*/*The Comet Book*) [[4]](#OSTEP) 405 | 2. **Schaum’s Outline of Operating Systems** - Archer J. Harris 406 | 3. **The Design of the UNIX operating system** - Maurice J. Bach 407 | 4. **Operating Systems: Principles and Practice** - Thomas Anderson and Michael Dahlin. [[5]](#OSPP) 408 | 5. **Operating Systems: A Concept-Based Approach** - D. M. Dhamdhere 409 | 6. **Operating Systems: A Modern Perspective** - Gary J. Nutt 410 | 7. **Operating Systems In Depth: Design and Programming** - Thomas W. Doeppner [[6]](#OSIDDP) 411 | 8. **Operating System Concepts Essentials** - Silberschatz, Galvin, Gagne [[7]](#OSCE) 412 | 9. **Linux Kernel Development** - Robert Love [[8]](#LKD) 413 | 414 | ### Notes 415 | 416 | - For a more historical approach, [this Wikipedia page](https://en.wikipedia.org/wiki/List_of_important_publications_in_computer_science#Operating_systems) provides a list of a series of breakthroughs in Operating System Design. 417 | - [TYCS](https://teachyourselfcs.com/#operating-systems) recommends [^](#OSTEPref)OSTEP for self study rather than the theory heavy [^](TOSDBref)Dinosaur Book or similar texts. 418 | - [A list of research papers on Udacity](https://www.udacity.com/wiki/ud156-readings) may also be useful, and are the recommended readings for [CS 6210 at GATech](https://www.omscs.gatech.edu/cs-6210-advanced-operating-systems). 419 | - [COSC4321.03, COSC5421.03 at UW](https://cs.uwaterloo.ca/~brecht/courses/4321/) appears to be an interesting course on Operating Systems but does not use any of the listed books for reference. It also does not appear to be a theory focused typical Operating Systems class. 420 | - Purdue also appears to have a course designed around its [Xinu Operating System](https://xinu.cs.purdue.edu/). 421 | 422 | ^1 - Used as the reference for 423 | 424 | - [CS 385 at UIC](https://www.cs.uic.edu/~jbell/CourseNotes/OperatingSystems/) 425 | - [CM's 15-410](https://www.cs.cmu.edu/~410/) 426 | - [CS 347 at IITB](https://www.cse.iitb.ac.in/~mythili/teaching/cs347_autumn2016/index.html) where reading through MIT's [xv6 Operating System](https://pdos.csail.mit.edu/6.828/2012/xv6.html) is mandatory 427 | - [Drexel's CS 543](https://www.cs.drexel.edu/~jjohnson/2012-13/fall/cs543/) which recommends reading [^](#LKDref)8 additionally 428 | - [CS170 at UCSB](http://www.cs.ucsb.edu/~rich/class/cs170/) 429 | - [EDAF35 at LTH](http://cs.lth.se/edaf35/?L=0) 430 | - [CS 446/646 at UNR](https://www.cse.unr.edu/~mgunes/cs446/) 431 | 432 | ^2 - Used as the reference for 433 | 434 | - [CS 372 at UT Austin](http://www.cs.utexas.edu/users/witchel/372/) although certain readings are also from [^](#TOSDBref)1 435 | - [INF3151 at UO](https://www.uio.no/studier/emner/matnat/ifi/INF3151/) which is in Norwegian 436 | 437 | ^3 - Used as the reference for 438 | 439 | - [TOM-2.1-CS at UT](https://wwwhome.ewi.utwente.nl/~pieter/CS-OS/) 440 | 441 | ^4 - [**OSTEP**](http://pages.cs.wisc.edu/~remzi/OSTEP/) was made as a companion for [CS 537 at UWISC](http://pages.cs.wisc.edu/~remzi/Classes/537/Spring2018/), which is freely available. The professors also recommend reading classic texts such as [^](#LKDref)8 and **The C Programming Language** (K&R). Used as a reference for 442 | 443 | - [WPI's CS 3013](https://web.cs.wpi.edu/~cshue/cs3013/) 444 | - [CS 350 at UW](https://www.student.cs.uwaterloo.ca/~cs350/W18/reading.html) 445 | - [CS 318/418/618 at JHU](https://cs.jhu.edu/~huang/cs318/fall17/index.html) 446 | 447 | ^5 - Used as the reference for 448 | 449 | - [SU's CS140](http://web.stanford.edu/~ouster/cgi-bin/cs140-spring18/index.php) 450 | - [Yale's CS422/522](http://flint.cs.yale.edu/cs422/) 451 | 452 | ^6 - Used as the reference for 453 | 454 | - [CS 161 at HU](http://www.eecs.harvard.edu/~cs161/) 455 | 456 | ^7 - Basically a cheaper version of [^](#TOSDBref)1 recommended as the reference textbook for [CU's COMS W4118](http://www.cs.columbia.edu/~jae/4118/). 457 | 458 | ^8 459 | 460 | - [CS 6560 at CSU EB](https://www.cs.rutgers.edu/course/operating-systems-design) 461 | 462 | [↑ Back to Table of Contents](#table-of-contents) 463 | 464 | ## Data Communication 465 | 466 | ### Standard Textbooks 467 | 468 | 1. **Data Communication and Networking** - B. A. Forouzan 469 | 2. **Computer Networks** - Andrew S. Tanenbaum 470 | 471 | ### Alternative/Supplementary 472 | 473 | 1. **Data Communication, Computer Networks and Open Systems** - Fred Halsall 474 | 2. **TCP/IP Protocol Suite** - B. A. Forouzan 475 | 3. **Data and Computer Communications** - William Stallings [[1]](#DCC) 476 | 4. **Communication Networks, Fundamental Concepts & Key Architecture** - Leon-Garcia and I. Widjaja 477 | 478 | ### Notes 479 | 480 | - Please help. I found nothing on the web with similar syllabus, which has been commented out. See source code. 481 | 482 | ^1 - Used as the reference for 483 | 484 | - [CS 3413 at UTSA](http://www.cs.utsa.edu/~korkmaz/teaching/cs3413/) 485 | 486 | ## Microprocessors and Microcontrollers 487 | 488 | ### Standard Textbooks 489 | 490 | 1. **The Intel Microprocessors - Architecture Programming And Interfacing** - Barry B. Brey [[1]](#TIM) 491 | 2. **Microprocessor and Interfacing** - D. V. Hall 492 | 3. **Microprocessor Architecture, Programming, and Applications with the 8085** - Ramesh Gaonkar [[5]](#MAPA) 493 | 494 | ### Alternative/Supplementary 495 | 496 | 1. **Microcomputer Systems - The 8086/8088 Family Architecture, Programming and Design** - Liu and Gibson 497 | 2. **The 8051 Microcontroller and Embedded Systems** - M. A. Mazidi, J. G. Mazidi and R. D. McKinlay 498 | 3. **Microprocessors: Principles and Applications** - A. Pal 499 | 4. **The 8051 Microcontroller and Embedded Systems : Using Assembly and C** - Muhammad Ali Mazidi 500 | 5. **Advanced Microprocessors and Peripherals** - A. K. Ray and K. M. Bhurchandi 501 | 6. **Fundamentals of Microprocessors And Microcontrollers** - Ram B. 502 | 503 | ### Notes 504 | 505 | Online courses about Microprocessors are rather difficult to come by. 506 | 507 | ^1 - Used as the reference for 508 | 509 | - [a course at UCF](http://www.cs.ucf.edu/~ahossam/teaching/microp/) 510 | 511 | ^5 - Used as the reference for 512 | 513 | - [IITKGP's CS43003](http://www.facweb.iitkgp.ernet.in/~apal/files/microprocessor_04.pdf) (Note: Syllabus page only) 514 | 515 | [↑ Back to Table of Contents](#table-of-contents) 516 | 517 | ## Discrete Mathematics 518 | 519 | ### Standard Textbooks 520 | 521 | 1. **Discrete Mathematics and Its Applications** - Kenneth H. Rosen [[1]](#DMAIA) 522 | 2. **Discrete Mathematics** - Kevin Ferland [[2]](#DMKF) 523 | 3. **Mathematics for Computer Science** - Eric Lehman, F. Thomson Leighton, and Albert R. Meyer [[3]](#MFCS) 524 | 525 | ### Alternative/Supplementary 526 | 527 | 1. **Discrete and Combinatorial Mathematics: An Applied Introduction** - Ralph P. Grimaldi [[4]](#DCMAAI) 528 | 2. **Discrete Mathematics for Computer Science** - Kenneth Bogart and Robert L. Drysdale [[5]](#DMCSBD) 529 | 3. **Concrete Mathematics** - Ronald Graham, Donald E. Knuth and Oren Patashnik [[6]](#CMGKP) 530 | 4. **Discrete Mathematics** - Jiří Matoušek and Jaroslav Nešetřil [[7]](#DMMN) 531 | 5. **Mathematical Structures for Computer Science** - J. L. Gersting [[8]](#MSFCS) 532 | 6. **Discrete Mathematics** - Norman L. Biggs [[9]](#DMNB) 533 | 7. **Discrete Mathematics** - Kenneth A. Ross and Charles R. Wright [[10]](#DMRW) 534 | 8. **Discrete Mathematics** - Seymour Lipschutz and Mar Lars Lipson [[11]](#DMLL) 535 | 9. **Discrete Mathematics: Mathematical Reasoning and Proof with Puzzles, Patterns and Games** - Douglas E. Ensley and J. Winston Crawley [[12]](#DMMRPPG) 536 | 10. **Elements of Discrete Mathematics: A Computer Oriented Approach** - C. L. Liu and D. P. Mohapatra 537 | 11. **Discrete Mathematical Structures with Applications, to Computer Science** - J. P. Tremblay and R. Manohar 538 | 12. **Discrete Mathematics for Computer Scientists & Mathematics** - Joe L. Mott, A. Kandel, and T. P. Baker 539 | 13. **Graph Theory with applications to Engineering & Computer Science** - N. Deo 540 | 14. **Discrete Mathematical Structures for Computer Science** - B. Kolman and R. C. Busby 541 | 15. **Discrete Mathematics with Applications** - Thomas Koshy 542 | 16. **Discrete Mathematics** - Nicodemi O. 543 | 17. **Discrete Mathematics** - R. Krishna Kumar 544 | 18. **Discrete Mathematics** - Johnsonbaugh 545 | 19. **An Introduction to Discrete Mathematics for Business & Computing** - John Dwyer 546 | 20. **Discrete Mathematics With Applications** - Susanna S. Epp 547 | 21. **The Art of Computer Programming** - Donald E. Knuth 548 | 22. **Practice Problems in Discrete Mathematics** - Bojana Obrenic 549 | 23. **Hand Book of Discrete and Combinatorial Mathematics** - Kenneth H. Rosen and John G. Michaels 550 | 24. **Discrete Mathematics by Example** - Andrew Simpson 551 | 25. **Discrete Mathematics with Graph Theory and Combinatorics** - T. Veerarajan 552 | 553 | ### Notes 554 | 555 | - [Stanford's CS103](http://web.stanford.edu/class/cs103/) may serve as an introduction to those who are unfamiliar with the concepts. 556 | - Yale's CPSC 202 uses a [document of notes on Discrete Math as the primary reading](http://cs.yale.edu/homes/aspnes/classes/202/notes.pdf). Additional reading can be done from [^](#DMKFref)2 or [^](#DMAIAref)1. 557 | - [CS20 at Harvard](https://www.seas.harvard.edu/courses/cs20/) uses [notes](https://www.seas.harvard.edu/courses/cs20/MIT6_042Notes.pdf) from [MIT's 6.042](https://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-042j-mathematics-for-computer-science-fall-2010/). 558 | - Cornell also hosts a useful set of [notes on Discrete Structures](https://www.cs.cornell.edu/~rafael/discmath.pdf). 559 | - [UT Austin's CS 311](http://www.cs.utexas.edu/~vl/teaching/311/) appears to have their own set of lecture notes linked on the course page. 560 | 561 | ^1 - Used as the reference for 562 | 563 | - [CS381 at ODU](http://www.cs.odu.edu/~cs381/index.html) 564 | - [CSE 191 at UaB](https://cse.buffalo.edu/~rapaport/191/) with [^](#DMLLref)11 additionally recommended 565 | - [6301 at UCL](https://www.ucl.ac.uk/maths/courses/undergraduates/modules/general-ancillary/general_ancillary_syllabuses/6301) (Note: Syllabus page only) 566 | - [14:332:312 at Rutgers](http://eceweb1.rutgers.edu/~csi/DiscMath.html) 567 | - [CS 441 at PU](https://people.cs.pitt.edu/~milos/courses/cs441/) 568 | - [CS 70 at Berkeley](http://eecs70.org/) although notes are recommended for primary reading 569 | - [CS 207 at IITB](https://www.cse.iitb.ac.in/~akshayss/courses/cs207-2016.html) along with [^](#DMNBref)9 570 | 571 | ^3 - Used as the reference for 572 | 573 | - [CS2102 at UoV](https://uvacs2102.github.io/) and has generously been made [available online](https://uvacs2102.github.io/docs/mcs.pdf) under the Creative Commons License 574 | - [CS1010 at IITH](https://www.iith.ac.in/~aravind/cs1010.html) although it uses [slightly older notes](https://www.iith.ac.in/~aravind/Files-DM/LLM-MFCS-2012.pdf) instead with an additional guide on [**How to write Mathematics**](http://erickson.sites.truman.edu/files/2012/04/guide1.pdf) by Martin Erickson 575 | - [CS 30 at Dartmouth](https://www.cs.dartmouth.edu/~ac/Teach/CS30-Winter18/) with [^](#DMAIAref)1 recommended for additional reading 576 | 577 | ^4 - Used as the reference for 578 | 579 | - [Discrete Structures and Combinatorics at BGU](https://www.cs.bgu.ac.il/~dsc172/Main) along with some weird Israeli book? 580 | 581 | ^5 - Used as the reference for 582 | 583 | - [CPS 102 at Duke](https://www2.cs.duke.edu/courses/spring09/cps102/) with [^](#DMAIAref)1, [^](#CMGKref)6 and [^](#DMMNref)7 also recommended 584 | 585 | ^8 - Used as the reference for 586 | 587 | - [MAT 385 at NKU](http://ceadserv1.nku.edu/longa//classes/2002fall/mat385/) 588 | 589 | ^9 - Used as the reference for 590 | 591 | - [Discrete Math at Cambridge](https://www.cl.cam.ac.uk/teaching/1314/DiscMath/) with additional books listed 592 | 593 | ^10 - Used as the reference for 594 | 595 | - [Discrete Mathematics at Oxford](https://www.cs.ox.ac.uk/teaching/courses/2017-2018/discretemaths/) along with other recommendations like [^](#DCMAAIref)4 596 | 597 | ^12 - Used as the reference for 598 | 599 | - [CSCI 2824 at UoC Boulder](https://www.colorado.edu/cs/csci-2824-discrete-structures) 600 | 601 | [↑ Back to Table of Contents](#table-of-contents) 602 | 603 | ## Computer Graphics 604 | 605 | ### Standard Textbooks 606 | 607 | 1. **Computer Graphics: Principles and Practice** - John F. Hughes, Andries van Dam, Morgan McGuire, David F. Sklar, James D. Foley, Steven K. Feiner, Kurt Akeley [[1]](#CGPP) 608 | 2. **Fundamentals of Computer Graphics** - Pete Shirley and Steve Marschner with Michael Ashikhmin, Michael Gleicher, Naty Hoffman, Garrett Johnson, Tamara Munzner, Erik Reinhard, Kelvin Sung, William B. Thompson, Peter Willemsen, and Bryan Wyvill [[2]](#FOCG) 609 | 3. **Computer Graphics, C Version** - Donald Hearn and M. Pauline Baker [[3]](#CGCV) 610 | 611 | ### Alternative/Supplementary 612 | 613 | 1. **Computer Graphics using Open GL** - Francis S. Hill 614 | 2. **Multimedia Systems** - R. Steinmetz and K. Nahrstedt 615 | 3. **Fundamentals of Multimedia** - Ze-Nian Li and M. S. Drew 616 | 4. **Mathematical Elements for Computer Graphics** - David F. Rogers and James Alan Adams 617 | 5. **Physically Based Rendering: From Theory to Implementation** - Matt Pharr and Greg Humphreys [[4]](#PBRFTTI) 618 | 6. **Procedural Elements for Computer Graphics** - David Rogers 619 | 7. **Computer Graphics for Java Programmers** - L. Ammeraal and K. Zhang 620 | 8. **Computer Graphics: A Survey of Current Techniques and Applications** - John Lewell 621 | 9. **Computer Graphics: Theory Into Practice** - Jeffrey J. McConnell 622 | 10. **Computer Graphics: Techniques and Applications** - R. D. Parslow, R. W. Prowse, Richard Elliot Green 623 | 11. **Computer Graphics and Virtual Environments: From Realism to Real-time** - M. Slater, A. Steed, Y. Chrysantho 624 | 12. **Interactive Environments with Open-Source Software** - Wolfgang Höhl 625 | 13. **Foundations of 3D Computer Graphics** - Steven J. Gortler [[5]](#FOTDCG) 626 | 14. **Interactive Computer Graphics, A Top-Down Approach with WebGL** - Edward Angel and Dave Schreiner [[6]](#ICGATDA) 627 | 628 | ### Notes 629 | 630 | - [^](#CGPPref)1 and [^](#FOCGref)2 are no doubt standard textbooks in the field, but there is simply too vast an ocean of textbooks to categorise. 631 | - There is a reference book for OpenGL programming one may find useful called the [_Red Book_](http://www.opengl.org/documentation/red_book/). 632 | - Many courses have further resources like these linked on their course or info pages. 633 | 634 | ^1 - Used as the reference for 635 | 636 | - [CSCI 1230 at Brown](https://cs.brown.edu/courses/cs123/) 637 | - [CS4620/CS4621 at Cornell](http://www.cs.cornell.edu/courses/cs4620/2014fa/index.shtml) along with [^](#FOTDCGref)5 638 | - [CS 6360 at IITM](http://www.cse.iitm.ac.in/~vplab/computer_graphics.html) along with [^](#CGCVref)3 639 | - [Introduction to Computer Graphics at UIC](https://www.cs.uic.edu/~jbell/CourseNotes/ComputerGraphics/index.html) 640 | - [CS 488 at UIC](https://www.evl.uic.edu/aej/488/index.html) which seems to be an earlier version of the course above 641 | 642 | ^2 - Used as the reference for 643 | 644 | - [CMU 15-462/662](http://15462.courses.cs.cmu.edu/fall2015/) along with [^](#CGPPref)1 and [^](#PBRFTTIref)4 645 | - [Computer Graphics at Oxford](https://www.cs.ox.ac.uk/teaching/courses/2017-2018/graphics/) with [^](#CGPPref)1 and others additionally recommended 646 | - [CS248 at Stanford](http://graphics.stanford.edu/courses/cs248-18-spring/) with [^](#CGPPref)1 also recommended 647 | 648 | ^5 - Used as the reference for 649 | 650 | - [CS 175 at Harvard](https://sites.fas.harvard.edu/~lib175/) taught by Steven Gortler himself 651 | 652 | ^6 - Used as the reference for 653 | 654 | - [CS 465 at Bilkent](http://www.cs.bilkent.edu.tr/~gudukbay/cs465/) 655 | - [EDAF80 at LTH](http://cs.lth.se/edaf80/) with [The Graphics Codex](http://graphicscodex.com/) linked for additional reading 656 | - [CS 537 at Drexel](https://www.cs.drexel.edu/~david/Classes/ICG/) 657 | - [CS 4102 at St. Andrews](https://info.cs.st-andrews.ac.uk/student-handbook/modules/CS4102.html) (only a list of textbooks) 658 | 659 | [↑ Back to Table of Contents](#table-of-contents) 660 | 661 | ## Information Theory and Coding 662 | 663 | ### Standard Textbooks 664 | 665 | 1. **Elements of Information Theory** - T. M. Cover and J. A. Thomas [[1]](#EOIT) 666 | 2. **Information Theory, Inference and Learning Algorithms** - David J. C. Mackay [[2]](#ITILA) 667 | 3. **Information Theory Coding and Cryptography** - R. Bose 668 | 669 | ### Alternative/Supplementary 670 | 671 | 1. **Coding and Information Theory** - S. Roman 672 | 2. **Introduction to Data Compression** - Khalid Sayood 673 | 3. **The Theory of Information and Coding** - R. J. McEliece 674 | 4. **The Theory of Error Correcting Codes** - F. J. MacWilliams and N. J. A. Sloane 675 | 5. **Entropy and Information Theory** - Robert M. Gray [[3]](#EAIT) 676 | 6. **Information Theory and Reliable Communication** - R. G. Gallagher 677 | 7. **Information Theory** - Robert B. Ash 678 | 679 | ### Notes 680 | 681 | - Wikipedia has an [extensive reference list](https://en.wikipedia.org/wiki/Information_theory#References) with many classic texts and books linked. 682 | - A [Workshop on Complexity Information Theory in Theoretical Computer Science and Discrete Mathematics](http://sites.math.rutgers.edu/~saks/IT/) at Rutgers has an extensive reading list should one be ambitious enough. 683 | - [CS 229r at Harvard](http://people.seas.harvard.edu/~madhusudan/courses/Spring2016/) has links to notes from other courses and multiple papers on the topic. 684 | - Most of the courses strongly recommend reading through Claude Shannon's [A Mathematical Theory of Communication](math.harvard.edu/~ctm/home/text/others/shannon/entropy/entropy.pdf) paper from 1948. It serves as the basis for the branch of Information Theory and Coding related research. 685 | - Most/All of the courses have relevant additional resources which are very useful. 686 | 687 | ^1 - Used as the reference for 688 | 689 | - [15-859 at CMU](http://www.cs.cmu.edu/~venkatg/teaching/ITCS-spr2013/) with many other classic papers recommended for reading 690 | - [CSE 533 at UoW](https://catalyst.uw.edu/workspace/anuprao/15415/86593) with [a list of papers](https://catalyst.uw.edu/workspace/anuprao/15415/86644) 691 | - [EE5581 at UMN](http://people.ece.umn.edu/~nihar/ee5581_fall05/index.html) 692 | - [CSCI1850 at Brown](http://jwmi.github.io/IC/) with additional readings from **Information Theory, Inference, and Learning Algorithms** which is [available free of cost](http://www.inference.org.uk/mackay/itila/book.html) 693 | - [TTIC 31200/CMSC 37220 at UC](http://ttic.uchicago.edu/%7Emadhurt/courses/infotheory2014/index.html) 694 | - [10-704 at CMU](http://www.cs.cmu.edu/%7Eaarti/Class/10704/lecs.html) along with [^](#ITILAref)2, and has elements of Machine Learning applied to it 695 | - [CS85/CS185 at Dartmouth](http://www.cs.dartmouth.edu/%7Eac/Teach/CS85-Winter06/) with [a list of papers](http://www.cs.dartmouth.edu/%7Eac/Teach/CS85-Winter06/#papers) for primary reading 696 | - [COS 597D at Princeton](http://www.cs.princeton.edu/courses/archive/fall11/cos597D/) which also recommends several papers 697 | - [COMPSCI 650 at UMass](https://people.cs.umass.edu/~elm/Teaching/650_F14/) with [^](#ITILAref)2 recommended additionally 698 | - [582650 at UoH](https://www.cs.helsinki.fi/group/cosco/Teaching/Information/2014/) 699 | - [CO 739-2 at UoW Canada](http://www.math.uwaterloo.ca/~anayak/Site/Information_Theory.html) 700 | - [EECS 428 at NWU](https://www.mccormick.northwestern.edu/eecs/courses/descriptions/428.html) (Note: Syllabus page only) 701 | - [ECE 563 at UIUC](https://ece.illinois.edu/academics/courses/profile/ece563) (Note: Syllabus page only) 702 | 703 | ^2 - Used as a reference for 704 | 705 | - [COMP 7404 at DU](http://web.cs.du.edu/~ramki/courses/tpcs/infoTheory/index.html) 706 | - [CSC 310 at UoT](https://www.cs.toronto.edu/~radford/csc310.F11/) with [^](#EAITref)3 recommended for rigorous mathematical analysis 707 | - [CS 616 at WU](https://www.westminster.edu/resources/dean/view_course_syllabus.cfm?id=769) (Note: Syllabus page only) 708 | 709 | [↑ Back to Table of Contents](#table-of-contents) 710 | 711 | ## Compiler Design 712 | 713 | ### Standard Textbooks 714 | 715 | 1. **Compilers: Principles, Techniques, and Tools** - A. V. Aho, Ravi Sethi & Jeffrey D. Ullman (_The Dragon Book_) [[1]](#TCDB) 716 | 2. **Modern Compiler Implementation in ML** - Andrew W. Appel (_The Tiger Book_)[[2]](#TTB) 717 | 3. **Engineering a Compiler** - Keith D. Cooper and Linda Torczon (_CT_) [[3]](#EAC) 718 | 719 | ### Alternative/Supplementary 720 | 721 | 1. **Compiler Construction: Theory and Practice** - W. A. Barrett, John D. Couch, C. Couch 722 | 2. **Compiler Construction: Principles and Practice** - Kenneth C. Louden [[4]](#CCPP) 723 | 3. **Modern Compiler Design** - Dick Grune, Kees van Reeuwijk, Henri E. Bal, Ceriel J.H. Jacobs, Koen Langendoen 724 | 4. **Compiler Design: Theory, Tools, and Examples** - Seth Bergmann [[5]](#CDTTE) 725 | 5. **Compiler Design in C** - Allen I. Holub [[6]](#CDIC) 726 | 6. **Optimizing Compilers for Modern Architectures: A Dependence-based Approach** - Randy Allen and Ken Kennedy [[7]](#OCFMA) 727 | 7. **Understanding and Writing Compilers: A Do It Yourself Guide** - Richard Bornat [[8]](#UACW) 728 | 8. **Advanced Compiler Design and Implementation** - Steven Muchnick [[9]](#ACDI) 729 | 9. **Crafting a Compiler** - Charles N. Fischer, Richard Joseph LeBlanc, and Ronald Kaplan Cytron [[10]](#CAC) 730 | 10. **A Compiler Generator** - William Marshall McKeeman, James J. Horning, David B. Wortman 731 | 11. **The Compiler Design Handbook: Optimizations and Machine Code Generation** - Y. N. Srikant and Priti Shankar 732 | 12. **Compilers and Compiler Generators: An Introduction with C++** - Patrick D. Terry 733 | 13. **Compiler Construction** - Niklaus Wirth 734 | 14. **A Rechargeable C Compiler: Design and Implementation** - Christopher W. Fraser, David Hanson, David Hansen 735 | 15. **Compiling with continuations**- Andrew W. Appel 736 | 16. **Building an Optimizing compiler** - Robert Morgan 737 | 17. **Elements of Compiler Design** - Alexander Meduna 738 | 18. **Object-oriented Compiler Construction** - Jim Holmes 739 | 19. **Theory and Practice of Compiler Writing** - J.P. Tremblay and P.G. Sorenson [[11]](#TPCW) 740 | 20. **Parsing Techniques: A Practical Guide** - J.P. Tremblay and P.G. Sorenson 741 | 742 | ### Notes 743 | 744 | - Compiler Design also has much historical background which can be better read through by following [Wikipedia's Compiler Publication List](https://en.wikipedia.org/wiki/List_of_important_publications_in_computer_science#Compilers) and also [Wikipedia's History of compiler construction](https://en.wikipedia.org/wiki/History_of_compiler_construction), which has further reading described at the end. 745 | - GitHub also has a list of [Awesome Compiler resources](https://github.com/aalhour/awesome-compilers) and even more [additional resources](https://github.com/berkerpeksag/notes/tree/master/learning/compilers). 746 | - **Allen Holub** made his [^](#CDICref)book available online, free of cost, since it is now out of print. **Seth Bergmann** also generously provides [^](#CDTTEref)his online as does [^](#UAWCref)**Richard Bornat**. 747 | - There is also a [list of compiler books on the GCC wiki](https://gcc.gnu.org/wiki/ListOfCompilerBooks). Mozilla also hosts a [set of resources](https://wiki.mozilla.org/JavaScript:Compiler_References) on JS Compilers. Numerous [additional resources](http://developers-club.com/posts/170735/) are also [scattered across the web](https://www.rip-lang.org/links/#compilers) on various [blogs](http://belkadan.com/blog/2015/11/Recommendations/). 748 | 749 | ^1 - This is regarded as the definitive reference book on compilers [according to Wikipedia](https://en.wikipedia.org/wiki/Compilers:_Principles,_Techniques,_and_Tools) and has multiple editions, of which _The Purple Dragon Book_ or the 2nd edition is more referred to. The corresponding edition for a course should be verified from the course page. Used as the reference for 750 | 751 | - [CS143 at Stanford](https://web.stanford.edu/class/cs143/) 752 | - [CS4120 at Cornell](http://www.cs.cornell.edu/courses/cs4120/2013fa/) 753 | - [ECS 142 at UC Davis](http://web.cs.ucdavis.edu/~pandey/Teaching/ECS142/ecs142_spring2011.html) has many more books listed, but also recommends [^](#TTBref)The Tiger Book in Java, [^](#EACref)3, [^](#ACDIref)9 754 | - [CPSC 605-600 at TAMU](https://parasol.tamu.edu/~rwerger/Courses/605/) along with [^](#OCFMAref)7 755 | - [CS 5461 at UoM Duluth](https://www.d.umn.edu/~rmaclin/cs5641/index.html) 756 | - [Compiler Design at NCTU](https://people.cs.nctu.edu.tw/~ypyou/courses/Compiler-grad-s18/) with more useful resources listed 757 | - [COP5621 at FSU](https://www.cs.fsu.edu/~engelen/courses/COP5621/) along with **The Java™ Virtual Machine Specification**, SE 8 edition 758 | - [CS 2210 at UoP](https://people.cs.pitt.edu/~wahn/teaching/cs2210/) 759 | - [CS 3300 at IITM](http://www.cse.iitm.ac.in/~krishna/cs3300/) along with [^](#TTBref)The Tiger Book in Java 760 | - [CS335 at IITK](https://www.cse.iitk.ac.in/users/karkare/cs335/) 761 | - [CS 352 at IITR](https://www.iitr.ac.in/departments/CSE/uploads/File/CS%20btech%20courses/Cs352-compiler.pdf) along with [^](#EACref)3, [^](#CCPPref)4 and [^](#TPCWref)11 (Note: Syllabus page only) 762 | 763 | ^2 - The author has an [accompanying website](http://www.cs.princeton.edu/~appel/modern/) for his books (available in Java and C as well). Used as reference for 764 | 765 | - [CS421 at UIUC](https://courses.engr.illinois.edu/cs421/fa2014/) 766 | - [CS5470 at UoU](http://www.cs.utah.edu/~parker/5470_Sp18.html) but in Java (Note: Syllabus page only) 767 | - [15-411 at CMU](https://www.cs.cmu.edu/~fp/courses/15411-f09/index.html) 768 | - [CS 432F & CS 728 at IITD](http://www.cse.iitd.ernet.in/~sanjiva/compilers.html) with [^](#TCDBref)1 additionally recommended 769 | 770 | ^3 - Used as a reference for 771 | 772 | - [CS 321 at PDXSU](http://web.cecs.pdx.edu/~sheard/course/Cs321/) 773 | - [CS 8803 at GATech](http://www.omscs.gatech.edu/cs-8803-o08-compilers-theory-and-practice) which appears to have an [online course](https://in.udacity.com/course/compilers-theory-and-practice--ud168) 774 | - [CS712/CS812 at UNH](http://www.cs.unh.edu/~cs712/) 775 | 776 | ^4 - Used as a reference for 777 | 778 | - [COSC 4353 at TAMUCC](http://www.sci.tamucc.edu/~sking/Courses/Compilers/) with books such as **Unix Programming Tools :lex & yacc** additionally recommended 779 | - [CS 780 at WSU](http://cecs.wright.edu/~tkprasad/courses/cs780/cs780.html) with additional references listed 780 | 781 | ^10 - Used as a reference for 782 | 783 | - [CPSC 466 at SRU](http://cs.sru.edu/~whit/handouts.466.s12.html) 784 | 785 | [↑ Back to Table of Contents](#table-of-contents) 786 | 787 | ## Computer Networks 788 | 789 | ### Standard Textbooks 790 | 791 | 1. **Computer Networking: A Top-Down Approach** - James Kurose and Keith Ross [[1]](#CNATDA) 792 | 2. **Computer Networks – A System Approach** - Larry L. Peterson and Bruce S. Davie [[2]](#CNASD) 793 | 3. **Computer Networks** - Andrew S. Tanenbaum [[3]](#CNAT) 794 | 795 | ### Alternative/Supplementary 796 | 797 | 1. **TCP/IP Protocol Suite** - Behrouz A. Forouzan 798 | 2. **Data and Computer Communication** - William Stallings [[4]](#DCCWS) 799 | 3. **Data Communication, Computer Networks and Open Systems** - F. Halsall 800 | 4. **Data Communications and Networking** - Behrouz A. Forouzan [[5]](#DCNBF) 801 | 5. **Internetworking with TCP/IP, Volume 1** - Douglas Comer 802 | 6. **TCP/IP Illustrated, Volume 1: The Protocols** - W. Richard Stevens [[6]](#TCPIPI) 803 | 7. **Unix Network Programming, Volume 1: The Sockets Networking API** - W. Richard Stevens [[7]](#UNPVO) 804 | 805 | ### Notes 806 | 807 | - [TYCS](https://teachyourselfcs.com/#networking) recommends [^](CNATDAref) for self study and also links to freely available online exercises/tutorials. 808 | - [GATech's CS 6250](https://www.omscs.gatech.edu/cs-6250-computer-networks) has a list of useful papers [on Udacity](https://www.udacity.com/wiki/ud819/resources). There are also many more amazing resources on the web. 809 | 810 | ^1 - Used as the reference for 811 | 812 | - [CS60 at Dartmouth](http://www.cs.dartmouth.edu/~campbell/cs60/) where texts on Shell Scripting like **A Practical Guide to Linux Commands, Editors, and Shell Programming** by Mark G. Sobell are also recommended 813 | - [CS 356 at UT Austin](http://www.cs.utexas.edu/users/lam/cs356/) 814 | - [COS 461 at Princeton](https://www.cs.princeton.edu/courses/archive/spring17/cos461/) along with [^](#CNASDref)2 815 | - [CS244A at Stanford](http://web.stanford.edu/class/cs244a/) 816 | 817 | ^2 - Used as the reference for 818 | 819 | - [15-441 at CMU](https://www.cs.cmu.edu/~prs/15-441-F16/) 820 | - [Computer Networks at Oxford](https://www.cs.ox.ac.uk/teaching/courses/2017-2018/networks/) along with [^](#CNATref)3 821 | - [CS 640 at UWISC](http://pages.cs.wisc.edu/~pb/cs640.html) 822 | 823 | ^4 - Used as the reference for 824 | 825 | - [CS 408 at SU](http://people.sabanciuniv.edu/levi/cs408/) 826 | 827 | ^5 - It is regarded as the standard textbook in the field [according to Wikipedia](https://en.wikipedia.org/wiki/List_of_important_publications_in_computer_science#Networking). 828 | 829 | ^6, ^7 - Widely recommended in many courses listed above for additional reading, especially those at Princeton, Stanford and UWISC. 830 | 831 | [↑ Back to Table of Contents](#table-of-contents) 832 | 833 | ## Software Engineering 834 | 835 | ### Standard Textbooks 836 | 837 | 1. **Software Engineering: A Practitioner’s Approach** - Roger S. Pressman [[1]](#SEAPA) 838 | 2. **Software Engineering** - Ian Sommerville [[2]](#SEIS) 839 | 840 | ### Alternative/Supplementary 841 | 842 | 1. **An Integrated Approach to Software Engineering** - Pankaj Jalote [[3]](#AIASE) 843 | 2. **Software Engineering Fundamentals** - A. Behferooz and F. J. Hudson 844 | 3. **Fundamentals of Software Engineering** - Rajib Mall 845 | 4. **Software Engineering** - Gaurav Gupta and Deepika Gupta 846 | 5. **Encyclopedia of Software Engineering** - Philip A. LaPlante 847 | 6. **Software Engineering 1st Edition** - Udit Agarwal 848 | 7. **Algebraic Methodology and Software Technology** - Grigore Rosu and Jose Meseguer 849 | 8. **Software Design Methodology: From Principles to Architectural Styles** - Hong Zhu 850 | 9. **Object-oriented Software Engineering : using UML, patterns, and Java** - Bernd Bruegge and Allen Dutoit [[4]](#OOSE) 851 | 10. **The New Software Engineering** - Sue A. Conger [[5]](#TNSESC) 852 | 11. **The Pragmatic Programmer** - Dave Thomas and Andy Hunt [[6]](#TPPTH) 853 | 12. **Software Engineering** - Ivan Marsic [[7]](#SEIM) 854 | 13. **Design Patterns: Elements of Reusable Object-Oriented Software**- E. Gamma, R. Helm, R. Johnson, and J. Vlissides [[8]](#DPEROOS) 855 | 14. **Object-Oriented Software Engineering: Practical Software Development using UML and Java** - Timothy C. Lethbridge and Robert Laganière [[9]](#OOSELL) 856 | 15. **Fundamentals of Software Engineering** - Carlo Ghezzi [[10]](#FOSECG) 857 | 858 | ### Notes 859 | 860 | - Wikipedia has a [list of notable publications](https://en.wikipedia.org/wiki/Outline_of_software_engineering#Notable_publications) in Software Engineering. 861 | - [CS32 at Brown](http://cs.brown.edu/courses/cs0320/) recommends **Effective Java** by Joshua Bloch for some reason. 862 | - [EE 360F at UT Austin](http://users.ece.utexas.edu/~perry/education/SE-Intro/) has a list of papers and sections from multiple books as necessary readings for the course. 863 | 864 | ^1 - Used as the reference for 865 | 866 | - [15-413 at CMU](https://www.cs.cmu.edu/~aldrich/courses/413/) 867 | - [CS 501 at Cornell](http://www.cs.cornell.edu/courses/cs501/2000FA/index.html) along with other classic books like **The Mythical Man Month** by Frederick Brooks 868 | 869 | ^2 - Used as the reference for 870 | 871 | - [Introduction to Software Engineering at PSU](http://www.csci.psu.edu/seminars/fallnotes/SWEintro.pdf) (Note: Syllabus page only) 872 | 873 | ^3 - Used as the reference for 874 | 875 | - [CS 320 at UMass](https://people.cs.umass.edu/~brun/class/2013Spring/CS320/) 876 | 877 | ^4 - Used as the reference for 878 | 879 | - [CS223 at Warwick](http://web.iitd.ac.in/~sumeet/sm.pdf) (Note: Syllabus and lecture pdf only) 880 | 881 | ^5 - Used as the reference for 882 | 883 | - [CS302 at Saylor Academy](https://learn.saylor.org/mod/page/view.php?id=686) 884 | 885 | ^6 - Used as the reference for 886 | 887 | - [CSE 403 at UoW](https://courses.cs.washington.edu/courses/cse403/) 888 | 889 | ^7 - A [free book](http://www.ece.rutgers.edu/~marsic/books/SE/book-SE_marsic.pdf) written by the instructor of [ECE 14:332:452 at Rutgers](http://www.ece.rutgers.edu/~marsic/Teaching/SE/). 890 | 891 | ^8 - Used as the reference for 892 | 893 | - [CSE870 at MSU](http://www.cse.msu.edu/~cse870/index.php) along with many other articles from literature 894 | - [Foundations of Software Engineering at BGU](https://www.cs.bgu.ac.il/~fsen141/Main) along with many other textbooks 895 | 896 | ^9 - Used as the reference for 897 | 898 | - SEG 2100 at UoO which cannot be accessed. Instead the author provides supporting materials and other links [here](http://www.site.uottawa.ca/school/research/lloseng/). 899 | 900 | ^10 - Used as the reference for 901 | 902 | - [CSE2102 at UConn](http://www.engr.uconn.edu/~steve/Cse2102/cse2102.html) 903 | 904 | ## Distributed Systems 905 | 906 | ### Standard Textbooks 907 | 908 | 1. **Distributed Systems: Principles and Paradigms** - Andrew S. Tanenbaum and Maaten Van Steen [[1]](#DSPP) 909 | 2. **Distributed Systems : Concepts and Design** - George Coulouris, Jean Dollimore, Tim Kindberg and Gordon Blair [[2]](#DSCD) 910 | 911 | ### Supplementary Reading: 912 | 913 | 1. **Distributed Computing: Fundamentals, Simulations, and Advanced Topics** - Hagit Attiya and Jennifer Welch [[3]](#DCFSAT) 914 | 2. **Distributed Computing: Principles, Algorithms, and Systems** - Ajay D. Kshemkalyani and Mukesh Singhal [[4]](#DCPAS) 915 | 3. **Elements of Distributed Computing** - Vijay K. Garg 916 | 4. **Distributed Algorithms** - Nancy Lynch 917 | 5. **Distributed Systems** - Jie Wu 918 | 6. **Distributed Systems** - Sape Mullender 919 | 7. **Guide to Reliable Distributed Systems: Building High-Assurance Applications and Cloud-Hosted Services** - Kenneth P. Birman [[5]](#GTBRDS) 920 | 921 | ### Notes 922 | 923 | - [TYCS](https://teachyourselfcs.com/#distributed-systems) recommends [^](#DSPPref)1 for self study and also links to a [set of useful papers](http://dsrg.pdos.csail.mit.edu/papers/). 924 | - [CS244b at Stanford](http://www.scs.stanford.edu/17au-cs244b/) appears to have its own set of lecture notes and readings from various papers as does [CS 417 at Rutgers](https://www.cs.rutgers.edu/~pxk/417/index.html). 925 | - [CS 739 at UWISC](http://pages.cs.wisc.edu/~remzi/Classes/739/Fall2016/index.html) also has a list of papers linked for reading. 926 | - [CS 4513 at WPI](http://web.cs.wpi.edu/~cs4513/c16/) takes a hands-on approach to the class and has a variety of papers to read as part of a Graduate Level course. Similarly, [CS6963 at UoU](http://www.cs.utah.edu/~stutsman/cs6963/) is also a graduate level course. 927 | - [CS4790 at UMSL](http://www.umsl.edu/~siegelj/cs4790/) appears to be an interesting course focused on practical examples in C, but appears to have a different syllabus than described at my college. 928 | 929 | ^1 - Used as the reference for 930 | 931 | - [CPSC 416 at UBC](https://www.cs.ubc.ca/~bestchai/teaching/cs416_2017w2/index.html) which uses the [Go programming language](golang.org/) extensively for projects and readings 932 | - [CSCI 339 at WC](https://www.cs.williams.edu/~jeannie/cs339/index.html) along with [^](#DSCDref)2 933 | - [Distributed Systems at CU](https://www.cs.columbia.edu/~du/ds/) along with optional resources 934 | - [CS 455/555 at BSU](http://cs.boisestate.edu/~amit/teaching/455/cs455-555.html) 935 | - [COS-418 at Princeton](https://www.cs.princeton.edu/courses/archive/fall16/cos418/) with several other resources linked 936 | - [CMPSCI 677 at UMass](http://lass.cs.umass.edu/~shenoy/courses/677/) 937 | - [CAS CS451/651 at BU](http://www.cs.bu.edu/~jappavoo/jappavoo.github.com/cs451.html) but uses papers for primary readings 938 | - [CS4103 at St. Andrews](https://info.cs.st-andrews.ac.uk/student-handbook/modules/CS4103.html) along with [^](#DSCDref)2 939 | - [15-440/640 at CMU](http://www.cs.cmu.edu/~srini/15-440/) which also recommends reading through the lecture notes 940 | 941 | ^2 - The book has a [companion website](http://www.cdk5.net/wp/) as well. Used as the reference for 942 | 943 | - [CSCI-1380 at Brown](http://cs.brown.edu/courses/csci1380/s18/) 944 | - [CS455 at CSU](https://www.cs.colostate.edu/~cs455/) along with [^](#DSPPref)1 and a slew of other textbooks and papers listed on the syllabus page 945 | - [CS556 at UOC Greece](http://www.csd.uoc.gr/~hy556/) along with [^](#DSPPref)1 and a number of other books as well 946 | - [CS6450 at UoU](http://www.cs.utah.edu/~stutsman/cs6450/) along with [^](#DSPPref)1 and [^](#GTBRDSref)5 947 | - [CS 425:ECE 428 at UIUC](https://courses.engr.illinois.edu/cs425/fa2017/lectures.html) with many more useful resources linked 948 | 949 | ^3 - Used as the reference for 950 | 951 | - [CS 425/525 at UoW](https://homes.cs.washington.edu/~arvind/cs425/) along with [^](#DSCDref)2 952 | 953 | ^4 - Used as the reference for 954 | 955 | - [CS 553 at UIC](https://www.cs.uic.edu/~ajayk/c553fa18.html) along with a host of papers and other readings 956 | 957 | [↑ Back to Table of Contents](#table-of-contents) 958 | 959 | # References 960 | 961 | ## Websites 962 | 963 | [Teach Yourself CS](https://teachyourselfcs.coms) 964 | [List of Notable Publications in Software Engineering - Wikipedia](https://en.wikipedia.org/wiki/Outline_of_software_engineering#Notable_publications) 965 | [List of Important Publications in Computer Science](https://en.wikipedia.org/wiki/List_of_important_publications_in_computer_science) 966 | [Is there a list of the canonical introductory textbooks covering the major branches of computer science? - /r/COMPSCI](https://np.reddit.com/r/compsci/comments/gprp0/is_there_a_list_of_the_canonical_introductory/c1pcqe5/) 967 | [What are the canon books in Computer Science? - /r/COMPSCI](https://www.reddit.com/r/compsci/comments/40mq3q/what_are_the_canon_books_in_computer_science/) 968 | [What Books Should Everyone Read? - Theoretical Computer Science Stack Exchange](https://cstheory.stackexchange.com/questions/3253/what-books-should-everyone-read) 969 | [What papers should everyone read? - Theoretical Computer Science Stack Exchange](https://cstheory.stackexchange.com/questions/1168/what-papers-should-everyone-read?noredirect=1&lq=1) 970 | [List of Important Publications in Computer Science](https://en.wikipedia.org/wiki/List_of_important_publications_in_computer_science) 971 | [Data Structures - Further Reading](https://en.wikipedia.org/wiki/Data_structure#Further_reading) 972 | [Database - Further Reading](https://en.wikipedia.org/wiki/Database#Further_reading) 973 | [Programming Language - Further Reading](https://en.wikipedia.org/wiki/Programming_language#Further_reading) 974 | [Microarchitecture - Further Reading](https://en.wikipedia.org/wiki/Microarchitecture#Further_reading) 975 | [Algorithms - Further Reading](https://en.wikipedia.org/wiki/Algorithm#Further_reading) 976 | [Theory of Computation - Further Reading](https://en.wikipedia.org/wiki/Theory_of_computation#Further_reading) 977 | [Automata Theory - Further Reading](https://en.wikipedia.org/wiki/Automata_theory#Further_reading) 978 | [Operating System - Further Reading](https://en.wikipedia.org/wiki/Operating_system#Futher_reading) 979 | [Discrete Mathematics - Further Reading](https://en.wikipedia.org/wiki/Discrete_mathematics#Further_reading) 980 | [Information Theory - References](https://en.wikipedia.org/wiki/Information_theory#References) 981 | [Compiler - References](https://en.wikipedia.org/wiki/Compiler#References) 982 | [History of Compiler Construction - Wikipedia](https://en.wikipedia.org/wiki/History_of_compiler_construction) 983 | [List of Compiler Books - GCC Wiki](https://gcc.gnu.org/wiki/ListOfCompilerBooks) 984 | [About compilers and interpreters - Developers Club](http://developers-club.com/posts/170735/) 985 | [Compiler Recommendations - dealloc // The Belkadan Software Blog](http://belkadan.com/blog/2015/11/Recommendations/) 986 | [Best books on compiler design/implementation? - Ars Technica Open Forum](https://arstechnica.com/civis/viewtopic.php?t=676560) 987 | [Computer Network - Further Reading](https://en.wikipedia.org/wiki/Computer_network#Further_reading) 988 | [Software Engineering - Further Reading](https://en.wikipedia.org/wiki/Software_engineering#Further_reading) 989 | [Distributed Computing - References](https://en.wikipedia.org/wiki/Distributed_computing#References) 990 | [Best Reference Books - San Foundry](https://www.sanfoundry.com/best-reference-books-computer-science-engineering/) 991 | 992 | [↑ Back to Table of Contents](#table-of-contents) 993 | 994 | ## Courses 995 | 996 | - Data Structures and Algorithms 997 | 998 | [PLDS210 - University of Auckland](https://www.cs.auckland.ac.nz/software/AlgAnim/ds_ToC.html) 999 | [15-111 - Carnegie Mellon University](https://www.andrew.cmu.edu/course/15-111-kesden/) 1000 | [CS 61BL - Berkeley University](https://sp18.datastructur.es/) 1001 | [Data Structures and Algorithms (Level 1/C) - University of Birmingham](http://www.cs.bham.ac.uk/~jxb/dsa.html) 1002 | [CS 302 - University of Nevada, Reno](https://www.cse.unr.edu/~mgunes/cs302/cs302fa12/) 1003 | [CS 226 - Princeton University](https://www.cs.princeton.edu/~rs/AlgsDS07/) 1004 | [CSE 2010 - Florida Institute of Technology](https://cs.fit.edu/~pkc/classes/ds/) 1005 | [600.226 - John Hopkins University](http://www.cs.jhu.edu/~hager/Teaching/cs226/) 1006 | [CS 315 - University of Texas at Austin](http://www.cs.utexas.edu/users/novak/cs315.html) 1007 | [CS 206 - Bryn Mawr College](https://cs.brynmawr.edu/cs206/) 1008 | [CS 213(M) - Indian Institute of Technology, Bombay](https://www.cse.iitb.ac.in/~ranade/cs213/) (taken by **Abhiram Ranade**) 1009 | [CS 240 - Binghamton University](http://www.cs.binghamton.edu/~steflik/cs240/cs240.htm) 1010 | [CS 598 JGE - University of Illinois, Urbana-Champaign](http://jeffe.cs.illinois.edu/teaching/datastructures/) appears to be a graduate level course and hence has not been linked in the original section 1011 | 1012 | - Database Management Systems 1013 | 1014 | [Databases - Stanford Lagunita](https://lagunita.stanford.edu/courses/DB/2014/SelfPaced/about) (taken by **Jennifer Widom**) 1015 | [CS 186 - University of California, Berkeley](http://www.cs186berkeley.net/home) 1016 | [CS 4320/4321 - Cornell University](http://www.cs.cornell.edu/courses/cs4320/2008fa/) 1017 | [COMS 4111 - Columbia University](http://www.cs.columbia.edu/~coms4111/ewu.html) 1018 | [Introductory Databases - University of Birmingham](http://www.cs.bham.ac.uk/~rjh/courses/IntroToDBs/2017-18/index.htm) 1019 | [CMPT 354-D1 - Simon Fraser University](http://www.cs.sfu.ca/CourseCentral/354/rfrank/course_information.html) 1020 | [CS333 - University of San Francisco](https://www.cs.usfca.edu/~ejung/courses/333/index.html) 1021 | [CMPSC 431W - Pennsylvania State University](http://www.cse.psu.edu/%7Eyul189/cmpsc431w/index.html) 1022 | [EECS 339 - Northwestern University](https://www.mccormick.northwestern.edu/eecs/courses/descriptions/339.html) (Note: Syllabus page only) 1023 | [CS/SE 4347 - University of Texas at Dallas](https://www.utdallas.edu/~muratk/courses/undb07.html) 1024 | [CS662 - University of Virginia](http://www.cs.virginia.edu/~son/cs662.s06/) 1025 | [ECS 165A - University of California, Davis](http://web.cs.ucdavis.edu/~green/courses/ecs165a-w11/) 1026 | [CS145 - Stanford University](http://web.stanford.edu/class/cs145/) 1027 | [CS x265 - Vanderbilt University](https://my.vanderbilt.edu/cs265/) 1028 | [CS 23500/33550 - University of Chicago](https://www.classes.cs.uchicago.edu/archive/2017/winter/23500-1/syllabus.html) (Note: Syllabus page only) 1029 | [15-445/645 - Carnegie Mellon University](https://15445.courses.cs.cmu.edu/fall2017/) 1030 | [CS 348 - University of Waterloo](https://cs.uwaterloo.ca/~david/cs348/) 1031 | 1032 | - Principles of Programming Languages 1033 | 1034 | [601.426/626 - John Hopkins University](http://pl.cs.jhu.edu/pl/index.shtml) 1035 | [CSE526 - State University of New York at Stony Brook](https://bsd7.cs.stonybrook.edu/~cse526/) 1036 | [Principles of Programming Langugages - Politecnico di Milano, Dipartimento di Elettronica, Informazione e Bioingegneria](https://home.deib.polimi.it/pradella/PL.html) 1037 | [CS 152 - Harvard University](https://www.seas.harvard.edu/courses/cs152/2018sp/index.html) 1038 | [CS 6110 - Cornell University](https://www.cs.cornell.edu/courses/cs6110/2018sp/index.html) 1039 | [CS 6848 - Indian Institute of Technology, Madras](https://www.cse.iitm.ac.in/~krishna/courses/2015/odd-cs6848/) 1040 | [Principles of Programming Languages - Oxford University](https://www.cs.ox.ac.uk/teaching/courses/2017-2018/principles/) 1041 | [CS G111 - Northeastern University](https://course.ccs.neu.edu/csg111/) 1042 | [CSCI-UA.0480-006 - New York University](https://cs.nyu.edu/wies/teaching/popl-15/) 1043 | [CS704 - University of Wisconsin-Madison](https://github.com/barghouthi/cs704) 1044 | [CSCI 3155 - University of Colorado, Boulder](http://csci3155.cs.colorado.edu/s18/) 1045 | [CS 59 - Dartmouth University](http://www.cs.dartmouth.edu/~sergey/cs59/syllabus.pdf) 1046 | [CSCI 334 - Williams College](http://www.cs.williams.edu/~dbarowy/cs334s18/) 1047 | [CS 245 - Bryn Mawr College](https://cs.brynmawr.edu/Courses/cs245/fall2010/) 1048 | [CSc 520 - University at Arizona](https://www2.cs.arizona.edu/classes/cs520/spring06/) 1049 | [CSCI 3136 - Dalhouse University](https://web.cs.dal.ca/~nzeh/Teaching/3136/index.html) 1050 | [COMP 411 - Rice University](https://www.cs.rice.edu/~javaplt/411/14-spring/) 1051 | [CSC 272 - Adelphi University](https://home.adelphi.edu/~siegfried/cs272/) 1052 | [CS 3MI3 - MmMaster University](http://www.cas.mcmaster.ca/~franek/courses/cs3mi3/) 1053 | [15-312 - Carnegie Mellon University](https://www.cs.cmu.edu/~jcr/tpl.html) 1054 | [CMSC 245 - Haverford College](https://www.haverford.edu/computer-science/course-pages/2016f-cmsc-245-principles-programming-languages) (Note: Syllabus page only) 1055 | [TIE-20306 - Tampere University of Technology](http://www.cs.tut.fi/~popl/nykyinen/index.shtml) 1056 | 1057 | - Computer Organisation and Architecture 1058 | 1059 | [CS 312 - University of Missouri-St. Louis](http://www.cs.umsl.edu/~sanjiv/classes/cs312/) 1060 | [CS146 - Harvard University](http://www.eecs.harvard.edu/~dbrooks/cs146-spring2004/) 1061 | [ECE 411 - University of Illinois, Urban-Champaign](https://ece.illinois.edu/academics/courses/profile/ECE411) 1062 | [B62006Y-01 - University of Chinese Academy of Sciences](http://english.ucas.ac.cn/index.php/admission/undergraduate/course-syllabuses/620-school-of-computer-and-control-engineering/4471-principles-of-computer-organization) (Note: Syllabus page only) 1063 | [18-447 - Carnegie Mellon University](http://www.ece.cmu.edu/~ece447/s13/doku.php?id=schedule) 1064 | [CS 3410 - Cornell University](http://www.cs.cornell.edu/courses/cs3410/2016fa/) 1065 | [CS 61C - University of California, Berkeley](http://www-inst.eecs.berkeley.edu/%7Ecs61c/sp15/#Resources) 1066 | [CS 2505 - Virginia Tech](http://courses.cs.vt.edu/~cs2505/spring2018/) 1067 | [15-213/18-213 - Carnegie Mellon University](http://www.cs.cmu.edu/%7E213/) 1068 | [CS107 - Stanford University](http://web.stanford.edu/class/cs107/) 1069 | [EE382 - Stanford University](https://web.stanford.edu/class/ee382/) 1070 | 1071 | - Algorithm Design and Analysis 1072 | 1073 | [CS 600 A - Stevens Institute of Technology](https://www.cs.stevens.edu/~swetzel/CS600/spring11/) 1074 | [CSC2420 - University of Toronto](http://www.cs.toronto.edu/~bor/2420f12/) 1075 | [15-451/651 - Carnegie Mellon University](https://www.cs.cmu.edu/~15451/) 1076 | [15-451/651 - Carnegie Mellon University](http://www.cs.cmu.edu/~avrim/451f09/index.html) (older Fall 2009 version) 1077 | [CS 466/666 - University of Waterloo](https://cs.uwaterloo.ca/~eblais/courses/F17/CS466/) 1078 | [CSci 256 - Williams College](https://www.cs.williams.edu/~lenhart/cs256/index.html) 1079 | [CPSC500 - University of British Columbia](http://www.cs.ubc.ca/~condon/cpsc500/) 1080 | [CS 7200 - Wright State University](http://cecs.wright.edu/~tkprasad/courses/cs7200/cs7200.html) 1081 | [CS 161 - Stanford University](http://openclassroom.stanford.edu/MainFolder/CoursePage.php?course=IntroToAlgorithms) 1082 | [CS 7820 - Cornell University](http://www.cs.cornell.edu/courses/cs6820/2009fa/) (taken by **Jon Kleinberg**) 1083 | [CS 157 - Brown University](https://cs.brown.edu/courses/cs157/) 1084 | [CSE 373 - State University of New York](http://www3.cs.stonybrook.edu/~skiena/373/) (taken by **Steven Skiena**) 1085 | [COS226 - Princeton University](http://www.cs.princeton.edu/courses/archive/spring18/cos226/) 1086 | [Algorithms Part I](https://www.coursera.org/teach/algorithms-part1) and [Part II](https://www.coursera.org/teach/algorithms-part2) taught by **Sedgewick** and **Wayne** on Coursera 1087 | 1088 | - Theory of Computation 1089 | 1090 | [Automata Theory - Stanford Lagunita](https://lagunita.stanford.edu/courses/course-v1:ComputerScience+Automata+Fall2016/about) (taken by **Jefferey D. Ullman**) 1091 | [CSC 4170-50 - University of Pennsylvania](https://www.seas.upenn.edu/~cit596/notes/dave/syllabus.html) 1092 | [CS3102 - University of Virginia](http://www.cs.virginia.edu/~robins/cs3102/) 1093 | [CS-251 - École Polytechnique Fédérale de Lausanne EPFL](http://theory.epfl.ch/cs251/Home.html) 1094 | [CS 3800 - Northeastern University](https://course.ccs.neu.edu/cs3800f17wc/policies.html) 1095 | [CS39 - Dartmouth University](https://www.cs.dartmouth.edu/~ac/Teach/CS39-Spring18/) 1096 | [COMP 674 - Athabasca University](http://www.athabascau.ca/syllabi/comp/comp674.php) 1097 | 1098 | - Operating Systems 1099 | 1100 | [CS 6210 - Georgia Tech](https://www.omscs.gatech.edu/cs-6210-advanced-operating-systems) 1101 | [COSC4321.03, COSC5421.03 - University of Waterloo](https://cs.uwaterloo.ca/~brecht/courses/4321/) 1102 | [CS 318/418/618 - John Hopkins University](https://cs.jhu.edu/~huang/cs318/fall17/index.html) 1103 | [CS 385 - University of Illinois, Chicago](https://www.cs.uic.edu/~jbell/CourseNotes/OperatingSystems/) 1104 | [CS 347 - Indian Institute of Technology, Bombay](https://www.cse.iitb.ac.in/~mythili/teaching/cs347_autumn2016/index.html) 1105 | [CS 543 - Drexel University](https://www.cs.drexel.edu/~jjohnson/2012-13/fall/cs543/) 1106 | [CS170 - University of California, Santa Barbara](http://www.cs.ucsb.edu/~rich/class/cs170/) 1107 | [EDAF35 - Lund University](http://cs.lth.se/edaf35/?L=0) 1108 | [CS 446/646 - University of Nevada, Reno](https://www.cse.unr.edu/~mgunes/cs446/) 1109 | [TOM-2.1-CS - University of Twente](https://wwwhome.ewi.utwente.nl/~pieter/CS-OS/) 1110 | [CS 372 - University of Texas at Austin](http://www.cs.utexas.edu/users/witchel/372/) 1111 | [INF3151 - University of Oslo](https://www.uio.no/studier/emner/matnat/ifi/INF3151/) which is in Norwegian 1112 | [CS3013 - Worchester Polytechnic Institute](https://web.cs.wpi.edu/~cshue/cs3013/) 1113 | [CS-537 - University of Wisconsin-Madison](http://pages.cs.wisc.edu/~remzi/Classes/537/Spring2018/) 1114 | [CS140 - Stanford University](http://web.stanford.edu/~ouster/cgi-bin/cs140-spring18/index.php) 1115 | [CS422/522 - Yale University](http://flint.cs.yale.edu/cs422/) 1116 | [CS 140 - Harvard University](http://www.eecs.harvard.edu/~cs161/) 1117 | [COMS W4118 - Columbia University](http://www.cs.columbia.edu/~jae/4118/) 1118 | [CS 6560 - California State University, East Bay](https://www.cs.rutgers.edu/course/operating-systems-design) 1119 | 1120 | - Data Communications 1121 | 1122 | [CS 3413 - University of Texas at San Antonio](http://www.cs.utsa.edu/~korkmaz/teaching/cs3413/) 1123 | 1124 | - Microprocessors and Microcontrollers 1125 | 1126 | [Fundamentals of Microprocessors - University of Central Florida](http://www.cs.ucf.edu/~ahossam/teaching/microp/) 1127 | [CS758: Building Microprocessors - University of Wisconsin](http://pages.cs.wisc.edu/~karu/courses/cs758/fall2011/wiki/index.php) 1128 | 1129 | - Discrete Mathematics 1130 | 1131 | [CS103 - Stanford University](http://web.stanford.edu/class/cs103/) 1132 | [CS20 - Harvard University](https://www.seas.harvard.edu/courses/cs20/) 1133 | [CS 311 - University of Texas at Austin](http://www.cs.utexas.edu/~vl/teaching/311/) 1134 | [CS381 - Old Dominion University](http://www.cs.odu.edu/~cs381/index.html) 1135 | [CSE 191 - University at Buffalo, New York](https://cse.buffalo.edu/~rapaport/191/) 1136 | [6301 - University College London](https://www.ucl.ac.uk/maths/courses/undergraduates/modules/general-ancillary/general_ancillary_syllabuses/6301) 1137 | [14:332:312 - Rutgers University](http://eceweb1.rutgers.edu/~csi/DiscMath.html) 1138 | [CS 441 - Pittsburgh University](https://people.cs.pitt.edu/~milos/courses/cs441/) 1139 | [CS 70 - University of California, Berkeley](http://eecs70.org/) 1140 | [CS 207 - Indian Institute of Technology, Bombay](https://www.cse.iitb.ac.in/~akshayss/courses/cs207-2016.html) 1141 | [Discrete Structures and Combinatorics - Ben-Gurion University of the Negev](https://www.cs.bgu.ac.il/~dsc172/Main) 1142 | [CPS 102 - Duke University](https://www2.cs.duke.edu/courses/spring09/cps102/) 1143 | [MAT 385 - North Kansas University](http://ceadserv1.nku.edu/longa//classes/2002fall/mat385/) 1144 | [Discrete Math - Cambridge University](https://www.cl.cam.ac.uk/teaching/1314/DiscMath/) 1145 | [Discrete Mathematics - Oxford University](https://www.cs.ox.ac.uk/teaching/courses/2017-2018/discretemaths/) 1146 | [CS2102 - University of Virginia](https://uvacs2102.github.io/) 1147 | [MIT 6.042 - Mathematics for Computer Science](https://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-042j-mathematics-for-computer-science-fall-2010/) 1148 | [CS1010 - Indian Institute of Technology, Hyderabad](https://www.iith.ac.in/~aravind/cs1010.html) 1149 | [CS 30 - Dartmouth University](https://www.cs.dartmouth.edu/~ac/Teach/CS30-Winter18/) 1150 | [CSCI 2824 - University of Colorado, Boulder](https://www.colorado.edu/cs/csci-2824-discrete-structures) 1151 | 1152 | - Computer Graphics 1153 | 1154 | [CSCI 1230 - Brown University](https://cs.brown.edu/courses/cs123/) 1155 | [CS4620/CS4621 - Cornell](http://www.cs.cornell.edu/courses/cs4620/2014fa/index.shtml) 1156 | [CS 6360 - Inbdian Institute of Technology, Madras](http://www.cse.iitm.ac.in/~vplab/computer_graphics.html) 1157 | [Introduction to Computer Graphics - University of Illinois, Chicago](https://www.cs.uic.edu/~jbell/CourseNotes/ComputerGraphics/index.html) 1158 | [CS 488 - University of Illinois, Chicago](https://www.evl.uic.edu/aej/488/index.html) 1159 | [CMU 15-462/662 - Carnegie Mellon University](http://15462.courses.cs.cmu.edu/fall2015/) 1160 | [Computer Graphics - Oxford University](https://www.cs.ox.ac.uk/teaching/courses/2017-2018/graphics/) 1161 | [CS248 - Stanford University](http://graphics.stanford.edu/courses/cs248-18-spring/) 1162 | [CS 175 - Harvard University](https://sites.fas.harvard.edu/~lib175/) 1163 | [CS 465 - Bilkent University](http://www.cs.bilkent.edu.tr/~gudukbay/cs465/) 1164 | [EDAF80 - Lund University](http://cs.lth.se/edaf80/) 1165 | [CS 537 - Drexel University](https://www.cs.drexel.edu/~david/Classes/ICG/) 1166 | [CS 4102 - University of St. Andrews](https://info.cs.st-andrews.ac.uk/student-handbook/modules/CS4102.html) 1167 | [CSCI 2240: Interactive Computer Graphics - Brown University](https://dritchie.github.io/csci2240/) 1168 | 1169 | - Information Theory and Coding 1170 | 1171 | [CS 229r - Harvard University](http://people.seas.harvard.edu/~madhusudan/courses/Spring2016/) 1172 | [15-859 - Carnegie Mellon University](http://www.cs.cmu.edu/~venkatg/teaching/ITCS-spr2013/) 1173 | [CSE 533 - University of Washington](https://catalyst.uw.edu/workspace/anuprao/15415/86593) 1174 | [EE5581 - University of Minnesota](http://people.ece.umn.edu/~nihar/ee5581_fall05/index.html) 1175 | [CSCI1850 - Brown University](http://jwmi.github.io/IC/) 1176 | [TTIC 31200/CMSC 37220 - University of Chicago](http://ttic.uchicago.edu/%7Emadhurt/courses/infotheory2014/index.html) 1177 | [10-704 - Carnegie Mellon University](http://www.cs.cmu.edu/%7Eaarti/Class/10704/lecs.html) 1178 | [CS85/CS185 - Dartmouth University](http://www.cs.dartmouth.edu/%7Eac/Teach/CS85-Winter06/) 1179 | [COS 597D - Princeton University](http://www.cs.princeton.edu/courses/archive/fall11/cos597D/) 1180 | [COMPSCI 650 - University of Massachussets, Amherst](https://people.cs.umass.edu/~elm/Teaching/650_F14/) 1181 | [582650 - University of Helsinki](https://www.cs.helsinki.fi/group/cosco/Teaching/Information/2014/) 1182 | [CO 739-2 - University of Waterloo](http://www.math.uwaterloo.ca/~anayak/Site/Information_Theory.html) 1183 | [EECS 428 - Northwestern University](https://www.mccormick.northwestern.edu/eecs/courses/descriptions/428.html) 1184 | [ECE 563 - University of Illinois, Urbana-Champaign](https://ece.illinois.edu/academics/courses/profile/ece563) 1185 | [COMP 7404 - University of Denver](http://web.cs.du.edu/~ramki/courses/tpcs/infoTheory/index.html) 1186 | [CSC 310 - University of Toronto](https://www.cs.toronto.edu/~radford/csc310.F11/) 1187 | [CS 616 - Westminster University](https://www.westminster.edu/resources/dean/view_course_syllabus.cfm?id=769) 1188 | [CS 783 - Cornell University](http://www.cs.cornell.edu/courses/cs783/2007fa/) which has not been linked in relevant section due to being a graduate-level course 1189 | 1190 | - Compiler Design 1191 | 1192 | [CS143 - Stanford University](https://web.stanford.edu/class/cs143/index.html) 1193 | [CS4120 - Cornell University](http://www.cs.cornell.edu/courses/cs4120/2013fa/) 1194 | [ECS 142 - University of California, Davis](http://web.cs.ucdavis.edu/~pandey/Teaching/ECS142/ecs142_spring2011.html) 1195 | [CPSC 605-600 - Parasol Lab, Texas A&M University](https://parasol.tamu.edu/~rwerger/Courses/605/) 1196 | [CS 5461 - University of Minnesota Duluth](https://www.d.umn.edu/~rmaclin/cs5641/index.html) 1197 | [Compiler Design - National Chiao Tung University](https://people.cs.nctu.edu.tw/~ypyou/courses/Compiler-grad-s18/) 1198 | [COP5621 - Florida State University](https://www.cs.fsu.edu/~engelen/courses/COP5621/) 1199 | [CS 2210 - University of Pittsburgh](https://people.cs.pitt.edu/~wahn/teaching/cs2210/) 1200 | [CS 3300 - Indian Institute of Technology, Madras](http://www.cse.iitm.ac.in/~krishna/cs3300/) 1201 | [CS335 - Indian Institute of Technology, Kanpur](https://www.cse.iitk.ac.in/users/karkare/cs335/) 1202 | [CS 352 - Indian Institute of Technology, Roorkee](https://www.iitr.ac.in/departments/CSE/uploads/File/CS%20btech%20courses/Cs352-compiler.pdf) (Note: Syllabus page only) 1203 | [CS421 - University of Illinois, Urbana-Champaign](https://courses.engr.illinois.edu/cs421/fa2014/) 1204 | [CS5470 - University of Utah](http://www.cs.utah.edu/~parker/5470_Sp18.html) 1205 | [15-411 - Carnegie Mellon University ](https://www.cs.cmu.edu/~fp/courses/15411-f09/index.html) 1206 | [CS 432F & CS 728 - Indian Institute of Technology, Delhi](http://www.cse.iitd.ernet.in/~sanjiva/compilers.html) 1207 | [COSC 4353 - Texas A&M University-Corpus Christi](http://www.sci.tamucc.edu/~sking/Courses/Compilers/) 1208 | [CS 780 - Wright State University](http://cecs.wright.edu/~tkprasad/courses/cs780/cs780.html) 1209 | [CS 321 - Portland State University](http://web.cecs.pdx.edu/~sheard/course/Cs321/) 1210 | [CS 8803 - Georgia Institute of Technology](http://www.omscs.gatech.edu/cs-8803-o08-compilers-theory-and-practice) 1211 | [CS712/CS812 - University of New Hampshire](http://www.cs.unh.edu/~cs712/) 1212 | [CPSC 466 - Slippery Rock University of Pennsylvania](http://cs.sru.edu/~whit/handouts.466.s12.html) 1213 | [CS 8803 - Georgia Institute of Technology](https://in.udacity.com/course/compilers-theory-and-practice--ud168) online course on Udacity 1214 | 1215 | - Computer Networks 1216 | 1217 | [CS 6250 - Georgia Institute of Technology](https://www.omscs.gatech.edu/cs-6250-computer-networks) 1218 | [CS60 - Dartmouth University](http://www.cs.dartmouth.edu/~campbell/cs60/) 1219 | [CS 356 - University of Texas at Austin](http://www.cs.utexas.edu/users/lam/cs356/) 1220 | [COS 461 - Princeton University](https://www.cs.princeton.edu/courses/archive/spring17/cos461/) 1221 | [CS244A - Stanford University](http://web.stanford.edu/class/cs244a/) 1222 | [15-441 - Carnegie Mellon University](https://www.cs.cmu.edu/~prs/15-441-F16/) 1223 | [Computer Networks - Oxford University](https://www.cs.ox.ac.uk/teaching/courses/2017-2018/networks/) 1224 | [CS 640 - University of Wisconsin-Madison](http://pages.cs.wisc.edu/~pb/cs640.html) 1225 | [CS 408 - Sabancı Üniversitesi](http://people.sabanciuniv.edu/levi/cs408/) 1226 | [CS 527 - University of British Columbia](https://www.cs.ubc.ca/~bestchai/teaching/cs527_2015w1/index.html) is a PhD level course judging by appearance, so it has not been linked in the relevant section. 1227 | 1228 | - Software Engineering 1229 | 1230 | [CS32 - Brown University](http://cs.brown.edu/courses/cs0320/) 1231 | [EE 360F - University of Texas at Austin](http://users.ece.utexas.edu/~perry/education/SE-Intro/) 1232 | [15-413 - Carnegie Mellon University](https://www.cs.cmu.edu/~aldrich/courses/413/) 1233 | [CS 501 - Cornell University](http://www.cs.cornell.edu/courses/cs501/2000FA/index.html) 1234 | [Introduction to Software Engineering - Pennsylvania State University](http://www.csci.psu.edu/seminars/fallnotes/SWEintro.pdf) 1235 | [CS 320 - University of Massachusetts, Amherst](https://people.cs.umass.edu/~brun/class/2013Spring/CS320/) 1236 | [CS223 - University of Warwick](http://web.iitd.ac.in/~sumeet/sm.pdf) 1237 | [CS302 - Saylor Academy](https://learn.saylor.org/mod/page/view.php?id=686) 1238 | [CSE 403 - University of Washington](https://courses.cs.washington.edu/courses/cse403/) 1239 | [ECE 14:332:452 - Rutgers University](http://www.ece.rutgers.edu/~marsic/Teaching/SE/) 1240 | [CSE870 - Michigan State University](http://www.cse.msu.edu/~cse870/index.php) 1241 | [Foundations of Software Engineering - Ben-Gurion University of the Negev](https://www.cs.bgu.ac.il/~fsen141/Main) 1242 | [CSE2102 - University of Connecticut](http://www.engr.uconn.edu/~steve/Cse2102/cse2102.html) 1243 | 1244 | - Distributed Systems 1245 | 1246 | [CS244b - Stanford University](http://www.scs.stanford.edu/17au-cs244b/) 1247 | [CS 417 - Rutgers University](https://www.cs.rutgers.edu/~pxk/417/index.html) 1248 | [CS 739 - University of Wisconsin-Madison](http://pages.cs.wisc.edu/~remzi/Classes/739/Fall2016/index.html) 1249 | [CS 4513 - Worchester Polytechnic Institute](http://web.cs.wpi.edu/~cs4513/c16/) 1250 | [CS6963 - University of Utah](http://www.cs.utah.edu/~stutsman/cs6963/) 1251 | [CS4790 - University of Saint Mary of the Lake](http://www.umsl.edu/~siegelj/cs4790/) 1252 | [CPSC 416 - University of British Columbia](https://www.cs.ubc.ca/~bestchai/teaching/cs416_2017w2/index.html) 1253 | [CSCI 339 - Williams College](https://www.cs.williams.edu/~jeannie/cs339/index.html) 1254 | [Distributed Systems - Columbia University](https://www.cs.columbia.edu/~du/ds/) 1255 | [CS 455/555 - Boise State University](http://cs.boisestate.edu/~amit/teaching/455/cs455-555.html) 1256 | [COS-418 - Princeton University](https://www.cs.princeton.edu/courses/archive/fall16/cos418/) 1257 | [CMPSCI 677 - University of Massachussets, Amhersts](http://lass.cs.umass.edu/~shenoy/courses/677/) 1258 | [CAS CS451/651 - Boston University](http://www.cs.bu.edu/~jappavoo/jappavoo.github.com/cs451.html) 1259 | [CS4103 - University of St. Andrews](https://info.cs.st-andrews.ac.uk/student-handbook/modules/CS4103.html) 1260 | [15-440/640 - Carnegie Mellon University](http://www.cs.cmu.edu/~srini/15-440/) 1261 | [CSCI-1380 - Brown University](http://cs.brown.edu/courses/csci1380/s18/) 1262 | [CS455 - Colorado State University](https://www.cs.colostate.edu/~cs455/) 1263 | [CS556 - University of Crete, Greece](http://www.csd.uoc.gr/~hy556/) 1264 | [CS6450 - University of Utah](http://www.cs.utah.edu/~stutsman/cs6450/) 1265 | [CS 425:ECE 428 - University of Illinois, Urbana–Champaign](https://courses.engr.illinois.edu/cs425/fa2017/lectures.html) 1266 | [CS 425/525 - University of Washington](https://homes.cs.washington.edu/~arvind/cs425/) 1267 | [CS 553 - University of Illinois, Chicago](https://www.cs.uic.edu/~ajayk/c553fa18.html) 1268 | 1269 | [↑ Back to Table of Contents](#table-of-contents) 1270 | 1271 | ## Resources 1272 | 1273 | [**Data Structures and Algorithm Analysis**](http://people.cs.vt.edu/~shaffer/Book/) by Clifford A. Shaffer 1274 | [**Foundations of Computer Science**](http://infolab.stanford.edu/~ullman/focs.html) by Alfred V. Aho & Jeffrey D. Ullman 1275 | [**Fundamental Data Structures**](https://en.wikipedia.org/wiki/Book:Fundamental_Data_Structures) by Wikipedia Authors 1276 | [**Intermediate and Advanced Programming** - An Online Textbook for CMU 15-111](http://www.cs.cmu.edu/~clo/www/CMU/DataStructures/) by Ananda Gunawardena 1277 | [**Hug61B** - Book Companion to CS 61B](https://joshhug.gitbooks.io/hug61b/) by Josh Hug 1278 | [CS 315: Algorithms & Data Structures: Lecture Notes](https://www.cs.utexas.edu/users/novak/cs315contents.html) 1279 | [Animations to Assist Learning Some Key Computer Science Topics](http://courses.cs.vt.edu/~csonline/DataStructures/Lessons/index.html) 1280 | [Algorithms and Data Structures Animations for the Liang Java, C++, and Python Books](http://cs.armstrong.edu/liang/animation/animation.html) 1281 | [Data Structure Visualisations](https://www.cs.usfca.edu/~galles/visualization/about.html) 1282 | [CS 186 Video Lectures - University Berkeley](https://archive.org/details/UCBerkeley_Course_Computer_Science_186) 1283 | [**How to Design Programs**](http://www.ccs.neu.edu/home/matthias/HtDP2e/) by Matthias Felleisen, Robert Bruce Findler, Matthew Flatt, Shriram Krishnamurthi available under Creative Commons License 1284 | [Programming Language Theory](http://steshaw.org/plt/) 1285 | [Errata for **Concepts of Programming Languages**](http://theory.stanford.edu/people/jcm/books/cpl-errata.html) by John Mitchell 1286 | [**Great Works in Programming Languages**](https://www.cis.upenn.edu/~bcpierce/courses/670Fall04/GreatWorksInPL.shtml) 1287 | [**Principles of Programming Languages**](http://pl.cs.jhu.edu/pl/book/book.pdf) by Mike Grant, Zachary Palmer and Scott Smith available under Creative Commons License 1288 | [**The Algorithm Design Manual**](https://www8.cs.umu.se/kurser/TDBAfl/VT06/algorithms/BOOK/BOOK/BOOK.HTM) by Steven Skiena (for online reading) 1289 | [Lecture Slides for Kleinberg-Tardos](http://www.cs.princeton.edu/~wayne/kleinberg-tardos/) 1290 | [**Algorithms, Etc.**](http://jeffe.cs.illinois.edu/teaching/algorithms/) by Jeff Erickson 1291 | [Algorithm Notes for CS 466 at Waterloo](https://cs.uwaterloo.ca/~eblais/courses/F17/CS466/outline.pdf) 1292 | [**Algorithms**](https://algs4.cs.princeton.edu/home/) by Robert Sedgewick and Kevin Wayne (condensed version for reference) 1293 | [CS Readings](http://www.cs.virginia.edu/~robins/CS_readings.html) 1294 | [Xv6, a simple Unix-like teaching operating system - PDOS-MIT](https://pdos.csail.mit.edu/6.828/2012/xv6.html) 1295 | [Xinu Operating System](https://xinu.cs.purdue.edu/) 1296 | [**Operating Systems: Three Easy Pieces**](http://pages.cs.wisc.edu/~remzi/OSTEP/) by Remzi H. Arpaci-Dusseau and Andrea C. Arpaci-Dusseau 1297 | [Advanced Operating Systems Readings](https://www.udacity.com/wiki/ud156-readings) 1298 | [Microprocessors and their Architecture](https://www.byclb.com/TR/Tutorials/microprocessors/ch2_1.htm) 1299 | [Links to Intel documentation](https://software.intel.com/en-us/forums/intel-isa-extensions/topic/285900) 1300 | [Microprocessor Design - Wikibooks](https://en.wikibooks.org/wiki/Microprocessor_Design) 1301 | [Discrete Mathematics - Wikibooks](https://en.wikibooks.org/wiki/Discrete_Mathematics) 1302 | [**Mathematics for Computer Science**](https://uvacs2102.github.io/docs/mcs.pdf) by Eric Lehman, F. Thomson Leighton, and Albert R. Meyer 1303 | [Notes on Discrete Structures - Cornell University](https://www.cs.cornell.edu/~rafael/discmath.pdf) 1304 | [Notes - MIT 6.042 Mathematics for Computer Science](https://www.seas.harvard.edu/courses/cs20/MIT6_042Notes.pdf) 1305 | [A Course on Discrete Mathematics - Yale University](http://cs.yale.edu/homes/aspnes/classes/202/notes.pdf) 1306 | [Mathematics for Computer Science (2012)](https://www.iith.ac.in/~aravind/Files-DM/LLM-MFCS-2012.pdf) 1307 | [**How to Write Mathematics**](http://erickson.sites.truman.edu/files/2012/04/guide1.pdf) by Martin Erickson 1308 | [**Red Book**](http://www.opengl.org/documentation/red_book/) by John Kessenich, Graham Sellers and Dave Shreiner 1309 | [The Graphics Codex - Web Edition](http://graphicscodex.com/) 1310 | [**Information Theory, Inference, and Learning Algorithms**](http://www.inference.org.uk/mackay/itila/book.html) by David J. C. Mackay 1311 | [2011 Workshop on Complexity Information Theory in Theoretical Computer Science and Discrete Mathematics](http://sites.math.rutgers.edu/~saks/IT/) 1312 | [**A Mathematical Theory of Communication**](math.harvard.edu/~ctm/home/text/others/shannon/entropy/entropy.pdf) by Claude Shannon (1948) 1313 | [Awesome Compilers - GitHub](https://github.com/aalhour/awesome-compilers) 1314 | [Compiler Resources - @berkerpeksag on GitHub](https://github.com/berkerpeksag/notes/tree/master/learning/compilers) 1315 | [**Compiler Design in C**](https://holub.com/compiler/) by Allen I. Holub 1316 | [**Compiler Construction**](www.ethoberon.ethz.ch/WirthPubl/CBEAll.pdf) by Niklaus Wirth 1317 | [**Compiler Design: Theory, Tools, and Examples**](http://elvis.rowan.edu/~bergmann/books/cd/c_cpp/Text/C_CppEd.pdf) by Seth Bergmann 1318 | [**Understanding and Writing Compilers**](http://www.eis.mdx.ac.uk/staffpages/r_bornat/books/compiling.pdf) by Richard Bornat 1319 | [Supplementary Material for **Modern Compiler Implementation**](http://www.cs.princeton.edu/~appel/modern/) by Andrew W. Appel 1320 | [Compilers - Rip Lang](https://www.rip-lang.org/links/#compilers) 1321 | [Javascript Compiler References - Mozilla Wiki](https://wiki.mozilla.org/JavaScript:Compiler_References) 1322 | [Introduction to Software Engineering - Wikibooks](https://en.wikibooks.org/wiki/Introduction_to_Software_Engineering) 1323 | [**Software Engineering** ](http://www.ece.rutgers.edu/~marsic/books/SE/book-SE_marsic.pdf) by Ivan Marsic 1324 | [Supplementary Material for **Object-Oriented Software Engineering**](http://www.site.uottawa.ca/school/research/lloseng/) by Lethbridge and Laganière 1325 | [Software Engineering Notes from CS 440 at UIC](https://www.cs.uic.edu/~jbell/CourseNotes/OO_SoftwareEngineering/) 1326 | [Papers - Distributed Systems Reading Group](http://dsrg.pdos.csail.mit.edu/papers/) 1327 | [Compansion website for **Distributed Systems: Concepts and Design**](http://www.cdk5.net/wp/) by George Coulouris, Jean Dollimore, Tim Kindberg and Gordon Blair 1328 | [Go programming language](golang.org/) 1329 | 1330 | [↑ Back to Table of Contents](#table-of-contents) 1331 | 1332 | # Miscellaneous links 1333 | 1334 | [ACM Classic Books Series](https://dl.acm.org/classics.cfm) 1335 | [List of Useful Tutorials](http://www.cs.williams.edu/~dbarowy/cs334s18/#tutorials) 1336 | [Beej's Guides](http://beej.us/guide/) 1337 | 1338 | [↑ Back to Table of Contents](#table-of-contents) 1339 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2018 Abhishek Bhattacherjee 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /PULL_REQUEST_TEMPLATE.md: -------------------------------------------------------------------------------- 1 | Note that the three spaces before text with two spaces at the end allows for paragraphs without line breaks (if this is unclear, you may want to brush up on your [Markdown syntax](https://github.com/adam-p/markdown-here/wiki/Markdown-Cheatsheet)). 2 | 3 | The "**References**" section already exists, so make sure you add it in the correct place. Also, don't forget to add the topic heading in [readme.md](readme.md) as well as [Curriculum.md](Curriculum.md)! 4 | 5 | ## Topic Heading Here 6 | 7 | ### Standard Textbooks 8 | 9 | 1. **Book1** - Author1 and Author2 [1] 10 | 2. **Book2** - Author3 [2] 11 | 12 | ### Alternative/Supplementary 13 | 14 | 1. **Book3** - Author4 15 | 2. **Book4** - Author5, Author6 and Author 7 [3] 16 | 17 | ### Notes 18 | 19 | [1] - This is a brilliant book recommended by [X website](x-website). Used as the reference for 20 | 21 | - [CSxxx at UXX](course-hyperlink) 22 | - [CSxxx at UXX](course-hyperlink) 23 | 24 | [2] - Used as the reference for 25 | 26 | - [CSxxx at UXX](course-hyperlink) 27 | - [CSxxx at UXX](course-hyperlink) 28 | 29 | [3] - Used as reference for [CSyyy at UXYZ](course-hyperlink) where some famous instructor teaches. 30 | 31 | # References 32 | 33 | - [XYZ Curricula at XYZ University](hyperlink-to-curricula) 34 | 35 | ## Websites 36 | 37 | [some-wikipedia-page](with-wikipedia-link-here) 38 | [some-other-page](with-link-here) 39 | 40 | ## Courses 41 | 42 | - Topic-name 43 | 44 | [CSXXX - Full-univ-name-here](hyperlink-to-course) 45 | [CSXXX - Full-univ-name-here](hyperlink-to-course) 46 | [CSXXX - Full-univ-name-here](hyperlink-to-course) 47 | 48 | ## Resources 49 | 50 | - [awesome-resource](awesome-link) 51 | 52 | # Miscellaneous Links 53 | 54 | - [Something-awesome](awesome-link) 55 | -------------------------------------------------------------------------------- /readme.md: -------------------------------------------------------------------------------- 1 | # CS-Books 2 | 3 | ## README 4 | 5 | This repository was created to maintain a comprehensive list of textbooks and useful references for a Computer Science and Engineering Curriculum. In case you wish to contribute, please go through [the contributing guidelines](CONTRIBUTING.md). The current default branch is `dev` whereas `master` will eventually contain a complete curriculum. 6 | 7 | ## CS Curriculum Textbooks and References 8 | 9 | Being an avid book reader, I have found it absurdly difficult to find a comprehensive list of textbooks to use for reference and/or self learning. I have, therefore, set out to create and share it for all who wish to find the same. I have also linked courses that I could find across the web so that one may find a relevant guide to the particular topic. All linked course pages often have one or more additional references should the reader wish to explore the topic in greater depth. This list is by no means comprehensive, though it is an eventual target. There are also video lectures of many courses which are better located at [cs-video-courses](https://github.com/Developer-Y/cs-video-courses). 10 | 11 | ## [Table of Contents](Curriculum.md/#table-of-contents) 12 | 13 | - [Data Structures and Algorithms](Curriculum.md/#data-structures-and-algorithms) 14 | - [Database Management Systems](Curriculum.md/#database-management-systems) 15 | - [Principles of Programming Languages](Curriculum.md/#principles-of-programming-languages) 16 | - [Computer Organisation and Architecture](Curriculum.md/#computer-organisation-and-architecture) 17 | - [Algorithm Design and Analysis](Curriculum.md/#algorithm-design-and-analysis) 18 | - [Theory of Computation](Curriculum.md/#theory-of-computation) 19 | - [Operating Systems](Curriculum.md/#operating-systems) 20 | - [Data Communication](Curriculum.md/#data-communication) 21 | - [Microprocessors and Microcontrollers](Curriculum.md/#microprocessors-and-microcontrollers) 22 | - [Discrete Mathematics](Curriculum.md/#discrete-mathematics) 23 | - [Computer Graphics](Curriculum.md/#computer-graphics) 24 | - [Information Theory and Coding](Curriculum.md/#information-theory-and-coding) 25 | - [Compiler Design](Curriculum.md/#compiler-design) 26 | - [Computer Networks](Curriculum.md/#computer-networks) 27 | - [Software Engineering](Curriculum.md/#software-engineering) 28 | - [Distributed Systems](Curriculum.md/#distributed-systems) 29 | - [References](Curriculum.md/#references) 30 | - [Websites](Curriculum.md/#websites) 31 | - [Courses](Curriculum.md/#courses) 32 | - [Resources](Curriculum.md/#resources) 33 | - [Miscellaneous Links](Curriculum.md/#miscellaneous-links) --------------------------------------------------------------------------------