Haverá Código por Robert C. Martin
Alguém poderia argumentar que um livro sobre código está, de certa forma, ultrapassado — que o código não é mais a questão; que deveríamos nos preocupar mais com modelos e requisitos. De fato, alguns sugeriram que estamos próximos do fim do código. Que em breve todo o código será gerado em vez de escrito. Que programadores simplesmente não serão mais necessários porque pessoas de negócios gerarão programas a partir de especificações.
Besteira! Nunca nos livraremos do código, porque código representa os detalhes dos requisitos. Em algum nível, esses detalhes não podem ser ignorados ou abstraídos; eles precisam ser especificados. E especificar requisitos com detalhes suficientes para que uma máquina possa executá-los é programação. Uma especificação como essa é código.
Espero que o nível de abstração de nossas linguagens continue a aumentar. Também espero que o número de linguagens específicas de domínio continue a crescer. E isso será algo positivo. Mas isso não eliminará o código. Na verdade, todas as especificações escritas nessas linguagens de alto nível e específicas de domínio serão código! Elas ainda precisarão ser rigorosas, precisas e tão formais e detalhadas que uma máquina possa compreendê-las e executá-las.
As pessoas que pensam que o código um dia desaparecerá são como matemáticos que esperam descobrir uma matemática que não precise ser formal. Eles esperam que um dia descubramos uma maneira de criar máquinas que possam fazer o que queremos, em vez do que dizemos. Essas máquinas teriam que nos entender tão bem a ponto de traduzir necessidades vagamente especificadas em programas perfeitamente executáveis que atendam precisamente a essas necessidades.
Isso nunca acontecerá. Nem mesmo os humanos, com toda a sua intuição e criatividade, foram capazes de criar sistemas bem-sucedidos a partir de sentimentos vagos de seus clientes. De fato, se a disciplina de especificação de requisitos nos ensinou algo, é que requisitos bem especificados são tão formais quanto código e podem atuar como testes executáveis desse código!
Lembre-se de que o código é, na verdade, a linguagem na qual expressamos, em última instância, os requisitos. Podemos criar linguagens que sejam mais próximas dos requisitos. Podemos criar ferramentas que nos ajudem a analisar e organizar esses requisitos em estruturas formais. Mas nunca eliminaremos a precisão necessária — então, sempre haverá código.