Learning computational design