Course Intro - Software Engineering
Software Engineering
Welcome
Course description
We learn an engineering approach to the problem of software development.
This course is as much about tools and best-practices as it is about finished products.
Students work in teams to produce several software products.
Me
Foo Barstein
- discord: @foo.barstein
Who you are
Profile
Who are you, really?
-
trying to use up college credits
-
doing what your parents and advisors tell you to do
-
interested in becoming a software developer
-
maybe already are a software developer
-
hoping to find a decent-paying job
-
already dressing up like Mark Zuckerberg
-
just having fun
-
here for some other reason…. it doesn’t matter!
Welcome!
What you know
-
computer programming in a reasonably modern language
-
how to name a file and save it to your hard drive and find it later
-
comfortable on the UNIX/Linux command shell
What you probably don’t know
-
Git
-
Web application development
-
How to create software from scratch
-
How to work collaboratively and harmoniously in a team over a long time
-
What it’s like to have your work continually monitored by a boss
-
How to automate away your own job
Topics
Software development process models
We will learn about the difficulties of building software and a few different approaches to the problem:
-
The advantages and disadvantages of “Big Design Up Front” (BDUP)
-
The so-called “agile” or iterative approach and where it fails
Planning
We will write specifications and build clickable prototypes of software applications that meet the needs of their users. This involves:
-
requirements gathering
-
user experience design
-
rapid prototyping
Web application development
We will sojourn through full-stack development of web application developments, using a Python-based technology stack:
-
MongoDB as the database.
-
Flask for the back-end.
-
raw HTML & CSS for the front-end.
Continuous integration
We will learn to write tests that validate our code behaves as expected and automate the boring job of repeatedly running those tests repeatedly with every code change.
Continuous deployment
We will learn to deploy software to the Internet and how to automate the boring job of re-launching it with every code change.
Skills we will develop
You cannot do contemporary work without some fundamental skills.
-
Basic UNIX/Linux commands
-
Version control (i.e.
gitandGitHub) -
Teamwork and collaboration
-
Use of a good quality Integrated Development Environment (IDE).
Structure
Overview
This course involves each of the following:
-
Lectures
-
Quizzes
-
Team projects
Grading
Grading is broken down as follows:
-
25%: Quizzes
-
75%: Team projects
Attendance is mandatory. Absence, whether full or partial, will result in up to a 10% penalty on your final grade.
Texts
No single textbook is necessary nor sufficient for this course. We will refer to various online resources where relevant.
- Our technology stack is very popular, with plenty of good documentation and tutorials.
Software
Install these now
You will need a variety of software tools. Here are a few to set up right now.
-
Git - for Mac or for Windows
-
A UNIX-like shell, such as in Mac’s Terminal or Git Bash (part of Git for Windows) or Windows Subsystem for Linux (WSL). If using WSL, make sure it is configured to be compatible with Docker.
-
an account set up on GitHub.com
-
Discord (Install the desktop app)
Forbidden software
Some software is inappropriate for the objectives of this course and is therefore forbidden:
-
Cursor or any other editor except Visual Studio Code.
-
GitHub Desktop, GitKraken or any other tool for performing
gitoperations outside of our chosen editor or basic command shell. -
Never edit a file directly through the GitHub interface. Always use the prescribed desktop editor application.
This course is focused on teaching contemporary software development practices. This includes learning to effectively use team messenger apps for communication.
Do not send emails except in an emergency where no other messaging system is available.
Useful resources
Privacy in Visual Studio Code
By default, Visual Studio Code sends telemetry data to Microsoft servers. This data is used to track you and your usage of the editor. See their documentation on how to turn it off. Some users claim that there is no way to fully disable it.
Use of extensions may further erode your privacy. For example, GitHub Copilot and similar “AI” extensions send all your usage data to Microsoft servers.
A free, open source version of Visual Studio Code called VSCodium is available, although it will not necessarily have improved privacy and may not support some of the extensions that we will use in this course. You are welcome to try it and switch to the regular VS Code if you encounter problems.
Setting Up Bash within Visual Studio Code
WINDOWS USERS - one of our learning objectives is to develop fluency in the UNIX/Linux command line environment. UNIX/Linux commands are the lingua franca of computing. Most Unix/Linux shells are some variation of bash, which itself is a clone of sh.
Do not use Powershell or any other shell in this course. It would behoove you to set up a Unix/Linux shell as your default instead of Powershell.
Setting Up Bash within Visual Studio Code (continued)
WINDOWS USERS - you should use Git Bash or Windows Subsystem for Linux (WSL) rather than Windows’ default Powershell or other command line shell program. To set Git Bash or WSL as the default terminal shell within Visual Studio Code, you can try to follow the instructions in the second answer here by Mahade Walid and edited by Schrodinger’s Porridge (ignore the first answer, which is outdated).
What Others Say
The Good
A sample of comments left by former students:
The course was a required course and was very demanding in terms of challenge but it was the appropriate amount and I learned a lot of valuable things. It was a great class and very helpful.
The professor was great. Very informative and provided all the necessary channels and resources needed to learn.
Projects. Hands on. Beats any studying for exams or doing theory based things. It almost felt like an internship of an internship and was very enjoyable while learning more than you realize.
The majority of the course is based on working in a team (which is expected because of the nature of what Software Engineering looks like as a job), and this was fantastic.
The Bad
A sample of comments left by former students:
Quizzes should be rewritten to reduce ambiguity and interpretation. This is because certain questions cannot fully be chalked up to “misunderstanding of the topic” when the question is poorly written for multiple interpretations which would change the outcome of the quiz.
The quick pace sometimes means that students have barely felt like the last project was completed and start working on assignments later.
I believe there shouldn’t be any strict restriction on using a specific technology stack as this is a “software development” course, students should be allowed to use any technology stack they are comfortable with, as long as it provides acceptable performance and solves the problem.
The Ugly
Structure was pretty strong in the first half of the semester. Got a bit lost on the structure in the second half.
I would have liked more direction on the later projects, and in working with groups, there always is a dynamic of some people doing more work than others, which I definitely experienced in half of the projects.
The 4th project practically required an extension as it was incredibly time–consuming.
There are sometimes people in your group that won’t uphold their weight which in my opinion is kind of unavoidable.
Time commitment

Openness

Challenge

Knowledge increase

Conclusions
Thank you. Bye.