Tenho uma pergunta que foi levantada pelo meu último emprego (um pouco estagiário).
Apenas para colocar as coisas em contexto - tenho 21 anos e terminei meu segundo ano de universidade antes disso, tive cerca de 2 anos de experiência em trabalhos de administração de sistemas / controle de qualidade e, basicamente, posso dizer que vi como diferentes Setores de TI operados. Avancemos para os tempos atuais e aqui estou eu conseguindo um emprego em uma das principais instituições de pesquisa do Reino Unido.
O que preciso fazer é criar algumas ferramentas internas usando uma combinação de tecnologias - principalmente AWS / Java / Bash - para você entender. Está tudo bem, estou fazendo o meu trabalho, mas não estou feliz. Por que isso - porque eu devo trabalhar em um assunto ad-hoc. Isso é criar coisas rapidamente, sem gastar tempo em projetar. Meu gerente disse explicitamente que era esperado que "apressasse" os problemas à medida que eles surgissem e nós essencialmente. Como conseqüência, verificou-se que as coisas tinham que ser refeitas e reprojetadas e ainda não são perfeitas. No que diz respeito ao teste - mantenha-o no mínimo, desde que pareça funcionar, então tudo bem.
Tenho a culpa de discordar dessa maneira de conduzir o trabalho? É errado querer pensar sobre o sistema como um todo, depois focar em diferentes componentes e ver como eles podem interagir, para se concentrar em diferentes "pontos-chave" que podem vir a ser problemáticos no futuro? É um crime querer fazer um bom trabalho e não um "trabalho rápido"? É um erro ou atitude errada querer pesquisar as estruturas de dados aplicáveis a um problema, para que você possa escolher o melhor, dependendo de um conjunto de problemas específico? Até onde eu entendi, o trecho "Engenharia" em "Engenharia de software" tem a ver exatamente com isso - pesquise o domínio do problema e encontre uma solução informada e refine conforme necessário?
Eu estive em uma entrevista em um escritório da Arm no Reino Unido e eles me mostraram a sala do SCRUM e parecia que eles tinham uma boa idéia de como gerenciar seu projeto - eles tinham uma carteira de pedidos, tinham métricas sobre quanto tempo cada um problema pode ser resolvido - as coisas usuais para o SCRUM - completamente diferentes da maneira como as coisas são executadas "aqui"
Criei uma ideia errada sobre a indústria de software em geral? Eu gostaria de ouvir sua opinião sobre isso. Quero dizer, eu "entrei" no desenvolvimento de software apenas porque quero criar coisas - claras e simples, mas quero criar coisas de qualidade. Quero ver meu software usado em vários cenários, quero vê-lo à prova de balas - essa não é a força motriz para todos os engenheiros de software? Eu acho que todo mundo pode ser um programador / programador apenas aprendendo a sintaxe, mas para mim, onde a verdadeira diversão começa é quando você precisa criar um design que seja possível no mundo real.
Eu costumava fazer minhas tarefas na universidade apenas olhando para elas e iniciando a codificação diretamente, conseguindo facilmente notas acima de 75% e nunca realmente apreciei o módulo "ciclo de vida de desenvolvimento de software". Mas agora, quando vi no mundo real como é ruim trabalhar sem nenhum processo formal e a frustração inerente à situação em que você não sabe se os requisitos mudarão amanhã (oh, eu disse que não possui análise de requisitos claramente definida?)
Eu realmente gosto de acreditar que acabei de chegar a uma posição em que algumas pessoas apenas precisavam de um macaco de código para fazer seu trabalho sujo, e esse não é o caso de como o mundo do software opera em geral.
because I'm expected to work in an ad-hoc matter. That is create things quickly, without spending time on designing
- Bem-vindo ao mundo real, onde há prazos e espera-se que as empresas produzam resultados.