Exemplo aqui:
Quais idiomas devo saber se estiver interessado em criar aplicativos da Web?
Sim, entendo que HTML e CSS não são completos para Turing. Sim, entendo que são linguagens declarativas, não imperativas. Mas por que as pessoas sempre batem na cabeça com esse fato pedante (e sem dúvida óbvio) quando fazem uma pergunta sobre esses idiomas?
terminology
Robert Harvey
fonte
fonte
Respostas:
Qual é a diferença mesmo?
A diferença real e importante entre uma linguagem de programação e essas outras linguagens é a seguinte:
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:
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?
É 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 .
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:
Ele se referia a generais que fazem uma avaliação estratégica sobre quais batalhas valem a pena travar: os ganhos valem os custos?
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 .
fonte
Diga a um engenheiro civil ou mecânico que você estudou "Engenharia de software" e eles dirão que "Engenharia de software" não é engenharia real .
Diga a um piloto de F-16 que você voa em Cessnas por diversão e ele diz que você não é um piloto de verdade .
Diga a um médico que você é um quiroprático e ele lhe dirá ... bem, não vamos lá :-)
Eu acho que é principalmente que as pessoas não gostam da ideia de sua profissão ser infiltrada por pretendentes ou pessoas que não são realmente "dignas".
Agora, para ser justo, é bastante claro que HTML e CSS não são linguagens de programação . Eles não são mais linguagens de programação que o formato .docx é uma linguagem de programação e afirmar que você é um programador se tudo o que você sabe é HTML e CSS certamente é impreciso. Mas acho que parte da veemência na resposta pode ser atribuída ao que eu disse acima.
Além disso, na pergunta que você vinculou, o questionador chamou HTML e CSS de "linguagem", não de "linguagem de programação". HTML é uma linguagem de marcação e CSS também é uma linguagem (eu não sei que "tipo" de linguagem você chamaria de CSS?), Então acho que era um pouco injusto chamá-lo por chamá-las "linguagens" "...
fonte
Realmente não importa muito para mim.
Mas presumo que, para quem o faz, a distinção entre HTML, CSS, XML etc. e Real Programming Languages ™ é como a distinção entre madeira e tinta como materiais de construção. Você não pode construir coisas com tinta como você pode com madeira e da mesma forma não pode programar com HTML como com uma RPL.
Contudo, concordo que, para algumas conversas, fazer essa distinção possa ser irrelevante e, portanto, pedante e irritante.
fonte
Pode não ser uma distinção "importante", pois é possível que haja tanto trabalho na parte html / css de alguns sites quanto na parte de programação.
Mas é uma distinção significativa, pois quem não sabe o que significa não tem lugar em uma equipe que faz desenvolvimento na web.
Se um designer acredita que o HTML está programando, continue desenvolvendo com as ferramentas da Adobe e faça projetos relacionados à impressão; mas não acredite no que ele pode dizer sobre aplicativos da web.
Se um desenvolvedor pensa que está acima dos designers porque as linguagens 'his' são completas em Turing, não espere que ele funcione bem com o designer, ou que seu código possa ser 'prettificado' depois que terminar.
fonte
if ... then
construção em tempo de execução e alguma maneira de repetir as coisas um número de vezes anteriormente desconhecido, estou inclinado a dizer que não é uma linguagem de programação. Obviamente, existem algumas linguagens adicionais que complicam a definição; mas HTML / CSS estão longe disso.Você bate na cabeça quando diz "declarativo, não imperativo". A marcação (seja HTML, CSS ou o que for) descreve as coisas. O ponto principal da programação é fazer as coisas.
O conjunto de habilidades necessário para usar a marcação é completamente diferente do conjunto de habilidades necessárias para o programa.
Os tipos de problemas resolvidos escrevendo a marcação são completamente diferentes dos tipos de problemas resolvidos pela programação.
fonte
É importante para certas pessoas, porque também não há ciência de foguetes na superfície, mas há uma grande quantidade de arcanos em torno delas, porque elas são implementadas de maneira diferente em tipicamente 5 a dezenas de ambientes diferentes com os quais você realmente se importa. Esse tipo de imprevisibilidade e atenção ao ofício assusta uma certa variedade de profissionais de tecnologia que ficam horrorizados por riscos não quantificáveis e ainda mais horrorizados por aprender algo mais do que o necessário após obter um diploma.
Se alguém me perguntasse quais idiomas eu conhecia e jogasse CSS por aí e dissesse "mas essa não é uma linguagem REAL", perguntaria a eles como eles lidariam com a centralização vertical de uma div no IE 5, IE 6-8 e IE9 +. Então poderíamos passar para cantos arredondados, questões de transparência alfa, o verdadeiro culpado por trás de todos esses argumentos ridículos de tabelas como layout, que só agora estão começando a se tornar verdadeiramente irrelevantes e dezenas de outros tópicos para o referido codificador que provavelmente conhece um linguagem e afirma uma ou duas em que ele é pouco funcional, devido às aulas que foi forçado a frequentar a faculdade há 10 anos.
Eles definitivamente são 'idiomas'. Eu não os chamaria de 'linguagens de programação'. Eu me sentiria à vontade descrevendo o processo de escrita nessas 'codificações' dessas línguas.
No entanto, para mim, qualquer pessoa que tenha conseguido dominar o CSS tem o chutzpa e a ética de trabalho para se tornar um excelente programador, já possui alguma experiência em pensamento orientado a objetos e, sem dúvida, aprendeu a pensar em como ele escreve agora poderia impactar seu trabalho em 25 projetos no futuro.
fonte
HTML e CSS não são linguagens de programação. Deixe isso para trás.
No entanto: JavaScript é uma linguagem de programação. A máquina é o navegador. PHP é uma linguagem de programação. A máquina é virtual no servidor.
Portanto, se você estiver usando apenas HTML e CSS, não está fazendo nenhuma programação (embora possa estar fazendo alguma engenharia).
Mas se você estiver usando JavaScript, PHP ou outra linguagem de script. Você está fazendo programação.
Quanto às linguagens de programação REAIS. Se você estiver operando em uma máquina (real ou virtual). E está usando SEUS PRÓPRIOS algoritmos para dizer à máquina para fazer as coisas. Então você está usando uma linguagem de programação REAL.
fonte
Linguagem de programação é um termo um pouco inexato, porque é um termo comum usado por profissionais e também por leigos. Praticantes têm um significado matizado desse termo, onde leigos geralmente não têm. Normalmente, a definição deles é que, se houver palavras / sintaxe engraçadas que eu não entendo imediatamente e os programadores a usarem, essa deve ser uma linguagem de programação. Não completamente errado, mas podemos concordar que é inexato.
Palavras como declarativo, imperativo e completo são termos mais precisos com significados muito específicos. Quando você faz uma pergunta como por que HTML / CSS não é uma linguagem de programação, solicita uma definição mais precisa do que realmente é uma linguagem de programação. Não estamos sendo pedantes, mas tentando responder à sua pergunta. Eles são os melhores termos para usar quando, mesmo que você os pesquise no Google, é difícil entender o que eles significam? Depende. Você queria a resposta curta ou longa. :-)
As linguagens de programação geralmente são consideradas completas pelos programadores, mas o que isso significa? Isso significa que a linguagem pode descrever o comportamento ou como fazer as coisas. Nós formalmente chamamos isso de lógica. HTML / CSS pode descrever que existe um botão localizado no canto superior direito ou uma tabela com 4 colunas e 5 linhas, as duas primeiras linhas são amarelas e a linha inferior possui texto verde e cada célula da tabela possui 5 pixels de espaço em branco ao redor do conteúdo.
O que o HTML / CSS não pode fazer é expressar o comportamento ou a lógica do que acontece quando você clica no botão. Não é possível dizer que, quando clico nesse botão, retiro os valores dessa tabela e os adiciono, e escrevo esse valor em uma nova linha na parte inferior da tabela. Descrever o comportamento é aproximadamente equivalente ao Turning-complete sem ser excessivamente pedante.
Mais precisamente, Turing-complete significa que você pode implementar a linguagem em si. Isso significaria que eu poderia escrever um programa javascript que pegasse uma string de javascript e poderia executá-lo (e não usar a função eval ()). Na verdade, eu posso escrever um programa javascript que possa pegar um programa escrito em qualquer linguagem completa do Turing e avaliá-lo. É isso que significa ser Turing completo. Todos os idiomas que estão se tornando completos são equivalentes em quais programas podem ser expressos. Revelação incrível, se você pensar bem.
fonte
Aqui estão meus dois centavos. HTML e CSS claramente não são linguagens de programação. Por esse motivo, quando vejo HTML ou CSS no currículo de alguém em "Linguagens de Programação", isso simplesmente me diz que essa pessoa não sabe do que está falando.
Fora isso, não, isso realmente não importa.
A propósito, os programadores geralmente tendem a ser pedantes. Isso simplesmente vem com o trabalho.
fonte
Não importa. E também é uma questão de definição. O que é uma linguagem de programação? Alguns significam que tem que ser completo em Turing. Outros têm outras definições, que fazem do HTML uma linguagem de programação. (E no seu exemplo, eles nem eram chamados de linguagens de programação, apenas linguagens, o que obviamente são).
Minha recomendação: tente ignorar as pessoas que apontam esses tipos de alegações inúteis e, em muitos sentidos, até incorretas. É apenas uma variação do nazismo-gramatical. Chamar o HTML de linguagem de programação não está incorreto em nenhum sentido significativo.
fonte
Eu acho que tudo se resume a isso - HTML e CSS, embora sejam complicados o suficiente para exigir conhecimento, são linguagens de apresentação, mais adequadas como o formato para relatórios gerados. Portanto, pessoas que só podem fazer isso não são consideradas codificadores. Tendo em mente que alguns codificadores estão na computação há tempo suficiente para lembrar quando o processador de texto médio adotou mais sintaxe de comando para estilizar texto do que HTML.
O que alguns chamam de linguagem 'real' é aquela que processaria os dados de alguma maneira para gerar um relatório. Ou algo que poderia ser usado para escrever um jogo. Conhecer HTML e CSS por dentro e por fora é uma habilidade valiosa, mas é muito mais combinada com o conhecimento de JS para front end e Java, PHP, Perl, Ruby, Python, C / C ++ ou C # no back-end.
Por outro lado, alguém que conhece apenas um desses idiomas 'reais' sem nenhuma tecnologia de front-end da Web está limitando muito sua própria flexibilidade como codificador.
fonte
O buraco de pombo / estereótipo "cérebro esquerdo" lógico ou criativo "cérebro direito" descreve com precisão os conjuntos de habilidades de muitas pessoas. Na minha experiência, "HTML / CSS é uma linguagem de programação" é mais sobre se as pessoas que são boas em HTML / CSS também podem ser boas em outras tarefas de programação.
A maioria dos designers da Web com quem trabalhei nos últimos 13 anos em que desenvolvi a Web conseguiu criar HTML e CSS funcionais, mas não conseguiu lidar com desafios de programação mais exigentes (nada mais que o mais simples JavaScript colado). A maioria dos programadores de hot-shot e designers de banco de dados não se importa o suficiente com apresentação visual para fazer um bom trabalho com HTML / CSS ou apresentação em geral. A maioria se recusa a tentar.
HTML e CSS exigem algumas habilidades de programação: experimentação, resolução de problemas, testes cuidadosos, uma compreensão de herança ... Mas eles exigem pelo menos um número igual de habilidades de design: sensibilidade à cor, linha, espaçamento, equilíbrio - a mesma coisa tipos de habilidades de composição visual que fazem uma boa fotografia.
Como HTML / CSS é uma linguagem de layout ou apresentação, ela fica no final do diagrama de fluxo de dados. Nenhum outro código fica a jusante dele. As habilidades de design de nível maior que alguém precisa para criar uma boa API, serviço ou esquema de banco de dados não são usadas em HTML e CSS. Geralmente, não há necessidade de modularizar nada relacionado a HTML ou CSS ou, se houver, não cabe ao designer gráfico fazer isso. É raro que qualquer funcionalidade seja feita com HTML / CSS . Os menus suspensos são provavelmente a exceção mais comum, mas podem ser criados cortando e colando uma receita da Web em vez de projetar código.
É incomum, mas não impossível, para um programador ter algumas habilidades visuais de design ou layout ou para um designer ter algumas habilidades de programação. Essas pessoas são especialmente valiosas em uma equipe da Web porque ajudam a preencher uma lacuna que a maioria de nós possui. Mas eles geralmente estão sujeitos a estereótipos, que ser capaz de fazer HTML / CSS é impossível para um "programador real" ou vice-versa. Mas essa combinação de habilidades não é mais impossível do que para o mesmo programador ser um marinheiro decente, pintor, cozinheiro ou ter alguma outra habilidade que pratique no tempo livre.
Como outras pessoas disseram, essa distinção entra em foco principalmente na contratação. Como as pessoas com talento cruzado são raras, a maioria das ofertas de emprego tem que ter como alvo um conjunto de habilidades ou outro. Se um programador lista HTML / CSS em "Linguagens de programação", isso indica que eles não podem realizar tarefas gerais de programação ou que talvez sua definição de programação seja muito estreita. Talvez eles possam, isso apenas levanta uma questão. Se um designer lista HTML / CSS, você definitivamente deseja examinar seu portfólio para ver se ele tem a capacidade artística de criar o efeito visual desejado.
HTML / CSS pode ser repetidamente descartado como não sendo linguagens de programação reais, porque é mais seguro e socialmente aceitável do que as pessoas que não conseguem atravessar o hemisfério dividem o que representam. Obviamente, algumas pessoas podem não ter essa inibição. Na verdade, eu trabalhei com um gerente que costumava dizer: "Ele escreveu [inserir funcionalidade da espinha dorsal do departamento aqui]? Eu pensei que ele tinha feito HTML?"
Ótima pergunta!
fonte