forked from uva-cs/pdr
-
Notifications
You must be signed in to change notification settings - Fork 0
/
course-introduction.html
730 lines (629 loc) · 35.5 KB
/
course-introduction.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
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>CS 2150: course-introduction slide set</title>
<meta name="description" content="A set of slides for a course on Program and Data Representation">
<meta name="apple-mobile-web-app-capable" content="yes" />
<meta name="apple-mobile-web-app-status-bar-style" content="black-translucent" />
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no, minimal-ui">
<link rel="stylesheet" href="../slides/reveal.js/css/reveal.css">
<link rel="stylesheet" href="../slides/reveal.js/css/theme/black.css" id="theme">
<link rel="stylesheet" href="../slides/css/pdr.css">
<!-- Code syntax highlighting -->
<link rel="stylesheet" href="../slides/reveal.js/lib/css/zenburn.css">
<!-- Printing and PDF exports -->
<script>
var link = document.createElement( 'link' );
link.rel = 'stylesheet';
link.type = 'text/css';
link.href = window.location.search.match( /print-pdf/gi ) ? '../slides/reveal.js/css/print/pdf.css' : '../slides/reveal.js/css/print/paper.css';
document.getElementsByTagName( 'head' )[0].appendChild( link );
</script>
<!--[if lt IE 9]>
<script src="../slides/reveal.js/lib/js/html5shiv.js"></script>
<![endif]-->
<style>
.reveal li {
font-size:90%;
line-height:120%;
}
</style>
</head>
<body>
<div class="reveal">
<!-- Any section element inside of this container is displayed as a slide -->
<div class="slides">
<section data-markdown><script type="text/template">
# CS 2150
### Program & Data Representation
### Spring 2020
<center><small><a href="http://www.cs.virginia.edu/~asb">Aaron Bloomfield</a> (aaron@virginia.edu)</small></center>
<center><small><a href="http://github.com/uva-cs/pdr">@github</a> | <a href="index.html">↑</a> | <a href="daily-announcements.html?print-pdf"><img class="print" width="20" src="../slides/images/print-icon.png"></a></small></center>
## Course Introduction
</script></section>
<section data-markdown><script type="text/template">
# Contents
[Course Structure and Logistics](#/course)
[Honor Policy](#/honor)
[Grading Criteria](#/grading)
[Course Goals](#/goals)
[Closing Thoughts](#/closing)
</script></section>
<section>
<section id="course" data-markdown><script type="text/template">
# Course Structure and Logistics
</script></section>
<section id="profoh">
<h2>Instructional Staff</h2>
<table class="transparent">
<tr>
<td><img src="images/introduction/aaronbloomfield.jpg"></td>
</tr>
<tr>
<td><b>Aaron Bloomfield</b><br>Rice Hall, room 402<br>aaron@virginia.edu<br>OH: M 11-12, W 12-1, F 9-10</td>
</tr>
</table>
<p style='text-align:center'>All office hours start next week</p>
</section>
<section data-markdown><script type="text/template">
## Instructional Staff
- About 30+ undergraduate TAs
- You can read their bios and see their pictures at: https://uva-cs.github.io/pdr/uva/tas.html
- 3 graduate TAs
</script></section>
<section data-markdown><script type="text/template">
## Collab
- We try to avoid it at all costs. But we'll use it for:
- Large file downloads (the VirtualBox image)
- The email list and anonymous feedback
- The wiki, but only for very few things, such as the grading guidelines
- Most everything else is external to Collab
- Course tools: [support requests](https://libra.cs.virginia.edu/~pedagogy/index.php?redirect=support.php),
[lab submission](https://libra.cs.virginia.edu/~pedagogy/index.php?redirect=submit.php),
[regrades](https://libra.cs.virginia.edu/~pedagogy/index.php?redirect=regrades.php),
[gradebook](https://libra.cs.virginia.edu/~pedagogy/index.php?redirect=gradebook.php),
[lab extensions](https://libra.cs.virginia.edu/~pedagogy/index.php?redirect=labextension.php), and the [office hours queue](https://libra.cs.virginia.edu/~pedagogy/index.php?redirect=queue.php)
- Slides, labs, and tutorials are in the [github repo](https://github.com/uva-cs/pdr) (more on this in a bit)
- We'll see a tour of the Collab tools, and the github repo, in the next lecture
</script></section>
<section data-markdown><script type="text/template">
## Contacting Us
- [Support requests](https://libra.cs.virginia.edu/~pedagogy/index.php?redirect=support.php); we will try to respond within 24 hours
- Questions posed through [Piazza](https://piazza.com/class)
- Typically answered by other students or the TAs
- Office hours
- Will start this Sunday; we will expect to have over 40 hours per week
- Will be posted on the [main UVa page in the repo](index.html)
- Any changes will be announced to the [@UVaCS2150](https://twitter.com/@UVaCS2150) twitter feed; please check it before heading over in case there are any changes
- Professor office hours are in their offices in Rice Hall; the TA's are in the Thornton stacks
- Anonymous feedback through Collab
</script></section>
<section data-markdown><script type="text/template">
## Contacting Me
![Who to contact](images/introduction/contacting-flowchart-small.png)
</script></section>
<section data-markdown><script type="text/template">
## Please don't (well, try not to) email me
- It's not because I'm trying to be a jerk (really!)
- Email is not an efficient form of communication
- I get too bogged down in way too many emails, and then can't respond in a reasonable amount of time, which is not fair to you
- You can always fill out a [support request](https://libra.cs.virginia.edu/~pedagogy/index.php?redirect=support.php) -- that's what they are there for
- There are other ways to get in touch with me...
</script></section>
<section data-markdown><script type="text/template">
## How to get in contact with me
- Swing by my office hours
- See me right after class to either discuss the issue (if it's quick) or arrange a time to meet (if it's not)
- Swing by my office when I am in to likewise either discuss the issue (if it's quick) or arrange a time to meet (if it's not)
- Submit a support request to arrange a time to meet (include your availability!)
</script></section>
<section data-markdown><script type="text/template">
## Swinging by my office
- If you have a concern, feel free to swing by my office; some caveats:
- If it is something that can be handled by a support request, I'll ask you to do that
- Likewise if the TA office hours can handle it, I may direct you to them
- If I am busy, we'll have to find a time that we can meet later
- This needs to be used only when necessary -- as there are about 400 students in this course, I cannot handle everybody swinging by my office at all times...
</script></section>
<section data-markdown><script type="text/template">
## Contacting You
- Announcements are posted to the course twitter feed: [@UVaCS2150](https://twitter.com/@UVaCS2150)
- In an effort to keep it uncluttered, so that people can find what they are looking for, we will generally not respond from that account to individual tweets
- The [daily announcements slide set](daily-announcements.html)
- If you miss lecture, you are responsible for checking it!
- Class email
- We will use this sparingly -- I expect to send 4 (four!) emails this entire semester, unless something goes very wrong (snow day, etc.)
- Everything in this course happens on a very structured schedule, so there will be no surprises as to when things happen
</script></section>
<section data-markdown><script type="text/template">
## Meetings
- Lectures: M/W/F and one of:
- 10:00 am - 10:50 in Chemistry room 402
- 1:00 pm - 1:50 in Minor Hall room 125
- Lab meetings: 1 per week at your scheduled lab time
- You cannot attend another lab section without prior permission
- And due to lab size, that often cannot be granted
- Office hours, if you choose to attend them
</script></section>
<section data-markdown><script type="text/template">
## Lectures
- Lecture attendance is not required!
- If you come to lecture, then come to listen and (hopefully) learn
- This means no social media, no cell phones, no laptops, no sleeping, no nothing other than paying attention
- If you are using your laptop to follow along, that's fine -- but I may still ask you to close it
</script></section>
<section data-markdown><script type="text/template">
## Snow days
- The schedule for the material this semester is rather tight, and we can withstand missing (maybe) one lecture due to unforeseen circumstances
- Snow days, alien invasion, nuclear war, end of the world, Godzilla attack, etc.
- If we start having snow days, there will be a recorded lecture posted online for each additional lecture day missed
- You will need to listen to it, as the next lecture will pick up where that recorded one left off
</script></section>
<section data-markdown><script type="text/template">
## Expectations
- Prerequisites: (CS 2110 or CS 2220) and CS 2102, all with a C- or above
- CS 2501 from spring 2018 with Horton counts as CS 2110 for this
- You understand basic programming (CS I & II):
- Can write a program longer than a screen-full
- Understand references, classes, objects, templates (generics)
- Familiar with common control structures, procedures, recursive definitions
</script></section>
<section data-markdown><script type="text/template">
## Expectations
- You remember some things from CS 2102 (or will learn/refresh your understanding when you need them):
- Arithmetic, logarithms, sets, graphs
- Proof techniques (induction, contradiction)
- This material may be used in the context of a test question
</script></section>
<section id="cs2102" data-markdown><script type="text/template">
## CS 2102 as a co-req
- If you have not already taken CS 2102 previously, you may take it this semester
- However, by doing so, you understand and agree that any 2102 material that ends up on the exam is your bad luck
- That's why it's listed as a pre-req!
- For the current semester, there may still be some spots available in CS 2102
</script></section>
<section data-markdown><script type="text/template">
## Labs / HWs
- Labs are much bigger in this course, and essentially are the homeworks
- Labs will generally be made available on Thursday by noon, and due throughout the following week
- Pre-lab to be done BEFORE showing up to Tuesday's lab section: all are due at the same time on Tuesday (the start of the *first* lab section)
- Often includes a tutorial
- In-lab to be done IN lab section (due at the end of the day Tuesday)
- Post-lab to be done AFTER lab section (due Friday morning at the start of the *first* lecture section)
</script></section>
<section data-markdown><script type="text/template">
## More on Labs
- Labs begin *next* week
- Labs are posted on Thursdays, generally by noon
- Which means the first one should be available soon
- We announce when they are ready on our Twitter announcement feed: [@UVaCS2150](https://twitter.com/@UVaCS2150)
- There are late policies for the labs -- these are discussed in the first lab
- You can't change sections without prior permission (via a support request), as we don't have the TAs or room capacity to support this
</script></section>
<section data-markdown><script type="text/template">
## Lab attendance
- Lab attendance is not required, either
- However, it may be the only chance for you to receive help on the in-lab
- Monday office hours will give priority to those working on the pre-lab
- By Wednday's office hours, the in-lab will be late and will be receiving a penalty
</script></section>
<section id="registration" data-markdown><script type="text/template">
## Spring 2020 registration issues
- There are (or will be) lecture spots available:
- The 10 am lecture has 40 spots available
- The 8 a.m. lab has 40 spots available
- So there is room, but the time may not be your first choice of times
- While lab attendance is not required, you will HAVE to take the midterms during your scheduled lab period
- If you want into the course, you may have to enroll into a section time that you aren't a huge fan of...
</script></section>
<section id="labswaps" data-markdown><script type="text/template">
## Lab and Lecture Swaps
- You are welcome to swap labs (or lectures) with somebody else, or switch into a lab that has free spots
- To switch to an open lab, do a lab section swap in SIS
- If you attempt to drop and then re-add the course, you will go to the END of the wait list, and then you will not be allowed back into the course!
- And make sure there is room in the destination lab before you try this!!!
- To swap with somebody:
- Post on [Piazza](https://piazza.com/class) to find somebody to switch with
- If you are reading this before the semester starts, then wait until the first day of class to post...
</script></section>
<section id="labswaps2" data-markdown><script type="text/template">
## Lab and Lecture Swaps, part 2
- Once you have found somebody, ask somebody in the main engineering office (in Thorton A122) *nicely* to swap the two of you
- Please understand that we do not have the ability to do any of these actions ourselves
</script></section>
<section data-markdown><script type="text/template">
## Lab due times
- All the labs have a [specified due time](labduedates.html), as described in lab 1, and mentioned previously
- The submission server has it's clock set to the [US Navy atomic clock](http://time.gov)
- If the lab is late for ANY reason, then you will receive the late penalty.
- Thus, you should take this into account and not wait until the last minute to try to submit. These reasons include:
- Your Internet being slow (or down)
- Your younger sibling messing up your submission
- Your dog eating your homework
- You missing the deadline by 1 minute, but pleeeaaaassseeeee!!!!!111oneoneONEONE
</script></section>
<section data-markdown><script type="text/template">
## Lab due times
- The ONLY exception is if any of the following are down: the submission server itself or the CS department's network (which is what allows the server to be accessed)
</script></section>
<section data-markdown id="break1"><script type="text/template">
## Spring break!
![UVa's spring break break](images/introduction/spring-break-2014-uva.png)
What UVa defines as "spring break"
</script></section>
<section data-markdown id="break2"><script type="text/template">
## Spring break!
![UVa students' spring break break](images/introduction/spring-break-2014-student.png)
What UVa *students* define as "spring break"
</script></section>
<section data-markdown><script type="text/template">
## Piazza
- [Piazza](https://piazza.com) is a useful newsgroup-like tool for collegiate courses
- Students post questions, and other students or instructors can post answers
- When you log in (via Collab) for the first time, an account is created for you
- If the e-mail settings default to "send annoying emails all the time", you can easily change this
- In Piazza, in the upper-right, click on the gear/settings icon, select "Account/Email Settings", and then select "Edit Email Notifications" under "Class & Email Settings"
- Piazza posts are generally answered by the TAs and other students
</script></section>
<section data-markdown><script type="text/template">
## Piazza rules
- Don't post any code on it, period (that's an honor violation!)
- The TAs and instructors will specifically ***NOT*** respond to "what is the answer to this exam question" postings
- Note that you can post anonymously to each other, but the course instructional staff will know who you are
- If you start trolling other students on Piazza, I will permanently ban you from it -- please be respectful of your fellow students in the course
</script></section>
<section data-markdown><script type="text/template">
## Accounts
- Your [Collab](http://collab.itc.virginia.edu/portal) account, which you should already have
- Your [Piazza](https://piazza.com) account, which will be created when you log into Piazza via Collab
- You do *NOT* need a [github](https://github.com) account for this course (more on this shortly)
- But feel free to create one! It will be used heavily in successive courses.
</script></section>
<section data-markdown id="unixinfo"><script type="text/template">
## Unix Options
This class will program exclusively in a Unix environment. There are a number of options to do so (listed from easy to hard):
- Run VirtualBox (it's free) and use the course Linux image
- This is the recommended option; there will be extensive directions
- This will be fine for slow (or non-existent) home Internet connections
</script></section>
<section data-markdown id="unixinfo"><script type="text/template">
## More Unix Options
- Mac users can use a terminal window, as Mac OS X is based on Unix -- but you can't use an IDE!
- Note that some things (such as doxygen and some x86 features) are not compatible!
- Install a Unix OS (Linux, etc.) on your home machine
- Backup everything first!!!
- You can try the Windows 10 Bash shell, but you are on your own
- In the past, students have found this works very well
</script></section>
<section data-markdown><script type="text/template">
## Unix honor pledge
In order to take this class, you must agree to sign an honor pledge stating that you will not use any MS Windows development environment (including Visual Studio) for any work for this class. If you do, it will be an honor violation, and you will receive an automatic F for the course.
</script></section>
<section data-markdown><script type="text/template">
## Unix honor pledge
Furthermore, you cannot use any IDE (Xcode, Eclipse, Netbeans, Visual Studio, etc.) on any OS for the code development in this course. The Sublime editor is allowed, provided it is used without extensions for build automation, debugging, or code completion; it shouldn't be any more powerful than a text editor like Emacs.
(the reason for this is to teach you Unix, not a vendetta against IDEs)
</script></section>
<section data-markdown><script type="text/template">
## Compiler usage
- We will be using clang++ (from LLVM), *not* g++
- If you don't know what this means, you can safely ignore it
- But if you are familiar with gcc/g++, please don't use it, as clang has MUCH better error messages
- (Note that we will use gcc/g++ for the two x86 labs, but more on that later)
</script></section>
<section data-markdown><script type="text/template">
## Textbooks
- There are none for this course
- The books that exist are way too expensive and not all that good
- Instead, we will have optional [online readings](../docs/readings.html) for those who would like to read about the course material as well
</script></section>
<section data-markdown><script type="text/template">
## Course materials
- Most of the course materials can be found online; more on this shortly
- These slides are written using [reveal.js](https://github.com/hakimel/reveal.js/), a HTML-based presentation system
- The source for the slides is in the github repo (more on this shortly)
</script></section>
<section data-markdown><script type="text/template">
## Printing the slides
- To export to a PDF (and thus to print), you must use Google Chrome; see [here](https://github.com/hakimel/reveal.js/#pdf-export) for details on how to print
- Don't worry about step 1 -- just add "?print-pdf" to the end of the URL: [course-introduction.html?print-pdf](course-introduction.html?print-pdf)
- Or click on the printer icon (<a href="course-introduction.html?print-pdf"><img class="print" width="20" src="../slides/images/print-icon.png" style="vertical-align:middle"></a> ) on the title slide
- This prints one slide per page
- Use a program to print 6 slides per page
- We use [evince](https://wiki.gnome.org/Apps/Evince/Downloads), but Acrobat can likely do this as well
- In evince, set pages per side to 6, and scaling to 97%
- Note that the slides are not in a linear format, so printing may cause issues; you can always view the slides online
- Click 'o' to see the non-linear layout of the slides; click 'o' or Escape to return
</script></section>
<section data-markdown><script type="text/template">
## git repository
- git is a revision control system which is used to track changes to "stuff" (source code, slide sets, etc.)
- It keeps them in "repositories" or "repos"
- It also easily allows group work on a single code base, although we won't see that in this course
- Most of the course materials can be found online at http://github.com/uva-cs/pdr
- The contents of that repo can be viewed online at: https://uva-cs.github.io/pdr
- As mentioned previously, a few things are still in Collab
- And the stuff specific to you (grades, submissions, etc.) are available through the [set of online tools](https://libra.cs.virginia.edu/~pedagogy/index.php)
</script></section>
<section data-markdown><script type="text/template">
## Not using git
- If you choose not to use git, then every time you want to download any updates to the course materials, you will have to go to http://github.com/uva-cs/pdr, re-download the *entire* .zip file, delete the old directory, and uncompress the newly downloaded file
- As we are going to be updating the content in the repository throughout the semester, this will very quickly become a real pain to deal with
</script></section>
<section data-markdown><script type="text/template">
## Using git, part 1
- git is installed on the VirtualBox image (more on VirtualBox shortly)
- To use git, enter the following command only once (no github account needed!):
```
git clone https://github.com/uva-cs/pdr
```
- This will create a 'pdr' directory that contains everything from the repo: the slides, the labs, the tutorials, etc.
- Note that much of the content of this repository will be updated throughout the semester
- This was already done on the provided VirtualBox image
</script></section>
<section data-markdown><script type="text/template">
## Using git, part 2
- To get the latest version, just change into that directory via the command line ("`cd pdr`"), and enter:
```
git pull
```
- If that runs into errors, you really need to get those fixed, otherwise you will not be using the latest version.
- That's it!
</script></section>
<section data-markdown><script type="text/template">
## A warning about the git repo
- You will see future assignments (labs, mostly) in the git repo
- Feel free to look at these, but...
- We will be making many changes up until the time we officially "release" them to the class
- This "official release" is as of the date of posting of the lab availability on the Twitter feed: [@UVaCS2150](https://twitter.com/@UVaCS2150)
- This will be the Wednesday or Thursday the week before they are due
- If you start them early, then it is **YOUR** responsibility to figure out what changes have been made to the assignment between when you started it and when we finalized it
</script></section>
<section data-markdown><script type="text/template">
## Course syllabus
- It is available in the github repo; you can click [here](../uva/syllabus.html) to view it
- It contains all the information covered so far, plus some more stuff
</script></section>
<section data-markdown><script type="text/template">
## Learning your names...
I am determined to learn each of your (first) names
So if you raise your hand in lecture, and I don't call on you by name, you have to say your first name before your question
Don't be offended if it takes me a while -- there are almost 400 students in this course...
</script></section>
</section>
<section>
<section id="honor" data-markdown><script type="text/template">
# Honor Policy
</script></section>
<section data-markdown><script type="text/template">
## Class Honor Policy
The University of Virginia Honor Policy in effect. In addition to the normal rules, we have additional rules (full details in the [course syllabus](syllabus.html)):
1. You may not look at the code of another student (past or present) for ANY reason
2. You may not try to hack my submission system
3. You may not discuss the midterm details to someone who has not already taken it
4. You may not release your source code online (including in a public github repo)
5. You may not use a computer to generate your submitted *assembly* code unless otherwise allowed
</script></section>
<section data-markdown><script type="text/template">
## Class Honor Policy
Any honor violation or cheating will be referred to the honor committee, and will result in <strong class="red">immediate failure</strong> for the course
We have done this before, and we will do it again. Please don't test me on this.
We will see the cheat-checking program later this semester, as we will have learned enough theory to understand how it works
</script></section>
<section data-markdown><script type="text/template">
## Do these count as honor violations?
- Copying somebody's code completely, even if they've taken the course a year ago
- http://www.cplusplus.com/forum/beginner/35616/
- A student who, upon taking the class a second time, claimed s/he had already submitted the assignment before (being in the class previously), and thus was allowed to copy the assignment from somebody else
- Taking a 45 minute bathroom break during the final exam to look up the answers
- Looking up the answers on your cell phone during an exam.
</script></section>
<section data-markdown><script type="text/template">
## Do these count as honor violations?
The answer to all of these is yes, by the way. And they have all happened in this course.
</script></section>
<section data-markdown><script type="text/template">
## Recent Honor Issues
- In previous semesters we have caught almost 10% of the students in the course cheating
- And failed them all and raised honor charges
- If we had time to look harder, we would have likely found more people
- Please don't test us on this
</script></section>
</section>
<section>
<section id="grading" data-markdown><script type="text/template">
# Grading Criteria
</script></section>
<section data-markdown><script type="text/template">
## Grading Criteria
- 45% Labs (there will be 11-12 labs)
- 30% Midterms, during lab and in lab classroom
- Midterm 1: Tuesday, February 18th, during lab session
- Midterm 2: Tuesday, March 31st, during lab session
- 25% Final Exam
- Thursday, April 30th from 7 p.m. to 10 p.m.
- It can NOT be taken early, so please don't ask
- We reserve the right to change this weighting! See the [course syllabus](syllabus.html) for details...
</script></section>
<section data-markdown id="finalconflicts"><script type="text/template">
## Final exam
- Because there are three lecture periods, this class has a common exam time: Thursday, April 30th from 7-10pm
- You may NOT take it early for any reason
- You may NOT take the exam at a different time because you have a busy final exam schedule
- Other classes that also have an exam then: APMA 3110, APMA 3140, and ECON 2020 (sections 001 and 002)
- You must let us know by end of January if you have a conflict (submit a [support request](https://libra.cs.virginia.edu/~pedagogy/index.php?redirect=support.php))
- If you don't let us know by then, then you will have to take it at the common time
</script></section>
<section data-markdown id="compilation"><script type="text/template">
## Compilation
- You will receive <strong class="red">zero credit</strong> for code that does not compile
- Unless our compiler breaks, there will be absolutely NO exceptions to this rule, so please don't even ask
- This is an advanced programming class, and under no circumstances should you submit code that does not compile
- The submission system will compile the code when you submit it
- But that means you have to actually watch the result of your submission (it takes all of 5 seconds)
- We have a [guide](../docs/compilation.html) as to how to work through compilation errors, and what to do if you can't get it to compile
</script></section>
</section>
<section>
<section id="goals" data-markdown><script type="text/template">
# Course Goals
</script></section>
<section data-markdown><script type="text/template">
## Course Goals
1. Levels of abstraction
2. Implementing data structures
3. Time and space complexity analysis
4. Basic program execution model (hw/sw)
5. Assembly language programming
</script></section>
<section data-markdown><script type="text/template">
## Course Goal 1
Understand program representation from high-level programming language to machine level representation
![Levels of abstraction](images/introduction/levels-of-abstraction.png)
</script></section>
<section data-markdown><script type="text/template">
## Course Goal 2
Be able to implement basic and advanced data structures in C++
- linked lists
- stacks
- queues
- hash tables
- heaps
- trees
- etc.
</script></section>
<section data-markdown><script type="text/template">
## Why do we care about data structures?
- One answer (of many): time
- Consider a program that does the following:
- Creates 5 list-like data structures
- Adds 50,000 elements (even integers from 0-100,000)
- Searches for 25,000 elements (integers from 0-25,000)
- Deletes 10,000 elements (integers from 0-10,000)
- And records the time each data structure takes for these operations
- See [DataStructureComparison.java](code/introduction/DataStructureComparison.java.html) ([src](code/introduction/DataStructureComparison.java))
- What are the results?
</script></section>
<section data-markdown><script type="text/template">
## The results
From a Pentium 3.0 Ghz PC with enough memory
| Data structure | Running time | Notes |
|----------------|--------------|-------|
| Vector | 17.311 sec | Rarely used |
| ArrayList | 17.281 sec | Likely most common |
| LinkedList | 24.255 sec | Slowest |
| HashSet | 0.122 sec | Very fast |
| TreeSet | 0.119 sec | Fastest |
<p class="fragment">Difference between a ArrayList & TreeSet: ~150x</p>
<p class="fragment">Difference between a LinkedList & TreeSet: ~200x</p>
</script></section>
<section data-markdown><script type="text/template">
## The results, in more detail
All times are in ms (1/1000<sup>th</sup> of a second)
| Data Structure | Total time | Insert time | Search time | Delete time |
|----------------|------------|-------------|-------------|-------------|
| Vector | 17,311 | 30 | 12,620 | 4,661 |
| ArrayList | 17,281 | 28 | 12,609 | 4,644 |
| LinkedList | 24,255 | 54 | 17,934 | 6,267 |
| HashSet | 122 | 103 | 9 | 10 |
| TreeSet | 119 | 93 | 14 | 12 |
| Vector, sorted | 294 | 36 | 19 | 239 |
Note that we sneakily inserted the "Vector, sorted" line
</script></section>
<section data-markdown><script type="text/template">
## Course Goal 3
Understand asymptotic time and space complexity analysis of programs
Given a program, how much time does it take to run? How much space (memory) does it use?
</script></section>
<section data-markdown><script type="text/template">
## Course Goal 4
Understand basic program execution model and the underlying computer hardware and software
- Fetch-execute cycle
- Memory hierarchy
- Compiler
- Number representation
- The Y2.038K (or Y2K38) problem
</script></section>
<section data-markdown><script type="text/template">
## Course Goal 5
Be able to implement basic control and data structures in assembly language (x86)
</script></section>
<section>
<h2>CS 2150 Roadmap</h2>
<table class="wide">
<tr><td colspan="3"><p class="center">Data Representation</p></td><td></td><td colspan="3"><p class="center">Program Representation</p></td></tr>
<tr>
<td class="top"><small> <br> <br>string<br> <br> <br> <br>int x[3]<br> <br> <br> <br>char x<br> <br> <br> <br>0x9cd0f0ad<br> <br> <br> <br>01101011</small></td>
<!-- image adapted from http://openclipart.org/detail/3677/arrow-left-right-by-torfnase -->
<td><img class="noborder" src="../slides/images/red-double-arrow.png" height="500" alt="vertical red double arrow"></td>
<td class="top"> <br>Objects<br> <br>Arrays<br> <br>Primitive types<br> <br>Addresses<br> <br>bits</td>
<td> </td>
<td class="top"><small> <br> <br>Java code<br> <br> <br>C++ code<br> <br> <br>C code<br> <br> <br>x86 code<br> <br> <br>IBCM<br> <br> <br>hexadecimal</small></td>
<!-- image adapted from http://openclipart.org/detail/3677/arrow-left-right-by-torfnase -->
<td><img class="noborder" src="../slides/images/green-double-arrow.png" height="500" alt="vertical green double arrow"></td>
<td class="top"> <br>High-level language<br> <br>Low-level language<br> <br>Assembly language<br> <br>Machine code</td>
</tr>
</table>
</section>
</section>
<section>
<section id="closing" data-markdown><script type="text/template">
# Closing Thoughts
</script></section>
<section data-markdown><script type="text/template">
## Feedback from previous semesters
- Some things folks have said in the past about the course:
- "This has been the most informative / difficult CS course I've taken so far, but definitely worth it"
- "This course was incredibly challenging, especially for me having not programmed in over a year -- This class changed my entire perspective on computer science, and is giving me an awesome foundation for the rest of my computer science education."
- "Course was difficult, however I learned a lot."
- (and a bunch of complaints about the amount of work, blah, blah, blah)
</script></section>
<section data-markdown><script type="text/template">
## External links
- [Github repo](https://github.com/uva-cs/pdr) and the [online version](http://uva-cs.github.com/pdr/)
- [Collab workspace](https://collab.its.virginia.edu/portal)
</script></section>
</section>
</div>
</div>
<script src="../slides/reveal.js/js/reveal.js"></script>
<!-- You cannot, apparently, include this from another directory, hence why settings.js is reproduced here in full -->
<script>
// Full list of configuration options available here:
// https://github.com/hakimel/reveal.js#configuration
Reveal.initialize({
controls: true,
controlsTutorial: false,
progress: true,
history: true,
center: true,
slideNumber: true,
transition: 'slide', // none/fade/slide/convex/concave/zoom
// Optional reveal.js plugins
dependencies: [
{ src: '../slides/reveal.js/lib/js/classList.js', condition: function() { return !document.body.classList; } },
{ src: '../slides/reveal.js/plugin/markdown/marked.js', condition: function() { return !!document.querySelector( '[data-markdown]' ); } },
{ src: '../slides/reveal.js/plugin/markdown/markdown.js', condition: function() { return !!document.querySelector( '[data-markdown]' ); } },
{ src: '../slides/reveal.js/plugin/highlight/highlight.js', async: true, condition: function() { return !!document.querySelector( 'pre code' ); }, callback: function() { hljs.initHighlightingOnLoad(); } },
{ src: '../slides/reveal.js/plugin/zoom-js/zoom.js', async: true },
{ src: '../slides/reveal.js/plugin/notes/notes.js', async: true }
]
});
</script>
</body>
</html>