├── 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)
--------------------------------------------------------------------------------