web-dev-qa-db-fra.com

Pourquoi est-il important que HTML et CSS ne soient pas des langages de programmation?

Exemple ici:

Quelles langues devrais-je connaître si je souhaite créer des applications Web?

Oui, je comprends que HTML et CSS ne sont pas complets. Oui, je comprends que ce sont des langues déclaratives et non impératives. Mais pourquoi les gens sont-ils toujours frappés au-dessus de la tête avec ce fait pédant (et sans doute évident) lorsqu'ils posent une question sur ces langues?

160
Robert Harvey

Quelle est vraiment la différence?

La différence réelle et importante entre un langage de programmation et ces autres langages est la suivante:

HTML et CSS décrivent la présentation , tandis que les langages de programmation décrivent la fonction

J'ai l'intention d'illustrer pourquoi cette différence est importante, mais ce pédantisme sur cette question est parfois déplacé.

ne histoire vraie:

Une fois, j'ai passé quelques mois à développer un système de gestion des performances complexe utilisant un "bon" langage de programmation. Il a automatisé le processus de collecte des données de divers autres systèmes, effectué diverses manipulations sur ces données, puis présenté les résultats dans un tableau simple.

Une fois qu'il a été mis en ligne, un cadre supérieur a vu un outil écrit pour une entreprise similaire et a demandé si nous pouvions remplacer ce que j'avais écrit en utilisant leur alternative. De plus, il était contrarié d'avoir passé des semaines à développer ma solution, où cette nouvelle application avait été écrite en quelques jours.

Une enquête plus approfondie a révélé que l'option préférée du gestionnaire était toute présentation sans substance: il y avait beaucoup de couleurs, d'icônes et de graphiques, mais il n'y avait absolument aucune logique derrière leur. Toutes les données devaient être collectées et manipulées manuellement. Malgré la jolie interface, l'application était essentiellement inutile.

Je suis heureux de dire que le manager en question était convaincu que mon approche était celle qui répondait à ses véritables besoins commerciaux.

L'importance de la présentation:

Il y a souvent une implication que les compétences en HTML, CSS, etc. sont en quelque sorte inférieures aux compétences en "vrais" langages de programmation. C'est une grave erreur.

Dans mon histoire, le cadre supérieur a estimé que le design était très important pour lui, dans la mesure où il était initialement prêt à négliger la fonction en sa faveur. Maintenant, si c'était un incident isolé, je pourrais suggérer que le directeur était juste stupide. Mais ce n'était pas le cas. Maintes et maintes fois, j'ai rencontré des utilisateurs qui sont impressionnés par les graphismes flashy et les widgets intelligents, mais pas impressionnés par les fonctionnalités brutes et mes réalisations techniques. Je pense qu'il y a plusieurs leçons à apprendre ici:

  • Les gens évaluent les logiciels selon des critères qu'ils comprennent. Ils comprennent souvent la différence entre beau et laid, mais apprécient rarement les nuances techniques.
  • Les gens sont dupes des apparences. Ce n'est peut-être pas une bonne chose, mais c'est une réalité avec laquelle nous devons vivre.
  • Les apparences influencent la façon dont les gens perçoivent les logiciels. La façon dont les gens pensent du logiciel est importante pour eux. En effet, les gens préfèrent parfois un logiciel qui les rend agréables à un logiciel fonctionnellement supérieur. En effet, ils pourraient bien être plus productifs avec des outils de bien-être qu'avec des outils techniquement supérieurs. Dans cette mesure, nos utilisateurs ne sont pas dupes. Ils font en fait un choix judicieux et réfléchi.
  • En tant que programmeurs, nous négligeons souvent le rôle de la présentation lorsque nous nous concentrons sur la fonction. Dans une certaine mesure, c'est juste et approprié. Cependant, il est important de reconnaître qu'il existe une autre dimension de notre travail qui est importante pour nos clients.

Les langages orientés présentation (HTML, CSS) sont donc importants. La valeur ajoutée par ceux qui peuvent utiliser ces outils efficacement ne doit pas être sous-estimée.

L'importance des vrais langages de programmation

Comme l'OP l'a souligné, les "vrais" langages de programmation sont Turing Complete. En tant que bon geek triste, je trouve cela sublimement fascinant. Cela signifie que, pour tout programme écrit en langage TC, un programme fonctionnellement équivalent peut être écrit en tout autre Langue TC. Bien sûr, cela ne veut pas dire que toutes les langues sont les mêmes. Ils ont chacun leurs forces et leurs faiblesses qui les rendent plus ou moins adaptés à certaines tâches. Cependant, mis à part les E/S, cela signifie que tous les programmes peuvent être écrits dans tous les vrais langages de programmation.

(Soit dit en passant, l'important est T-C. Le déclaratif vs impératif est un redingue ici. SQL, par exemple, est déclaratif mais est également un langage de programmation approprié car il est T-C.)

Bien sûr, il n'en va pas de même pour un langage de balisage comme HTML ou CSS. En fait, il existe des classes entières de problèmes que ces langues ne peuvent tout simplement pas résoudre. Où je peux programmer tout ce que je veux dans un vrai langage de programmation - y compris les moteurs de mise en page - il n'est tout simplement pas possible de réaliser les mêmes choses avec des langages qui ne sont pas 't TC.

Comme souligné dans mon histoire, HTML et ses semblables sont utilisés pour produire une présentation. De vrais langages de programmation sont utilisés pour produire des fonctionnalités.

Pourquoi les programmeurs sont-ils pédant à ce sujet?

  1. Les programmeurs passent beaucoup de temps, d'efforts et d'argent à développer leurs compétences. Les gens apprécient naturellement les choses dans lesquelles ils investissent ("votre cœur est là où se trouve votre argent").
  2. Les programmeurs ressentent souvent le besoin de justifier le temps nécessaire pour produire des résultats par rapport aux résultats rapides obtenus par les concepteurs d'interface utilisateur. Pour ce faire, ils doivent faire une distinction entre ce que font réellement les deux groupes .
  3. Parce que les employeurs doivent appliquer les bonnes personnes aux bons emplois. À moins de clarifier les différences (souvent techniques), les gestionnaires font facilement les mauvais appels.
  4. Parce qu'il y a une réelle et différence fondamentale , comme indiqué ci-dessus.

Est-il toujours approprié d'être pédant?

Avouons-le, en tant que programmeurs nous sommes un lot naturellement pédant. Cela va avec le territoire. Cela n'aide pas que beaucoup d'entre nous aient été brûlés lorsque des non-programmeurs n'ont pas compris ce que nous faisons.

Néanmoins (et pour être honnête, cela va à l'encontre de mes instincts naturels), je ne pense pas que nous devons appeler les gens à chaque fois qu'ils glissent sur chaque petite distinction.

Les choses importantes ici sont le contexte et la perspective .

On me dit que, du point de vue d'un biologiste, une tomate est un fruit. Mais quand je les achète au supermarché, je les cherche parmi les légumes. Pourquoi? Parce que la distinction technique n'a pas d'importance dans ce contexte particulier. De plus, la distinction gênerait leur utilité: si j'étais assez stupide pour inclure des tomates dans une salade de fruits, par exemple.

C'est la même chose avec les langages informatiques. Il y a des moments où la différence entre les langages de programmation et les autres langages est vraiment importante . Très souvent, cependant, nous pouvons tous communiquer parfaitement efficacement en les regroupant tous ensemble. Dans le cas de la question liée par l'OP, cela n'avait vraiment pas d'importance quelles langues étaient de vrais langages de programmation et lesquelles ne l'étaient pas. Faire remarquer la distinction n'a fait avancer la discussion d'aucune façon. Heureusement, à part ajouter un peu de bruit (et devenir le stimulant d'une discussion intéressante!), La pédanterie liée par l'OP était de peu d'importance. Au pire, cependant, la pédanterie peut susciter des sentiments négatifs et endommager les relations ... du moins selon ma femme.
:-)

