Agile Software Engineering Course Syllabus
- 1 Course Description
- 2 Instructor
- 3 Tentative Topics
- 4 Programming languages and frameworks
- 5 Software
- 6 Communication
- 7 Getting help
- 8 Grading
- 9 Submitting exercises
- 10 Late work policy
- 11 Team project
- 12 Inside class
- 13 Outside of class
- 14 Books
- 15 Inspirational Quotes
Agile software development has come to describe a specific approach and toolset that allow for the requirements of a software project to change as a project progresses without disrupting schedules, budgets, and responsibilities. The field of DevOps, a portmanteau of development and operations has introduced further processes and infrastructure to automate many of the tasks required in such development. Together, Agile's methodology and DevOps' automation have increased the speed, robustness, and scalability with which software is developed today. Upon completion of this course, students will understand the core methodologies, technologies, and tools used for software engineering.
We will try to weave as many of the following into the course as possible, although we will surely not be able to cover all:
Tools and techniques of the trade
- Version control
- Code collaboration
- Continuous integration / deployment
- Configuration management
- Automated testing
- Change management
- Project planning and management
- Personality types
- Team formation
- Roles and responsibilities
- Task estimation and assignment
- Conflict resolution
- Team communication
- Code level
- Demos and presentations
- Collaboration tools such as Git, GitHub, Slack, MS Teams, Discord, Kanban boards
Software development phases
"In almost all cases, I’m opposed to setting aside time for refactoring." -Martin Fowler
"Premature optimization is the root of all evil." -Donald Knuth
- Big Design Up-Front (BDUF)
Design and modeling
- Software architecture
- Design patterns
- Service Design
- Applied human-computer interaction
Data and databases
- Other No-SQL
Programming languages and frameworks
- If you are uncomfortable or lack the time to teach yourself a new language or technology, then this course may not be for you.
- Exploring ES6, by Alex Rauschmayer
- React.js official site, including tutorials and documentation.
- React Router Tutorial, by Dev Ed.
- Video course: React for Web Designers, by Joe Chellman
- Express.js official site, including tutorials and documentation.
- Build A Restful Api With Node.js Express & MongoDB by Dev Ed.
- Video course: Dynamic websites with Node and Express, by Daniel Khan
MongoDb and Mongoose
- Video course: Databases for Node.js Developers, by Daniel Khan
- Mongoose official site, including tutorials and documentation.
- Git - https://git-scm.com
- GitHub - https://github.com
- Discord - https://discord.com/
- Circle CI - https://circleci.com/
- Draw.io - https://draw.io
- Visual Studio Code - https://code.visualstudio.com/
- Mockaroo - https://mockaroo.com/
- and more...
We use Discord as our main communication channel for announcements and discussion.
Each student must create a private channel in Discord.
- Name the channel 'assgn_fb1258', where 'fb1258' is replaced with your own NYU Net ID.
- Invite the graders to join your channel. The usernames of the graders in Discord will contain the word 'Grader' in them.
Help resources available to you are listed in order of “seriousness” of your problem:
Students are expected to consult the Student FAQ prior to asking questions of the tutors, professor, or other students. This allows us to focus our time on questions of greater significance.
Our tutors will be available in a combination of in-person and online sessions.
If you have question for the tutor at other times, post something to the #tutoring communication channel, and someone will respond as soon as they can.
Talk with the professor
- talk before class
- raise your hand during class
- talk after class
- come to open office hours
- Quizzes - 35%
- Individual exercises - 15%
- Team project - 50%
Submit exercises by sending them as messages to the Discord private channel you have created.
- Include a polite message with your name and the name of the exercise
- most assignments consist of GitHub repositories - for these, be sure to push your work to the repository and include the link to your repository in your message.
- if you have been asked to submit files, include all files as a single zip file... If you are not familiar with naming files and creating zip files, see the tutors.
- unless you have good reason to do otherwise, follow best-practices for all basic file names and file extensions
Late work policy
- work is due before class on the due date indicated on the schedule
- for every 24 hours that any work is late, we will apply a 10% penalty on the grade, up to a maximum penalty of 30%.
- after 72 hours, we will no longer accept the work.
You are automatically granted two extensions for late work up to one week overdue. You can use these for either individual exercises or quizzes, but not for any work involving a team or group. Please do not ask for further extensions.
- The same team of 5-to-10 students will work on a project for the majority of the term.
- The team proposes their own project ideas and plans with guidance/approval from instructor.
- There will be several deliverables throughout the term.
- You will receive a grade for the team project based on your individual contribution to the project balanced with the success of the project as a whole
- Artifact submission and quality
- Instructor observation
- Peer evaluations
Class time will be consumed by a variety of activities:
- Exercises - individual, team project group, and other group exercises
- Project work time
- Demonstrations and presentations
Outside of class
It is expected that you will do the majority of course work outside of class.
- any assigned reading and/or videos
- any assigned quizzes or individual exercises
- team projects
There are no required books for this course. There are, in fact, few good books on this subject. However, material will be pulled from several sources online or on paper, including:
- Software Engineering, 10th edition, Ian Sommerville
- Software Engineering, Ivan Marsic
- Introduction to Software Engineering, Wikibooks
"One of our difficulties will be the maintenance of an appropriate discipline, so that we do not lose track of what we are doing. We shall need a number of efficient librarian types to keep us in order..." -Alan Turing, 1947 in his lecture to the London Mathematical Society
"The masters [programmers] are liable to get replaced because as soon as any technique becomes at all stereotyped it becomes possible to devise a [program] which will enable the electronic computer to do it for itself. It may happen however that the masters will refuse to do this. They may be unwilling to let their jobs be stolen from them in this way. In that case they would surround the whole of their work with mystery and make excuses, couched in well chosen gibberish, whenever any dangerous suggestions were made." -Alan Turing, 1947
There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies, and the other way is to make it so complicated that there are no obvious deficiencies." -C.A.R. Hoare, 1980, in his ACM Turing Award Lecture