Course Syllabus - Software Engineering
Software Engineering
New York University
Department of Computer Science
Course description
Taking an engineering approach the problem of developing software, students work on a series of short team software projects primarily written in Python designed to illustrate different aspects of the engineering process. Through lecture and hands-on practice, students will learn some of today’s most important engineering practices, including requirements gathering, interface design and rapid prototyping, software testing and continuous integration, packaging, containerization and continuous deployment.
Credits
4 credits
Meeting pattern
Mondays/Wednesdays 2:00-3:15
Prerequisites
Computer Systems Organization (CSCI-UA.0201) with a grade of C or better
Learning objectives
Upon completing this course, students will be familiar with some of the most important software engieering tools and practices, including:
- The history and importance of software engineering - readings in history of the discipline and the history lack of education preparing students for employment in it
- Version control using Git & GitHub - all project work in the course will be tracked using
git
version control, which keeps an archive of all changes to the project. - Requirements gathering and specification - how to determine and document the scope, complexity, and specific requirements of a software project
- UML diagramming and domain modeling - common forms of diagrams used to model the structure of a software system
- Rapid prototyping - how to quickly build a prototype of a software system to test its functionality and usability
- Software demonstrations - for each project, students are required to give a demonstration of their software to the class
- Full-stack mobile web application development in Python - in one project, students will build a full-stack web application using Python, Flask, and SQLite
- Database integration - students will integrate databases into several projects to learn how contemporary software stores data
- System building - survey of the history of tools for documenting and executing the steps to build software, including
make
,ant
,maven
andgradle
- Software testing and continuous integration - testing frameworks for validating the correctness of software, and tools to automate that process
- Software packaging and distribution - projects will focus on Python-specific tools for building and distributing software, such as
pip
,pipenv
,distutils
,setuptools
,twine
, andPyPi
. - Software delivery and continuous deployment - how to deliver and deploy software to its target environment so users can access it
- Virtualization and containers - how software can be packaged to make it more portable, and how to run software in a containerized environment using Docker
- Design patterns - common solutions to common software design problems
- Release management - how to systematize the process of releasing versions of software to users
- Team communication - students will learn how to communicate effectively in informal and formal group settings, how to write light software documentation, how to present work and give and receive criticism, and effective organization and use of messenger apps to facilitate teamwork.
To achieve mastery in these topics, students will take quizzes corresponding to the material covered in each lecture while also working with a single team on a single software project for the majority of the semester.
While significant class time is dedicated to hands-on student work, students are expected to collaborate with their teams for 10-15 hours each week reviewing instructional materials provided by the instructor and programming their software projects.
Instructor
Amos Bloomberg
amos at cs dot nyu dot edu
WWH 424
Getting help
Help resources available to you are listed in order of urgency of your problem:
Messaging
Our course will use a message board (link to be distributed in class) as its main communication channel for announcements and discussion. This is a good place to ask questions that anyone - other students, graders, tutors, or the professor - can answer. This is a resource best used when the answer is not required urgently.
Tutoring
Tutors for this course are waiting to answer your questions, either on our message board or during dedicated tutoring hours. Use tutoring for more involved questions and when you prefer a more immediate answer.
Tutoring hours (all times in Eastern Time):
- TBD
Talk with the instructor
For any issues at all, contact the instructor:
- see me before class
- raise your hand or simply speak during class
- see me after class
- come to my open office hours (hours to be distributed in class)
Additional tutoring resources
Additional academic support is also available through the University Learning Center.
Attendance & participation
Attendance is mandatory and more than two absences may be penalized up to 10% of the total grade. In-class and online message board participation is encouraged. Anecdotally, students who do not attend class regularly and who do not participate in discussions tend to do poorly.
Student and instructor interaction during class
Class sessions are a mixture of lecture, discussion, and group project work. During any lecture or discussion, students are generally encouraged to participate with questions, comments, and constructive criticism of the material being covered. On days when students work on group projects, students work together in small groups of typically 4-6 people to complete specific software projects, with help and guidance provided by the instructor.
Required software and hardware
All students require access to a desktop or laptop computer on which they can write software using a specific set of applications.
Grading
You will receive a grade calculated mechanically on the following rubric.
- Quizzes: 25%
- Exercises & Projects: 75%
Attendance may be taken into account in the final grade.
Letter grades
The final class grade will be assigned as follows:
Grade Range | Letter Grade |
---|---|
93-100% | A |
90-92% | A- |
87-89% | B+ |
83-86% | B |
80-82% | B- |
77-79% | C+ |
70-76% | C |
60-69% | D |
0-59% | F |
Quizzes
Quizzes are completed outside of class. You must be logged into Google with your NYU Net ID account in Google in order to view the Quizzes.
Quizzes are submitted by submitting a Google Form.
Team projects
Projects are primarily done with a group and are mostly completed outside of class.
All projects are submitted by pushing code to GitHub.
- we will cover how to push code to GitHub
- unless you have good reason to do otherwise, follow best-practices for all basic file names and file extensions
Late policy
All assigned work is due before class on the due date indicated on the schedule
- for every 24 hours that work is late, we apply a 10% penalty on the grade, up to a maximum penalty of 30%.
- after 72 hours, we will no longer accept the work.
Extensions
Students are automatically granted 2 late assignment extensions of up to 3 days late each, with the exception that all assignments must be submitted before the last day of regular classes before the final exam period.
- extensions must be used immediately upon submitting the work and cannot be retroactively applied later on.
- when submitting an assignment for which you would like to use one of these automatic extensions, you must notify the grader that you are using the extension, otherwise your assignment will be rejected.
- for group work, each member of the group must use an extension (or lose points if none is available) for the entire group to submit work late.
- Do not ask for any extensions from the professor
Regrade requests
- If a student requests a regrade of any work, we will regrade the work in full, not just the part that the student believes has been mis-graded.
Disability disclosure statement
Academic accommodations are available for students with disabilities. Please contact the Moses Center for Student Accessibility (212-998-4980 or mosescsd@nyu.edu) for further information. Students who are requesting academic accommodations are advised to reach out to the Moses Center as early as possible in the semester for assistance.
Student wellness
In a large, complex community like NYU, it’s vital to reach out to others, particularly those who are isolated or engaged in self-destructive activities. Student wellness is the responsibility of all of us.
The NYU Wellness Exchange is the constellation of NYU’s programs and services designed to address the overall health and mental health needs of its students. Students can access this service 24 hours a day, seven days a week - wellness.exchange@nyu.edu; (212) 443-9999. Students can call the Wellness Exchange hotline (212-443-9999) or the NYU Counseling Service (212-998-4780) to make an appointment for Single Session, Short-term, or Group counseling sessions.
Academic Integrity
Working with others and leveraging all resources available to you is a prerequisite for success. This is different from copying, cheating, plagiarism, and mental laziness. All submitted work must be your own. There are very reliable systems we use to detect plagiarism in computer code, such as moss and compare50. If you submit any work that is not your own, you risk failure or worse.
Please read the Computer Science department’s policy on academic integrity and the University-wide policy which supercedes it.