Ejemplo aquí:
¿Qué idiomas debo saber si estoy interesado en crear aplicaciones web?
Sí, entiendo que HTML y CSS no son completos de Turing. Sí, entiendo que son lenguajes declarativos, no imperativos. Pero, ¿por qué la gente siempre se golpea la cabeza con este hecho pedante (y posiblemente obvio) cuando hacen una pregunta sobre estos idiomas?
terminology
Robert Harvey
fuente
fuente
Respuestas:
¿Cuál es la diferencia realmente?
La diferencia real e importante entre un lenguaje de programación y estos otros lenguajes es esta:
Tengo la intención de ilustrar por qué esta diferencia es importante, pero esa pedantería sobre este tema a veces está fuera de lugar.
Una historia real :
Una vez pasé unos meses desarrollando un complejo sistema de gestión del rendimiento utilizando un lenguaje de programación "adecuado". Automatizó el proceso de recopilación de datos de varios otros sistemas, realizó diversas manipulaciones sobre esos datos y luego presentó los resultados en una tabla simple.
Una vez que estuvo en vivo, un gerente senior vio una herramienta escrita para un negocio similar y me preguntó si podíamos reemplazar lo que había escrito usando su alternativa. Además, estaba molesto porque había pasado semanas desarrollando mi solución, donde esta nueva aplicación se había escrito en cuestión de días.
Investigaciones posteriores revelaron que la opción preferida del gerente era la presentación sin sustancia: había muchos colores e íconos y gráficos, pero no había absolutamente ninguna lógica detrás de ellos. Todos los datos tuvieron que ser recopilados y manipulados manualmente. A pesar de la bonita interfaz, la aplicación era esencialmente inútil.
Me complace decir que el gerente en cuestión fue persuadido de que mi enfoque fue el que satisfizo sus necesidades comerciales reales.
La importancia de la presentación :
A menudo hay una implicación de que las habilidades en HTML, CSS, etc. son de alguna manera inferiores a las habilidades en lenguajes de programación "reales". Este es un error serio.
En mi historia, el gerente superior sintió que el diseño era muy importante para él, en la medida en que inicialmente estaba preparado para pasar por alto la función a su favor. Ahora, si se tratara de un incidente aislado, podría sugerir que el gerente simplemente estaba siendo tonto. Pero no fue así. Una y otra vez, me he encontrado con usuarios impresionados por los gráficos llamativos y los artilugios geniales, pero no impresionados por la funcionalidad en bruto y mis logros técnicos. Creo que hay varias lecciones que aprender aquí:
Por lo tanto, los lenguajes orientados a la presentación (HTML, CSS) son importantes. No se debe subestimar el valor agregado por aquellos que pueden usar estas herramientas de manera efectiva.
La importancia de los lenguajes de programación reales.
Como señaló el OP, los lenguajes de programación "reales" son Turing Complete. Como un verdadero geek triste, esto me parece sublimemente fascinante. Significa que, para cualquier programa escrito en un lenguaje TC, un programa funcionalmente equivalente puede escribirse en cualquier otro lenguaje TC. Por supuesto, esto no quiere decir que todos los idiomas sean iguales. Cada uno tiene sus fortalezas y debilidades que los hacen más o menos adecuados para ciertas tareas. Sin embargo, aparte de E / S, esto significa que todos los programas se pueden escribir en todos los lenguajes de programación verdaderos.
(Por cierto, lo importante es TC. El declarativo frente al imperativo es una pista falsa aquí. SQL, por ejemplo, es declarativo pero también es un lenguaje de programación adecuado porque es TC).
Por supuesto, lo mismo no es cierto para un lenguaje de marcado como HTML o CSS. De hecho, hay clases enteras de problemas que estos lenguajes simplemente no pueden resolver . Donde puedo programar lo que quiera en un verdadero lenguaje de programación, incluidos los motores de diseño, simplemente no es posible lograr lo mismo con lenguajes que no son TC.
Como se destacó en mi historia, HTML y sus características se utilizan para producir presentaciones. Se utilizan lenguajes de programación reales para producir funcionalidad.
¿Por qué los programadores son pedantes al respecto?
¿Es siempre apropiado ser pedante?
Seamos realistas, como programadores somos un grupo naturalmente pedante . Va con el territorio. No ayuda que muchos de nosotros nos hayamos quemado cuando los no programadores no han entendido lo que hacemos.
Sin embargo (y para ser honesto, esto va en contra de mis instintos naturales), no creo que tengamos que llamar a las personas cada vez que se saltan cada pequeña distinción .
Me dicen que, desde la perspectiva de un biólogo, un tomate es una fruta. Pero cuando los compro en el supermercado, los busco entre las verduras. ¿Por qué? Porque la distinción técnica no importa en ese contexto particular. Además, la distinción realmente se interpondría en su utilidad: si fuera lo suficientemente tonto como para incluir tomates en una ensalada de frutas, por ejemplo.
Es lo mismo con los lenguajes de computadora. Hay momentos en que la diferencia entre los lenguajes de programación y otros lenguajes realmente importa . Muy a menudo, sin embargo, todos podemos comunicarnos de manera perfectamente efectiva cuando los agrupamos a todos. En el caso de la pregunta vinculada por el OP, realmente no importaba qué lenguajes eran verdaderos lenguajes de programación y cuáles no. Señalar la distinción no avanzó la discusión de ninguna manera. Afortunadamente, aparte de agregar un poco de ruido (¡y convertirse en el estímulo para una discusión interesante!), La pedantería vinculada por el OP tuvo poca consecuencia. Sin embargo, en el peor de los casos, la pedantería puede provocar sentimientos negativos y dañar las relaciones ... al menos según mi esposa.
:-)
Cómo lidiar con la pedantería entre los programadores
Un predicador amigo mío una vez pronunció un sermón titulado:
Se refería a los generales que hacen una evaluación estratégica sobre qué batallas vale la pena pelear: ¿valen las ganancias los costos?
Por supuesto, hay momentos en que es necesario hacer distinciones. Mi objetivo es que, cuando haga una contribución, agregue valor a nuestros esfuerzos colectivos.
Ese es, después de todo, el trabajo de todo programador real .
fuente
Dígale a un ingeniero civil o mecánico que estudió "Ingeniería de software" y le dirán que "Ingeniería de software" no es ingeniería real .
Dile a un piloto de F-16 que vuelas en Cessnas por diversión y él te dirá que no eres un verdadero piloto.
Dígale a un médico que usted es quiropráctico y él le dirá ... bueno, no vayamos allí :-)
Creo que es principalmente que a las personas no les gusta la idea de que su profesión sea infiltrada por pretendientes o personas que realmente no son "dignas".
Ahora, para ser justos, está bastante claro que HTML y CSS no son lenguajes de programación . Ya no son más lenguajes de programación que el formato .docx es un lenguaje de programación, y afirmar que eres un programador si todo lo que sabes es HTML y CSS es ciertamente inexacto. Pero creo que parte de la vehemencia en la respuesta se puede atribuir a lo que dije anteriormente.
Además, en la pregunta que vinculó, el interlocutor llamó a HTML y CSS un "lenguaje", no un "lenguaje de programación". HTML es un lenguaje de marcado y CSS también es un lenguaje (aunque no sé qué "tipo" de lenguaje llamarías CSS), así que creo que fue un poco injusto llamarlo por llamarlos "idiomas "...
fuente
Realmente no me importa tanto.
Pero supongo que para aquellos para quienes lo hace, la distinción entre HTML, CSS, XML, etc. y Real Programming Languages ™ es algo así como la distinción entre madera y pintura como materiales de construcción. No puede construir cosas con pintura como puede hacerlo con madera, y tampoco puede programar con HTML como puede hacerlo con un RPL.
Sin embargo, te concedo que, para algunas conversaciones, hacer tal distinción puede ser irrelevante y, por lo tanto, pedante y molesto.
fuente
Puede que no sea una distinción "importante", ya que podría decirse que tanto trabajo va en la parte html / css de algunos sitios web como en la parte de programación.
Pero es una distinción significativa, ya que cualquiera que no sepa lo que significa no tiene lugar en un equipo que hace desarrollo web.
Si un diseñador cree que HTML es programación, permítale seguir diseñando con las herramientas de Adobe y hacer diseños relacionados con la impresión; pero no crea nada de lo que podría decir sobre las aplicaciones web.
Si un desarrollador piensa que está por encima de los diseñadores porque 'sus' idiomas son completos de Turing, no espere que trabaje bien con el diseñador, o que su código pueda ser 'embellecido' después de que se haga.
fuente
if ... then
construcción en tiempo de ejecución y alguna forma de repetir cosas un número desconocido de veces, me inclino a decir que no es un lenguaje de programación. Por supuesto, hay algunos lenguajes marginales que complican la definición; pero HTML / CSS están lejos de eso.Lo golpeaste en la cabeza cuando dijiste "declarativo, no imperativo". El marcado (ya sea HTML, CSS o lo que sea) describe cosas. El objetivo de la programación es hacer cosas.
El conjunto de habilidades requerido para usar el marcado es completamente diferente al conjunto de habilidades requerido para programar.
Los tipos de problemas resueltos mediante el marcado de escritura son completamente diferentes de los tipos de problemas resueltos mediante la programación.
fuente
Es importante para ciertas personas porque ninguno de los dos es ciencia de cohetes en la superficie, pero hay una gran cantidad de arcanos que los rodean debido al hecho de que se implementan de manera diferente en típicamente 5 a docenas de entornos diferentes que realmente te interesan. Ese tipo de imprevisibilidad y atención al oficio asusta a una cierta variedad de profesionales de la tecnología que están horrorizados por los riesgos no cuantificables y aún más horrorizados por aprender algo más de lo que deben tener después de obtener un título.
Si alguien me preguntara qué idiomas conocía y arrojé CSS y dijeron "pero ese no es un lenguaje REAL", les preguntaría cómo manejarían centrar verticalmente un div en IE 5, IEs 6-8 e IE9 +. Entonces podríamos pasar a esquinas redondeadas, problemas de transparencia alfa, el verdadero culpable detrás de todos estos argumentos ridículos de tablas como diseño que recién ahora comienzan a ser verdaderamente irrelevantes y docenas de temas más para dicho súper codificador que probablemente conoce uno lenguaje y afirma uno o dos en los que apenas sabe alfabetizar funcionalmente debido a las clases que se vio obligado a tomar en la universidad hace 10 años.
Definitivamente son 'idiomas'. No los llamaría 'lenguajes de programación'. Me sentiría cómodo describiendo el proceso de escritura en estos idiomas 'codificación'.
Sin embargo, en lo que a mí respecta, cualquiera que haya logrado dominar el CSS tiene el chutzpa y la ética de trabajo para convertirse en un excelente programador, ya tiene experiencia en el pensamiento orientado a objetos y, sin duda, ha aprendido a pensar cómo escribe ahora podría afectar su trabajo 25 proyectos en el futuro.
fuente
HTML y CSS no son lenguajes de programación. Superalo.
Sin embargo: JavaScript es un lenguaje de programación. La máquina es el navegador. PHP es un lenguaje de programación. La máquina es virtual en el servidor.
Entonces, si solo está utilizando HTML y CSS, no está haciendo ninguna programación (aunque podría estar haciendo algo de ingeniería).
Pero si está utilizando JavaScript, PHP u otro lenguaje de secuencias de comandos. Estás haciendo programación.
En cuanto a los lenguajes de programación REALES. Si está operando en una máquina (real o virtual). Y están utilizando SUS PROPIOS algoritmos para decirle a la máquina que haga cosas. Entonces estás usando un lenguaje de programación REAL.
fuente
El lenguaje de programación es un término un poco inexacto porque es un término común que usan los profesionales y también los legos. Los practicantes tienen un significado matizado de ese término donde la persona común generalmente no lo tiene. Normalmente su definición es si tiene palabras / sintaxis divertidas que no entiendo de inmediato y los programadores lo usan, entonces ese debe ser un lenguaje de programación. No está completamente fuera de lugar, pero podemos estar de acuerdo en que es inexacto.
Palabras como declarativo, imperativo y turing completo son términos más precisos con significados muy específicos. Cuando hace una pregunta como por qué HTML / CSS no es un lenguaje de programación, solicita una definición más precisa de lo que realmente es un lenguaje de programación. No estamos siendo pedantes, sino tratando de responder a su pregunta. ¿Son los mejores términos para usar cuando incluso si los buscas en Google es difícil entender lo que significan? Depende ¿Querías la respuesta corta o larga? :-)
Por lo general, los programadores piensan que los lenguajes de programación son completos, pero ¿qué significa eso? Significa que el lenguaje puede describir el comportamiento o cómo hacer las cosas. Lo llamamos formalmente lógica. HTML / CSS puede describir que hay un botón ubicado en la esquina superior derecha, o hay una tabla con 4 columnas 5 filas, las primeras dos filas son amarillas y la fila inferior tiene texto verde, y cada celda en la tabla tiene 5 píxeles de espacio en blanco alrededor del contenido.
Lo que HTML / CSS no puede hacer es expresar el comportamiento o la lógica de lo que sucede cuando hace clic en el botón. No puedo decir que cuando hago clic en ese botón, obtengo los valores de esa tabla y los sumo, y escribo ese valor en una nueva fila en la parte inferior de la tabla. Describir el comportamiento es más o menos equivalente a Turning-complete sin volverse demasiado pedante.
Más precisamente, Turing-complete significa que podría implementar el lenguaje en sí mismo. Eso significaría que podría escribir un programa javascript que tome una cadena de javascript y podría ejecutarlo (y no usar la función eval ()). De hecho, puedo escribir un programa javascript que podría tomar un programa escrito en cualquier lenguaje completo de Turing y evaluarlo. Eso es lo que significa ser Turing completo. Todos los idiomas que se están volviendo completos son equivalentes en qué programas se pueden expresar. Una revelación bastante sorprendente si lo piensas.
fuente
Aquí están mis dos centavos. HTML y CSS claramente no son lenguajes de programación. Por esa razón, cuando veo HTML o CSS en el currículum de alguien en "Lenguajes de programación", eso simplemente me dice que esta persona no sabe de qué está hablando.
Aparte de eso, no, realmente no importa.
Por cierto, los programadores generalmente tienden a ser pedantes. Eso simplemente viene con el trabajo.
fuente
No importa. Y también es una cuestión de definición. ¿Qué es un lenguaje de programación? Algunos significan que tiene que ser Turing completo. Otros tienen otras definiciones, que hacen de HTML un lenguaje de programación. (Y en su ejemplo, ni siquiera se llamaban lenguajes de programación, solo lenguajes, que obviamente son).
Mi recomendación: trate de ignorar a las personas que señalan este tipo de afirmaciones inútiles y en muchos sentidos incluso afirmaciones incorrectas. Es solo una variación de la gramática nazi-isma. Llamar HTML a un lenguaje de programación no es incorrecto en ningún sentido significativo.
fuente
Creo que todo se reduce a esto: HTML y CSS, aunque son lo suficientemente complicados como para requerir cierta comprensión, son lenguajes de presentación, más adecuados como el formato para los informes generados. Por lo tanto, las personas que solo pueden hacer esto no se consideran codificadores. Teniendo en cuenta que algunos codificadores han estado en la computación el tiempo suficiente para recordar cuando el procesador de texto promedio tomó más sintaxis de comandos para diseñar texto que HTML.
Lo que algunos llamarían un lenguaje 'real' es el que procesaría datos de alguna manera para generar un informe. O algo que podría usarse para escribir un juego. Conocer HTML y CSS por dentro y por fuera es una habilidad valiosa, pero es mucho más, así que combínelo con el conocimiento de JS para el front-end, y Java, PHP, Perl, Ruby, Python, C / C ++ o C # en el back-end.
Por el contrario, alguien que solo conoce uno de esos lenguajes 'reales' sin ninguna tecnología front-end web, está limitando mucho su propia flexibilidad como programador.
fuente
El palomar / estereotipo lógico "cerebro izquierdo" o creativo "cerebro derecho" describe con precisión las habilidades de muchas personas. En mi experiencia, "es HTML / CSS un lenguaje de programación" es más sobre si las personas que son buenas en HTML / CSS también pueden serlo en otras tareas de programación.
La mayoría de los diseñadores web con los que trabajé en los últimos 13 años que he estado haciendo desarrollo web han podido crear HTML y CSS en funcionamiento, pero no pueden manejar desafíos de programación más exigentes (algo más que el simple corte y corte) JavaScript pegado). La mayoría de los programadores y diseñadores de bases de datos no se preocupan lo suficiente por la presentación visual para hacer un buen trabajo con HTML / CSS o la presentación en general. La mayoría se niega a intentarlo.
HTML y CSS requieren algunas habilidades de programación: experimentación, resolución de problemas, pruebas cuidadosas, una comprensión de la herencia ... Pero requieren al menos un número igual de habilidades de diseño: sensibilidad al color, línea, espaciado, equilibrio, casi todo lo mismo tipos de habilidades de composición visual que hacen una buena fotografía.
Como HTML / CSS es un diseño o lenguaje de presentación, se encuentra al final del diagrama de flujo de datos. Ningún otro código se encuentra aguas abajo. Las habilidades de diseño de mayor nivel que alguien necesita para diseñar un buen esquema de API, servicio o base de datos no se utilizan en HTML y CSS. Generalmente no hay necesidad de modularizar nada relacionado con HTML o CSS, o si lo hay, no depende del diseñador gráfico hacer eso. Es raro que alguna funcionalidad se realice con HTML / CSS . Los menús desplegables son probablemente la excepción más común, pero se pueden hacer cortando y pegando una receta de la web en lugar de diseñar un código.
Es inusual, pero no imposible, que un programador tenga algunas habilidades de diseño visual o diseño o que un diseñador tenga algunas habilidades de programación. Estas personas son especialmente valiosas en un equipo web porque ayudan a cerrar la brecha que la mayoría de nosotros tenemos. Pero a menudo están sujetos a estereotipos, que ser capaz de hacer HTML / CSS es imposible para un "programador real", o viceversa. Pero esta combinación de habilidades no es más imposible que para ese mismo programador ser un marinero, pintor, cocinero decente o tener alguna otra habilidad que practiquen en su tiempo libre.
Como han dicho otras personas, esta distinción se enfoca más cuando se contrata. Dado que las personas con talentos cruzados son raras, la mayoría de las ofertas de trabajo tienen que apuntar a un conjunto de habilidades u otro. Si un programador enumera HTML / CSS en "Lenguajes de programación", genera una señal de alerta de que no puede realizar tareas de programación generales, o que tal vez su definición de programación es muy limitada. Tal vez puedan, solo plantea una pregunta. Si un diseñador enumera HTML / CSS, definitivamente desea ver su cartera para ver que tienen la capacidad artística de crear el efecto visual deseado.
HTML / CSS puede ser rechazado repetidamente por no ser lenguajes de programación reales porque es más seguro y socialmente más aceptable que destrozar a las personas que no pueden cruzar la división del hemisferio que representan. Por supuesto, algunas personas pueden no tener esa inhibición. De hecho, trabajé con un gerente que a menudo decía: "¿Escribió [insertar aquí la funcionalidad de la columna vertebral del departamento]? ¿Pensé que acababa de hacer HTML?"
Gran pregunta!
fuente