Engenharia de Software 1
We see three critical differences between programming and software engineering: time, scale, and the trade-offs at play. On a software engineering project, engineers need to be more concerned with the passage of time and the eventual need for change. In a software engineering organization, we need to be more concerned about scale and efficiency, both for the software we produce as well as for the organization that is producing it. Finally, as software engineers, we are asked to make more complex decisions with higher-stakes outcomes, often based on imprecise estimates of time and growth.
Within Google, we sometimes say, “Software engineering is programming integrated over time.” Programming is certainly a significant part of software engineering: after all, programming is how you generate new software in the first place. If you accept this distinction, it also becomes clear that we might need to delineate between programming tasks (development) and software engineering tasks (development, modification, maintenance). The addition of time adds an important new dimension to programming. Cubes aren’t squares, distance isn’t velocity. Software engineering isn’t programming.
O texto discute diferenças críticas entre a programação e engenharia de software, destacando três pontos principais: tempo, escala e compromissos envolvidos. Na engenharia de software, os engenheiros precisam se preocupar mais ainda com o passar do tempo e a necessidade eventual de mudança. Em uma organização de engenharia de software, por exemplo, a preocupação central é a escala e a eficiência, tanto para o software produzido quanto para a própria organização. Além disso, os engenheiros de software são frequentemente solicitados em decisões mais complexas com resultados de maior impacto. Por mais que a programação seja - também - uma parte significativa da engenharia de software (por ser como se gera novo software em primeiro lugar) engenharia de software não é apenas programação e, como é dito no texto, dentro do Google, às vezes dizem: "Engenharia de software é programação integrada ao longo do tempo.". Se verificarmos essa distinção, poderemos diferenciar mais facilmente tarefas de programação (desenvolvimento) e tarefas de engenharia de software (desenvolvimento, modificação, manutenção).