-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathreadme.html
executable file
·2905 lines (2887 loc) · 221 KB
/
readme.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
---
layout: default
permalink: readme.html
---
<script>
$(".navbar-custom").css('background-color', '#272940');
</script>
<body>
<div id="readme" class="content">
<div class="abovetab">
<!-- <div>
<p class="c9 c51"><span class="c18 c48"></span></p>
</div>
<p class="c1 c9"><span class="c5"></span></p>
<p class="c1 c9"><span class="c5"></span></p>
<p class="c15 c9 title" id="h.wx1w83pc1n0c"><span class="c37 c43"></span></p> -->
<span class="above-tab-1">
<p class="c15 title" id="h.47q1ynmuqqow"><span class="c43">README</span><span class="c43 c49"> </span></p>
<!-- <p class="c1 c9"><span class="c49 c41 c60"></span></p> -->
<h1 class="c15" id="h.6cui3qtafuhl"><span class="c35">A Guide to Cornell Computer Science</span></h1>
<h1 class="c15" id="h.6cui3qtafuhl-1"><span class="c35">Written by Students for Students</span></h1>
<!-- <p class="c1 c9"><span class="c54 c57"></span></p> -->
<p class="c1"><span class="c12">2018 Edition</span></p>
</span>
<span class="above-tab-2">
<!-- <p class="c1 c9"><span class="c53"></span></p> -->
<p class="c1"><span style="overflow: hidden; display: inline-block; margin: 0.00px 0.00px; border: 0.00px solid #000000; transform: rotate(0.00rad) translateZ(0px); -webkit-transform: rotate(0.00rad) translateZ(0px); width: 205.50px; height: 208.07px;"><img
alt="" src="img/images/image2.png" style="width: 205.50px; height: 208.07px; margin-left: 0.00px; margin-top: 0.00px; transform: rotate(0.00rad) translateZ(0px); -webkit-transform: rotate(0.00rad) translateZ(0px);"
title=""></span></p>
</span>
<!-- <p class="c46 c9"><span class="c37 c11 c54"></span></p>
<p class="c46 c9"><span class="c37 c11 c54"></span></p>
<p class="c9 c46"><span class="c5"></span></p>
<p class="c1 c9"><span class="c5"></span></p>
<p class="c1 c9"><span class="c5"></span></p>
<hr style="page-break-before:always;display:none;">
<h1 class="c15 c22" id="h.8p781oy9pipo"><span class="c29"></span></h1>
<p class="c1 c9"><span class="c5"></span></p>
<h1 class="c15 c22" id="h.32x4g5m7t21n"><span class="c28"></span></h1>
<hr style="page-break-before:always;display:none;">
<h1 class="c15 c22" id="h.ubroe7q8rw7u"><span class="c28"></span></h1> -->
</div>
<div class="readme_table">
<div class="readme_tab">
<button class="tablinks" onclick="openCity(event, 'forward')" id="defaultOpen">Forward</button>
<button class="tablinks" onclick="openCity(event, 'faq')" id="defaultOpen">FAQ</button>
<button class="tablinks" onclick="openCity(event, 'gradschool')">Graduate School</button>
<button class="tablinks" onclick="openCity(event, 'courseinformation')">Course Information</button>
<button class="tablinks" onclick="openCity(event, 'relevantgroups')" id="defaultOpen">Relevant Groups</button>
<button class="tablinks" onclick="openCity(event, 'undergraduateresearch')">Undergraduate Research</button>
<button class="tablinks" onclick="openCity(event, 'testimonials')">Testimonials</button>
</div>
<!-- FORWARD -->
<div id="forward" class="readme_tabcontent">
<h1 class="c15" id="h.x1lrq2jypck"><span class="c28">FOREWORD</span></h1>
<p class="c1 c9"><span class="c5"></span></p>
<p class="c1"><span class="c5">In one fateful winter break, a few students involved with Association
for Computer Science Undergraduates (ACSU) wanted to provide a resource that not only addresses a
handful of frequently asked questions but also serves as a more comprehensive guide to the Computer
Science major at Cornell University than what the Unofficial CS Wiki offered. We hope that this guide
will (1) serve as one of the many useful resources that underclassmen can use to acclimate to Cornell
University as a CS major or minor and (2) be further improved by experienced upperclassmen who have
accumulated helpful perspectives being in Cornell’s CS community. </span></p>
<p class="c1 c9"><span class="c5"></span></p>
<p class="c1"><span class="c10">Disclaimer:</span><span class="c11"> This readme was written by
students and is not officially endorsed by the Cornell University Computer Science Department.
Although every effort was made to ensure the accuracy of its contents, we can make no guarantees.</span></p>
<p class="c0"><span class="c1"></span></p>
<h4 class="c15" id="h.lyv4vc168gbe"><span class="c11 c41">If you have any questions, comments, or
suggestions, please do not hesitate to email us at </span><span class="c7 c41"><a class="c0" href="mailto:[email protected]">
[email protected]</a></span><span class="c11 c41">!</span></h4>
<p class="c0"><span class="c1"></span></p>
<p class="c0"><span class="c28 c22 c37 c44"></span></p>
<h1 class="c31" id="h.8hdunkegmj5p"><span class="c32 c16"></span></h1>
<hr style="page-break-before:always;display:none;">
<h1 class="c31" id="h.uujhxrmtak3x"><span class="c16 c32"></span></h1>
</div>
<!-- FAQ -->
<div id="faq" class="readme_tabcontent">
<h1 class="c33" id="h.1yguotoepj2l"><span class="c28 c16 c55 c59">FREQUENTLY ASKED QUESTIONS</span></h1>
<section id="general">
<h2 class="c24" id="h.3qa5un1tk31t"><span class="c12">General</span></h2>
</section>
<h3 class="c35" id="h.sxxhtg9hqv8p"><span class="c6 c28">Are there any benefits of majoring in Computer Science
through the College of Arts and Sciences instead of the College of Engineering, and vice versa?</span></h3>
<p class="c2"><span class="c22">The general consensus for this question is that there is </span><span class="c13">no
significant difference</span><span class="c1">. There appear to be a lot of students asking this, and most
of
them seem to have the wrong impression that majoring in one college over another is more
“prestigious”; however, this is not the case. The only difference between the schools you major
from is all of the requirements outside of the Computer Science major. For example, the College of
Engineering requires students to take PHYS 1112 and 2213, whereas the College of A&S does not. However,
the College of A&S requires students to take a language course and fulfill other
“distribution” requirements. Yet, to complete the CS major, they need to take the same set of
core classes (CS 2800, CS 3110, CS 3410/3420, CS 4410, CS 4820), 3 4000-level CS classes, 3 external
specialization classes, and a few other requirements. </span></p>
<p class="c0"><span class="c1"></span></p>
<p class="c2"><span class="c22">It should also be noted that Engineering students graduate with a </span><span
class="c13">Bachelor of Science</span><span class="c22"> and Arts students graduate with a </span><span
class="c13">Bachelor of Arts.</span></p>
<p class="c0"><span class="c1"></span></p>
<p class="c2"><span class="c1">Some reasons that have been observed in the past to transfer from one school to
another are the following:</span></p>
<p class="c0"><span class="c1"></span></p>
<ul class="c9 lst-kix_7pgg30n2vrlt-0 start">
<li class="c2 c7"><span class="c1">a student in CALS (or any other college), who does not have a CS major,
transfers to CAS or CoE to earn a Computer Science major</span></li>
<li class="c2 c7"><span class="c1">a student with a lot of AP credits (say ones that fulfill PHYS 1112 and
PHYS
2213) cannot have them count towards graduation in one college (CAS), but can in another (CoE) </span></li>
<li class="c2 c7"><span class="c1">a student does not want to fulfill a certain requirement (does not want to
take a language class - go to CoE!, or hates Physics with an extreme passion - go to CAS!)</span></li>
<li class="c2 c7"><span class="c1">a student wants to double major in a field, but the second major is not
offered in the particular college they are currently affiliated with (e.g. Mathematics is offered as a
major in CAS but is not offered as a major in CoE) </span></li>
</ul>
<p class="c0"><span class="c1"></span></p>
<h3 class="c35" id="h.c82ljgxztc58"><span class="c6 c28">Do I NEED a Mac? Can I get by with a PC? Will my
choice
of laptop affect my ability to become a Computer Science major? Which laptop would you recommend to a
prospective CS major? </span></h3>
<p class="c2"><span class="c1">A CS major at Cornell University can DEFINITELY get by with either a PC or a
Mac.
If you have familiarity, Linux is also a perfectly workable option. Most classes use Virtual Machines to
provide students with the required software that is needed for the class. For classes that don’t,
their
course staff usually try their best to accommodate both. However, if you have interest in developing iPhone
applications, a Mac is the way to go. A Mac is also nice in that it has a Unix environment, which makes
many
kinds of development easier. Bearing all these in mind, however, most people choose based on their personal
preferences. </span></p>
<p class="c0"><span class="c1"></span></p>
<h3 class="c35" id="h.39lsf5pg8yv8"><span class="c6 c28">I don’t have prior CS knowledge; am I screwed?</span></h3>
<p class="c2"><span class="c1">Not at all! Although it is common for students to have had exposure to Computer
Science before their first year at Cornell, it is perfectly okay for students to have no prior experience
whatsoever. In fact, introductory classes such as CS 1110 and CS 1112 are geared towards students with no
prior background. There have been many students who excel as Computer Science majors at Cornell University
who had no experience before college, and you can be one of them!</span></p>
<p class="c0"><span class="c1"></span></p>
<h3 class="c35" id="h.s9r7624sgy7g"><span class="c6 c28">When should I affiliate? What are the benefits of
affiliating?</span></h3>
<p class="c2"><span class="c1">You should affiliate as soon as you are eligible if you have committed to the
major. For most students, applying for affiliation occurs during sophomore year, but in some cases
it’s
possible to affiliate even earlier. College of Engineering students have no choice but to apply before the
end of sophomore year or they will be withdrawn from the college, but CAS students are free to begin the
process during their fourth semester. You submit the paperwork to affiliate during the semester that you
take
the last of the required courses.</span></p>
<p class="c0"><span class="c1"></span></p>
<p class="c2"><span class="c1">The requirements for affiliation are as follows:</span></p>
<ul class="c9 lst-kix_ded4jiex5pw-0 start">
<li class="c2 c7"><span class="c1">cumulative GPA >= 2.0 (CoE-only requirement)</span></li>
<li class="c2 c7"><span class="c1">at least a C in all completed CS and math courses</span></li>
<li class="c2 c7"><span class="c1">GPA >= 2.5 in CS 2110/2112 and CS 2800</span></li>
<li class="c2 c7"><span class="c1">GPA >= 2.5 in MATH 1120/1220/1920 and CS 2800</span></li>
</ul>
<p class="c2"><span class="c22">If you don’t meet these requirements, don’t despair! Some
deficiencies can be offset by excelling in other areas. Check out the </span><span class="c14"><a class="c3"
href="https://www.google.com/url?q=http://www.cs.cornell.edu/undergrad/CSMajor%23csmajor&sa=D&ust=1522738116930000">CS
Major website</a></span>
<span class="c1"> for more information. </span>
</p>
<p class="c0"><span class="c1"></span></p>
<p class="c2"><span class="c1">It’s definitely good to affiliate by your third semester if you can; if
you
can’t, don’t worry too much about it. One of the few differences the timing can make is in
pre-enrolling for fourth semester classes. Many 4000+ level CS courses are available only to CS/IS majors
during pre-enroll, so there is a slight advantage to sophomores who are already affiliated by then. More
perks that are offered to CS majors are access to the undergraduate computing lab (UGClab) in Gates G33,
official access to the CIS undergraduate lab (although the door is usually open anyway), and CS-related
emails from the awesome Nicole Roy!</span></p>
<p class="c0"><span class="c1"></span></p>
<h3 class="c35 c46" id="h.103pgyf9rqr2"><span class="c6 c28"></span></h3>
<hr style="page-break-before:always;display:none;">
<h3 class="c35 c46" id="h.474gkpbciinm"><span class="c6 c28"></span></h3>
<h3 class="c35" id="h.ubfjg48rm35v"><span class="c6 c28">I want to double major; is this a good idea?</span></h3>
<p class="c2"><span class="c22">Double majoring for the sake of double majoring is not the best idea. You
should
do this only if you have vested interest in both subjects! Note that the Computer Science major offers good
opportunities for you to explore other subject areas through the External Specialization requirements, many
university-wide minors and probably </span>
<span class="c14"><a class="c3" href="https://www.google.com/url?q=https://www.cs.cornell.edu/undergrad/csmajor/technicalelectives&sa=D&ust=1522738116931000">technical
electives</a></span><span class="c1">. </span></p>
<p class="c0"><span class="c1"></span></p>
<p class="c2"><span class="c1">It is definitely good to decide the double majors as early as possible
(especially
with Computer Science) because then you can plan the courses ahead and don’t have to panic as you
become an upperclassman. </span></p>
<p class="c0"><span class="c1"></span></p>
<p class="c2"><span class="c1">For students with Computer Science major in College of Arts and Sciences, you
can
choose to count courses in a second major or minor as electives.</span></p>
<h2 class="c20" id="h.ymfec2pytlx3"><span class="c5"></span></h2>
<h2 class="c20" id="h.1u4rvi4w20mb"><span class="c12"></span></h2>
<hr style="page-break-before:always;display:none;">
<h2 class="c20" id="h.jves6dddcbtf"><span class="c12"></span></h2>
<section id="academics">
<h2 class="c24" id="h.96ceqki6p8h0"><span class="c12">Academics</span></h2>
</section>
<h3 class="c35" id="h.2q3hh8dfm6el"><span class="c6 c28">Should I take CS 1110 or CS 1112?</span></h3>
<p class="c2"><span class="c1">CS 1110 teaches you the basics of Computer Science in using the Python
programming
language, whereas CS 1112 teaches you the basics using the Matlab language. Because writing code in Python
is
less complex, more readable, and is easier to transition to learn how to write code in other popular
languages such as Java, most prospective CS majors elect to take CS 1110. However, CS 1112 would be a good
choice for students who are interested in classes associated with Computational Science & Engineering
(CS
4210, CS 4220) or have interest in other science fields outside of Computer Science because it is useful
for
mathematical computations. </span></p>
<h3 class="c35" id="h.1sd1bbo5y6ub"><span class="c6 c28">Should I take CS 2110 or CS 2112?</span></h3>
<p class="c2"><span class="c1">Both courses cover similar material. However, CS 2112 is well-known for its
extensive projects. If you are looking to getting experience on working on a significant codebase and have
the time to afford to, CS 2112 might be the course for you. Also there is an option to switch back to CS
2110
from CS 2112 within the first three weeks, so if you find the assignments and the overall pace of CS 2112
to
be a bit much, switching back to CS 2110 is always an option.</span></p>
<p class="c0"><span class="c1"></span></p>
<p class="c2"><span class="c1">With that said, CS 2110 also covers a significant breadth of material, and by
the
end of it, students should be exposed to a variety of technical concepts that are not only covered in other
higher-level CS courses but also prepare students to begin preparing for technical interviews. So in terms
of
the material covered, students enrolled in CS 2110 are not missing out on anything significant. For
students
who have taken CS 2110, they are generally able to invest more time into other courses as well, as CS
2110’s projects are not on the scale of CS 2112. </span></p>
<h3 class="c35" id="h.dsusaqhy96wq"><span class="c6 c28">Should I take CS 3410 or CS 3420 / ECE 3140?</span></h3>
<p class="c2"><span class="c1">This answer partially depends on whether you can fit ENGRD/ECE 2300 (a
prerequisite for 3420) into your schedule. Because CS majors in the College of Engineering are required to
take 2 engineering distributions, ENGRD/ECE 2300 is a popular choice due to its material being most
relevant
to the CS major out of other ENGRD options (the other being filled by ENGRD 2110 or ENGRD 2112, which is
required for the major). If you can manage to fit ENGRD/ECE 2300 into your schedule and want to avoid
overlapping content, taking CS 3420 (crosslisted as ECE 3140) may be the better option. However, if you
want
to reinforce the material taught in ENGRD/ECE 2300, taking CS 3410 might be better. </span></p>
<p class="c0"><span class="c1"></span></p>
<p class="c2"><span class="c1">Now that CS 3410 is offered in both the Fall and the Spring, fitting that into
your schedule is much more flexible than trying to fit in CS 3420, which is offered only in the Spring
semester. If this is of concern to you, taking CS 3410 might be a better option.</span></p>
<p class="c0"><span class="c1"></span></p>
<p class="c2"><span class="c1">In terms of comparing the courses themselves, CS 3410 is pretty well known to be
filled with projects that are very time consuming. CS 3420 on the other hand have very reasonable projects
up
until the final project (open-ended), in which the time commitment can vary wildly depending on the type of
projects students wish to pursue. CS 3410 also squeezes in a lot more material than CS 3420 does. This,
however, is more like comparing to apples to oranges, as the combination of ENGRD 2300 and CS 3420 covers
all
the material covered by CS 3410 and more. In that sense, if you want to spread out the material you want to
learn in the duration of a year rather than the semester, the ENGRD 2300-CS 3420 might be of more interest
(and vice versa).</span></p>
<p class="c0"><span class="c1"></span></p>
<p class="c2"><span class="c1">Lastly, CS 3420 places more emphasis on I/O and hardware-related material (hence
its name, Embedded Systems). In fact, most projects in CS 3420 involve coding logic onto a microcontroller
(MSP430). This is highlighted by the final project which gives student freedom to pursue whatever project
they wish to with their MSP430s. Therefore, if you have more interest in hardware systems, CS 3420 might be
for you. </span></p>
<h3 class="c35" id="h.qb87fwi5wdll"><span class="c6 c28">What is a practicum? What separates it from a regular
course?</span></h3>
<p class="c2"><span class="c1">With the exception of CS 2111, practicums are classes that are based entirely on
projects. Usually, given a class CS xxx0, its associated practicum will be offered as CS xxx1. Every CS
major
is required to take one practicum, and can choose to enroll in multiple practicums if they wish. The
practicums are meant to be extensions of the associated course, and usually students get to implement a
variety of things covered in lecture but are not explored in other parts of the class. For example, for CS
4320: Intro to Database Systems, lectures encompass various components of databases, and in CS 4321,
students
get to implement a SQL-interpreter in Java where they actually code up and learn the ins-and-outs of the
discussed components. For some classes, the practicum must be taken along with the actual course (e.g. CS
4120 + 4121).</span></p>
<h3 class="c35" id="h.40cndcnr3isn"><span class="c6 c28">Why are some 4000-level classes cross-listed as
5000-level classes? </span></h3>
<p class="c2"><span class="c1">If a 4000-level class is cross-listed as a 5000-level class, that means that the
same course is offered to both undergraduate students and graduate students. Therefore, unless you are a
graduate student, you should sign up for the 4000-level class as CS 4xxx instead of CS 5xxx. The class and
all requirements are generally the exact same.</span></p>
<h3 class="c35" id="h.vtc15ce4grba"><span class="c6 c28">What is a vector? Is it important in any way? Is one
more prestigious than another? </span></h3>
<p class="c2"><span class="c22">Think of vectors as a guideline of which courses to take if you are interested
in
a certain subject (like a </span><span class="c22 c25">concentration</span><span class="c22">). Fulfilling
a
vector is optional, but note that vector requirements can double count. Outside of the context of Cornell
Computer Science, vectors are not too important and don’t even show up on your transcript. However,
they can be very useful in trying to shape your future coursework and determine which courses to take. Keep
in mind that vectors are not hard requirements as much as they are a checklist of courses, so a class taken
as a CS major requirement </span>
<span class="c13">can</span><span class="c1"> double count as a vector requirement. </span></p>
<p class="c0"><span class="c1"></span></p>
<p class="c2"><span class="c22">More information about vectors can be found </span><span class="c14"><a class="c3"
href="https://www.google.com/url?q=https://www.cs.cornell.edu/undergrad/csmajor/vectors&sa=D&ust=1522738116934000">here</a></span><span
class="c1">.</span></p>
<p class="c2"><span class="c22">More information about the checklist: </span><span class="c14"><a class="c3"
href="https://www.google.com/url?q=http://www.cs.cornell.edu/undergrad/rulesandproceduresengineering/engineeringchecklist&sa=D&ust=1522738116934000">for
Engineering students</a></span>
<span class="c22">; </span><span class="c14"><a class="c3" href="https://www.google.com/url?q=http://www.cs.cornell.edu/undergrad/rulesandproceduresarts/artschecklist&sa=D&ust=1522738116934000">for
Arts students</a></span><span class="c1">.</span></p>
<h3 class="c35" id="h.dcuflkxo89wj"><span class="c6 c28">What are prerequisites? Are they actually enforced?
</span></h3>
<p class="c2"><span class="c1">Many courses build off the material in prior courses, either directly or
indirectly. In order to ensure that all students have the same background, departments designate certain
other courses as prerequisites that must be completed before enrolling in a subsequent course. Historically
the CS department has allowed students to take classes for which they did not have the prerequisites,
though
doing so is not recommended. If you do not meet the prerequisites for a certain course it is recommended
that
you speak with the instructor, since sometimes they serve only as a way to ensure that you have some
previous
experience with the topic.</span></p>
<h3 class="c35" id="h.xmvmdcjllequ"><span class="c6 c28">I am struggling as a CS major, and I need additional
resources for help; how can I go about doing this? </span></h3>
<p class="c2"><span class="c1">If you are struggling with a particular CS class, the first approach would be to
try to go to Office Hours and seek help from TAs. Professors will generally also hold an hour or two of
office hours, but if they are at a time you can’t make then free to try to arrange a meeting with a
professor by catching them after class or through e-mail. Professors and TAs are here to help your learning
experience, and can be surprisingly helpful in pinpointing the source of your struggles. In some cases,
Professors may help find you a personal tutor for the course. </span></p>
<p class="c0"><span class="c1"></span></p>
<p class="c2"><span class="c22">In addition to the course staff, introductory classes have external resources
that can help. For example, CS 1110, CS 1112, and CS 2110 all have on-call</span><span class="c14"><a class="c3"
href="https://www.google.com/url?q=https://www.engineering.cornell.edu/academics/undergraduate/assistance/tutor/index.cfm&sa=D&ust=1522738116935000"> peer
tutors</a></span>
<span class="c22"> and </span><span class="c14"><a class="c3" href="https://www.google.com/url?q=https://www.engineering.cornell.edu/academics/undergraduate/curriculum/courses/workshops/&sa=D&ust=1522738116935000">Academic
Excellence Workshops</a></span>
<span class="c22"> which are 1-credit supplemental courses. In addition, CS 2110 has recently been
offering a </span><span class="c14"><a class="c3" href="https://www.google.com/url?q=http://courses.cornell.edu/preview_course_nopop.php?catoid%3D26%26coid%3D411728&sa=D&ust=1522738116935000">Programming
Practicum</a></span>
<span class="c1"> as a supplemental course. </span>
</p>
<p class="c0"><span class="c1"></span></p>
<p class="c2"><span class="c1">The nice thing about Computer Science is that a lot of information can be found
online as well. If you don’t understand a certain concept presented in lecture and staring at the
slides doesn’t help, Googling for understanding can yield surprisingly helpful resources. Stack
Overflow is especially useful.</span></p>
<h3 class="c42 c46" id="h.5g5h0j3zfpas"><span class="c6 c28"></span></h3>
<h3 class="c42" id="h.ysm1xz7cgu02"><span class="c6 c28">For the checklist requirements, can I replace CHEM
2080
with any other class? </span></h3>
<p class="c2"><span class="c1">CHEM 2080 can be replaced by BTRY 3080, ECON 3130, MATH 2930, MATH 4710, PHYS
2214, or PHYS 2218. However keep in mind the MATH 2930 is a prerequisite of PHYS 2214. </span></p>
<p class="c0"><span class="c6 c28"></span></p>
<h3 class="c42" id="h.dmgaklluwsd5"><span class="c6 c28">Can I use the same class for different requirements
for
the CS checklist? </span></h3>
<p class="c2"><span class="c1">Unfortunately, you cannot have the same class listed for any of the requirements
that require you to fill in the class name, semester you took it, and your grade. For example you cannot
use
MATH 2930 to replace both CHEM 2080 as well as use it as a Technical Elective. However, you can use a
statistic/probability class for a requirement on a checklist. For example you can use ENGRD 2700 as a
probability class as well as an ENGRD requirement (because the probability class is only a checkbox. As
long
as you took one, it doesn’t matter which class it is or whether it satisfies another requirement.)
</span></p>
<p class="c0"><span class="c1"></span></p>
<h3 class="c42" id="h.n8cyvx77dr3x"><span class="c6 c28">What is an external specialization?</span></h3>
<p class="c2"><span class="c1">An external specialization is three 3000+ classes that are all related in some
way. The easiest way to complete an external spec would be to find three class in the same category (MATH,
CHEM, MECHE, ECE etc) that are 3000 or above. You could also have a very thin connection between the three
classes. As long as you’re able to explain how those three classes are connected, then anything is
valid. </span></p>
<p class="c4 c15"><span class="c1"></span></p>
<h3 class="c42" id="h.mf9g28qxr7mf"><span class="c6 c28">What classes qualify as Technical Elective classes?</span></h3>
<p class="c2"><span class="c1">Any 3000+ course that engage the student in computation reasoning and analysis
or
in any quantitative way qualify. They are usually in application areas such as BIO, BEE, CHEM, PSYCH, PHYS,
MATH, ECON, any Engineering fields including CS and MAE, or related subjects. However, some of these areas
may involve writing or theoretical courses, such as PSYCH 3050 (theory). No classes that involve writing
only
about science, math, technology, etc, qualify.</span></p>
<p class="c0"><span class="c1"></span></p>
<h3 class="c42" id="h.dd8odtfx12et"><span class="c6 c28">How can I fulfill the technical writing requirement in
the College of Engineering? </span></h3>
<p class="c2"><span class="c22">The College of Engineering</span><span class="c14"> </span><span class="c14"><a
class="c3" href="https://www.google.com/url?q=https://www.engineering.cornell.edu/academics/undergraduate/curriculum/courses/communications/technical_writing_equirement/&sa=D&ust=1522738116937000">website</a></span>
<span class="c14"> </span><span class="c22">lists ways to meet the Technical Writing Requirement at
Cornell University. Some common ways to get technical writing credit are:</span><span class="c14"> </span><span
class="c14"><a class="c3" href="https://www.google.com/url?q=https://www.cs.cornell.edu/undergrad/uresch&sa=D&ust=1522738116937000">CS
4999</a></span>
<span class="c14"> </span><span class="c22">(Undergraduate Research)</span><span class="c22 c30">,
</span><span class="c14"><a class="c3" href="https://www.google.com/url?q=https://blogs.cornell.edu/engrc3024/&sa=D&ust=1522738116937000">ENGRC
3024</a></span>
<span class="c14"> </span><span class="c22">(Co-ops and Internships). Classes such as CS/INFO 3152
(Introduction to Game Design) also have one-credit attachments that will fulfill the requirement.</span></p>
<p class="c0"><span class="c1"></span></p>
<p class="c2"><span class="c1">It’s a good idea to double-check with your CS advisor or one of the CS
Undergraduate Advisors if you’re unsure if a course fulfills this requirement. If it’s not
listed
on the website, there’s a good chance if doesn’t count, but there is a process for petitioning
an
unlisted course for credit.</span></p>
<p class="c4 c15"><span class="c28 c22 c37 c30 c62"></span></p>
<h3 class="c42" id="h.ozbcnsoux0w9"><span class="c6 c28">Are there classes that can fulfill multiple liberal
arts/breadth requirements?</span></h3>
<p class="c2"><span class="c1">There are classes that fulfill both Historical and Geographical Breadth
requirements that you can take if you can’t manage to fit two separate classes into your schedule.
Departments that usually offer these are the Near Eastern Studies department. The same applies for A&S
liberal arts requirements. Overlap is commonly found in Latin American Studies and Philosophy. </span></p>
<h2 class="c20" id="h.mtuh9wk1vio9"><span class="c5"></span></h2>
<hr style="page-break-before:always;display:none;">
<h2 class="c20" id="h.7j8y8zd4lwoi"><span class="c5"></span></h2>
<section id="internships&jobs">
<h2 class="c24" id="h.e6p5gl4myk8n"><span class="c12">Internships & Jobs</span></h2>
</section>
<h3 class="c35" id="h.51cotpa00a9y"><span class="c6 c28">Why and how do people apply for internships? </span></h3>
<p class="c2"><span class="c22">Internships are a great way for students to explore potential career paths and
interests, learn more about the company that they are interning for, and learn what being a software
developer is like in the real world. People usually apply for internships through the career fair and
</span>
<span class="c14"><a class="c3" href="https://www.google.com/url?q=https://cornell.joinhandshake.com/&sa=D&ust=1522738116939000">Handshake</a></span><span
class="c22">. This is not the only means, however, as most companies have links on their websites
specifically for internships applications. Generally, an applicant needs to fill out basic information
about
themselves as well as a resume that highlights their technical skills, coursework, and achievements. If you
perform well at an internship, most companies will give a </span>
<span class="c22 c25">return offer</span><span class="c1"> to either come back as an intern the next
year
or as a full-time employee - depending on your graduation date.</span></p>
<h3 class="c35" id="h.zjl42ibpfj"><span class="c6 c28">What type of information should my resume contain?
</span></h3>
<p class="c2"><span class="c1">Typically, a resume for a software-related intern position contains information
such as…</span></p>
<ol class="c9 lst-kix_n0skcdqbunag-0 start" start="1">
<li class="c2 c7"><span class="c1">Previous employment/experience</span></li>
<li class="c2 c7"><span class="c1">Coursework/GPA/Education information</span></li>
<li class="c2 c7"><span class="c1">Personal or significant class projects</span></li>
<li class="c2 c7"><span class="c1">Awards (e.g. from hackathons) </span></li>
<li class="c2 c7"><span class="c1">Technical skills (e.g. programming languages, frameworks, etc.) </span></li>
</ol>
<p class="c4 c15"><span class="c1"></span></p>
<p class="c4"><span class="c22">This </span><span class="c14"><a class="c3" href="https://www.google.com/url?q=http://www.careercup.com/resume&sa=D&ust=1522738116939000">link</a></span><span
class="c1"> also gives really good advice on how to craft your resume. </span></p>
<h3 class="c35" id="h.wo1ym8dabj26"><span class="c6 c28">What is a typical technical interview like for a CS
major applying for a Software (Development) Engineering Internship position? </span></h3>
<p class="c2"><span class="c1">Typically after a brief conversation to introduce yourself, most Software
Engineering internship positions will require the candidate to solve one or more technical interview
questions. This will most of the time involve concepts introduced in CS 2110/2. Depending on the set up,
this
is usually done on the whiteboard (in-person interview) or on a website that provides code-friendly
platform
(phone interview). A sample question can be something like:</span></p>
<p class="c0"><span class="c1"></span></p>
<p class="c2"><span class="c22 c25">Given two lists of numbers A and B in which B contains all of the elements
of
A and one additional element, return the element that belongs in B but not in A. </span></p>
<p class="c0"><span class="c1"></span></p>
<p class="c2"><span class="c1">Afterwards, interviewers typically take some time to talk more about the
company,
the work they do, and open up time for questions. </span></p>
<p class="c0"><span class="c1"></span></p>
<h3 class="c35" id="h.mmb9l5woo0a2"><span class="c6 c28">I am a freshman/sophomore interested in applying for
internships; are there any programs geared towards underclassmen like us?</span></h3>
<p class="c2"><span class="c1">If you are an underclassmen considering computer science as a career or if you
just want to learn more about working in the tech industry, you should definitely check out the following
summer programs specific to freshmen and sophomores:</span></p>
<p class="c0"><span class="c1"></span></p>
<p class="c2"><span class="c14 c17"><a class="c3" href="https://www.google.com/url?q=https://www.google.com/about/careers/search%23!t%3Djo%26jid%3D120165001%26&sa=D&ust=1522738116941000">Google
Engineering Practicum</a></span></p>
<p class="c2"><span class="c13">Application Period:</span><span class="c1"> October - early December
(rolling)</span></p>
<p class="c2"><span class="c13">Eligibility:</span><span class="c1"> For current freshmen and sophomores</span></p>
<p class="c2"><span class="c13">Notes: </span><span class="c22">The Engineering Practicum program is a 12-week
developmental opportunity for first and second-year undergraduate students with a passion for technology --
especially students from historically underrepresented groups in the field. </span>
<span class="c28 c22 c60 c30 c70">During the summer you will work alongside other Practicum interns on a
software project, attend skills-based and professional development trainings, and receive mentorship from
Google engineers. </span>
</p>
<p class="c0"><span class="c28 c22 c60 c70 c30"></span></p>
<p class="c2"><span class="c14 c17"><a class="c3" href="https://www.google.com/url?q=https://careers.microsoft.com/students/explore&sa=D&ust=1522738116941000">Microsoft
Explore </a></span></p>
<p class="c2"><span class="c13">Application Period:</span><span class="c1"> late August - November
(rolling)</span></p>
<p class="c2"><span class="c13">Eligibility:</span><span class="c1"> For current freshmen and sophomores</span></p>
<p class="c2"><span class="c13">Notes: </span><span class="c22">Explore Microsoft program is a 12-week summer
internship </span><span class="c22 c30 c45">intended for students who are beginning their academic studies
and would like to learn more about careers in software development through an experiential learning
program.
</span>
<span class="c22">By </span><span class="c22 c45 c30">providing formal training as well as a group project
experience working alongside other Explorers, the Explore program </span><span class="c1">offers a
rotational
experience that enables interns to gain experience in both core software engineering roles (Program Manager
and Software Engineer), rather than specializing in just one. </span></p>
<p class="c0"><span class="c1"></span></p>
<p class="c2"><span class="c14 c17"><a class="c3" href="https://www.google.com/url?q=https://www.facebook.com/careers/university/fbueng&sa=D&ust=1522738116942000">Facebook
University</a></span></p>
<p class="c2"><span class="c13">Application Period: </span><span class="c1">early January - late February</span></p>
<p class="c2"><span class="c13">Eligibility: </span><span class="c1">For current freshmen</span></p>
<p class="c2"><span class="c13">Notes: </span><span class="c22">Facebook University is a paid 8-week training
program designed to provide mobile development experience to students who are historically underrepresented
in computer science. </span><span class="c1 c30">The eight-weeks is broken down by two weeks of mobile
development training in either iOS or Android, followed by six-weeks of hands-on project experience in a
small team setting. </span></p>
<h3 class="c35" id="h.1jsuizz6gz47"><span class="c6">What if I want to get involved in research over the summer
instead?</span></h3>
<p class="c2"><span class="c1 c30">Check out research opportunities at Cornell or at other universities around
the US. </span></p>
<p class="c0"><span class="c1 c30"></span></p>
<p class="c2"><span class="c1 c30">If you want to do research at Cornell, you can send an email directly to the
professor you want to work with, or visit him/her in his/her office. Most professors are really open to
students seeking research opportunities over the summer, and will be happy to talk to you about their
research and how you can get involved.</span></p>
<p class="c0"><span class="c1 c30"></span></p>
<p class="c4"><span class="c22 c30">Engineering Learning Initiatives (ELI) at Cornell provides student grants
for
undergraduate engineering research projects. Based on their website (</span><span class="c14 c30"><a class="c3"
href="https://www.google.com/url?q=http://www.engineering.cornell.edu/research/undergraduate/student_grant/index.cfm&sa=D&ust=1522738116943000">http://www.engineering.cornell.edu/research/undergraduate/student_grant/index.cfm</a></span>
<span class="c1 c30">) they have a funding cycle for the summer with applications in Early March.</span>
</p>
<p class="c0"><span class="c1 c30"></span></p>
<p class="c2"><span class="c22 c30">The National Science Foundation (NSF) provides paid research opportunities
at
universities around the US called Research Experiences for Undergraduates (REUs) At their site (</span><span
class="c14 c30"><a class="c3" href="https://www.google.com/url?q=http://www.nsf.gov/crssprgm/reu/&sa=D&ust=1522738116944000">http://www.nsf.gov/crssprgm/reu/</a></span>
<span class="c1 c30">) you can find out more about the program and search for an REU based on discipline and
REU location. You'll most likely work with a professor over the summer on a project with a couple of
other students as well.</span>
</p>
<p class="c0"><span class="c1 c30"></span></p>
<h1 class="c31" id="h.760aznt12c56"><span class="c32 c16"></span></h1>
<hr style="page-break-before:always;display:none;">
<h1 class="c31" id="h.oveegdggdpb3"><span class="c32 c16"></span></h1>
<span class="anchor" id="graduateschool"></span>
</div>
<!-- GRADUATE SCHOOL -->
<div id="gradschool" class="readme_tabcontent">
<h1 class="c33" id="h.besdpzegavd8"><span class="c28 c43 c16">GRADUATE SCHOOL</span></h1>
<section id="mastersdegree">
<h2 class="c24" id="h.odm5o586d554"><span class="c38 c16">Master's Degree (CS MS)</span></h2>
</section>
<p class="c0"><span class="c1"></span></p>
<p class="c2"><span class="c22">The overview for this degree and what it entails can be found starting from the
</span><span class="c14"><a class="c3" href="https://www.google.com/url?q=https://www.cs.cornell.edu/phd/ms&sa=D&ust=1522738116944000">main
landing page</a></span>
<span class="c22">. For more specific application details, see the </span><span class="c14"><a class="c3"
href="https://www.google.com/url?q=https://gradschool.cornell.edu/academics/fields-of-study/subject/331&sa=D&ust=1522738116945000">requirements
page</a></span>
<span class="c1"> on the graduate school website.</span>
</p>
<p class="c0"><span class="c1"></span></p>
<p class="c2"><span class="c1">To summarize, the Master of Science in Computer Science program lasts 4
semesters
and
requires 34 credits to graduate, 6-12 of those credits dedicated to your thesis research. It’s
required
that you work as a TA for each of those semesters. However, you do receive full tuition and a housing
stipend
while you are in the program. To be accepted into the program, you will need your college transcript, 3
letters
of recommendation, a statement of purpose, and an essay describing how a CS MS aligns with your career
plans;
all
of which are due in mid-December.</span></p>
<section id="meng">
<h2 class="c24" id="h.bmirtsv06guv"><span class="c12">MEng</span></h2>
</section>
<p class="c2"><span class="c1">This program lasts 2 semesters and typically covers 6 courses and a project.
Applications become available 2-3 months before the deadline and are due at the beginning of February for
the
following fall or the beginning of October for the following spring.</span></p>
<p class="c0"><span class="c1"></span></p>
<p class="c2"><span class="c22">For a comprehensive look at the MEng program, check out the </span><span class="c14"><a
class="c3" href="https://www.google.com/url?q=https://www.cs.cornell.edu/masters&sa=D&ust=1522738116945000">website</a></span><span
class="c1">.</span></p>
<section id="phd">
<h2 class="c24" id="h.pler4xufmhg9"><span class="c12">Ph.D.</span></h2>
</section>
<p class="c2"><span class="c22">A lot has been written on the topic of applying to PhD programs and what it
takes
to
succeed in them. One excellent source is </span><span class="c14"><a class="c3" href="https://www.google.com/url?q=https://www.cs.cmu.edu/~harchol/gradschooltalk.pdf&sa=D&ust=1522738116946000">this
document</a></span>
<span class="c1"> written by a professor at CMU. </span>
</p>
<p class="c0"><span class="c1"></span></p>
<p class="c2"><span class="c1">A Ph.D. is a roughly 6-year commitment, which is almost entirely devoted to
doing
research. Applications are typically due mid-December of your senior year, and typically require 3
recommendation
letters, a statement of purpose, transcript, and GRE scores. Unlike undergrad, there is really only one
main
criterion for admission: whether the university believes that you can excel at doing research. Naturally
the
best
way to demonstrate this is to have undergraduate research experience, which you can read more about below.</span></p>
<p class="c0"><span class="c18"></span></p>
<hr style="page-break-before:always;display:none;">
<h1 class="c31" id="h.8vmqylsugxnx"><span class="c32 c16"></span></h1>
</div>
<!-- COURSE INFORMATION -->
<div id="courseinformation" class="readme_tabcontent">
<h1 class="c33" id="h.gie8lif1ujic"><span class="c28 c43 c16">COURSE INFORMATION</span></h1>
<p class="c0"><span class="c6 c28"></span></p>
<p class="c2"><span class="c13">Disclaimer Addendum</span><span class="c1">: Because the world is constantly
innovating and changing, you can expect that courses at Cornell will be changing as well. All information
in
this section is based on previous semesters’ experience and may not be accurate with respect to the
current or future semesters. </span></p>
<p class="c0"><span class="c1"></span></p>
<section id="themajor">
<h2 class="c24" id="h.rul7hzfgzniz"><span class="c12">The Major</span></h2>
</section>
<p class="c2"><span class="c22">The CS major is open to students in the College of Arts and Sciences and the
College of Engineering. For more information on the difference between the colleges, see the </span><span
class="c14"><a class="c3" href="#h.sxxhtg9hqv8p">section in the FAQ above</a></span>
<span class="c1">.</span>
</p>
<p class="c2"><span class="c1">Below is the major flowchart from the 2016 Engineering Handbook, which provides
a
sample schedule for when to take requirements for the major under the assumption that you are a Engineering
student who has no prior AP credits:</span></p>
<p class="c2"><span style="overflow: hidden; display: inline-block; margin: 0.00px 0.00px; border: 0.00px solid #000000; transform: rotate(0.00rad) translateZ(0px); -webkit-transform: rotate(0.00rad) translateZ(0px); width: 629.50px; height: 398.48px;"><img
alt="" src="img/images/image1.png" style="width: 629.50px; height: 398.48px; margin-left: 0.00px; margin-top: 0.00px; transform: rotate(0.00rad) translateZ(0px); -webkit-transform: rotate(0.00rad) translateZ(0px);"
title=""></span></p>
<p class="c2"><span class="c1">Please see the following links for information about the CS major:</span></p>
<p class="c2"><span class="c14"><a class="c3" href="https://www.google.com/url?q=https://www.cs.cornell.edu/undergrad/CSMajor&sa=D&ust=1522738116947000">General
major requirements</a></span></p>
<p class="c2"><span class="c14"><a class="c3" href="https://www.google.com/url?q=https://www.cs.cornell.edu/undergrad/rulesandproceduresarts/artschecklist&sa=D&ust=1522738116947000">College
of Arts and Sciences requirements</a></span></p>
<p class="c2"><span class="c14"><a class="c3" href="https://www.google.com/url?q=https://www.cs.cornell.edu/undergrad/rulesandproceduresengineering/engineeringchecklist&sa=D&ust=1522738116948000">College
of Engineering requirements</a></span></p>
<p class="c2"><span class="c14"><a class="c3" href="https://www.google.com/url?q=https://www.engineering.cornell.edu/academics/undergraduate/curriculum/handbook/upload/2016-Eng-Handbook-PDF.pdf&sa=D&ust=1522738116948000">2016
College of Engineering requirements handbook</a></span></p>
<p class="c0"><span class="c28 c22 c37 c44"></span></p>
<p class="c2"><span class="c12">The Minor</span></p>
<p class="c2"><span class="c22">The CS minor can be completed by any student from any college. More information
can be found on </span><span class="c14"><a class="c3" href="https://www.google.com/url?q=http://www.cs.cornell.edu/undergrad/csminor&sa=D&ust=1522738116949000">the
department’s website</a></span>
<span class="c1">.</span>
</p>
<section id="coreclasses">
<h2 class="c24" id="h.49ixl18fglvw"><span class="c12">Core Classes</span></h2>
</section>
<p class="c2"><span class="c1">These classes are required for anyone majoring in computer science. With the
exception of CS 2110 and CS 2800 (which are often taken together), it is generally recommended that
students
should take one core class each semester. However, that isn’t to say taking more than one (say, CS
4820
and CS 3410) is impossible. See the Alternatives to the Core Classes section below for alternate classes,
and
why you might want to take them instead.</span></p>
<p class="c0"><span class="c1"></span></p>
<h4 class="c11" id="h.43w8olwaooiw"><span class="c26 c16"></span></h4>
<hr style="page-break-before:always;display:none;">
<h4 class="c11" id="h.1wx6qafz0b6a"><span class="c26 c16"></span></h4>
<h4 class="c27" id="h.142vjd223qf7"><span class="c26 c16">CS 1110: Introduction to Computing Using Python</span></h4>
<p class="c2"><span class="c1">The first course in the computer science sequence, this is a recommended course
to
take for all newcomers. It will cover all the necessary skills that every coder has with them, from
variables
to functions and beyond. Can be waived with AP Computer Science credit (may vary in CAS and CoE
departments,
however).</span></p>
<p class="c0"><span class="c1"></span></p>
<p class="c2"><span class="c1">The class is historically taught by Walker White in the fall and then a pair of
professors in the Spring. Because the Spring curriculum is based off Professor Walker’s personally
designed Fall curriculum, there shouldn’t be any major differences in taking it in either semester.
Also because it is an introductory class into the CS world, the class tends to have a large number of
consultants whose jobs are also to give advice and insight into the rest of the CS major. There are
one-on-one meetings designed into the class for any questions you may have, so make sure to take advantage
of
those resources if you need them.</span></p>
<p class="c0"><span class="c1"></span></p>
<p class="c2"><span class="c1">The projects are very straightforward and as long as you’re paying
attention
in class/lab and reading instructions carefully, you’ll do well. The most noteworthy project is the
last one where you’ll be tasked to build your own version of Breakout. </span></p>
<p class="c0"><span class="c1"></span></p>
<p class="c2"><span class="c1">Projects can be done in pairs of two or alone. While it might be beneficial to
have a partner to talk with, be careful in dividing up work--since this is an introductory class, you
definitely want to get good grasp of the course material.</span></p>
<p class="c0"><span class="c6 c28"></span></p>
<p class="c2"><span class="c13">Offered: </span><span class="c1">Every semester</span></p>
<p class="c2"><span class="c13">Prerequisites: </span><span class="c1">No programming experience but some high
school math (no calculus)</span></p>
<p class="c2"><span class="c13">Historical Median Grade: </span><span class="c1">B</span></p>
<p class="c2"><span class="c13">Workload: </span><span class="c1">Moderate (3 to 7 hours per assignment)</span></p>
<p class="c2"><span class="c13">Notes: </span><span class="c1">The class expects no programming experience.</span></p>
<p class="c0"><span class="c1"></span></p>
<h4 class="c11" id="h.3n29xjj99se7"><span class="c26 c16"></span></h4>
<hr style="page-break-before:always;display:none;">
<h4 class="c11" id="h.c8kz19ga7bzx"><span class="c26 c16"></span></h4>
<h4 class="c27" id="h.d54xqr6zmtxu"><span class="c26 c16">CS 2110: Object-Oriented Programming and Data
Structures</span></h4>
<p class="c2"><span class="c1">This is the second course in the introductory computer science sequence. It
teaches basic computer science topics including sorting and searching, asymptotic complexity, recursion and
data structures. Almost all material in this course is used in later courses or interviews.</span></p>
<p class="c0"><span class="c1"></span></p>
<p class="c2"><span class="c1">Typically taught by David Gries and one other CS professor, this class forms the
core of many CS topics and forms the basis of general CS knowledge. Many 4000 level courses will have this
class as their highest requirement. A very large portion of programming interviews use material from this
class.</span></p>
<p class="c0"><span class="c1"></span></p>
<p class="c2"><span class="c1">This class has a lighter amount of work compared to other CS classes. There are
seven projects which can be completed with a partner. There are two prelims and an optional final. Grades
in
homeworks are typically very high (~90) while prelim grades follow a normal distribution (average between
65
and 75). This means that prelims are weighted heavily when deciding grades, so study up.</span></p>
<p class="c0"><span class="c1"></span></p>
<p class="c2"><span class="c13">Offered: </span><span class="c1">Every semester</span></p>
<p class="c2"><span class="c13">Prerequisites: </span><span class="c1">CS 1110, CS 1112, or AP credit </span></p>
<p class="c2"><span class="c13">Historical Median Grade</span><span class="c1">: B</span></p>
<p class="c2"><span class="c13">Workload:</span><span class="c1"> Moderate (5 to 8 hours per week)</span></p>
<p class="c2"><span class="c13">Notes:</span><span class="c1"> This course does assume some programming
experience (at the level of CS 1110), but the majority of students will not have background in Java.</span></p>
<p class="c0"><span class="c1"></span></p>
<h4 class="c11" id="h.djrscvfqocl7"><span class="c26 c16"></span></h4>
<hr style="page-break-before:always;display:none;">
<h4 class="c11" id="h.vhwkf3kb67fn"><span class="c26 c16"></span></h4>
<h4 class="c27" id="h.ejj4wlsxksyb"><span class="c26 c16">CS 2800: Discrete Structures</span></h4>
<p class="c2"><span class="c1">The purpose of this course is not to learn about structures that are discrete,
as
the name implies, but more to introduce basic mathematical concepts and get students to write good proofs.
Topics covered include…</span></p>
<p class="c0"><span class="c1"></span></p>
<ul class="c9 lst-kix_2yevt2gf74k8-0 start">
<li class="c2 c7"><span class="c1">finite automata</span></li>
<li class="c2 c7"><span class="c1">functions (injective, surjective, bijective) </span></li>
<li class="c2 c7"><span class="c1">number theory (Euclid’s algorithm,Euler’s theorem, RSA) </span></li>
<li class="c2 c7"><span class="c1">graph theory (basic definitions and properties) </span></li>
<li class="c2 c7"><span class="c1">logic</span></li>
<li class="c2 c7"><span class="c1">discrete probability </span></li>
<li class="c2 c7"><span class="c1">induction (strong, weak, structural) </span></li>
</ul>
<p class="c0"><span class="c1"></span></p>
<p class="c2"><span class="c1">The course has been known as a class in which people could get by with
little-to-no effort in the past, but this seems to be no longer the case since 2013-2014 when Professor
Kozen
and Professor Bailey taught it in the Fall and Spring respectively. Although different professors have been
teaching it since, the problem sets remain somewhat difficult and much more advanced concepts, such as
Turing
machines, context-free grammar, computability, and NP-complete problems have been discussed in class in the
past year. Prelims have generally been in-class prelims for the past semesters. This last semester,
however,
prelims were changed to regular evening exams. Depending on the professor, the lecture material may vary,
but
regardless, a student who is planning to take CS 2800 should expect to…</span></p>
<p class="c0"><span class="c1"></span></p>
<ol class="c9 lst-kix_j1mhuy2a9blf-0 start" start="1">
<li class="c2 c7"><span class="c1">write lots of proofs!</span></li>
<li class="c2 c7"><span class="c1">be exposed to material that they will see in other classes, whether they
be
Computer Science related (CS 3110, CS 4820) or not (MATH 2940, MATH 3360) </span></li>
<li class="c2 c7"><span class="c1">not write a single piece of code </span></li>
<li class="c2 c7"><span class="c1">not buy any textbooks (because there isn’t an official one!)</span></li>
</ol>
<p class="c0"><span class="c1"></span></p>
<p class="c2"><span class="c1">Some helpful links for the class include…</span></p>
<ul class="c9 lst-kix_w188l8706jef-0 start">
<li class="c2 c7"><span class="c14"><a class="c3" href="https://www.google.com/url?q=http://www.cs.cornell.edu/courses/cs2800/2015sp/handouts/pass_tseng_discmath.pdf&sa=D&ust=1522738116954000">notes</a></span><span
class="c1"> written by professors who have taught the course previously </span></li>
<li class="c2 c7"><span class="c22">these </span><span class="c14"><a class="c3" href="https://www.google.com/url?q=http://www.maths.qmul.ac.uk/~pjc/notes/prob.pdf&sa=D&ust=1522738116954000">concise
notes</a></span><span class="c1"> on probability</span></li>
</ul>
<p class="c0"><span class="c1"></span></p>
<p class="c2"><span class="c1">Other general advice about the course…</span></p>
<ul class="c9 lst-kix_ggdhn1mgfr68-0 start">
<li class="c2 c7"><span class="c1">The problem sets can be difficult at times but they are excellent
materials
to help you study for exams. By fully understanding the materials in the problem sets, you should be okay
taking the exams. </span></li>
<li class="c2 c7"><span class="c1">Because the material varies from the professors teaching it, don’t
rely on previous prelims to be a good indicator of what the prelim for your semester will be like (unless
the same professor is teaching it). </span></li>
<li class="c2 c7"><span class="c1">If you haven’t used LaTeX much until this course, this is a perfect
place to start using it! </span></li>
</ul>
<p class="c0"><span class="c1"></span></p>
<p class="c2"><span class="c13">Offered:</span><span class="c1"> Every semester</span></p>
<p class="c2"><span class="c13">Prerequisite:</span><span class="c1"> One programming course or permission
of instructor.</span></p>
<p class="c2"><span class="c13">Historical Median Grade: </span><span class="c22">B+</span><span class="c13"> </span><span
class="c1">(this seems to be pretty consistent regardless of the professor teaching that semester) </span></p>
<p class="c2"><span class="c13">Workload: </span><span class="c1">Can vary from an hour to how long it may take
you to LaTeX your proof nicely! </span></p>
<p class="c2"><span class="c1">Realistically speaking, it will vary wildly depending on the length of the
problem
sets. Problem set questions can vary from two or three questions to ten or more questions from textbook.
Some
questions might be straight-forward calculations and answers while others can be proof questions that often
can be rather challenging. But if you ever get stuck and need help, there are office hours throughout the
entire weeks that you can go and get help. </span></p>
<p class="c0"><span class="c1"></span></p>
<h4 class="c11" id="h.r4ch9j4udtyw"><span class="c26 c16"></span></h4>
<hr style="page-break-before:always;display:none;">
<h4 class="c11" id="h.l17ygf79p9v1"><span class="c26 c16"></span></h4>
<h4 class="c27" id="h.u2cdxg1iuaoz"><span class="c26 c16">CS 3110: Data Structures and Functional Programming</span></h4>
<p class="c2"><span class="c22">This course introduces you to the paradigm of </span><span class="c22 c25">functional
programming</span><span class="c1"> in a language called OCaml, which may be quite different from
anything you’ve seen until now. The goal of the course is not to just teach you a fancy new
programming
style but to use it as a tool to help you learn to be better software engineers overall. Topics covered
include:</span></p>
<p class="c0"><span class="c1"></span></p>
<ul class="c9 lst-kix_xigwlfb7uh2w-0 start">
<li class="c2 c7"><span class="c1">Functional programming</span></li>
<li class="c2 c7"><span class="c1">Writing and using specifications</span></li>
<li class="c2 c7"><span class="c1">Modular programming and data abstraction</span></li>
<li class="c2 c7"><span class="c1">Reasoning about program correctness</span></li>
<li class="c2 c7"><span class="c1">Reasoning about system performance</span></li>
<li class="c2 c7"><span class="c22">Useful and efficient data structures</span></li>
</ul>
<p class="c0"><span class="c1"></span></p>
<p class="c2"><span class="c1">Usually the course is a general introduction to functional programming concepts
and how they can be applied to real software engineering, but sometimes the course is more
mathematical/theoretical, going into depth on topics such as type theory and the constructive real numbers.<br></span></p>
<p class="c2"><span class="c1">The course consists of lectures as well as but also two weekly recitations
taught
by undergraduate TAs. The recitations are a fantastic resource for not only asking questions and clarifying
concepts with peers, but also gaining hands-on experience, as some recitations involve coding. Recitations
will not only go in-depth of important topics covered in lecture, but also cover topics more directly
related
to problem sets.</span></p>
<p class="c0"><span class="c1"></span></p>
<p class="c2"><span class="c1">This course, like CS 3410, is a significant jump in difficulty/workload from CS
2110, so it would definitely be wise to start projects early and stay on top of the material if you
haven’t gotten into this habit already. There are usually 5-7 projects that consist mostly of
programming in OCaml. In the past, the course has varied with regards to working with partners. Last time
it
was taught by Constable, for example, it featured mostly individual projects; only one was in pairs. There
has also been semesters where all projects were pair or group projects. In Clarkson last offering the first
few projects were individual, while the next few were (optionally) done with a partner, and the final
project
was a group project (mandatory) with 3-4 team members. Historically, this final project allows each group
more freedom in their software engineering choices, but also expects much more creativity and ingenuity to
come from the assignment.</span></p>
<p class="c0"><span class="c1"></span></p>
<p class="c2"><span class="c1">Helpful links:</span></p>
<ul class="c9 lst-kix_zdhyzh53yun-0 start">
<li class="c2 c7"><span class="c14"><a class="c3" href="https://www.google.com/url?q=https://realworldocaml.org/&sa=D&ust=1522738116957000">Real
World OCaml</a></span><span class="c1">, a book available for free online that is often used as a
supplementary text in the course</span></li>
<li class="c2 c7"><span class="c22">Depending on your background experience, this might be the first course
in
which you will be exposed to Git, a system that allows remote users to work on coding assignments
together.
Git can be very scary and confusing for the first time, so brushing upon </span>
<span class="c14"><a class="c3" href="https://www.google.com/url?q=https://try.github.io/&sa=D&ust=1522738116957000">the</a></span><span
class="c22"> </span><span class="c14"><a class="c3" href="https://www.google.com/url?q=http://pcottle.github.io/learnGitBranching/&sa=D&ust=1522738116957000">basics</a></span>
<span class="c1"> before the course begins may save some headaches during the semester.</span>
</li>
</ul>
<p class="c0"><span class="c1"></span></p>
<p class="c2"><span class="c13">Offered:</span><span class="c1"> Every semester</span></p>
<p class="c2"><span class="c13">Prerequisites:</span><span class="c1"> CS 2110 (or equivalent programming
experience).</span></p>
<p class="c2"><span class="c13">Corequisite: </span><span class="c1">CS 2800</span></p>
<p class="c2"><span class="c13">Historical Median Grade: </span><span class="c1">B in Fall 2017</span></p>
<p class="c2"><span class="c13">Workload: </span><span class="c1">Moderate/Heavy (seems to be around 9 hours
based on course evals) (5 to 7 projects a semester, with around 2 to 3 weeks to do each one) </span></p>
<p class="c0"><span class="c1"></span></p>
<h4 class="c11" id="h.cfd2k3xdjf4i"><span class="c26 c16"></span></h4>
<hr style="page-break-before:always;display:none;">
<h4 class="c11" id="h.eupizii33syf"><span class="c26 c16"></span></h4>
<h4 class="c27" id="h.tszo3lq7spg1"><span class="c26 c16">CS 3410: Computer System Organization and Programming</span></h4>
<p class="c2"><span class="c1">This course aims to bridge the gap between software and hardware through topics
such as computer organization, systems programming, and hardware/software interface. In terms of the work,
you are required to work individually for some of the projects and in a pair for others. The labs are done
individually. You may also have written homeworks depending on which professor is teaching the course.</span></p>
<p class="c0"><span class="c1"></span></p>
<p class="c2"><span class="c1">PA1-3 require you to make a MIPS pipelined-processor through a simulation
program
called Logisim, which is used to build circuits. You will get familiarized with Logisim through PA1, where
you will build an Arithmetic and Logic Unit (ALU) that performs basic calculations. In PA2 and PA3, you
will
build a functioning five-stage MIPS processor that executes various instructions. PA3 builds on PA2 but is
considered to be harder than PA2 since it can be tricky to figure out all the edge cases. PA4 is a friendly
hacking challenge which requires you to craft some input to a simplified browser and cause it to print out
a
different message as its default one. You will essentially be performing a buffer overflow attack on the
browser. The last projects, PA5-6, involve writing tests for dynamic memory allocator (malloc) in C and
then
implementing malloc. A lot of problems arise due to the fact that students are still unfamiliar with
commons
errors found in C.</span></p>
<p class="c0"><span class="c1"></span></p>
<p class="c2"><span class="c1">Naturally, this class moves fast since it has to cover materials covered in both
ECE 2300 and CS 3420. Reading the book will be a very good supplement. Overall, the materials covered in
the
class are important to master for any choice of career in CS. The course is also good to know for CS 4410
(Operating Systems), since the material continues approximately where 3410 left off and students use the
same
tools that you’ve learned here for OS projects. </span></p>
<p class="c0"><span class="c1"></span></p>
<p class="c2"><span class="c1">Historically there have been 2 prelims and no final exam (final project
instead).
Projects and Labs are worth ~50% of the final grade, while exams and homeworks are worth the other ~50%
(subject to change). </span></p>
<p class="c0"><span class="c1"></span></p>
<p class="c2"><span class="c13">Offered:</span><span class="c1"> Every semester</span></p>
<p class="c2"><span class="c13">Prerequisite:</span><span class="c1"> CS 2110. Prior knowledge of C is not
required, but does help.</span></p>
<p class="c2"><span class="c13">Historical Median Grade: </span><span class="c1">B+</span></p>
<p class="c2"><span class="c13">Workload: Moderate/Heavy. </span><span class="c1">In Spring 2016, new
assignments
were released every week, and due every 2 (sometimes 3) weeks. The class is split into labs, projects, and
written homeworks, which may require at least 10-15 hours of work for non trivial assignments. Larger
projects have been known to take longer than 30 hours.</span></p>
<p class="c0"><span class="c1"></span></p>
<h4 class="c11" id="h.freno86jolq0"><span class="c26 c16"></span></h4>
<hr style="page-break-before:always;display:none;">
<h4 class="c11" id="h.xg1s2rh1aqq4"><span class="c26 c16"></span></h4>
<h4 class="c27" id="h.2vjqfyhzm3b9"><span class="c26 c16">CS 4410: Operating Systems</span></h4>
<p class="c2"><span class="c1">This class covers the design and implementation of operating systems. Key topics
are as follows:</span></p>
<ul class="c9 lst-kix_o46q4ui4ywtz-0 start">
<li class="c2 c7"><span class="c1">Concurrency </span></li>
<li class="c2 c7"><span class="c1">Synchronization</span></li>
<li class="c2 c7"><span class="c1">Scheduling</span></li>
<li class="c2 c7"><span class="c1">Memory Management</span></li>
<li class="c2 c7"><span class="c1">Filesystems</span></li>
<li class="c2 c7"><span class="c1">Networking</span></li>
</ul>
<p class="c0"><span class="c1"></span></p>
<p class="c2"><span class="c22">If you are NOT signed up for </span><span class="c14"><a class="c3" href="https://www.google.com/url?q=https://docs.google.com/document/d/1Bn266Sg1kOJHDs8mjqygGvwYwKhNbig-OXbZadcNXFM/edit%23heading%3Dh.cqwj1ugvu01p&sa=D&ust=1522738116961000">CS
4411</a></span>
<span class="c1"> concurrently while taking CS 4410, then you will be required to do what is known as
Miniprojects (MPs). Even if you are signed up for CS 4411, there will usually be 1 or 2 MPs you are still
required to do. In the past, there have generally been
4 MPs on the following topics:</span>
</p>
<ul class="c9 lst-kix_33x29l90a2c8-0 start">
<li class="c2 c7"><span class="c1">Synchronization questions involving semaphores and monitors, and race
conditions (done in Python)</span></li>
<li class="c2 c7"><span class="c1">Implementing malloc (done in C) [may change in fall 2017 due to this now
being covered in CS 3410]</span></li>
<li class="c2 c7"><span class="c1">Implementing a given protocol (done in Python)</span></li>
<li class="c2 c7"><span class="c1">Implementing a part of a file system (has been done in both Python and C
before)</span></li>
</ul>
<p class="c0"><span class="c1"></span></p>
<p class="c2"><span class="c1">The projects themselves aren’t too difficult. The first one will be very
helpful for preparing for the first prelim and provide students exposure to synchronization questions. For
the rest, try to read over the writeup for the projects very carefully, as even overlooking a minor detail
may cost you a significant amount of points, especially as grading for many of the assignments is
completely
decided by the autograder test cases. Never break the 12 commandments of synchronization!</span></p>
<p class="c0"><span class="c1"></span></p>
<p class="c2"><span class="c1">Another general advice for the MPs would be to try to sketch out what you will
be
doing before actually implementing the code. Although this is a general advice that can apply to virtually
any CS class, this is especially important in OS when you have to, say, implement a protocol that will be
designed to respond in a specific manner depending on the context. </span></p>
<p class="c0"><span class="c1"></span></p>
<p class="c2"><span class="c13">Offered:</span><span class="c1"> Every semester</span></p>
<p class="c2"><span class="c13">Prerequisite:</span><span class="c1"> CS 3410 or CS 3420. Do not take
without one of these.</span></p>
<p class="c2"><span class="c13">Historical Median Grade: </span><span class="c1">Varies yearly</span></p>
<p class="c2"><span class="c13">Workload: </span><span class="c1">If you are not taking it with CS 4411, the
workload is on the lighter side. Once you have a good understanding of the writeup for the projects, they
don’t take too much time. However, obtaining a good understanding may take some time, so don’t
put it off until the last minute. Don’t hesitate to clarify any details that you have with the
writeup
with TAs and professors, as that can save you a significant amount of time! </span></p>
<p class="c0"><span class="c1"></span></p>
<h4 class="c27" id="h.rolrhzwzee42"><span class="c26 c16">CS 4820: Introduction to Analysis of Algorithms</span></h4>
<p class="c2"><span class="c1">This course stays true to its name and exposes students to various algorithms
and
how to argue for their correctness. The types of algorithms introduced include…</span></p>
<ul class="c9 lst-kix_m1cemewn2mib-0 start">
<li class="c2 c7"><span class="c1">Matching algorithms</span></li>
<li class="c2 c7"><span class="c1">Greedy algorithms</span></li>
<li class="c2 c7"><span class="c1">Dynamic programming algorithms</span></li>
<li class="c2 c7"><span class="c1">Divide and conquer algorithms</span></li>
<li class="c2 c7"><span class="c1">Network flow algorithms</span></li>
</ul>
<p class="c0"><span class="c1"></span></p>
<p class="c2"><span class="c1">It also dives into topics such as Turing Machines, NP-complete problems, and
approximation algorithms in the later parts of the course. </span></p>
<p class="c0"><span class="c1"></span></p>
<p class="c2"><span class="c1">The course has weekly problem sets that usually consists of three problems (two
on
a short week). Almost all of the problems involve (1) coming up with an algorithm to solve the problem of
interest (2) write a proof to explain why the algorithm you proposed solves the problem (3) reason about
runtime when applicable. Starting Spring 2016, some problem sets actually included a problem that involved
coding in Java. </span></p>
<p class="c0"><span class="c1"></span></p>
<p class="c2"><span class="c1">Some helpful advice for the class includes…</span></p>
<ul class="c9 lst-kix_d4dwwtv1lqtk-0 start">
<li class="c2 c7"><span class="c1">the textbook, written by Cornell professors (Eva Tardos and Jon Kleinberg)
is super comprehensive and is structured just like the lectures. If you ever had to buy a textbook, this
would be the most helpful one in terms of how much it will actually help you with the class</span></li>