Comment gérer le pédantisme parmi les programmeurs

Un de mes prédicateurs a prononcé un sermon intitulé:

est-ce une colline qui mérite de mourir?

Il faisait référence aux généraux qui font une évaluation stratégique sur quelles batailles valent la peine d'être combattues: les gains valent-ils les coûts?

  • Vaut-il vraiment la peine d'interrompre le déroulement de la discussion pour faire cette distinction?
  • Mon pédantisme découle-t-il d'un sentiment d'arrogance ou d'un mal passé?
  • Mes commentaires valorisent-ils les compétences des autres ainsi que les miennes?

Bien sûr, il y a des moments où des distinctions doivent être faites. Mon objectif est que, lorsque j'apporte une contribution, cela ajoute de la valeur à nos efforts collectifs.

C'est, après tout, le travail de tout vrai programmeur.

300
Kramii

Dites à un ingénieur civil ou mécanique que vous avez étudié le "génie logiciel" et il vous dira que le "génie logiciel" n'est pas réel ingénierie.

Dites à un pilote de F-16 que vous pilotez Cessnas pour le plaisir et il vous dira que vous n'êtes pas un pilote réel.

Dites à un médecin que vous êtes un chiropraticien et il vous dira ... eh bien, n'allons pas là-bas :-)

Je pense que c'est surtout que les gens n'aiment pas l'idée que leur profession soit infiltrée par des prétendants ou des gens qui ne sont pas vraiment "dignes".

Maintenant, pour être honnête, il est assez clair que HTML et CSS ne sont pas des langages de programmation . Ce ne sont plus des langages de programmation que le format .docx est un langage de programmation, et prétendre que vous êtes un programmeur si tout ce que vous savez est HTML et CSS est certainement inexact. Mais je pense qu'une partie de la véhémence de la réponse peut être attribuée à ce que j'ai dit plus haut.

De plus, dans la question que vous avez liée, l'intervenant a appelé HTML et CSS un "langage", pas un "langage de programmation". HTML est un langage de balisage et CSS est aussi un langage (je ne sais pas quel "type" de langage vous appelez CSS, cependant?), Donc je pense qu'il était un peu injuste de l'appeler pour les appeler "langues" "...

117
Dean Harding

Cela ne m'importe pas vraiment.

Mais je suppose que pour ceux pour qui il le fait, la distinction entre HTML, CSS, XML, etc. et Real Programming Languages ​​™ est un peu comme la distinction entre le bois et la peinture comme matériaux de construction. Vous ne pouvez pas construire des choses avec Paint comme vous le pouvez avec du bois, et de même vous ne pouvez pas programme avec HTML comme vous pouvez avec un RPL.

Je vous l'accorde cependant, pour certaines conversations, faire une telle distinction peut être hors de propos, et donc pédant et ennuyeux.

9
Eric King

Ce n'est peut-être pas une distinction "importante", car sans doute autant de travail va dans la partie html/css de certains sites Web que dans la partie programmation.

Mais c'est est une distinction importante, car quiconque ne sait pas ce que cela signifie n'a pas sa place dans une équipe qui fait du développement web.

Si un concepteur croit que HTML est de la programmation, laissez-le continuer à concevoir avec les outils Adobe et faites des conceptions liées à l'impression; mais ne croyez rien de ce qu'il pourrait dire sur les applications Web.

Si un développeur pense qu'il est au-dessus des concepteurs parce que `` ses '' langages sont complets pour Turing, ne vous attendez pas à ce qu'il travaille bien avec le concepteur, ou que son code puisse être `` raffiné '' une fois terminé.

6
Javier

