Welcome!

Software Engineering

Mr. Seibel (he/him)

The goal

A assume you’re in this course because you want to be a good programmer.

So I’m going to teach you what I think you need to know to be a good programmer.

And some other stuff that I just think is cool.

Where you should be

Ideally, you remember everything you learned in AP CSA.

If you are rusty on that you’ll get some practice soon but make sure you get caught up—I’m assuming you basically know how to write Java code.

If you need extra help getting back up to speed, I will have office hours.

The plan

  • Java

  • Not Java

  • Projects

Java

Java is quite a nice language with a rich and well-designed standard library.

The AP curriculum does its best to hide that fact.

Now we are free!

Low-level stuff

We’ll talk in a bit more detail about how computers work because it will help you better understand how a high-level language like Java works.

Also, it’s just cool.

High-level stuff

AP CSA barely touched on how to actually design software of any complexity at all.

And it didn’t discuss several key elements of programming such what to do when bad things happen to good programs. (Exceptions in Java)

So we’ll talk about those things.

Not Java

Modern software is usually built out of a lot of parts and only some of them are built in your main programming language.

We’ll take a look at databases and the Structured Query Language (SQL).

We’ll go deeper into how to use version control (git) than we did in CSA, especially when we do group projects.

Projects

The best way to learn to program is to actually program.

And it’s much more interesting to write programs that actually do things you care about.

This will require some creativity on your part.

Individual projects

A mix of somewhat constrained and totally open.

I encourage you to aim high but also to practice taking incremental steps that move you toward your ultimate vision.

This is one of the most important things to learn to do in programming.

Group projects

“Dear Mr. Seibel, Thank you for being my Software Eng: Advanced Topics CS teacher this year. I learned so much about Java, but also about how terrible working with other people is!”

—Anonymous 2023-24 Software Eng student

And yet …

Very little software is written by one person working alone.

Learning to work with other people is a crucially important skill.

Also, working with other people will really drive home some lessons about how to build good abstractions and write understandable code.

Anything else?

This course is also relatively open: if there are things you want to know more about, let me know and I’ll see if I can work them in, either for the whole class or as part of a project you work on.

Questions?