Syllabus

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

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

Online Resources

The following sites will be used heavily during the course:

Course Objectives

Upon successful completion of this course, you should be able to:

This course will address the following ABET Outcomes:

  1. (SO1) Analyze a complex computing problem and apply principles of computing and other relevant disciplines to identify solutions.

  2. (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.

  3. (SO5) Function effectively as a member or leader of a team engaged in activities appropriate to the program’s discipline.

  4. (SO6) Apply computer science theory and software development fundamentals to produce computing-based solutions.

Course Topics

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:

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

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:

Personal Wellbeing

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: 

  1. 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
  2. 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
  3. 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: