Responder essa, parece que estão querendo colocar os programadores em um patamar superior. SQN. Programadores precisam se dedicar muito nessa profissão.
A profissão de programador, como um todo, demanda que o profissional seja capaz de desmembrar tarefas complexas em passos menores e facilmente executáveis, utilizando uma linguagem extremamente precisa e que não admite erros.
Programas simples como solicitar que um led acenda ao abrirmos uma porta, demandam uma série de instruções que precisam estar ordenadas na sequência correta e devem ser sintática e semanticamente corretas.
Exemplificando, para o Arduino, um programa desses que acende ou apaga um led a partir do monitoramento de um sensor, seria mais ou menos assim:
#include <Arduino.h>
int ledPortaAberta=8;
int ledPortaFechada=10;
int sensorPorta=6;
#define DESLIGADO LOW
#define LIGADO HIGH
void setup(){
pinMode(ledPortaAberta, OUTPUT);
pinMode(ledPortaFechada, OUTPUT);
pinMode(sensorPorta, INPUT);
Serial.begin(9600);
}
void loop(){
if (digitalRead(sensorPorta)==LIGADO){
digitalWrite(ledPortaAberta, DESLIGADO);
digitalWrite(ledPortaFechada, LIGADO);
Serial.println("Porta fechada");
}
else {
digitalWrite(ledPortaAberta, LIGADO);
digitalWrite(ledPortaFechada, DESLIGADO);
Serial.println("Porta aberta");
}
delay(1);
}
Conforme dito, o programa não deve ter nenhum erro sintático, caso contrário ele não ele não irá compilar e muito menos será possível gerar o código executável abaixo:
Ainda assim, não basta saber escrever o programa, colocar os comandos na sequência correta, seguir todas regras da linguagem, saber compilar, gerar esse código hexadecimal e até entender cada um dos comandos hexa acima.
O programa também tem que ser semanticamente correto.
A semântica, o sentido das palavras bem como a interpretação das sentenças e dos enunciados utilizados nessa linguagem acima devem refletir exatamente o que foi solicitado em linguagem natural, “quando uma porta se abre, um led se acende e quanto a mesma porta se fecha, o led tem que apagar”.
O trabalho do programador é converter um requisito em linguagem natural para a linguagem formal.
Esse trabalho de fazer a conversão e garantir que a semântica de ambas linguagens estejam alinhadas é onde está a arte e o desafio que programadores enfrentam todos os dias.
Dá para aprender, mas eu diria que poucos são metódicos o suficiente para tal.
É uma questão de perfil, nada mais.
Resposta originalmente postada no Quora em 29/maio/2020 e fonte da foto do teclado: https://www.cybercentralcorp.com/blog/