Compare commits

...

423 Commits

Author SHA1 Message Date
Dang Trung An
c4061d43ad Reformat for readability and replace broken links 2026-03-27 11:00:43 -07:00
Chris Nyhuis
d50b626191 fix: pin 2 unpinned action(s)
Automated security fixes applied by Runner Guard (https://github.com/Vigilant-LLC/runner-guard).

Changes:
 .github/workflows/delete-empty-issues.yml | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)
2026-03-26 00:38:10 -07:00
justus-3
5242204807 Add "Code: The Hidden Language of Computer Hardware and Software" to extras/readings.md 2026-03-24 22:04:26 -07:00
Kevin Privett
a89a35cf32 Corrected spacing on course page, minor typos 2026-03-24 21:24:21 -07:00
Kevin Privett
7cab35b593 Typo - class-based link 2026-03-24 21:24:21 -07:00
kevintprivett
3cb81ba138 Add class-based course page. Update appropriate link in README 2026-03-24 21:24:21 -07:00
Kevin Privett
b65f71ba81 Update Coursera section of FAQ 2026-03-15 22:48:38 -07:00
alex mitre
4c225b1829 docs: fix minor README typos and spacing 2026-03-03 17:29:25 -08:00
An
817b1739f7 Update Programming Languages course link
Since the old course link (19au) now requires university login credentials to access it, I updated it to (19sp) version
2026-02-24 22:00:19 -08:00
Waciuma Wanjohi
bf6af682c6 Make pull request tutorial explicit 2026-02-06 00:13:52 -08:00
Waciuma Wanjohi
0c89345c10 Link directly to resources page
Hackr.io has made it increasingly difficult to navigate to
the page of community reviewed resources. Linking directly
to that page for learners.
2026-02-03 21:52:09 -08:00
Kevin Privett
524109b6d4 Update README.md 2026-01-15 02:01:15 -08:00
Waciuma Wanjohi
d8eb6079b8 Modern Robotics links to free uni coursepage rather than paid Coursera
Resolves #1379
2026-01-01 12:56:11 -08:00
nikty
4bd7e3c5f1 Added Part2 and Part3 links for Systematic Program Design course. 2025-12-30 23:19:46 -08:00
Kevin Privett
e637d3e8b8 Update Machine Learning course link in README 2025-12-30 22:56:05 -08:00
Kevin Privett
5607701e1d Update core theory course links from Coursera to edx and textbook website 2025-12-30 22:54:46 -08:00
Lenox Waciuma Wanjohi
86af22de10
Update Programming Languages from Coursera to university course page (#1355) 2025-08-23 11:48:52 -07:00
Daniel Kot
e573df9252
Add Powersearching with Google to extras (#1346) 2025-07-16 19:38:25 -07:00
Ada Christiansen
eaaa7e674d
Add Algorithms Illuminated to Readings (#1345)
The textbook version of the Stanford Algorithms set of courses from the OSSU curriculum
2025-07-05 08:15:40 +05:30
Ada Christiansen
4edb5ef49e
Update edx links in extra courses (#1343)
Most links were update to follow redirects.
The link to Delft University's Introduction to Functional Programming 404's, however, old links redirect to this URL, and so do search results on Edx. I assume this is a temporary issue from Edx and the page is supposed to be at this URL.

Colombia's Machine Learning and Data Science course is gone entirely, so that link was deleted.
2025-06-23 22:51:36 +05:30
Ada Christiansen
721baaed7f
Update edx links to follow redirects (#1342)
* Update Edx links to How to Code on SPD coursepage

* Update Edx links in the main curriculum
2025-06-19 23:13:50 +05:30
Ada Christiansen
c05e741750
Add Computer Networks: A Systems Approach to extra readings (#1340)
Computer Networks: A Systems Approach is a freely available web-based ebook that teaches computer networking from a bottom-up systems perspective, as opposed to the top-down approach seen in the OSSU curriculum. The book has been included in several university curricula, such as CMU's 15-441.
2025-06-18 22:15:14 +05:30
Lenox Waciuma Wanjohi
421ad5501f
Update Stat110 Link
Previous url now redirects to new url
2025-06-10 18:53:34 -07:00
Pulkit Krishna
29c19f30ab
Add SPD extra videos (#1336) 2025-06-08 18:34:13 +05:30
Ada Christiansen
ea4ae4a13e
Update extras/courses (#1334)
* Fix broken udacity links

* Switch CS61C to archive link

* Change database systems course to link to the course page
2025-05-30 23:14:01 -07:00
Pulkit Krishna
eda69ad881
Mark the course link as recommended to avoid confusion (#1331)
As per https://discord.com/channels/744385009028431943/744682430853808178/1372968301600178326
2025-05-21 17:37:52 +05:30
Vinicius Sa
17c83fb450
Update readings.md (#1330)
Remove a duplicate entry for the book How to Design Programs (2nd ed.).
2025-05-18 08:57:17 +05:30
Flomza
b05580b8ac
Change High School Math FAQ to OSSU Pre-College Math (#1324)
* Replace FAQ links with Pre-College Math

* Correct link

* Remove / for consistency
2025-05-13 07:51:00 +05:30
Speedy
dbf685a0ad
Update README.md (#1327)
Remove space from hyperlink. In short, the space in "spreadsheet " is removed to be "spreadsheet"
2025-05-10 20:38:01 +05:30
Nicholas Wilson
be58a0b345
docs[typo]: Update FAQ.md, fix grammar/spelling (#1323) 2025-04-11 18:35:04 -04:00
Pulkit Krishna
5601b037f7
Fix links to work properly on the website (#1319)
* force gh-pages to render CONTRIBUTING.md

* fix link to hs math faq

* fix links in the faq

* fix links in CONTRIBUTING.md

change gitter -> discord

* pin minima theme version

Pin the minima theme version, as recommended by https://github.com/jekyll/minima README
2025-04-08 16:32:59 +05:30
Pulkit Krishna
d630e8684a
Change website theme to minima (#1316)
Another attempt at switching to a better theme (with dark mode) for the OSSU CS github pages website. It looks like this: https://pulkitkrishna.eu.org/computer-science/

Changes:
- Change the theme to `minima`, the default jekyll theme (jekyll is the static site generator used by github pages). This supports a dark theme. if your OS and Browser is in dark mode, the website will appear with a dark theme.
- Made some changes to the theme's components to better fit the OSSU github repository layout, and not require any changes to the markdown files themselves. The goal is to not affect anyone who uses the github repository instead, in any way.
- Added a favicon
- Change the OSSU banner and the "keep learning" image to local webp images, instead of png/jpeg hosted on imgur, to make them load faster.
- Remove the mention of curriculum version number.
2025-03-22 02:15:39 -04:00
Pulkit Krishna
0d85cfafc0
Make the high school algebra (Intro CS prerequisite) link consistent with the FAQ (#1315)
Change the link in the prerequisite column of the Intro CS course to point to the FAQ about high school math, and not to Khan academy, to keep things consistent
2025-03-08 05:30:47 -05:00
Pulkit Krishna
ab77965838
Add information about pset due dates (#1314)
* Add information about pset due dates

A frequently asked question from students on discord is whether they are supposed to do pset 1 just after lecture 2, when it requires topics which they have not covered yet. Add information about that.

* Update README.md
2025-02-28 00:41:32 -05:00
Pulkit Krishna
3ab2cd9014
Update the timeline spreadsheet link (#1310)
Change the timeline spreadsheet link to the updated one in the OSSU google workspace.
2025-02-23 01:04:22 -05:00
Zach Meyer
e2cfa871ed
Intro CS - 6.001L | Add notes
- Adds note about course textbook to be taken as optional as with any paid material listed in all OSSU courses
- Adds extra practice as shared by @pulkitkrishna00
- Modifies bullets to be numbered. Instructions should be numbered.
2025-02-23 01:01:38 -05:00
Daniel Kot
afb644e0b8
Replaced Modern C recommendation with Dive into Systems (#1302)
* Replaced Modern C recommendation with Dive into Systems

* Added Reverse project to readme

Resolves #1134
2025-02-01 01:09:31 -05:00
Kevin Mutwiri
61a4959cd5
Fix grammatical error (#1308) 2025-01-31 16:41:57 -05:00
Shay Molcho
0d6bc86222
Improving the visibility of one of the tables (#1306)
One of the tables has been fixed to look like all the other tables in the README
2025-01-24 03:18:54 -05:00
Matthew Stone
17df4161c8
Align OSSU Prerequisite Math FAQ with Discord Recommendations (#1301)
* Align OSSU Prerequisite Math FAQ with Discord Recommendations

* Add more links, fix grammar
2025-01-12 03:12:03 -05:00
Pulkit Krishna
b9357d42d4
Use relative URL for linking between Intro-CS and Intro-Programming coursepages (#1297)
* Update README.md

* Update README.md

* Update README.md

* Fix some links and typos
2025-01-03 00:50:43 -05:00
Sushant Gauli
32fe337cb9 Update README.md 2024-12-29 20:46:03 -05:00
Pulkit Krishna
8a40ea1e44 Update coursepages/intro-cs/README.md
Co-authored-by: Lenox Waciuma Wanjohi <waciumawanjohi@users.noreply.github.com>
2024-12-27 00:24:20 -05:00
Pulkit Krishna
1ed2e23a26 Update coursepages/intro-cs/README.md
Co-authored-by: Lenox Waciuma Wanjohi <waciumawanjohi@users.noreply.github.com>
2024-12-27 00:24:20 -05:00
Pulkit Krishna
e3d74c2bc5 Update README.md 2024-12-27 00:24:20 -05:00
Pulkit Krishna
14ebdfce57 Update Intro CS course 2024-12-27 00:24:20 -05:00
Pulkit Krishna
d37a35ada9 Update README.md 2024-12-27 00:24:20 -05:00
Pulkit Krishna
45e6124774 Update README.md 2024-12-27 00:24:20 -05:00
Min Soo Kang
04ef6b217d Fix alternative link to theory of computation 2024-12-24 00:11:05 -05:00
Daniel Kot
69d78af4db Link wasn't displaying properly (fixed) 2024-12-20 20:15:21 -05:00
Daniel Kot
959de833f9 Added alternative link to more open software engineering course 2024-12-20 20:15:21 -05:00
Daniel Kot
fd2ca51bb1 Update readings.md with updated link
Discrete Mathematics: An Open Introduction updated to 4th edition
2024-12-20 01:27:28 -05:00
Pulkit Krishna
702d6d87c3 Update Modern C Link
The Modern C Link in OSTEP course page was no longer working. Updated it with a link to the free version of latest edition.
2024-10-26 18:01:33 -04:00
Waciuma Wanjohi
ca910bdb71 Move Class Based Program Design earlier
Resolves #1272
2024-10-21 03:07:30 -04:00
Lucca Christiansen
67b4cd846f fix typo 2024-10-21 02:30:38 -04:00
Lucca Christiansen
c532c6aba1 Add relevant CS:APP labs to the x86 section of the extended approach. 2024-10-21 02:30:38 -04:00
Waciuma Wanjohi
22dc29dde1 Create issue closer 2024-09-30 03:04:59 -05:00
Waciuma Wanjohi
d4429bac53 Respecify pre-req 2024-09-22 20:24:35 -07:00
Pulkit Krishna
26b10c21a5 Revert back to original software engineering course
The original software engineering course from UBC was not available, and hence was temporarily switched to a Coursera course without any discussion. The original course is now once again available, so we should switch back to it.
2024-09-22 23:06:24 -04:00
Waciuma Wanjohi
a9110e2ccc Replace Object Oriented Design and Design Patterns courses
Resolves #1168
2024-09-10 17:09:47 +03:00
Luz
0a73fa7df8 Update SPD README.md Notes with reindent hotkey and how to delete whole words in Racket 2024-07-19 07:35:33 -04:00
Pulkit Krishna
b59187a7f8 Add another FAQ about 6.00.1x to its coursepage
Add the answer to a frequently asked question about 6.00.1x course: "Can I use VS Code/my favorite text editor?" to its coursepage.
2024-07-10 11:03:51 -04:00
lentil32
cbe94ed2e9 fix: typo in spd/README.md 2024-07-07 08:18:00 -04:00
Waciuma Wanjohi
4911893d5e Replace Missing Course with Lecture Playlist
Resolves #1234
2024-06-13 21:14:05 +03:00
Pulkit Krishna
b3ddf16670 Create _config.yml 2024-06-13 14:10:57 -04:00
Waciuma Wanjohi
f55b65bf16 Remove Projects PR template 2024-05-22 03:57:24 -04:00
Waciuma Wanjohi
80c22207e7 Move interactive textbook from courses to readings 2024-04-07 20:24:29 -04:00
Waciuma Wanjohi
368fbd6afd Remove Projects.md 2024-04-07 20:06:51 -04:00
Pulkit Krishna
bc733da3f4 Remove the newsletter link
The newsletter link does not work anymore. Also, AFAIK, it was not in active use anyway.
2024-04-02 20:29:51 -04:00
Pulkit Krishna
cc14c56715
Add SPD coursepage (#1225)
* Create README.md

* Add files via upload

* Update README.md

* Add files via upload

* Update README.md

* Update README.md

* Update readings.md

* Update README.md

* Update README.md

* Delete coursepages/spd/HTC2X.zip

* Delete coursepages/spd/htc-simple.zip

* Delete coursepages/spd/space-invaders-starter.rkt

* Delete coursepages/spd/ta-solver-starter.rkt

* Update README.md

* Add files via upload

* Add info about eabling automatic parentheses, square brackets and quotes
2024-04-01 20:46:39 -04:00
mgg143
7c1be44e8a Update courses.md
This change is adding the interactive, open-source, community-led SICP version that was adapted into JavaScript. 

This addition seems worthwhile because JavaScript may be a more appealing language to go through SICP with than the original Scheme. In addition, this JavaScript version of SICP was created with the apparent goal of being as close to the original Scheme version as possible:
https://sourceacademy.org/sicpjs/prefaces03
2024-04-01 20:42:34 -04:00
Pulkit Krishna
5976f5ba97
Add Intro CS coursepage and replace the OCW version with an archived version on Edx (#1224)
* Create README.md

* Add link to Intro CS course page

* Update README.md
2024-03-31 22:37:56 -04:00
Waciuma Wanjohi
578962c0f7 Align with div attribute
Github homepage does not respect the CSS centering
2024-03-31 00:05:45 -06:00
Waciuma Wanjohi
ee3f793ff4 Update page to use CSS for center alignment
Uses mozilla recommended CSS for centering:
https://developer.mozilla.org/en-US/docs/web/html/element/center
2024-03-30 08:23:23 -06:00
Pulkit Krishna
27026f47d2 Mark the Py4E course link as link
The Py4E course link in the intro cs coursepage was not marked as link. While GitHub renders it as link, the GitHub pages website don't. This PR fixes that.

The PR also fixes the CS50P discord invite link, which was expired. This time, I have made a link that never expires, and can be used an unlimited number of times.
2024-03-25 23:45:35 -04:00
Maru
191b37466a fix: quick stupid case corrections for Discord
can I brag about having contributed to ossu yet? :^)
2024-03-11 00:40:29 -04:00
Yukai Chou
ea0006c68d Move space between badges out of link text 2024-03-11 00:39:53 -04:00
Pablo Colturi Esteve
0a3e95a9af add final project into PROJECTS.md 2024-03-07 23:55:34 -05:00
Pulkit Krishna
a9a6e76a31
Remove mentions of outdated materials and add warning about them (#1212)
* Remove mentions of outdated materials and add warning about them

* Remove the new warning blockquote syntax

Seems like github pages don't support the new warning blockquote syntax

* Update README.md with suggestion from @waciumawanjohi (1)

Co-authored-by: Lenox Waciuma Wanjohi <waciumawanjohi@users.noreply.github.com>

* Update README.md with suggestion from @waciumawanjohi (2)

Co-authored-by: Lenox Waciuma Wanjohi <waciumawanjohi@users.noreply.github.com>

* Update README.md with suggestion from @waciumawanjohi (3)

Co-authored-by: Lenox Waciuma Wanjohi <waciumawanjohi@users.noreply.github.com>

---------

Co-authored-by: Lenox Waciuma Wanjohi <waciumawanjohi@users.noreply.github.com>
2024-02-18 12:16:58 -05:00
karim1safan
6aea5acf57 Adding discussions channels 2024-02-03 05:36:52 -05:00
Karim Safan
2ff09dd036
Adding a new URL course for Git and GitHub because the old link invalid (#1204) 2024-01-27 23:26:17 -05:00
Lenox Waciuma Wanjohi
6bbe6e3e48
Replace deleted course with its video playlist 2024-01-09 23:24:43 -05:00
Pulkit Krishna
0882b6742d
Use full word rather than abbreviation for accessibility (#1194)
* Hopefully fix some confusions regarding alt courses

Mention the full word "alternative" instead of the short form "alt" which may cause confusion to non-native speakers. Also change "/" to "," for the two parts of HTC course.

* Fixed the missing "alt"
2024-01-01 00:20:29 -05:00
Lenox Waciuma Wanjohi
8ca1e2b153
Add whitespace
May address #1191
2023-12-11 19:13:01 -05:00
Budi_Ubuntu
17e6800807 update Software Engineering: Introduction course 2023-11-09 02:36:44 -05:00
Lenox Waciuma Wanjohi
26d4035859
Create CNAME 2023-11-03 00:34:27 -04:00
Lenox Waciuma Wanjohi
56500c96b1
Delete CNAME 2023-11-03 00:06:56 -04:00
Lenox Waciuma Wanjohi
e9ae0f2093
Create CNAME 2023-11-03 00:06:26 -04:00
Lenox Waciuma Wanjohi
3b61739a68
Delete CNAME 2023-11-03 00:02:58 -04:00
Lenox Waciuma Wanjohi
6ee725cec4
Update CNAME 2023-11-02 23:28:03 -04:00
Lenox Waciuma Wanjohi
f75272ffb0
Create CNAME 2023-10-31 23:26:35 -04:00
Avishek Sen
ed2f6277e3 fix typos 2023-10-30 09:11:44 -04:00
zkv
b25b53a640 Changed typo 'strucked' to 'stucked' 2023-10-29 15:21:05 -04:00
Pulkit Krishna
7a630ac06a Fix CS50P pset links 2023-10-28 10:23:36 -04:00
Lenox Waciuma Wanjohi
4a53717f85
Update Process
Mention taking courses in parallel.

Resolves #1139
2023-10-15 13:39:43 -04:00
Lenox Waciuma Wanjohi
763d96e53f
Add alt for Computer Graphics
Resolves #1140
2023-10-15 13:31:03 -04:00
Pulkit Krishna
5d91adfc61 Fix the name of the Py4E course 2023-10-10 00:13:31 -04:00
Pulkit Krishna
f08ea7bc74
Add intro-programming course page (#1177)
* Create intro-programming course page (incomplete)

* Complete the intro-prgramming page

* Add intro-programming course page to the README file

* Fix spellings
2023-10-04 02:56:01 -04:00
Pulkit Krishna
b596a67d22 Add backt the HTDP book 2023-09-30 01:34:34 -04:00
Pulkit Krishna
f7fe84e910 Add better link for How to Code courses
Add the Systematic Program Design course (which consists of both parts of How to Code) as the main link and move How to Code to to alt.
2023-09-30 01:34:34 -04:00
Lenox Waciuma Wanjohi
1119281a1a
Remove 2023 Census link 2023-09-27 14:05:10 -04:00
Pulkit Krishna
7def64305a Correct the CS50 alt URL
https://cs50.harvard.edu/ just redirects to Edx. The course is available at https://cs50.harvard.edu/x/
2023-09-18 00:38:33 -04:00
Lenox Waciuma Wanjohi
85ffe64eb4
Move census link to top of page 2023-08-26 02:55:47 -04:00
Lenox Waciuma Wanjohi
4adea647b3
Census Announcement 2023-08-26 02:52:03 -04:00
Waciuma Wanjohi
d27b2dfc9a Update course link
Effective Thinking Through Mathematics
2023-05-04 22:28:21 -04:00
Ariston Lorenzo
9976b3b7d0
Update LICENSE copyright years (#1152) 2023-04-25 22:34:11 -04:00
waciumawanjohi
74380ad993
Update CURRICULAR_GUIDELINES.md
Reference the upcoming CS2023
2023-04-09 07:34:22 -04:00
Rob
c7bcd7f172
Added a PR template for projects. (#1136) 2023-04-05 00:23:08 -04:00
Thái Hữu Trí
4228100962
Add a new project from a student (#1130) 2023-04-05 00:18:41 -04:00
Choubs01
2d6398e134
fix core applications machine learning (#1143)
* Fix machine learning in core applications

The machine learning course is only 3 weeks long, not 11. Further, it's a very gentle introductory course. Even the prerequisite of Basic coding is stretching it, but it is as listed on the course page.

* Fix machine learning 

Machine learning should link to the entire specialization. The specialization is 11 weeks in all I believe, and they suggest 9 hours per week although that could be scaled down to 4-6 hours if you're just auditing. Also, the prerequisite should be basic coding, linear algebra is not necessary.

Closes #1118
2023-04-03 21:36:39 -04:00
Alaharon123
8afefe5fab
Correct link to resources below (#1133) 2023-02-05 21:14:33 -05:00
anantav51
15b87ddeee
Reduce time estimate for Probability 2023-01-21 13:13:31 -05:00
anantav51
6ab34fd0ee
Changed course for Theory of Computation to the one in openMIT (#1125)
Resolves #1096
2023-01-21 13:09:32 -05:00
waciumawanjohi
635035d032
Merge pull request #1126 from Choubs01/master
Grammar error fix
2023-01-14 21:24:50 -05:00
Choubs01
208f0e816c
Update CONTRIBUTING.md 2023-01-15 13:00:48 +11:00
waciumawanjohi
c9b62ac761
Merge pull request #1123 from anantav51/patch-1
Update FAQ to match changed course names
2023-01-11 10:43:21 -05:00
anantav51
e735723bf5
Update FAQ.md 2023-01-11 18:30:07 +08:00
waciumawanjohi
340ac60dc6
Merge pull request #1116 from spamegg1/master
Clarify OSTEP: add missing link, fix prerequisite
2022-12-19 03:13:20 -05:00
spamegg
b3cd1ac3a9
Merge pull request #1 from waciumawanjohi/structure-ostep-base-links
Add structure to links
2022-12-19 09:26:57 +03:00
Waciuma Wanjohi
0c7455cad0 Add structure to links 2022-12-18 17:48:39 -05:00
spamegg
73521f1e8a
Clarify OSTEP: add missing link, fix prerequisite 2022-12-18 16:09:47 +03:00
waciumawanjohi
6e0c33950f
Merge pull request #1115 from ossu/OSTEP-Approaches
Clarify OSTEP Options
2022-12-18 06:22:38 -05:00
Waciuma Wanjohi
674e4a92bd Clarify OSTEP Options
Direct most students to read OSTEP and complete homework.
Direct only students specializing in systems to undertake
the course projects

Resolves #1083

Co-authored-by: Waciuma Wanjohi <code@waciuma.com>
Co-authored-by: spamegg <spamegg@pm.me>
2022-12-18 02:35:08 -05:00
waciumawanjohi
4b2e76d490
Merge pull request #1099 from MartinOvington/master
Adding cloud data processsing project
2022-12-12 20:14:09 -05:00
waciumawanjohi
8538b131bd
Merge pull request #1105 from aayushsinha0706/master
UPDATE EXTRA/COURSES : ADDING SOME COOL EXTRA COURSES
2022-12-08 03:05:24 -05:00
waciumawanjohi
8e73bb8a53
Merge pull request #1107 from spamegg1/master
added resource explaining xv6 code for OSTEP
2022-12-08 02:46:07 -05:00
spamegg
94c6cc2664
added resource explaining xv6 code for OSTEP
fixed typo
2022-12-03 16:59:25 +03:00
spamegg
ffa5e057ca
added resource explaining xv6 code for OSTEP 2022-12-03 16:56:52 +03:00
Aayush SInha
e75a1f1201
Update courses.md 2022-11-30 07:55:51 +05:30
Aayush SInha
bde41056ca
Update courses.md 2022-11-30 07:50:03 +05:30
Aayush SInha
5ac170206a
Update courses.md 2022-11-30 07:49:37 +05:30
Aayush SInha
83760770e1
Update courses.md 2022-11-30 07:34:21 +05:30
waciumawanjohi
d953c82881
Merge pull request #1093 from romanbird/patch-1
Add 2011 Berkeley SICP in Scheme to extras
2022-11-27 01:55:33 -05:00
waciumawanjohi
72ea2ed206
Merge pull request #1101 from spamegg1/master
update How to Design Programs textbook link
2022-11-27 01:49:45 -05:00
spamegg
fa83972ce7
update How to Design Programs textbook link 2022-11-22 09:52:08 +03:00
martin
57c9b09f97
Update PROJECTS.md 2022-11-13 20:53:36 +00:00
martin
d96fa70f75
Update PROJECTS.md 2022-11-13 20:47:36 +00:00
Roman Bird
a5e319f743
Add 2011 Berkeley SICP in Scheme to extras
Since the Scheme version remains arguably as/more popular
2022-10-26 18:06:34 +01:00
waciumawanjohi
242338e01e
Merge pull request #1088 from Maheshkumar-novice/patch-2
Update exercism url to point to the current url
2022-10-12 23:38:28 -04:00
Maheshkumar P
c592ade526
Update exercism url to point to the current url 2022-10-13 00:08:22 +05:30
Waciuma Wanjohi
7a592ec9e9 Improve links
From a suggestion by @Alaharon123 here:
https://github.com/ossu/computer-science/issues/1078#issuecomment-1264661548
2022-10-02 08:22:18 -07:00
waciumawanjohi
004fbf6555
Merge pull request #1075 from spamegg1/master
change Logic course
2022-09-25 09:04:56 -04:00
waciumawanjohi
1abbe645a9
Merge pull request #1074 from aristonl/master
Update LICENSE copyright year
2022-09-16 18:11:11 -04:00
Ariston Lorenzo
59d808400b Update LICENSE copyright year
Signed-off-by: Ariston Lorenzo <4tl0renz0@gmail.com>
2022-09-16 13:50:46 -04:00
spamegg
4ce598b531
change Logic course 2022-09-09 15:48:26 +03:00
waciumawanjohi
36eb5d7086
Merge pull request #1071 from ossu/swap_intro_cs_to_ocw
Swap Intro CS from edX to OpenCourseWare
2022-08-23 19:16:16 -04:00
waciumawanjohi
9a33b0d36e
Merge pull request #1069 from angle943/patch-1
Update PROJECTS.md

Rewrites page description
2022-08-03 02:24:49 -04:00
Waciuma Wanjohi
5eca2e0f4f Swap Intro CS from edX to OpenCourseWare 2022-08-03 02:02:04 -04:00
Justin Kim
8bc44c0030
Update PROJECTS.md
Reword the top description of PROJECTS.md to make it more clear what this section is about.
2022-08-01 08:01:41 -05:00
waciumawanjohi
a8f1cd2916
Merge pull request #1062 from Password-and-authentication/patch-1
Fix typo
2022-07-16 07:12:07 -04:00
Eero Pomell
d3fa09f619
Fix typo
Small typo fix
2022-07-16 13:08:10 +03:00
Waciuma Wanjohi
182f593564 Rename intro file in directory to README.md
Users browsing the directory structure will better understand
which file to read first.
2022-07-15 22:10:09 -04:00
waciumawanjohi
e98a314b5b
Merge pull request #1058 from spamegg1/master
added hints and tips for OSTEP Project 2A
2022-07-12 02:10:49 -04:00
spamegg
2e9817a585
hints and tips for OSTEP Project 2A 2022-07-11 18:34:42 +03:00
waciumawanjohi
3c4a484753
Merge pull request #1057 from loginovma/add-link-to-table-of-contents
Add information security link to table of contents
2022-07-08 03:08:58 -04:00
Mikhail Loginov
fb24e34607 Add information security link to table of contents 2022-07-08 09:43:28 +03:00
waciumawanjohi
090236c336
Merge pull request #1056 from aayushsinha0706/master
Update README.md Addition of Advanced Information Security
2022-07-06 07:48:49 -04:00
Aayush SInha
72d573add3
Update README.md 2022-07-06 15:22:08 +05:30
Aayush SInha
8fabffc04f
Update README.md 2022-07-05 14:46:59 +05:30
waciumawanjohi
5a2838dc45
Replace discontinued Intro Sec Course
[Information Security: Context and Introduction](https://www.coursera.org/learn/information-security-data) has been discontinued.
Replacing with [Cybersecurity Fundamentals](https://www.edx.org/course/cybersecurity-fundamentals)
Resolves #1041
2022-07-04 16:35:08 -04:00
waciumawanjohi
0dbbd3f573
Merge pull request #1053 from spamegg1/master
added OSTEP course page
2022-07-04 15:18:22 -04:00
spamegg
b19105e7a7
added OSTEP course page
updated prerequisites on README
2022-06-21 18:28:30 +03:00
spamegg
f44cacd9f9
added OSTEP course page
fixed typos, removed/updated links
2022-06-21 18:22:21 +03:00
spamegg
8ec3c40250
added OSTEP course page
fixed typo
2022-06-21 11:51:27 +03:00
spamegg
69208efce1
added OSTEP course page 2022-06-21 11:47:39 +03:00
waciumawanjohi
5bed7e7625
Merge pull request #1048 from spamegg1/master
alternate links for Computation Structures
2022-06-20 14:58:09 -04:00
spamegg
0f87dc02ad
alternate links for Computation Structures
improved formatting
2022-06-11 21:25:42 +03:00
spamegg
6d39ae6dcc
alternate links for Computation Structures 2022-06-11 21:20:06 +03:00
waciumawanjohi
ee63ae2f34
Add DSA Textbook to Extras
Thank you to @hamzakat

Closes #994
2022-06-11 13:27:41 -04:00
waciumawanjohi
e2676ba335
Merge pull request #1047 from spamegg1/mfcs-solution
Math for CS 2010, 2015/2019 solutions
2022-06-11 11:16:35 -04:00
spamegg
4551cef396
Math for CS 2010, 2015/2019 solutions 2022-06-11 12:48:11 +03:00
waciumawanjohi
7217243634
Fix typo 2022-05-15 20:10:30 -04:00
waciumawanjohi
ad3be1fcec
Typo fix 2022-05-15 14:46:23 -04:00
waciumawanjohi
460b241a69
Replace Numerical Analysis Course
Resolves #1006
2022-05-15 14:45:42 -04:00
waciumawanjohi
6060aeaf16
Merge pull request #996 from ossu/faq-finding-courses
Add answer on finding courses
2022-05-15 13:07:18 -04:00
waciumawanjohi
5cec4a8b48
Remove note on provisional status
Having closed the [RFC: Add Security Courses](https://github.com/ossu/computer-science/issues/639), it is time to remove the provisional label from the Core Security section.
2022-05-15 13:04:02 -04:00
waciumawanjohi
89e8d10364
Merge pull request #1004 from aayushsinha0706/master
Update README.md Replacing Intellectual Property Law course
2022-05-15 11:14:33 -04:00
waciumawanjohi
72d235587e
Merge pull request #1018 from spamegg1/update-alt-link
update MathForCS dead alternate link
2022-04-05 20:29:00 -04:00
spamegg
f7a47ce705
update MathForCS dead alternate link 2022-04-05 10:20:44 +03:00
waciumawanjohi
26e6ca8aa2
Merge pull request #1014 from ethand605/master
Update full stack open hours/week
2022-03-27 23:24:46 -04:00
Ethan Deng
17b9adfb0e
Update full stack open hours/week
https://studies.cs.helsinki.fi/stats/courses/fullstackopen
According to the course stats, every part takes at least 15 hours to finish on average.
2022-03-27 17:48:35 -07:00
waciumawanjohi
6659d9509f
Merge pull request #1010 from nikoandpiko/readme-typo-fix
Fixes typos
2022-03-21 17:46:27 -04:00
Nick Roma
d802502f94 Fixes typos 2022-03-20 19:50:24 +09:00
Aayush SInha
cc213b20a8
Update README.md 2022-03-08 01:58:34 +05:30
waciumawanjohi
0218db632a
Merge pull request #1002 from ossu/remove-discrete-course-not-offered
Remove alternate course that is no longer offered.
2022-03-05 17:14:37 -05:00
Waciuma Wanjohi
1fd984c345 Remove alternate course that is no longer offered. 2022-03-05 14:13:30 -08:00
waciumawanjohi
f321ce2425
Merge pull request #990 from MattRieke/master
Cosmetic updates to headings
2022-03-02 01:05:45 -05:00
Waciuma Wanjohi
62ee314ffa Add link to goodreads in FAQ 2022-02-03 01:48:24 -08:00
Waciuma Wanjohi
14c2e0525e Add cs-video-courses 2022-02-03 01:45:55 -08:00
Waciuma Wanjohi
9e5a70a1bf Add answer on finding courses 2022-02-03 01:18:31 -08:00
Matt Rieke
fa898956eb Swapped Core security and Core applications links in the curriculum index to reflect the order of the page. Added a link for Core ethics to the index. Updated some capitalization. 2022-01-27 21:08:00 -08:00
waciumawanjohi
90ae924c1f
Merge pull request #982 from ossu/puzzles-and-grinds
Add puzzles-practice to extras
2021-12-16 22:59:31 -05:00
waciumawanjohi
e68cb6be48
Merge pull request #984 from DionGR/master
Added alternative to Intro to NumAnalysis
2021-12-10 14:25:33 -05:00
Dion Rigatos
314a384425
Added alternative to Intro to NumAnalysis.
Added MIT18-335J as an alternative to Introduction to Numerical Analysis.
2021-12-10 21:01:52 +02:00
waciumawanjohi
32555dd033
Merge pull request #948 from azzsal/master
Add The Linux Command Line book to Tools section in extra readings
2021-12-10 13:58:21 -05:00
waciumawanjohi
9e18a33d17
Merge pull request #983 from DionGR/master
Added Intro to Numerical Analysis
2021-12-10 13:43:45 -05:00
Dion Rigatos
a8d6524728
Added Intro to Numerical Analysis
Added Introduction to Numerical Analysis by HSE, a CS2013 Elective Course.
2021-12-10 20:27:16 +02:00
waciumawanjohi
40e0c63baa
Merge pull request #977 from saerosV/master
Fix link formatting
2021-12-10 13:04:55 -05:00
Waciuma Wanjohi
6d76921428 Add puzzles-practice to extras
Closes #783
2021-12-07 22:04:35 -05:00
waciumawanjohi
f8bc4df499
Merge pull request #981 from ossu/switch-linear-algebra-text
extras/books recommends Linear Algebra for Everyone
2021-12-07 20:56:29 -05:00
Waciuma Wanjohi
5076f8ea04 extras/books recommends Linear Algebra for Everyone
closes #910
2021-12-07 20:55:39 -05:00
waciumawanjohi
ad7ab298c2
Merge pull request #980 from nschloe/fix-links
fix some links
2021-12-06 18:19:47 -05:00
Nico Schlömer
163e029ad4
fix some links 2021-12-06 22:19:49 +01:00
Guilherme Marz Vazzolla
1b586d4c77
Fix link formatting 2021-12-03 15:49:28 -03:00
waciumawanjohi
295cd7c779
Merge pull request #956 from saerosV/master
Add books, fix markdown formatting
2021-11-26 10:47:15 -05:00
waciumawanjohi
6638554c3b
Update Ethics Course Discord Links 2021-11-06 16:53:13 -04:00
waciumawanjohi
bd4df0363a
Merge pull request #971 from aayushsinha0706/master
Add Ethics Courses
2021-11-06 13:50:04 -07:00
aayushsinha0706
2b10d09f06
Update README.md 2021-11-07 01:23:19 +05:30
aayushsinha0706
af2a18854d
Add Ethics Course
Ethics being a very important education in field of computer science. CS 2013 Says, while technical issues are central to the computing curriculum, they do not constitute a complete educational program in the field. Students must also be exposed to the larger societal context of computing to develop an understanding of the relevant social, ethical, legal and professional issues. This need to incorporate the study of these non-technical issues into the ACM curriculum was formally recognized in 1991.
2021-11-07 01:17:39 +05:30
Guilherme Marz Vazzolla
03f7d2fc1c
Add books, fix formatting 2021-10-15 17:17:53 -03:00
NadaTElwazane
4d80e4c3de
fix: updated Computation Structures 1,2 & 3 links (#953) 2021-10-09 22:24:08 -04:00
Rodi
3501cac7eb
Add interesting/useful reading resources (#941) 2021-10-09 02:22:21 -04:00
Alaharon123
078c966ea3
Switch 3b1b Linear Algebra from pre to corequisite (#927)
Switch 3b1b Essence of Linear Algebra from prerequisite of MIT Linear Algebra to corequisite
2021-10-09 02:19:35 -04:00
azzsal
ae7c84eb8d Add The Linux Command Line book to Tools section in extra readings 2021-10-01 23:45:40 +03:00
riceeatingmachine
382189ea8a
Commit for RFC at issue #933 (#945)
* Commit for RFC at issue #933

Added by error

Co-authored-by: Harsh <Harshnagarwal@yahoo.in>
2021-09-15 22:43:11 -04:00
Elahi-cs
08bc81f862 Add Algorithms by Sedgewick
Add Algorithms by Robert Sedgewick on the basis that it's a freely available book from a reputable institution (it's the textbook for the Princeton Coursera courses). That being said, I haven't had the chance of reading the book so I can't personally comment on its quality.
2021-08-03 13:20:10 -04:00
Dody2
2d6ab0964f extras/courses: Add Introduction to Computational Thinking by MIT
As noted here #912 adding this course to The Math section
2021-07-27 22:01:16 -04:00
waciumawanjohi
e466566735
Update Team 2021-07-23 00:34:35 -04:00
Kye Davey
7479fe192d Removed Project with Dead Link
1. Removed Binary Machine project as repository link results is dead.
2. Fixed link to applications block.
2021-07-21 00:46:33 -04:00
waciumawanjohi
e840a85e83
Update core math blurb
Resolves #921
2021-07-17 06:45:06 -04:00
waciumawanjohi
38080e0274
Advanced Applications subsumed by Project
Clarifies that the advanced application list is a subset of a larger, unspecified, set of adequate options.
Advanced Applications was listed as a precursor and possible replacement for the final project. This merges the two and specifies that students may choose another avenue for creating a capstone project.

Resolves #830
2021-07-17 06:14:59 -04:00
waciumawanjohi
167de29fe1
Evaluation section update
Change language to encourage students to be proactive in seeking feedback for projects.
2021-07-17 05:54:31 -04:00
waciumawanjohi
ef25ae7ee6
Change Networking course to Kurose-Ross
Resolves #887
2021-07-17 05:38:40 -04:00
waciumawanjohi
80ac876827
Change calculus recommendation to OLL and OCW
Resolves #838, #886
2021-07-17 05:11:58 -04:00
waciumawanjohi
20a9ba51e3
Make Calculus Required
closes #841
2021-07-17 04:40:15 -04:00
waciumawanjohi
36b4f1570d
Remove course that is no longer offered
Resolves #907
2021-06-25 20:23:48 -05:00
waciumawanjohi
3395f9a939
Spreadsheet link prompts users to make a personal copy 2021-06-16 11:30:12 -05:00
waciumawanjohi
84fea11d4e
Reflects locked down CS Timeline Spreadsheet 2021-05-10 19:34:35 -05:00
waciumawanjohi
0eb3685797
Update other_curricula.md
Add new curriculum (writing started Summer 2019)
See more: https://github.com/functionalCS
2021-04-24 01:52:07 -05:00
Josip Ćavar
08456ba471 More realistic estimate for OS course
Hi,

I am currently taking this course and I am about half way into it. I already have a CS degree and I've been working as a developer for ~8 years.

The course is very interesting and comprehensive.
If you want to do this course properly, I think 6 hours per week for this course is bare minimum:
- There are ~3 hours of lectures each week
- The original course is split into 14 weeks
- Each chapter has homework at the end of it
- Homeworks are not very difficult, but some of them require significant amount of work
- Projects require significant amount of work
2021-04-09 22:34:57 -05:00
Elahi-cs
835c2c101d Update books' editions
* Updated the links for books that have a newer edition. I have included the authors' home page for the book where possible.
* Updated some titles to reflect the linked edition. I have maintained the original format (``2e`` for the books in the ``Programming`` section ``(2nd Edition)`` for the books in the other sections). Unifying the format could be something to consider.
2021-03-31 12:43:42 -05:00
Silent
33faf4f6df
Added alt link to ocw version of 6.002 in extra courses (#885)
* added OCW alt link for 6.002 in extra courses

* fixed parenthesis
2021-03-26 02:06:38 -04:00
Henrick Kakutalua
6b6cd0c5bd Updated links to both HtC Simple and Complex Data 2021-03-24 14:43:36 -05:00
spamegg
2045c7d4c0
updated Prolog link, added PDF version (fixes #868) (#873)
* updated Prolog link, added PDF version

* updated Prolog link, added PDF version

- removed `Text` column, added footnote instead

* updated Prolog link, added PDF version

- parentheses

* updated Prolog link, added PDF version

- added link to book source code
2021-03-09 11:09:48 -06:00
licjon
cd62dc334d
Changed link to Effective Thinking Through Mathematics course in extras (issue #870) (#871)
* Changed link to Effective Thinking Through Mathematics course in extras

* Delete .DS_Store

Co-authored-by: Jonathan Hustad <jonathanhustad@Jonathans-iMac.lan>
Co-authored-by: waciumawanjohi <waciumawanjohi@users.noreply.github.com>
2021-03-03 13:38:06 -06:00
waciumawanjohi
29d11d62e3 Update issue templates 2021-02-17 02:33:14 -06:00
Hanqiu Jiang
d6a491b33c feat: Change order of database courses 2021-02-16 02:18:43 -06:00
Tanya Nevskaya
759d4251b6 Include edX financial aid information 2021-02-16 02:17:10 -06:00
Tyler Miller
2eaf5636cc Update Game Design specialization
Bump to new version
2021-01-29 02:26:12 -06:00
Silent
03ad94e0d3 changed the discord invites
Changed the 2 invite links (one inside the svg) to direct to the #welcome discord channel. Also changed some relevant language.
2021-01-18 00:37:15 -06:00
waciumawanjohi
0ef1801cdd
Remove topic that is not covered in the section 2021-01-17 18:09:04 -06:00
waciumawanjohi
645917ac90
Remove prereq not mentioned by course creators 2021-01-05 22:25:19 -06:00
Waciuma Wanjohi
d4c50dc153 Move CS50 to Courses/Extras
Resolves #833
2021-01-02 20:46:56 -06:00
waciumawanjohi
1d5b3198d6
Remove direct link to issues
We often get issues opened that are empty, with no text or description of a problem. This may be because learners follow the link from the Community section, and post in order to interact. By removing the link (but keeping the link to the contributing instructions) we can hopefully direct new learners in how to interact productively.
2020-12-29 14:27:01 -06:00
waciumawanjohi
e94c974ad7
Sharpen FAQ answer language 2020-12-20 21:38:42 -06:00
Alaharon123
33a03e70c8 Add section to FAQ about alts 2020-12-20 21:33:05 -06:00
Uniminin
0b2f86e33e add two new books on systems 2020-12-20 10:50:34 -06:00
Alaharon123
b13ed89fd3 Switch Math for CS from OCW to OLL
Implement #832
2020-12-20 08:50:37 -06:00
waciumawanjohi
4362ea8eba
Direct Py4E students directly to the lessons 2020-12-13 16:02:15 -06:00
spamegg
b7732e02fa Removed Formal Concept Analysis (fixes #818)
- fixes #818
- removed `CUDA` and `GPU programming` from topics (left over from before)
2020-12-11 15:15:41 -06:00
waciumawanjohi
f4ea0ce7f3
Add link to completion estimate chart
Discord user crokei26#1613 created an initial version of this great resource. A huge thanks to them!
2020-12-04 17:04:36 -06:00
waciumawanjohi
a92b5077b4
Update Newsletter Address 2020-11-30 05:02:49 -06:00
Uniminin
f3e6b8608c replace dead link
Fix for [computer-science/issues/825](https://github.com/ossu/computer-science/issues/825)
2020-11-22 13:33:38 -06:00
Waciuma Wanjohi
166b2a744f Match recommended calc to course listed prereqs
https://www.edx.org/course/introduction-to-probability

'Familiarity with U.S. high school level algebra concepts; Single-variable calculus: familiarity with matrices, derivatives and integrals.'
2020-10-20 19:46:28 -05:00
silential
fe0fc125e2 Fixed Advanced Systems dead links 2020-09-27 18:08:04 -05:00
Waciuma Wanjohi
1005ebc96e Clarify that OSSU is not working in partnership with any org to offer degrees. 2020-09-19 23:36:39 -05:00
Waciuma Wanjohi
16ee010cfc Move the Missing Semester later in curriculum
Resolves #778
2020-09-19 22:46:29 -05:00
Waciuma Wanjohi
a178aefc61 Remove dead link.
Resolves #795
2020-09-19 22:39:37 -05:00
Waciuma Wanjohi
c11f2e31e2 Prerequisite section mention of high school math links to FAQ 2020-09-16 22:12:06 -05:00
bradleygrant
a4146bfdb4 Removed errant submodule added on prior commit 2020-09-16 01:12:22 -05:00
bradleygrant
5c811fc9da Changed Py4E hours of effort to match OSSU expected weekly effort levels 2020-09-16 01:12:22 -05:00
Waciuma Wanjohi
2eaff1b701 Update math prereq columns 2020-09-16 00:53:57 -05:00
Waciuma Wanjohi
c4e5bfe497 Use Discord Widget
[#173862703]

Authored-by: Waciuma Wanjohi <code@waciuma.com>
2020-09-16 00:49:52 -05:00
Waciuma Wanjohi
8df8f919c6 Update FAQ language and order
[#173862703]

Authored-by: Waciuma Wanjohi <code@waciuma.com>
2020-09-16 00:49:52 -05:00
spamegg
60afe095b4 Added link to Interactive Exercises from Kurose-Ross textbook website 2020-09-16 00:47:48 -05:00
spamegg
bfcd055938 Replaced FutureLearn pre-calculus with Khan Academy
- To be more consistent with our Khan Academy recommendation elsewhere in the curriculum
- also some students expressed confusion with the FutureLearn course
2020-09-16 00:47:48 -05:00
Waciuma Wanjohi
30f43d8ef1 Update help.md
[#173862703]

Authored-by: Waciuma Wanjohi <code@waciuma.com>
2020-09-11 13:02:53 -05:00
attackgnome
9743f25839 Update HELP.md
A server admin will have to enable the discord widget in the settings for the discord server
2020-09-11 12:44:26 -05:00
spamegg
077d18bf65 Removed redundant note from Advanced Systems
The note was referring to Electricity & Magnetism classes, which were removed.
2020-09-03 19:27:41 -05:00
Waciuma Wanjohi
2536c513e8 Delete reference to cohorts repo.
Cohorts repo was closed after an RFC.
Resolves #780
2020-09-03 19:15:21 -05:00
Waciuma Wanjohi
0046dac1af Remove unnecessary coursework from Advanced Systems.
Resolves #772
2020-08-30 00:49:10 -05:00
Waciuma Wanjohi
f38818729d Re-add newsletter link 2020-08-23 14:16:56 -05:00
Josh Hanson
522aa346da Add 'Discussion' header to Core Math and Core Systems 2020-08-16 20:09:33 -04:00
Waciuma Wanjohi
c6b2e81874 Change chat from Gitter to Discord 2020-08-16 17:20:22 -05:00
Waciuma Wanjohi
16c2cd9e8a Use Stanford Database courses
Stanford Database courses had long been part of the OSSU curriculum. When Stanford pulled down their platform Lagunita, OSSU had to find a new offering. With the Stanford material back on edX, OSSU should return to this high quality offering.

Resolves #718
Resolves #709
2020-08-16 04:35:58 -05:00
Waciuma Wanjohi
6b7f68be6d Update .gitignore 2020-08-16 00:58:10 -05:00
waciumawanjohi
c2c0ef656d
Course listing should match course title 2020-08-16 00:53:37 -05:00
Waciuma Wanjohi
cbaae0a31c Raise duration estimate to match Coursera's estimate 2020-08-16 00:46:18 -05:00
Waciuma Wanjohi
de5fa40761 Simplify Intro to Programming
Resolves #763
2020-08-16 00:46:18 -05:00
Waciuma Wanjohi
91d88dca4f Rearrange order of FAQ questions 2020-07-25 14:24:41 -05:00
Waciuma Wanjohi
54204c7c4e Add new question to FAQ
Tighten language on some FAQ answers
2020-07-25 14:18:35 -05:00
Cybermise
405df431aa Update README.md 2020-07-25 12:36:19 -05:00
Cybermise
e92d1cd2e5 Replace previous Probability course
Added a new probability course called Stat110 from Harvard, and moved the previous one to the extra courses page.
2020-07-25 12:36:19 -05:00
waciumawanjohi
26a7f90901
Switch Python for Everybody link
Students regularly ask in Gitter how to audit Python for Everybody (Py4E). The instructor of Py4E has created a free version on a standalone site. This has been the alternate link. Instead this should be the main link.
2020-07-25 11:15:01 -05:00
Travis Brackett
899bb92281 Python for Everyone > Python for Everybody
The course, book and website all say everybody instead of everyone. Just a little nit I noticed.
2020-07-20 00:18:22 -05:00
spamegg
c43aee63da Update readings.md
Removed Sheldon Axler's "Linear Algebra Done Right (FREE)" because it is no longer free after the end of July 2020. It was made free temporarily due to COVID-19.
2020-07-18 02:54:01 -05:00
spamegg
885452dabc Update courses.md
Moved Intro to Parallel Programming to Extras
2020-07-18 02:54:01 -05:00
spamegg
7e6af4863f Update README.md
Removed LAFF, changed Parallel Programming
2020-07-18 02:54:01 -05:00
spamegg
2ed708fb5b Update README.md 2020-07-18 02:54:01 -05:00
waciumawanjohi
eb0a45a549
Update OS Course Version
Resolves #707
2020-06-14 22:27:22 -04:00
waciumawanjohi
0e05196e4e
Update README.md 2020-06-10 00:57:29 -04:00
spamegg
a416cc4429 Updated PROJECTS.md
Finished Specialization, using its Capstone as Final Project
2020-06-09 20:50:11 -05:00
waciumawanjohi
b63f0bc4e4
How to audit the intro to programming courses
Resolves #724
2020-06-05 22:44:56 -04:00
waciumawanjohi
9edea7f712
Change Programming Languages Part A Prereq
Resolves 716
2020-06-05 21:31:59 -04:00
Aaron Hooper
7a74d27da5 Update link for Compiler Construction 2020-05-17 23:24:43 -04:00
Aaron Hooper
bcdb9c978c Remove link to dead domain 2020-05-17 23:24:43 -04:00
Aaron Hooper
b4b542d958 Update link to curricular guidelines 2020-05-17 23:24:43 -04:00
riceeatingmachine
cec3746513 Update README.md 2020-05-13 00:23:05 -04:00
aryzach
2665990266 updated Software Engineering prereqs and added relevant FAQ 2020-05-10 12:33:11 -04:00
waciumawanjohi
cd7fa72142
Make note more prominent 2020-05-07 20:07:39 -05:00
waciumawanjohi
9c7faa8663
Reflect addition of new Intro section. 2020-05-03 23:19:31 -05:00
Waciuma Wanjohi
ce8df13066 Replace LAFF with MIT's OCW Scholar Linear Algebra
Resolves #693
2020-05-03 01:10:03 -05:00
Waciuma Wanjohi
7595afa251 Add note to Changelog that curriculum is > v8 and < v9.
Resolves #674
2020-05-03 01:00:10 -05:00
spamegg
83d8db6355 Replaced Hack the Kernel with OSTEP
Implementing the proposal from issue 690: https://github.com/ossu/computer-science/issues/690
2020-05-03 01:00:10 -05:00
Waciuma Wanjohi
87db17d348 Add The Missing Semester
Resolves #678
2020-05-03 01:00:02 -05:00
Waciuma Wanjohi
239de1c6d0 Clarify that CS2013 is the curricular guidance for OSSU
Resolves #679
2020-05-03 00:21:00 -05:00
Waciuma Wanjohi
badd13a132 Move curricular guidelines out of extras. 2020-05-02 23:19:25 -05:00
waciumawanjohi
271b12dec6
Move courses to advanced
Change the Haskell course suggestion. A big thank you to @aryzach for prompting the switch.
Move courses to advanced programming. See Issue.
Closes #669
2020-05-02 23:01:35 -05:00
Manuel Esparza
9452a2001c Links to prerequisites courses added 2020-04-25 23:27:56 -05:00
Aaron Hooper
b1add90e99 Fix spelling mistake 2020-04-22 12:36:46 -05:00
waciumawanjohi
8b2135aa51
Simplify table of contents 2020-04-14 00:49:42 -05:00
waciumawanjohi
2495765654
Remove dead link 2020-04-12 15:33:07 -05:00
spamegg
1a61dc208d Added link to HW for Intro to Parallel Programming
Intro to Parallel Programming's grader is broken, it's impossible to submit programming assignments. It's also impossible to compile and run the code on your PC, unless you own an nVidia GPU. Thankfully some nice folks on Github created a Google Research Colab page where you can compile and run your homeworks (unfortunately the Final Exam is not available and probably never will be). I understand this uses Google's GPU sharing.
2020-04-12 15:32:03 -05:00
waciumawanjohi
1a8722d317
Update readings.md 2020-04-10 14:39:54 -05:00
Waciuma Wanjohi
758e087569 Include link to HtDP book and problem sets 2020-04-07 00:27:10 -05:00
Waciuma Wanjohi
7aabe23af4 Add security courses on a provisional basis.
See https://github.com/ossu/computer-science/issues/639
2020-04-07 00:16:57 -05:00
Aaron Hooper
bafc536960 Some extra whitespace 2020-04-06 00:19:40 -05:00
Aaron Hooper
13f2731715 Remove remaining references to Pro CS 2020-04-06 00:19:40 -05:00
spamegg
bfabc85527 Update README.md
Added Game Development Specialization to Advanced Applications
2020-04-05 10:09:50 -05:00
waciumawanjohi
74dc37f3e3
Add intro book on computer architecture 2020-04-04 00:54:54 -05:00
waciumawanjohi
a21b0db548
Remove Pro CS
Resolves #681
2020-04-01 20:39:17 -05:00
waciumawanjohi
974b7e8d8f
Update math prerequisites info 2020-03-28 17:45:19 -05:00
waciumawanjohi
f3ecd51de7
Remove mention of HS physics as a pre-req
Resolves #668
2020-03-28 17:27:17 -05:00
waciumawanjohi
97e52234f8
Add precal suggestions and Khan Academy 2020-03-28 17:23:30 -05:00
waciumawanjohi
2ddc587e2b
Ensure students can Ctrl-F for Gitter 2020-03-28 17:06:12 -05:00
Waciuma Wanjohi
0bd515a57f Update Contributing 2020-03-25 02:09:01 -07:00
Waciuma Wanjohi
ddb4883bce Make community section more visible 2020-03-25 01:42:06 -07:00
Waciuma Wanjohi
8b3fe645e1 Create section for students needing help 2020-03-25 01:36:05 -07:00
Waciuma Wanjohi
09e3160a19 Add course for language question to FAQ 2020-03-25 01:30:49 -07:00
waciumawanjohi
5228d46859
Update Contributing.md to focus on contributing
This section had information on contributing as well as how to get help. Separating these.
2020-03-24 21:24:21 -07:00
waciumawanjohi
bc0c5a1b3e
Update OOP Java Courses
Removes Bombay IIT course which has few reviews, which are middling. https://www.classcentral.com/course/edx-object-oriented-programming-1651

Updates mooc.fi address.
2020-03-24 19:21:02 -07:00
waciumawanjohi
879147a567
Update link
Link Firebase section directly to FAQ question/answer.
2020-03-24 19:15:06 -05:00
Aaron Hooper
fec43039d1 Databases -> Database 2020-03-20 11:14:57 -04:00
Josh Bodah
02975f49c2 Fix README ToC link
The ToC link was broken; this fixes it
2020-03-20 11:13:48 -04:00
waciumawanjohi
6f97c7b9d7
Add addition direction for Math for CS
Point students to Math for CS version with solutions to problem sets.
2020-03-19 05:01:43 -04:00
riceeatingmachine
4a5d530277 Update README.md 2020-03-18 22:19:45 -04:00
Alaharon123
2deca7ef2b Add Computer Architecture/Organization courses
Prerequisite for both is CS1-2. Either course (Berkeley and Carnegie Mellon) is suitable as an alternative to nand2tetris and/or 6.004 as the required course of choice for Computer Architecture/Organization. The Princeton course that's already here would have one of these 4 courses as a prerequisite and is suitable as an elective.
2020-03-15 20:47:05 -04:00
waciumawanjohi
02bdf891e6
Remove link to Patreon
This fundraising campaign was closed at the end of 2017. https://gitter.im/open-source-society/computer-science?at=5a354e4a232e79134d596781
2020-03-11 02:03:04 -04:00
saif.sohomow
b6d50b14f0 Algorithms Specialization
- Breaks down specialization into individual courses
 See: https://github.com/ossu/computer-science/issues/645#issuecomment-588705984
2020-03-10 23:56:34 -06:00
dhajn
db2aab4d4f Update link to Stanford Compilers
The 2018 course doesn't seem to be accessible anymore. The course is launching on edX on 16 March - I updated the link to the edX version and marked the youtube lectures as alternative.
2020-03-05 11:45:45 -07:00
Waciuma Wanjohi
e24e97acda Fixup math
Swap course order, readd header for core math info.
2020-03-04 19:10:45 -07:00
Alaharon123
e475addf99 Update to latest ABET guidelines 2020-03-04 18:16:30 -07:00
Waciuma Wanjohi
788f363ca0 Replace course that is no longer offered.
See: https://github.com/ossu/computer-science/issues/645
2020-03-04 03:04:40 -07:00
Waciuma Wanjohi
47d1562449 Replace disappearing course
See: https://github.com/ossu/computer-science/issues/645
2020-03-04 02:19:01 -07:00
Waciuma Wanjohi
2354e9eec4 Remove defunct courses
See: https://github.com/ossu/computer-science/issues/640
2020-03-04 01:53:21 -07:00
Waciuma Wanjohi
df581e55a7 Align math curriculum with CS2013
See: https://github.com/ossu/computer-science/issues/637
2020-03-04 01:03:18 -07:00
Josh Taylor
df1380ce44 Add Gitter link to Getting help in Summary section
Rationale: A new student probably does not know what Git, GitHub or Gitter are, so explaining what it is and putting it near the top of the page will help guide people to the Gitter more easily.
2020-03-03 02:11:01 -05:00
saif.sohomow
16d46b43c7 Removes extra column in table core theory 2020-02-20 07:58:16 +09:00
waciumawanjohi
e8e7b8f28c
Update courses.md 2020-02-11 17:09:55 -05:00
waciumawanjohi
318470e75c
Replace Algorithms
Stanford Lagunita is no longer available. Recommending the same course on the Coursera platform.

https://github.com/ossu/computer-science/issues/645
2020-02-11 17:01:45 -05:00
waciumawanjohi
a62fc346b6
Compilers - available material
Stanford Lagunita is closing. Replacing with material from the same professor.

https://github.com/ossu/computer-science/issues/645
2020-02-11 16:56:14 -05:00
waciumawanjohi
efc618c6e0
Replace Networking with Lectures from the course
Stanford Lagunita is no longer accepting new registrations. Replacing the course with just the lectures from the course. Note that there are already 4 programming assignments pulled from other resources that students are expected to complete.

See: https://github.com/ossu/computer-science/issues/645
2020-02-11 16:45:21 -05:00
matt
9eff731dc2 Added alt link for coursera Python for everyone _ new to course and my first commit 2020-02-11 16:38:50 -05:00
Waciuma Wanjohi
a4d876bb4f Update course time estimate
See conversation here:
https://github.com/ossu/computer-science/pull/578/
2020-01-29 03:01:17 -05:00
Jack Wong
230693a305 add cp book 2020-01-29 01:15:39 -05:00
Angel_Kitty
aa8d24f651 Update License file copyright year 2020-01-29 00:59:40 -05:00
Waciuma Wanjohi
28ab3a76cb Add link to lecture for Dist. Sys.
While Reliable Distributed Systems 1 is currently unavailable, the lectures for the course are still up on Youtube.
2020-01-26 23:21:18 -05:00
Waciuma Wanjohi
89c1cacac6 Change Robotics recommendation
Resolves #565
2020-01-26 16:57:03 -05:00
Waciuma Wanjohi
a08d2eedd2 Remove cryptography from Core Applications
Closes #570

Removing, as the course is too in depth on cryptography without teaching other important areas of security.

CS2013 specifies that the undergraduate CS curriculum include the Knowledge Area Information Assurance and Security (IAS). This knowledge area includes an introduction to cryptography. But unless students take an elective course in Cryptography, they need only demonstrate a familiarity with the topic, vocabulary, the use of primes in cryptography and how public keys are used.

As pointed out by @MohamedMandouh, this course is an advanced class offered at Stanford.

Meanwhile, IAS specifies a number of other important topics, which this class does not address.
2020-01-26 15:40:19 -05:00
waciumawanjohi
8de2c0551a Fix link in FAQ 2020-01-26 15:40:19 -05:00
waciumawanjohi
ee20dd1a0a Update FAQ link 2020-01-26 15:40:19 -05:00
Waciuma Wanjohi
4e4fc34d34 Rearrange community section
Elevate reference to the gitter chat room, as it is a community resource with regular usage. Remove references to the forum as it has not been taken up by users.

Resolves #551
2020-01-26 15:38:47 -05:00
Waciuma Wanjohi
f5f81226a4 Add note deprecating firebase app 2020-01-26 05:38:12 -05:00
Antony ekirapa
0f40285759 Included 'a' to 'education is scarce resource' 2019-10-21 19:32:56 -04:00
Waciuma Wanjohi
b073cb6fd7 Remove duration from Intro to Programming Courses.
See https://github.com/ossu/computer-science/issues/613
2019-10-13 12:37:36 -04:00
hematogender
c863d8baf9 Fixed curriculum structure
Added Intro CS section (h2) to follow initial ierarchy of the document.
Made Introduction to Programming and Introduction to Computer Science sub-sections (h3).
Also fixed Contents and Curriculum links to reflect these changes.
2019-10-13 12:37:22 -04:00
Charlie van Rantwijk
1ba60ede59 README: Small text fixes (#610)
* README: Small text fixes
2019-10-11 18:00:02 -04:00
Waciuma Wanjohi
6dee776593 Create section for Intro to Programming
Pursuant to the RFC:
https://github.com/ossu/computer-science/issues/589
2019-10-10 00:04:17 -04:00
zogamnuam
1eda3a287a Update readings.md
Programming and Programming Languages - updated to current stable version 2018
2019-10-09 21:12:10 -04:00
Maizbest
d56b071cf1 Update README.md
fix link to Assignment 3 in Core Systems
2019-09-08 11:19:54 -04:00
Waciuma Wanjohi
61ca8a76a3 Update Core Systems
Add assignments to Computer Networking course. See here:
https://github.com/ossu/computer-science/issues/520#issuecomment-515740803

Add an extra column to the Core Systems courses chart so that it can
hold information previously written above and below. Centralizing
information should improve readability.
2019-08-28 20:53:19 -04:00
waciumawanjohi
10be3f2be8
Merge pull request #580 from afilatov1989/fix_parallel_programming
Update "Introduction to Parallel Programming" link
2019-08-04 14:08:13 -04:00
Alexey Filatov
eae5780330 Update "Introduction to Parallel Programming" link 2019-07-09 12:21:30 +03:00
Tyler Miller
94e0d00792 Update to current version of LAFF course website (#571) 2019-04-11 12:34:39 -07:00
waciumawanjohi
f619668a70
Merge pull request #563 from Alaharon123/patch-1
Add ocw alt to 6.00.1x
2019-04-03 00:20:47 -04:00
Waciuma Wanjohi
90462ab85e Recommend 1 git course rather than 2 2019-04-03 00:11:51 -04:00
waciumawanjohi
e0aac2405a
Merge pull request #560 from agonxgashi/dev
Added Tools section on extra/courses
2019-04-03 00:09:06 -04:00
Waciuma Wanjohi
49617096c8 Update trello link to a current board. 2019-04-01 20:04:32 -04:00
Alaharon123
92821dcedd
Add ocw alt to 6.00.1x 2019-02-01 21:36:17 -05:00
Agon Gashi
b8432806ab Added Tools section on extra/courses 2019-01-28 09:41:24 +01:00
Agon Gashi
a202d46b4f Added Tools section on extra/courses 2019-01-28 09:39:12 +01:00
Michael Alexander Mejia Mora
545aa18cbf Update License file copyright year (#559) 2019-01-22 11:28:37 -08:00
Alaharon123
e89d89d4bd READINGS: Update links (#557)
Newer edition of Introduction to Computation and Programming Using Python uses Python 3 and the link to htdp was wrong.
2019-01-02 23:41:10 -05:00
Alexey Filatov
91c479540c READINGS: Add Introduction to the Theory of Computation (#545)
This books contains easy to understand introduction to the automata theory, which is missing in "Introduction to computing" book by David Evans. It does not require complicated math, so it can be useful to students who do not want to become theoretical computer scientists, but want do have general understanding of it's topics. Also, it almost perfectly matches The Automata Theory course we have in the curriculum.
2018-12-09 21:20:04 -05:00
Alexey Filatov
7d00e1c203 readings: Add Computer Systems: A Programmer's Perspective book
This is probably the best introduction to computer systems for programmers. It contains all needed essentials of computer architecture, describes how C language works internally (e.g. how data structures are organized in memory and managed on machine language level) and even describes essentials of operating systems.
2018-12-03 11:21:59 -05:00
Alexey Filatov
b52dd6a504 README: Update MIT Calculus links (#541)
Links to particular archived version are substituted with generic links, always pointing to the newest enrollments
2018-11-28 16:11:54 -05:00
Norbert Fuhs
31756c783e REQUIREMENTS: Fixed misspelling of 'language' (#537) 2018-11-26 13:06:18 -05:00
Alexey Filatov
3a74c22f8a README: Update Automata from archived (2016) to self-paced 2018-11-26 13:02:17 -05:00
Waciuma Wanjohi
379ef0dc3b Add curriculum guidelines to Extras 2018-11-06 00:30:32 -05:00
Bradley Grant
3097706b89 extras/courses: Add GTx CS1301 Course Sequence (#524)
GTx CS1301, "Computing In Python" is proposed as a supplemental course in the OSSU curriculum and as a potential future candidate for the Introduction to Computer Science course. It is an online-adapted version of the on-campus Introduction to Computing course for Georgia Tech computer science students. The online version is comprised of four parts, delivered on-demand via edX. The course is self-paced with 16 weeks of effort, and is 100% free to audit with all materials included. It covers all introductory CS topics discussed in MIT 6.00.1x from a language-agnostic perspective, while providing additional instruction and support in learning Python as a language. Students who complete this course will have an understanding of basic CS topics **and** a working knowledge of Python 3 they can immediately apply to interesting problems.
2018-11-01 10:51:55 -04:00
Joshua Hanson
4eabbdcb65 README: Add waciumawanjohi to team as lead academic 2018-10-31 12:31:04 -04:00
Hassam
0df0b06915 extras/readings: Add PBRT (#514)
PBRT is an amazing book detailing the implementation of a real, well-developed path tracer and is used in many real Computer Graphics courses. The authors have no released it for free, so it would make a great addition to the curriculum.
2018-10-18 18:32:15 -04:00
Joshua Hanson
2e4f9cf5bb Merge branch 'master' of github.com:ossu/computer-science into dev 2018-10-16 16:52:16 -04:00
Joshua Hanson
73477a9619 README: Move CS50 before Nand2Tetris
Resolves #440: It has been decided to keep CS50 as required for
now, but moving it later in the curriculum to match its high
degree of challenge and very low-level orientation.

Resolves #463: It has been decided to retain CS50's dynamic
programming assignment due to the positive feedback it received
as well as the fact that the additional challenge of this problem
is acceptable now that the course is later in the curriculum.
2018-10-16 16:41:29 -04:00
hanjiexi
e73656d3c2
README: Add 'Process' section under Summary (#513)
Resolves #512. Provides recommendations on how to progress through
curriculum, including recommendations on cohorts, ordering, and
electives.
2018-10-16 11:53:31 -04:00
Sohel Shaikh
0e1eba23fa README: Fix grammatical mistakes (#511)
Fixed sentence construction.
2018-10-16 10:28:48 -04:00
Amadeusz Annissimo
1b8ec330c5 README: Fix typo for Scala Specialization (#510) 2018-10-09 10:22:36 -04:00
Harshit Kumar
a51e9bf55c extras/readings: Add ISLR (machine learning book) (#509)
Added An Introduction to Statistical Learning
2018-10-03 23:10:20 -04:00
Tyler Miller
7a928c436b README: Update LAFF link (#508) 2018-09-27 18:29:32 -04:00
Amadeusz Annissimo
01b4eac751 README: Update fix link and title for LAFF On Programming for Correctness (#506)
* updating link to LAFF – On Programming for Correctness

It seems like the most recent (and still available) course session added "On" to the course title. Previous link directed to the unavailable version of the course.

* update course name
2018-09-27 18:28:32 -04:00
Vapeur redman
f8f4e5b7e4 README.md: Fix Trello link (#501)
Update 'how to copy board' Trello instructions from 2012 blog post, to actual instructions.
2018-09-27 18:26:33 -04:00
Hugo
df29f6a1fc Update README.md (#500)
spelling/syntax error
2018-08-24 14:53:51 -07:00
Anthony Morris
9705180dc9
#484 Fixed SICP link 2018-07-09 09:15:03 -07:00
Gustav Bertram
659e5cbe26
#484 Fixed SICP link
Fix the SICP link, as reported in #484
2018-07-09 00:07:09 +02:00
waciumawanjohi
037dd7b5ef README: Remove dead link to Facebook group (#479) 2018-05-17 13:07:28 -04:00
Joshua Hanson
e6c1b44898 README: Add note about Coursera Discrete Math (paid) 2018-05-11 11:58:01 -04:00
Joshua Hanson
be2e50ce5c extras/readings: Add Oscar Levin Discrete Math textbook 2018-05-11 11:50:11 -04:00
Joshua Hanson
aa0e0b7765 extras/readings: Add Ximera calculus textbook 2018-05-11 11:48:08 -04:00
Joshua Hanson
98ecf7e5d3 README: Replace OSU Calculus with MIT Calculus 2018-05-11 11:36:43 -04:00
Vipin Kumar
1e877eaca6 PROJECTS: Add Webliza project (#477)
Introduction to Computer Science section
2018-05-09 10:56:09 -04:00
Tyler Miller
c12308a015 README: update Learn Prolog Now! link to interactive site (#467)
Allows users to run Prolog scripts on the site.
2018-03-30 23:08:35 -04:00
Leo Leung
7469d07efe README: Add alt link for Intro to Parallel Programming (#464) 2018-03-07 08:08:59 -05:00
Leo Leung
914c519597 extras/courses: Add U of Helsinki OO Programming with Java (#456) 2018-02-16 21:23:26 -05:00
waciumawanjohi
751935b16f README: Move Reliable Distributed Systems to Advanced Systems (#460) 2018-02-15 16:04:55 -05:00
Leo Leung
92b22f4553 README: Fix prereqs for Software Testing (#455) 2018-01-31 09:56:08 -05:00
Florian Hoornaar
6836ed1660 README: Change 'OBS' to 'Note' (#454)
As per issue https://github.com/ossu/computer-science/issues/453
2018-01-29 13:20:32 -05:00
Leo Leung
d596b44a7f README: Fix prereqs for Nand2Tetris II (#452)
Updates the prerequisites for "From Nand to Tetris II" to include a list of supported programming languages
2018-01-29 13:17:15 -05:00
Mahmoud khalil
b5514423d8 CHANGELOG: Fix spelling errors (#447)
Fix spelling for "Data Mining" and "Functional"
2018-01-08 10:23:53 -05:00
hanjiexi
a95ed56566
Merge pull request #448
* Update License file copyright year
* Remove duplicate "machine language" topic
2018-01-08 10:19:28 -05:00
Nicolai Slovineanu
993ec66b22
Remove duplicate "machine language" topic 2018-01-07 13:13:35 +02:00
Anthony Morris
cd3e9d555f
Merge pull request #445 from phillipalexander/patch-1
Update License file copyright year
2018-01-03 11:23:31 -08:00
Phillip Alexander
60e6ccd8e3
Update License file copyright year 2018-01-03 00:02:12 -08:00
Alfredo Serafini
f6cadabde6 extras/readings: Add Stanford Information Retrieval (#442)
Added the book "An Introduction to Information Retrieval", available on the nlp.stanford site
2017-12-30 13:01:39 -05:00
40 changed files with 1380 additions and 509 deletions

View File

@ -0,0 +1,28 @@
---
name: Request for Comment Template
about: Template for creating an RFC to modify the curriculum
title: 'RFC: '
labels: ''
assignees: ''
---
**Problem:**
Give a 1 sentence description of a problem with the current OSSU Curriculum. Successful critiques of the curriculum will point out ways that OSSU is failing to uphold [our curricular guidelines](https://github.com/ossu/computer-science/blob/master/CURRICULAR_GUIDELINES.md). Examples are:
* OSSU lists course X as required when the course's topics are elective in our curricular guidelines.
* OSSU does not having a course to cover required topic X from our curricular guidelines.
* OSSU lists courses X, Y and Z that cover the same topics when fewer courses could suffice.
* OSSU recommends course X to teach a topic, but there exists a higher quality course that covers the same material.
**Duration:**
This should most often be 1 month from the date of posting.
**Background:**
Give an in depth description of the problem. Describe a solution to the problem. Describe the advantages and disadvantages of this solution. This section should be a few paragraphs.
**Proposal:**
Give a bullet point list of changes that are being proposed. These can link to a Pull Request.
**Alternatives:**
Give a bullet point list of alternative ways to address the problem.

View File

@ -0,0 +1,35 @@
name: Delete empty issues
on:
issues:
types:
- opened
jobs:
label_issues:
runs-on: ubuntu-latest
permissions:
issues: write
if: github.event.issue.body == '' || contains(github.event.issue.body, 'Give a 1 sentence description of a problem with the current OSSU Curriculum. Successful critiques of the curriculum will point out ways that OSSU is failing to uphold')
steps:
- name: Create comment
uses: actions-cool/issues-helper@200c78641dbf33838311e5a1e0c31bbdb92d7cf0 # v3
with:
actions: 'create-comment'
token: ${{ secrets.GITHUB_TOKEN }}
issue-number: ${{ github.event.issue.number }}
body: |
Hello @${{ github.event.issue.user.login }}.
It looks like you've opened an empty issue or one without a unique problem description.
Please understand that this is a popular project, useful to many learners, and empty issues distract maintainers that are trying to help others.
If you would like practice with issues, you can follow github documentation to create your own repo:
https://docs.github.com/en/repositories/creating-and-managing-repositories/creating-a-new-repository
And then in that repo practice creating and editing issues:
https://docs.github.com/en/issues/tracking-your-work-with-issues/configuring-issues/quickstart
We look forward to your future contributions to OSSU, when you are contributing to improve computer science education for learners all over the world!
- name: Close issue
uses: actions-cool/issues-helper@200c78641dbf33838311e5a1e0c31bbdb92d7cf0 # v3
with:
actions: 'close-issue'
token: ${{ secrets.GITHUB_TOKEN }}
issue-number: ${{ github.event.issue.number }}

4
.gitignore vendored
View File

@ -1,3 +1,5 @@
.idea
*.swp
*.swo
*.swo
.direnv/
.envrc

View File

@ -1,5 +1,7 @@
# Change Log
**Note**: The curriculum is currently undergoing review for v9. This consists largely of checking our recommendations against our [curricular guidelines](CURRICULAR_GUIDELINES.md), adding missing topics and cutting redundant or out of scope courses. As Requests for Comment in this effort are completed, changes are made immediately to the curriculum. When the overall review is complete we will notate the version bump to v9.
All notable changes to this project will be documented in this file.
This project adheres *in spirit* to [Semantic Versioning](http://semver.org/):
- "MAJOR" updates correspond to changing the topics studied within a subject
@ -118,7 +120,7 @@ Complete overhaul of program structure
- Elective course: Game Theory
- Elective specializations:
- Robotics
- Data Minig
- Data Mining
- Big Data
- Internet of Things
- Cloud Computing
@ -135,7 +137,7 @@ Complete overhaul of program structure
- Removed many dead links and obsolete courses
- Removed per-course project requirement
- Course: Object-Oriented Programming in Java
- Course: Funtional Programming in Scala
- Course: Functional Programming in Scala
- Course: Computer Architecture (but left as a footnote)
- Course: Intro to Theoretical Computer Science
- Course: Software Processes and Agile Practices

1
CNAME Normal file
View File

@ -0,0 +1 @@
cs.ossu.dev

View File

@ -1,18 +1,19 @@
# Contributor guidelines
# Changing the curriculum
OSSU thrives because of the changes made by our many contributors. Read on for details on how to help every student that follows you.
## Non-substantive changes
If you have non-substantive updates to make to the curriculum, such as a course's URL having been moved, spelling/syntax errors, etc., please send a [pull request](https://www.freecodecamp.org/news/how-to-make-your-first-pull-request-on-github-3/) to fix any mistakes that you have found. If youve never made a pull request before, that guide will walk you through the process.
## Substantive changes
If you have specific and substantive criticisms of the curriculum, i.e. problems related to the progression/content of courses it would be appropriate to [open an issue](https://help.github.com/articles/creating-an-issue/). While it is acceptable to point out problems, all successful changes naturally require a plan for fixing the problem.
OSSUs curricular guidelines are [here](CURRICULAR_GUIDELINES.md). Successful critiques of the curriculum will point out ways that OSSU is failing to uphold these guidelines. Examples are:
This project primarily uses GitHub for collaboration, however not all discussions are appropriate for GitHub.
Please follow these guidelines:
1. If you need help with the *academic* content of a course or are having general technical difficulties, please do not use GitHub for this.
The best place to ask these types of questions is on the [subreddit](https://www.reddit.com/r/opensourcesociety/).
2. If you have general problems with the program not specific to any course, such as preferring textbook-style learning over MOOCs,
the subreddit is recommended as there people may be able to give you suggested alternatives.
3. If you have *specific* and *substantive* criticisms of the curriculum, i.e. problems related to the progression/content of courses it would be appropriate to [open an issue](https://help.github.com/articles/creating-an-issue/) and give us your suggestions.
4. If you have *non-substantive* updates to make to the curriculum, such as a course's URL having been moved, spelling/syntax errors, etc., please send a [pull request](https://help.github.com/articles/using-pull-requests/) to fix any mistakes that you have found.
5. If you want to customize the curriculum for yourself, do of course [fork this project](https://help.github.com/articles/fork-a-repo/).
6. If you want to suggest a new resource, send a pull request adding such resource to the [extras](https://github.com/open-source-society/computer-science/tree/master/extras) section.
# Learning Git
To be able to create high-quality pull requests, it is recommended that you learn how to use the Git version control system.
One of the best primers on the subject is a free ebook called [Ry's Git Tutorial](https://www.amazon.com/dp/B00QFIA5OC/).
If you prefer a course-style introduction, try [Introduction to Git and GitHub](https://www.udacity.com/course/how-to-use-git-and-github--ud775).
* OSSU lists a course as required when the course topics are elective in the curricular guide.
* OSSU not having a course to cover required topics from the curricular guide.
* OSSU lists multiple courses that cover the same topics when fewer courses could suffice.
* OSSU recommends a course to teach a topic, but there exists a higher quality course that covers the same material.
## Other ways to contribute
### Responding to Issues
Issues require more than just users to suggest them. Issues require active community members to read and respond to proposals. Even adding simple [emoji reactions](https://github.blog/2016-03-10-add-reactions-to-pull-requests-issues-and-comments/) can help the community.
### Engaging with other students
Learning is enhanced by engaged peers. You can be that peer for someone new to OSSU. When you see a new person posting in Discord, ask them a question about themselves. When you see a cohort starting at _almost_ the right time, join in. Doing so will make OSSU a stronger program for everyone, including you.
# Personal Customization
If you want to customize the curriculum for yourself, you are encouraged to [fork this project](https://help.github.com/articles/fork-a-repo/)!

17
CURRICULAR_GUIDELINES.md Normal file
View File

@ -0,0 +1,17 @@
# Curricular Guidelines
[Curriculum Guidelines for Undergraduate Programs in Computer Science](https://www.acm.org/binaries/content/assets/education/cs2013_web_final.pdf)
Our curricular guidelines are from the 2013 report of the Association for Computing Machinery and the Institute of Electrical and Electronics Engineers. This report is the most recent in a series of such reports outlining the expectations of undergraduate degrees in Computer Science. The report outlines critical Knowledge Areas and topics within them. It drills down further to outline specific learning goals, going so far as to outline what concepts a student must be able to explain vs concepts a student must be able to demonstrate using in practice.
The CS2023 is currently under development. Track its progress to release [here](https://csed.acm.org/).
## Organizations publishing:
### The Association for Computing Machinery
The Association for Computing Machinery (ACM) is an international learned society for computing. It was founded in 1947, and is the world's largest scientific and educational computing society. The ACM is a non-profit professional membership group, with more than 100,000 members as of 2011.
### Institute of Electrical and Electronics Engineers
The Institute of Electrical and Electronics Engineers (IEEE) is a professional association formed in 1963 from the amalgamation of the American Institute of Electrical Engineers and the Institute of Radio Engineers. As of 2018, it is the world's largest association of technical professionals with more than 423,000 members in over 160 countries around the world. Its objectives are the educational and technical advancement of electrical and electronic engineering, telecommunications, computer engineering and allied disciplines.

118
FAQ.md
View File

@ -4,55 +4,45 @@ This page answers some questions that we frequently receive about the curriculum
If you have questions that aren't answered here, try asking through one of our [community channels](README.md#community).
If it seems important enough or we get asked that question a lot, we will probably add it here.
Alternatively, you could [contribute](#CONTRIBUTING.md) an answer yourself.
Alternatively, you could [contribute](CONTRIBUTING.md) an answer yourself.
## Contents
- [Are Coursera courses free to access?](#are-coursera-courses-free-to-access)
- [Does every resource in the main curriculum have to be free?](#does-every-resource-in-the-main-curriculum-have-to-be-free)
- [Does OSSU offer a degree?](#does-ossu-offer-a-degree)
- [How can I review the math prerequisites?](#how-can-i-review-the-math-prerequisites)
- [What is a good course to learn a language (C++, Rust, Java, etc)?](#what-is-a-good-course-to-learn-a-particular-language)
- [Why is the Firebase OSSU app different/broken?](#why-is-the-firebase-ossu-app-different-or-broken)
- [In what order should I take the courses?](#in-what-order-should-i-take-the-courses)
- [Does every resource in the main curriculum have to be free?](#does-every-resource-in-the-main-curriculum-have-to-be-free)
- [Are Coursera courses free to access?](#are-coursera-courses-free-to-access)
- [Is it necessary to purchase the Verified Upgrade for edX courses?](#is-it-necessary-to-purchase-the-verified-upgrade-for-edx-courses)
- [Why do you recommend skipping the second half of CS50?](#why-do-you-recommend-skipping-the-second-half-of-cs50)
- [What are the alt links?](#what-are-the-alt-links)
- [Why doesn't the curriculum cover/ignore topic X?](#why-doesnt-the-curriculum-coverignore-topic-x)
- [Why is the curriculum missing some pre-requisites?](#why-is-the-curriculum-missing-some-pre-requisites)
- [Why require experience with a sizable project before the Software Engineering courses?](#why-require-experience-with-a-sizable-project-before-the-software-engineering-courses)
- [How can I find a course on a particular subject?](#how-can-i-find-a-course-on-a-particular-subject)
## Questions
### Are Coursera courses free to access?
### Does OSSU offer a degree?
No. OSSU creates guides to resources that will empower you to learn the curriculum of an undergraduate degree. Individuals who used to be involved in OSSU may be working with other organizations to offer degrees, but Open Source Society University is not involved in those efforts.
Some courses that require payment to access probably do exist on Coursera, but we don't put those on our curriculum.
All Coursera courses that we put on the curriculum must, at minimum, be **free to audit**.
For some courses, all course features are available for free;
for others (especially those that are part of a specialization), you may only be able to access the lecture videos.
(If you find the policies have changed for any courses on our curriculum, please tell us!)
### How can I review the math prerequisites?
Unfortunately, for some courses, Coursera's interface is [very aggressive](https://darkpatterns.org/) about convincing you that you have to pay.
See our [Pre-College Math](https://ossu.dev/precollege-math) curriculum for a list of resources to use for reviewing the math prerequisites.
You may see something like this on the course page:
### What is a good course to learn a particular language?
OSSU focuses on finding the best courses to learn computer science topics, and isnt focused on finding language-specific courses. If you are looking to learn a particular language or framework there are two great resources to check.
1. [Hackr.io](https://hackr.io/tutorials/) allows users to submit and upvote learning resources for topics such as Python or the Java Spring Framework.
2. Most languages have a community on Reddit. When you find the communitys page, check to see if there is a wiki or sidebar with resources. For example, see [/r/python](https://old.reddit.com/r/Python). Note that the sidebar content can be different depending on whether you use www.reddit.com or old.reddit.com.
<img src="http://i.imgur.com/MxOcYZv.png" alt="Free Trial" style="width: 400px;"/>
### Why is the Firebase OSSU app different or broken?
When attempting to enroll in such a course:
- Click the blue "Enroll" or "Enroll Now" button.
- A pop-up will appear.
- **Do not click** "Start Free Trial", unless you do want to pay.
- Find the text that says "Audit this course" at the bottom.
- Click **Audit**.
The OSSU curriculum and ecosystem have been collaboratively built by many individuals. The Firebase app was one such contribution. When it was written, it was with the intention of helping future OSSU students.
![Audit this course](https://user-images.githubusercontent.com/3349406/27321369-95ca12e6-55cc-11e7-9b5c-f8fedd8fd643.png)
Unfortunately, the app has not been updated in many years. It does not reflect updates to the curriculum, it contains links to courses that no longer exist, and it has known bugs that prevent students from logging in.
### Does every resource in the main curriculum have to be free?
Yes, because we have to draw a line.
As soon as we require paid resources in the main curriculum, we might as well tell people to pay half a million dollars to attend a university.
We are an Internet-based community of learners, not a business, so free is the most sensible price and ensures that the only price you need pay is the price of Internet access.
At the same time, we recognize that education is scarce resource and therefore requires payment to instructors to make it sustainable in the long term.
Therefore, we respect the business model of websites like edX, which make their materials free but with some paid add-ons, like official certificates or extra interaction with course instructors.
So we only require that the *learning materials* of a resource be free to access, not that every possible add-on be free.
It would be ideal if graded assignments were always free but if we had this requirement, we would have to exclude any resource that doesn't have graded assignments at all.
Plus, there are other ways to get feedback on your work, and OSSU is a do-it-yourself education.
It is our hope that the creators of the Firebase app can bring the app up to date. Until that time, the firebase app should be considered a deprecated product that is no longer supported.
### In what order should I take the courses?
@ -63,32 +53,39 @@ You have a few different options:
We have designed the curriculum to work for any of the above three styles.
### Does every resource in the main curriculum have to be free?
Yes, that is a core goal of OSSU.
At the same time, we recognize that education is a resource that requires payment to instructors to make it sustainable in the long term.
Therefore, we respect the business model of websites like edX, which make their materials free but with some paid add-ons, like official certificates or extra interaction with course instructors.
So we only require that the *learning materials* of a resource be free to access, not that every possible add-on be free.
It would be ideal if graded assignments were always free. In the event that free assessments are not available OSSU looks for alternate assessments to pair with a course.
### Are Coursera courses free to access?
Short answer: No. Not anymore.
In [July of 2025, Coursera removed audit access](https://www.classcentral.com/report/coursera-preview-mode-paywall/) for the vast majority of their courses, including all of the Coursera courses that OSSU included in its curriculum at the time.
Unless something changes at Coursera, OSSU will no longer be recommending their courses. We are currently reviewing options for free resources that can replace the Coursera courses that are still in the curriculum.
We ask that you help overcome this challenge by finding replacements and engaging with RFC discussions in the [Issues tab](https://github.com/ossu/computer-science/issues) where we are discussing alternatives.
We may have more up-to-date recommendations in the [Discord channel](https://discord.gg/wuytwK5s9h) so please do check there as well.
### Is it necessary to purchase the Verified Upgrade for edX courses?
If you just want to watch the videos, it is never necessary for any edX course on our curriculum.
If you just want to watch the videos, it is never necessary for any edX course on our curriculum. Note that a number of edX courses only allow students to audit a course for the estimated number of weeks it takes to complete. Students should not begin a course until they are prepared to focus and complete the course.
CS50 doesn't use edX's grading system; it grades all assignments for free.
### What are the alt links?
The [Software Development](https://www.edx.org/micromasters/software-development) courses have mostly free quizzes and assignments, but their Final Projects will only be graded by a human if you pay.
### Why do you recommend skipping the second half of CS50?
The strongest and most useful part of CS50 is the part where they teach C.
We wish to retain this in the curriculum for now because it is one of the few chances the student has to play with manual memory management in a (relatively) low-level language.
Everything after that gets a bit too easy and shallow, to the point that we believe the student's time will be better spent in MIT's Introduction to Computer Science course.
That being said, feel free to finish CS50 if you like it and want to.
But don't skip the MIT Intro course.
Sometimes a course is on multiple platforms that are reasonably similar in quality so we have an alt or two linked in case the main one isn't being offered at the time or you prefer the other one. Both are just as good, go with whichever you prefer or whichever is available when you want to take the course.
### Why doesn't the curriculum cover/ignore topic X?
We have several goals that we have to balance:
- Ensure students learn the timeless principles of computer science in the best possible way, pedagogically speaking.
- Ensure students are given sufficient knowledge of today's systems to be employable in the near future.
- Ensure students are exposed to enough cutting-edge knowledge that they won't be left behind when technology changes, which it always does.
- Keep the curriculum brief enough that it can be completed in a reasonable amount of time.
Therefore, not everything can be included, but we strive to be eclectic so that students are both employable and well-armed for change.
You can read more about our curricular guidelines and the qualifications of the guidelines' authors [here](CURRICULAR_GUIDELINES.md). If you find a topic that is required by our guidelines and is not included in the curriculum, we should make a change! Read more about [contributing to a change](CONTRIBUTING.md).
### Why is the curriculum missing some pre-requisites?
@ -97,6 +94,21 @@ The curriculum assumes two things:
- You have gotten through a standard high school curriculum that included physics and pre-calculus.
Without these assumptions, the curriculum would be out of control with trying to fill in your knowledge gaps.
But those who for whatever reason didn't get all the way through high school math and physics are in luck: you can find the content you need on [Khan Academy](https://www.khanacademy.org/).
For those who want to study math pre-requisites, read more [here](#how-can-i-review-the-math-prerequisites)
Of course, if you find that the curriculum is missing a pre-requisite for a course that isn't part of a normal high school curriculum, please let us know!
Of course, if you find that the curriculum is missing a pre-requisite for a course that isn't part of a normal high school curriculum, please let us know!
### Why require experience with a sizable project before the Software Engineering courses?
Software engineering tries to solve the problem of dealing with large programs. Building a sizable program before taking the SE courses will help you understand what SE is trying to solve. We recommend the Jack-to-VM-code compiler project from the nand2tetris course because it's the first project in the curriculum that is complex enough to see value in an SE course. That said, any sizable project will do and can come from outside of the OSSU curriculum. The idea is that you've done some large enough project where the pieces started to feel unmanageable. This experience will expose pain points and lead to a better understanding of SE.
### How can I find a course on a particular subject?
After completing Core CS, learners are ready to pursue computer science
topics of their own interest. How can one find a course on a given topic?
For MOOCs an excellent resource is [Class Central](https://www.classcentral.com/).
For materials from university courses that are online (but not organized)
into a MOOC, [awesome-courses](https://github.com/prakhar1989/awesome-courses) and
[cs-video-courses](https://github.com/Developer-Y/cs-video-courses)
are good resources. For textbooks, [Goodreads](https://www.goodreads.com/genres/computer-science)
is a great platform for reader ratings and reviews.
For learning a particular programming language or framework,
[see this question](#what-is-a-good-course-to-learn-a-particular-language).

9
HELP.md Normal file
View File

@ -0,0 +1,9 @@
# Getting help
## Check the FAQ!
Please check our [Frequently Asked Questions](FAQ.md) to see if your question has been addressed.
## Ask in the chat room
[![Discord](https://img.shields.io/discord/744385009028431943.svg?label=&logo=discord&logoColor=ffffff&color=7389D8&labelColor=6A7EC2)](https://discord.gg/5pUhfpX) Join the OSSU [Discord server](https://discord.gg/5pUhfpX)! Discord is an online chat service, similar to Slack or IRC where you can chat with other students and get help.
### Specific problems
If you need help successfully completing the content of a course or are having general technical difficulties, first reach out to the resources provided by the course (e.g. the course forum on Coursera, edX, etc). If you need additional help after that, post in Discord. **In your post, mention what steps you have already taken to try and solve the problem**.
### General problems
If you have general problems with the program not specific to any course, such as preferring textbook-style learning over MOOCs, Discord is a good place to reach out to people who may have great suggestions. You might form a working group that makes the next improvement to OSSU CS! Read more about contributing [here](CONTRIBUTING.md).

View File

@ -1,6 +1,6 @@
The MIT License (MIT)
Copyright (c) 2017 Open Source Society University
Copyright (c) 2015-2023 Open Source Society University
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal

View File

@ -1,40 +0,0 @@
# Projects
> Here, we are providing a list curated by the community of exercises and projects to practice and reinforce the skills we try to master.
Projects created by OSSU's students for each course of our [**Computer Science**](https://github.com/ossu/computer-science) curriculum.
For more project ideas, check the [Mega Project List](https://github.com/karan/Projects).
- [Introduction to Computer Science](#introduction-to-computer-science)
- [Programming](#programming)
- [Math](#math)
- [Systems](#systems)
- [Theory](#theory)
- [Applications](#applications)
## Introduction to Computer Science
Project Title | Description | Author(s) | Repository
:-- | :-- | :--: | :--
Binary Machine | Convert decimal numbers to binary | [Eric Douglas](https://github.com/ericdouglas) | [binary-machine](https://github.com/ericdouglas/binary-machine)
StalkHub | Stalk Github beautifully | [Aman Roy](https://github.com/aman-roy) | [StalkHub](https://github.com/aman-roy/StalkHub)
## Programming
Project Title | Description | Author(s) | Repository
:-- | :-- | :--: | :--
## Math
Project Title | Description | Author(s) | Repository
:-- | :-- | :--: | :--
## Systems
Project Title | Description | Author(s) | Repository
:-- | :-- | :--: | :--
## Theory
Project Title | Description | Author(s) | Repository
:-- | :-- | :--: | :--
## Application
Project Title | Description | Author(s) | Repository
:-- | :-- | :--: | :--

500
README.md
View File

@ -1,36 +1,26 @@
![Open Source Society University (OSSU)](http://i.imgur.com/kYYCXtC.png)
<h3 align="center">Open Source Society University</h3>
<p align="center">
<div align="center" style="text-align: center">
<img src="images/ossu-logo.webp" alt="Open Source Society logo"/>
<h3>Open Source Society University</h3>
<p>
Path to a free self-taught education in Computer Science!
</p>
<p align="center">
<p>
<a href="https://github.com/sindresorhus/awesome">
<img alt="Awesome" src="https://cdn.rawgit.com/sindresorhus/awesome/d7305f38d29fed78fa85652e3a63e154dd8e8829/media/badge.svg">
</a>
<img alt="Awesome" src="https://cdn.rawgit.com/sindresorhus/awesome/d7305f38d29fed78fa85652e3a63e154dd8e8829/media/badge.svg"
></a>
<a href="https://github.com/ossu/computer-science">
<img alt="Open Source Society University - Computer Science" src="https://img.shields.io/badge/OSSU-computer--science-blue.svg">
</a>
<a href="https://www.patreon.com/ossu">
<img alt="Contribute with OSSU on Patreon" src="https://img.shields.io/badge/Patreon-contribute-yellow.svg">
</a>
<img alt="Open Source Society University - Computer Science" src="https://img.shields.io/badge/OSSU-computer--science-blue.svg"
></a>
</p>
</div>
# Contents
- [Summary](#summary)
- [Curriculum](#curriculum)
- [Prerequisites](#prerequisites)
- [Introduction to Computer Science](#introduction-to-computer-science)
- [Core CS](#core-cs)
- [Advanced CS](#advanced-cs)
- [Final project](#final-project)
- [Pro CS](#pro-cs)
- [Code of conduct](#code-of-conduct)
- [Community](#community)
- [How to show your progress](#how-to-show-your-progress)
- [Team](#team)
- [References](#references)
- [Curriculum](#curriculum)
- [Code of conduct](#code-of-conduct)
- [Team](#team)
# Summary
@ -47,10 +37,9 @@ but specifically chosen to meet the following criteria.
**Courses must**:
- Be open for enrollment
- Run regularly (ideally in self-paced format, otherwise running at least once a month or so)
- Fulfill the [academic requirements](REQUIREMENTS.md) of OSSU
- Fit neatly into the progression of the curriculum with respect to topics and difficulty level
- Run regularly (ideally in self-paced format, otherwise running multiple times per year)
- Be of generally high quality in teaching materials and pedagogical principles
- Match the curricular standards of the [CS 2013](CURRICULAR_GUIDELINES.md): Curriculum Guidelines for Undergraduate Degree Programs in Computer Science
When no course meets the above criteria, the coursework is supplemented with a book.
When there are courses or books that don't fit into the curriculum but are otherwise of high quality,
@ -61,78 +50,83 @@ they belong in [extras/courses](extras/courses.md) or [extras/readings](extras/r
- *Core CS*: corresponds roughly to the first three years of a computer science curriculum, taking classes that all majors would be required to take
- *Advanced CS*: corresponds roughly to the final year of a computer science curriculum, taking electives according to the student's interests
- *Final Project*: a project for students to validate, consolidate, and display their knowledge, to be evaluated by their peers worldwide
- *Pro CS*: graduate-level specializations students can elect to take after completing the above curriculum if they want to maximize their chances of getting a good job
**Duration**. It is possible to finish Core CS within about 2 years if you plan carefully and devote roughly 18-22 hours/week to your studies.
Courses in Core CS should be taken linearly if possible, but since a perfectly linear progression is rarely possible,
each class's prerequisites is specified so that you can design a logical but non-linear progression
based on the class schedules and your own life plans.
**Duration**. It is possible to finish within about 2 years if you plan carefully and devote roughly 20 hours/week to your studies. Learners can use [this spreadsheet](https://docs.google.com/spreadsheets/d/1y2kMsIg9VaHMVmw35x_aH1hpty3V-ZMuV2jA13P_Cgo/copy) to estimate their end date. Make a copy and input your start date and expected hours per week in the `Timeline` sheet. As you work through courses you can enter your actual course completion dates in the `Curriculum Data` sheet and get updated completion estimates.
> **Warning:** While the spreadsheet is a useful tool to estimate the time you need to complete this curriculum, it may not always be up-to-date with the curriculum. Use the [OSSU CS website](https://cs.ossu.dev) or [the repo](https://github.com/ossu/computer-science) to see what courses to do.
**Cost**. All or nearly all course material is available for free. However, some courses may charge money for assignments/tests/projects to be graded.
Note that both [Coursera](https://www.coursera.support/s/article/209819033-Apply-for-Financial-Aid-or-a-Scholarship?language=en_US) and [edX](https://courses.edx.org/financial-assistance/) offer financial aid.
**Cost**. All or nearly all course material prior to Pro CS is available for free,
however some courses may charge money for assignments/tests/projects to be graded.
Note that Coursera offers [financial aid](https://learner.coursera.help/hc/en-us/articles/209819033-Apply-for-Financial-Aid).
Decide how much or how little to spend based on your own time and budget;
just remember that you can't purchase success!
**Process**. Students can work through the curriculum alone or in groups, in order or out of order.
- We recommend doing all courses in Core CS, only skipping a course when you are certain that you've already learned the material previously.
- For simplicity, we recommend working through courses (especially Core CS) in order from top to bottom. Some students choose to study multiple courses at a time in order to vary the material they are working on in a day/week. A popular option is to take the math courses in parallel with the introductory courses. Course prerequisites are listed to help you determine if you are prepared for a given course.
- Courses in Advanced CS are electives. Choose one subject (e.g. Advanced programming) you want to become an expert in and take all the courses under that heading. You can also create your own custom subject; the Discord community may provide feedback on your planned subject.
**Content policy**. If you plan on showing off some of your coursework publicly, you must share only files that you are allowed to.
*Do NOT disrespect the code of conduct* that you signed in the beginning of each course!
*Respect the code of conduct* that you signed in the beginning of each course!
**How to contribute**. Please see [CONTRIBUTING](CONTRIBUTING.md).
**[How to contribute](CONTRIBUTING.md)**
**Getting help**. Please check our [Frequently Asked Questions](FAQ.md), and if you cannot find the answer, file an issue or talk to our [friendly community](#community)!
**[Getting help](HELP.md)** (Details about our FAQ and chatroom)
# Community
- We have a Discord server! [![Discord](https://img.shields.io/discord/744385009028431943.svg?label=&logo=discord&logoColor=ffffff&color=7389D8&labelColor=6A7EC2)](https://discord.gg/wuytwK5s9h) This should be your first stop to talk with other OSSU students. Why don't you introduce yourself right now? [Join the OSSU Discord](https://discord.gg/wuytwK5s9h)
- You can also interact through GitHub issues. If there is a problem with a course, or a change needs to be made to the curriculum, this is the place to start the conversation. Read more [here](CONTRIBUTING.md).
- Add **Open Source Society University** to your [Linkedin](https://www.linkedin.com/school/11272443/) profile!
> **Warning:** There are a few third-party/deprecated/outdated material that you might find when searching for OSSU. We recommend you to ignore them, and only use the [OSSU CS website](https://cs.ossu.dev) or [OSSU CS Github Repo](https://github.com/ossu/computer-science). Some known outdated materials are:
> - An unmaintained and deprecated firebase app. Read more in the [FAQ](./FAQ.md#why-is-the-firebase-ossu-app-different-or-broken).
> - An unmaintained and deprecated trello board
> - Third-party notion templates
# Curriculum
**Curriculum version**: `8.0.0` (see [CHANGELOG](CHANGELOG.md))
- [Prerequisites](#prerequisites)
- [Introduction to Computer Science](#introduction-to-computer-science)
- [Intro CS](#intro-cs)
- [Core CS](#core-cs)
- [Core programming](#core-programming)
- [Core math](#core-math)
- [CS Tools](#cs-tools)
- [Core systems](#core-systems)
- [Core theory](#core-theory)
- [Core security](#core-security)
- [Core applications](#core-applications)
- [Core ethics](#core-ethics)
- [Advanced CS](#advanced-cs)
- [Advanced programming](#advanced-programming)
- [Advanced math](#advanced-math)
- [Advanced systems](#advanced-systems)
- [Advanced theory](#advanced-theory)
- [Advanced applications](#advanced-applications)
- [Advanced information security](#advanced-information-security)
- [Advanced math](#advanced-math)
- [Final project](#final-project)
- [Pro CS](#pro-cs)
---
## Prerequisites
- [Core CS](#core-cs) assumes the student has already taken high school math and physics, including algebra, geometry, and pre-calculus.
Some high school graduates will have already taken AP Calculus, but this is usually only about 3/4 of a college calculus class, so the calculus courses in the curriculum are still recommended.
- [Core CS](#core-cs) assumes the student has already taken [high school math](https://ossu.dev/precollege-math), including algebra, geometry, and pre-calculus.
- [Advanced CS](#advanced-cs) assumes the student has already taken the entirety of Core CS
and is knowledgeable enough now to decide which electives to take.
- Note that [Advanced systems](#advanced-systems) assumes the student has taken a basic physics course (e.g. AP Physics in high school).
## Introduction to Computer Science
## Intro CS
These courses will introduce you to the world of computer science.
Both are required, but feel free to skip straight to the second course when CS50 (the first course) moves away from C.
([Why?](FAQ.md#why-do-you-recommend-skipping-the-second-half-of-cs50))
This course will introduce you to the world of computer science and programming. This course gives you a flavor of the material to come. If you finish the course wanting more, Computer Science is likely for you!
**Topics covered**:
`computation`
`imperative programming`
`procedural programming`
`C`
`manual memory management`
`basic data structures and algorithms`
`Python`
`SQL`
`basic HTML, CSS, JavaScript`
`and more`
Courses | Duration | Effort | Prerequisites
:-- | :--: | :--: | :--:
[Introduction to Computer Science - CS50](https://www.edx.org/course/introduction-computer-science-harvardx-cs50x#!) ([alt](https://cs50.harvard.edu/)) | 12 weeks | 10-20 hours/week | none
[Introduction to Computer Science and Programming using Python](https://www.edx.org/course/introduction-computer-science-mitx-6-00-1x-10) | 9 weeks | 15 hours/week | high school algebra
Courses | Duration | Effort | Prerequisites | Discussion
:-- | :--: | :--: | :--: | :--:
[Introduction to Computer Science and Programming using Python](coursepages/intro-cs/README.md) | 14 weeks | 6-10 hours/week | [high school algebra](https://ossu.dev/precollege-math) | [chat](https://discord.gg/jvchSm9)
## Core CS
@ -146,7 +140,6 @@ All coursework under Core CS is **required**, unless otherwise indicated.
`common design patterns`
`unit testing`
`object-oriented design`
`Java`
`static typing`
`dynamic typing`
`ML-family languages (via Standard ML)`
@ -154,61 +147,55 @@ All coursework under Core CS is **required**, unless otherwise indicated.
`Ruby`
`and more`
Courses | Duration | Effort | Prerequisites
:-- | :--: | :--: | :--:
[How to Code - Simple Data](https://www.edx.org/course/how-code-simple-data-ubcx-htc1x) | 7 weeks | 8-10 hours/week | none
[How to Code - Complex Data](https://www.edx.org/course/how-code-complex-data-ubcx-htc2x) | 6 weeks | 8-10 hours/week | How to Code: Simple Data
[Software Construction - Data Abstraction](https://www.edx.org/course/software-construction-data-abstraction-ubcx-softconst1x) | 6 weeks | 8-10 hours/week | How to Code - Complex Data
[Software Construction - Object-Oriented Design](https://www.edx.org/course/software-construction-object-oriented-ubcx-softconst2x) | 6 weeks | 8-10 hours/week | Software Construction - Data Abstraction
[Programming Languages, Part A](https://www.coursera.org/learn/programming-languages) | 4 weeks | 8-16 hours/week | recommended: Java, C
[Programming Languages, Part B](https://www.coursera.org/learn/programming-languages-part-b) | 3 weeks | 8-16 hours/week | Programming Languages, Part A
[Programming Languages, Part C](https://www.coursera.org/learn/programming-languages-part-c) | 3 weeks | 8-16 hours/week | Programming Languages, Part B
#### Readings
- **Required** to learn about monads, laziness, purity: [Learn You a Haskell for a Great Good!](http://learnyouahaskell.com/)
- **OBS**: probably the best resource to learn Haskell: [Haskell Programming from First Principles](http://haskellbook.com/) `paid`
- **Required**, to learn about logic programming, backtracking, unification: [Learn Prolog Now!](http://www.learnprolognow.org/)
Courses | Duration | Effort | Prerequisites | Discussion
:-- | :--: | :--: | :--: | :--:
[Systematic Program Design](coursepages/spd/README.md) | 13 weeks | 8-10 hours/week | none | chat: [part 1](https://discord.gg/RfqAmGJ) / [part 2](https://discord.gg/kczJzpm)
[Class-based Program Design](coursepages/class-based/README.md) | 13 weeks | 5-10 hours/week | Systematic Program Design, High School Math | [chat](https://discord.com/channels/744385009028431943/891411727294562314)
[Programming Languages](https://courses.cs.washington.edu/courses/cse341/19sp/#lectures) | 11 weeks | 4-8 hours/week | Systematic Program Design | [chat](https://discord.gg/8BkJtXN)
[Object-Oriented Design](https://course.ccs.neu.edu/cs3500f19/) | 13 weeks | 5-10 hours/week | Class-based Program Design | [chat](https://discord.com/channels/744385009028431943/891412022120579103)
[Software Architecture](https://www.coursera.org/learn/software-architecture) | 4 weeks | 2-5 hours/week | Object Oriented Design | [chat](https://discord.com/channels/744385009028431943/891412169638432788)
### Core math
Discrete math (Math for CS) is a prerequisite and closely related to the study of algorithms and data structures. Calculus both prepares students for discrete math and helps students develop mathematical maturity.
**Topics covered**:
`linear transformations`
`matrices`
`vectors`
`mathematical proofs`
`number theory`
`differential calculus`
`integral calculus`
`sequences and series`
`discrete mathematics`
`mathematical proofs`
`basic statistics`
`O-notation`
`graph theory`
`vector calculus`
`discrete probability`
`and more`
Courses | Duration | Effort | Prerequisites
:-- | :--: | :--: | :--:
[Essence of Linear Algebra](https://www.youtube.com/playlist?list=PLZHQObOWTQDPD3MizzM2xVFitgF8hE_ab) | - | - | pre-calculus
[Linear Algebra - Foundations to Frontiers](https://www.edx.org/course/linear-algebra-foundations-frontiers-utaustinx-ut-5-04x#!) ([alt](http://ulaff.net/)) | 15 weeks | 8 hours/week | Essence of Linear Algebra
[Calculus One](https://www.coursera.org/learn/calculus1)<sup>*1*</sup> ([alt](https://mooculus.osu.edu/)) | 16 weeks | 8-10 hours/week | pre-calculus
[Calculus Two: Sequences and Series](https://www.coursera.org/learn/advanced-calculus)| 7 weeks | 9-10 hours/week | Calculus One
[Mathematics for Computer Science](https://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-042j-mathematics-for-computer-science-spring-2015/index.htm) | 13 weeks | 5 hours/week | single variable calculus (Calculus Two)
Courses | Duration | Effort | Notes | Prerequisites | Discussion
:-- | :--: | :--: | :--: | :--: | :--:
[Calculus 1A: Differentiation](https://openlearninglibrary.mit.edu/courses/course-v1:MITx+18.01.1x+2T2019/about) ([alternative](https://ocw.mit.edu/courses/mathematics/18-01sc-single-variable-calculus-fall-2010/index.htm)) | 13 weeks | 6-10 hours/week | The alternate covers this and the following 2 courses | [high school math](https://ossu.dev/precollege-math) | [chat](https://discord.gg/mPCt45F)
[Calculus 1B: Integration](https://openlearninglibrary.mit.edu/courses/course-v1:MITx+18.01.2x+3T2019/about) | 13 weeks | 5-10 hours/week | - | Calculus 1A | [chat](https://discord.gg/sddAsZg)
[Calculus 1C: Coordinate Systems & Infinite Series](https://openlearninglibrary.mit.edu/courses/course-v1:MITx+18.01.3x+1T2020/about) | 6 weeks | 5-10 hours/week | - | Calculus 1B | [chat](https://discord.gg/FNEcNNq)
[Mathematics for Computer Science](https://openlearninglibrary.mit.edu/courses/course-v1:OCW+6.042J+2T2019/about) ([alternative](https://ocw.mit.edu/courses/6-042j-mathematics-for-computer-science-fall-2010/)) | 13 weeks | 5 hours/week | [2015/2019 solutions](https://github.com/spamegg1/Math-for-CS-solutions) [2010 solutions](https://github.com/frevib/mit-cs-math-6042-fall-2010-problems) [2005 solutions](https://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-042j-mathematics-for-computer-science-fall-2005/assignments/). | Calculus 1C | [chat](https://discord.gg/EuTzNbF)
**<sup>1</sup> Note**: When you are enrolled, please see this
[list of errors](https://www.coursera.org/learn/calculus1/discussions/forums/WcY9_8ayEeSWEiIAC0wC5g/threads/CgOJwV-jEeWncxKXIFxpFQ/replies/kH6u_2FPEeWukw4fFhIvKw)
and
[these recommendations](https://www.coursera.org/learn/calculus1/discussions/all/threads/W5P9mFY8EeWbVQrsfyQbuw/replies/XyyJflZDEeWBRg5dvElQww/comments/l-bON17nEeW9lgqcHapJBw)
for how to progress through the course.
### CS Tools
Understanding theory is important, but you will also be expected to create programs. There are a number of tools that are widely used to make that process easier. Learn them now to ease your future work writing programs.
**Topics covered**:
`terminals and shell scripting`
`vim`
`command line environments`
`version control`
`and more`
Courses | Duration | Effort | Prerequisites | Discussion
:-- | :--: | :--: | :--: | :--:
[The Missing Semester of Your CS Education](https://missing.csail.mit.edu/) | 2 weeks | 12 hours/week | - | [chat](https://discord.gg/5FvKycS)
### Core systems
**Topics covered**:
`procedural programming`
`manual memory management`
`boolean algebra`
`gate logic`
`memory`
`machine language`
`computer architecture`
`assembly`
`machine language`
@ -219,15 +206,12 @@ for how to progress through the course.
`network protocols`
`and more`
Courses | Duration | Effort | Prerequisites
:-- | :--: | :--: | :--:
[Build a Modern Computer from First Principles: From Nand to Tetris](https://www.coursera.org/learn/build-a-computer) ([alt](http://www.nand2tetris.org/)) | 6 weeks | 7-13 hours/week | none
[Build a Modern Computer from First Principles: Nand to Tetris Part II ](https://www.coursera.org/learn/nand2tetris2) | 6 weeks | 12-18 hours/week | From Nand to Tetris Part I
[Introduction to Computer Networking](https://lagunita.stanford.edu/courses/Engineering/Networking-SP/SelfPaced/about)| 8 weeks | 412 hours/week | algebra, probability, basic CS
[ops-class.org - Hack the Kernel](https://www.ops-class.org/) | 15 weeks | 6 hours/week | algorithms
#### Readings
- **Recommended**: While Hack the Kernel recommends Modern Operating Systems as a textbook, we suggest using [Operating Systems: Three Easy Pieces](http://pages.cs.wisc.edu/~remzi/OSTEP/).
Courses | Duration | Effort | Additional Text / Assignments| Prerequisites | Discussion
:-- | :--: | :--: | :--: | :--: | :--:
[Build a Modern Computer from First Principles: From Nand to Tetris](https://www.coursera.org/learn/build-a-computer) ([alternative](https://www.nand2tetris.org/)) | 6 weeks | 7-13 hours/week | - | C-like programming language | [chat](https://discord.gg/vxB2DRV)
[Build a Modern Computer from First Principles: Nand to Tetris Part II](https://www.coursera.org/learn/nand2tetris2) | 6 weeks | 12-18 hours/week | - | one of [these programming languages](https://user-images.githubusercontent.com/2046800/35426340-f6ce6358-026a-11e8-8bbb-4e95ac36b1d7.png), From Nand to Tetris Part I | [chat](https://discord.gg/AsUXcPu)
[Operating Systems: Three Easy Pieces](coursepages/ostep/README.md) | 10-12 weeks | 6-10 hours/week | - | Nand to Tetris Part II | [chat](https://discord.gg/wZNgpep)
[Computer Networking: a Top-Down Approach](http://gaia.cs.umass.edu/kurose_ross/online_lectures.htm)| 8 weeks | 412 hours/week | [Wireshark Labs](http://gaia.cs.umass.edu/kurose_ross/wireshark.php) | algebra, probability, basic CS | [chat](https://discord.gg/MJ9YXyV)
### Core theory
@ -244,11 +228,33 @@ Courses | Duration | Effort | Prerequisites
`NP-completeness`
`and more`
Courses | Duration | Effort | Prerequisites
:-- | :--: | :--: | :--:
[Algorithms: Design and Analysis, Part I](https://lagunita.stanford.edu/courses/course-v1:Engineering+Algorithms1+SelfPaced/about) | 8 weeks | 4-8 hours/week | any programming language, Mathematics for Computer Science
[Algorithms: Design and Analysis, Part II](https://lagunita.stanford.edu/courses/course-v1:Engineering+Algorithms2+SelfPaced/about) | 8 weeks | 4-8 hours/week | Part I
Courses | Duration | Effort | Prerequisites | Discussion
:-- | :--: | :--: | :--: | :--:
[Algorithms: Design and Analysis, Part 1](https://www.edx.org/learn/algorithms/stanford-university-algorithms-design-and-analysis-part-1) ([alternative](https://www.algorithmsilluminated.org/)) | 8 weeks | 4-8 hours/week | any programming language, Mathematics for Computer Science | [chat](https://discord.gg/mKRS7tY)
[Algorithms: Design and Analysis, Part 2](https://www.edx.org/learn/algorithms/stanford-university-algorithms-design-and-analysis-part-2) | 8 weeks | 4-8 hours/week | Algorithms Part 1 | [chat](https://discord.gg/Qstqe4t)
### Core security
**Topics covered**
`Confidentiality, Integrity, Availability`
`Secure Design`
`Defensive Programming`
`Threats and Attacks`
`Network Security`
`Cryptography`
`and more`
Courses | Duration | Effort | Prerequisites | Discussion
:-- | :--: | :--: | :--: | :--:
[Cybersecurity Fundamentals](https://www.edx.org/learn/cybersecurity/rochester-institute-of-technology-cybersecurity-fundamentals) | 8 weeks | 10-12 hours/week | - | [chat](https://discord.gg/XdY3AwTFK4)
[Principles of Secure Coding](https://www.coursera.org/learn/secure-coding-principles)| 4 weeks | 4 hours/week | - | [chat](https://discord.gg/5gMdeSK)
[Identifying Security Vulnerabilities](https://www.coursera.org/learn/identifying-security-vulnerabilities) | 4 weeks | 4 hours/week | - | [chat](https://discord.gg/V78MjUS)
Choose **one** of the following:
Courses | Duration | Effort | Prerequisites | Discussion
:-- | :--: | :--: | :--: | :--:
[Identifying Security Vulnerabilities in C/C++ Programming](https://www.coursera.org/learn/identifying-security-vulnerabilities-c-programming) | 4 weeks | 5 hours/week | - | [chat](https://discord.gg/Vbxce7A)
[Exploiting and Securing Vulnerabilities in Java Applications](https://www.coursera.org/learn/exploiting-securing-vulnerabilities-java-applications) | 4 weeks | 5 hours/week | - | [chat](https://discord.gg/QxC22rR)
### Core applications
@ -264,20 +270,33 @@ Courses | Duration | Effort | Prerequisites
`supervised learning`
`unsupervised learning`
`OpenGL`
`raytracing`
`block ciphers`
`authentication`
`public key encryption`
`ray tracing`
`and more`
Courses | Duration | Effort | Prerequisites
:-- | :--: | :--: | :--:
[Databases](https://lagunita.stanford.edu/courses/DB/2014/SelfPaced/about)| 12 weeks | 8-12 hours/week | some programming, basic CS
[Machine Learning](https://www.coursera.org/learn/machine-learning)| 11 weeks | 4-6 hours/week | linear algebra
[Computer Graphics](https://www.edx.org/course/computer-graphics-uc-san-diegox-cse167x)| 6 weeks | 12 hours/week | C++ or Java, linear algebra
[Cryptography I](https://www.coursera.org/course/crypto)| 6 weeks | 5-7 hours/week | linear algebra, probability
[Software Engineering: Introduction](https://www.edx.org/course/software-engineering-introduction-ubcx-softeng1x) | 6 weeks | 8-10 hours/week | Software Construction - Object-Oriented Design
[Software Development Capstone Project](https://www.edx.org/course/software-development-capstone-project-ubcx-softengprjx) | 6-7 weeks | 8-10 hours/week | Software Engineering: Introduction
Courses | Duration | Effort | Prerequisites | Discussion
:-- | :--: | :--: | :--: | :--:
[Databases: Modeling and Theory](https://www.edx.org/learn/databases/stanford-university-databases-modeling-and-theory)| 2 weeks | 10 hours/week | core programming | [chat](https://discord.gg/pMFqNf4)
[Databases: Relational Databases and SQL](https://www.edx.org/learn/relational-databases/stanford-university-databases-relational-databases-and-sql)| 2 weeks | 10 hours/week | core programming | [chat](https://discord.gg/P8SPPyF)
[Databases: Semistructured Data](https://www.edx.org/learn/relational-databases/stanford-university-databases-semistructured-data)| 2 weeks | 10 hours/week | core programming | [chat](https://discord.gg/duCJ3GN)
[Machine Learning](https://www.deeplearning.ai/courses/machine-learning-specialization/)| 11 weeks | 9 hours/week | Basic coding | [chat](https://discord.gg/NcXHDjy)
[Computer Graphics](https://www.edx.org/learn/computer-graphics/the-university-of-california-san-diego-computer-graphics) ([alternative](https://cseweb.ucsd.edu/~viscomp/classes/cse167/wi22/schedule.html))| 6 weeks | 12 hours/week | C++ or Java, [Basic Linear Algebra](https://ossu.dev/precollege-math/coursepages/precalculus) | [chat](https://discord.gg/68WqMNV)
[Software Engineering: Introduction](https://www.edx.org/learn/software-engineering/university-of-british-columbia-software-engineering-introduction) ([alternative](https://github.com/ubccpsc/310/blob/main/resources/README.md)) | 6 weeks | 8-10 hours/week | Core Programming, and a [sizable project](FAQ.md#why-require-experience-with-a-sizable-project-before-the-Software-Engineering-courses) | [chat](https://discord.gg/5Qtcwtz)
### Core ethics
**Topics covered**:
`Social Context`
`Analytical Tools`
`Professional Ethics`
`Intellectual Property`
`Privacy and Civil Liberties`
`and more`
Courses | Duration | Effort | Prerequisites | Discussion
:-- | :--: | :--: | :--: | :--:
[Ethics, Technology and Engineering](https://www.coursera.org/learn/ethics-technology-engineering)| 9 weeks | 2 hours/week | none | [chat](https://discord.gg/6ttjPmzZbe)
[Introduction to Intellectual Property](https://www.coursera.org/learn/introduction-intellectual-property)| 4 weeks | 2 hours/week | none | [chat](https://discord.gg/YbuERswpAK)
[Data Privacy Fundamentals](https://www.coursera.org/learn/northeastern-data-privacy)| 3 weeks | 3 hours/week | none | [chat](https://discord.gg/64J34ajNBd)
## Advanced CS
@ -285,17 +304,11 @@ After completing **every required course** in Core CS, students should choose a
Not every course from a subcategory needs to be taken.
But students should take *every* course that is relevant to the field they intend to go into.
The Advanced CS study should then end with one of the Specializations under [Advanced applications](#advanced-applications).
A Specialization's Capstone, if taken, may act as the [Final project](#final-project), if permitted by the Honor Code of the course.
If not, or if a student chooses not to take the Capstone, then a separate Final project will need to be done to complete this curriculum.
### Advanced programming
**Topics covered**:
`debugging theory and practice`
`goal-oriented programming`
`GPU programming`
`CUDA`
`parallel computing`
`object-oriented analysis and design`
`UML`
@ -304,28 +317,14 @@ If not, or if a student chooses not to take the Capstone, then a separate Final
Courses | Duration | Effort | Prerequisites
:-- | :--: | :--: | :--:
[Compilers](https://lagunita.stanford.edu/courses/Engineering/Compilers/Fall2014/about)| 9 weeks | 6-8 hours/week | none
[Software Debugging](https://www.udacity.com/course/software-debugging--cs259)| 8 weeks | 6 hours/week | Python, object-oriented programming
[Software Testing](https://www.udacity.com/course/software-testing--cs258) | 4 weeks | 6 hours/week | programming experience
[LAFF: Programming for Correctness](https://www.edx.org/course/laff-programming-correctness-utaustinx-ut-p4c-14-01x) | 7 weeks | 6 hours/week | linear algebra
[Introduction to Parallel Programming](https://www.udacity.com/course/intro-to-parallel-programming--cs344) | 12 weeks | - | C, algorithms
[Software Architecture & Design](https://www.udacity.com/course/software-architecture-design--ud821)| 8 weeks | 6 hours/week | software engineering in Java
[Parallel Programming](https://www.coursera.org/learn/scala-parallel-programming)| 4 weeks | 6-8 hours/week | Scala programming
[Compilers](https://www.edx.org/learn/computer-science/stanford-university-compilers) | 9 weeks | 6-8 hours/week | none
[Introduction to Haskell](https://www.seas.upenn.edu/~cis194/fall16/)| 14 weeks | - | -
[Learn Prolog Now!](https://www.let.rug.nl/bos/lpn//lpnpage.php?pageid=online) ([alternative](https://github.com/ossu/computer-science/files/6085884/lpn.pdf))*| 12 weeks | - | -
[Software Debugging](https://www.youtube.com/playlist?list=PLAwxTw4SYaPkxK63TiT88oEe-AIBhr96A)| 8 weeks | 6 hours/week | Python, object-oriented programming
[Software Testing](https://www.youtube.com/playlist?list=PLAwxTw4SYaPkWVHeC_8aSIbSxE_NXI76g) | 4 weeks | 6 hours/week | Python, programming experience
### Advanced math
**Topics covered**:
`parametric equations`
`polar coordinate systems`
`multivariable integrals`
`multivariable differentials`
`probability theory`
`and more`
Courses | Duration | Effort | Prerequisites
:-- | :--: | :--: | :--:
[Calculus: Parametric Equations and Polar Coordinates](https://ocw.mit.edu/courses/mathematics/18-01sc-single-variable-calculus-fall-2010/unit-4-techniques-of-integration/part-c-parametric-equations-and-polar-coordinates/) | - | - | single-variable calculus (Calculus Two)
[Multivariable Calculus](https://ocw.mit.edu/courses/mathematics/18-02sc-multivariable-calculus-fall-2010/index.htm) | 13 weeks | 12 hours/week | Parametric Equations and Polar Coordinates
[Introduction to Probability - The Science of Uncertainty](https://www.edx.org/course/introduction-probability-science-mitx-6-041x-2) | 18 weeks | 12 hours/week | Multivariable Calculus
(*) book by Blackburn, Bos, Striegnitz (compiled from [source](https://github.com/LearnPrologNow/lpn), redistributed under [CC license](https://creativecommons.org/licenses/by-sa/4.0/))
### Advanced systems
@ -345,19 +344,11 @@ Courses | Duration | Effort | Prerequisites
`system call interface`
`and more`
Courses | Duration | Effort | Prerequisites
:-- | :--: | :--: | :--:
[Electricity and Magnetism, Part 1](https://www.edx.org/course/electricity-magnetism-part-1-ricex-phys102-1x-0)<sup>1</sup> | 7 weeks | 8-10 hours/week | calculus, basic mechanics
[Electricity and Magnetism, Part 2](https://www.edx.org/course/electricity-magnetism-part-2-ricex-phys102-2x-0) | 7 weeks | 8-10 hours/week | Electricity and Magnetism, Part 1
[Computation Structures 1: Digital Circuits](https://www.edx.org/course/computation-structures-part-1-digital-mitx-6-004-1x-0) | 10 weeks | 6 hours/week | electricity, magnetism
[Computation Structures 2: Computer Architecture](https://www.edx.org/course/computation-structures-2-computer-mitx-6-004-2x) | 10 weeks | 6 hours/week | Computation Structures 1
[Computation Structures 3: Computer Organization](https://www.edx.org/course/computation-structures-3-computer-mitx-6-004-3x-0) | 10 weeks | 6 hours/week | Computation Structures 2
**<sup>1</sup> Note**:
These courses assume knowledge of basic physics.
([Why?](FAQ.md#why-is-the-curriculum-missing-some-pre-requisites))
If you are struggling, you can find a physics MOOC or utilize the materials from Khan Academy:
[Khan Academy - Physics](https://www.khanacademy.org/science/physics)
Courses | Duration | Effort | Prerequisites | Notes
:-- | :--: | :--: | :--: | :--:
[Computation Structures 1: Digital Circuits](https://learning.edx.org/course/course-v1:MITx+6.004.1x_3+3T2016) [alternative 1](https://ocw.mit.edu/courses/6-004-computation-structures-spring-2017/) [alternative 2](https://ocw.mit.edu/courses/6-004-computation-structures-spring-2009/) | 10 weeks | 6 hours/week | [Nand2Tetris II](https://www.coursera.org/learn/nand2tetris2) | Alternate links contain all 3 courses.
[Computation Structures 2: Computer Architecture](https://learning.edx.org/course/course-v1:MITx+6.004.2x+3T2015) | 10 weeks | 6 hours/week | Computation Structures 1 | -
[Computation Structures 3: Computer Organization](https://learning.edx.org/course/course-v1:MITx+6.004.3x_2+1T2017) | 10 weeks | 6 hours/week | Computation Structures 2 | -
### Advanced theory
@ -374,168 +365,89 @@ If you are struggling, you can find a physics MOOC or utilize the materials from
`propositional logic`
`relational logic`
`Herbrand logic`
`concept lattices`
`game trees`
`and more`
Courses | Duration | Effort | Prerequisites
:-- | :--: | :--: | :--:
[Introduction to Logic](https://www.coursera.org/learn/logic-introduction) | 10 weeks | 4-8 hours/week | set theory
[Automata Theory](https://lagunita.stanford.edu/courses/course-v1:ComputerScience+Automata+Fall2016/about) | 8 weeks | 10 hours/week | discrete mathematics, logic, algorithms
[Reliable Distributed Systems, Part 1](https://www.edx.org/course/reliable-distributed-algorithms-part-1-kthx-id2203-1x) | 5 weeks | 5 hours/week | Scala, intermediate CS
[Reliable Distributed Systems, Part 2](https://www.edx.org/course/reliable-distributed-algorithms-part-2-kthx-id2203-2x) | 5 weeks | 5 hours/week | Part 1
[Computational Geometry](https://www.edx.org/course/computational-geometry-tsinghuax-70240183x) | 16 weeks | 8 hours/week | algorithms, C++
[Introduction to Formal Concept Analysis](https://www.coursera.org/learn/formal-concept-analysis) | 6 weeks | 4-6 hours/week | logic, probability
[Game Theory](https://www.coursera.org/learn/game-theory-1) | 8 weeks | x hours/week | mathematical thinking, probability, calculus
[Theory of Computation](https://ocw.mit.edu/courses/18-404j-theory-of-computation-fall-2020/) ([alternative](https://www.youtube.com/playlist?list=PLEE7DF8F5E0203A56)) | 13 weeks | 10 hours/week | [Mathematics for Computer Science](https://openlearninglibrary.mit.edu/courses/course-v1:OCW+6.042J+2T2019/about), logic, algorithms
[Computational Geometry](https://www.edx.org/learn/geometry/tsinghua-university-ji-suan-ji-he-computational-geometry) | 16 weeks | 8 hours/week | algorithms, C++
[Game Theory](https://www.coursera.org/learn/game-theory-1) | 8 weeks | 3 hours/week | mathematical thinking, probability, calculus
### Advanced applications
These Coursera Specializations all end with a Capstone project.
Depending on the course, you may be able to utilize the Capstone as your Final Project for this Computer Science curriculum.
Note that doing a Specialization with the Capstone at the end always costs money.
So if you don't wish to spend money or use the Capstone as your Final, it may be possible to take the courses in the Specialization for free by manually searching for them, but not all allow this.
### Advanced Information Security
Courses | Duration | Effort | Prerequisites
:-- | :--: | :--: | :--:
[Robotics (Specialization)](https://www.coursera.org/specializations/robotics) | 26 weeks | 2-5 hours/week | linear algebra, calculus, programming, probability
[Web Security Fundamentals](https://www.edx.org/learn/computer-security/ku-leuven-web-security-fundamentals) | 5 weeks | 4-6 hours/week | understanding basic web technologies
[Security Governance & Compliance](https://www.coursera.org/learn/security-governance-compliance) | 3 weeks | 3 hours/week | -
[Digital Forensics Concepts](https://www.coursera.org/learn/digital-forensics-concepts) | 3 weeks | 2-3 hours/week | Core Security
[Secure Software Development: Requirements, Design, and Reuse](https://www.edx.org/learn/software-development/the-linux-foundation-secure-software-development-requirements-design-and-reuse) | 7 weeks | 1-2 hours/week | Core Programming and Core Security
[Secure Software Development: Implementation](https://www.edx.org/learn/software-development/the-linux-foundation-secure-software-development-implementation) | 7 weeks | 1-2 hours/week | Secure Software Development: Requirements, Design, and Reuse
[Secure Software Development: Verification and More Specialized Topics](https://www.edx.org/learn/software-engineering/the-linux-foundation-secure-software-development-verification-and-more-specialized-topics) | 7 weeks | 1-2 hours/week | Secure Software Development: Implementation
### Advanced math
Courses | Duration | Effort | Prerequisites | Discussion
:-- | :--: | :--: | :--: | :--:
[Essence of Linear Algebra](https://www.youtube.com/playlist?list=PLZHQObOWTQDPD3MizzM2xVFitgF8hE_ab) | - | - | [high school math](https://ossu.dev/precollege-math) | [chat](https://discord.gg/m6wHbP6)
[Linear Algebra](https://ocw.mit.edu/courses/mathematics/18-06sc-linear-algebra-fall-2011/) | 14 weeks | 12 hours/week | corequisite: Essence of Linear Algebra | [chat](https://discord.gg/k7nSWJH)
[Introduction to Numerical Methods](https://ocw.mit.edu/courses/mathematics/18-335j-introduction-to-numerical-methods-spring-2019/index.htm)| 14 weeks | 12 hours/week | [Linear Algebra](https://ocw.mit.edu/courses/mathematics/18-06sc-linear-algebra-fall-2011/) | [chat](https://discord.gg/FNEcNNq)
[Introduction to Formal Logic](https://forallx.openlogicproject.org/) | 10 weeks | 4-8 hours/week | [Set Theory](https://www.youtube.com/playlist?list=PL5KkMZvBpo5AH_5GpxMiryJT6Dkj32H6N) | [chat](https://discord.gg/MbM2Gg5)
[Probability](https://stat110.hsites.harvard.edu/) | 15 weeks | 5-10 hours/week | [Differentiation and Integration](https://www.edx.org/course/calculus-1b-integration) | [chat](https://discord.gg/UVjs9BU)
## Final project
Part of learning is doing.
The assignments and exams for each course are to prepare you to use your knowledge to solve real-world problems.
After you've completed Core CS and the parts of Advanced CS relevant to you,
you should identify a problem that you can solve using the knowledge you've acquired.
You can create something entirely new, or you can improve some tool/program that you use and wish were better.
Students who would like more guidance in creating a project may choose to use a series of project oriented courses.
Here is a sample of options
(many more are available, at this point you should be capable of identifying a series that is interesting and relevant to you):
Courses | Duration | Effort | Prerequisites
:-- | :--: | :--: | :--:
[Fullstack Open](https://fullstackopen.com/en/) | 12 weeks | 15 hours/week | programming
[Modern Robotics](https://modernrobotics.northwestern.edu) | 26 weeks | 2-5 hours/week | freshman-level physics, linear algebra, calculus, [linear ordinary differential equations](https://www.khanacademy.org/math/differential-equations)
[Data Mining (Specialization)](https://www.coursera.org/specializations/data-mining) | 30 weeks | 2-5 hours/week | machine learning
[Big Data (Specialization)](https://www.coursera.org/specializations/big-data) | 30 weeks | 3-5 hours/week | none
[Internet of Things (Specialization)](https://www.coursera.org/specializations/internet-of-things) | 30 weeks | 1-5 hours/week | strong programming
[Cloud Computing (Specialization)](https://www.coursera.org/specializations/cloud-computing) | 30 weeks | 2-6 hours/week | C++ programming
[Full Stack Web Development (Specialization)](https://www.coursera.org/specializations/full-stack) | 27 weeks | 2-6 hours/week | programming, databases
[Data Science (Specialization)](https://www.coursera.org/specializations/jhu-data-science) | 43 weeks | 1-6 hours/week | none
[Functional Programming in Scala (Specialization)](https://www.coursera.org/specializations/scala) | 29 weeks | 4-5 hours/weeks | One year programming experience
[Functional Programming in Scala (Specialization)](https://www.coursera.org/specializations/scala) | 29 weeks | 4-5 hours/week | One year programming experience
[Game Design and Development with Unity 2020 (Specialization)](https://www.coursera.org/specializations/game-design-and-development) | 6 months | 5 hours/week | programming, interactive design
## Final project
## Congratulations
OSS University is **project-focused**.
You are encouraged to do the assignments and exams for each course, but what really matters is whether you can *use* your knowledge to solve a real world problem.
After completing the requirements of the curriculum above,
you will have completed the equivalent of a full bachelor's degree in Computer Science.
Congratulations!
After you've gotten through all of Core CS and the parts of Advanced CS relevant to you, you should think about a problem that you can solve using the knowledge you've acquired.
Not only does real project work look great on a resume, the project will *validate* and *consolidate* your knowledge.
You can create something entirely new, or you can find an existing project that needs help via websites like
[CodeTriage](https://www.codetriage.com/)
or
[First Timers Only](http://www.firsttimersonly.com/).
Another option is using the Capstone project from taking one of the Specializations in [Advanced applications](#advanced-applications);
whether or not this makes sense depends on the course, the project, and whether or not the course's Honor Code permits you to display your work publicly.
In some cases, it may not be permitted;
do **not** violate your course's Honor Code!
Put the OSSU-CS badge in the README of your repository!
[![Open Source Society University - Computer Science](https://img.shields.io/badge/OSSU-computer--science-blue.svg)](https://github.com/ossu/computer-science)
- Markdown: `[![Open Source Society University - Computer Science](https://img.shields.io/badge/OSSU-computer--science-blue.svg)](https://github.com/ossu/computer-science)`
- HTML: `<a href="https://github.com/ossu/computer-science"><img alt="Open Source Society University - Computer Science" src="https://img.shields.io/badge/OSSU-computer--science-blue.svg"></a>`
### Evaluation
Upon completing your final project, submit your project's information to [PROJECTS](PROJECTS.md)
via a pull request and use our [community](#community) channels to announce it to your fellow students.
Your peers and mentors from OSSU will then informally evaluate your project.
You will not be "graded" in the traditional sense — everyone has their own measurements for what they consider a success.
The purpose of the evaluation is to act as your first announcement to the world that you are a computer scientist,
and to get experience listening to feedback — both positive and negative — and taking it in stride.
The final project evaluation has a second purpose: to evaluate whether OSSU,
through its community and curriculum, is successful in its mission to guide independent learners in obtaining a world-class computer science education.
### Cooperative work
You can create this project alone or with other students!
**We love cooperative work**!
Use our [channels](#community) to communicate with other fellows to combine and create new projects!
### Which programming languages should I use?
My friend, here is the best part of liberty!
You can use **any** language that you want to complete the final project.
The important thing is to **internalize** the core concepts and to be able to use them with whatever tool (programming language) that you wish.
## Pro CS
After completing the requirements of the curriculum above, you will have completed the equivalent of a full bachelor's degree in Computer Science, or quite close to one.
You can stop in the Advanced CS section, but the next step to completing your studies is to develop skills and knowledge in a specific domain.
Many of these courses are graduate-level.
Choose one or more of the following **specializations**:
- [Mastering Software Development in R Specialization](https://www.coursera.org/specializations/r) by Johns Hopkins University
- [Artificial Intelligence Engineer Nanodegree](https://www.udacity.com/ai) by IBM, Amazon, and Didi
- [Machine Learning Engineer Nanodegree](https://www.udacity.com/course/machine-learning-engineer-nanodegree--nd009) by kaggle
- [Cybersecurity MicroMasters](https://www.edx.org/micromasters/ritx-cybersecurity) by the Rochester Institute of Technology
- [Android Developer Nanodegree](https://www.udacity.com/course/android-developer-nanodegree-by-google--nd801) by Google
These aren't the only specializations you can choose. Check the following websites for **more options**:
- edX: [xSeries](https://www.edx.org/xseries)
- Coursera: [Specializations](https://www.coursera.org/specializations)
- Udacity: [Nanodegree](https://www.udacity.com/nanodegree)
### Where to go next?
What is next for you? The possibilities are boundless and overlapping:
- Look for a job as a developer!
- Check out the [readings](extras/readings.md) for classic books you can read that will sharpen your skills and expand your knowledge.
- Join a local developer meetup (e.g. via [meetup.com](https://www.meetup.com/)).
- Pay attention to emerging technologies in the world of software development:
+ Explore the **actor model** through [Elixir](http://elixir-lang.org/), a new functional programming language for the web based on the battle-tested Erlang Virtual Machine!
+ Explore the **actor model** through [Elixir](https://elixir-lang.org/), a new functional programming language for the web based on the battle-tested Erlang Virtual Machine!
+ Explore **borrowing and lifetimes** through [Rust](https://www.rust-lang.org/), a systems language which achieves memory- and thread-safety without a garbage collector!
+ Explore **dependent type systems** through [Idris](https://www.idris-lang.org/), a new Haskell-inspired language with unprecedented support for type-driven development.
![keep learning](http://i.imgur.com/REQK0VU.jpg)
![keep learning](images/keep-learning.webp)
# Code of conduct
[OSSU's code of conduct](https://github.com/ossu/code-of-conduct).
# Community
- Subscribe to our [newsletter](https://tinyletter.com/ossu).
- Use our [forum](https://github.com/ossu/forum) if you need some help.
- You can also interact through [GitHub issues](https://github.com/ossu/computer-science/issues).
- We also have a chat room! [![Join the chat at https://gitter.im/open-source-society/computer-science](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/open-source-society/computer-science?utm_campaign=pr-badge&utm_content=badge&utm_medium=badge&utm_source=badge)
- Add **Open Source Society University** to your [Linkedin](https://www.linkedin.com/school/11272443/) and [Facebook](https://www.facebook.com/ossuniversity) profile!
> **PS**: A forum is an ideal way to interact with other students as we do not lose important discussions, which usually occur in communication via chat apps.
**Please use our forum for important discussions**.
## How to show your progress
1. Create an account in [Trello](https://trello.com/).
1. Copy [this](https://trello.com/b/9DPXYv5f) board to your personal account.
See how to copy a board [here](http://blog.trello.com/you-can-copy-boards-now-finally/).
[Fork](https://www.freecodecamp.org/news/how-to-fork-a-github-repository/) the [GitHub repo](https://github.com/ossu/computer-science) into your own GitHub account and put ✅ next to the stuff you've completed as you complete it. This can serve as your [kanban board](https://en.wikipedia.org/wiki/Kanban_board) and will be faster to implement than any other solution (giving you time to spend on the courses).
Now that you have a copy of our official board, you just need to pass the cards to the `Doing` column or `Done` column as you progress in your study.
# Team
We also have **labels** to help you have more control through the process.
The meaning of each of these labels is:
- `Main Curriculum`: cards with that label represent courses that are listed in our curriculum.
- `Extra Resources`: cards with that label represent courses that was added by the student.
- `Doing`: cards with that label represent courses the student is current doing.
- `Done`: cards with that label represent courses finished by the student.
Those cards should also have the link for at least one project/article built with the knowledge acquired in such course.
- `Section`: cards with that label represent the section that we have in our curriculum.
Those cards with the `Section` label are only to help the organization of the Done column.
You should put the *Course's cards* below its respective *Section's card*.
The intention of this board is to provide our students a way to track their progress, and also the ability to show their progress through a public page for friends, family, employers, etc.
You can change the status of your board to be *public* or *private*.
## Team
* **Curriculum Founders**: [Eric Douglas](https://github.com/ericdouglas)
* **Curriculum Maintainers**: [Eric Douglas](https://github.com/ericdouglas) and [hanjiexi](https://github.com/hanjiexi)
* **Contributors**: [contributors](https://github.com/ossu/computer-science/graphs/contributors)
# References
- [Google - Guide for Technical Development](https://www.google.com/about/careers/students/guide-to-technical-development.html)
- [Coursera](https://www.coursera.org/)
- [edX](https://www.edx.org)
- [Udacity](https://www.udacity.com/)
- [Stanford University](https://lagunita.stanford.edu/)
- [Carnegie Mellon University: Computer Science Major Requirements](https://www.csd.cs.cmu.edu/academics/undergraduate/requirements)
- [MIT Open Courseware](http://ocw.mit.edu/courses/#electrical-engineering-and-computer-science)
- [Teach Yourself Computer Science](https://teachyourselfcs.com/)
- [Obtaining a Thorough CS Background Online](http://spin.atomicobject.com/2015/05/15/obtaining-thorough-cs-background-online/)
* **[Eric Douglas](https://github.com/ericdouglas)**: founder of OSSU
* **[Josh Hanson](https://github.com/joshmhanson)**: lead technical maintainer
* **[Waciuma Wanjohi](https://github.com/waciumawanjohi)**: lead academic maintainer
* **[Contributors](https://github.com/ossu/computer-science/graphs/contributors)**

View File

@ -1,74 +0,0 @@
# OSSU-CS Academic Requirements
This document contains the subjects (e.g. programming), topics (e.g. imperative programming), and projects the student must master to pass through this curriculum.
The subject requirements are based on topics, rather than specific courses, because sometimes a certain course isn't available at the right time or doesn't fit the student's learning style.
## Subjects
### Programming
#### Paradigms
- Imperative programming
- Procedural programming
- Object-oriented programming
- Functional programming
- Logic programming
#### Languages
- C and/or C-derived languages
- SQL
- XML/HTML
- JavaScript and/or related language
- An ML-family language
- A Lisp-family langauge
- Python and/or Ruby
### Math
- Logic and proofs
- Discrete structures
- Graph theory
- Discrete probability
- Linear algebra
### Systems
- Memory
- Caching
- Virtualization
- Concurrency
- Compilers
- Assembly
- Networking
### Theory
- Data structures
- Sorting
- Searching
- Divide and conquer
- Algorithms on graphs
- Greedy algorithms
- Trees
- P and NP
### Applications
- Software product management
- REST
- Databases
- Computer graphics
- Cybersecurity
- Machine learning
## Projects
Students are required to complete a project at the end of [Core CS](README.md#core-cs) and at the end of [Advanced CS](README.md#advanced-cs).
For Core CS, students have two options:
- They can use the Capstone course at the end of [Core applications](#core-applications) as their Core CS Project, in which case they are not required to share their project code.
- They can skip that Capstone project and make their own project, in which case they *are* required to share the project code.
For the Advanced CS Project (also known as the Final Project), students again have two options:
- They can take one of the Specializations under [Advanced applications](#advanced-applications), all of which include Capstone Projects. Students *must* share their project code unless the course's honor code forbids it.
- They can create their own Final Project, and must share the project code to be evaluated by the community.

8
_config.yml Normal file
View File

@ -0,0 +1,8 @@
title: Computer Science
remote_theme: "jekyll/minima@7d91bb5"
minima:
skin: auto
nav_pages:
- FAQ.md
- HELP.md
include: ['CONTRIBUTING.md']

View File

@ -0,0 +1,3 @@
<link rel="icon" type="image/png" href="/images/favicon-96x96.png" sizes="96x96" />
<link rel="icon" type="image/svg+xml" href="/images/favicon.svg" />
<link rel="shortcut icon" href="/images/favicon.ico" />

17
_includes/footer.html Normal file
View File

@ -0,0 +1,17 @@
<footer class="site-footer h-card">
<data class="u-url" href="{{ '/' | relative_url }}"></data>
<div class="wrapper">
<div class="footer-col-wrapper">
<p>{{ site.description | escape }}</p>
</div>
</div>
<div class="social-links">
{%- include social.html -%}
</div>
</div>
</footer>

7
_includes/nav-items.html Normal file
View File

@ -0,0 +1,7 @@
{%- for path in include.paths -%}
{%- assign hyperpage = site.pages | where: "path", path | first -%}
{%- if hyperpage.title %}
<a class="nav-item" href="{{ hyperpage.url | relative_url }}">{{ hyperpage.title | escape }}</a>
{%- endif -%}
{%- endfor -%}
<a class="nav-item" href="https://github.com/ossu/computer-science">GitHub</a>

10
_layouts/page.html Normal file
View File

@ -0,0 +1,10 @@
---
layout: base
---
<article class="post">
<div class="post-content">
{{ content }}
</div>
</article>

View File

@ -0,0 +1,40 @@
# Class-Based Program Design
This course extends your work from [Systematic Program Design](../spd/README.md), transitioning from the functional programming paradigm with Racket to the class-based paradigm with Java, and preparing you for [Object-Oriented Design](/README.md#core-programming).
This course was offered by Northeastern University in the spring semester of 2022 and the course materials are available on their website.
**Course Link:**
- <https://course.ccs.neu.edu/cs2510sp22/index.html>
## Schedule
The original schedule is available [here](https://course.ccs.neu.edu/cs2510sp22/Syllabus.html), but the UI makes it difficult to navigate to the original dates to see the proper ordering of the course. To help organize your studies, we've created the following ordering:
| Lectures | Lab | Assignment |
|----------|-----|------------|
| [1](https://course.ccs.neu.edu/cs2510sp22/lecture1.html), [2](https://course.ccs.neu.edu/cs2510sp22/lecture2.html), [3](https://course.ccs.neu.edu/cs2510sp22/lecture3.html) | [Lab 1](https://course.ccs.neu.edu/cs2510sp22/lab1.html) | [Assignment 1](https://course.ccs.neu.edu/cs2510sp22/assignment1.html) |
| [4](https://course.ccs.neu.edu/cs2510sp22/lecture4.html), [5](https://course.ccs.neu.edu/cs2510sp22/lecture5.html), [6](https://course.ccs.neu.edu/cs2510sp22/lecture6.html) | [Lab 2](https://course.ccs.neu.edu/cs2510sp22/lab2.html) | [Assignment 2](https://course.ccs.neu.edu/cs2510sp22/assignment2.html) |
| [7](https://course.ccs.neu.edu/cs2510sp22/lecture7.html), [8](https://course.ccs.neu.edu/cs2510sp22/lecture8.html), [9](https://course.ccs.neu.edu/cs2510sp22/lecture9.html) | [Lab 3](https://course.ccs.neu.edu/cs2510sp22/lab3.html) | [Assignment 3](https://course.ccs.neu.edu/cs2510sp22/assignment3.html) |
| [10](https://course.ccs.neu.edu/cs2510sp22/lecture10.html), [11](https://course.ccs.neu.edu/cs2510sp22/lecture11.html), [12](https://course.ccs.neu.edu/cs2510sp22/lecture12.html) | [Lab 4](https://course.ccs.neu.edu/cs2510sp22/lab4.html) | [Assignment 4](https://course.ccs.neu.edu/cs2510sp22/assignment4.html) |
| [13](https://course.ccs.neu.edu/cs2510sp22/lecture13.html), [14](https://course.ccs.neu.edu/cs2510sp22/lecture14.html) | [Lab 5](https://course.ccs.neu.edu/cs2510sp22/lab5.html) | [Assignment 5](https://course.ccs.neu.edu/cs2510sp22/assignment5.html) |
| [15](https://course.ccs.neu.edu/cs2510sp22/lecture15.html), [16](https://course.ccs.neu.edu/cs2510sp22/lecture16.html) | [Lab 6](https://course.ccs.neu.edu/cs2510sp22/lab6.html) | [Assignment 6](https://course.ccs.neu.edu/cs2510sp22/assignment6.html) |
| [17](https://course.ccs.neu.edu/cs2510sp22/lecture17.html), [18](https://course.ccs.neu.edu/cs2510sp22/lecture18.html), [19](https://course.ccs.neu.edu/cs2510sp22/lecture19.html) | [Lab 7](https://course.ccs.neu.edu/cs2510sp22/lab7.html) | [Assignment 7](https://course.ccs.neu.edu/cs2510sp22/assignment7.html) |
| [20](https://course.ccs.neu.edu/cs2510sp22/lecture20.html), [21](https://course.ccs.neu.edu/cs2510sp22/lecture21.html), [22](https://course.ccs.neu.edu/cs2510sp22/lecture22.html) | [Lab 8](https://course.ccs.neu.edu/cs2510sp22/lab8.html) | [Assignment 8](https://course.ccs.neu.edu/cs2510sp22/assignment8.html) |
| [23](https://course.ccs.neu.edu/cs2510sp22/lecture23.html), [24](https://course.ccs.neu.edu/cs2510sp22/lecture24.html), [25](https://course.ccs.neu.edu/cs2510sp22/lecture25.html) | [Lab 9](https://course.ccs.neu.edu/cs2510sp22/lab9.html) | [Assignment 9 Part 1](https://course.ccs.neu.edu/cs2510sp22/assignment9.html) |
| [26](https://course.ccs.neu.edu/cs2510sp22/lecture26.html), [27](https://course.ccs.neu.edu/cs2510sp22/lecture27.html), [30](https://course.ccs.neu.edu/cs2510sp22/lecture30.html) | [Lab 10](https://course.ccs.neu.edu/cs2510sp22/lab10.html) | [Assignment 9 Part 2](https://course.ccs.neu.edu/cs2510sp22/assignment9.html) |
| [28](https://course.ccs.neu.edu/cs2510sp22/lecture28.html), [29](https://course.ccs.neu.edu/cs2510sp22/lecture29.html) | [Lab 11](https://course.ccs.neu.edu/cs2510sp22/lab11.html) | - |
| [31](https://course.ccs.neu.edu/cs2510sp22/lecture31.html), [32](https://course.ccs.neu.edu/cs2510sp22/lecture32.html) | [Lab 12](https://course.ccs.neu.edu/cs2510sp22/lab12.html) | [Assignment 10 Part 1](https://course.ccs.neu.edu/cs2510sp22/assignment10.html) |
| [34](https://course.ccs.neu.edu/cs2510sp22/lecture34.html), [35](https://course.ccs.neu.edu/cs2510sp22/lecture35.html) | - | [Assignment 10 Part 2](https://course.ccs.neu.edu/cs2510sp22/assignment10.html) |
**Note:**
- Lecture 30 appears out of order. This is in line with the original class schedule.
- Some of the lectures may appear to be missing. If you review the website, you will find that this matches what is available on the course website and all materials are linked above.
- The original videos for Lecture 28 and Lecture 30 on the course website are broken. Below are the links to their YouTube archives:
- [Lecture 28](https://youtube.com/playlist?list=PL_N7YxtCMPydJ-aBr4Ku9-q--D6vheOnp&si=XnBXaZKbBhqdUJgJ)
- [Lecture 30](https://youtube.com/playlist?list=PL_N7YxtCMPyea2YC3e-1s7SR_S3oWGjdb&si=j-IZa6H7O3vecsTy)
- The assignments above are slightly out of order compared to the true class schedule. This was done to better align the material in lectures and labs with the material covered in the assignments. In the actual course, they gave the students a few days between learning the material in lecture and the due date for that assignment. If you find any misordering where an assignment needs material from a lecture listed after that assignment, please submit a PR to fix the ordering.
- The schedule above should not be treated as a replacement for the course website. There is essential documentation on the course website that is not reflected in the schedule above.
- Ensure that you use Java 11 for this course. Using the incorrect version will cause issues with the required libraries provided in this course.

View File

@ -0,0 +1,44 @@
# Introduction to Computer Science and Programming using Python
This course will introduce you to the world of computer science and programming, giving you a flavor of the material to come. If you finish the course wanting more, Computer Science is likely for you!
This course has been developed by MIT and is available on [MIT's OCW](https://ocw.mit.edu) platform.
> Introduction to Computer Science and Programming in Python is intended for students with little or no programming experience. It aims to provide students with an understanding of the role computation can play in solving problems and to help students, regardless of their major, feel justifiably confident of their ability to write small programs that allow them to accomplish useful goals. The class uses the Python programming language.
**Course Link:** <https://ocw.mit.edu/courses/6-100l-introduction-to-cs-and-programming-using-python-fall-2022/pages/material-by-lecture/>
## ⚠️ Under Review
This course is under review. The course has been designed to accommodate people completely new to programming. However, if you find the course difficult to follow, you can try doing one of the [Intro to Programming courses](../intro-programming/README.md) and then return to this course. We would like to hear your feedback regarding this course, and whether you needed to do the [Intro to Programming courses](../intro-programming/README.md) first. Please provide your feedback on this RFC: <https://github.com/ossu/computer-science/issues/1266>.
## Instructions
1. Open the [course link](https://ocw.mit.edu/courses/6-100l-introduction-to-cs-and-programming-using-python-fall-2022/pages/material-by-lecture/) given above. You will see a list of Lectures.
2. Clicking on the link of a particular lecture will present all the materials from that lecture to you.
3. Work through all the course lectures as given in the link above. Watch the videos, do the finger exercises, and then solve the problem sets.
4. You are not supposed to complete the problem sets as soon as they appear on a lecture page. You are supposed to start thinking about it from that point. The actual due dates, according to the [course calendar](https://ocw.mit.edu/courses/6-100l-introduction-to-cs-and-programming-using-python-fall-2022/pages/calendar/) are:
- PSET 0 - Before lecture 1
- PSET 1 - Before lecture 9
- PSET 2 - Before lecture 12
- PSET 3 - Before lecture 16
- PSET 4 - Before lecture 20
- PSET 5 - Before lecture 25
6. There are links to solution of finger exercises on each lecture page. Match your answers to the given solutions to grade yourself.
7. Each problem set come with a script and instructions to check your solution. Use them to grade yourself.
8. You don't need to install the full Anaconda distribution to do this course. See the notes section below for more information.
9. If you are stuck somewhere, feel free to ask questions. You can join the OSSU chat for this course here: <https://discord.gg/jvchSm9>.
## Notes
1. You don't need to install the full anaconda package to do this course. You can just download the Spyder IDE from here: <https://github.com/spyder-ide/spyder/releases/latest>. It comes bundles with python as well as some popular scientific python libraries (all the libraries which this course uses are included), but it is not as large or complex as the full anaconda distribution. You don't need to set up python separately or anything.
2. You can use VS Code, or any text editor/IDE you prefer. If you are using a text editor/IDE other than Spyder/Anaconda, you should note that the course sometimes ask you to run some additional statements after running a python file. To do so, run `python -i file.py`. Then you can run additional statements.
3. You won't get any certificate for doing this course. If you really want a certificate, you need to do the faster instructor-paced [6.00.1x course on Edx](https://www.edx.org/course/introduction-to-computer-science-and-programming-7) on Edx. Certificate of an introductory course like this is not very valuable, so unless you are absolutely sure, we recommend you to do the 6.100L course linked above instead.
4. If for some reason you want to do the OCW version of the faster paced 6.0001 course, you can do that here: <https://ocw.mit.edu/courses/6-0001-introduction-to-computer-science-and-programming-in-python-fall-2016/>.
5. The course mentions the textbook [Introduction to Computation and Programming Using Python, third edition](https://mitpress.mit.edu/9780262542364/introduction-to-computation-and-programming-using-python/) as required reading. As with any course listed on OSSU, please remember: All paid additions should be considered optional. You will not fail this course if you do not read the textbook. "The book and the course lectures parallel each other, though there is more detail in the book about some topics." You are not missing out on enough for it to matter.
## Extra Practice
1. [https://introcomp.mit.edu/spring25/practice](https://introcomp.mit.edu/spring25/practice)

View File

@ -0,0 +1,86 @@
# Introduction to Programming
If you find the [Intro CS course](../intro-cs/README.md) difficult to follow, start here. These courses are self-paced, allowing you to adjust the number of hours you spend per week to meet your needs.
You need to do **only ONE** of the following courses.
## CS50P: Introduction to Programming with Python
This course has been developed by the CS50 team at Harvard University.
> An introduction to programming using a language called Python. Learn how to read and write code as well as how to test and "debug" it. Designed for students with or without prior programming experience who'd like to learn Python specifically. Learn about functions, arguments, and return values (oh my!); variables and types; conditionals and Boolean expressions; and loops. Learn how to handle exceptions, find and fix bugs, and write unit tests; use third-party libraries; validate and extract data with regular expressions; model real-world entities with classes, objects, methods, and properties; and read and write files. Hands-on opportunities for lots of practice. Exercises inspired by real-world programming problems. No software required except for a web browser, or you can write code on your own PC or Mac.
**Link**: <https://cs50.harvard.edu/python/>
**Note**: This course is *different* from CS50 or CS50x. CS50 is not part of the OSSU curriculum. That being said, if you have completed CS50, you can skip this course and move on to the next one.
### Instructions
- If you want to follow along with the instructor, log in to the [CS50 "codespace"](https://cs50.dev) and watch [this video](https://cs50.harvard.edu/python/2022/shorts/visual_studio_code_for_cs50/) to get started.
- Watch each lecture and complete the respective problem set. Read the lecture notes to revise things.
- If you are stuck somewhere, feel free to ask questions. You can join the OSSU chat for this course here: <https://discord.gg/cBkssaJy5g>.
- You can also join the CS50 discord server and ask questions there: <https://discord.gg/cs50>, but note that it is not affiliated with or maintained by OSSU.
### Course Materials
0. [Functions, Variables](https://cs50.harvard.edu/python/2022/weeks/0/) — [Notes](https://cs50.harvard.edu/python/2022/notes/0/) — [Problem Set](https://cs50.harvard.edu/python/2022/psets/0/)
1. [Conditionals](https://cs50.harvard.edu/python/2022/weeks/1/) — [Notes](https://cs50.harvard.edu/python/2022/notes/1/) — [Problem Set](https://cs50.harvard.edu/python/2022/psets/1/)
2. [Loops](https://cs50.harvard.edu/python/2022/weeks/2/) — [Notes](https://cs50.harvard.edu/python/2022/notes/2/) — [Problem Set](https://cs50.harvard.edu/python/2022/psets/2/)
3. [Exceptions](https://cs50.harvard.edu/python/2022/weeks/3/) — [Notes](https://cs50.harvard.edu/python/2022/notes/3/) — [Problem Set](https://cs50.harvard.edu/python/2022/psets/3/)
4. [Libraries](https://cs50.harvard.edu/python/2022/weeks/4/) — [Notes](https://cs50.harvard.edu/python/2022/notes/4/) — [Problem Set](https://cs50.harvard.edu/python/2022/psets/4/)
5. [Unit Tests](https://cs50.harvard.edu/python/2022/weeks/5/) — [Notes](https://cs50.harvard.edu/python/2022/notes/5/) — [Problem Set](https://cs50.harvard.edu/python/2022/psets/5/)
6. [File I/O](https://cs50.harvard.edu/python/2022/weeks/6/) — [Notes](https://cs50.harvard.edu/python/2022/notes/6/) — [Problem Set](https://cs50.harvard.edu/python/2022/psets/6/)
7. [Regular Expressions](https://cs50.harvard.edu/python/2022/weeks/7/) — [Notes](https://cs50.harvard.edu/python/2022/notes/7/) — [Problem Set](https://cs50.harvard.edu/python/2022/psets/7/)
8. [Object-Oriented Programming](https://cs50.harvard.edu/python/2022/weeks/8/) — [Notes](https://cs50.harvard.edu/python/2022/notes/8/) — [Problem Set](https://cs50.harvard.edu/python/2022/psets/8/)
9. [Et Cetera](https://cs50.harvard.edu/python/2022/weeks/9/) — [Notes](https://cs50.harvard.edu/python/2022/notes/9/) — [Final Project](https://cs50.harvard.edu/python/2022/project/)
## Python for Everybody
This course has been created by Professor Charles Severance from the University of Michigan.
> Learn to Program and Analyze Data with Python. Develop programs to gather, clean, analyze, and visualize data.
**Link**: <https://www.py4e.com/lessons>
**Textbook**: [PDF](http://do1.dr-chuck.com/pythonlearn/EN_us/pythonlearn.pdf) / [EPUB](http://do1.dr-chuck.com/pythonlearn/EN_us/pythonlearn.epub) / [HTML](https://www.py4e.com/html3) / [Buy hardcopy](https://www.py4e.com/book)
**Note**: This course is also offered on Coursera, Edx. Those versions require you to pay to get the full version of the course. We suggest doing the course on its website, which is completely free.
### Instructions
- You need to [sign in](https://www.py4e.com/) to the course website using your Google account to access the assignments.
- Watch all the videos of a lesson and then do its assignments.
- If you prefer reading books, you can read the HTML version of the chapter related to the lesson linked on the lesson's page, or you can download the whole book in different formats from [this page](https://www.py4e.com/book).
- If you face any problems, feel free to ask questions. You can join the OSSU chat for this course here: <https://discord.gg/syA242Z>.
- You only need to complete the course up to the Regular Expressions lesson. The rest of the course is optional.
### Course Materials
1. [Installing Python](https://www.py4e.com/lessons/install)
2. [Why Program?](https://www.py4e.com/lessons/intro)
3. [Variables, expressions and statements](https://www.py4e.com/lessons/memory)
4. [Conditional Execution](https://www.py4e.com/lessons/logic)
5. [Functions](https://www.py4e.com/lessons/functions)
6. [Loops and Iterations](https://www.py4e.com/lessons/loops)
7. [Strings](https://www.py4e.com/lessons/strings)
8. [Files](https://www.py4e.com/lessons/files)
9. [Lists](https://www.py4e.com/lessons/lists)
10. [Dictionaries](https://www.py4e.com/lessons/dictionary)
11. [Tuples](https://www.py4e.com/lessons/tuples)
12. [Regular Expressions](https://www.py4e.com/lessons/regex)
13. [Network Programming](https://www.py4e.com/lessons/network) (Optional)
14. [Using Web Services](https://www.py4e.com/lessons/servces) (Optional)
15. [Object-Oriented Programming](https://www.py4e.com/lessons/Objects) (Optional)
16. [Databases](https://www.py4e.com/lessons/database) (Optional)
17. [Data Visualization](https://www.py4e.com/lessons/dataviz) (Optional)
### Fixes
1. If you're doing the BeautifulSoup4 lesson, there is an issue with Python 3.10+ that will give you an error referencing the Collections library. We have a fix for you. We don't expect you to understand it, just put this in front of your code in the imports block:
```python
import collections
collections.Callable = collections.abc.Callable
from bs4 import BeautifulSoup
```
Doing this should fix the compatibility issue and allow your code to run.

View File

@ -0,0 +1,35 @@
## Project 1B
### all thanks to [palladian](https://github.com/palladian1)
### Linux Installation
* Make sure you have a compatible compiler toolchain; if you're on Linux, gcc should work perfectly.
* Install qemu-system-x86 (may be called qemu-system-i386 or qemu-system-x86_64; note that on some distros, qemu is the wrong package).
* Install Perl.
* Install gawk.
* Install expect.
* Make a src/ directory in the same directory as the project's test script.
* Clone xv6 github repo and copy the source code in to your src/ directory.
* Inside src/, run `make qemu-nox` to test whether xv6 is working. Exit xv6 with `Ctrl-a x`; if you forget this, you can also kill the qemu process. It's worth checking `top` or `htop` to make sure qemu isn't running anymore; sometimes it can keep going after you exit and consume a lot of resources.
* Modify the Makefile to set `CPUS := 1`.
* Run `make qemu-nox` again to test that xv6 still works.
### Instructions
* Your task is to create a new system call for xv6, `getreadcount()`, that will return the number of `read` syscalls that have previously taken place. Note that the count should be a global count, not a per-process count.
### Suggested Approach
* Download the xv6 source code PDF (it's better organized there than in the code you downloaded). Read the table of contents to understand how sheets, pages, and lines are numbered. Then glance at the cross-references after that so you know how to find parts of the code if you need to.
* Take a (very) quick look at the portions of the xv6 source code listed under `processes` and `system calls` on the table of contents, as well as `usys.S` in the `user-level` section. Don't worry about understanding it yet; you just need to see where each file is in the PDF so that you can follow along with the discussion video later, since the professor's code has a different directory layout than yours will.
* Watch the video for discussion 2 on Project P1B, and follow along with your PDF copy of the xv6 code. Annotate it as the professor explains what each part does.
* Read the background section linked on the project's Github page, annotating the xv6 code PDF.
* Read through the xv6 PDF one more time, this time to get a general understanding of the `processes` and `system calls` sections, as well as `usys.S` and `user.h` (NOTE: the last one isn't included in the xv6 PDF, so you'll have to look at the actual code you downloaded). Don't worry about understanding every last line of code, just make sure you know where system calls are defined, how they're called, etc.
* Modify the xv6 source code to add the new `getreadcount()` syscall. You will need to modify several files; I suggest marking your modifications with `// OSTEP project` to make it easy to find them later for debugging.
* There is one other place you'll have to add code, which isn't included in the xv6 PDF: `user.h`.
* Once you're done, run the test script. Test 1 runs a function that will make several `read` calls, then calls `getreadcount`. In order for your code to work, you must correctly keep track of the total number of `read` calls made by all processes.
* If your code passes test 1, congratulations! You're done for now. Don't worry about test 2 until after you've watched the lectures on concurrency.
* If your code didn't pass test 1, you can compare the expected output in `tests/1.out` with your test's actual output in `tests-out/1.out`. You can also look at `tests-out/1.err` to check for any error messages.
* You can also test your code by loading up xv6 in your terminal with `make qemu-nox`. Type `ls` to see all files; you should see `test_1` and `test_2`. Run test 1 with `./test_1` to see what it prints out; you can compare that manually with the expected output.
* Once you've watched the lectures on threads, concurrency, and locks: test 2 checks whether your implementation of `getreadcount` is thread-safe. It probably wasn't before, so in order to fix that, you'll have to add a lock. Then you can run the test script again and check that your code now passes both tests.

View File

@ -0,0 +1,45 @@
## Project 2A
### all thanks to [Palladian](https://github.com/palladian1/)
- [x] Interactive mode
- [x] Batch mode
- [x] exit
- [x] cd
- [x] path
- [x] Redirection
- [x] Parallel commands
### Tips
* Watch the video for discussion 3 on the Unix shell.
* Read chapter 5 in the OSTEP book.
* Start by implementing a shell that only does one thing: prints the prompt, then exits when you type `exit`. Then add `cd`, then `path`. Then implement the ability to execute commands with `execv`, then add batch mode, then redirection, and finally parallel commands.
* All of the test scripts will use batch mode and redirection, so until you've got those done, you'll have to test your shell manually.
* When you implement the `path` command, make sure you can handle both absolute and relative paths (i.e., `path tests` as well as `path /usr/bin`.
* It's tricky to get the errors down right, so just add error messages wherever it seems reasonable, then run the test scripts and modify your code until you're reporting errors exactly when you're supposed to. If you're running test `i`, you can check `tests/i.err` and `tests/i.rc` to see how many errors your shell should generate and compare to `tests-out/i.err` and `tests-out/i.rc`.
* If you run into issues with test 3 where the test expects something like `ls: cannot access ...` and your shell outputs `/bin/ls: cannot access ...` or `/usr/bin/ls: cannot access ...`, try modifying your $PATH environment variable to start with `/bin`. If that doesn't work, just modify `tests/3.err` to match the output your system gives. You can't modify your system's output without messing with the implementation of `ls` and/or `execv`, so it's okay to skip this test as long as it's working in spirit.
* I had to edit `/tests/3.pre` to use `/bin/ls` due to how it's set up on my system, in order to pass all the tests. Alternatively you can add `export PATH="/bin:$PATH"` to your `.profile` or `.bashrc` file.
### Memory Management Traps and Pitfalls
* This assignment makes it really easy to create pointers to stack variables that will no longer exist once they're out of scope, thus causing a segmentation fault. Make sure that if you set a pointer to point to a string, that string is something you allocated on the heap, and not on the stack.
* That said, if you do use a string on the stack, you can copy it into a heap-allocated string using `strcpy()`, `strncpy()`, `strcat()`, and `strncat()`.
* Only use `strcpy()` and `strcat()` for fixed-size strings and make sure the buffer you're copying into has enough space to hold the string, plus an extra character for `\0`.
* For `strncpy()` and `strncat()`, make sure `n` is large enough to fit the `\0` terminator, or add it manually.
* Watch out for use-after-frees, especially in the implementation of `path`.
* Make sure you free any strings from `getline()` and `strdup()`, but watch out for double-frees, e.g. don't free a substring of a string you already freed.
* Avoid the C library function `strtok()`; it's not thread-safe. Use `strsep()` instead.
* When you use `strsep()`, make sure you keep a copy of the original pointer to the string around so that you can free it later, because `strsep()` will modify the pointer, so if you free that later on, you'll corrupt the page table.
* After calling `strsep(&buf, delim)`, check whether `buf` is `NULL` before dereferencing it.
* General C coding practice: if you allocate memory for a data structure inside a function, you should free it in the same function. If you allocate memory in a dedicated `create_xxx` function, you should have a corresponding `destroy_xxx` function. That way, you always allocate and free memory at the same function depth, which makes it easier to avoid memory errors.
* After every call to `malloc`, `calloc`, or `realloc`, check whether the result is `NULL`.
* Use `calloc` instead of `malloc` if you're creating an array of pointers to avoid creating pointers to garbage values.
* in `update_path` I had to fix that issue where most of the tests do `path /bin /usr/bin`, but one of them did `path tests`. So i just assumed that if your path starts with a slash, it's an absolute path and you should copy it in as is; if it doesn't, it's a relative path and you should add a ./ at the beginning.

198
coursepages/ostep/README.md Normal file
View File

@ -0,0 +1,198 @@
# Operating Systems: Three Easy Pieces
Credit goes to [palladian](https://github.com/palladian1)
## Introduction
First, we should be frank: it's really hard to find a good self-contained online course on operating systems. OSTEP is the best course we've found so far. We describe below two approaches to the course, a "Base" approach which is suitable for most students, and an "Extended" approach, which is appropriate for students intending to specialize in systems programming.
The "base" approach covers all of our operating system curriculum requirements and should take about 80 hours of work.
The "extended" approach contains all of the work of the base approach and more. It involves learning very serious C and x86 assembly, and delving deep into kernel programming. It takes significantly more time (over 200 hours) and is much more challenging. For those students interested in this area of computing it is also highly rewarding.
## Base Approach
1. Read through the free online textbook Operating Systems: Three Easy Pieces
2. Complete the homework questions at the end of each chapter. (There is an associated [Github repository](https://github.com/remzi-arpacidusseau/ostep-homework) for the homeworks.)
This should take about 8 weeks, 10 hours/week. That's all you need to do!
You will need a Unix/Linux system, some basic command line tools, and a C compiler (such as GCC or Clang). On Windows, you can install Ubuntu in a virtual machine, or use WSL (Windows Subsystem for Linux). Mac OS is Unix-like, so it should be OK to use.
### Course Links
* [Book](https://pages.cs.wisc.edu/~remzi/OSTEP/)
* [Homework](https://pages.cs.wisc.edu/~remzi/OSTEP/Homework/homework.html)
* [Homework Source Code Repo](https://github.com/remzi-arpacidusseau/ostep-homework)
* [Homework Solutions](https://github.com/xxyzz/ostep-hw)
### C
**Question**: I see some C code in this book. How much C do I need to know?
**Answer**: You'll need to read and understand some C code in this book. You'll need basic understanding of arrays, pointers and print formatting. You can consult the free book [Dive into Systems: Chapter 1 and 2](https://diveintosystems.org/book/C1-C_intro/index.html). The [CS50 Manual pages](https://manual.cs50.io) are also helpful to look up functions. You shouldn't spend too much time on learning C.
The code you'll read is fairly simple and presented in short fragments. The book helps you out quite a bit by manually introducing many C APIs such as the Process API, the Thread API, and so on. You can type, compile and run the code fragments, and read the corresponding explanations. The book explains them in great detail in a conversational style that's fun to read.
You will also write a little bit of C code. Only a minority of the chapters (about 10 out of 50) ask you to write some C code (while the other chapters require you to run provided simulation code and answer questions). These are usually simple, short C programs that imitate the code that was presented in that chapter, with small modifications.
When you're ready to start the homework, start with the [reverse project](https://github.com/billmei/ostep-projects/tree/billmei/patch-1/initial-reverse) this will be a good test to see if you're ready for the rest of the projects. For the rest of the hw projects use the link under course links.
If you are getting stuck on these, please don't spend too much time on them. There is a great solution set [here](https://github.com/xxyzz/ostep-hw). There is no honor code for this, so you are free to use the solutions. If you find yourself spending too much time, feel free to read and understand the solutions instead. Your main priority should be to gain understanding of operating systems concepts, not to master C coding.
## Extended Approach
If you've chosen this option, then this is the first course in the OSSU curriculum for which you'll need to learn some prerequisites on your own before starting it, in addition to the courses that come before it in the curriculum. You might also run into some issues running the scripts for homework demos and for testing your solutions to the projects (although we hope we've solved most of those by now).
That said, if you're able to commit the time required for the prerequisites, we believe the reward is well worth the effort: this course is exciting, interesting, and quite useful for other fields of computer science and programming. One big attraction of this course is the opportunity to see a simplified but fully-functional Unix-like operating system in action and understand the concepts and design decisions that went into it as well as the low-level implementation details.
You should either watch all the lecture videos or read chapters 1 through 47 in the textbook (don't worry, the chapters are usually just a few pages long) as well as finish the projects listed below. We also strongly encourage you to do the homework exercises as they're assigned on the course website or in the book chapters; think of these like the "check-your-understanding" questions that pop up in the middle of lecture videos on sites like Coursera or edX.
### Prerequisites
This class requires a lot of experience programming in C. You should finish one of the C books listed in the [resources below](#c-1) *before* starting this course; if you try to learn C at the same time as the course material, you're likely to feel overwhelmed. If you haven't used C before, you should expect to spend a lot of time on this; it's hard to predict how long it might take for each person, but a rough estimate might be 8-10 hours per week for 3-5 weeks. You can always learn C alongside another OSSU course or even redo the exercises for other courses in C to gain practice with it.
You should also finish both parts of Nand2Tetris before starting this course. OSTEP focuses on the real-world x86 and x86_64 architectures, so you'll have to fill in some gaps in order to translate the concepts you learned in Nand2Tetris to a new architecture. You can do that with the x86 resources below, but note that they all assume you know C, so learn that first. This should take around 6-8 hours in total.
### Course Links
* [Course website](https://pages.cs.wisc.edu/~remzi/Classes/537/Spring2018/)
* [Book](https://pages.cs.wisc.edu/~remzi/OSTEP/)
* [Lecture videos](https://pages.cs.wisc.edu/~remzi/Classes/537/Spring2018/Discussion/videos.html)
* [Homework](https://pages.cs.wisc.edu/~remzi/OSTEP/Homework/homework.html)
* [Homework Source Code Repo](https://github.com/remzi-arpacidusseau/ostep-homework)
* [Homework Solutions](https://github.com/xxyzz/ostep-hw)
* [Projects](https://github.com/remzi-arpacidusseau/ostep-projects)
* [xv6](https://github.com/mit-pdos/xv6-public)
### Roadmap
This course was originally taught as CS 537 at the University of Wisconsin by the author of the OSTEP textbook, so the projects are assigned in the course according to the best times to give UWisconsin students access to on-campus resources like recitation sections and office hours. That means they don't match up perfectly with the material being covered at that time in the lectures or textbook chapters. We recommend doing the course in the following order instead.
[Reading order](Reading-order.md)
* Read chapters 1 and 2 of the OSTEP textbook and watch the first half (the introduction) of lecture 1.
* Do the `initial-utilities` project; it's intended as a litmus test for you to make sure you're comfortable enough with C before taking this class. You can watch discussion 1 for help. If it takes you more than 2 hours to write the code (not counting the discussion time and any time spent debugging), you should consider spending more time learning C before moving on in the course. (If you want more practice, you can do `initial-reverse` too, but it's not required.)
* Watch lectures 1 through 5 and read chapters 3 through 24 of the OSTEP textbook. We recommend doing the homework assignments as they come up in the course calendar or book chapters.
* Watch discussion 3 and reread chapter 5, then do the `processes-shell` project.
* Read the annotated guide to xv6 linked in the resources section below, starting from the beginning and stopping after the `System Calls: Processes` section.
* Watch discussion 2, then do the `initial-xv6` project.
* Watch discussion 5, then do the `scheduling-xv6-lottery` project.
* Watch discussion 7, then do the `vm-xv6-intro` project.
* Watch lectures 6 through 9 (and optionally, the review lecture) and read chapters 25 through 34; again, you're encouraged to do the homework.
* Watch discussion 10, then do the `concurrency-xv6-threads` project.
* Watch discussions 11 and 12, then do the `concurrency-mapreduce` project.
* Watch lectures 10 through 14 (and optionally, the second review lecture) and read chapters 35 through 47; remember to do the homework along with the lectures or chapters.
* Do the `filesystems-checker` project.
### Running the Projects
This course was originally taught as CS 537 at the University of Wisconsin by the author of the OSTEP textbook, which means that the homework and projects were written with those students as a target audience and designed to be run on UWisconsin lab computers with specific software versions pre-installed for students. We hope this section fixes that so you can run them on other computers, but we haven't tested this on every computer, so if you run into other issues, let us know on the [Discord channel](https://discord.gg/MJ9YXyV) and we'll try to help out.
In order to run the homework and projects on Linux or macOS, you'll need to have all of the following programs installed:
* `gcc`
* `gas`
* `ld`
* `gdb`
* `make`
* `objcopy`
* `objdump`
* `dd`
* `python`
* `perl`
* `gawk`
* `expect`
* `git`
You will also need to install `qemu`, but we recommend using the patched version provided by the xv6 authors; see [this link](https://pdos.csail.mit.edu/6.828/2018/tools.html) for details.
On macOS, you'll need to install a cross-compiler `gcc` suite capable of producing x86 ELF binaries; see the link above for details as well.
On Windows, you can use a Linux virtual machine for the homework and projects. Some of these packages are not yet supported on Apple M1 computers, and virtual machine software has not yet been ported to the new processor architecture; some students have used a VPS to do the homework and projects instead.
Next, clone the `ostep-homework` and `ostep-projects` repositories:
```sh
git clone https://github.com/remzi-arpacidusseau/ostep-homework/
git clone https://github.com/remzi-arpacidusseau/ostep-projects/
cd ostep-projects
```
You'll have to clone [the `xv6-public` repository](https://github.com/mit-pdos/xv6-public) into the directory for each xv6-related OSTEP project. You could use the same copy for all the projects, but we recommend using separate copies to avoid previous projects causing bugs for later ones. Run the following commands in *each* of the `initial-xv6`, `scheduling-xv6-lottery`, `vm-xv6-intro`, `concurrency-xv6-threads`, and `filesystems-checker` directories.
```sh
mkdir src
git clone https://github.com/mit-pdos/xv6-public src
```
### Hints and tips for Projects
- `initial-reverse`: the error messages that are needed to pass the tests were wrong! The provided text said `"error: ..."` but the tests expected `"reverse: ..."` so make sure to match the tests' expectations in your code.
- [hints and tips for `processes-shell`](Project-2A-processes-shell.md)
- [hints for Project 1B: `initial-xv6`](Project-1B-initial-xv6.md)
- [hints for `scheduling-xv6-lottery`](Scheduling-xv6-lottery.md)
- [hints for `vm-xv6-intro`](vm-xv6-intro.md)
### Resources
#### C
Please don't try to learn C from sites like GeeksforGeeks, TutorialsPoint, or Hackr.io (we're not even gonna link to them here). Those are great resources for other languages, but C has way too many pitfalls, and C tutorials online are often filled with dangerous errors and bad coding practices. We looked at many C resources for the recommendations below and unfortunately found *many* bad or unsafe ones; we'll only include the best ones here, so look no further!
We recommend learning C by working through (the entirety of) Jens Gustedt's *Modern C*, which is [freely available online](https://inria.hal.science/hal-02383654v2/file/modernC.pdf). This book is relatively short and will bring you up to speed on the C language itself as well as modern coding practices for it. Make sure to do all the exercises in the footnotes!
While the book above is our default recommendation, we also recommend K.N. King's [*C Programming: A Modern Approach*](http://www.knking.com/books/c2/) as a second, more beginner-friendly option. It has some disadvantages: it's much longer (almost 850 pages), it's not available for free (and copies can be hard to find), and it's not quite as recent as *Modern C* (but still relevant nonetheless). That said, it has more exercises if you want extra practice, and the Q&A sections at the end of each chapter are filled with pearls of C wisdom and answers to C FAQs. It also covers almost the entirety of the C language and standard library, so it doubles as a reference book.
CS 50 doesn't quite cover enough C for OSTEP, but if you've already taken CS 50, you can supplement it with the books above.
Additional (***optional***) resources include:
* [CS 50 Manual Pages](https://manual.cs50.io): a great reference for looking up C library functions; most functions include both the usual manual as well as a beginner-friendly "less comfortable" option (just note that the "less comfortable" version uses `string` as an alias for `char *`.)
* [cdecl](https://cdecl.org): a tool to translate C gibberish into English.
* [C track on exercism.org](https://exercism.org/tracks/C): additional practice exercises.
* [Secure Coding Practices in C and C++](https://www.amazon.com/dp/0321822137): if you want to understand why other C resources are so unsafe.
* [*The C Programming Language*](https://www.amazon.com/dp/0131103628): the original book on C by its creators. Too outdated for OSTEP, but a good read if you manage to find a copy.
#### x86 Architecture and Assembly Language
Nand2Tetris has already introduced most of the concepts you'll need to understand systems and computer architectures, so now you just need to port that knowledge to the real-world (32-bit) x86 architecture.
The easiest way to do that is by watching a subset of the lectures from the *Computer Systems: A Programmer's Perspective* course (or reading the matching chapters in the [textbook](https://www.amazon.com/dp/013409266X) of the same name). The lectures you'll need are:
* [Machine-Level Programming I: Basics](https://scs.hosted.panopto.com/Panopto/Pages/Viewer.aspx?id=6e410255-3858-4e85-89c7-812c5845d197)
* [Machine-Level Programming II: Control](https://scs.hosted.panopto.com/Panopto/Pages/Viewer.aspx?id=fc93c499-8fc9-4652-9a99-711058054afb)
* [Machine-Level Programming III: Procedures](https://scs.hosted.panopto.com/Panopto/Pages/Viewer.aspx?id=2994255f-923b-4ad4-8fb4-5def7fd802cd)
* [Machine-Level Programming IV: Data](https://scs.hosted.panopto.com/Panopto/Pages/Viewer.aspx?id=03308c94-fc20-40d8-8978-1a9b81c344ed)
* [Machine-Level Programming V: Advanced Topics](https://scs.hosted.panopto.com/Panopto/Pages/Viewer.aspx?id=3f0bf9ca-d640-4798-b91a-73aed656a10a)
* [Linking](https://scs.hosted.panopto.com/Panopto/Pages/Viewer.aspx?id=0aef84fc-a53b-49c6-bb43-14cb2b175249)
Furthermore, it is recommened to do the following labs. These labs are meant to teach you how to work with assembly:
* **Bomb Lab**: [Writeup](http://csapp.cs.cmu.edu/3e/bomblab.pdf), [self-study handout](https://csapp.cs.cmu.edu/3e/bomb.tar).
> A "binary bomb" is a program provided to students as an object code file. When run, it prompts the user to type in 6 different strings. If any of these is incorrect, the bomb "explodes," printing an error message and logging the event on a grading server. Students must "defuse" their own unique bomb by disassembling and reverse engineering the program to determine what the 6 strings should be. The lab teaches students to understand assembly language, and also forces them to learn how to use a debugger. It's also great fun. A legendary lab among the CMU undergrads.
* **Attack Lab**: [Writeup](http://csapp.cs.cmu.edu/3e/attacklab.pdf), [self-study handout](https://csapp.cs.cmu.edu/3e/target1.tar).
> Students are given a pair of unique custom-generated x86-64 binary executables, called targets, that have buffer overflow bugs. One target is vulnerable to code injection attacks. The other is vulnerable to return-oriented programming attacks. Students are asked to modify the behavior of the targets by developing exploits based on either code injection or return-oriented programming. This lab teaches the students about the stack discipline and teaches them about the danger of writing code that is vulnerable to buffer overflow attacks. **Note:** run the targets with the -q flag to prevent them from trying to contact a non-existent grading server.
Additional (***optional***) resources include:
* [CPU Registers x86](https://wiki.osdev.org/CPU_Registers_x86): good for looking up specific registers.
* [*PC Assembly Language*](https://pdos.csail.mit.edu/6.828/2018/readings/pcasm-book.pdf): a short book on x86 assembly.
* [GCC Inline Assembly HOWTO](https://www.ibiblio.org/gferg/ldp/GCC-Inline-Assembly-HOWTO.html): a guide to writing assembly code inside a C program.
* [*Intel 80386 Programmer's Reference Manual*](https://pdos.csail.mit.edu/6.828/2018/readings/i386.pdf): the official (and huge) resourcefrom Intel.
#### xv6
You don't need to read anything about xv6 until after you start OSTEP; in fact, we recommend holding off on the xv6-related projects until you've finished the entire section on virtualization. After that, you'll need a guide to walk you through the source code.
The xv6 authors provide a [book](https://pdos.csail.mit.edu/6.828/2018/xv6/book-rev11.pdf) that you can read alongside the source code. There's also a handy line-numbered [PDF version](https://pdos.csail.mit.edu/6.828/2018/xv6/xv6-rev11.pdf) of the code with an index to see exactly where each function or constant gets used.
However, that book glosses over a lot of the details in the code that you might find challenging, including the advanced C features used, the x86 architecture- specific instructions, and the concurrency aspects (if you haven't finished that section of OSTEP before starting the xv6 projects). To solve this problem, we provide an [annotated guide to xv6](https://github.com/palladian1/xv6-annotated) that goes over the entire xv6 code and analyzes it line-by-line with explanations of the C features, hardware specs, and x86 conventions used. That means it's longer than the official xv6 book, so you don't have to read all of it (and you can probably skip the optional sections unless you care about device drivers), but you can use it as a reference if you're scratching your head about some part of the code.
[Here](https://github.com/YehudaShapira/xv6-explained) is another in-depth explanation of the xv6 code.
Also [here](https://www.youtube.com/playlist?list=PLbtzT1TYeoMhTPzyTZboW_j7TPAnjv9XB) is an excellent video series walking through much of the xv6 code.
#### Miscellaneous
You'll need a general sense of how Makefiles work in order to use the Makefile for xv6. [This tutorial](https://makefiletutorial.com) covers much more than you need; just read the "Getting Started" and "Targets" sections and come back to the rest later if you need to look something up (but you shouldn't have to).
Additional (optional) resources include:
* [GCC Command Options](https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gcc/Invoking-GCC.html#Invoking-GCC): a guide to command-line flags for the GNU C compiler `gcc`.
* [Linker Scripts](https://sourceware.org/binutils/docs/ld/Scripts.html#Scripts): a guide to writing scripts for the GNU linker `ld`.
* [OSDev Wiki](https://wiki.osdev.org): a great resource for all kinds of OS concepts and implementation details.
* [*Linux Kernel Development*](https://www.amazon.com/dp/0672329468): if you want to apply your xv6 knowledge toward contributing to the Linux kernel, this is a great read after OSTEP.

View File

@ -0,0 +1,13 @@
### all thanks to [palladian](https://github.com/palladian1)
* Before starting the course: `initial-utilities` (aka, project 1a) and `initial-reverse` (not assigned in class)
* Chapter 5: `processes-shell` (project 2a)
* Chapter 6: `initial-xv6` (project 1b, but only worry about test 1)
* Chapter 9: `scheduling-xv6-lottery` (project 2b)
* Chapter 24: `vm-xv6-intro` (project 3b)
* Chapter 28: `initial-xv6` (now pass test 2)
* Chapter 29: `concurrency-xv6-threads` (project 4b)
* Chapter 30: `concurrency-mapreduce` (project 4a)
* Chapter 33: `concurrency-webserver` (not assigned in class)
* Chapter 42: `filesystems-checker` (project 5a)
* (there is no 5b, and there are no projects for chapters 43-51)

View File

@ -0,0 +1,202 @@
## all thanks to [palladian](https://github.com/palladian1)
### General Tips
* Read chapter 9 in the OSTEP book and watch the video for discussion 5. Lottery ticket schedulers aren't discussed in the lectures, so you really do have to read the book for this one.
* In general, you can't use C standard library functions inside the kernel, because the kernel has to initialize before it can execute library binaries.
* The xv6 kernel has a "kernel version" of `printf`; it takes an additional integer argument that tells it whether to print to `stdout` or `stderr`. Note that it can only handle basic format strings like `"%d"` and not more complex ones like `"%6.3g"`; you can deal with this by manually adding spaces instead. It also has another similar function, `cprintf`.
* If you do want to use other library functions that aren't available inside the kernel (pseudo random number generators), you can see how those functions are implemented in P.J. Plauger's book, The Standard C Library, and then implement them yourself.
### Implementation
* You'll have to modify the same files you did in Project 1b in order to add the two new system calls.
* In order to understand how processes are created, remember that they start in the `EMBRYO` state before they become `RUNNABLE`--you'll have to find where that happens.
* System calls always have argument type `void`, so take a look at how system calls like `kill` and `read` manage to work around that limitation and get arguments (like integers and pointers) from user space. You might have to back a few steps in the chain that executes them.
* Make sure you're including `types.h` and `defs.h` wherever you need to access code from other parts of the kernel.
* In order to create the xv6 command `ps`, look at how `cat`, `ls`, and `ln` are implemented. Make sure to modify the Makefile to include the source code for your `ps` command.
## Spoilers below!
### Solution walk through
- Start from a fresh copy of the `xv6` source code.
- `argint` and `argptr` are important functions. So `syscall`s take no arguments, but in reality, in user code you want to pass arguments to them.
- So the way you do that is the kernel will call the `syscall`, say, `sys_kill()` with no arguments, then `sys_kill` will use `argint()` to get the arguments from the call stack, then pass that to a function `kill(int pid)`.
- So you can see there's a bunch of `extern int sys_whatever` function declarations below that; that means that these functions are defined in another file and should be pulled in from there as function pointers.
- And these `sys_whatever` functions are basically just wrappers for the real `syscall`, which doesn't have the `sys_` at the beginning. So you need to add `sys_settickets` and `sys_getpinfo` to that list of function declarations.
- Then there's an array of function pointers; it's using this old-school C way of initializing arrays where you can do `int arr[] = { [0] 5, [1] 7}`.
- And the names inside the square brackets `SYS_fork`, etc. are defined as preprocessor macros in another header file `syscall.h`.
- So you need to add two more entries in the array with function pointers to `sys_settickets` and `sys_getpinfo`, and then you need to define `SYS_settickets` and `SYS_getpinfo` in the relevant header file.
- So then all these `sys_` wrapper functions are defined in `sysproc.c`.
- So there, you need to create `int sys_settickets(void)` and `int sys_getpinfo(void)`.
- The real `settickets` function will need an int argument, so you need to use `argint` there to grab it from the call stack and pass it to `settickets`; similarly, `getpinfo` will need a pointer, so you'll use `argptr`.
- Also, there's an extra condition in the if statement for `sys_settickets`; that's because you're not allowed to use a number of tickets below 1.
- So then there's some assembly code that needs to run for each of the system calls; luckily, it's just a pre-written macro, so you don't have to write any assembly. that's in `usys.S`.
- So you just add two lines at the bottom to create macros for `SYSCALL(settickets)` and `SYSCALL(getpinfo)`
- Last part for the `syscalls`: you need to declare them in a header file for user code to be able to call them. that's in `user.h`.
- So `struct pstat` will be properly defined in `pstat.h`, but you need to declare it in `user.h` as well so that user code doesn't complain when it sees it.
- Basically, any user code that uses `syscalls` or C (really, `xv6`) standard library functions will have to include `user.h`.
- So, so far, that's everything for the two system calls as far as the OS is concerned; now we just have to actually implement them with the regular functions `settickets` and `getpinfo`, then implement the scheduler and the `ps` program.
- `pstat.h` is not for the scheduler, but for the `ps` program, which will work somewhat like the Linux `ps`. `pstat.h` is just to define the `struct pstat`, but there's no `.c` file to go with it.
- So the scheduler will work by assigning 1 ticket by default to each process when it's created; then processes can set their own tickets using the `settickets` system call.
- so first we need to make sure each process tracks its own tickets, then we need to assign a default of 1 ticket when creating them, then we need to write `settickets`.
- the first part is in `proc.h`: processes are represented as a `struct proc`, so we add a new member for `int tickets`.
- the `int ticks` member is for `ps`; I'll come back to that.
- One other thing to note in `proc.h` is the `enum procstate`: you can see all the possible process states there. `EMBRYO` means it's in the process of creation; so what i did was `grep` for `EMBRYO` to find where the process was created in order to set the default tickets to 1. Turns out it's in `proc.c`.
- Inside `proc.c`, there's a function `allocproc`, which initializes a process.
- There's a process table called `ptable`, and `allocproc` looks through it to find an unused process.
- Then when it does find it, it goes to create it; i added `p->tickets = 1;` there.
- okay so the next change is to fit one of the requirements: child processes need to inherit the number of tickets from their parent process.
- So child processes are created with `fork`, which is in the same file.
- In `fork`, `curproc` is the current process, and `np` is the new process.
- So i set `np->tickets = curproc->tickets`.
- So the scheduler needs to generate a pseudo random number, then it should iterate through the process table with a counter initialized to 0, adding the number of tickets for each process to the counter. once the counter is greater than the pseudo random number, it stops and runs that process.
- So I ended up looking in P.J. Plauger's The Standard C Library, which is just a big book of all the source code for the C library with commentary. It's pretty good; I don't know if it's still written that way though because the book is from the 80s.
- So i just implemented C's `rand` and `srand` functions. `srand` sets a random seed (not so random, as you'll see later), then `rand` turns it into a pseudo random integer.
- There's a bunch of type magic going on there between changes back and forth from integers to unsigned integers; that's to avoid signed integer overflow, which causes undefined behavior. unsigned integer overflow is okay though.
- I only made one change to make it faster, which was to write `& 32767` instead of `% 32768`.
- So you'll see the "random" seed i used: the number of `ticks`, which i think counts the number of timer interrupts so far.
- Which is totally not random at all, since the first time this program gets run, it'll be 0, then 1, then 2, etc.
- So there's some lines about counting `ticks`; that was for `ps`, not the scheduler.
- The main change to make it a lottery scheduler is the counter variable.
- And adding a for loop to count the total number of tickets that have been distributed.
- So then at the very bottom of this file is the implementation of `settickets` and `getpinfo`.
- So after initializing `counter` and `totaltickets`, there's for loop that counts the total numbers of tickets that have gone out to processes.
- Then we get the winning ticket.
- Let's discuss the original source code first. So first you acquire the lock. You'll release it at the very end. But in between, you have a for loop that iterates over all the processes in `ptable`.
- Specifically, it iterates over only the processes in `RUNNABLE` state; if a process isn't `RUNNABLE`, it just `continue`s on to the next one. (This is for the round-robin scheduling mechanism that's already in the code.)
- So now it's gonna switch to the very first `RUNNABLE` process it finds. Like, switching to executing it.
- So first, `c` represents the current CPU. so it sets the current CPU to run the process it found with `c->proc = p;`.
- Then it calls this function, `switchuvm(p)`, which sets up the virtual memory address space for `p`. Then it sets the process's state to `RUNNING`.
- And then `swtch` is where the magic happens: that one swaps out the register contents of the OS and scheduler content with the saved-in-memory register contents of the process `p`.
- So as soon as `swtch` executes, the CPU will continue executing instructions, but now they're the process's instructions. So this scheduler function just hangs there.
- Eventually, when a timer interrupt goes off, the processor will use another `swtch` call but with the arguments reversed to swap the scheduler's register contents from memory into the CPU's registers and save the process's register contents. At which point execution will continue at this exact point.
- So now `switchkvm` will set up the kernel's virtual memory address space.
- These 5 lines are the context switch:
```c
c->proc = p;
switchuvm(p);
p->state = RUNNING;
swtch(&(c->scheduler), p->context);
switchkvm();
```
- So then we go on to the next iteration of the inner for loop, which finds the next `RUNNABLE` process and repeats.
- Only once we've executed all the `RUNNABLE` processes do we exit the inner for loop and release the lock.
- Original source code is structured like this (this is pseudocode):
```python
while (1) {
iterate over processes:
if not runnable:
continue
run it
```
- New code is structured like this (this is pseudocode):
```python
while (1) {
count the total tickets allotted to all processes // one for loop here
get the winning ticket number
iterate over processes: // another for loop here
if not runnable:
continue
add its tickets to counter
if counter <= winning ticket number:
continue
run it
```
- We ignore the tickets of non-RUNNABLE processes.
- So the tickets aren't numbered; each process just has a set amount of tickets, and we just count up until we've passed `n` tickets, where `n` is the winner.
- For example if proc A has 5 tickets and proc B has 7, proc C has 2. if the winning number is 3, then A would run; if it's 8, then B would run; if it's 12, then C would run.
- A winner in 0-4 would be A, 5-11 would be B, and 12-13 would be C.
- So `settickets` is pretty basic: you just acquire a lock, set the tickets for the process, release the lock.
- For `getpinfo` basically it works like this:
- `p` is a pointer a `struct pstat`, as defined in `pstat.h`. each of its members is an array, with one entry per process.
- Check for a null pointer.
- Iterate over the process table and set `proc_i` to the i-th process.
- Set the i-th entry of each member of `p` to the value for this process.
- One last bookkeeping piece: we need to add declarations for `struct pstat` and the `settickets` and `getpinfo` system calls in `defs.h`.
- And then the last file is `ps.c`, which implements the `ps` program, similar to Linux's `ps`. it just calls `getpinfo` to fill a `struct pstat`, then prints out the info for each process in use.
- And then you just modify the Makefile to include `ps.c` in the compilation, and we're done!
- Oh and this is why we needed the ticks in the scheduler: `ps` will print out how long each process has run.
- So it needs to time the number of ticks that it actually executed.
- FINALLY run `make qemu` in the `/src` directory to make sure it's all working.

View File

@ -0,0 +1,13 @@
Credit goes to [palladian](https://github.com/palladian1)
## Intro To xv6 Virtual Memory
### WARNING:
***The project doesn't match the currently available xv6 source code, which already has this project implemented in it!***
[palladian](https://github.com/palladian1) tracked down a different xv6 source from the Github page of a U of Wisconsin student. We had to edit the `Makefile` to find the QEMU executable correctly. We added `null.c` to the `user` folder (also edited `makefile.mk` there), which demonstrates the lack of memory safety.
Start with the code in [`start.zip`](https://github.com/spamegg1/reviews/raw/master/courses/OSTEP/ostep-projects/vm-xv6-intro/start.zip). Extract it and run `make clean` and `make qemu-nox`. Then inside the xv6 system run `null` to see the lack of safety! If you want to compare the results of `null` with the actual machine code, you can run `objdump -d user/null.o`.
You might have to manually run `make clean` and `make qemu-nox` every time you make a change to the code.

110
coursepages/spd/README.md Normal file
View File

@ -0,0 +1,110 @@
# Systematic Program Design
This course has been developed by UBC and is available from Edx. We recommend you to do it from the archived version on Edx.
> This programming course takes a unique approach, as it focuses on learning a systematic programming method rather than a programming language. This practical approach will help you channel your creativity so that you can program well in any language.
**Course Link (Recommended):**
- <https://learning.edx.org/course/course-v1:UBCx+SPD1x+2T2015>
- <https://learning.edx.org/course/course-v1:UBCx+SPD2x+2T2015>
- <https://learning.edx.org/course/course-v1:UBCx+SPD3x+3T2015>
Alternative Links:
- <https://www.edx.org/learn/coding/university-of-british-columbia-how-to-code-simple-data> (Up to Week 6A)
- <https://www.edx.org/learn/coding/university-of-british-columbia-how-to-code-complex-data> (Week 6B onwards)
Please see the FAQ below for explanation for different course versions.
## Instructions
**Note:** These instructions are for the archived version of the course on Edx, which we recommend. They don't apply to other versions of the course.
- The course does not have a homepage on Edx, but don't worry about it. Open the [link](https://learning.edx.org/course/course-v1:UBCx+SPD1x+2T2015) given above, log in (if you are not logged in) and then enroll in the course.
- Work through Week 1A to Week 6A as given in the course overview. Watch the videos, do the exercises, and then solve the problems from the problem bank.
- After you complete, Week 6A, do the [space invaders problem](https://github.com/ossu/spd-starters/blob/main/final/space-invaders-starter.rkt). You can find further instructions here: [Space Invaders Instructions](space-invaders-instructions.png). You can watch a sample run of the game [here](https://www.youtube.com/shorts/wUg3psZl7vM).
- Then, work through Week 6B onwards. Watch the videos, do the exercises, and then solve the problems from the problem bank.
- After that, watch the extra videos in [this playlist](https://www.youtube.com/playlist?list=PL6NenTZG6KrqdcyTwGf09uBxjI5pbXuT7).
- After you complete all the modules in the course, do the [TA solver problem](https://github.com/ossu/spd-starters/blob/main/final/ta-solver-starter.rkt). You will find the instructions in the starter file.
- The problem bank tab has many additional problems. We suggest you to solve all of them to boost your understanding.
- Some links to starter files in the course are no longer working. You can download the starter files from this github repository: <https://github.com/ossu/spd-starters>. You can download a zip file of all the starter files using [this link](https://github.com/ossu/spd-starters/archive/refs/heads/main.zip).
- You won't be able to submit your responses for the exercises, but you can see their answers by clicking on "Show Answer". Check your answers honestly.
- You won't be able to submit the problem bank problems, but they provide sample solutions. You can match your solution with it.
- While there are ways to do this course in other IDEs, we suggest you to use Dr. Racket, as configuring the problem starter files for other IDEs is not worth the effort.
- If you are stuck somewhere, feel free to ask questions. You can join the OSSU chat for this course here:
- Chat for discussions up to Week 6A: <https://discord.gg/RfqAmGJ>
- Chat for discussions from Week 6B onwards: <https://discord.gg/kczJzpm>
## Notes
- Dr. Racket defaults to using the newer notation `#true #false '()`. You can configure Dr. Racket to use the notation used by the course by clicking in menu bar on Language > Choose Language. Then choose the required language (BSL, ISL or other variants). Then click on "Show details" in the bottom left of the window. Then choose `true false empty` in "Constant Style" field. Run your file again to make sure it uses the new configuration.
<img src="change-dr-racket-notation.png" width="600" alt="The language choosing dialog of Dr. Racket" />
- You can enable automatic closing of parentheses, brackets, and quotes. Click on Edit in the Menu Bar > Preferences > Go to Editing Tab > Go to General Editing Sub-tab > Check the "Enable automatic parentheses, square brackets, and quotes" checkbox.
<img src="automatic-parentheses.png" width="600" alt="Enable automatic closing of parentheses" />
- You can use Ctrl + I to reindent the whole file.
- If you are on Windows or Linux, use Alt + Backspace to delete whole words.
- If you are unable to watch the videos on Edx for some reason, you can watch them on [this youtube channel](https://www.youtube.com/@systematicprogramdesign7962/playlists).
## FAQ
### This course is boring. Can I skip it?
**No.** This course may seem boring at first, but we suggest working though it. This is a great course, and it will probably change the way you think. Many students who found this course boring at first became a fan of the course by the time they completed it. Be very careful. The early parts (especially the rules about how evaluation works) plays a huge role in understanding how code works and gets executed for the rest of the course.
### Why is this course taught using BSL? Would it not make more sense to teach it in an industry standard language?
This is an intentional choice, and here's why:
1. Lisp is the lingua franca of computer scientists -- by which we mean, PhD algorithm researchers. There are some good and some merely historical reasons for this, but it's a fact of life, so if you want to read white papers you're going to want to read Lisp. BSL is a good introduction, and frankly once you get over the parenthesis hell and once you know any Lisp you know how to read them all.
2. This is the first computer science course in most people's curricula that isn't centered around teaching you how to use a language. Because the point of computer science isn't to teach you a language. Or to teach you to code. Or to teach you to be a fullstack software engineer. Computer Science is a very narrowly-applied applied math with wide-ranging practical usage. But if you strip away all the qualifying language, it's math. Which means it has certain overarching rules that are completely, totally independent of your implementation language.
This course is built in a throwaway student language, specifically so you don't focus on the language and instead focus on what you're doing with the language. We don't care about public static void main or PEP8 style. We want to see ways to structure a program in any language. So we focus not on the things that make Java unique, and not on the things that make Python unique, and instead focus on the things that make code better.
It might seem rough to learn a new language just to take this course, but BSL frees you from having to worry about style linting or runtime issues or code compartmentalization or compiling or coding environment. It's a gift. Take it. The design patterns are hard enough.
### Why there are different course versions, HTC, SPD? Why do you recommend the archived version?
There are two reasons people do these courses:
- The Knowledge
- The Certificate
OSSU assumes you're in it for the knowledge. You can have that for free. If you're doing it for the knowledge you don't need to submit your homework. You just need to do the homework.
If you want the recognition that you've done the thing, then you're in it for the certificate. You can't have the certificate for free. You have to pay for that.
There's no reason for you to submit homework sets unless you're doing it for the certificate -- If you're doing that, you can't actually get a certificate from the SPD course (because the course is expired) so you're in the wrong place.
If you want a certificate, then you need to take How To Code and you need to pay for it.
But you don't need to pay for anything in OSSU. We suggest you take SPD because the access to the information is better (because the course is expired) and it's more than sufficient for obtaining the knowledge.
TL;DR:
If you're in it for the knowledge, take SPD -- it's free but inactive
If you're in it for the certificate, take and pay for How To Code -- it's still an active course
### Can I do this course in another programming language?
This course has really integrated with the programming languages it uses. We suggest you to use the language specified by the course. While, the concepts you learn from this course are applicable anywhere, trying to do the course with another language is not really sensible, and would just lead to wastage of time.
### Can I use another IDE? I don't like Dr. Racket.
The programs in this course embed pictures and rich-text blocks in the code, which means, the files cannot be opened by other IDEs. While it is possible to prepare the starter files for use with other IDEs, you need Dr. Racket for that, and the time needed to do that can be better utilized in learning the concepts taught by the course.
### How do I test functions which are supposed to output random values?
You can use `check-random` to test those functions. You can [learn more about it here](https://docs.racket-lang.org/htdp-langs/beginner-abbr.html#(form._((lib._lang%2Fhtdp-beginner-abbr..rkt)._check-random))). It is needed for the Space Invaders project.
## Credits
The problem starter files and the space invaders instructions were taken from the course ["Systematic Program Design" on Edx](https://learning.edx.org/course/course-v1:UBCx+SPD1x+2T2015), licensed under [CC BY-NC-SA](https://creativecommons.org/licenses/by-nc-sa/4.0/) license.

Binary file not shown.

After

Width:  |  Height:  |  Size: 74 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 104 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 125 KiB

View File

@ -8,35 +8,54 @@ or that there was an alternative that fit better into the curriculum.
Courses | Duration | Effort
:-- | :--: | :--:
[Introduction to Computational Thinking and Data Science](https://www.edx.org/course/introduction-computational-thinking-data-mitx-6-00-2x-2#!)| 10 weeks | 15 hours/week
[Introduction to Computational Thinking and Data Science](https://www.edx.org/learn/computer-science/massachusetts-institute-of-technology-introduction-to-computational-thinking-and-data-science#!)([alt](https://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-0002-introduction-to-computational-thinking-and-data-science-fall-2016/))| 10 weeks | 15 hours/week
[Introduction to Computer Science - CS50](https://www.edx.org/learn/computer-science/harvard-university-cs50-s-introduction-to-computer-science#!) ([alt](https://cs50.harvard.edu/x/)) | 12 weeks | 10-20 hours/week
[Introduction to Computer Science (Udacity)](https://www.udacity.com/course/intro-to-computer-science--cs101)| 7 weeks | 10-20 hours/week
[An Introduction to Interactive Programming in Python (Part 1)](https://www.coursera.org/learn/interactive-python-1)| 5 weeks | -
[An Introduction to Interactive Programming in Python (Part 2)](https://www.coursera.org/learn/interactive-python-2)| - | -
[Programming Basics](https://www.edx.org/course/programming-basics-iitbombayx-cs101-1x)| 9 weeks | 8 hours/week
[Object-Oriented Programming](https://www.edx.org/course/object-oriented-programming-iitbombayx-cs101-2x)| 4 weeks | 8 hours/week
[Computing In Python, Part I: Fundamentals and Procedural Programming](https://www.edx.org/learn/python/the-georgia-institute-of-technology-computing-in-python-i-fundamentals-and-procedural-programming) | 5 weeks | 10 hours/week
[Computing In Python, Part II: Control Structures](https://www.edx.org/learn/python/the-georgia-institute-of-technology-computing-in-python-ii-control-structures) | 5 weeks | 10 hours/week
[Computing In Python, Part III: Data Structures](https://www.edx.org/learn/python/the-georgia-institute-of-technology-computing-in-python-iii-data-structures) | 5 weeks | 10 hours/week
[Computing In Python, Part IV: Objects & Algorithms](https://www.edx.org/learn/python/the-georgia-institute-of-technology-computing-in-python-iv-objects-algorithms) | 5 weeks | 10 hours/week
[Programming Basics](https://www.edx.org/learn/computer-programming/iitbombay-programming-basics)| 9 weeks | 8 hours/week
[Object-Oriented Programming with Java](https://java-programming.mooc.fi/)| 14 weeks | 10 hours/week
[Introduction to Programming with MATLAB](https://www.coursera.org/learn/matlab)| - | -
[Introduction to Functional Programming](https://www.edx.org/course/introduction-functional-programming-delftx-fp101x-0)| 7 weeks | 4-6 hours/week
[The Structure and Interpretation of Computer Programs](http://cs61a.org/) | - | -
[Introduction to Functional Programming](https://www.edx.org/learn/computer-programming/delft-university-of-technology-introduction-to-functional-programming)| 7 weeks | 4-6 hours/week <!-- currently 404's as of 2025-06-23 but redirects and search results on edx point to this URL -->
[The Structure and Interpretation of Computer Programs (2022, Python)](http://cs61a.org/) | - | -
[The Structure and Interpretation of Computer Programs (2011, Scheme)](https://romanbird.github.io/sicp/) | - | -
[Introduction to Haskell](https://www.seas.upenn.edu/~cis194/fall16/) | 14 weeks | 4 hours/week
## Math
Courses | Duration | Effort
:-- | :--: | :--:
[Effective Thinking Through Mathematics](https://www.edx.org/course/effective-thinking-through-mathematics-utaustinx-ut-9-01x-0) | 4 weeks | 2 hours/week
[Effective Thinking Through Mathematics](https://www.edx.org/learn/math/the-university-of-texas-at-austin-effective-thinking-through-mathematics-2) | 4 weeks | 2 hours/week
[Introduction to Mathematical Thinking](https://www.coursera.org/learn/mathematical-thinking) | 10 weeks | 10 hours/week
[High School Math](https://www.khanacademy.org/math/high-school-math) | - | -
[Precalculus](https://www.futurelearn.com/courses/precalculus) | 5 weeks | 6 hours/week
[Advanced Precalculus](https://www.futurelearn.com/courses/advanced-precalculus) | 4 weeks | 5 hours/week
[Calculus Applied!](https://www.edx.org/learn/calculus/harvard-university-calculus-applied) | 10 Weeks | 6hours/week
[Introduction to Probability and Data](https://www.coursera.org/learn/probability-intro)| - | -
[Linear Algebra (Strang)](https://ocw.mit.edu/courses/mathematics/18-06-linear-algebra-spring-2010/index.htm) | - | -
[Introduction to Computational Thinking](https://computationalthinking.mit.edu/Spring21/#introduction_to_computational_thinking) | - | -
[Multivariable Calculus](https://ocw.mit.edu/courses/mathematics/18-02sc-multivariable-calculus-fall-2010/index.htm) | 13 weeks | 12 hours/week
[Introduction to Probability - The Science of Uncertainty](https://www.edx.org/learn/probability/massachusetts-institute-of-technology-probability-the-science-of-uncertainty-and-data) | 18 weeks | 12 hours/week
[Matrix Methods In Data Analysis, Signal Processing, And Machine Learning](https://ocw.mit.edu/courses/18-065-matrix-methods-in-data-analysis-signal-processing-and-machine-learning-spring-2018/) | - | -
## Systems
Courses | Duration | Effort
:-- | :--: | :--:
[Cloud Computing / Distributed Programming](https://www.coursera.org/learn/cloud-computing) | 5 weeks | 5-10 hours/week
[Introduction to Parallel Programming](https://www.udacity.com/course/--cs344) ([alt](https://www.youtube.com/playlist?list=PLGvfHSgImk4aweyWlhBXNF6XISY3um82_)) ([HW](https://colab.research.google.com/github/depctg/udacity-cs344-colab))| 12 weeks | 8-10 hours/week
[Intro to Computer Systems](http://www.cs.cmu.edu/afs/cs.cmu.edu/academic/class/15213-f15/www/) ([Labs](http://csapp.cs.cmu.edu/3e/labs.html)) | 15 weeks | 12 hours/week
[Great Ideas in Computer Architecture (Machine Structures)](https://web.archive.org/web/20190919235114/https://inst.eecs.berkeley.edu/~cs61c/fa14/) ([Lectures](https://archive.org/details/ucberkeley_webcast_itunesu_915550404)) | 15 weeks | 12 hours/week
[Computer Architecture](https://www.coursera.org/learn/comparch) | - | 5-8 hours/week
[Operating System Engineering](http://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-828-operating-system-engineering-fall-2012/) | - | -
[Introduction to Operating Systems](https://www.udacity.com/course/introduction-to-operating-systems--ud923)| 8 weeks | 5-8 hours/week
[Advanced Operating Systems](https://www.udacity.com/course/advanced-operating-systems--ud189)| 5 weeks | 5-8 hours/week
[Computer Networking](https://www.udacity.com/course/computer-networking--ud436) | 12 weeks | 5-8 hours/week
[Introduction to Operating Systems](https://www.udacity.com/course/operating-systems--ud923)| 8 weeks | 5-8 hours/week
[Advanced Operating Systems](https://www.udacity.com/course/ai-deep-learning--ud189)| 5 weeks | 5-8 hours/week
[Networking for Web Developers](https://www.udacity.com/course/computer-networking--ud436) | 12 weeks | 5-8 hours/week
Distributed Systems - [Playlist](https://www.youtube.com/playlist?list=PLrw6a1wE39_tb2fErI4-WkMbsvGQk9_UB), [Course site](http://nil.csail.mit.edu/6.824/2020/schedule.html), [Self-studying 6.824](https://lieuzhenghong.com/mit_6.824_self_study/) [6.824 Discord group for further help](https://discord.gg/KbhkEqpBqC) | - | -
## Theory
@ -53,23 +72,31 @@ Courses | Duration | Effort
[Statistical Mechanics: Algorithms and Computations](https://www.coursera.org/learn/statistical-mechanics/) | - | -
[Approximation Algorithms Part I](https://www.coursera.org/learn/approximation-algorithms-part-1/) | - | -
[Approximation Algorithms Part II](https://www.coursera.org/learn/approximation-algorithms-part-2/) | - | -
[Design And Analysis Of Algorithms](https://ocw.mit.edu/courses/6-046j-design-and-analysis-of-algorithms-spring-2015/) | - | -
## Applications
Courses | Duration | Effort
:-- | :--: | :--:
[Using Databases with Python](https://www.coursera.org/learn/python-databases) | 5 weeks | 2-3 hours/week
[Database Systems](https://scs.hosted.panopto.com/Panopto/Pages/Sessions/List.aspx#folderID=%22ed2ee867-9610-4bad-94af-5d12c2ea47cd%22) | - | 27 hours
[Database Systems](https://15721.courses.cs.cmu.edu/spring2016/) | 15 weeks | 12 hours/week
[Database Management Essentials](https://www.coursera.org/learn/database-management) | 7 weeks | 4-6 hours/week
[Intro to Artificial Intelligence](https://www.udacity.com/course/intro-to-artificial-intelligence--cs271)| 16 weeks | 6-10 hours/week
[Intro to Machine Learning](https://www.udacity.com/course/intro-to-machine-learning--ud120)| 10 weeks | 6-10 hours/week
[Machine Learning for Data Science and Analytics](https://www.edx.org/course/machine-learning-data-science-analytics-columbiax-ds102x-0)| 5 weeks | 7-10 hours/week
[Processing Big Data with Azure HDInsight](https://www.edx.org/course/processing-big-data-azure-hdinsight-microsoft-dat202-1x-0)| 5 weeks | 3-4 hours/week
[Big Data Science with the BD2K-LINCS Data Coordination and Integration Center](https://www.coursera.org/course/bd2klincs)| 7 weeks | 4-5 hours/week
## Tools
Courses | Duration | Effort
:-- | :--: | :--:
[How to Use Git and GitHub](https://www.udacity.com/blog/2015/06/a-beginners-git-github-tutorial.html) | 3 weeks | 2-3 hours/week
[Kubernetes Certified Application Developer](https://www.udemy.com/course/certified-kubernetes-application-developer/) | 5 weeks | 2 hours/week
# Online Learning - Great Courses
Courses | Duration | Effort
:-- | :--: | :--:
[Learning How to Learn](https://www.coursera.org/learn/learning-how-to-learn) | 4 weeks | 2 hours/week
[Mindshift](https://www.coursera.org/learn/mindshift) | 4 weeks | 2 hours/week
[Powersearching with Google](https://www.edx.org/learn/google-power-searching/google-power-searching-with-google) | 3 weeks | 4-6 hours/week

13
extras/other_curricula.md Normal file
View File

@ -0,0 +1,13 @@
# Other curricula
OSSU is one of a few efforts to inform learners how they can pursue computer science independently. Below are a few other such efforts.
- [Google - Guide for Technical Development](https://www.google.com/about/careers/students/guide-to-technical-development.html)
- [Teach Yourself Computer Science](https://teachyourselfcs.com/)
- [Obtaining a Thorough CS Background Online](http://spin.atomicobject.com/2015/05/15/obtaining-thorough-cs-background-online/)
- [P1xt](https://github.com/P1xt/p1xt-guides)
- [Functional CS](https://functionalcs.github.io/curriculum/)
What differentiates OSSU? OSSU is dedicated to how an individual can learn the undergraduate CS curriculum. This is why we use the [CS2013](../CURRICULAR_GUIDELINES.md) as our curricular guidelines. These guidelines are written by the two foremost professional organizations in computing.
This approach has the benefit of clarifying to others the extent of a student's study and understanding. Students have gone from OSSU study into both tech industry employment and into Computer Science graduate school. We look forward to helping you do the same.

View File

@ -0,0 +1,49 @@
# Computer Science - Puzzles, Practice and Plods
**Some OSSUnians value sites that allow them to practice coding problems disconnected from a course.**
> Solving "textbook" problems is easy because we've been prepped for them by the course. Solving a "real world" example is much more difficult because there is no hand-holding.
[link](https://github.com/ossu/computer-science/issues/783#issuecomment-694187743)
> So give us a problem where the parameters are laid out in x,y fashion, and we'll be able to code for it. But confront us with another problem, and it might stump us since we're still not practiced with thinking algorithmically or what have you.
[link](https://github.com/ossu/computer-science/issues/783#issuecomment-694176898)
**Others feel that its important not to get distracted by anxieties and puzzles.**
> Consider this a love letter to all the beginners out there.
> I think that when you are still in the beginner stages, it FEELS like you do not have enough competence to contributing to a project.
It FEELS like taking classes, doing programming assignments etc. are not good enough in your eyes to be considered worthy of a "project".
They feel too small and insignificant. You're not quite satisfied.
(Part of the reason might be that early stuff is too easy for you, and you haven't taken a course that kicked your ass and wiped the floor with you yet.)
Since this is online learning and there is nobody/nothing holding you back, the natural tendency is to spread wide and try to do many things all at once, get distracted.
I'VE BEEN THERE, trust me.
And naturally you are in a rush to become competent as fast as possible.
You keep thinking, "when will I be ready to do something BIG?" And you don't want to wait.
Similar to how children always seem like they are in a hurry to grow up and start imitating adults.
The dissatisfaction and the impatience make for an uncomfortable combination.
Let's call this: beginner's mind.
> The fact is, you have to be patient.
I would argue that early on in your studies, arguably, is NOT when it is most critical for you to contribute to a project...
> I would recommend the slow, steady and patient approach of OSSU over the distracted, all over the place style of learning lots of others use, with various uncoordinated resources on the internet.
Looking for a project? How about THE NEXT COURSE?
> So I think that the problem is not really a problem, but a need to adjust expectations.
I would recommend a shift in thinking, away from beginner's mind.
Think long term, so that those small, insignificant exercises and programming assignments in each course should feel like they are crucial parts of your biggest, long-term project: YOU
[link](https://github.com/ossu/computer-science/issues/783#issuecomment-690023645)
So OSSUnian, read the above and then consider how much time you wish to put into these resources:
- [Exercism](https://exercism.io/)
- [LeetCode](https://leetcode.com/)
- [HackerRank](https://www.hackerrank.com/)
- [CodeWars](https://www.codewars.com/)
- [100+ Python Coding Problems with Solutions](https://github.com/ProgrammingHero1/100-plus-python-coding-problems-with-solutions)
- [Rosalind](http://rosalind.info/problems/locations/)
- [Advent of Code](https://adventofcode.com/)
- [GitHub projects for beginners](https://github.com/MunGell/awesome-for-beginners) - Projects that are specifically geared towards beginners to GitHub. Possibly intermediate to advanced coding issues to be solved.

View File

@ -11,63 +11,92 @@ Or, if you are struggling in one of the courses, perhaps reading a book on the s
Name | Author(s)
:-- | :--:
[Introduction to Computation and Programming Using Python](https://www.amazon.com/Introduction-Computation-Programming-Using-Python/dp/0262525003/) | John V. Guttag
[Introduction to Computation and Programming Using Python 3e](https://mitpress.mit.edu/books/introduction-computation-and-programming-using-python-third-edition) | John V. Guttag
[Think Python 2e](http://greenteapress.com/wp/think-python-2e/) | Allen B. Downey
[How to Design Programs](http://www.ccs.neu.edu/home/matthias/HtDP2e/) | Matthias Felleisen, Robert Bruce Findler, Matthew Flatt, Shriram Krishnamurthi
[Structure and Interpretation of Computer Programs](https://mitpress.mit.edu/sicp/full-text/book/book.html) | Hal Abelson, Jerry Sussman, Julie Sussman
[How to Design Programs 2e](https://www.htdp.org/) | Matthias Felleisen, Robert Bruce Findler, Matthew Flatt, Shriram Krishnamurthi
[Structure and Interpretation of Computer Programs 2e](https://mitpress.mit.edu/sites/default/files/sicp/full-text/book/book.html) | Hal Abelson, Jerry Sussman, Julie Sussman
[The Structure and Interpretation of Computer Programs (2021, JavaScript)](https://sourceacademy.org/sicpjs/index) | Harold Abelson, Gerald Jay Sussman, Julie Sussman, Martin Henz, Tobias Wrigstad and Samuel Fang
[Concepts, Techniques, and Models of Computer Programming](https://www.amazon.com/gp/product/0262220695) | Peter Van Roy, Seif Haridi
[Design Patterns: Elements of Reusable Object-Oriented Software](https://www.amazon.com/Design-Patterns-Elements-Reusable-Object-Oriented/dp/0201633612) | Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides
[Refactoring](https://www.refactoring.com/) | Martin Fowler
[Clean Code](https://www.amazon.com/Clean-Code-Handbook-Software-Craftsmanship/dp/0132350882) | Robert Martin
[Code Complete 2e](https://www.amazon.com/Code-Complete-Practical-Handbook-Construction/dp/0735619670) | Steve McConnell
[The Pragmatic Programmer](https://www.amazon.com/Pragmatic-Programmer-Journeyman-Master/dp/020161622X) | Andrew Hunt, David Thomas
[The Pragmatic Programmer 2e](https://pragprog.com/titles/tpp20/the-pragmatic-programmer-20th-anniversary-edition/) | Andrew Hunt, David Thomas
[Programming Languages: Application and Interpretation](http://cs.brown.edu/~sk/Publications/Books/ProgLangs/) | Shriram Krishnamurthi
[Programming and Programming Languages](http://papl.cs.brown.edu/2016/) | Shriram Krishnamurthi, Benjamin S. Lerner, Joe Gibbs Politz
[Programming and Programming Languages](https://papl.cs.brown.edu/2018/) | Shriram Krishnamurthi, Benjamin S. Lerner, Joe Gibbs Politz
[Competitive Programming](https://cpbook.net/) | Steven Halim, Felix Halim
[Introduction to computing in Java](https://introcs.cs.princeton.edu/java/home/) | Robert Sedgewick, Kevin Wayne
## Math
Name | Author(s)
:-- | :--:
[Calculus Made Easy](http://www.gutenberg.org/ebooks/33283) | Silvanus P. Thompson
[Calculus Made Easy](http://www.gutenberg.org/ebooks/33283) | Silvanus P. Thompson
[Ximera: Interactive Calculus Textbooks](https://ximera.osu.edu/) | [Ximera team](https://ximera.osu.edu/about/team)
[Discrete Mathematics with Applications (4th Edition)](http://www.amazon.com/Discrete-Mathematics-Applications-Susanna-Epp/dp/0495391328/) | Susanna S. Epp
[Discrete Mathematics: An Open Introduction](https://discrete.openmathbooks.org/dmoi4/frontmatter.html) | Oscar Levin
[Applied Discrete Structures](http://faculty.uml.edu/klevasseur/ads2/) | Alan Doerr, Ken Levasseur
[Grinstead and Snells Introduction to Probability](https://math.dartmouth.edu/~prob/prob/prob.pdf) |Charles M. Grinstead, J. Laurie Snell
[Introduction to Linear Algebra](https://www.amazon.com/Introduction-Linear-Algebra-Gilbert-Strang/dp/0980232775/) | Gilbert Strang
[Grinstead and Snells Introduction to Probability](https://math.dartmouth.edu/~prob/prob/prob.pdf) | Charles M. Grinstead, J. Laurie Snell
[Linear Algebra for Everyone](https://math.mit.edu/~gs/everyone/) | Gilbert Strang
[The Art of Linear Algebra](https://github.com/kenjihiranabe/The-Art-of-Linear-Algebra) | Kenji Hiranabe, Gilbert Strang
## Systems
Name | Author(s)
:-- | :--:
[But How Do It Know?](http://www.buthowdoitknow.com/) | J. Clark Scott
[Computer Systems: A Programmer's Perspective (3rd Edition)](http://csapp.cs.cmu.edu/) | Randal E. Bryant, David R. O'Hallaron
[Modern Operating Systems (4th Edition)](http://www.amazon.com/Modern-Operating-Systems-Andrew-Tanenbaum/dp/013359162X/) | Andrew S. Tanenbaum, Herbert Bos
[Computer Organization and Design: The Hardware/Software Interface](https://www.amazon.com/gp/product/0124077269) | David Patternson, John Hennessy
[Computer Organization and Design: The Hardware/Software Interface (6th Edition)](https://www.amazon.com/Computer-Organization-Design-MIPS-Architecture/dp/0128201096/) | David Patternson, John Hennessy
[Computer Networks (5th Edition)](http://www.amazon.com/Computer-Networks-5th-Andrew-Tanenbaum/dp/0132126958/) | Andrew S. Tanenbaum, David J. Wetherall
[Computer Networking: A Top-Down Approach (6th Edition)](https://www.amazon.com/Computer-Networking-A-Top-Down-Approach/dp/1292153598/) | James F Kurose, Keith W Ross
[Computer Networking: A Top-Down Approach (8th Edition)](https://gaia.cs.umass.edu/kurose_ross/index.html) | James F Kurose, Keith W Ross
[Computer Networks: A Systems Approach](https://book.systemsapproach.org/) | Larry Peterson and Bruce Davie
[Distributed Systems: Principles and Paradigms](https://www.amazon.com/Distributed-Systems-Principles-Andrew-Tanenbaum/dp/153028175X) | Andrew Tanenbaum
[Operating Systems Design and Implementation](https://www.amazon.com/Operating-Systems-Design-Implementation-3rd/dp/0131429388) | Andrew S. Tanenbaum, Albert S. Woodhull
[Crafting Interpreters](https://www.craftinginterpreters.com/contents.html) | Robert Nystrom
[Principles of Compiler Design](https://www.amazon.com/Principles-Compiler-Addison-Wesley-information-processing/dp/0201000229) | Alfred Aho, Jeffrey Ullman
[Distributed Systems Reading Group](http://dsrg.pdos.csail.mit.edu/papers/) | Various
[System Design: Design large-scale systems](https://github.com/donnemartin/system-design-primer) | Various
[Code: The Hidden Language of Computer Hardware and Software](https://codehiddenlanguage.com/Chapter00/) | Charles Petzold
## Theory
Name | Author(s)
:-- | :--:
[Introduction to Computing: Explorations in Language, Logic, and Machines](http://www.computingbook.org/) | David Evans
[Introduction to the Theory of Computation (3rd Edition)](https://www.amazon.com/Introduction-Theory-Computation-Michael-Sipser/dp/113318779X) | Michael Sipser
[Introduction to Algorithms (3rd Edition)](http://www.amazon.com/Introduction-Algorithms-3rd-MIT-Press/dp/0262033844/) | Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest, Clifford Stein
[The Algorithm Design Manual](https://www.amazon.com/gp/product/1848000693) | Steven Skiena
[The Algorithm Design Manual (3rd Edition)](https://www.algorist.com/) | Steven Skiena
[Algorithms (4th Edition)](https://algs4.cs.princeton.edu/home/) | Robert Sedgewick
[Algorithms Illuminated](https://algorithmsilluminated.org/) | Tim Roughgarden
[Category Theory: A Gentle Introduction](http://www.logicmatters.net/resources/pdfs/GentleIntro.pdf) | Peter Smith
[Category Theory for Programmers: The Preface](https://bartoszmilewski.com/2014/10/28/category-theory-for-programmers-the-preface/) | Bartosz Milewski
[An Introduction to Information Retrieval](https://nlp.stanford.edu/IR-book/pdf/irbookonlinereading.pdf) | Christopher D. Manning, Prabhakar Raghavan, Hinrich Schütze
[Computer Science: An interdisciplinary approach](https://introcs.cs.princeton.edu/java/cs/) | Robert Sedgewick, Kevin Wayne
[DSA CS3: Data Structures & Algorithms](https://opendsa-server.cs.vt.edu/OpenDSA/Books/CS3/html/) ([Coursenotes](https://opendsa-server.cs.vt.edu/OpenDSA/Books/CS3notes/html/) - [Slides](https://opendsa-server.cs.vt.edu/OpenDSA/Books/CS3slides/html/)) | The OpenDSA Project (supported by National Science Foundation)
## Applications
Name | Author(s)
:-- | :--:
[Architecture of a Database System](http://db.cs.berkeley.edu/papers/fntdb07-architecture.pdf) | Joseph M. Hellerstein, Michael Stonebraker, James Hamilton
[Readings in Database Systems](http://www.redbook.io/) | Peter Bailis, Joseph M. Hellerstein, Michael Stonebraker, editors
[Database Management Systems](https://www.amazon.com/gp/product/0072465638) | Raghu Ramakrishnan, Johannes Gehrke
[Readings in Database Systems (5th Edition)](http://www.redbook.io/) | Peter Bailis, Joseph M. Hellerstein, Michael Stonebraker, editors
[Database Management Systems (3rd Edition)](https://www.amazon.com/gp/product/0072465638) | Raghu Ramakrishnan, Johannes Gehrke
[Transaction Processing: Concepts and Techniques](https://www.amazon.com/Transaction-Processing-Concepts-Techniques-Management/dp/1558601902) | Jim Gray, Andreas Reuter
[Data and Reality: A Timeless Perspective on Perceiving and Managing Information in Our Imprecise World](https://www.amazon.com/Data-Reality-Perspective-Perceiving-Information/dp/1935504215) | William Kent
[Data and Reality: A Timeless Perspective on Perceiving and Managing Information in Our Imprecise World (3rd Edition)](https://www.amazon.com/Data-Reality-Perspective-Perceiving-Information/dp/1935504215) | William Kent
[The Architecture of Open Source Applications](http://aosabook.org/en/) | Michael DiBernardo (editor)
[An Introduction to Statistical Learning](https://www-bcf.usc.edu/~gareth/ISL/) | Gareth James, Daniela Witten, Trevor Hastie and Robert Tibshirani
[Deep Learning](http://www.deeplearningbook.org/) | Ian Goodfellow, Yoshua Bengio and Aaron Courville
[Bayesian Reasoning and Machine Learning](http://web4.cs.ucl.ac.uk/staff/D.Barber/pmwiki/pmwiki.php?n=Brml.HomePage) | David Barber
[Language Implementation Patterns](https://www.amazon.com/gp/product/193435645X) | Terence Parr
[Compilers: Principles, Techniques, and Tools (2nd Edition)](http://www.amazon.com/Compilers-Principles-Techniques-Tools-2nd/dp/0321486811/) | Alfred V. Aho, Monica S. Lam, Ravi Sethi, Jeffrey D. Ullman
[Compiler Construction](http://www.ethoberon.ethz.ch/WirthPubl/CBEAll.pdf) | Niklaus Wirth
[Compiler Construction](https://inf.ethz.ch/personal/wirth/CompilerConstruction/index.html) | Niklaus Wirth
[The Mythical Man-Month](https://www.amazon.com/Mythical-Man-Month-Software-Engineering-Anniversary/dp/0201835959/) | Fred Brooks, Jr.
[Physically Based Rendering: From Theory To Implementation](http://www.pbr-book.org/) | Matt Pharr, Wenzel Jakob, and Greg Humphreys
## Tools
Name | Author(s)
:-- | :--:
[The Linux Command Line](https://linuxcommand.org/tlcl.php) | by William Shotts

BIN
images/favicon-96x96.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

BIN
images/favicon.ico Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

17
images/favicon.svg Normal file

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 133 KiB

BIN
images/keep-learning.webp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

BIN
images/ossu-logo.webp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB