Qual é a diferença mesmo?
A diferença real e importante entre uma linguagem de programação e essas outras linguagens é a seguinte:
HTML e CSS descrevem a apresentação , enquanto linguagens de programação descrevem a
função
Pretendo ilustrar por que essa diferença é importante, mas esse pedantismo nessa questão às vezes é extraviado.
Uma história verdadeira :
Certa vez, passei alguns meses desenvolvendo um sistema complexo de gerenciamento de desempenho usando uma linguagem de programação "adequada". Ele automatizou o processo de coleta de dados de vários outros sistemas, realizou várias manipulações nesses dados e, em seguida, apresentou os resultados em uma tabela simples.
Uma vez que estava no ar, um gerente sênior viu uma ferramenta escrita para uma empresa semelhante e perguntou se poderíamos substituir o que eu havia escrito usando sua alternativa. Além disso, ele ficou chateado por ter passado semanas desenvolvendo minha solução, onde esse novo aplicativo havia sido escrito em questão de dias.
Investigações posteriores revelaram que a opção preferida do gerente era toda a apresentação sem substância: havia muitas cores, ícones e gráficos, mas não havia absolutamente nenhuma lógica por trás deles. Todos os dados tiveram que ser coletados e manipulados manualmente. Apesar da interface bonita, o aplicativo era essencialmente inútil.
Fico feliz em dizer que o gerente em questão foi convencido de que minha abordagem era a que atendia às suas reais necessidades de negócios.
A importância da apresentação :
Muitas vezes há uma implicação de que habilidades em HTML, CSS etc. são de alguma forma inferiores às habilidades em linguagens de programação "reais". Este é um erro grave.
Na minha história, o gerente sênior achou que o design era muito importante para ele, na medida em que ele estava inicialmente preparado para ignorar a função a seu favor. Agora, se esse fosse um incidente isolado, eu poderia sugerir que o gerente estava apenas sendo tolo. Mas não foi. Repetidas vezes, encontrei usuários impressionados com gráficos chamativos e widgets whizzy, mas não impressionados com a funcionalidade bruta e minhas realizações técnicas. Eu acho que existem várias lições a aprender aqui:
- As pessoas avaliam o software com base em critérios que eles entendem. Eles costumam entender a diferença entre bonito e feio, mas raramente apreciam nuances técnicas.
- As pessoas são enganadas pelas aparências. Isso pode não ser uma coisa boa, mas é uma realidade com a qual devemos viver.
- As aparências influenciam a maneira como as pessoas se sentem em relação ao software. A maneira como as pessoas se sentem sobre o software é importante para elas. De fato, às vezes as pessoas preferem software que as faz se sentir bem em relação a softwares que são funcionalmente superiores. De fato, eles podem muito bem ser mais produtivos com ferramentas de bem-estar do que com ferramentas tecnicamente superiores. Nesta medida, nossos usuários não estão sendo enganados. Eles estão realmente fazendo uma escolha sábia e ponderada.
- Como programadores, geralmente negligenciamos o papel da apresentação ao nos concentrarmos na função. Até certo ponto, isso é certo e adequado. No entanto, é importante reconhecer que há outra dimensão em nosso trabalho que é importante para nossos clientes.
Portanto, as linguagens orientadas a apresentação (HTML, CSS) são importantes. O valor agregado por quem pode usar essas ferramentas efetivamente não deve ser subestimado.
A importância de linguagens de programação reais
Como o OP apontou, linguagens de programação "reais" são Turing Complete. Como um bom nerd triste, acho isso sublimemente fascinante. Isso significa que, para qualquer programa escrito em uma linguagem de TC, um programa funcionalmente equivalente pode ser escrito em qualquer outra linguagem de TC. Obviamente, isso não quer dizer que todos os idiomas sejam iguais. Cada um deles tem seus pontos fortes e fracos que os tornam mais ou menos adequados para determinadas tarefas. Entretanto, à parte E / S, isso significa que todos os programas podem ser escritos em todas as verdadeiras linguagens de programação.
(Aliás, o importante é o TC. O declarativo versus o imperativo é um problema aqui. O SQL, por exemplo, é declarativo, mas também é uma linguagem de programação adequada porque é o TC.)
Obviamente, o mesmo não se aplica a uma linguagem de marcação como HTML ou CSS. De fato, existem classes inteiras de problemas que essas linguagens simplesmente não conseguem resolver . Onde eu posso programar o que eu quiser em uma linguagem de programação verdadeira - incluindo mecanismos de layout - simplesmente não é possível obter as mesmas coisas com linguagens que não são TC.
Conforme destacado na minha história, o HTML e seu tipo são usados para produzir apresentações. Linguagens de programação reais são usadas para produzir funcionalidade.
Por que os programadores são pedantes sobre tudo isso?
- Os programadores gastam muito tempo, esforço e dinheiro desenvolvendo suas habilidades. As pessoas naturalmente valorizam as coisas em que investem ("seu coração é onde está o seu dinheiro").
- Os programadores geralmente sentem a necessidade de justificar a quantidade de tempo necessária para produzir resultados em comparação com os rápidos resultados alcançados pelos designers de interface do usuário. Para fazer isso, eles precisam fazer uma distinção entre o que os dois grupos realmente fazem .
- Porque os empregadores precisam aplicar as pessoas certas nos empregos certos. A menos que esclareçamos as diferenças (geralmente técnicas), os gerentes fazem facilmente as ligações erradas.
- Porque existe uma diferença real e fundamental , conforme descrito acima.
É sempre apropriado ser pedante?
Vamos ser sinceros, como programadores somos naturalmente muito pedantes . Vai com o território. Não ajuda que muitos de nós tenham sido queimados quando não programadores falharam em entender o que fazemos.
No entanto (e para ser sincero, isso vai contra meus instintos naturais), não acho que precisamos chamar as pessoas sempre que elas passarem por todas as pequenas distinções .
As coisas importantes aqui são contexto
e perspectiva .
Disseram-me que, da perspectiva de um biólogo, um tomate é uma fruta. Mas quando os compro no supermercado, procuro por entre os legumes. Por quê? Porque a distinção técnica não importa nesse contexto particular. Além disso, a distinção atrapalharia sua utilidade: se eu fosse tolo o suficiente para incluir tomates em uma salada de frutas, por exemplo.
É o mesmo com as linguagens de computador. Há momentos em que a diferença entre linguagens de programação e outras linguagens realmente importa . Muitas vezes, no entanto, todos nós podemos nos comunicar perfeitamente com eficácia quando apenas os juntamos. No caso da pergunta vinculada pelo OP, realmente não importava quais linguagens eram verdadeiras linguagens de programação e quais não. Apontar a distinção não adiantou a discussão de forma alguma. Felizmente, além de adicionar um pouco de barulho (e se tornar o estímulo para uma discussão interessante!), O pedantismo vinculado pelo OP teve pouca importância. Na pior das hipóteses, a pediatria pode despertar sentimentos negativos e prejudicar os relacionamentos ... pelo menos de acordo com minha esposa.
:-)
Como lidar com a pediatria entre programadores
Um pregador amigo meu certa vez proferiu um sermão intitulado:
é uma colina que vale a pena morrer?
Ele se referia a generais que fazem uma avaliação estratégica sobre quais batalhas valem a pena travar: os ganhos valem os custos?
- Vale a pena interromper o fluxo da discussão para fazer essa distinção?
- Meu pedantismo se origina de uma sensação de arrogância ou de mágoa passada?
- Meus comentários valorizam tanto as habilidades dos outros quanto as minhas?
Obviamente, há momentos em que é necessário fazer distinções. Meu objetivo é que, quando eu der uma contribuição, agregar valor aos nossos empreendimentos coletivos.
Afinal, esse é o trabalho de todo programador real .