Cela a de l'importance pour certaines personnes, car la science des fusées n'est pas à la surface, mais il y a beaucoup d'arcanes qui les entourent en raison du fait qu'elles implémentent différemment dans généralement 5 à des dizaines d'environnements différents dont vous vous souciez réellement. Ce genre d'imprévisibilité et d'attention à l'artisanat fait peur à une certaine variété de professionnels de la technologie qui sont horrifiés par des risques non quantifiables et encore plus horrifiés par l'apprentissage de plus que ce qu'ils doivent absolument après avoir obtenu un diplôme.

Si quelqu'un me demandait quelles langues je connaissais et que je jetais du CSS là-bas et ils disaient "mais ce n'est pas un VRAI langage", je leur demanderais comment ils géreraient le centrage vertical d'un div dans IE 5, IE 6-8 et IE9 +. Ensuite, nous pourrions passer aux coins arrondis, aux problèmes de transparence alpha, le VRAI coupable derrière tous ces arguments ridicules en tant que mise en page qui commencent à peine à devenir vraiment hors de propos et des dizaines d'autres sujets uber-coder qui connaît probablement une langue et prétend une ou deux qu'il est à peine fonctionnel en raison des cours qu'il a dû suivre au collège il y a 10 ans.

Ce sont définitivement des "langues". Je ne les appellerais pas "langages de programmation". Je me sentirais à l'aise de décrire le processus d'écriture dans le codage de ces langues.

En ce qui me concerne, cependant, quiconque a réussi à maîtriser le CSS a le chutzpa et l'éthique de travail pour devenir un excellent programmeur, a déjà une certaine expérience de la pensée orientée objet et a sans aucun doute appris à penser à la façon dont il écrit maintenant pourrait influer sur son travail 25 projets dans le futur.

5
Erik Reppen

Vous l'avez frappé à la tête lorsque vous avez dit "déclaratif, pas impératif". Le balisage (que ce soit HTML, CSS ou autre) décrit les choses. Le but de la programmation est de faire choses.

L'ensemble de compétences requis pour utiliser le balisage est complètement différent de l'ensemble de compétences requis pour programmer.

Les types de problèmes résolus en écrivant le balisage sont complètement différents des types de problèmes résolus par la programmation.

5
HedgeMage

Le langage de programmation est un peu un terme inexact car c'est un terme courant qui est également utilisé par les praticiens et le profane. Les pratiquants ont une signification nuancée de ce terme, contrairement aux profanes. Normalement, leur définition est si elle a des mots/syntaxe amusants que je ne comprends pas immédiatement et que les programmeurs l'utilisent alors cela doit être un langage de programmation. Pas complètement hors de propos, mais nous pouvons convenir que c'est inexact.

Des mots comme déclaratif, impératif et complet sont des termes plus précis avec des significations très spécifiques. Lorsque vous posez une question comme pourquoi HTML/CSS n'est pas un langage de programmation, vous demandez une définition plus précise de ce qu'est réellement un langage de programmation. Nous ne sommes pas pédants, mais essayons de répondre à votre question. Sont-ils les meilleurs termes à utiliser quand même si vous les recherchez sur Google, il est difficile de comprendre ce qu'ils signifient? Dépend. Vouliez-vous la réponse courte ou longue? :-)

Les langages de programmation sont généralement considérés comme étant complets par les programmeurs, mais qu'est-ce que cela signifie? Cela signifie que le langage peut décrire le comportement ou comment faire les choses. Nous l'appelons formellement logique. HTML/CSS peut décrire qu'il y a un bouton situé dans le coin supérieur droit, ou qu'il y a un tableau avec 4 colonnes 5 lignes, les deux premières lignes sont jaunes, et la ligne du bas a du texte vert, et chaque cellule du tableau a 5 pixels d'espace vide autour du contenu.

Ce que HTML/CSS ne peut pas faire, c'est exprimer le comportement ou la logique de ce qui se passe lorsque vous cliquez sur le bouton. Il ne peut pas dire que lorsque je clique sur ce bouton, extraire les valeurs de ce tableau et les additionner, et écrire cette valeur dans une nouvelle ligne au bas du tableau. Décrire le comportement équivaut à peu près à tourner-complet sans devenir trop pédant.

