I grew up in Northern Germany and attended the Christian-Albrechts-Universität in Kiel, a harbor town at the Baltic sea. I received a M.S. in computer science from Syracuse University, and a Ph.D. in mathematics from the University of Michigan in Ann Arbor. I taught computer science at San Jose State University for almost thirty years and held visiting appointments at universities in Germany, Switzerland, Vietnam, and Macau. I was a “serial entrepreneur” before that was a thing, including a stint as VP and CTO of a dot com startup that went from three people in a tiny office to a public company. In my copious spare time I write books and develop online courses for beginning and professional programmers.

Software

• CodeCheck is a convention-over-configuration autograder for Java, Scala, Python and C/C++. Now with Parsons puzzles and code tracing
• The GridWorld framework was used in the AP CS course as a case study from 2008 until 2013.
• Violet is a free, easy to use UML editor.
• The traffic jam simulator applet simulates the traffic flow on a freeway and shows how traffic jams are inevitable even at modest loads if too many people don't maintain their speed.
• Safe STL is a safe version of the original HP STL implementation.
• ChiWriter, an ancient word processor

The March of Progress

1980: C
`printf("%10.2f", x);`
1988: C++
`cout << setw(10) << setprecision(2) << fixed << x;`
1996: Java 1.0
```java.text.NumberFormat formatter = java.text.NumberFormat.getNumberInstance();
formatter.setMinimumFractionDigits(2);
formatter.setMaximumFractionDigits(2);
String s = formatter.format(x);
for (int i = s.length(); i < 10; i++) System.out.print(' ');
System.out.print(s);```
2004: Java 5
`System.out.printf("%10.2f", x);`
2008: Scala and Groovy
`printf("%10.2f", x)`

(Thanks to Will Iverson for the update. He writes: “Note the lack of semi-colon. Improvement!”)

2012: Scala 2.10
`println(f"\$x%10.2f")`

(Thanks to Dominik Gruntz for the update, and to Paul Phillips for pointing out that this is the first version that is checked at compile time. Now that's progress.)

2023: Java 21
`System.out.println(FMT."%10.2f\{x}")`