Automating the Design of Computer Systems