Plus précisément, Turing-complete signifie que vous pouvez implémenter le langage en lui-même. Cela signifierait que je pourrais écrire un programme javascript qui prend une chaîne de javascript et qu'il pourrait l'exécuter (sans utiliser la fonction eval ()). En fait, je peux écrire un programme javascript qui pourrait prendre un programme écrit dans n'importe quel langage complet de Turing et l'évaluer. C'est ce que signifie être Turing complet. Toutes les langues qui deviennent complètes sont équivalentes dans les programmes qui peuvent être exprimés. Une révélation assez incroyable si vous y réfléchissez.

3
chubbsondubs

HTML et CSS ne sont pas des langages de programmation. Passer à autre chose.

Cependant: JavaScript est un langage de programmation. La machine est le navigateur. PHP est un langage de programmation. La machine est virtuelle sur le serveur.

Donc, si vous utilisez uniquement HTML et CSS, vous ne faites aucune programmation (bien que vous puissiez faire de l'ingénierie).

Mais si vous utilisez JavaScript, PHP ou un autre langage de script. Vous faites de la programmation.

Comme pour les vrais langages de programmation. Si vous travaillez sur une machine (réelle ou virtuelle). Et utilisez VOS PROPRES algorithmes pour dire à la machine de faire les choses. Ensuite, vous utilisez un langage de programmation REAL.

3
Ricardo Santos

Voici mes deux cents. HTML et CSS ne sont clairement pas des langages de programmation. Pour cette raison, lorsque je vois HTML ou CSS sur le CV de quelqu'un sous "Langages de programmation", cela me dit simplement que cette personne ne sait pas de quoi il parle.

À part ça, non, ça n'a pas vraiment d'importance.

Soit dit en passant, les programmeurs ont généralement tendance à être pédants. Cela vient simplement avec le travail.

1
Dima

Je pense que cela se résume à cela - HTML et CSS, bien que suffisamment compliqués pour nécessiter un peu de savoir-faire, sont des langages de présentation, les plus adaptés comme format pour les rapports générés. Par conséquent, les personnes qui ne peuvent que les faire ne sont pas considérées comme des codeurs. Gardant à l'esprit que certains codeurs ont été dans l'informatique assez longtemps pour se rappeler quand le traitement de texte moyen a pris plus de syntaxe de commande pour styliser le texte que le HTML.

Ce que certains appellent un "vrai" langage est celui qui traiterait les données d'une manière ou d'une autre pour générer un rapport. Ou quelque chose qui pourrait être utilisé pour écrire un jeu. Connaître le HTML et le CSS à l'intérieur et à l'extérieur est une compétence précieuse, mais elle l'est beaucoup plus si elle se combine avec la connaissance de JS pour le frontal, et Java, PHP, Perl, Ruby, Python, C/C++ ou C # à l'arrière.

À l'inverse, quelqu'un qui ne connaît qu'une de ces "vraies" langues sans aucune technologie Web frontale, limite considérablement sa propre flexibilité en tant que codeur.

0
Danny Staple

Cela n'a pas d'importance. Et c'est aussi une question de définition. Qu'est-ce qu'un langage de programmation? Certains signifient qu'il doit être complet de Turing. D'autres ont d'autres définitions qui font du HTML un langage de programmation. (Et dans votre exemple, ils n'étaient même pas appelés langages de programmation, juste des langages, ce qu'ils sont évidemment).

Ma recommandation: essayez d'ignorer les gens qui signalent ce genre de réclamations inutiles et à bien des égards même incorrectes. Ce n'est qu'une variation de la grammaire nazie. Appeler HTML un langage de programmation n'est pas incorrect dans un sens significatif.

0
Lennart Regebro

Le stéréotype logique "cerveau gauche" ou créatif "cerveau droit" décrit avec précision les ensembles de compétences de nombreuses personnes. D'après mon expérience, "le langage HTML/CSS est-il un langage de programmation" consiste plus à savoir si les gens qui sont bons en HTML/CSS peuvent également être bons dans d'autres tâches de programmation.

La plupart des concepteurs Web avec lesquels j'ai travaillé au cours des 13 dernières années de développement Web ont été en mesure de créer du HTML et du CSS, mais ne sont pas en mesure de gérer des défis de programmation plus exigeants (rien de plus que le plus simple à couper et à couper). JavaScript collé). La plupart des programmeurs et des concepteurs de bases de données ne se soucient pas suffisamment de la présentation visuelle pour faire du bon travail avec HTML/CSS ou la présentation en général. La plupart refusent d’essayer.

HTML et CSS nécessitent quelques compétences en programmation: expérimentation, résolution de problèmes, tests minutieux, compréhension de l'héritage ... Mais ils nécessitent au moins un nombre égal des compétences en conception: sensibilité à la couleur, aux lignes, à l'espacement, à l'équilibre - la plupart des mêmes types de compétences en composition visuelle qui font une bonne photographie.

Étant donné que HTML/CSS est un langage de présentation ou de présentation, il se trouve à la fin du diagramme de flux de données. Aucun autre code ne se trouve en aval de celui-ci. Les compétences de conception de niveau supérieur dont une personne a besoin pour concevoir un bon schéma d'API, de service ou de base de données ne sont pas utilisées en HTML et CSS. Il n'est généralement pas nécessaire de modulariser quoi que ce soit de HTML ou CSS, ou s'il y en a, ce n'est pas au graphiste de le faire. Il est rare que tout la fonctionnalité soit faite avec HTML/CSS . Les menus déroulants sont probablement l'exception la plus courante, mais ils peuvent être créés en coupant et en collant une recette sur le Web plutôt qu'en concevant du code.

Il est inhabituel, mais pas impossible pour un programmeur d'avoir des compétences en conception visuelle ou en mise en page ou pour un concepteur d'avoir des compétences en programmation. Ces personnes sont particulièrement précieuses dans une équipe Web, car elles aident à combler un écart que la plupart d'entre nous ont. Mais ils sont souvent sujets à des stéréotypes, selon lesquels être capable de faire du HTML/CSS est impossible pour un "vrai programmeur", ou vice-versa. Mais cette combinaison de compétences n'est pas plus impossible que pour ce même programmeur d'être un bon marin, un peintre, un cuisinier ou d'avoir une autre compétence qu'ils pratiquent pendant leur temps libre.

Comme d'autres l'ont dit, cette distinction est la plus importante lors de l'embauche. Étant donné que les personnes aux talents croisés sont rares, la plupart des offres d'emploi doivent cibler un ensemble de compétences ou l'autre. Si un programmeur répertorie HTML/CSS sous "Langages de programmation", cela déclenche un signal rouge indiquant qu'il ne peut pas accomplir des tâches de programmation générales, ou que sa définition de la programmation est peut-être très étroite. Peut-être qu'ils le peuvent, cela soulève simplement une question. Si un concepteur répertorie HTML/CSS, vous voulez certainement regarder son portefeuille pour voir qu'il a la capacité artistique de créer l'effet visuel souhaité.

HTML/CSS peut être mis à la poubelle à plusieurs reprises comme n'étant pas de vrais langages de programmation car il est plus sûr et plus socialement acceptable que de jeter les personnes qui ne peuvent pas traverser le fossé hémisphérique qu'ils représentent. Bien sûr, certaines personnes peuvent ne pas avoir cette inhibition. En fait, j'ai travaillé avec un gestionnaire qui disait souvent: "Il a écrit [insérer la fonctionnalité de dorsale du département ici]? Je pensais qu'il venait de faire du HTML?"

Grande question!

0
GlenPeterson