¿Cuál es la diferencia realmente?
La diferencia real e importante entre un lenguaje de programación y estos otros lenguajes es esta:
HTML y CSS describen la presentación , mientras que los lenguajes de programación describen la
función
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í:
- Las personas evalúan el software según criterios que entienden. A menudo entienden la diferencia entre guapo y feo, pero rara vez aprecian los matices técnicos.
- Las apariencias engañan a las personas. Puede que esto no sea algo bueno, pero es una realidad con la que debemos vivir.
- Las apariencias influyen en la forma en que las personas sienten sobre el software. La forma en que las personas sienten sobre el software es importante para ellos. De hecho, las personas a veces prefieren el software que los hace sentir bien sobre el software que es funcionalmente superior. De hecho, podrían ser más productivos con herramientas para sentirse bien que con herramientas técnicamente superiores. Hasta este punto, nuestros usuarios no están siendo engañados. En realidad están haciendo una elección sabia y reflexiva.
- Como programadores, a menudo descuidamos el papel de la presentación al centrarnos en la función. Hasta cierto punto, esto es correcto y apropiado. Sin embargo, es importante reconocer que hay otra dimensión en nuestro trabajo que es importante para nuestros clientes.
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?
- Los programadores gastan una gran cantidad de tiempo, esfuerzo y dinero desarrollando sus habilidades. Las personas valoran naturalmente las cosas en las que invierten ("su corazón es donde está su dinero").
- Los programadores a menudo sienten la necesidad de justificar la cantidad de tiempo que lleva producir resultados en comparación con los rápidos resultados logrados por los diseñadores de UI. Para hacer esto, necesitan hacer una distinción entre lo que realmente hacen los dos grupos .
- Porque los empleadores deben aplicar a las personas adecuadas a los trabajos correctos. A menos que aclaremos las diferencias (a menudo técnicas), los gerentes hacen fácilmente las llamadas equivocadas.
- Porque hay una diferencia real y fundamental , como se describió anteriormente.
¿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 .
Las cosas importantes aquí son el contexto
y la perspectiva .
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:
¿Vale la pena morir por esta colina?
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?
- ¿Realmente vale la pena interrumpir el flujo de la discusión para hacer esta distinción?
- ¿Mi pedantería proviene de una sensación de arrogancia o de un dolor pasado?
- ¿Mis comentarios valoran las habilidades de los demás y las mías?
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 .