forked from prakhar1989/awesome-courses
-
Notifications
You must be signed in to change notification settings - Fork 2
/
index.html
2112 lines (1865 loc) · 238 KB
/
index.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
<!DOCTYPE html>
<html>
<head>
<meta charset='utf-8'>
<meta http-equiv="X-UA-Compatible" content="chrome=1">
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
<link href='https://fonts.googleapis.com/css?family=Architects+Daughter' rel='stylesheet' type='text/css'>
<link rel="stylesheet" type="text/css" href="stylesheets/stylesheet.css" media="screen">
<link rel="stylesheet" type="text/css" href="stylesheets/github-light.css" media="screen">
<link rel="stylesheet" type="text/css" href="stylesheets/print.css" media="print">
<!--[if lt IE 9]>
<script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
<![endif]-->
<title>Awesome-courses by prakhar1989</title>
</head>
<body>
<header>
<div class="inner">
<h1>Awesome-courses</h1>
<h2>:books: List of awesome university courses for learning Computer Science!</h2>
<a href="https://github.com/prakhar1989/awesome-courses" class="button"><small>View project on</small> GitHub</a>
</div>
</header>
<div id="content-wrapper">
<div class="inner clearfix">
<section id="main-content">
<h1>
<a id="awesome-courses-" class="anchor" href="#awesome-courses-" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>Awesome Courses <a href="https://github.com/sindresorhus/awesome"><img src="https://cdn.rawgit.com/sindresorhus/awesome/d7305f38d29fed78fa85652e3a63e154dd8e8829/media/badge.svg" alt="Awesome"></a>
</h1>
<h2>
<a id="introduction" class="anchor" href="#introduction" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>Introduction</h2>
<p>There is a lot of <del>hidden</del> treasure lying within university pages scattered across the internet. This list is an attempt to bring to light those awesome courses which make their high-quality material i.e. assignments, lectures, notes, readings & examinations available online for free.</p>
<h2>
<a id="table-of-contents" class="anchor" href="#table-of-contents" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>Table of Contents</h2>
<ul>
<li><a href="#algorithms">Algorithms</a></li>
<li><a href="#artificial-intelligence">Artificial Intelligence</a></li>
<li><a href="#computer-graphics">Computer Graphics</a></li>
<li><a href="#cs-theory">CS Theory</a></li>
<li><a href="#introduction-to-cs">Introduction to CS</a></li>
<li><a href="#machine-learning">Machine Learning</a></li>
<li><a href="#misc">Misc</a></li>
<li><a href="#programming-languages--compilers">Programming Languages / Compilers</a></li>
<li><a href="#security">Security</a></li>
<li><a href="#systems">Systems</a></li>
</ul>
<h3>
<a id="legend" class="anchor" href="#legend" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>Legend</h3>
<ul>
<li>
<img src="https://assets-cdn.github.com/images/icons/emoji/unicode/1f4f9.png" width="20" height="20" alt="Lecture Videos" title="Lecture Videos"> - Lecture Videos</li>
<li>
<img src="https://assets-cdn.github.com/images/icons/emoji/unicode/1f4dd.png" width="20" height="20" alt="Lecture Notes" title="Lecture Notes"> - Lecture Notes</li>
<li>
<img src="https://assets-cdn.github.com/images/icons/emoji/unicode/1f4bb.png" width="20" height="20" alt="Assignments" title="Assignments"> - Assignments / Labs</li>
<li>
<img src="https://assets-cdn.github.com/images/icons/emoji/unicode/1f4da.png" width="20" height="20" alt="Readings" title="Readings"> - Readings</li>
</ul>
<h2>
<a id="courses" class="anchor" href="#courses" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>Courses</h2>
<h3>
<a id="systems" class="anchor" href="#systems" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>Systems</h3>
<ul>
<li>
<a href="http://www-inst.eecs.berkeley.edu/%7Ecs61c/sp15/">CS 61C</a> <strong>Great Ideas in Computer Architecture (Machine Structures)</strong> <em>UC Berkeley</em> <img src="https://assets-cdn.github.com/images/icons/emoji/unicode/1f4f9.png" width="20" height="20" alt="Lecture Videos" title="Lecture Videos"><img src="https://assets-cdn.github.com/images/icons/emoji/unicode/1f4dd.png" width="20" height="20" alt="Lecture Notes" title="Lecture Notes"> <img src="https://assets-cdn.github.com/images/icons/emoji/unicode/1f4bb.png" width="20" height="20" alt="Assignments" title="Assignments"> <img src="https://assets-cdn.github.com/images/icons/emoji/unicode/1f4da.png" width="20" height="20" alt="Readings" title="Readings">
<ul>
<li><a href="https://www.youtube.com/playlist?list=PL-XXv-cvA_iCl2-D-FS5mk0jFF6cYSJs_">Lecture Videos</a></li>
<li><a href="http://www-inst.eecs.berkeley.edu/%7Ecs61c/sp15/#Calendar">Lecture Notes</a></li>
<li><a href="http://www-inst.eecs.berkeley.edu/%7Ecs61c/sp15/#Resources">Resources</a></li>
<li><a href="https://hkn.eecs.berkeley.edu/exams/course/CS/61C">Old Exams</a></li>
</ul>
</li>
<li>
<a href="https://courseware.stanford.edu/pg/courses/lectures/371747">CS 107</a> <strong>Computer Organization & Systems</strong> <em>Stanford University</em> <img src="https://assets-cdn.github.com/images/icons/emoji/unicode/1f4f9.png" width="20" height="20" alt="Lecture Videos" title="Lecture Videos">
<img src="https://assets-cdn.github.com/images/icons/emoji/unicode/1f4bb.png" width="20" height="20" alt="Assignments" title="Assignments">
<ul>
<li>CS107 is the third course in Stanford's introductory programming sequence. The course will work from the C programming language down to the microprocessor to de-mystify the machine. With a complete understanding of how computer systems execute programs and manipulate data, you will become a more effective programmer, especially in dealing with issues of debugging, performance, portability, and robustness.</li>
<li><a href="https://www.youtube.com/playlist?list=PL08D9FA018A965057&spfreload=10">Lecture Videos</a></li>
<li><a href="http://web.stanford.edu/class/cs107/assignments.html">Assignments</a></li>
</ul>
</li>
<li>
<a href="http://web.stanford.edu/%7Eouster/cgi-bin/cs140-spring14/lectures.php">CS 140</a> <strong>Operating Systems</strong> <em>Stanford University</em> <img src="https://assets-cdn.github.com/images/icons/emoji/unicode/1f4bb.png" width="20" height="20" alt="Assignments" title="Assignments"> <img src="https://assets-cdn.github.com/images/icons/emoji/unicode/1f4dd.png" width="20" height="20" alt="Lecture Notes" title="Lecture Notes">
<ul>
<li>This class introduces the basic facilities provided in modern operating systems. The course divides into three major sections. The first part of the course discusses concurrency. The second part of the course addresses the problem of memory management. The third major part of the course concerns file systems.</li>
<li><a href="http://web.stanford.edu/%7Eouster/cgi-bin/cs140-spring14/lectures.php">Lecture Notes</a></li>
<li><a href="http://web.stanford.edu/%7Eouster/cgi-bin/cs140-spring14/projects.php">Assignments</a></li>
</ul>
</li>
<li>
<a href="https://6004.mit.edu/">6.004</a> <strong>Computation Structures</strong> <em>MIT</em> <img src="https://assets-cdn.github.com/images/icons/emoji/unicode/1f4bb.png" width="20" height="20" alt="Assignments" title="Assignments"> <img src="https://assets-cdn.github.com/images/icons/emoji/unicode/1f4dd.png" width="20" height="20" alt="Lecture Notes" title="Lecture Notes"> <img src="https://assets-cdn.github.com/images/icons/emoji/unicode/1f4f9.png" width="20" height="20" alt="Lecture Videos" title="Lecture Videos">
<ul>
<li>Introduces architecture of digital systems, emphasizing structural principles common to a wide range of technologies. Multilevel implementation strategies; definition of new primitives (e.g., gates, instructions, procedures, processes) and their mechanization using lower-level elements. Analysis of potential concurrency; precedence constraints and performance measures; pipelined and multidimensional systems. Instruction set design issues; architectural support for contemporary software structures. 4 Engineering Design Points. 6.004 offers an introduction to the engineering of digital systems. Starting with MOS transistors, the course develops of series of building blocks logic gates, combinational and sequential circuits, finite-state machines, computers and finally complete systems. Both hardware and software mechanisms are explored through a series of design examples.</li>
<li><a href="https://www.youtube.com/watch?v=9DWlqtsNGV0&index=1&list=PLmP5iIyVnKPQ-cO_EENdUgEdlRf0u5LYa">Youtube Playlist</a></li>
<li><a href="http://computationstructures.org/notes/tradeoffs/notes.html">Lecture Notes</a></li>
<li><a href="http://computationstructures.org/exercises/cmos/lab.html">Labs-Assignments</a></li>
</ul>
</li>
<li>
<a href="http://cs162.eecs.berkeley.edu/">CS 162</a> <strong>Operating Systems and Systems Programming</strong> <em>UC Berkeley</em> <img src="https://assets-cdn.github.com/images/icons/emoji/unicode/1f4f9.png" width="20" height="20" alt="Lecture Videos" title="Lecture Videos"> <img src="https://assets-cdn.github.com/images/icons/emoji/unicode/1f4dd.png" width="20" height="20" alt="Lecture Notes" title="Lecture Notes"> <img src="https://assets-cdn.github.com/images/icons/emoji/unicode/1f4bb.png" width="20" height="20" alt="Assignments" title="Assignments"> <img src="https://assets-cdn.github.com/images/icons/emoji/unicode/1f4da.png" width="20" height="20" alt="Readings" title="Readings">
<ul>
<li>The purpose of this course is to teach the design of operating systems and operating systems concepts that appear in other advanced systems. Topics we will cover include concepts of operating systems, systems programming, networked and distributed systems, and storage systems, including multiple-program systems (processes, interprocess communication, and synchronization), memory allocation (segmentation, paging), resource allocation and scheduling, file systems, basic networking (sockets, layering, APIs, reliability), transactions, security, and privacy.
<ul>
<li>Operating Systems course by the Chair of EECS, UC Berkeley <a href="http://www.cs.berkeley.edu/%7Eculler/">David Culler</a>
</li>
<li>
<a href="https://www.youtube.com/playlist?list=PL-XXv-cvA_iBDyz-ba4yDskqMDY6A1w_c">Youtube Playlist</a> Spring 2015 lectures</li>
<li>
<a href="https://inst.eecs.berkeley.edu/%7Ecs162/sp15/">Lecture Notes</a> Spring 2015 lectures</li>
</ul>
</li>
</ul>
</li>
<li>
<a href="https://inst.eecs.berkeley.edu/%7Ecs168/fa14/">CS 168</a> <strong>Introduction to the Internet: Architecture and Protocols</strong> <em>UC Berkeley</em> <img src="https://assets-cdn.github.com/images/icons/emoji/unicode/1f4dd.png" width="20" height="20" alt="Lecture Notes" title="Lecture Notes"> <img src="https://assets-cdn.github.com/images/icons/emoji/unicode/1f4bb.png" width="20" height="20" alt="Assignments" title="Assignments">
<ul>
<li>This course is an introduction to the Internet architecture. We will focus on the concepts and fundamental design principles that have contributed to the Internet's scalability and robustness and survey the various protocols and algorithms used within this architecture. Topics include layering, addressing, intradomain routing, interdomain routing, reliable delivery, congestion control, and the core protocols (e.g., TCP, UDP, IP, DNS, and HTTP) and network technologies (e.g., Ethernet, wireless).</li>
<li><a href="https://inst.eecs.berkeley.edu/%7Ecs168/fa14/class.html">Lecture Notes & Assignments</a></li>
<li><a href="https://inst.eecs.berkeley.edu/%7Ecs168/fa14/">Discussion Notes</a></li>
</ul>
</li>
<li>
<a href="http://courses.cms.caltech.edu/cs179/">CS 179</a> <strong>GPU Programming</strong> <em>Caltech</em> <img src="https://assets-cdn.github.com/images/icons/emoji/unicode/1f4bb.png" width="20" height="20" alt="Assignments" title="Assignments"> <img src="https://assets-cdn.github.com/images/icons/emoji/unicode/1f4dd.png" width="20" height="20" alt="Lecture Notes" title="Lecture Notes">
<ul>
<li>This course will cover programming techniques for the GPU. The course will introduce NVIDIA's parallel computing language, CUDA. Beyond covering the CUDA programming model and syntax, the course will also discuss GPU architecture, high performance computing on GPUs, parallel algorithms, CUDA libraries, and applications of GPU computing. </li>
<li><a href="http://courses.cms.caltech.edu/cs179/">Assignments</a></li>
<li><a href="http://courses.cms.caltech.edu/cs179/">Lecture Notes</a></li>
</ul>
</li>
<li>
<a href="https://sites.google.com/site/cs186spring2015/">CS 186</a> <strong>Introduction to Database Systems</strong> <em>UC Berkeley</em> <img src="https://assets-cdn.github.com/images/icons/emoji/unicode/1f4bb.png" width="20" height="20" alt="Assignments" title="Assignments"> <img src="https://assets-cdn.github.com/images/icons/emoji/unicode/1f4da.png" width="20" height="20" alt="Readings" title="Readings"> <img src="https://assets-cdn.github.com/images/icons/emoji/unicode/1f4dd.png" width="20" height="20" alt="Lecture Notes" title="Lecture Notes">
<ul>
<li>In the project assignments in CS186, you will write a basic database management system called SimpleDB. For this project, you will focus on implementing the core modules required to access stored data on disk; in future projects, you will add support for various query processing operators, as well as transactions, locking, and concurrent queries.</li>
<li><a href="https://sites.google.com/site/cs186fall2013/section-notes">Lecture Notes</a></li>
<li><a href="https://sites.google.com/site/cs186fall2013/homeworks">Projects</a></li>
</ul>
</li>
<li>
<a href="https://courses.engr.illinois.edu/cs241/sp2016/index.html">CS 241</a> <strong>Systems Programming (Spring 2016)</strong> <em>Univ of Illinois, Urbana-Champaign</em> <img src="https://assets-cdn.github.com/images/icons/emoji/unicode/1f4bb.png" width="20" height="20" alt="Assignments" title="Assignments"> <img src="https://assets-cdn.github.com/images/icons/emoji/unicode/1f4dd.png" width="20" height="20" alt="Lecture Notes" title="Lecture Notes">
<ul>
<li>System programming refers to writing code that tasks advantage of operating system support for programmers. This course is designed to introduce you to system programming. By the end of this course, you should be proficient at writing programs that take full advantage of operating system support. To be concrete, we need to fix an operating system and we need to choose a programming language for writing programs. We chose the C language running on a Linux/UNIX operating system (which implements the POSIX standard interface between the programmer and the OS).</li>
<li><a href="https://courses.engr.illinois.edu/cs241/sp2016/mps.html">Assignments</a></li>
<li><a href="https://courses.engr.illinois.edu/cs241/sp2016/labs.html">Labs</a></li>
<li><a href="http://angrave.github.io/sys/#">Github Page</a></li>
<li><a href="https://github.com/angrave/SystemProgramming/wiki">Crowd Sourced Book</a></li>
</ul>
</li>
<li>
<a href="https://courses.engr.illinois.edu/cs425/fa2014/index.html">CS 425</a> <strong>Distributed Systems</strong> <em>Univ of Illinois, Urbana-Champaign</em> <img src="https://assets-cdn.github.com/images/icons/emoji/unicode/1f4bb.png" width="20" height="20" alt="Assignments" title="Assignments"> <img src="https://assets-cdn.github.com/images/icons/emoji/unicode/1f4da.png" width="20" height="20" alt="Readings" title="Readings">
<ul>
<li>Brilliant set of lectures and reading material covering fundamental concepts in distributed systems such as Vector clocks, Consensus and Paxos. This is the 2014 version by Prof Indranil Gupta.</li>
<li><a href="https://courses.engr.illinois.edu/cs425/fa2014/lectures.html">Lectures</a></li>
<li><a href="https://courses.engr.illinois.edu/cs425/assignments.html">Assignments</a></li>
</ul>
</li>
<li>
<a href="http://www.cgl.uwaterloo.ca/%7Ewmcowan/teaching/cs452/s12/">CS 452</a> <strong>Real-Time Programming</strong> <em>University of Waterloo</em> <img src="https://assets-cdn.github.com/images/icons/emoji/unicode/1f4bb.png" width="20" height="20" alt="Assignments" title="Assignments"> <img src="https://assets-cdn.github.com/images/icons/emoji/unicode/1f4dd.png" width="20" height="20" alt="Lecture Notes" title="Lecture Notes">
<ul>
<li>Write a real-time OS microkernel in C, and application code to operate a model train set in response to real-time sensor information. The communication with the train set runs at 2400 baud so it takes about 61 milliseconds to ask all of the sensors for data about the train's possible location. This makes it particularly challenging because a train can move about 3 centimeters in that time. One of the most challenging and time-consuming courses at the University of Waterloo.</li>
<li><a href="http://www.cgl.uwaterloo.ca/%7Ewmcowan/teaching/cs452/s12/assignments/index.html">Assignments</a></li>
<li><a href="http://www.cgl.uwaterloo.ca/%7Ewmcowan/teaching/cs452/s12/notes/index.html">Lecture notes</a></li>
</ul>
</li>
<li>
<a href="http://www.cs.cornell.edu/courses/CS2043/2014sp/">CS 2043</a> <strong>Unix Tools & Scripting</strong> <em>Cornell University</em> <img src="https://assets-cdn.github.com/images/icons/emoji/unicode/1f4bb.png" width="20" height="20" alt="Assignments" title="Assignments"> <img src="https://assets-cdn.github.com/images/icons/emoji/unicode/1f4dd.png" width="20" height="20" alt="Lecture Notes" title="Lecture Notes"><img src="https://assets-cdn.github.com/images/icons/emoji/unicode/1f4da.png" width="20" height="20" alt="Readings" title="Readings">
<ul>
<li>UNIX-like systems are increasingly being used on personal computers, mobile phones, web servers, and many other systems. They represent a wonderful family of programming environments useful both to computer scientists and to people in many other fields, such as computational biology and computational linguistics, in which data is naturally represented by strings. This course provides an intensive training to develop skills in Unix command line tools and scripting that enable the accomplishment and automation of large and challenging computing tasks. The syllabus takes students from shell basics and piping, to regular-expression processing tools, to shell scripting and Python.</li>
<li><a href="http://www.cs.cornell.edu/courses/CS2043/2014sp/">Syllabus</a></li>
<li><a href="http://www.cs.cornell.edu/courses/CS2043/2014sp/">Lectures</a></li>
<li><a href="http://www.cs.cornell.edu/courses/CS2043/2014sp/">Assignments</a></li>
</ul>
</li>
<li>
<a href="http://www.cs.cornell.edu/courses/cs3410/2016fa/">CS 3410</a> <strong>Computer System Organization and Programming</strong> <em>Cornell University</em> <img src="https://assets-cdn.github.com/images/icons/emoji/unicode/1f4bb.png" width="20" height="20" alt="Assignments" title="Assignments"> <img src="https://assets-cdn.github.com/images/icons/emoji/unicode/1f4dd.png" width="20" height="20" alt="Lecture Notes" title="Lecture Notes"><img src="https://assets-cdn.github.com/images/icons/emoji/unicode/1f4da.png" width="20" height="20" alt="Readings" title="Readings">
<ul>
<li>CS3410 provides an introduction to computer organization, systems programming and the hardware/software interface. Topics include instruction sets, computer arithmetic, datapath design, data formats, addressing modes, memory hierarchies including caches and virtual memory, I/O devices, bus-based I/O systems, and multicore architectures. Students learn assembly language programming and design a pipelined RISC processor.</li>
<li><a href="http://www.cs.cornell.edu/courses/CS3410/2014sp/schedule.html">Lectures</a></li>
<li><a href="http://www.cs.cornell.edu/courses/CS3410/2014sp/schedule.html">Assignments</a></li>
</ul>
</li>
<li>
<a href="http://www.cs.cornell.edu/courses/CS4410/2014fa/">CS 4410</a> <strong>Operating Systems</strong> <em>Cornell University</em> <img src="https://assets-cdn.github.com/images/icons/emoji/unicode/1f4dd.png" width="20" height="20" alt="Lecture Notes" title="Lecture Notes"><img src="https://assets-cdn.github.com/images/icons/emoji/unicode/1f4da.png" width="20" height="20" alt="Readings" title="Readings">
<ul>
<li>CS 4410 covers systems programming and introductory operating system design and implementation. We will cover the basics of operating systems, namely structure, concurrency, scheduling, synchronization, memory management, filesystems, security and networking. The course is open to any undergraduate who has mastered the material in CS3410/ECE3140.</li>
<li><a href="http://www.cs.cornell.edu/courses/CS4410/2014fa/slides/01-intro.pptx">Syllabus</a></li>
<li><a href="http://www.cs.cornell.edu/courses/CS4410/2014fa/lectures.php">Lectures</a></li>
</ul>
</li>
<li>
<a href="http://rust-class.org/index.html">CS 4414</a> <strong>Operating Systems</strong> <em>University of Virginia</em> <img src="https://assets-cdn.github.com/images/icons/emoji/unicode/1f4f9.png" width="20" height="20" alt="Lecture Videos" title="Lecture Videos"> <img src="https://assets-cdn.github.com/images/icons/emoji/unicode/1f4bb.png" width="20" height="20" alt="Assignments" title="Assignments">
<ul>
<li>A course (that) covers topics including: Analysis process communication and synchronization; resource management; virtual memory management algorithms; file systems; and networking and distributed systems. The primary goal of this course is to improve your ability to build scalable, robust and secure computing systems. It focuses on doing that by understanding what underlies the core abstractions of modern computer systems.</li>
<li><a href="http://rust-class.org/pages/syllabus.html">Syllabus</a></li>
<li><a href="http://rust-class.org/pages/classes.html">Lectures</a></li>
</ul>
</li>
<li>
<a href="http://www.cs.cornell.edu/Courses/CS5412/2014sp/">CS 5412</a> <strong>Cloud Computing</strong> <em>Cornell University</em> <img src="https://assets-cdn.github.com/images/icons/emoji/unicode/1f4dd.png" width="20" height="20" alt="Lecture Notes" title="Lecture Notes">
<img src="https://assets-cdn.github.com/images/icons/emoji/unicode/1f4da.png" width="20" height="20" alt="Readings" title="Readings">
<ul>
<li>Taught by one of the stalwarts of this field, Prof Ken Birman, this course has a fantastic set of slides that one can go through. The Prof's <a href="http://www.amazon.com/Guide-Reliable-Distributed-Systems-High-Assurance/dp/1447124154">book</a> is also a gem and recommended as a must read in Google's tutorial on <a href="http://www.hpcs.cs.tsukuba.ac.jp/%7Etatebe/lecture/h23/dsys/dsd-tutorial.html">Distributed System Design</a>
</li>
<li><a href="http://www.cs.cornell.edu/Courses/CS5412/2014sp/Syllabus.htm">Slides</a></li>
</ul>
</li>
<li>
<a href="http://comp.uark.edu/%7Ewingning/csce3613/csce3613.html">CSCE 3613</a> <strong>Operating Systems</strong> <em>University of Arkansas (Fayetteville)</em> <img src="https://assets-cdn.github.com/images/icons/emoji/unicode/1f4bb.png" width="20" height="20" alt="Assignments" title="Assignments"> <img src="https://assets-cdn.github.com/images/icons/emoji/unicode/1f4dd.png" width="20" height="20" alt="Lecture Notes" title="Lecture Notes"><img src="https://assets-cdn.github.com/images/icons/emoji/unicode/1f4da.png" width="20" height="20" alt="Readings" title="Readings"> - An introduction to operating systems including topics in system structures, process management, storage management, files, distributed systems, and case studies.
<ul>
<li><a href="http://comp.uark.edu/%7Ewingning/csce3613/CSCE3613.pdf">Syllabus</a></li>
<li><a href="http://comp.uark.edu/%7Ewingning/csce3613/Homework3613.html">Assignments</a></li>
<li><a href="http://comp.uark.edu/%7Ewingning/csce3613/CourseNote3613.html">Lecture Notes</a></li>
<li><a href="http://comp.uark.edu/%7Ewingning/csce3613/Link3613.html">Readings</a></li>
</ul>
</li>
<li>
<a href="http://www.cs.nyu.edu/%7Emwalfish/classes/15sp/index.html">CSCI-UA.0202: Operating Systems (Undergrad)</a> <strong>Operating Systems</strong> <em>NYU</em> <img src="https://assets-cdn.github.com/images/icons/emoji/unicode/1f4bb.png" width="20" height="20" alt="Assignments" title="Assignments"> <img src="https://assets-cdn.github.com/images/icons/emoji/unicode/1f4dd.png" width="20" height="20" alt="Lecture Notes" title="Lecture Notes"> <img src="https://assets-cdn.github.com/images/icons/emoji/unicode/1f4da.png" width="20" height="20" alt="Readings" title="Readings">
<ul>
<li>NYU's operating system course. It's a fundamental course focusing basic ideas of operating systems, including memory management, process shceduling, file system, ect. It also includes some recomended reading materials. What's more, there are a series of hands-on lab materials, helping you easily understand OS.</li>
<li><a href="http://www.cs.nyu.edu/%7Emwalfish/classes/15sp/labs.html">Assignments</a></li>
<li><a href="http://www.cs.nyu.edu/%7Emwalfish/classes/15sp/syllabus.html">Lectures</a></li>
<li>
<a href="http://www.cs.nyu.edu/%7Emwalfish/classes/15sp/exams.html">Old Exams</a> </li>
</ul>
</li>
<li>
<a href="http://compsci.hunter.cuny.edu/%7Esweiss/course_materials/csci360/csci360_f14.php">CSCI 360</a> <strong>Computer Architecture 3</strong> <em>CUNY Hunter College</em> <img src="https://assets-cdn.github.com/images/icons/emoji/unicode/1f4bb.png" width="20" height="20" alt="Assignments" title="Assignments"> <img src="https://assets-cdn.github.com/images/icons/emoji/unicode/1f4dd.png" width="20" height="20" alt="Lecture Notes" title="Lecture Notes">
<ul>
<li> A course that covers cache design, buses, memory hierarchies, processor-peripheral interfaces, and multiprocessors, including GPUs.</li>
</ul>
</li>
<li>
<a href="http://compsci.hunter.cuny.edu/%7Esweiss/course_materials/csci493.66/csci493.66_spr12.php">CSCI 493.66</a> <strong>UNIX System Programming (formerly UNIX Tools)</strong> <em>CUNY Hunter College</em> <img src="https://assets-cdn.github.com/images/icons/emoji/unicode/1f4bb.png" width="20" height="20" alt="Assignments" title="Assignments">
<img src="https://assets-cdn.github.com/images/icons/emoji/unicode/1f4dd.png" width="20" height="20" alt="Lecture Notes" title="Lecture Notes">
<ul>
<li>A course that is mostly about writing programs against the UNIX API, covering all of the basic parts of the kernel interface and libraries, including files, processes, terminal control, signals, and threading.</li>
</ul>
</li>
<li>
<a href="http://compsci.hunter.cuny.edu/%7Esweiss/course_materials/csci493.65/csci493.65_spr14.php">CSCI 493.75</a> <strong>Parallel Computing</strong> <em>CUNY Hunter College</em> <img src="https://assets-cdn.github.com/images/icons/emoji/unicode/1f4bb.png" width="20" height="20" alt="Assignments" title="Assignments">
<img src="https://assets-cdn.github.com/images/icons/emoji/unicode/1f4dd.png" width="20" height="20" alt="Lecture Notes" title="Lecture Notes">
<ul>
<li>The course is an introduction to parallel algorithms and parallel programming in C and C++, using the Message Passing Interface (MPI) and the OpenMP application programming interface. It also includes a brief introduction to parallel architectures and interconnection networks. It is both theoretical and practical, including material on design methodology, performance analysis, and mathematical concepts, as well as details on programming using MPI and OpenMP.</li>
</ul>
</li>
<li>
<a href="https://www.ops-class.org/">Hack the Kernel</a> <strong>Introduction to Operating Systems</strong> <em>SUNY University at Buffalo, NY</em> <img src="https://assets-cdn.github.com/images/icons/emoji/unicode/1f4f9.png" width="20" height="20" alt="Lecture Videos" title="Lecture Videos"> <img src="https://assets-cdn.github.com/images/icons/emoji/unicode/1f4bb.png" width="20" height="20" alt="Assignments" title="Assignments"> <img src="https://assets-cdn.github.com/images/icons/emoji/unicode/1f4dd.png" width="20" height="20" alt="Lecture Notes" title="Lecture Notes">
<ul>
<li>This course is an introduction to operating system design and implementation. We study operating systems because they are examples of mature and elegant solutions to a difficult design problem: how to safely and efficiently share system resources and provide abstractions useful to applications.</li>
<li>For the processor, memory, and disks, we discuss how the operating system allocates each resource and explore the design and implementation of related abstractions. We also establish techniques for testing and improving system performance and introduce the idea of hardware virtualization. Programming assignments provide hands-on experience with implementing core operating system components in a realistic development environment. Course by <a href="https://blue.cse.buffalo.edu/people/gwa/">Dr.Geoffrey Challen</a>
</li>
<li><a href="https://www.ops-class.org/courses/buffalo/CSE421_Spring2016/">Syllabus</a></li>
<li><a href="https://www.ops-class.org/slides/">Slides</a></li>
<li><a href="https://www.youtube.com/playlist?list=PLE6LEE8y2Jp-kbEcVR2W3vfx0Pdca0BD3">Video lectures</a></li>
<li><a href="https://www.ops-class.org/asst/0/">Assignments</a></li>
<li><a href="https://www.ops-class.org/exams/">Old Exams</a></li>
</ul>
</li>
<li>
<a href="http://patricklam.ca/p4p/">ECE 459</a> <strong>Programming for Performance</strong> <em>University of Waterloo</em> <img src="https://assets-cdn.github.com/images/icons/emoji/unicode/1f4dd.png" width="20" height="20" alt="Lecture Notes" title="Lecture Notes">
<img src="https://assets-cdn.github.com/images/icons/emoji/unicode/1f4bb.png" width="20" height="20" alt="Assignments" title="Assignments">
<ul>
<li>Learn techniques for profiling, rearchitecting, and implementing software systems that can handle industrial-sized inputs, and to design and build critical software infrastructure. Learn performance optimization through parallelization, multithreading, async I/O, vectorization and GPU programming, and distributed computing.</li>
<li><a href="https://github.com/patricklam/p4p-2015/tree/master/lectures">Lecture slides</a></li>
</ul>
</li>
<li>
<a href="http://verifiablerobotics.com/courses/mae6740.html">MAE 6740</a> <strong>Hybrid Systems</strong> <em>Cornell University</em> <img src="https://assets-cdn.github.com/images/icons/emoji/unicode/1f4dd.png" width="20" height="20" alt="Lecture Notes" title="Lecture Notes"><img src="https://assets-cdn.github.com/images/icons/emoji/unicode/1f4da.png" width="20" height="20" alt="Readings" title="Readings">
<ul>
<li>This course will discuss the modeling of hybrid systems, the analysis and simulation of their behavior, different control methodologies as well as verification techniques. To complement the theoretical aspect, several state of the art tools will be introduced. New and emerging topics in hybrid systems research will be presented as well. As the field of hybrid systems is a truly interdisciplinary one, drawing researchers from dynamical systems, control theory, computer aided verification, automata theory and other fields, one of the goals of this course is to teach students the language that will allow them to bridge the gap between these traditionally disjoint disciplines.</li>
<li><a href="http://verifiablerobotics.com/courses/mae6740.html">Lectures</a></li>
<li><a href="http://verifiablerobotics.com/courses/mae6740.html">Readings</a></li>
</ul>
</li>
<li>
<a href="http://dcg.ethz.ch/lectures/podc_allstars/">PODC</a> <strong>Principles of Distributed Computing</strong> <em>ETH-Zurich</em> <img src="https://assets-cdn.github.com/images/icons/emoji/unicode/1f4bb.png" width="20" height="20" alt="Assignments" title="Assignments"> <img src="https://assets-cdn.github.com/images/icons/emoji/unicode/1f4da.png" width="20" height="20" alt="Readings" title="Readings"> <img src="https://assets-cdn.github.com/images/icons/emoji/unicode/1f4dd.png" width="20" height="20" alt="Lecture Notes" title="Lecture Notes">
<ul>
<li>Explore essential algorithmic ideas and lower bound techniques, basically the "pearls" of distributed computing in an easy-to-read set of lecture notes, combined with complete exercises and solutions.</li>
<li><a href="http://dcg.ethz.ch/lectures/podc_allstars/lecture/podc.pdf">Book</a></li>
<li><a href="http://dcg.ethz.ch/lectures/podc_allstars/">Assignments and Solutions</a></li>
</ul>
</li>
<li>
<a href="http://homes.cs.washington.edu/%7Edjg/teachingMaterials/spac/">SPAC</a> <strong>Parallelism and Concurrency</strong> <em>Univ of Washington</em> <img src="https://assets-cdn.github.com/images/icons/emoji/unicode/1f4da.png" width="20" height="20" alt="Readings" title="Readings">
<ul>
<li>Technically not a course nevertheless an awesome collection of materials used by Prof Dan Grossman to teach parallelism and concurrency concepts to sophomores at UWash</li>
</ul>
</li>
<li>
<a href="http://www.distributed-systems.net/index.php?id=distributed-systems-principles-and-paradigms">VU:Distributed Systems</a> <strong>Distributed Systems: Principles and Paradigms (Fall 2012)</strong> <em>Vrije Universiteit, Amsterdam</em> <img src="https://assets-cdn.github.com/images/icons/emoji/unicode/1f4f9.png" width="20" height="20" alt="Lecture Videos" title="Lecture Videos"> <img src="https://assets-cdn.github.com/images/icons/emoji/unicode/1f4bb.png" width="20" height="20" alt="Assignments" title="Assignments"> <img src="https://assets-cdn.github.com/images/icons/emoji/unicode/1f4dd.png" width="20" height="20" alt="Lecture Notes" title="Lecture Notes">
<ul>
<li>Distributed systems often appear to be highly complex and intertwined networked systems. Touching one component often affects many others in surprising ways. In this course, we aim at explaining the basics of distributed systems by systematically taking different perspectives, and subsequently bringing these perspectives together by looking at often-applied organizations of distributed systems. This course closely follows the timeless classic <b>Distributed Systems: Principles and Paradigms</b> by some of the pioneers in the field of Distributes systems-Andrew S. Tanenbaum and Maarten van Steen</li>
<li><a href="http://www.distributed-systems.net/courses/ds/ds-slides/">Slides</a></li>
<li><a href="http://www.distributed-systems.net/courses/ds/ds-screencasts/">Video lectures</a></li>
<li><a href="http://www.distributed-systems.net/courses/ds/ds-exams/">Exams</a></li>
</ul>
</li>
<li>
<a href="http://css.csail.mit.edu/6.824/2014/index.html">6.824</a> <strong>Distributed Systems</strong> <em>MIT</em> <img src="https://assets-cdn.github.com/images/icons/emoji/unicode/1f4bb.png" width="20" height="20" alt="Assignments" title="Assignments"> <img src="https://assets-cdn.github.com/images/icons/emoji/unicode/1f4dd.png" width="20" height="20" alt="Lecture Notes" title="Lecture Notes">
<ul>
<li>MIT's graduate-level DS course with a focus on fault tolerance, replication, and consistency, all taught via awesome lab assignments in Golang!</li>
<li>
<a href="http://css.csail.mit.edu/6.824/2014/labs/">Assignments</a> - Just do <code>git clone git://g.csail.mit.edu/6.824-golabs-2014 6.824</code>
</li>
<li><a href="http://css.csail.mit.edu/6.824/2014/schedule.html">Readings</a></li>
</ul>
</li>
<li>
<a href="http://pdos.csail.mit.edu/6.828/2014/">6.828</a> <strong>Operating Systems</strong> <em>MIT</em> <img src="https://assets-cdn.github.com/images/icons/emoji/unicode/1f4bb.png" width="20" height="20" alt="Assignments" title="Assignments"> <img src="https://assets-cdn.github.com/images/icons/emoji/unicode/1f4dd.png" width="20" height="20" alt="Lecture Notes" title="Lecture Notes">
<ul>
<li>MIT's operating systems course focusing on the fundamentals of OS design including booting, memory management, environments, file systems, multitasking, and more. In a series of lab assignments, you will build JOS, an OS exokernel written in C.</li>
<li><a href="http://pdos.csail.mit.edu/6.828/2014/labguide.html">Assignments</a></li>
<li><a href="http://pdos.csail.mit.edu/6.828/2014/schedule.html">Lectures</a></li>
<li>
<a href="http://pdos.csail.mit.edu/6.828/2011/schedule.html">Videos</a> Note: These are student recorded cam videos of the 2011 course. The videos explain a lot of concepts required for the labs and assignments.</li>
</ul>
</li>
<li>
<a href="http://www.cs.cmu.edu/%7E213/">15-213</a> <strong>Introduction to Computer Systems (ICS)</strong> <em>Carnegie-Mellon University</em> <img src="https://assets-cdn.github.com/images/icons/emoji/unicode/1f4f9.png" width="20" height="20" alt="Lecture Videos" title="Lecture Videos"> <img src="https://assets-cdn.github.com/images/icons/emoji/unicode/1f4bb.png" width="20" height="20" alt="Assignments" title="Assignments"> <img src="https://assets-cdn.github.com/images/icons/emoji/unicode/1f4dd.png" width="20" height="20" alt="Lecture Notes" title="Lecture Notes">
<ul>
<li>The ICS course provides a programmer's view of how computer systems execute programs, store information, and communicate. It enables students to become more effective programmers, especially in dealing with issues of performance, portability and robustness. It also serves as a foundation for courses on compilers, networks, operating systems, and computer architecture, where a deeper understanding of systems-level issues is required. Topics covered include: machine-level code and its generation by optimizing compilers, performance evaluation and optimization, computer arithmetic, memory organization and management, networking technology and protocols, and supporting concurrent computation.</li>
<li>This is the must-have course for everyone in CMU who wants to learn some computer science no matter what major are you in. Because it's CMU (The course number is as same as the zip code of CMU)!</li>
<li><a href="http://www.cs.cmu.edu/%7E213/schedule.html">Lecture Notes</a></li>
<li>
<a href="https://scs.hosted.panopto.com/Panopto/Pages/Sessions/List.aspx#folderID=%22b96d90ae-9871-4fae-91e2-b1627b43e25e%22">Videos</a> </li>
<li><a href="http://csapp.cs.cmu.edu/public/labs.html">Assignments</a></li>
</ul>
</li>
<li>
<a href="http://15418.courses.cs.cmu.edu/spring2015/">15-418</a><strong>Parallel Computer Architecture and Programming</strong> <em>Carnegie-Mellon University</em> <img src="https://assets-cdn.github.com/images/icons/emoji/unicode/1f4f9.png" width="20" height="20" alt="Lecture Videos" title="Lecture Videos"> <img src="https://assets-cdn.github.com/images/icons/emoji/unicode/1f4bb.png" width="20" height="20" alt="Assignments" title="Assignments"> <img src="https://assets-cdn.github.com/images/icons/emoji/unicode/1f4dd.png" width="20" height="20" alt="Lecture Notes" title="Lecture Notes"> <img src="https://assets-cdn.github.com/images/icons/emoji/unicode/1f4da.png" width="20" height="20" alt="Readings" title="Readings">
<ul>
<li>The goal of this course is to provide a deep understanding of the fundamental principles and engineering trade-offs involved in designing modern parallel computing systems as well as to teach parallel programming techniques necessary to effectively utilize these machines. Because writing good parallel programs requires an understanding of key machine performance characteristics, this course will cover both parallel hardware and software design.</li>
<li><a href="http://15418.courses.cs.cmu.edu/spring2015/exercises">Assignments</a></li>
<li><a href="http://15418.courses.cs.cmu.edu/spring2015/reading">Lecture Notes</a></li>
<li><a href="https://scs.hosted.panopto.com/Panopto/Pages/Sessions/List.aspx#folderID=%22a5862643-2416-49ef-b46b-13465d1b6df0%22">Lecture Videos</a></li>
<li><a href="http://15418.courses.cs.cmu.edu/spring2015/reading">Readings</a></li>
</ul>
</li>
<li>
<a href="http://www.cs.cmu.edu/%7Edga/15-440/F12/index.html">15-440</a> <strong>Distributed Systems</strong> <em>Carnegie-Mellon University</em> <img src="https://assets-cdn.github.com/images/icons/emoji/unicode/1f4bb.png" width="20" height="20" alt="Assignments" title="Assignments"> <img src="https://assets-cdn.github.com/images/icons/emoji/unicode/1f4dd.png" width="20" height="20" alt="Lecture Notes" title="Lecture Notes">
<ul>
<li>Introduction to distributed systems with a focus on teaching concepts via projects implemented in the Go programming language.</li>
<li><a href="http://www.cs.cmu.edu/%7Edga/15-440/F12/assignments.html">Assignments</a></li>
</ul>
</li>
<li>
<a href="http://15721.courses.cs.cmu.edu/spring2016/">15-721</a> <strong>Database Systems</strong> <em>Carnegie-Mellon University</em> <img src="https://assets-cdn.github.com/images/icons/emoji/unicode/1f4f9.png" width="20" height="20" alt="Lecture Videos" title="Lecture Videos"> <img src="https://assets-cdn.github.com/images/icons/emoji/unicode/1f4bb.png" width="20" height="20" alt="Assignments" title="Assignments"> <img src="https://assets-cdn.github.com/images/icons/emoji/unicode/1f4da.png" width="20" height="20" alt="Readings" title="Readings">
<ul>
<li>This course is a comprehensive study of the internals of modern database management systems. It will cover the core concepts and fundamentals of the components that are used in both high-performance transaction processing systems (OLTP) and large-scale analytical systems (OLAP). The class will stress both efficiency and correctness of the implementation of these ideas. All class projects will be in the context of a real in-memory, multi-core database system. The course is appropriate for graduate students in software systems and for advanced undergraduates with strong systems programming skills.</li>
<li><a href="http://15721.courses.cs.cmu.edu/spring2016/syllabus.html">Assignments</a></li>
<li><a href="https://www.youtube.com/playlist?list=PLSE8ODhjZXjbisIGOepfnlbfxeH7TW-8O">Lecture Videos</a></li>
<li><a href="http://15721.courses.cs.cmu.edu/spring2016/schedule.html">Readings</a></li>
</ul>
</li>
<li>
<a href="http://www.andrew.cmu.edu/course/15-749/">15-749</a> <strong>Engineering Distributed Systems</strong> <em>Carnegie-Mellon University</em> <img src="https://assets-cdn.github.com/images/icons/emoji/unicode/1f4da.png" width="20" height="20" alt="Readings" title="Readings"><br>
<ul>
<li>A project focused course on Distributed Systems with an awesome list of readings</li>
<li><a href="http://www.andrew.cmu.edu/course/15-749/READINGS/">Readings</a></li>
</ul>
</li>
<li>
<a href="http://www.ece.cmu.edu/%7Eece447/s14/doku.php?id=start">18-447</a> <strong>Introduction to Computer Architecture</strong> <em>CMU</em> <img src="https://assets-cdn.github.com/images/icons/emoji/unicode/1f4f9.png" width="20" height="20" alt="Lecture Videos" title="Lecture Videos"> <img src="https://assets-cdn.github.com/images/icons/emoji/unicode/1f4bb.png" width="20" height="20" alt="Assignments" title="Assignments"> <img src="https://assets-cdn.github.com/images/icons/emoji/unicode/1f4da.png" width="20" height="20" alt="Readings" title="Readings">
<ul>
<li>Very comprehensive material on Computer Architecture - definitely more than just "introduction". Online material is very user-friendly, even the recitation videos available online. This is the Spring'14 version by Prof. <a href="http://users.ece.cmu.edu/%7Eomutlu/">Onur Mutlu </a>
</li>
<li><a href="http://www.ece.cmu.edu/%7Eece447/s14/doku.php?id=schedule">Lectures and Recitation</a></li>
<li>
<a href="http://www.ece.cmu.edu/%7Eece447/s14/doku.php?id=homeworks">Homeworks</a> 7 HWs with answer set as well</li>
<li><a href="http://www.ece.cmu.edu/%7Eece447/s14/doku.php?id=readings">Readings</a></li>
</ul>
</li>
</ul>
<hr>
<h3>
<a id="programming-languages--compilers" class="anchor" href="#programming-languages--compilers" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>Programming Languages / Compilers</h3>
<ul>
<li>
<a href="http://www.seas.upenn.edu/%7Ecis194/">CIS 194</a> <strong>Introduction to Haskell</strong> <em>Penn Engineering</em> <img src="https://assets-cdn.github.com/images/icons/emoji/unicode/1f4bb.png" width="20" height="20" alt="Assignments" title="Assignments"> <img src="https://assets-cdn.github.com/images/icons/emoji/unicode/1f4dd.png" width="20" height="20" alt="Lecture Notes" title="Lecture Notes">
<ul>
<li>Explore the joys of functional programming, using Haskell as a vehicle. The aim of the course will be to allow you to use Haskell to easily and conveniently write practical programs.</li>
<li>
<a href="http://www.seas.upenn.edu/%7Ecis194/spring13/index.html">Previous</a> semester also available, with more exercises</li>
<li><a href="http://www.seas.upenn.edu/%7Ecis194/lectures.html">Assignments & Lectures</a></li>
</ul>
</li>
<li>
<a href="http://cis198-2016s.github.io/">CIS 198</a> <strong>Rust Programming</strong> <em>UPenn</em> <img src="https://assets-cdn.github.com/images/icons/emoji/unicode/1f4dd.png" width="20" height="20" alt="Lecture Notes" title="Lecture Notes"> <img src="https://assets-cdn.github.com/images/icons/emoji/unicode/1f4bb.png" width="20" height="20" alt="Assignments" title="Assignments">
<ul>
<li>This course covers what makes Rust so unique and applies it to practical systems programming problems. Topics covered include traits and generics; memory safety (move semantics, borrowing, and lifetimes); Rust’s rich macro system; closures; and concurrency.</li>
<li><a href="https://github.com/cis198-2016s/homework">Assignments</a></li>
</ul>
</li>
<li>
<a href="http://mooc.cs.helsinki.fi/clojure">Clojure</a> <strong>Functional Programming with Clojure</strong> <em>University of Helsinki</em> <img src="https://assets-cdn.github.com/images/icons/emoji/unicode/1f4bb.png" width="20" height="20" alt="Assignments" title="Assignments">
<ul>
<li>The course is an introduction to functional programming with a dynamically typed language Clojure. We start with an introduction to Clojure; its syntax and development environment. Clojure has a good selection of data structures and we cover most of them. We also go through the basics of recursion and higher-order functions. The course material is in English.</li>
<li><a href="http://iloveponies.github.io/120-hour-epic-sax-marathon/index.html">Github Page</a></li>
</ul>
</li>
<li>
<a href="http://www.cs.umd.edu/class/spring2015/cmsc430/">CMSC 430</a> <strong>Introduction to Compilers</strong> <em>Univ of Maryland</em> <img src="https://assets-cdn.github.com/images/icons/emoji/unicode/1f4bb.png" width="20" height="20" alt="Assignments" title="Assignments"> <img src="https://assets-cdn.github.com/images/icons/emoji/unicode/1f4dd.png" width="20" height="20" alt="Lecture Notes" title="Lecture Notes">
<ul>
<li>The goal of CMSC 430 is to arm students with the ability to design, implement, and extend a programming language. Throughout the course, students will design and implement several related languages, and will explore parsing, syntax querying, dataflow analysis, compilation to bytecode, type systems, and language interoperation. </li>
<li><a href="http://www.cs.umd.edu/class/spring2015/cmsc430/Schedule.html">Lecture Notes</a></li>
<li><a href="http://www.cs.umd.edu/class/spring2015/cmsc430/Projects.html">Assignments</a></li>
</ul>
</li>
<li>
<a href="http://www.cs.princeton.edu/%7Edpw/courses/cos326-12/info.php">COS 326</a> <strong>Functional Programming</strong> <em>Princeton University</em> <img src="https://assets-cdn.github.com/images/icons/emoji/unicode/1f4bb.png" width="20" height="20" alt="Assignments" title="Assignments"> <img src="https://assets-cdn.github.com/images/icons/emoji/unicode/1f4dd.png" width="20" height="20" alt="Lecture Notes" title="Lecture Notes">
<ul>
<li>Covers functional programming concepts like closures, tail-call recursion & parallelism using the OCaml programming language</li>
<li><a href="http://www.cs.princeton.edu/%7Edpw/courses/cos326-12/lectures.php">Lectures</a></li>
<li><a href="http://www.cs.princeton.edu/%7Edpw/courses/cos326-12/assignments.php">Assignments</a></li>
</ul>
</li>
<li>
<a href="https://web.stanford.edu/class/cs143/">CS 143</a> <strong>Compiler construction</strong> <em>Stanford University</em> <img src="https://assets-cdn.github.com/images/icons/emoji/unicode/1f4dd.png" width="20" height="20" alt="Lecture Notes" title="Lecture Notes"><img src="https://assets-cdn.github.com/images/icons/emoji/unicode/1f4bb.png" width="20" height="20" alt="Assignments" title="Assignments">
<ul>
<li>CS143 is a Stanford's course in the practical and theoretical aspects of compiler construction.</li>
<li><a href="https://web.stanford.edu/class/cs143/">Home</a></li>
<li><a href="https://web.stanford.edu/class/cs143/schedule.html">Syllabus</a></li>
<li><a href="https://web.stanford.edu/class/cs143/">Lectures</a></li>
<li><a href="https://web.stanford.edu/class/cs143/">Assignments</a></li>
<li><a href="http://www.keithschwarz.com/cs143/WWW/sum2011/">CS143 - 2011</a></li>
</ul>
</li>
<li>
<a href="https://sites.google.com/a/bodik.org/cs164/home">CS 164</a> <strong>Hack your language!</strong> <em>UC Berkeley</em> <img src="https://assets-cdn.github.com/images/icons/emoji/unicode/1f4f9.png" width="20" height="20" alt="Lecture Videos" title="Lecture Videos"> <img src="https://assets-cdn.github.com/images/icons/emoji/unicode/1f4bb.png" width="20" height="20" alt="Assignments" title="Assignments"> <img src="https://assets-cdn.github.com/images/icons/emoji/unicode/1f4dd.png" width="20" height="20" alt="Lecture Notes" title="Lecture Notes">
<ul>
<li>Introduction to programming languages by designing and implementing domain-specific languages.</li>
<li><a href="https://www.youtube.com/playlist?list=PL3A16CFC42CA6EF4F">Lecture Videos</a></li>
<li><a href="https://bitbucket.org/cs164_overlord/">Code for Assignments</a></li>
</ul>
</li>
<li>
<a href="http://cs.brown.edu/courses/cs173/2014/">CS 173</a> <strong>Programming Languages</strong> <em>Brown University</em> <img src="https://assets-cdn.github.com/images/icons/emoji/unicode/1f4f9.png" width="20" height="20" alt="Lecture Videos" title="Lecture Videos"> <img src="https://assets-cdn.github.com/images/icons/emoji/unicode/1f4bb.png" width="20" height="20" alt="Assignments" title="Assignments">
<ul>
<li>Course by Prof. Krishnamurthi (author of <a href="http://htdp.org/2003-09-26/Book/">HtDP</a>) and numerous other <a href="http://cs.brown.edu/courses/cs173/2012/book/">awesome</a> <a href="http://papl.cs.brown.edu/2014/index.html">books</a> on programming languages. Uses a custom designed <a href="http://www.pyret.org/">Pyret</a> programming language to teach the concepts. There was an <a href="http://cs.brown.edu/courses/cs173/2012/OnLine/">online class</a> hosted in 2012, which includes all lecture videos for you to enjoy.</li>
<li><a href="http://cs.brown.edu/courses/cs173/2012/Videos/">Videos</a></li>
<li><a href="http://cs.brown.edu/courses/cs173/2014/assignments.html">Assignments</a></li>
</ul>
</li>
<li>
<a href="https://www.classes.cs.uchicago.edu/archive/2015/winter/22300-1/">CS 223</a> <strong>Purely Functional Data Structures In Elm</strong> <em>University of Chicago</em> <img src="https://assets-cdn.github.com/images/icons/emoji/unicode/1f4bb.png" width="20" height="20" alt="Assignments" title="Assignments"> <img src="https://assets-cdn.github.com/images/icons/emoji/unicode/1f4dd.png" width="20" height="20" alt="Lecture Notes" title="Lecture Notes">
<ul>
<li>This course teaches functional reactive programming and purely functional data structures based on Chris Okazaki's book and using the Elm programming language.</li>
<li><a href="https://www.classes.cs.uchicago.edu/archive/2015/winter/22300-1/Schedule.html">Lectures</a></li>
<li><a href="https://www.classes.cs.uchicago.edu/archive/2015/winter/22300-1/Schedule.html">Assignments</a></li>
</ul>
</li>
<li>
<a href="http://www.scs.stanford.edu/14sp-cs240h/">CS 240h</a> <strong>Functional Systems in Haskell</strong> <em>Stanford University</em> <img src="https://assets-cdn.github.com/images/icons/emoji/unicode/1f4bb.png" width="20" height="20" alt="Assignments" title="Assignments"> <img src="https://assets-cdn.github.com/images/icons/emoji/unicode/1f4dd.png" width="20" height="20" alt="Lecture Notes" title="Lecture Notes">
<ul>
<li>Building software systems in Haskell</li>
<li><a href="http://www.scs.stanford.edu/14sp-cs240h/slides/">Lecture Slides</a></li>
<li>3 Assignments: <a href="http://www.scs.stanford.edu/14sp-cs240h/labs/lab1.html">Lab1</a>, <a href="http://www.scs.stanford.edu/14sp-cs240h/labs/lab2.html">Lab2</a>, <a href="http://www.scs.stanford.edu/14sp-cs240h/labs/lab3.html">Lab3</a>
</li>
</ul>
</li>
<li>
<a href="https://courses.engr.illinois.edu/cs421/fa2014/">CS 421</a> <strong>Programming Languages and Compilers</strong> <em>Univ of Illinois, Urbana-Champaign</em> <img src="https://assets-cdn.github.com/images/icons/emoji/unicode/1f4f9.png" width="20" height="20" alt="Lecture Videos" title="Lecture Videos"> <img src="https://assets-cdn.github.com/images/icons/emoji/unicode/1f4bb.png" width="20" height="20" alt="Assignments" title="Assignments"> <img src="https://assets-cdn.github.com/images/icons/emoji/unicode/1f4dd.png" width="20" height="20" alt="Lecture Notes" title="Lecture Notes">
Course that uses OCaml to teach functional programming and programming language design.
<ul>
<li><a href="https://courses.engr.illinois.edu/cs421/fa2014/lectures/index.html">Lectures</a></li>
<li><a href="http://recordings.engineering.illinois.edu/ess/portal/section/631edaeb-2a33-4537-b7c8-0c1cba783a4f">Videos</a></li>
<li><a href="https://courses.engr.illinois.edu/cs421/fa2014/mps/index.html">Assignments</a></li>
<li><a href="https://courses.engr.illinois.edu/cs421/fa2014/exams/index.html">Exams</a></li>
</ul>
</li>
<li>
<a href="http://www.cs.cornell.edu/Courses/cs3110/2014fa/course_info.php">CS 3110</a> <strong>Data Structures and Functional Programming</strong> <em>Cornell University</em> <img src="https://assets-cdn.github.com/images/icons/emoji/unicode/1f4bb.png" width="20" height="20" alt="Assignments" title="Assignments"> <img src="https://assets-cdn.github.com/images/icons/emoji/unicode/1f4dd.png" width="20" height="20" alt="Lecture Notes" title="Lecture Notes">
<ul>
<li>Another course that uses OCaml to teach alternative programming paradigms, especially functional and concurrent programming.</li>
<li><a href="http://www.cs.cornell.edu/Courses/cs3110/2014fa/lecture_notes.php">Lecture Slides</a></li>
<li><a href="http://www.cs.cornell.edu/Courses/cs3110/2014fa/">Assignments</a></li>
</ul>
</li>
<li>
<a href="http://www.cs.cornell.edu/courses/CS4120/2013fa/">CS 4120</a> <strong>Introduction to Compilers</strong> <em>Cornell University</em> <img src="https://assets-cdn.github.com/images/icons/emoji/unicode/1f4bb.png" width="20" height="20" alt="Assignments" title="Assignments"> <img src="https://assets-cdn.github.com/images/icons/emoji/unicode/1f4dd.png" width="20" height="20" alt="Lecture Notes" title="Lecture Notes"><img src="https://assets-cdn.github.com/images/icons/emoji/unicode/1f4da.png" width="20" height="20" alt="Readings" title="Readings">
<ul>
<li>An introduction to the specification and implementation of modern compilers. Topics covered include lexical scanning, parsing, type checking, code generation and translation, an introduction to optimization, and compile-time and run-time support for modern programming languages. As part of the course, students build a working compiler for an object-oriented language.</li>
<li><a href="http://www.cs.cornell.edu/courses/CS4120/2013fa/overview.html">Syllabus</a></li>
<li><a href="http://www.cs.cornell.edu/courses/CS4120/2013fa/schedule.html">Lectures</a></li>
<li><a href="http://www.cs.cornell.edu/courses/CS4120/2013fa/homework.html">Assignments</a></li>
</ul>
</li>
<li>
<a href="https://pl.barzilay.org/">CS 4400</a> <strong>Programming Languages</strong> <em>Northeastern University</em> <img src="https://assets-cdn.github.com/images/icons/emoji/unicode/1f4bb.png" width="20" height="20" alt="Assignments" title="Assignments"> <img src="https://assets-cdn.github.com/images/icons/emoji/unicode/1f4dd.png" width="20" height="20" alt="Lecture Notes" title="Lecture Notes"> <img src="https://assets-cdn.github.com/images/icons/emoji/unicode/1f4da.png" width="20" height="20" alt="Readings" title="Readings">
<ul>
<li>This is a course on the study, design, and implementation of programming languages.</li>
<li>The course works at two simultaneous levels: first, we will use a programming language that can demonstrate a wide variety of programming paradigms. Second, using this language, we will learn about the mechanics behind programming languages by implementing our own language(s). The two level approach usually means that we will often see how to use a certain feature, and continue by implementing it.</li>
<li><a href="https://pl.barzilay.org/syllabus.html">Syllabus</a></li>
<li><a href="https://pl.barzilay.org/resources.html">Lecture Notes/Resources</a></li>
<li><a href="https://pl.barzilay.org/homeworks.html">Homework</a></li>
</ul>
</li>
<li>
<a href="http://www.cs.virginia.edu/%7Eweimer/4610/">CS 4610</a> <strong>Programming Languages and Compilers</strong> <em>University of Virginia</em> <img src="https://assets-cdn.github.com/images/icons/emoji/unicode/1f4bb.png" width="20" height="20" alt="Assignments" title="Assignments"> <img src="https://assets-cdn.github.com/images/icons/emoji/unicode/1f4dd.png" width="20" height="20" alt="Lecture Notes" title="Lecture Notes">
<ul>
<li>Course that uses OCaml to teach functional programming and programming language design. Each assignment is a part of an interpreter and compiler for an object-oriented language similar to Java, and you are required to use a different language for each assignment (i.e., choose 4 from Python, JS, OCaml, Haskell, Ruby).</li>
<li><a href="http://www.cs.virginia.edu/%7Eweimer/4610/lectures.html">Lecture Notes</a></li>
<li><a href="http://www.cs.virginia.edu/%7Eweimer/4610/pa.html">Assignments</a></li>
</ul>
</li>
<li>
<a href="http://www.cs.cornell.edu/courses/CS5114/2013sp/index.php">CS 5114</a> <strong>Network Programming Languages</strong> <em>Cornell University</em> <img src="https://assets-cdn.github.com/images/icons/emoji/unicode/1f4dd.png" width="20" height="20" alt="Lecture Notes" title="Lecture Notes"><img src="https://assets-cdn.github.com/images/icons/emoji/unicode/1f4da.png" width="20" height="20" alt="Readings" title="Readings">
<ul>
<li>An introduction to the specification and implementation of modern compilers. Topics covered include lexical scanning, parsing, type checking, code generation and translation, an introduction to optimization, and compile-time and run-time support for modern programming languages. As part of the course, students build a working compiler for an object-oriented language.</li>
<li><a href="http://www.cs.cornell.edu/courses/CS5114/2013sp/syllabus.php">Syllabus</a></li>
<li><a href="http://www.cs.cornell.edu/courses/CS5114/2013sp/syllabus.php">Lectures</a></li>
</ul>
</li>
<li>
<a href="http://www.cs.cornell.edu/courses/CS5142/2013fa/">CS 5142</a> <strong>Scripting Languages</strong> <em>Cornell University</em> <img src="https://assets-cdn.github.com/images/icons/emoji/unicode/1f4dd.png" width="20" height="20" alt="Lecture Notes" title="Lecture Notes"><img src="https://assets-cdn.github.com/images/icons/emoji/unicode/1f4bb.png" width="20" height="20" alt="Assignments" title="Assignments">
<ul>
<li>Perl, PHP, JavaScript, VisualBasic -- they are often-requested skills for employment, but most of us do not have the time to find out what they are all about. In this course, you learn how to use scripting languages for rapid prototyping, web programming, data processing, and application extension. Besides covering traditional programming languages concepts as they apply to scripting (e.g., dynamic typing and scoping), this course looks at new concepts rarely found in traditional languages (e.g., string interpolation, hashes, and polylingual code). Through a series of small projects, you use different languages to achieve programming tasks that highlight the strengths and weaknesses of scripting. As a side effect, you practice teaching yourself new languages.</li>
<li><a href="http://www.cs.cornell.edu/courses/CS5142/2013fa/">Syllabus</a></li>
<li><a href="http://www.cs.cornell.edu/courses/CS5142/2013fa/#schedule">Lectures</a></li>
<li><a href="http://www.cs.cornell.edu/courses/CS5142/2013fa/#schedule">Assignments</a></li>
</ul>
</li>
<li>
<a href="http://matt.might.net/teaching/compilers/spring-2015/">CS 5470</a> <strong>Compilers</strong> <em>University of Utah</em> <img src="https://assets-cdn.github.com/images/icons/emoji/unicode/1f4bb.png" width="20" height="20" alt="Assignments" title="Assignments"> <img src="https://assets-cdn.github.com/images/icons/emoji/unicode/1f4dd.png" width="20" height="20" alt="Lecture Notes" title="Lecture Notes"> <img src="https://assets-cdn.github.com/images/icons/emoji/unicode/1f4da.png" width="20" height="20" alt="Readings" title="Readings">
<ul>
<li>If you're a fan of Prof Matt's writing on his <a href="http://matt.might.net/articles/">fantastic blog</a> you ought to give this a shot. The course covers the design and implementation of compilers, and it explores related topics such as interpreters, virtual machines and runtime systems. Aside from the Prof's witty take on <a href="http://matt.might.net/teaching/compilers/spring-2015/#collaboration">cheating</a> the page has tons of interesting links on programming languages, parsing and compilers.</li>
<li><a href="https://www.dropbox.com/sh/zanwtoflw4pcfu8/5pdT6axS3y">Lecture Notes</a></li>
<li><a href="http://matt.might.net/teaching/compilers/spring-2015/#projects">Projects</a></li>
</ul>
</li>
<li>
<a href="http://www.cs.cornell.edu/courses/CS6118/2012fa/">CS 6118</a> <strong>Types and Semantics</strong> <em>Cornell University</em> <img src="https://assets-cdn.github.com/images/icons/emoji/unicode/1f4dd.png" width="20" height="20" alt="Lecture Notes" title="Lecture Notes"><img src="https://assets-cdn.github.com/images/icons/emoji/unicode/1f4da.png" width="20" height="20" alt="Readings" title="Readings">
<ul>
<li>Types and Semantics is about designing and understand programming languages, whether they be domain specific or general purpose. The goal of this class is to provide a variety of tools for designing custom (programming) languages for whatever task is at hand. Part of that will be a variety of insights on how languages work along with experiences from working with academics and industry on creating new languages such as Ceylon and Kotlin. The class focuses on types and semantics and the interplay between them. This means category theory and constructive type theory (e.g. Coq and richer variations) are ancillary topics of the class. The class also covers unconventional semantic domains such as classical linear type theory in order to both break students from convential thinking and to provide powerful targets capable of formalizing thinks like networking protocols, resource-sensitive computation, and concurrency constructs. The class project is to design and formalize a (programming) language for a purpose of the student's choosing, and assignments are designed to ensure students have had a chance to practice applying the techniques learned in class before culminating these skills in the class project.</li>
<li><a href="http://www.cs.cornell.edu/courses/CS6118/2012fa/">Syllabus</a></li>
<li><a href="http://www.cs.cornell.edu/courses/CS6118/2012fa/">Lectures</a></li>
</ul>
</li>
<li>
<a href="http://pgbovine.net/cpython-internals.htm">CSC 253</a> <strong>CPython internals: A ten-hour codewalk through the Python interpreter source code</strong> <em>University of Rochester</em> <img src="https://assets-cdn.github.com/images/icons/emoji/unicode/1f4f9.png" width="20" height="20" alt="Lecture Videos" title="Lecture Videos"><img src="https://assets-cdn.github.com/images/icons/emoji/unicode/1f4da.png" width="20" height="20" alt="Readings" title="Readings">
<ul>
<li>Nine lectures walking through the internals of CPython, the canonical Python interpreter implemented in C. They were from the <em>Dynamic Languages and Software Development</em> course taught in Fall 2014 at the University of Rochester.</li>
</ul>
</li>
<li>
<a href="http://courses.cs.washington.edu/courses/cse341/16sp/">CSE 341</a> <strong>Programming Languages</strong> <em>University of Washington</em> <img src="https://assets-cdn.github.com/images/icons/emoji/unicode/1f4f9.png" width="20" height="20" alt="Lecture Videos" title="Lecture Videos"> <img src="https://assets-cdn.github.com/images/icons/emoji/unicode/1f4bb.png" width="20" height="20" alt="Assignments" title="Assignments"> <img src="https://assets-cdn.github.com/images/icons/emoji/unicode/1f4dd.png" width="20" height="20" alt="Lecture Notes" title="Lecture Notes">
<ul>
<li>Covers non-imperative paradigms and languages such as Ruby, Racket, and ML and the fundamentals of programming languages.</li>
<li><a href="https://courses.cs.washington.edu/courses/cse341/16sp/#lectures">Lectures and Videos</a></li>
<li><a href="https://courses.cs.washington.edu/courses/cse341/16sp/#homeworks">Assignments and Tests</a></li>
</ul>
</li>
<li>
<a href="http://courses.cs.washington.edu/courses/csep501/09au/lectures/video.html">CSE P 501</a> <strong>Compiler Construction</strong> <em>University of Washington</em> <img src="https://assets-cdn.github.com/images/icons/emoji/unicode/1f4f9.png" width="20" height="20" alt="Lecture Videos" title="Lecture Videos"> <img src="https://assets-cdn.github.com/images/icons/emoji/unicode/1f4bb.png" width="20" height="20" alt="Assignments" title="Assignments">
<ul>
<li>Teaches understanding of how a modern compiler is structured and the major algorithms that are used to translate code from high-level to machine language. The best way to do this is to actually build a working compiler, so there will be a significant project to implement one that translates programs written in a core subset of Java into executable x86 assembly language. The compilers themselves will use scanner and parser generator tools and the default implementation language is Java.</li>
<li><a href="http://courses.cs.washington.edu/courses/csep501/09au/lectures/video.html">Lectures</a></li>
<li><a href="http://courses.cs.washington.edu/courses/csep501/09au/homework/index.html">Assignments, Tests, and Solutions</a></li>
</ul>
</li>
<li>
<a href="http://cs.wheaton.edu/%7Etvandrun/dmfp/">DMFP</a> <strong>Discrete Mathematics and Functional Programming</strong> <em>Wheaton College</em> <img src="https://assets-cdn.github.com/images/icons/emoji/unicode/1f4f9.png" width="20" height="20" alt="Lecture Videos" title="Lecture Videos"> <img src="https://assets-cdn.github.com/images/icons/emoji/unicode/1f4bb.png" width="20" height="20" alt="Assignments" title="Assignments">
<ul>
<li>A course that teaches discrete maths concepts with functional programming</li>
<li><a href="http://cs.wheaton.edu/%7Etvandrun/dmfp/">Lecture Videos</a></li>
<li><a href="http://cs.wheaton.edu/%7Etvandrun/dmfp/source.html">Assignments</a></li>
</ul>
</li>
<li>
<a href="http://www.itu.dk/people/sestoft/itu/PCPP/E2015/">PCPP</a> <strong>Practical Concurrent and Parallel Programming</strong> <em>IT University of Copenhagen</em> <img src="https://assets-cdn.github.com/images/icons/emoji/unicode/1f4dd.png" width="20" height="20" alt="Lecture Notes" title="Lecture Notes"><img src="https://assets-cdn.github.com/images/icons/emoji/unicode/1f4bb.png" width="20" height="20" alt="Assignments" title="Assignments"><img src="https://assets-cdn.github.com/images/icons/emoji/unicode/1f4da.png" width="20" height="20" alt="Readings" title="Readings">
<ul>
<li>In this MSc course you learn how to write correct and efficient concurrent and parallel software, primarily using Java, on standard shared-memory multicore hardware.</li>
<li>The course covers basic mechanisms such as threads, locks and shared memory as well as more advanced mechanisms such as parallel streams for bulk data, transactional memory, message passing, and lock-free data structures with compare-and-swap.</li>
<li>It covers concepts such as atomicity, safety, liveness and deadlock.</li>
<li>It covers how to measure and understand performance and scalability of parallel programs.</li>
<li>It covers tools and methods to find bugs in concurrent programs.</li>
</ul>
</li>
<li>
<a href="https://groups.csail.mit.edu/mac/users/gjs/6.945/index.html">6.945</a> <strong>Adventures in Advanced Symbolic Programming</strong> <em>MIT</em> <img src="https://assets-cdn.github.com/images/icons/emoji/unicode/1f4dd.png" width="20" height="20" alt="Lecture Notes" title="Lecture Notes"><img src="https://assets-cdn.github.com/images/icons/emoji/unicode/1f4bb.png" width="20" height="20" alt="Assignments" title="Assignments"><img src="https://assets-cdn.github.com/images/icons/emoji/unicode/1f4da.png" width="20" height="20" alt="Readings" title="Readings">
<ul>
<li>Taught by Gerald Sussman of SICP fame, this class deals with concepts and techniques for the design an implementation of large software systems that can be adapted to uses not anticipated by the designer. Applications include compilers, computer-algebra systems, deductive systems, and some artificial intelligence applications.</li>
<li>
<a href="https://groups.csail.mit.edu/mac/users/gjs/6.945/assignments.html">Assignments</a>: Extensive programming assignments, using MIT/GNU Scheme. Students should have significant programming experience in Scheme, Common Lisp, Haskell, CAML or other "functional" language.</li>
<li><a href="https://groups.csail.mit.edu/mac/users/gjs/6.945/readings/">Readings</a></li>
</ul>
</li>
</ul>
<hr>
<h3>
<a id="algorithms" class="anchor" href="#algorithms" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>Algorithms</h3>
<ul>
<li>
<a href="http://cs61b.ug/sp16/">CS 61B</a> <strong>Data Structures</strong> <em>UC Berkeley</em> <img src="https://assets-cdn.github.com/images/icons/emoji/unicode/1f4f9.png" width="20" height="20" alt="Lecture Videos" title="Lecture Videos"> <img src="https://assets-cdn.github.com/images/icons/emoji/unicode/1f4bb.png" width="20" height="20" alt="Assignments" title="Assignments"> <img src="https://assets-cdn.github.com/images/icons/emoji/unicode/1f4dd.png" width="20" height="20" alt="Lecture Notes" title="Lecture Notes"> <img src="https://assets-cdn.github.com/images/icons/emoji/unicode/1f4da.png" width="20" height="20" alt="Readings" title="Readings">
<ul>
<li>In this course, you will study advanced programming techniques including data structures, encapsulation, abstract data types, interfaces, and algorithms for sorting and searching, and you will get a taste of “software engineering”—the design and implementation of large programs.</li>
<li>
<a href="http://datastructur.es/sp16/">Full Lecture Materials</a> Lecture of Spring 2016. This website contains full matrials including video links, labs, homeworks, projects. Very good for self-learner. Also a good start for Java. And it includes some other usefull resources for Java Documentation, Data Structure Resources, Git/GitHub and Java Development Resources. <a href="http://datastructur.es/sp16/resources.html">Resources</a>
</li>
<li>
<a href="http://www.cs.berkeley.edu/%7Ejrs/61b/lab/index.html">Labs</a> The link to labs and projects is included in the website.</li>
<li>
<a href="http://www.youtube.com/watch?v=frxF7Vs96YU&list=PLMM0a7ZGnITrgfhOxMNP7bpP4hhhKNY9s">Lecture Videos on Youtube</a> The link to videos is included in the website.</li>
</ul>
</li>
<li>
<a href="http://web.stanford.edu/class/cs97si/">CS 97SI</a> <strong>Introduction to Competitive Programming</strong> <em>Stanford University</em> <img src="https://assets-cdn.github.com/images/icons/emoji/unicode/1f4bb.png" width="20" height="20" alt="Assignments" title="Assignments"> <img src="https://assets-cdn.github.com/images/icons/emoji/unicode/1f4dd.png" width="20" height="20" alt="Lecture Notes" title="Lecture Notes">
<ul>
<li>Fantastic repository of theory and practice problems across various topics for students who are interested to participate in ACM-ICPC.</li>
<li><a href="http://stanford.edu/%7Eliszt90/acm/notebook.html">Lectures and Assignments</a></li>
</ul>
</li>
<li>
<a href="http://people.seas.harvard.edu/%7Eminilek/cs224/fall14/index.html">CS 224</a> <strong>Advanced Algorithms</strong> <em>Harvard University</em> <img src="https://assets-cdn.github.com/images/icons/emoji/unicode/1f4f9.png" width="20" height="20" alt="Lecture Videos" title="Lecture Videos"> <img src="https://assets-cdn.github.com/images/icons/emoji/unicode/1f4bb.png" width="20" height="20" alt="Assignments" title="Assignments"> <img src="https://assets-cdn.github.com/images/icons/emoji/unicode/1f4dd.png" width="20" height="20" alt="Lecture Notes" title="Lecture Notes">
<ul>
<li>CS 224 is an advanced course in algorithm design, and topics we will cover include the word RAM model, data structures, amortization, online algorithms, linear programming, semidefinite programming, approximation algorithms, hashing, randomized algorithms, fast exponential time algorithms, graph algorithms, and computational geometry.</li>
<li>
<a href="http://people.seas.harvard.edu/%7Eminilek/cs224/fall14/lec.html">Lecture Videos</a> (<a href="https://www.youtube.com/playlist?list=PL2SOU6wwxB0uP4rJgf5ayhHWgw7akUWSf">Youtube</a>)</li>
<li><a href="http://people.seas.harvard.edu/%7Eminilek/cs224/fall14/hmwk.html">Assignments</a></li>
</ul>
</li>
<li>
<a href="http://theory.stanford.edu/%7Etim/w16/w16.html">CS 261</a> <strong>A Second Course in Algorithms</strong> <em>Stanford University</em> <img src="https://assets-cdn.github.com/images/icons/emoji/unicode/1f4f9.png" width="20" height="20" alt="Lecture Videos" title="Lecture Videos"> <img src="https://assets-cdn.github.com/images/icons/emoji/unicode/1f4bb.png" width="20" height="20" alt="Assignments" title="Assignments"> <img src="https://assets-cdn.github.com/images/icons/emoji/unicode/1f4dd.png" width="20" height="20" alt="Lecture Notes" title="Lecture Notes">
<ul>
<li>Algorithms for network optimization: max-flow, min-cost flow, matching, assignment, and min-cut problems. Introduction to linear programming. Use of LP duality for design and analysis of algorithms. Approximation algorithms for NP-complete problems such as Steiner Trees, Traveling Salesman, and scheduling problems. Randomized algorithms. Introduction to online algorithms.</li>
<li>
<a href="http://theory.stanford.edu/%7Etim/w16/w16.html">Lecture Notes, Videos & Assignments</a> (<a href="https://www.youtube.com/playlist?list=PLEGCF-WLh2RJh2yDxlJJjnKswWdoO8gAc">Youtube</a>)</li>
</ul>
</li>
<li>
<a href="http://web.engr.illinois.edu/%7Ejeffe/teaching/algorithms/">CS 473/573</a> <strong>Fundamental Algorithms</strong> <em>Univ of Illinois, Urbana-Champaign</em> <img src="https://assets-cdn.github.com/images/icons/emoji/unicode/1f4bb.png" width="20" height="20" alt="Assignments" title="Assignments"> <img src="https://assets-cdn.github.com/images/icons/emoji/unicode/1f4dd.png" width="20" height="20" alt="Lecture Notes" title="Lecture Notes">
<ul>
<li>Algorithms class covering recursion, randomization, amortization, graph algorithms, network flows and hardness. The lecture notes by Prof. Erikson are comprehensive enough to be a book by themselves. Highly recommended!</li>
<li><a href="http://web.engr.illinois.edu/%7Ejeffe/teaching/algorithms/all-algorithms.pdf">Lecture Notes</a></li>
<li><a href="http://web.engr.illinois.edu/%7Ejeffe/teaching/algorithms/all-hwex.pdf">Labs and Exams</a></li>
</ul>
</li>
<li>
<a href="https://github.com/aaronbloomfield/pdr">CS 2150</a> <strong>Program & Data Representation</strong> <em>University of Virginia</em> <img src="https://assets-cdn.github.com/images/icons/emoji/unicode/1f4bb.png" width="20" height="20" alt="Assignments" title="Assignments"> <img src="https://assets-cdn.github.com/images/icons/emoji/unicode/1f4dd.png" width="20" height="20" alt="Lecture Notes" title="Lecture Notes">
<ul>
<li>This data structures course introduces C++, linked-lists, stacks, queues, trees, numerical representation, hash tables, priority queues, heaps, huffman coding, graphs, and x86 assembly.</li>
<li><a href="http://aaronbloomfield.github.io/pdr/slides/">Lectures</a></li>
<li><a href="http://aaronbloomfield.github.io/pdr/labs/">Assignments</a></li>
</ul>
</li>
<li>
<a href="http://www.cs.cornell.edu/courses/CS4820/2014sp/">CS 4820</a> <strong>Introduction to Analysis of Algorithms</strong> <em>Cornell University</em> <img src="https://assets-cdn.github.com/images/icons/emoji/unicode/1f4bb.png" width="20" height="20" alt="Assignments" title="Assignments"> <img src="https://assets-cdn.github.com/images/icons/emoji/unicode/1f4dd.png" width="20" height="20" alt="Lecture Notes" title="Lecture Notes"> <img src="https://assets-cdn.github.com/images/icons/emoji/unicode/1f4da.png" width="20" height="20" alt="Readings" title="Readings">
<ul>
<li> This course develops techniques used in the design and analysis of algorithms, with an emphasis on problems arising in computing applications. Example applications are drawn from systems and networks, artificial intelligence, computer vision, data mining, and computational biology. This course covers four major algorithm design techniques (greedy algorithms, divide and conquer, dynamic programming, and network flow), computability theory focusing on undecidability, computational complexity focusing on NP-completeness, and algorithmic techniques for intractable problems, including identification of structured special cases, approximation algorithms, and local search heuristics.</li>
<li><a href="http://www.cs.cornell.edu/courses/CS4820/2014sp/lectures/">Lectures</a></li>
<li><a href="http://www.cs.cornell.edu/courses/CS4820/2014sp/homework/">Assignments</a></li>
<li><a href="http://www.cs.cornell.edu/courses/CS4820/2014sp/syllabus/">Syllabus</a></li>
</ul>
</li>
<li>
<a href="http://www-scf.usc.edu/%7Ecsci104/20142/lectures/">CSCI 104</a> <strong>Data Structures and Object Oriented Design</strong> <img src="https://assets-cdn.github.com/images/icons/emoji/unicode/1f4bb.png" width="20" height="20" alt="Assignments" title="Assignments"> <img src="https://assets-cdn.github.com/images/icons/emoji/unicode/1f4dd.png" width="20" height="20" alt="Lecture Notes" title="Lecture Notes"> <em>University of Southern California (USC)</em>
<ul>
<li><a href="http://www-scf.usc.edu/%7Ecsci104/20142/lectures">Lectures</a></li>
<li><a href="http://www-scf.usc.edu/%7Ecsci104/20142/labs">Labs</a></li>
<li><a href="http://www-scf.usc.edu/%7Ecsci104/20142/assignments/">Assignments</a></li>
<li><a href="http://www-scf.usc.edu/%7Ecsci104/20142/resources.html">Additional Resources</a></li>
</ul>
</li>
<li>
<a href="http://compsci.hunter.cuny.edu/%7Esweiss/courses/csci135.php">CSCI 135</a> <strong>Software Design and Analysis I</strong> <img src="https://assets-cdn.github.com/images/icons/emoji/unicode/1f4bb.png" width="20" height="20" alt="Assignments" title="Assignments"> <img src="https://assets-cdn.github.com/images/icons/emoji/unicode/1f4dd.png" width="20" height="20" alt="Lecture Notes" title="Lecture Notes">
<em>CUNY Hunter College</em>
<ul>
<li>It is currently an intensive introduction to program development and problem solving. Its emphasis is on the process of designing, implementing, and evaluating small-scale programs. It is not supposed to be a C++ programming course, although much of the course is spent on the details of C++. C++ is an extremely large and complex programming language with many features that interact in unexpected ways. One does not need to know even half of the language to use it well.</li>
<li><a href="http://compsci.hunter.cuny.edu/%7Esweiss/course_materials/csci135/csci135_36_fall12.php">Lectures and Assignments</a></li>
</ul>
</li>
<li>
<a href="http://compsci.hunter.cuny.edu/%7Esweiss/courses/csci235.php">CSCI 235</a> <strong>Software Design and Analysis II</strong> <em>CUNY Hunter College</em> <img src="https://assets-cdn.github.com/images/icons/emoji/unicode/1f4bb.png" width="20" height="20" alt="Assignments" title="Assignments"> <img src="https://assets-cdn.github.com/images/icons/emoji/unicode/1f4dd.png" width="20" height="20" alt="Lecture Notes" title="Lecture Notes">
<ul>
<li>Introduces algorithms for a few common problems such as sorting. Practically speaking, it furthers the students' programming skills with topics such as recursion, pointers, and exception handling, and provides a chance to improve software engineering skills and to give the students practical experience for more productive programming.</li>
<li><a href="http://compsci.hunter.cuny.edu/%7Esweiss/course_materials/csci235/csci235_f14.php">Lectures and Assignments</a></li>
</ul>
</li>
<li>
<a href="http://compsci.hunter.cuny.edu/%7Esweiss/courses/csci335.php">CSCI 335</a> <strong>Software Design and Analysis III</strong> <img src="https://assets-cdn.github.com/images/icons/emoji/unicode/1f4bb.png" width="20" height="20" alt="Assignments" title="Assignments"> <img src="https://assets-cdn.github.com/images/icons/emoji/unicode/1f4dd.png" width="20" height="20" alt="Lecture Notes" title="Lecture Notes">
<em>CUNY Hunter College</em>
<ul>
<li>This includes the introduction of hashes, heaps, various forms of trees, and graphs. It also revisits recursion and the sorting problem from a higher perspective than was presented in the prequels. On top of this, it is intended to introduce methods of algorithmic analysis.</li>
<li><a href="http://compsci.hunter.cuny.edu/%7Esweiss/course_materials/csci335/csci335_s14.php">Lectures and Assignments</a></li>
</ul>
</li>
<li>
<a href="http://courses.cs.washington.edu/courses/cse331/15sp/">CSE 331</a> <strong>Software Design and Implementation</strong> <em>University of Washington</em> <img src="https://assets-cdn.github.com/images/icons/emoji/unicode/1f4bb.png" width="20" height="20" alt="Assignments" title="Assignments"> <img src="https://assets-cdn.github.com/images/icons/emoji/unicode/1f4dd.png" width="20" height="20" alt="Lecture Notes" title="Lecture Notes">
<ul>
<li>Explores concepts and techniques for design and construction of reliable and maintainable software systems in modern high-level languages; program structure and design; program-correctness approaches, including testing.</li>
<li><a href="http://courses.cs.washington.edu/courses/cse331/15sp/#all">Lectures, Assignments, and Exams</a></li>
</ul>
</li>
<li>
<a href="http://www3.cs.stonybrook.edu/%7Eskiena/373/">CSE 373</a> <strong>Analysis of Algorithms</strong> <em>Stony Brook University</em> <img src="https://assets-cdn.github.com/images/icons/emoji/unicode/1f4f9.png" width="20" height="20" alt="Lecture Videos" title="Lecture Videos"> <img src="https://assets-cdn.github.com/images/icons/emoji/unicode/1f4bb.png" width="20" height="20" alt="Assignments" title="Assignments"> <img src="https://assets-cdn.github.com/images/icons/emoji/unicode/1f4dd.png" width="20" height="20" alt="Lecture Notes" title="Lecture Notes"> <img src="https://assets-cdn.github.com/images/icons/emoji/unicode/1f4da.png" width="20" height="20" alt="Readings" title="Readings">
<ul>
<li>Prof Steven Skiena's no stranger to any student when it comes to algorithms. His seminal <a href="http://www.algorist.com/">book</a> has been touted by many to be best for <a href="http://steve-yegge.blogspot.com/2008/03/get-that-job-at-google.html">getting that job in Google</a>. In addition, he's also well-known for tutoring students in competitive <a href="http://www.programming-challenges.com/pg.php?page=index">programming competitions</a>. If you're looking to brush up your knowledge on Algorithms, you can't go wrong with this course.</li>
<li><a href="http://www.cs.sunysb.edu/%7Ealgorith/video-lectures/">Lecture Videos</a></li>
</ul>
</li>
<li>
<a href="http://web.cs.ucdavis.edu/%7Egusfield/cs122f10/">ECS 122A</a> <strong>Algorithm Design and Analysis</strong> <em>UC Davis</em> <img src="https://assets-cdn.github.com/images/icons/emoji/unicode/1f4f9.png" width="20" height="20" alt="Lecture Videos" title="Lecture Videos"> <img src="https://assets-cdn.github.com/images/icons/emoji/unicode/1f4bb.png" width="20" height="20" alt="Assignments" title="Assignments"> <img src="https://assets-cdn.github.com/images/icons/emoji/unicode/1f4dd.png" width="20" height="20" alt="Lecture Notes" title="Lecture Notes">
<ul>
<li>Taught by <a href="http://web.cs.ucdavis.edu/%7Egusfield/">Dan Gusfield</a> in 2010, this course is an undergraduate introduction to algorithm design and analysis. It features traditional topics, such as Big Oh notation, as well as an importance on implementing specific algorithms. Also featured are sorting (in linear time), graph algorithms, depth-first search, string matching, dynamic programming, NP-completeness, approximation, and randomization.</li>
<li><a href="http://web.cs.ucdavis.edu/%7Egusfield/cs122f10/syll122.pdf">Syllabus</a></li>
<li><a href="http://web.cs.ucdavis.edu/%7Egusfield/cs122f10/videolist.html">Lecture Videos</a></li>
<li><a href="http://web.cs.ucdavis.edu/%7Egusfield/cs122f10/">Assignments</a></li>
</ul>
</li>
<li>
<a href="http://web.cs.ucdavis.edu/%7Egusfield/cs222w11/">ECS 222A</a> <strong>Graduate Level Algorithm Design and Analysis</strong> <em>UC Davis</em> <img src="https://assets-cdn.github.com/images/icons/emoji/unicode/1f4f9.png" width="20" height="20" alt="Lecture Videos" title="Lecture Videos"> <img src="https://assets-cdn.github.com/images/icons/emoji/unicode/1f4bb.png" width="20" height="20" alt="Assignments" title="Assignments"> <img src="https://assets-cdn.github.com/images/icons/emoji/unicode/1f4dd.png" width="20" height="20" alt="Lecture Notes" title="Lecture Notes">
<ul>
<li>This is the graduate level complement to the ECS 122A undergraduate algorithms course by <a href="http://web.cs.ucdavis.edu/%7Egusfield/">Dan Gusfield</a> in 2011. It assumes an undergrad course has already been taken in algorithms, and, while going over some undergraduate algorithms topics, focuses more on increasingly complex and advanced algorithms.</li>
<li><a href="http://web.cs.ucdavis.edu/%7Egusfield/cs222f07/videolist.html">Lecture Videos</a></li>
<li><a href="http://web.cs.ucdavis.edu/%7Egusfield/cs222w11/syll11.pdf">Syllabus</a></li>
<li><a href="http://web.cs.ucdavis.edu/%7Egusfield/cs222w11/">Assignments</a></li>
</ul>
</li>
<li>
<a href="http://courses.csail.mit.edu/iap/interview/index.php">6.INT</a> <strong>Hacking a Google Interview</strong> <em>MIT</em> <img src="https://assets-cdn.github.com/images/icons/emoji/unicode/1f4da.png" width="20" height="20" alt="Readings" title="Readings">
<ul>
<li>This course taught in the MIT Independent Activities Period in 2009 goes over common solution to common interview questions for software engineer interviews at highly selective companies like Apple, Google, and Facebook. They cover time complexity, hash tables, binary search trees, and other common algorithm topics you should have already covered in a different course, but goes more in depth on things you wouldn't otherwise learn in class- like bitwise logic and problem solving tricks.</li>
<li><a href="http://courses.csail.mit.edu/iap/interview/materials.php">Handouts</a></li>
<li><a href="http://courses.csail.mit.edu/iap/interview/calendar.php">Topics Covered</a></li>
</ul>
</li>
<li>
<a href="https://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-006-introduction-to-algorithms-fall-2011/index.htm">6.006</a> <strong>Introduction to Algorithms</strong> <em>MIT</em> <img src="https://assets-cdn.github.com/images/icons/emoji/unicode/1f4f9.png" width="20" height="20" alt="Lecture Videos" title="Lecture Videos"><img src="https://assets-cdn.github.com/images/icons/emoji/unicode/1f4bb.png" width="20" height="20" alt="Assignments" title="Assignments"> <img src="https://assets-cdn.github.com/images/icons/emoji/unicode/1f4da.png" width="20" height="20" alt="Readings" title="Readings">
<ul>
<li>This course provides an introduction to mathematical modeling of computational problems. It covers the common algorithms, algorithmic paradigms, and data structures used to solve these problems. The course emphasizes the relationship between algorithms and programming, and introduces basic performance measures and analysis techniques for these problems. This course provides an introduction to mathematical modeling of computational problems. It covers the common algorithms, algorithmic paradigms, and data structures used to solve these problems. The course emphasizes the relationship between algorithms and programming, and introduces basic performance measures and analysis techniques for these problems.</li>
<li><a href="http://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-006-introduction-to-algorithms-fall-2011/lecture-videos/">Lecture Videos</a></li>
<li><a href="http://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-006-introduction-to-algorithms-fall-2011/assignments/">Assignments</a></li>
<li><a href="http://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-006-introduction-to-algorithms-fall-2011/readings/">Readings</a></li>
<li><a href="http://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-006-introduction-to-algorithms-fall-2011/download-course-materials/">Resources</a></li>
<li><a href="http://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-006-introduction-to-algorithms-fall-2011/exams/">Old Exams</a></li>
</ul>
</li>
<li>
<a href="http://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-046j-design-and-analysis-of-algorithms-spring-2015/index.htm">6.046J/18.410J</a> <strong>Design and Analysis of Algorithms</strong> <em>MIT</em> <img src="https://assets-cdn.github.com/images/icons/emoji/unicode/1f4f9.png" width="20" height="20" alt="Lecture Videos" title="Lecture Videos"><img src="https://assets-cdn.github.com/images/icons/emoji/unicode/1f4dd.png" width="20" height="20" alt="Lecture Notes" title="Lecture Notes"> <img src="https://assets-cdn.github.com/images/icons/emoji/unicode/1f4bb.png" width="20" height="20" alt="Assignments" title="Assignments"> <img src="https://assets-cdn.github.com/images/icons/emoji/unicode/1f4da.png" width="20" height="20" alt="Readings" title="Readings">
<ul>
<li>This is an intermediate algorithms course with an emphasis on teaching techniques for the design and analysis of efficient algorithms, emphasizing methods of application. Topics include divide-and-conquer, randomization, dynamic programming, greedy algorithms, incremental improvement, complexity, and cryptography. This course assumes that students know how to analyze simple algorithms and data structures from having taken <a href="http://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-006-introduction-to-algorithms-fall-2011/">6.006</a>. It introduces students to the design of computer algorithms, as well as analysis of sophisticated algorithms.</li>
<li><a href="http://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-046j-design-and-analysis-of-algorithms-spring-2015/lecture-videos/">Lecture Videos</a></li>
<li><a href="http://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-046j-design-and-analysis-of-algorithms-spring-2015/lecture-notes/">Lecture Notes</a></li>
<li><a href="http://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-046j-design-and-analysis-of-algorithms-spring-2015/assignments/">Assignments</a></li>
<li><a href="http://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-046j-design-and-analysis-of-algorithms-spring-2015/download-course-materials/">Resources</a></li>
<li><a href="http://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-046j-design-and-analysis-of-algorithms-spring-2015/exams/">Old Exams</a></li>
</ul>
</li>
<li>
<a href="http://courses.csail.mit.edu/6.851/spring14/index.html">6.851</a> <strong>Advanced Data Structures</strong> <em>MIT</em> <img src="https://assets-cdn.github.com/images/icons/emoji/unicode/1f4f9.png" width="20" height="20" alt="Lecture Videos" title="Lecture Videos"> <img src="https://assets-cdn.github.com/images/icons/emoji/unicode/1f4bb.png" width="20" height="20" alt="Assignments" title="Assignments"> <img src="https://assets-cdn.github.com/images/icons/emoji/unicode/1f4dd.png" width="20" height="20" alt="Lecture Notes" title="Lecture Notes">
<ul>
<li>This is an advanced DS course, you must be done with the <a href="http://courses.csail.mit.edu/6.854/current/">Advanced Algorithms</a> course before attempting this one.</li>
<li>
<a href="http://courses.csail.mit.edu/6.851/spring14/lectures/">Lectures</a> Contains videos from sp2012 version, but there isn't much difference.</li>
<li>
<a href="http://courses.csail.mit.edu/6.851/spring14/hmwk.html">Assignments</a> contains the calendar as well.</li>
</ul>
</li>
<li>
<a href="http://courses.csail.mit.edu/6.854/current/">6.854/18.415J</a> <strong>Advanced Algorithms</strong> <em>MIT</em> <img src="https://assets-cdn.github.com/images/icons/emoji/unicode/1f4f9.png" width="20" height="20" alt="Lecture Videos" title="Lecture Videos"> <img src="https://assets-cdn.github.com/images/icons/emoji/unicode/1f4bb.png" width="20" height="20" alt="Assignments" title="Assignments"> <img src="https://assets-cdn.github.com/images/icons/emoji/unicode/1f4dd.png" width="20" height="20" alt="Lecture Notes" title="Lecture Notes">
<ul>
<li>Advanced course in algorithms by Dr. David Karger covering topics such as amortization, randomization, fingerprinting, word-level parallelism, bit scaling, dynamic programming, network flow, linear programming, fixed-parameter algorithms, and approximation algorithms.</li>
<li>
<strong>Register</strong> on <a href="http://nb.mit.edu/subscribe?key=D3a8CYpoO2VcR1ZcfaxmR5KbyjCGXd3INNXvL3mxEakYJ7qGJw">NB</a> to access the <a href="http://nb.mit.edu/">problem set and lectures</a>.</li>
</ul>
</li>
<li>
<a href="http://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-854j-advanced-algorithms-fall-2005/index.htm">6.854J/18.415J</a> <strong>Advanced Algorithms</strong> <em>MIT</em> <img src="https://assets-cdn.github.com/images/icons/emoji/unicode/1f4dd.png" width="20" height="20" alt="Lecture Notes" title="Lecture Notes"><img src="https://assets-cdn.github.com/images/icons/emoji/unicode/1f4bb.png" width="20" height="20" alt="Assignments" title="Assignments"> <img src="https://assets-cdn.github.com/images/icons/emoji/unicode/1f4da.png" width="20" height="20" alt="Readings" title="Readings">
<ul>
<li>This course is a first-year graduate course in algorithms. Emphasis is placed on fundamental algorithms and advanced methods of algorithmic design, analysis, and implementation. Techniques to be covered include amortization, randomization, fingerprinting, word-level parallelism, bit scaling, dynamic programming, network flow, linear programming, fixed-parameter algorithms, and approximation algorithms. Domains include string algorithms, network optimization, parallel algorithms, computational geometry, online algorithms, external memory, cache, and streaming algorithms, and data structures. The need for efficient algorithms arises in nearly every area of computer science. But the type of problem to be solved, the notion of what algorithms are "efficient,'' and even the model of computation can vary widely from area to area. In this second class in algorithms, we will survey many of the techniques that apply broadly in the design of efficient algorithms, and study their application in a wide range of application domains and computational models. The goal is for the class to be broad rather than deep. Our plan is to touch upon the following areas. This is a tentative list of topics that might be covered in the class; we will select material adaptively based on the background, interests, and rate of progress of the students.</li>
<li><a href="https://www.youtube.com/playlist?list=PL6ogFv-ieghdoGKGg2Bik3Gl1glBTEu8c">Lecture Videos - Spring 2016</a></li>
<li><a href="http://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-854j-advanced-algorithms-fall-2005/lecture-notes/">Lecture Notes</a></li>
<li><a href="http://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-854j-advanced-algorithms-fall-2005/assignments/">Assignments</a></li>
<li><a href="http://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-854j-advanced-algorithms-fall-2005/readings/">Readings</a></li>
<li><a href="http://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-854j-advanced-algorithms-fall-2005/download-course-materials/">Resources</a></li>
</ul>
</li>
<li>
<a href="http://www.cs.cmu.edu/afs/cs/academic/class/15451-f10/www/">15-451/651</a> <strong>Algorithms</strong> <em>Carnegie Mellon University</em> <img src="https://assets-cdn.github.com/images/icons/emoji/unicode/1f4dd.png" width="20" height="20" alt="Lecture Notes" title="Lecture Notes">
<ul>
<li>The required algorithms class that go in depth into all basic algorithms and the proofs behind them. This is one of the heavier algorithms curriculums on this page. Taught by Avrim Blum and <a href="http://en.wikipedia.org/wiki/Manuel_Blum">Manuel Blum</a> who has a Turing Award due to his contributions to algorithms. Course link includes a very comprehensive set of reference notes by Avrim Blum.</li>
</ul>
</li>
<li>
<a href="http://www.cs.virginia.edu/%7Eshelat/16s-4102/">16s-4102</a> <strong>Algorithms</strong> <em>University of Virginia</em> <img src="https://assets-cdn.github.com/images/icons/emoji/unicode/1f4f9.png" width="20" height="20" alt="Lecture Videos" title="Lecture Videos"> <img src="https://assets-cdn.github.com/images/icons/emoji/unicode/1f4bb.png" width="20" height="20" alt="Assignments" title="Assignments">
<ul>
<li>
<a href="http://www.cs.virginia.edu/%7Eshelat/16s-4102/">Lecture Videos & Homeworks</a> (<a href="https://www.youtube.com/channel/UCxXYk53cSZof2bR_Ax0uJYQ/videos">Youtube</a>)</li>
</ul>
</li>
</ul>
<hr>
<h3>
<a id="cs-theory" class="anchor" href="#cs-theory" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>CS Theory</h3>
<ul>
<li>
<a href="http://www.seas.upenn.edu/%7Ecis500/cis500-f14/index.html">CIS 500</a> <strong>Software Foundations</strong> <em>University of Pennsylvania</em> <img src="https://assets-cdn.github.com/images/icons/emoji/unicode/1f4bb.png" width="20" height="20" alt="Assignments" title="Assignments"> <img src="https://assets-cdn.github.com/images/icons/emoji/unicode/1f4dd.png" width="20" height="20" alt="Lecture Notes" title="Lecture Notes">
<ul>
<li>An introduction to formal verification of software using the Coq proof assistant. Topics include basic concepts of logic, computer-assisted theorem proving, functional programming, operational semantics, Hoare logic, and static type systems.</li>
<li><a href="http://www.seas.upenn.edu/%7Ecis500/cis500-f14/index.html#schedule">Lectures and Assignments</a></li>
<li><a href="http://www.cis.upenn.edu/%7Ebcpierce/sf/current/index.html">Textbook</a></li>
</ul>
</li>
<li>
<a href="http://web.stanford.edu/class/cs103/">CS 103</a> <strong>Mathematical Foundations of Computing</strong> <em>Stanford University</em> <img src="https://assets-cdn.github.com/images/icons/emoji/unicode/1f4bb.png" width="20" height="20" alt="Assignments" title="Assignments"> <img src="https://assets-cdn.github.com/images/icons/emoji/unicode/1f4dd.png" width="20" height="20" alt="Lecture Notes" title="Lecture Notes">
<ul>
<li> CS103 is a first course in discrete math, computability theory, and complexity theory. In this course, we'll probe the limits of computer power, explore why some problems are harder to solve than others, and see how to reason with mathematical certainty.</li>
<li> Links to all lectures notes and assignments are directly on the course page</li>
</ul>
</li>
<li>
<a href="https://courses.engr.illinois.edu/cs173/fa2014/A-lecture/index.html">CS 173</a> <strong>Discrete Structures</strong> <em>Univ of Illinois Urbana-Champaign</em> <img src="https://assets-cdn.github.com/images/icons/emoji/unicode/1f4bb.png" width="20" height="20" alt="Assignments" title="Assignments"> <img src="https://assets-cdn.github.com/images/icons/emoji/unicode/1f4dd.png" width="20" height="20" alt="Lecture Notes" title="Lecture Notes"> <img src="https://assets-cdn.github.com/images/icons/emoji/unicode/1f4da.png" width="20" height="20" alt="Readings" title="Readings">
<ul>
<li>This course is an introduction to the theoretical side of computer science. In it, you will learn how to construct proofs, read and write literate formal mathematics, get a quick introduction to key theory topics and become familiar with a range of standard mathematics concepts commonly used in computer science.</li>
<li>
<a href="http://web.engr.illinois.edu/%7Emfleck/building-blocks/">Textbook</a> Written by the professor. Includes Instructor's Guide.</li>
<li><a href="https://courses.engr.illinois.edu/cs173/fa2014/A-lecture/Homework/index.html">Assignments</a></li>
<li><a href="https://courses.engr.illinois.edu/cs173/fa2014/A-lecture/Exams/index.html">Exams</a></li>
</ul>
</li>
<li>
<a href="http://www.cs.berkeley.edu/%7Esanjamg/classes/cs276-fall14/">CS 276</a> <strong>Foundations of Cryptography</strong> <em>UC Berkeley</em> <img src="https://assets-cdn.github.com/images/icons/emoji/unicode/1f4dd.png" width="20" height="20" alt="Lecture Notes" title="Lecture Notes">
<ul>
<li>This course discusses the complexity-theory foundations of modern cryptography, and looks at recent results in the field such as Fully Homomorphic Encryption, Indistinguishability Obfuscation, MPC and so on.</li>
</ul>
</li>
<li>
<a href="http://www.cs.berkeley.edu/%7Eluca/cs278-08/">CS 278</a> <strong>Complexity Theory</strong> <em>UC Berkeley</em> <img src="https://assets-cdn.github.com/images/icons/emoji/unicode/1f4dd.png" width="20" height="20" alt="Lecture Notes" title="Lecture Notes">
<ul>
<li>A graduate level course on complexity theory that introduces P vs NP, the power of randomness, average-case complexity, hardness of approximation, and so on.</li>
</ul>
</li>
<li>
<a href="https://courses.engr.illinois.edu/cs498374/fa2014/">CS 374</a> <strong>Algorithms & Models of Computation (Fall 2014)</strong> <em>University of Illinois Urbana-Champaign</em> <img src="https://assets-cdn.github.com/images/icons/emoji/unicode/1f4f9.png" width="20" height="20" alt="Lecture Videos" title="Lecture Videos"> <img src="https://assets-cdn.github.com/images/icons/emoji/unicode/1f4bb.png" width="20" height="20" alt="Assignments" title="Assignments"> <img src="https://assets-cdn.github.com/images/icons/emoji/unicode/1f4dd.png" width="20" height="20" alt="Lecture Notes" title="Lecture Notes">
<ul>
<li>CS 498 section 374 (unofficially "CS 374") covers fundamental tools and techniques from theoretical computer science, including design and analysis of algorithms, formal languages and automata, computability, and complexity. Specific topics include regular and context-free languages, finite-state automata, recursive algorithms (including divide and conquer, backtracking, dynamic programming, and greedy algorithms), fundamental graph algorithms (including depth- and breadth-first search, topological sorting, minimum spanning trees, and shortest paths), undecidability, and NP-completeness. The course also has a strong focus on clear technical communication.</li>
<li><a href="https://courses.engr.illinois.edu/cs498374/fa2014/work.html">Assignments/Exams</a></li>
<li><a href="https://courses.engr.illinois.edu/cs498374/fa2014/lectures.html">Lecture Notes/Labs</a></li>
<li><a href="http://recordings.engineering.illinois.edu/ess/portal/section/115f3def-7371-4e98-b72f-6efe53771b2a">Lecture videos</a></li>
</ul>
</li>
<li>
<a href="http://www.cs.cornell.edu/courses/CS3110/2014fa/">CS 3110</a> <strong>Data Structures and Functional Programming</strong> <em>Cornell University</em> <img src="https://assets-cdn.github.com/images/icons/emoji/unicode/1f4bb.png" width="20" height="20" alt="Assignments" title="Assignments"> <img src="https://assets-cdn.github.com/images/icons/emoji/unicode/1f4dd.png" width="20" height="20" alt="Lecture Notes" title="Lecture Notes"><img src="https://assets-cdn.github.com/images/icons/emoji/unicode/1f4da.png" width="20" height="20" alt="Readings" title="Readings">
<ul>
<li>CS 3110 (formerly CS 312) is the third programming course in the Computer Science curriculum, following CS 1110/1112 and CS 2110. The goal of the course is to help students become excellent programmers and software designers who can design and implement software that is elegant, efficient, and correct, and whose code can be maintained and reused.</li>
<li><a href="http://www.cs.cornell.edu/courses/CS3110/2014fa/course_info.php">Syllabus</a></li>
<li><a href="http://www.cs.cornell.edu/courses/CS3110/2014fa/lecture_notes.php">Lectures</a></li>
<li><a href="http://www.cs.cornell.edu/courses/CS3110/2014fa/index.php">Assignments</a></li>
</ul>
</li>
<li>
<a href="http://www.cs.cornell.edu/%7Ebindel/class/cs3220-s12/">CS 3220</a> <strong>Introduction to Scientific Computing</strong> <em>Cornell University</em> <img src="https://assets-cdn.github.com/images/icons/emoji/unicode/1f4bb.png" width="20" height="20" alt="Assignments" title="Assignments"> <img src="https://assets-cdn.github.com/images/icons/emoji/unicode/1f4dd.png" width="20" height="20" alt="Lecture Notes" title="Lecture Notes"><img src="https://assets-cdn.github.com/images/icons/emoji/unicode/1f4da.png" width="20" height="20" alt="Readings" title="Readings">
<ul>
<li>In this one-semester survey course, we introduce numerical methods for solving linear and nonlinear equations, interpolating data, computing integrals, and solving differential equations, and we describe how to use these tools wisely (we hope!) when solving scientific problems.</li>
<li><a href="http://www.cs.cornell.edu/%7Ebindel/class/cs3220-s12/syllabus.html">Syllabus</a></li>
<li><a href="http://www.cs.cornell.edu/%7Ebindel/class/cs3220-s12/lectures.html">Lectures</a></li>
<li><a href="http://www.cs.cornell.edu/%7Ebindel/class/cs3220-s12/assignments.html">Assignments</a></li>
</ul>
</li>
<li>
<a href="http://www.cs.cornell.edu/courses/CS4300/2013fa/">CS 4300</a> <strong>Information Retrieval</strong> <em>Cornell University</em> <img src="https://assets-cdn.github.com/images/icons/emoji/unicode/1f4bb.png" width="20" height="20" alt="Assignments" title="Assignments"> <img src="https://assets-cdn.github.com/images/icons/emoji/unicode/1f4dd.png" width="20" height="20" alt="Lecture Notes" title="Lecture Notes"><img src="https://assets-cdn.github.com/images/icons/emoji/unicode/1f4da.png" width="20" height="20" alt="Readings" title="Readings">
<ul>
<li>Studies the methods used to search for and discover information in large-scale systems. The emphasis is on information retrieval applied to textual materials, but there is some discussion of other formats.The course includes techniques for searching, browsing, and filtering information and the use of classification systems and thesauruses. The techniques are illustrated with examples from web searching and digital libraries.</li>
<li><a href="http://www.cs.cornell.edu/courses/CS4300/2013fa/lectures/introduction.pdf">Syllabus</a></li>
<li><a href="http://www.cs.cornell.edu/courses/CS4300/2013fa/lectures.htm">Lectures</a></li>
<li><a href="http://www.cs.cornell.edu/courses/CS4300/2013fa/lectures.htm">Assignments</a></li>
</ul>
</li>
<li>
<a href="http://www.cs.cornell.edu/%7Edsteurer/toc13/">CS 4810</a> <strong>Introduction to Theory of Computing</strong> <em>Cornell University</em> <img src="https://assets-cdn.github.com/images/icons/emoji/unicode/1f4bb.png" width="20" height="20" alt="Assignments" title="Assignments"> <img src="https://assets-cdn.github.com/images/icons/emoji/unicode/1f4dd.png" width="20" height="20" alt="Lecture Notes" title="Lecture Notes"> <img src="https://assets-cdn.github.com/images/icons/emoji/unicode/1f4da.png" width="20" height="20" alt="Readings" title="Readings">
<ul>
<li> This undergraduate course provides a broad introduction to the mathematical foundations of computer science. We will examine basic computational models, especially Turing machines. The goal is to understand what problems can or cannot be solved in these models.</li>
<li><a href="http://www.cs.cornell.edu/%7Edsteurer/toc13/syllabus/">Syllabus</a></li>
<li><a href="http://www.cs.cornell.edu/%7Edsteurer/toc13/lectures/">Lectures</a></li>
<li><a href="http://www.cs.cornell.edu/%7Edsteurer/toc13/homework/">Assignments</a></li>
</ul>
</li>
<li>
<a href="http://www.cs.cornell.edu/%7Edsteurer/complexity12/">CS 6810</a> <strong>Theory of Computing</strong> <em>Cornell University</em> <img src="https://assets-cdn.github.com/images/icons/emoji/unicode/1f4bb.png" width="20" height="20" alt="Assignments" title="Assignments"> <img src="https://assets-cdn.github.com/images/icons/emoji/unicode/1f4dd.png" width="20" height="20" alt="Lecture Notes" title="Lecture Notes"> <img src="https://assets-cdn.github.com/images/icons/emoji/unicode/1f4da.png" width="20" height="20" alt="Readings" title="Readings">
<ul>
<li> This graduate course gives a broad introduction to complexity theory, including classical results and recent developments. Complexity theory aims to understand the power of efficient computation (when computational resources like time and space are limited). Many compelling conceptual questions arise in this context. Most of these questions are (surprisingly?) difficult and far from being resolved. Nevertheless, a lot of progress has been made toward understanding them (and also why they are difficult). We will learn about these advances in this course. A theme will be combinatorial constructions with random-like properties, e.g., expander graphs and error-correcting codes. Some examples:
<ul>
<li> Is finding a solution inherently more difficult than verifying it?</li>