-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathcs102F2020_syllabus.tex
454 lines (351 loc) · 18.9 KB
/
cs102F2020_syllabus.tex
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
\documentclass[11pt]{article}
% Edit this customize for an instructor
\newcommand{\instructorpronoun}[1]{his}
% Use this when displaying a new command
\newcommand{\command}[1]{``\lstinline{#1}''}
\newcommand{\program}[1]{\lstinline{#1}}
\newcommand{\url}[1]{\lstinline{#1}}
\newcommand{\channel}[1]{\lstinline{#1}}
\newcommand{\option}[1]{``{#1}''}
\newcommand{\step}[1]{``{#1}''}
\usepackage{pifont}
\newcommand{\checkmark}{\ding{51}}
\newcommand{\naughtmark}{\ding{55}}
\usepackage{listings}
\lstset{
basicstyle=\small\ttfamily,
columns=flexible,
breaklines=true
}
% Define the headers and footers
\usepackage{fancyhdr}
\usepackage[margin=1in]{geometry}
\usepackage{fancyhdr}
\pagestyle{fancy}
\fancyhf{}
\rhead{Computer Science 102}
\lhead{Syllabus}
\rfoot{Page \thepage}
\lfoot{Fall 2020}
% Use elastic spacing around the headers
\usepackage{titlesec}
\titlespacing\section{0pt}{6pt plus 4pt minus 2pt}{4pt plus 2pt minus 2pt}
\newcommand{\syllabustitle}[1]
{
\begin{center}
\begin{center}
\bf
CMPSC 102\\Discrete Structures\\
Fall 2020\\
\medskip
\end{center}
\bf
#1
\end{center}
}
\begin{document}
\thispagestyle{empty}
\syllabustitle{Syllabus}
\vspace*{-.175in}
\subsection*{Course Instructor}
Dr.\ Gregory M.\ Kapfhammer\\
\noindent Office Location: Alden Hall 108 \\
\noindent Office Phone: +1 814--332--2880 \\
\noindent Email: \url{[email protected]} \\
\noindent Twitter: \url{@GregKapfhammer} \\
\noindent Web Site: \url{https://www.gregorykapfhammer.com/}
\vspace*{-.115in}
\subsection*{Instructor's Office Hours}
\begin{itemize}
\itemsep0em
\item Wednesday: 2:00 pm--4:00 pm (15 minute time slots)
\item Thursday: 2:00 pm--4:00 pm (15 minute time slots)
\item Friday: 2:00 pm--4:00 pm (15 minute time slots)
\end{itemize}
\vspace*{-.075in}
\noindent All office hours are conducted through Google Meet at
\url{https://meet.google.com/ttp-hamc-zcx}.
\noindent To schedule a meeting with me during my office hours, please visit my
web site and click the ``About $\rightarrow$ Schedule'' link in the top
left-hand corner. Now, you can schedule an appointment by clicking the correct
link and then reserving an open time slot. Students are encouraged to post
questions to a public channel in Slack, which is available at
\url{https://join.slack.com/t/cmpsc102fall2020/signup}, and monitored by the
instructor and the student technical leaders. Students who need help with a
technical question can also raise an issue through the issue tracker available
in the course's GitHub repository
\url{https://github.com/Allegheny-Computer-Science-102-F2020/cs102-F2020-plans/}.
\vspace*{-.1in}
\subsection*{Course Meeting Schedule}
Lecture, Discussion, and Group Work Session: Monday and Wednesday 10:20 am--11:10 am \\
Practical Session: Friday, 10:20 am--11:10 am \\
Laboratory Session: Monday, 3:00 pm--4:50 pm \\
Final Examination: Thursday, December 10, 2020 at 9:00 am
\vspace*{-.05in}
\subsection*{Course Description}
\begin{quote}
An introduction to the foundations of computer science with an emphasis on
understanding the abstract structures used to represent discrete objects.
Participating in hands-on activities that often require teamwork, students
learn the computational methods and logical principles that they need to create
and manipulate discrete objects in a programming environment. Students also
learn how to write, organize, and document a program’s source code so that it
is easily accessible to intended users of varied backgrounds. During a weekly
laboratory session students use state-of-the-art technology to complete
projects, reporting on their results through both written documents and oral
presentations. Students are invited to use their own departmentally approved
laptop in this course; a limited number of laptops are available for use during
class and lab sessions. Prerequisite: Knowledge of elementary algebra.
Distribution Requirements: SP, QR.\@ \\
\end{quote}
\noindent Students can access the course's web site by visiting the
instructor's site, clicking the ``Courses'' link in the top left-hand corner,
and looking for this course in the listing. The course's GitHub repository is
available at
\url{https://github.com/Allegheny-Computer-Science-102-F2020/cs102-F2020-plans/}.
\subsection*{Course Objectives}
The process of designing, implementing, testing, and documenting a correct
program that effectively uses a discrete structure involves the application of
many compelling theories, techniques, and tools. In addition to introducing
problem solving and computational thinking skills, this course will teach
students how to rigorously create Python programs that correctly and
efficiently organize and access data. Using the Git version control system,
students will learn how to develop Python programs that incorporate
mathematical functions and perform data analysis.
%
Students will gain hands-on experience in the use, design, implementation, and
testing of Python programs during the completion of laboratory and practical
assignments and weekly technical challenges. Along with learning more about how
to effectively work in a team of diverse computer scientists, students will
enhance their ability to write and present ideas about Python programs in a
clear and compelling fashion. Students will also develop an understanding of
the connections between computer science, Python programming, and other
disciplines in the social and natural sciences and the humanities.
\subsection*{Performance Objectives}
At the completion of this semester, students should have a strong grasp of the
foundations of rigorous procedural and functional programming in the Python
programming language and an ever-deepening knowledge of topics like functions,
conditional logic, iteration, recursion, exceptions, and web programming.
Students should also be able to handle many of the important, yet accidental,
aspects of implementing programs in the Python language. For instance, students
should be comfortable with text editors such as VS Code and understand how to
use software tools such a terminal window, Docker, GitHub, Gradle, and
GatorGrader. Students should have a toolkit of programming language constructs
that they can use to respond to the challenges that they encounter during the
development and evaluation of software programs in Python. Finally, students
should demonstrate the ability to use both in-person discussions and
cutting-edge software tools to effectively communicate and collaborate with a
group of diverse team members.
\vspace*{.05in}
\noindent More details about these objectives are available in the course's
GitHub repository available at:
\url{https://github.com/Allegheny-Computer-Science-102-F2020/cs102-F2020-plans/}.
\subsection*{Required Textbooks}
\noindent {\em Programming and Mathematical Thinking: A Gentle Introduction to
Discrete Math Featuring Python}. Allan M. Stavely. First Edition, 2014.
\vspace*{.1in}
\noindent {\em Doing Math with Python: Use Programming to Explore Algebra,
Statistics, Calculus, and More!}. Amit Saha. First Edition, 2015.
\vspace*{.1in}
\noindent Students who want to improve their technical writing skills may
consult the following books.
\vspace*{.1in}
\noindent{\em BUGS in Writing: A Guide to Debugging Your Prose}. Lyn Dupr\'e.
Second Edition, 1998.
%
\vspace*{.5em}
\noindent{\em Writing for Computer Science}. Justin Zobel. Second Edition,
2004.
\vspace*{.1in}
\noindent Along with reading the required textbook, you may be invited to study
additional articles from a wide variety of conference proceedings, scientific
journals, and the popular press.
\vspace*{-.5em}
\subsection*{Course Policies}
\subsubsection*{Grading}
The grade that a student receives in this class will be based on the following
categories. All of these percentages are approximate and, if the need to do so
presents itself, it is possible for the course instructor to change the assigned
percentages during the academic semester.
\begin{center}
\begin{tabular}{ll}
Technical Assessments & 10\% \\
Midterm Examination & 10\% \\
Final Examination & 10\% \\
Technical Challenges & 20\% \\
Practical Assignments & 20\% \\
Laboratory Assignments & 30\%
\end{tabular}
\end{center}
\noindent
These grading categories have the following definitions:
\begin{itemize}
\item {\em Technical Assessments\/}: These cumulative weekly online
assessments will cover all course content introduced to date. Unless prior
arrangements are made with the course instructor, all students will be
expected to take these technical assessments on the scheduled day.
\item {\em Midterm Examination\/}: The midterm is an online cumulative
assessment covering all of the material from the class, practical, and
laboratory sessions, as outlined on the review sheet. Unless prior
arrangements are made with the course instructor, all students will be
expected to take this test on the scheduled date and complete the test in
the stated period of time.
\item {\em Final Examination\/}: The final is an online cumulative assessment
covering all of the material from the class, practical, and laboratory
sessions, as outlined on the review sheet. Unless prior arrangements are
made with the course instructor, all students will be expected to take this
test on the scheduled date and complete the test in the stated period of
time.
\item {\em Technical Challenges\/}: Graded on a checkmark basis and building
on material in the textbooks and the content covered during that day's
in-person classroom session, technical challenges have the following goals:
(i) help a learner to demonstrate that they can remember learned material
by recalling facts, basic concepts, and answers to questions presented in
the textbooks and (ii) allow a learner to demonstrate an understanding of
facts and ideas by translating, interpreting, and stating the main
technical ideas presented in the textbooks.
\item {\em Practical Assignments\/}: Graded on a checkmark basis and building
on material in the textbooks, the content covered during that week's
in-person classroom session, and the weekly technical challenges, the
practical assignments further equip a learner to solve new problems in the
field of discrete structures by applying --- in a new way --- their
knowledge of the facts, techniques, and rules of discrete mathematics and
rigorous Python programming.
\item {\em Laboratory Assignments\/}: These assignments invite students to
explore different techniques for rigorously designing, implementing,
evaluating, and documenting real-world Python programs. These assignments
will invite students to use tools like a text editor, a terminal window,
and a modern Python development environment to implement functions that
strike the right balance between understandability, generalizability, and
specialization. Students will also use the data collected from running
experiments to evaluate the implementation of a Python function as they
consider, for instance, its efficiency and correctness.
\end{itemize}
\noindent More details about these grading categories, the way in which the
course instructor will assess the work that students submit for the laboratory,
practical, and technical challenge assignments, and an algorithm for
calculating a grade for each assignment type is in the course's GitHub
repository available at:
\url{https://github.com/Allegheny-Computer-Science-102-F2020/cs102-F2020-plans/}.
\subsubsection*{Assignment Submission and Evaluation}
All assignments will have a stated due date. Electronic versions of the
laboratory, practical, and technical challenge assignments must be submitted to
a student's GitHub repository; students will learn how to use version control
with GitHub during the laboratory and practical sessions. No credit will be
awarded for any course work that is not submitted to your GitHub repository
with the required name. Unless specified otherwise, all of the assignments must
be turned in at the beginning of the session that is one week after the day the
assignment was released. Unless special arrangements are made with the
instructor, no work will be accepted after the published deadline.
Using a report that the instructor shares with you through your assignment's
GitHub repository, you will privately receive a grade for and feedback on each
assignment. Your grade will be a function of whether or you not completed
correct work and submitted it by the deadline. As explained at
\url{https://github.com/Allegheny-Computer-Science-102-F2020/cs102-F2020-plans/},
other characteristics of your submitted work will also influence your assignment
grade.
\vspace*{-.05in}
\subsubsection*{Course Attendance}
Whether they are remote or on campus, it is mandatory for all students to attend
their assigned class, practical, and laboratory sessions. If, due to extenuating
circumstances, you will not be able to attend a session, then, whenever
possible, please communicate with the instructor at least one week in advance to
describe your situation. When students attend a face-to-face course session they
must wear a mask that covers both their mouth and nose, taking care to maintain
a physical distance of at least six feet between themself and every person in
the room. Students who have any illness signs may not attend the in-person
sessions and should instead participate remotely.
\vspace*{-.05in}
\subsubsection*{Class Preparation}
In order to minimize confusion and maximize learning, students must invest time
to prepare for the class discussions, laboratory, and practical sessions. During
the class periods, the course instructor will often pose challenging questions
that could require group discussion, the creation of a web site or image, a vote
on a thought-provoking issue, or a remote presentation. Only those students who
have prepared for class by reading the assigned material and reviewing the
current laboratory and practical assignments will be able to effectively
participate in these class discussions.
Importantly, only prepared students will be able to acquire the knowledge and
skills that they need to be successful in this course, subsequent courses, and
the field of web development. In order to help students remain organized and to
effectively prepare for classes, the course instructor will maintain a class
schedule with reading assignments and presentation slides, available at
\url{https://github.com/Allegheny-Computer-Science-102-F2020/cs102-F2020-plans/}.
During the class sessions students will also be required to download, use, and
modify web site components and data sets that are made available through means
such as the course web site and a GitHub repository.
\vspace*{-.05in}
\subsubsection*{Seeking Assistance}
Students who are struggling to understand the knowledge and skills developed in
either a class, laboratory, or practical session are encouraged to seek
assistance from the course instructor and the student technical leaders.
Students should, within the bounds of the Honor Code, ask and answer questions
on the Slack workspace for our course; please request assistance from the
instructor and student technical leaders first through Slack before sending an
email. Students who need the course instructor's assistance must schedule a
meeting through \instructorpronoun{} web site and come to the virtual meeting
with all of the details needed to discuss their question. Students can schedule
a meeting with a student technical leader at
\url{https://www.cs.allegheny.edu/teaching/technicalleaders/}.
\vspace*{-.05in}
\subsubsection*{Using Email}
Although we will primarily use Slack for class communication, I will sometimes
use email to send announcements about important matters such as changes in the
schedule. It is your responsibility to check your email at least once a day and
to ensure that you can reliably send and receive emails. This class policy is
based on the statement about the use of email that appears in {\em The Compass},
the College's student handbook; please see the instructor if you do not have
this handbook.
\vspace*{-.1in}
\subsubsection*{Honor Code}
The Academic Honor Program that governs the entire academic program at
Allegheny College is described in the Allegheny Academic Bulletin. The Honor
Program applies to all work that is submitted for academic credit or to meet
non-credit requirements for graduation at Allegheny College. This includes all
work assigned for this class (e.g., examinations and practical and laboratory
assignments). All students who have enrolled in the College will work under the
Honor Program. Each student who has matriculated at the College has
acknowledged the following pledge:
\vspace*{-.05in}
%
\begin{quote}
%
I hereby recognize and pledge to fulfill my responsibilities, as defined in
the Honor Code, and to maintain the integrity of both myself and the College
community as a whole.
%
\end{quote}
%
\vspace*{-.075in}
\noindent It is understood that an important part of the learning process in any
course, and particularly one in computer science, derives from thoughtful
discussions with teachers and fellow students. Such dialogue is encouraged.
However, it is necessary to distinguish carefully between the student who
discusses the principles underlying a problem with others and the student who
produces assignments that are identical to, or merely variations on, someone
else's work. While it is acceptable for students in this class to discuss their
source code, images, and reports with their classmates, deliverables that are
nearly identical to the work of others will be taken as evidence of violating
the \mbox{Honor Code}.
\vspace*{-.1in}
\subsubsection*{Disability Services}
The Americans with Disabilities Act (ADA) is a federal anti-discrimination
statute that provides comprehensive civil rights protection for persons with
disabilities. Among other things, this legislation requires all students with
disabilities be guaranteed a learning environment that provides for reasonable
accommodation of their disabilities. Students with disabilities who believe they
may need accommodations in this class are encouraged to contact Disability
Services at 332--2898. Disability Services is part of the Learning Commons and
is located in Pelletier Library. Please do this as soon as possible to ensure
that approved accommodations are implemented in a timely fashion.
\vspace*{-.05in}
\subsection*{Welcome to an Adventure in Discrete Structures}
In reference to software, Frederick P.\ Brooks, Jr.\ wrote in chapter one of
{\em The Mythical Man Month}, ``The magic of myth and legend has come true in
our time.'' Efficient Python programs that correctly use discrete structures to
store and manipulate data have the potential to positively influence the lives
of many people. Moreover, the design, implementation, evaluation, and
documentation of Python-based software are exciting and rewarding activities!
At the start of this class, I invite you to pursue, with great enthusiasm and
vigor, this adventure in rigorous Python programming.
\end{document}