Engineer vs CS
The thing is you need both, and preferably in one person. It is also true that no one is 100% engineer or 100% CS, there is a blend in all of us. Algorithms require raw brain power, whereas engineering requires prior knowledge (best practices) which you cannot get by thinking about the problem harder. (…)
The Reality
The truth is in the ten years or so I have been out of school I have been fighting bad code every step of the way. I can’t remember when was the last time I had to solve an algorithmic problem. (…) I had to rely on “best-engineering-practices” to build something which is “algorithm intensive”. In other words it is my engineering background not my CS which made it possible. I think CS, is required but insufficient.
Going Forward
I would love for the industry to reflect on itself and realize that its problems is not lack of CS majors, or a the lack of bright people, but a lack of good old fashion engineers, than maybe we may start asking a lot more questions, to which the answer is not a single method, but a collection of classes interacting together. It took a handful of scientist to come up with an atom bomb, but it took countless of engineers to work out everything else, and software is no different. You need a handful of CS, and an army of engineers.
La frase sottolineata mi pare il concetto principale. L’approccio ingegneristico è di fondamentale importanza ed è una cosa che la si impara in due modi: o studiando oppure facendo esperienza al fianco di qualcuno che lavora utilizzando tale approccio. L’ingegneria del software è proprio un campo dove maggiore è la differenza tra chi usa un metodo e chi non lo usa. Il metodo è qualcosa che sta a monte rispetto l’esperienza nella programmazione che, invece, sta a valle e ne diviene solo lo strumento tecnico. Perché puoi sapere a memoria tutti gli alfabeti del mondo, ma se non sai pensare in modo astratto ad un concetto non sarai mai in grado di scrivere un ottimo tema. Pensare in modo astratto è qualcosa che si impara, non si nasce.