Syllabus
Computer Science EN.601.220
Intermediate Programming
Spring 2024 (4 credits, E, in person)
(The instructors reserve the right to make adjustments to this syllabus as deemed necessary with notice.)
Course Description
-
This course teaches intermediate to advanced programming, using C and C++. (Prior knowledge of these languages is not expected, but prior programming experience and a general understanding of basic object-oriented programming are expected.) We will cover low-level programming techniques, as well as object-oriented class design, and the use of class libraries. Specific topics include pointers, dynamic memory allocation, polymorphism, overloading, inheritance, templates, collections, exceptions, and others as time permits. Students are expected to learn the syntax and some language-specific features independently. Course work involves significant programming projects in both languages.
-
Prerequisites
Gateway Computing (AP CS, EN.500.112/113/114/132/133/134, or equivalent)
Students are expected to be able to create and run simple programs and object-oriented solutions in a general-purpose programming language (such as Java or Python) prior to enrolling in this course. -
Required, Elective or Selective Elective
EN.500.112/113/114 (Gateway Computing) and/or
EN.600.226/EN.601.226 (Data Structures) and/or
EN.500.132/133/134 (Bootcamp) and/or
equivalent
Instructors
Ali Darvish, Senior Lecturer
darvish@jhu.edu,
https://www.cs.jhu.edu/~darvish/,
Office hours: TBD
Misha Kazhdan, Professor
misha@cs.jhu.edu,
https://www.cs.jhu.edu/~misha/,
Office hours: Thu 12:00-1:00pm over zoom
Zoom: https://wse.zoom.us/my/mishak
Meetings
Sec 01 (Darvish): MWF 10:00 am – 11:15 am, Maryland 310
Sec 02 (Darvish): MWF 12:00 pm – 1:15 pm, Mudd 26
Sec 03 (Kazhdan): MWF 1:30 pm – 2:45 pm, Hodson 210
Course Assistants
See the course website staff page.
Textbooks
-
Recommended: Brian W. Kernighan & Dennis M. Ritchie, The C Programming Language, Prentice Hall, Inc., 2nd edition, 1988.
-
Recommended: Andrew Koenig & Barbara E. Moo, Accelerated C++, Addison-Wesley, 2000.
-
For a more detail-oriented presentation of C++, we recommend Deitel & Deitel, C++ How to Program; an electronic edition is available through MSEL: Link.
-
Additionally, you will be expected to read various materials posted on the course website.
Online Resources
The following sites will be used heavily during the course:
-
The course website is jhu-ip.github.io/cs220-f23/.
-
Piazza (https://piazza.com/jhu/fall2023/en601220) will serve as our primary communication channel. You should sign up for Piazza immediately.
-
Gradescope (https://www.gradescope.com/) will be used for assignment submission, grades and feedback; Entry code is “RK2EPK”.
-
Panopto will be used for video distribution.
-
(en.cppreference.com) and (www.cplusplus.com) provide excellent on-line language reference material.
Course Objectives
Upon successful completion of this course, you should be able to:
-
Read, write, trace, test, and debug C and C++ program codes.
-
Use command-line Unix/Linux tools for file management, creating and debugging programs in C/C++.
-
Analyze a programming specification, design a program that fulfills the specification, create a development plan, execute the plan, implement and deliver the program on time.
-
Utilize a distributed version control system to manage the development of a program.
-
Understand the importance of good programming practices such as modularity, testing, documentation, and incremental design.
This course will address the following ABET Outcomes:
-
(SO1) Analyze a complex computing problem and apply principles of computing and other relevant disciplines to identify solutions.
-
(SO2) Design, implement, and evaluate a computing-based solution to meet a given set of computing requirements in the context of the program’s discipline. in computing practice based on legal and ethical principles.
-
(SO5) Function effectively as a member or leader of a team engaged in activities appropriate to the program’s discipline.
-
(SO6) Apply computer science theory and software development fundamentals to produce computing-based solutions.
Course Topics
-
General skills: code reading, tracing, and writing; pair programming and collaborative development; problem analysis and decomposition; incremental design; modular design; automatic testing
-
Unix-like systems and tools: Unix basics, shell basics (command line tools, I/O redirection, etc.), text editors, gcc, make, gdb, valgrind, version control (git)
-
C language, syntax, semantics, and concepts: types, operators, control structures, standard (terminal) I/O, scope, arrays, strings, pointers, dynamic memory allocation, structs, file I/O
-
C++ language, syntax, semantics, and concepts: Standard Template Library (STL), containers (vs arrays), classes, templates, memory management, operator overloading, inheritance and polymorphism, object oriented design, exception handling
General Course Philosophy
This course will focus more on learning than on assessment. While we will use grades to let you know how you are doing, we hope that your goal is learning the material, rather than “getting a good grade.” In the end, the best way to get a good grade is to develop an interest in learning and engage with the material in a self-directed fashion. Besides, in the long run, the knowledge and skills you acquire are far more important than the grade is.
That said, be aware that the main difficulty many students have with this course is time management. It will be a lot of work, and if you don’t budget your time well, you may find yourself with a grade that does not reflect how well you understand the material. Additionally, while there are lots of resources provided to help you succeed, we cannot force you to use them; it is important to avail yourself of these resources, particularly office hours.
Course Approach
We take a flipped-classroom approach to the course, with an emphasis on active learning during class sessions. Part of your homework will be to prepare for class by watching video lessons. During class sessions you will extend your learning by working with your instructors and classmates to discuss new concepts and apply them to in-class exercises, rather than listening to a lecture.
Expectations & Grading
All students are generally expected to actively participate in the scheduled sessions of this course by answering and asking questions and solving the learning exercises. You are also expected to learn via the posted material, assignments, and projects. Our class time will include a recap of the new material, discussion on the important concepts, review of previous exercises, and live coding exercises. Before each session, students are expected to go through the related material posted on the course website and/or Piazza, and finish the coding exercises from the prior session.
Students will be expected to complete a variety of computer programming assignments, as well as written homework assignments. Some assignments may be done in pairs or groups as specified; others must be completed alone. See the specific assignment page for details of what is permitted for a particular assignment. Failure to follow these guidelines will be a violation of the academic ethics code, and reported and penalized accordingly.
While code reuse is an important feature of modern programming, for this course, you will be expected to write most of the code for your homework assignments from scratch. You may use language libraries (according to assignment specifications), and you may always reuse your own code from prior work in the course. Downloading full or partial solutions from the internet, however, is an ethics violation. Using code from class examples, slides, or the textbook is acceptable, but you must cite the source properly in a comment in your code describing the original source.
There will be one midterm exam and a final exam. The midterm exam will cover the topics of the first half of the class (C material) and the final exam will focus on the second half (C++ material). The exams are designed to assess your knowledge of programming in C and C++ as well as your problem solving ability, but not your knowledge of specific tools or technologies discussed in class.
Homework assignments are expected to take a considerable amount of time; start early and budget your time well. On average, it may take 5-15 hours per week, depending on the assignment and your approach. Additionally, try to use incremental development so that even if you run out of time, you can still turn in code that implements some of the desired functionality (with a README file and comments explaining what’s missing). Keep in mind that half the features working all the way will get you a lot more partial credit than all the features half-way working. Good use of the version control system will significantly help with your incremental development. For each commit, you should update your README file to outline what’s missing and what’s done, and try to keep each commit a submittable version. This is a good practice, and can come in very handy in case you accidentally delete the local copy of your homework!
Students are expected to learn material outside of class time and homework, as well. We will generally provide links to tutorials, references, and other resources for each topic. Students are expected to read these, as well as seek out other resources on their own to further their understanding of topics. There is a wealth of programming information on the internet; if one explanation doesn’t make sense, you can probably find another that does.
Homework policy
Assignments will be due by 11:00 pm on the due date (unless otherwise indicated on the course Piazza site). Non-compiling code will earn a score of zero, so students are strongly encouraged to double-check that all submitted code fully compiles with no errors or warnings in the standard course compilation environment. We will accommodate late submissions in several specific ways:
-
There will be a 30-minute grace period after the deadline during which assignments can still be submitted, but will receive a penalty of a deduction of 10% of the points possible on the assignment.
-
Each student will be permitted to use up to 4 “late days” total during the semester on the individual coding assignments only. However, at most 2 late days may be used on any one assignment.
-
Each delay of up to 24 hours past the 11:00 pm deadline for an individual coding assignment counts as one late day.
-
No late days are allowed for handwritten homework or partner-based coding projects.
-
Students may not use a grace period with a late day. For example, if Student A turns in her homework at 11:45 pm on the day it is due (only 45 minutes past the original deadline), then she will be using one late day. Furthermore, if Student B turns in his homework at 11:15 pm on the day after it is due, he’ll be using two late days.
Given these policies, please plan to get your homework done and turned in early so that if you encounter any last-minute delays, it will not hurt you too badly. Additionally, Gradescope will allow multiple submission attempts; we will simply grade the last one. So it’s a good idea to develop your program incrementally, and turn in a fully-compiling (if only partially complete) version every day or so.
Deadline exceptions can only be made by an instructor (not TAs/CAs), and will only be considered in the circumstances outside the control of the student (e.g., serious illness, death of a relative, etc.). If you must request an exception, do so as early as possible; it is easier to get an exception if you ask before an assignment is due, rather than after. No exceptions will be given for failure to plan ahead or simply having “too much work.”
In-class Exercises
Many of the course topics will be supported by an exercise. Although these exercises do not count towards your course grade, they are a very important part of your learning, and as such we strongly recommend that you complete them fully. We will review the solutions to these exercises either fully or just the important parts in class sessions. In general, we will not post solutions to the in-class exercises — if you are having trouble completing an exercise, seek help office hours, or on Piazza. We will have an option for you to submit your solutions on gradescope and get autograder feedback on them.
Grading Breakdown
- 5% - Particpation (physical attendance and active participation)
-
You must attend 85% of the classes to receive full attendance credit (i.e., your attendance/participation percentage will be divided by 0.85 and then capped at 100%.)
-
-
6% - handwritten homework (3 total; due dates vary, will be listed on Piazza)
-
30% - individual coding homework (4.5 total; due dates vary, will be listed on Piazza)
-
14% - midterm coding project (in teams)
-
15% - midterm exam (in class, Friday March 8th)
-
15% - final coding project (in teams)
- 15% - final exam
All scores and grader commentary on your homework and project submissions, as well as exams, will be available via Gradescope. Please keep your own record of your grades so that you will know your standing in the course. At the end of the term, letter grades are generally assigned according to the following scale. You should not expect a curve in this course.
Interval | Letter grade |
---|---|
[97,100] | A+ |
[93,97) | A |
[90,93) | A- |
[87, 90) | B+ |
[83,87) | B |
[80,83) | B- |
[77, 80) | C+ |
[73,77) | C |
[70,73) | C- |
[67, 70) | D+ |
[60,67) | D |
[0,60) | F |
Ethics
The strength of the university depends on academic and personal integrity. In this course, you must be honest and truthful, abiding by the Computer Science Academic Integrity Policy:
Cheating is wrong. Cheating hurts our community by undermining academic integrity, creating mistrust, and fostering unfair competition. The university will punish cheaters with failure on an assignment, failure in a course, permanent transcript notation, suspension, and/or expulsion. Offenses may be reported to medical, law or other professional or graduate schools when a cheater applies.
Violations can include cheating on exams, plagiarism, reuse of assignments without permission, improper use of the Internet and electronic devices, unauthorized collaboration, alteration of graded assignments, forgery and falsification, lying, facilitating academic dishonesty, and unfair competition. Ignorance of these rules is not an excuse.
Academic honesty is required in all work you submit to be graded. Except where the instructor specifies group work, you must solve all homework and programming assignments without the help of others. For example, you must not look at anyone else’s solutions (including program code) to your homework problems. This includes AI tools such as, but not limited to, ChatGPT and GitHub Copilot. You may also not seek out solutions from coursework or examinations from previous semesters nor make these solutions available to others. However, you may discuss assignment specifications (not solutions) with others to be sure you understand what is required by the assignment.
If your instructor permits using fragments of source code from outside sources, such as your textbook or on-line resources, you must properly cite the source. Not citing it constitutes plagiarism. Similarly, your group projects must list everyone who participated.
Falsifying program output or results is prohibited.
Your instructor is free to override parts of this policy for particular assignments. To protect yourself: (1) Ask the instructor if you are not sure what is permissible. (2) Seek help from the instructor, TA or CAs, as you are always encouraged to do, rather than from other students. (3) Cite any questionable sources of help you may have received.
On every exam, you will sign the following pledge: “I agree to complete this exam without unauthorized assistance from any person, materials or device. [Signed and dated]”. Your course instructors will let you know where to find copies of old exams, if they are available.
Report any violations you witness to the instructor.
You can find more information about university misconduct policies on the web at these sites:
- For undergraduates: http://e-catalog.jhu.edu/undergrad-students/student-life-policies/
- For graduate students: http://e-catalog.jhu.edu/grad-students/graduate-specific-policies/
Personal Wellbeing
- Because of the ongoing COVID-19 pandemic special requirements may
be in effect this term, and these may vary during the term. Please keep
updated with these at the following sites:
- University information: https://covidinfo.jhu.edu/
- Whiting School of Engineering information: https://engineering.jhu.edu/covid-19/
- COVID-19 vaccination a required unless an exception has been granted by the university for health or religious reasons.
- The Johns Hopkins COVID-19 Call Center (JHCCC), which can be reached at 443-287-8500 seven days a week from 7 a.m. to 7 p.m., supports all JHU students, faculty, and staff experiencing COVID-19 symptoms. Primarily intended for those currently within driving distance of Baltimore, the JHCCC will evaluate your symptoms, order testing if needed, and conduct contact investigation for those affiliates who test positive. More information on the JHCCC and testing is on the coronavirus information website.
- If you are sick please notify me by email so that we can make appropriate accommodations should this affect your ability to attend class, complete assignments, or participate in assessments. The Student Health and Wellness Center is open and operational for primary care needs. If you would like to speak with a medical provider, please call 410-516-8270, and staff will determine an appropriate course of action. See also https://studentaffairs.jhu.edu/student-life/student-outreach-support/absences-from-class/illness-note-policy/
- All students with disabilities who require accommodations for this course should contact me at their earliest convenience to discuss their specific needs. If you have a documented disability, you must be registered with the JHU Office for Student Disability Services (101 Shaffer Hall; 410-516-4720; http://web.jhu.edu/disabilities/) to receive accommodations.
- Students who are struggling with anxiety, stress, depression or other mental health related concerns, please consider connecting with resources through the JHU Counseling Center. The Counseling Center will be providing services remotely to protect the health of students, staff, and communities. Please reach out to get connected and learn about service options based on where you are living this fall at 410-516-8278 and online at http://studentaffairs.jhu.edu/counselingcenter/.
- Student Outreach & Support helps students manage physical and mental health concerns, personal and family emergencies, financial issues, and other obstacles that may arise during their college experience. Students can self-refer or refer a friend who may need extra support or help getting connected to resources. To connect with SOS, please visit this website: https://studentaffairs.jhu.edu/student-life/student-outreach-support/ or email deanofstudents@jhu.edu, call 410-516-7857, or students can schedule to meet with a Case Manager by visiting the Student Outreach & Support website and filling out a referral form online.
Classroom Climate
As your instructor, I am committed to creating a classroom environment that values the diversity of experiences and perspectives that all students bring. Everyone here has the right to be treated with dignity and respect. I believe fostering an inclusive climate is important because research and my experience show that students who interact with peers who are different from themselves learn new things and experience tangible educational outcomes. Please join me in creating a welcoming and vibrant classroom climate. Note that you should expect to be challenged intellectually by me, the TAs, and your peers, and at times this may feel uncomfortable. Indeed, it can be helpful to be pushed sometimes in order to learn and grow. But at no time in this learning process should someone be singled out or treated unequally on the basis of any seen or unseen part of their identity.
If you ever have concerns in this course about harassment, discrimination, or any unequal treatment, or if you seek accommodations or resources, I invite you to share directly with me or the TAs. I promise that we will take your communication seriously and to seek mutually acceptable resolutions and accommodations. Reporting will never impact your course grade. You may also share concerns with the department/center chair/head/director (Randal Burns, randal@cs.jhu.edu), the Director of Undergraduate Studies (Joanne Selinski, joanne@cs.jhu.edu), the Assistant Dean for Diversity and Inclusion (Darlene Saporu, dsaporu@jhu.edu), or the Office of Institutional Equity (oie@jhu.edu). In handling reports, people will protect your privacy as much as possible, but faculty and staff are required to officially report information for some cases (e.g. sexual harassment).
Family Accommodations Policy
You are welcome to bring a family member to class on occasional days when your responsibilities require it (for example, if emergency child care is unavailable, or for health needs of a relative). In fact, you may see my children in class on days when their school is closed. Please be sensitive to the classroom environment, and if your family member becomes uncomfortably disruptive, you may leave the classroom and return as needed.
University Policy on Incompletes
There are important revisions to the Incomplete Grade policy in effect for UNDERGRADUATES for the 2022-2023 academic year. The full policy is available here: https://e-catalogue.jhu.edu/engineering/full-time-residential-programs/undergraduate-policies/academic-policies/grading-policies/
The following text is an excerpt:
- A request for an Incomplete grade must be initiated by the student no later than the last day of classes via the Incomplete Grade Contract available in SIS
- The required elements on the Incomplete Grade Contract are listed below; all of these topics should be included in the conversation between the student and the instructor.
- The reason for the request for an incomplete grade
- A description of all outstanding work that must be completed
- Date the work is due from the student
- The reversion grade if the student does not complete any of the outstanding work
- Instructors are required to submit the new grade to the Office of the Homewood Registrar no later than 45 calendar days after the last day of classes. If the Incomplete grade is not resolved within 45 calendar days after the last day of classes, the Incomplete grade is automatically converted to the reversion grade.
The significant change here is that there is an Incomplete Grade Contract available to students in SIS to request an incomplete grade. This is how all incomplete grades must be initiated now. The other significant change is the timeline for completion of an incomplete grade, now set at 45 calendar days after the last day of classes. Formerly, the default deadline was the end of the third week of the following semester. See the full catalogue entry for considerations for students on academic probation and graduating students.
Deadlines for Adding, Dropping and Withdrawing from Courses
You need to be be aware and comply with the deadlines of “add a course”, “drop a course”, etc. Also, for more information on grading policies and other academic policies, see https://e-catalogue.jhu.edu/engineering/full-time-residential-programs/undergraduate-policies/academic-policies/grading-policies/
The Office of Academic Support at JHU
All programs are free to students. Please see below for specifics:
- PILOT Learning—Peer-Led Team Learning
- Students are organized into small study teams who meet weekly to collaborate on faculty-developed problems-sets. Students work together as a team to solve problems.
- A trained student leader acts as captain and facilitates the weekly meetings using various strategies to foster a collaborative learning environment.
- Registration opens on August 31st at 9pm EST; registration will remain open throughout the semester if space allows.
- Contact: Ariane Kelly <maillto:ariane.kelly@jhu.edu>
- Instagram: @jhupilot
- Learning Den Tutoring Program - Small Group Tutoring
- Small group, tailored tutoring of 4 students or less which is headed by one tutor. Visit the website (above) to access zoom links for drop-in sessions
- Tutors can assist with but are not limited to:
- Review and strengthening of subject-specific material knowledge
- Assist with homework-like problems
- Course-specific study skills and exam preparation
- Contact: Kaitlin Quigley quigley@jhu.edu
- Instagram: @jhulearningden
- The Study Consulting Program
- Students work one-on-one with a study consultant to set academic goals and develop customized strategies for success. Areas addressed include but are not limited to:
- Time management
- Note taking and test preparation
- Mastering large amounts of information
- Contact: Dr. Sharleen Argamaso sharleen.argamaso@jhu.edu
- Instagram: @jhustudyconsulting
- Students work one-on-one with a study consultant to set academic goals and develop customized strategies for success. Areas addressed include but are not limited to:
- The Writing Center
- Undergraduate and graduate students in KSAS/Whiting School of Engineering can schedule 50-min sessions with a Writing Center tutor to look over a draft of written work (up to 10 pages) or a personal statement for graduate study
- Contact: Robert Tinkle rtinkle1@jhu.edu
- Web Address: https://krieger.jhu.edu/writingcenter/