Welcome!

IB HL / Software Engineering

Mr. Albinson (he/him) / Mr. Seibel (he/him)

IB HL

I assume you’re here either because you really like CS.

Or you need another HL.

Or both.

We’ll get you ready for the HL IA and Exam.

Software Engineering

I assume you’re here because you want to be a good programmer.

In the past this course has been almost entirely about programming.

It will still be a lot of programming but also some more about how computers work from the hardware to the operating systems.

The plan

  • Java review/crash course

  • Programming in Java

  • Not Java things

  • 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!

Compared to Javascript

Syntactically similar (curly braces and semicolons).

Statically typed, which means we need to call our shots about what kind of values variables will hold. Javascript is more loosey-goosey.

Javascript runs in the browser. Java does not. (Javascript also runs not in the browser.)

A lot of Javascript these days is really Typescript which is Javascript plus static typing, so even closer to Java.

Low-level stuff

We’ll also be talking about how computers work, both because it’s part of the IB curriculum but also 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.

What about AI?

AI is extremely good at coding.

What does that mean for us puny humans?

Learning to program is still good for your brain.

In a world where there is an explosion of software due to AI, being able to understand what’s actually going on may be even more criticially important.

What I think right now

Some fraction of the knowledge and skills related to writing code that I’ve developed in 30+ years of programming is probably no longer necessary.

Some other fraction of the knowledge and skills I’ve devopled are what allow me to do amazing things with AI coding tools.

I still have very little idea how big each fraction is and what’s in each category.