All the Different Ways I’m Going to Torture You

What is this course really about?

SW Engineering is about how to take a “word problem” (client proposal) and turn it into a working, deliverable application that meets the clients expectations, wants, and needs (those are different things, which we will discuss later in the course)

My approach to SW Engineering (in CS320) is as a “dry run” before your first internship or co-op, at least for the majority of you who have not yet been out in industry.

As such, throughout this course, I want you to experience what it feels like to be a Project Engineer in industry - to be in your career. You will learn (and feel) that by doing - A LOT OF DOING…!!!! :-)

Employers expect that their engineers can do all of the following:

You will be learning all of that by doing all of that this semester while researching, designing, and implementing the following two major projects.

Individual Project

An individual project of your own choosing - choose something that you want to be able to do, that you don’t already know how to do, do it, and prove it. The individual project will run for 10 weeks - starting now (assignments 2, 4, 9).

Why are we going to do that?

Self-Learning: Your individual project will be all about self-learning. You pick your “poison”, you drink it, and then you have 10 weeks to find the “antidote”. All on your own - well, “on your own” in the sense that you will receive no explicit instruction from me on your individual project. I will, at times, provide high level guidance. You have the entire Internet (and anybody on the planet) at your disposal - and you may also use ChatGPT. In fact, I highly recommend it. You propose your project, then you figure it out.

Learning how to learn for yourself is quite empowering. You can solve any problem, even if you have never received instruction in the knowledge domains in which that problem resides.

Self-Interest: You can also use the individual project to explore an area that you want to eventually work in and/or prepare you for different aspects of you team project. For instance, you can learn JavaScript - which we will not be covering in this course, but which most of you will end up using for your team project.

Team Project

A semester long team project that you will select from a list of projects that are posted on the course website (assignments 1, 3, 8). The team project runs the entire semester - starting now. You will give several team milestone presentations during the semester. Your final presentations will be during finals week. Your team project MUST use a client-server architecture. It MUST have a web front-end that connects to a server back-end. The web front-end is the user interface (UI). The back-end does the processing, stores and retrieves the data in a SQL database, and serves up the web pages. At a minimum, you will be using Eclipse, Java, HTML/CSS, and SQL for your project. You will probably use javaScript, and more than that.

Why are we going to do this?

Your team project covers all the facets of Team Project Development:

Proposal (assignment 1): Propose what your team is going to do.

Requirements (assignment 5): Gather the requirements for your application.

Use Cases (assignment 5): Create Use Cases from those requirements.

Analysis & Design (assignment 6): Create design and architecture document using textual analysis from your Use Cases, and create a UML diagram for the structure and interaction of your project classes.

Version Control (Git & GitHub): How to manage and share issues, milestones, code, and documentation between all of your team members (Git will be the bain of your existence).

Agile Development Process (Sprint and Scrum): How to prioritize, schedule, and distribute your development tasks in a flexible fashion to adjust for changing requirements, ommissions/flaws in your design, bugs and other dealys in development.

Working with Legacy Code in a Complex System: In industry, including your co-ops/internships, you will be thrown into a legacy system - the project, the IDE, the language(s), the OS, the tools, the hardware, even the team will already exist, you will NOT get to choose them. We will work with legacy code in this course. You will have to load specific versions of Eclipse and Java, as well as download legacy labs for learning and developing servlet-based Web Applications, developing and using SQL databases, and for tying your front-end client to your server, servlets, and database.

Testing (automated JUnit test suites): You will be developing JUnit tests for ALL of your methods as you develop those methods. You might even being developing test for code you didn’t write.

Learning “on the job”: As you are designing and developing your team project, you will be learning new languages and tools that you will need to use in order to develop your project: Requirements gathering, Use Cases, Textual Analysis, UML, HTML/CSS/JS for your front-end, Eclipse 2020-06 IDE, Java JDK 1.8.0-301, Apache Jetty9 server, Apache Derby SQL DB application, mostly like JavaScript, Java Servlets, JSPs (Java Server Pages), JSTL (Java Standard Tag LIbrary (JSTL), and any other tools you want to use.

Solving Open-Ended Problems: There is no sigle right answer for the vast majority of what you are going to do in this course. And you might not know that you have one of the right answers, or a wrong answer until far after you think you have solved the problem.

Using ChatGPT: You will be creating a free ChatGPT account, and learning how to prompt and use ChatGPT as a collaborative tool and one-on-one assistant and tutor. I have been using ChatGPT to see what kind of answers it would give to your Prep Exam, and it did better than any of you. We are going to give you a head-start on your contemporaries from other schools, and get you immersed in it quickly. Like and IDE, and various programming languages, you will be using a tool like ChatGPT for the rest of your careers - or at least until AI replaces us all… :-)

Documentation and Presentation Skills: You will be giving me three personal milestone presentations for your individual project, your team will give four Milestone presentations to the class, and there will be a proposal and final report for your individual project, as well as various analysis and design documents and a final technical report for your team project.

Working in a Collaborative Team Environment: If you think working with a computer has been a pain-in-the ass, just wait until you work with people (especially when your grade depends upon their effort and success, and their grade depends o your effort and success)

Meeting Deadlines: You will be held to strict deadlines in this course. There will be NO leeway. I WILL hold your feet to the fire and expect you to deliver. That’s how it works in industry, that’s what your employers and your co-workers will expect - that’s how it will work in this course.

Peer Evaluations: Your team project grade is going to depend not only on your performance, but on your teammates perception of that performance. We will have mid-semester and final peer evals that will help determine the portion of your team project grade for which you will reeive credit. Just because your team project gets an ‘A’, does not mean that you will. On the other hand ,just because your team project failed does NOT mean that you will fail (although in my 8 years of teaching this course, I’ve never had a team project fail).

How Engineering Feels: We’re engineers, we don’t talk about feelings… :-) But a major part of an engineering career involves A LOT of Stress, Anxiety, Frustration, and Self-Doubt - pretty much daily. My intent with this course is for you to learn how to deal with that emotional environment while still successfully completing your projects and all of your other coursework.

Preparation for Co-op/Internship: In my view, that is the primary goal of this course, to provide you with a full “dry run” of the project development experience.

Assessment: Industry does NOT provide you with daily, weekly, monthly assessments of you efforts - you do NOT receive feedback (a grade and/or a solutiong) for every problem that you solve. You do usually get 1-2 evaluations per year - at least an annual review. The grading in this course is very similar to that. Although I will grade your labs and assignments, and milestones, and exams in a timely fashion - you won’t really have much of an idea about your final grade until after your final presentations. So much of your grade rests on the success of your projects, and on the peer evaluations of your teammates, and well as my evaluatio of your professionism, that you will only have about 33% of your grade by the time your Final Presentation comes down.

As such, do NOT treat this course as a regular academic course - it is NOT just another course to pass and check-off on your course planner. This course IS your career - treat it is as such. If you do the work, if you apply yourself, if you tackle your projects with curiosity, passion, and tenacity, you will not only survive this course, you will thrive in it, and for the rest of your academic career - and beyond.