¿Los compiladores, lenguajes y marcos más inteligentes hacen programadores más tontos? [cerrado]

StackOverflow https://stackoverflow.com/questions/428571

  •  06-07-2019
  •  | 
  •  

Pregunta

Los compiladores, lenguajes y marcos más y más avanzados que tenemos que automatizan las tareas o nos ocultan ciertas complejidades, ¿acaso nos hacen más tontos programadores?

Jim C ofrece la siguiente analogía de una calculadora:

  

Cualquiera extrae una raíz cuadrada últimamente,   utilizando papel y lápiz? Usamos un   calculadora o simple llamar a una función   en nuestro lenguaje de programación favorito.   ¿Cuántos de nosotros sabemos lo que el   calculadora o incluso la función?

Entonces, ¿por qué no les decimos a nuestros hijos que olviden aprender matemáticas, para eso tenemos calculadoras? ¿No haría eso inherentemente más tontos a nuestros hijos?

¿Fue útil?

Solución

No hacen que los buenos programadores sean más tontos, los hacen más productivos; pero hacen que las personas más tontas puedan programar y piensen que son grandes programadores.

Aclaración: no tengo una definición precisa para ser tonto. De tonto me refiero a algo general que son las personas que realmente no deberían ser programadores o deberían tratar de aprender cosas importantes. He visto a muchas personas que realmente no pueden codificar y simplemente copiar cosas de aquí para allá. La evaluación de la calidad del software no es fácil. Finalmente construyen un software horrible que funciona de alguna manera (debido a la existencia de buenas herramientas) para que no pierdan sus trabajos y piensan que son buenos programadores y, por lo tanto, nunca deberían intentar aprender nada. Créame, hay una cosa que he visto en todo buen desarrollador: "Nunca dejan de aprender y no van a aprender solo el código que necesitan para completar su trabajo". Esas personas de las que hablé nunca intentan aprender más allá de lo que necesitan y las excelentes herramientas reducen esta "necesidad".

Esto no significa que los IDE sean malos. Los amo y creo que deberían desarrollarse tanto como sea posible.

Otros consejos

Creo que permiten programadores más tontos, no hacen programadores más tontos.

¿Los agricultores son más tontos porque usan máquinas automáticas para plantar, cosechar y mantener cultivos?

La buena automatización de tareas simplemente hace que los programadores sean más efectivos, no más tontos.

  

Entonces, ¿por qué no les decimos a nuestros hijos que olviden aprender matemáticas, para eso tenemos calculadoras? ¿No haría eso inherentemente más tontos a nuestros hijos?

Una calculadora es una herramienta que le permite realizar ciertas tareas. Seguro que puedes hacer matemáticas complejas e integración multivariable, pero sin aprender matemáticas, ¿cómo sabrías que NECESITAS realizar esa tarea en un momento dado?

Lo mismo con la programación y los SDK, puede agregar muchas campanas y silbatos usando un código predefinido, pero cuando llegue el momento de que necesite escribir algo para RESOLVER un problema, todas las herramientas y la automatización del mundo ganaron ' No te ayudaré allí (la IA no está tan avanzada todavía de todos modos;).

En promedio , sí. :)

No nos hacen nosotros más tontos programadores. Lo que hacen es permitir que haya más programadores tontos (lo que supongo significa que, en promedio, somos más tontos). Tener mejores herramientas significa que alguien con poca experiencia y una comprensión sombría de los conceptos de CS todavía puede producir código que eventualmente funciona y hace algo útil. Eso no es posible cuando se escribe en ensamblado, pero sí cuando se escribe, por ejemplo, VB. (Por supuesto, hay una mayor probabilidad de eventuales catástrofes de estilo WTF cuando una persona con menos experiencia está escribiendo grandes aplicaciones que eventualmente colapsan bajo el peso de su pobre arquitectura).

Es cierto, "tonto" es una palabra inflamatoria para usar aquí. El hecho de que alguien sepa menos no los hace estúpidos, solo significa que tienen menos experiencia. Pero el punto se entiende.

Creo que máquinas más rápidas empeoran los programadores ... en estos días, la mayoría de los programadores pasan muy poco tiempo escribiendo código óptimo. Los compiladores no pueden optimizar el código incorrecto en código bueno.

Las máquinas rápidas significan que los programadores malos pueden salirse con la suya porque nadie sabe que es malo. En los viejos tiempos, el código tenía que ser trabajado y refinado para que funcionara lo suficientemente rápido como para funcionar de manera aceptable.

Tony

No,

Los compiladores inteligentes permiten a los programadores inteligentes centrarse en cosas que realmente importan, como diseñar un buen software.

s/make/allow/

Ser un poco menos simplista: son herramientas. Las Herramientas no hacen nada, y no hacen que ningún artesano sea mejor o peor. Las herramientas potentes tampoco: actúan simplemente como una palanca, amplificando la competencia de un artesano en particular (o la falta de ella).

Algunas herramientas de programación han tenido el efecto de reducir las barreras de entrada, si no a la profesión de ingeniería de software, al menos para que se ejecute una aplicación. Acortar la cantidad de pensamiento que se necesita para producir una aplicación que funcione (o que funcione) corta en ambos sentidos: los expertos competentes se liberan del trabajo de corte y pueden hacer grandes cosas, pero los principiantes confusos a veces obtienen códigos malos en la producción. nunca hubiera podido trabajar sin el " inteligente " herramientas. El último efecto probablemente ha tenido un mayor impacto que el primero en la configuración de la reputación de BASIC, VB, PHP y la reciente serie de marcos de desarrollo rápido MVC para la web, y de hecho en la noción de tales herramientas en general.

Por más inteligente te refieres a automatizado . Hacer un trabajo repetitivo no hace que nadie sea más inteligente, por lo que la respuesta es no .

Permítanme expandirme usando el ejemplo de la calculadora. La técnica para calcular una raíz cuadrada con lápiz y papel es simplemente un proceso que se puede aprender. No te hace más inteligente conocer este proceso, solo te permite calcular raíces cuadradas en ausencia de una calculadora.

Ahora, si descubrió un algoritmo para calcular raíces cuadradas, ahora eso lo hace inteligente.

Lo mismo con nuestras herramientas de programación. Un lenguaje que administra la memoria por usted no lo hace estúpido, ni ser capaz de administrar la memoria usted mismo lo hace más inteligente.

Hace que sea más fácil para los programadores menos calificados ingresar al campo, eso es todo. No hace que un buen programador sea más tonto. Serían tontos si ignoraran las herramientas que podrían aumentar su eficiencia.

Las computadoras son dispositivos de refuerzo. Así que los tontos se vuelven más tontos y los inteligentes se vuelven más inteligentes.

Solo si se lo permites.

Si aprendió algo difícil y meticuloso (como mi computadora portátil Tandy 102), aún piensa en ese modo incluso con herramientas más inteligentes.

Ciertamente es fácil confiar en las herramientas para hacer su trabajo, y por mucho de eso, estoy agradecido.

Por ejemplo, no le enseña a la gente cómo trabajar la madera con sierras de mesa y prensas de taladro: comienza con sierras manuales y sinfines o pequeños taladros manuales. Así, cuando te mueves a herramientas eléctricas, no haces algo estúpido (tm).

Confiar en la herramienta es excelente, pero saber cómo hacerlo sin la herramienta también es importante.

No, pero mejora los programas y el código.

Diría que las habilidades son diferentes en los idiomas de nivel superior, debe pensar mucho más en las abstracciones, hay muchas más API de las que preocuparse y la gente espera un mayor nivel de calidad en su software. Como resultado de lo anterior, un programador enfrenta diferentes desafíos, y las herramientas se mantienen al día con esos desafíos.

No necesariamente hacen programadores más tontos, pero pueden hacer que los programadores sean flojos. Me he encontrado haciendo esto a veces solo apresurando un poco de código y confiando en el compilador para ayudarme a encontrar todos mis errores en lugar de hacerlo bien en primer lugar.

Por cierto, esta no es la forma recomendada de hacer las cosas. Normalmente lleva mucho más tiempo.

Ok, las dos primeras computadoras que poseía, las construí yo mismo. Eso fue inteligente entonces, no estoy tan seguro de que sería un buen uso de mi tiempo ahora. Programé en una mezcla de ensamblador y BASIC a principios de los 80, nuevamente inteligente entonces, no tan inteligente ahora.

Lo que entiendo aquí es que el contexto ha cambiado, y en informática hemos tenido que intercambiar la profundidad del conocimiento por la amplitud del conocimiento, con el necesario "embotamiento" que eso conlleva. Para soportar la complejidad masiva y la amplitud de las aplicaciones cubiertas por la 'informática actual', también nos vemos obligados a trabajar en niveles de abstracción mucho más altos. Por un lado, vemos especialistas en aplicaciones de dominio que utilizan herramientas altamente abstractas para proporcionar soluciones muy buenas, y por otro lado, vemos expertos en tecnología / programación informática que producen un código excelente que tiene la capacidad de hacer avanzar a toda la industria informática. Llamar tonto a cualquiera de los dos lados es inflamatorio, y probablemente el único bobo tonto en el debate.

Simularse en este contexto es simplemente permitir que un público más amplio utilice las herramientas efectivas que son las computadoras modernas. Esto es algo bueno, y los programadores de núcleo duro no deberían sentirse amenazados por ello, es después de todo su bebé.

En promedio, sí, hacen que los programadores sean más tontos. Pero eso es solo porque hacen que la programación sea más accesible para las personas que no son tan inteligentes como nosotros, lo que reduce el promedio de "inteligencia".

:-)

Un programador inteligente que denuncia la conveniencia de los entornos de desarrollo modernos probablemente no sea tan inteligente.

¿Más tonto? No necesariamente. Como se ha dicho antes, tener herramientas más inteligentes le permite al desarrollador enfocarse en cosas más importantes, como hacer que la aplicación funcione correctamente. Una anécdota relevante de mi propia carrera:

No soy un matemático experto. Abandoné el cálculo previo (bueno, claro, fue porque nunca hice mi tarea) e incluso estoy un poco oxidado con algunas fórmulas realmente básicas de física (por ejemplo, calcular la fricción). Esto se debe a que estoy muy fuera de práctica, lo cual es simplemente porque nunca lo uso.

Tome, por ejemplo, la derivada. Si me pidiera que encontrara la derivada de una función, buscaría mi TI-89 porque no tengo la menor idea de cómo hacerlo. Sin embargo, y mantengo que esto es más importante, sé cómo usarlo. Sé dónde es útil, por qué debería usarse, etc. El producto punto es otro ejemplo. Sé cómo usarlo para calcular el especular de una superficie en el espacio 3D, pero no sé cómo calcularlo a mano porque nunca lo necesito.

No me llamaría más tonto por eso. Tal vez fuera de práctica, pero igual de capaz.

No, es algo similar a los esteroides (y otras drogas que mejoran el rendimiento): hacen que un gran atleta sea aún mejor, pero no pueden hacer que alguien como yo corra 100 metros por debajo de 10 segundos incluso si comiera toda una farmacia de drogas. Entonces, dios IDE, lenguaje o marco pueden hacerte un mejor programador, pero si solo confías en él para hacer el trabajo, estás en problemas.

Creo que no, pero hay muchas personas (muy sabias) que piensan diferente

Realmente recomiendo esta conferencia, es una opinión muy interesante y muy buen ensayo

No lo creo. Herramientas más sofisticadas simplemente liberan nuestras mentes para concentrarse en problemas más interesantes.

Para aquellos de nosotros que hemos aprendido a hacer dichas tareas o hemos aprendido acerca de dichas complejidades en el pasado, creo que simplemente nos hace más eficientes. Somos más libres de preocuparnos por otras cosas más importantes. Podemos tender a olvidarnos de lo difícil que era en ese momento. o quejarse de cuán afortunados son los nuevos programadores hoy.

Para aquellos de nosotros que recién comenzamos y no hemos aprendido esos detalles, creo que simplemente nos hace una raza diferente. No más tonto, solo que nos fijamos en diferentes problemas bajo diferentes luces.

Sin embargo, reduce el obstáculo de entrada y, por lo tanto, hace que la programación sea más accesible para las masas. Si eso es bueno o malo es discutible.

Sí, pero no importa. ¿Alguien extrajo una raíz cuadrada últimamente, usando papel y lápiz? Utilizamos una calculadora o simplemente llamamos a una función en nuestro lenguaje de programación favorito. ¿Cuántos de nosotros sabemos lo que hace la calculadora o incluso la función?

Debería saber cómo funcionan las cosas. Cuanto mejor programador, o cualquier otra cosa que quiera ser, más debe saber. Pero solo hay tantas horas en el día.

Mejores herramientas nos hacen mejores. La compensación es que perdemos poco control sobre el proceso.

De alguna manera

Por ejemplo, no sé ni me importa cómo escribir sobrecargas de operadores porque tengo herramientas que las hacen para mí. Ni siquiera tengo que recordar cómo funciona P / invoke porque una herramienta que tengo crearía automáticamente un proyecto dll C ++ y un [DllImport] en mi proyecto C #. No tengo que escribir un autoactualizador para mi proyecto porque ClickOnce es prácticamente todo. (Y no tengo idea de cómo funciona 'bajo el capó').

Entonces, sí, soy menos inteligente porque no tengo idea de muchas cosas de bajo nivel que el programador de C ++ conoce. Pero aún así creo que estoy en el lado ganador, porque puedo hacer más cosas. Puedo dedicar más tiempo a la presentación, el control de calidad y las características que los clientes realmente quieren tener. Además, profundizar en el marco .NET requiere algo de aprendizaje, por lo que es una especie de compensación.

No diría que hacen que los programadores sean más tontos necesariamente, pero lo que diría es esto. Para las personas que comienzan en el desarrollo en la actualidad, no aprecien por completo la cantidad de cosas que se están haciendo detrás de escena. En la actualidad, hay tantas bibliotecas integradas en las plataformas, que las personas que comienzan hoy no tienen idea de cómo hacer todo esto a mano en un momento u otro.

Sin embargo, diré que nunca puedo volver a escribir una sola línea de código sin Intellisense :)

Creo que es necesario tener herramientas más inteligentes para que podamos tener capas de abstracción de la complejidad. Pero creo que debemos poder cambiar tener acceso a esas capas de abstracciones. Creo que los programadores serán más productivos pero perderán fácilmente la noción de muchos conceptos básicos. Es una compensación ... Los buenos programadores serán los que continúen entendiendo los conceptos básicos de la programación. Los demás serán jugadores de "copiar y pegar" y Lego.

Por el contrario, los compiladores más inteligentes significan que estás luchando menos con la computadora y puedes pensar más sobre cómo estás tratando de hacer algo.

Si tienes problemas con el ensamblador, casi nunca te molestarás con métodos anónimos.

Yo diría que no.

Sistemas de programación más inteligentes (estoy pensando en niveles más altos de abstracción, no en herramientas como las que arreglarían automáticamente su código). IMNSHO es realmente más difícil de usar. La analogía que se me ocurrió es que actúan como una palanca larga; presionas realmente con fuerza en el extremo corto, lo mueves una pequeña cantidad y se producen grandes cambios.

Es más difícil averiguar qué hay que hacer, pero también es mucho más complicado arruinarlo cuando finalmente lo haces.

Los lenguajes, compiladores y marcos más inteligentes hacen posible la programación. Quiero decir, ¿te imaginas el estado de la programación si todavía estuviéramos restringidos a usar lenguaje ensamblador? Diablos, rasca eso. ¿Te imaginas el estado de la programación si estuviéramos restringidos a C o C ++?

Las mejoras en compiladores, lenguajes y marcos hacen que los programadores sean más efectivos, suponiendo que tengan una sólida formación académica o una buena comprensión semántica.

Sé que este es un hilo viejo pero todavía me gustaría dar mi opinión aquí ...

Nos hacen más tontos, la mayoría de ustedes que reaccionan ya SABEN cómo programar de manera decente. ¿Y por qué? Porque vienes de una época en la que los marcos apenas se usaban.

En el sistema educativo se usan cada vez más marcos en las clases, ... y en clases donde no se usa ningún marco, no es alentador comenzar a programar. Aprenda TODO este código, mientras que en la parte posterior de su cabeza sabe que hay una herramienta que lo hace todo por usted. Sabes que en el campo / planta de trabajo tienes que usar frameworks para ir rápido. Entonces, ¿por qué pasar todo este tiempo aprendiendo el código?

SO: A corto plazo, para todos ustedes que ya conocen los idiomas, no ... no los hace más tontos

A la larga ... verá que los programadores de nivel bajo mejoran y los buenos programadores empeoran en nivel.

¡Marca mis palabras!

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top