A menudo me encuentro con esto cuando estoy ayudando a alguien que es nuevo en la programación y lo está aprendiendo por primera vez. Estoy hablando de novatos realmente nuevos, todavía aprendiendo sobre OOness, construyendo objetos, llamadas a métodos y cosas por el estilo. Por lo general, tienen el teclado y solo estoy ofreciendo orientación.
Por un lado, la función de autocompletar de los IDEs ayuda a darles retroalimentación de que lo están haciendo bien y rápidamente les gusta y confían en él.
Por otro lado, me temo que la dependencia temprana del autocompletado IDE les haría no entender realmente los conceptos o no podrían funcionar si algún día se encuentran solo con un editor simple.
¿Puede alguien con más experiencia en este sentido compartir su opinión? ¿Qué es mejor para un novato, autocompletado o mecanografía manual?
Actualizar
¡Gracias por la entrada a todos!
Muchas respuestas parecen centrarse en el uso principal del autocompletado, como completar métodos, proporcionar métodos de búsqueda y documentación, etc. Pero hoy en día los IDE se parecen mucho más.
- Al crear un objeto de tipo Lista, un IDE se autocompleta a una nueva ArrayList en el lado derecho. Puede que no sea claro de inmediato para un novato por qué no puede ser una nueva Lista, pero bueno, funciona, así que continúan.
- Parámetros del método de llenado basados en variables locales en contexto.
- Realizando lanzamientos de objetos
- Agregar automáticamente las declaraciones 'importar' o 'usar'
y mucho más. Este es el tipo de cosas que quiero decir. Recuerde que estoy hablando de personas que están haciendo la Programación 101, en realidad recién comenzando. He visto al IDE hacer estas cosas de las que no tienen idea, pero simplemente continúan.
Se podría argumentar que les ayuda a enfocarse en el flujo del programa y entender las cosas primero antes de profundizar y comprender los matices del lenguaje, pero no estoy seguro.
fuente
Respuestas:
Creo que usar el IDE ayuda en el proceso de aprendizaje. Se pueden descubrir métodos, propiedades, parámetros, sobrecargas y similares. Con las bibliotecas abrumadoramente grandes, Intellisense ayuda a filtrar el conocimiento JIT. En el entorno de codificación actual, es imposible aprender todo por adelantado, y el aprendizaje JIT es a menudo la única forma práctica de ser productivo rápidamente.
Entiendo que usar un IDE puede ser una muleta si lo usa a ciegas, pero creo que los beneficios superan con creces los negativos.
Por otro lado, el uso de plantillas sin comprender lo que se ha creado previamente para usted es más problemático. Creo que se pueden usar como una herramienta de aprendizaje si el desarrollador se toma el tiempo de leer el código con plantilla. Pero la mayoría de la gente no se molesta. Sin embargo, podría ser una gran herramienta de aprendizaje.
fuente
Comprender los conceptos y memorizar docenas de cientos de estúpidas clases y métodos de biblioteca son dos cosas completamente diferentes. Intellisense ayuda a eliminar todo ese conocimiento inútil de tu mente por completo, y cuanto antes lo hagas, mejor. Deje más espacio para los conceptos útiles, no desperdicie sus recursos limitados en las API.
Para responder a una parte actualizada de una pregunta: los pequeños detalles de sintaxis, el diseño de los archivos, la invocación del compilador y el enlazador tampoco son importantes en comparación con los conceptos de programación genéricos. Una vez que se entienden, un novato no más puede entrar en una comprensión más profunda de cómo funciona realmente el material de bajo nivel. Es mejor hacerlo cuando ya conoces los conceptos básicos, de lo contrario, es probable que recojas una serie de supersticiones mágicas peligrosas.
Por ejemplo, DrScheme IDE tiene una excelente trayectoria en la programación de enseñanza, y su éxito se debe principalmente a su capacidad para ayudar a concentrarse en lo que es realmente importante.
fuente
Usar autocompletar no es algo malo en absoluto.
Es simplemente por la velocidad, y para mí sería una señal de que alguien está comenzando a dominar el IDE y lo está usando bien.
No entiendo cómo NO usarlo les ayudaría a aprender OO, por ejemplo.
fuente
Después de haber enseñado y enseñado a los estudiantes que son nuevos en la programación, encuentro que el autocompletado / inteligencia a veces causa más daño que bien. Sí, pueden escribir un programa usándolo. Sí, se compila y se ejecuta e incluso podría hacer lo que les pedimos que hicieran. Pero no entienden lo que están haciendo.
Cuando no entienden lo que está sucediendo, se vuelve menos programación y más pirateo de una solución para obtener marcas. Descubrí que eso sucedió mucho con los estudiantes, ya que lo que les pedimos que hicieran se volvió más difícil, simplemente piratearon hasta que algo funcionó. Esto siempre se hizo evidente cuando llegó la mitad del período y se les pidió a los estudiantes que escribieran métodos simples a mano ... no pudieron.
Sí, autocompletar / intellisense nos ayuda (desarrolladores profesionales) mucho porque nos acelera. No tenemos que memorizar todos los diferentes métodos y listas de parámetros, pero al mismo tiempo también podemos arriesgarnos a adivinar qué parámetros va a tomar un método b / c que tenemos la experiencia en programación para saber.
Los novatos no lo hacen. Esperarán a que su IDE muestre una lista de métodos, se desplazarán por esa lista hasta que encuentren uno que tal vez sea lo que necesitan, verán los parámetros que necesitan y verán si tienen que pasarlos. ..y al final habrán pirateado algo juntos que pueden entregar.
Y, al final del curso cuando obtuvieron su pase, se alejarían de su clase de programación con una victoria superficial, muchos nunca volverían a tomar otra clase de CS porque no entendían nada de lo que hicieron o por qué lo hicieron. eso.
fuente
students were asked to write simple methods by hand...they couldn't.
Todo se reduce a lo que intentas enseñarles. ¿Conceptos generales de programación o sintaxis específica del lenguaje?El problema con los IDE y los entornos de desarrollo en general no es tanto el autocompletado como el uso de soluciones con plantilla (archivo | nuevo | proyecto) donde muchas cosas "interesantes" ya se han hecho por usted y están, en diversos grados, ocultas .
Para alguien que, en términos generales, comprende lo que sucede debajo del capó, esto es útil, pero para alguien que aprende lo que necesita es bastante menos.
También está la cuestión del tiempo necesario para encender un IDE de peso pesado ...
Por lo tanto, creo que usar algo más liviano y poder ejecutar aplicaciones en las que ha escrito cada línea de código usted mismo tiene un mérito considerable, especialmente porque usar un editor de texto y un compilador demuestra el punto importante de que no necesita un IDE, etc. para escribir software, pero eso no significa que quiera usar un editor de texto por mucho tiempo y que presente desafíos en términos de depuración: desea poder hacer puntos de interrupción y desea poder pasar un solo código ya que esto facilitará la comprensión de lo que está sucediendo.
Por supuesto, podemos confundir aún más el problema al considerar cosas como Python donde tienes una línea de comando "en vivo" ...
Buena pregunta, no hay una sola buena respuesta, excepto que desea que el aprendizaje sea una progresión y comenzar con un editor de texto y un compilador (o un intérprete de línea de comandos) le permitirá concentrarse en los conceptos básicos de sintaxis y lógica antes de avanzar a más cosas complejas que serán más fáciles de hacer con un entorno de desarrollo más potente.
fuente
Aprender de la manera difícil generalmente se queda contigo.
Como novato, NO use IDE. Usa la línea de comando, aprende de tus errores. Esto también lo ayudará a comprender las opciones del compilador y el vinculador más de cerca.
Entonces, ¿cuándo usas IDE? Cuando está diseñando algo enorme o trabajando en una enorme base de código con muchas clases, métodos y variables.
fuente
Sería el primero en decir que los IDE son una bendición para la productividad, incluso si a menudo me quejo de sus peculiaridades. Sin embargo, aprendí BASIC, C, C ++, Java, Python, Perl, PHP y varios otros lenguajes sin nada más que un editor de resaltado de texto y el compilador / intérprete para el lenguaje. ¡De hecho aprendí Java en el Bloc de notas!
Aprender un IDE promueve la "magia": la idea de que "funciona, no importa cómo". La abstracción es buena; La magia es mala. Un programador debe saber o ser capaz de averiguar todo lo que sucede en un proyecto. Un buen IDE está diseñado para encargarse de la contabilidad, no para controlar el proyecto. Usado adecuadamente es una gran herramienta. Pero, ¿qué artesano comienza a usar un enrutador CNC?
Creo que la forma en que aprendí (tener que escribir todo y conocer bien el compilador para construir un proyecto) me ha ayudado enormemente cuando finalmente comencé a usar IDEs. Por ejemplo, un proyecto Java no es una pequeña carpeta en el proyecto Eclipse, sino una colección de clases en una estructura de paquete con algunos archivos XML para rutas, configuración e implementación. No quisiera crear una aplicación empresarial grande sin un IDE, pero puedo crear aplicaciones pequeñas. Eso hace que sea más fácil entender la estructura de los grandes, y cuando quiero un comportamiento específico en la compilación, por ejemplo, sé cómo funciona javac, por lo que puedo ajustar el indicador de compilación real en lugar de tratar de encontrar esa combinación mágica que no funciona. Existe en la configuración de compilación. También creo que tengo una comprensión más profunda de los mensajes de error y cómo encontrarlos y solucionarlos.
No enseñaría con un IDE. Creo que los proyectos iniciales son lo suficientemente pequeños como para que los argumentos para gestionar la complejidad sean discutibles. Si está enseñando Java, por ejemplo, puede colocar todas sus clases en la misma carpeta y
javac *.java
. ¡No necesitas un IDE para eso! Esto argumenta a favor de mantener proyectos pequeños, poco más que una prueba de conceptos. Minimice los gastos generales y concéntrese en enseñar el concepto que los estudiantes necesitan. Los proyectos más grandes en los que un IDE sería útil pertenecen a clases SE más avanzadas o proyectos dedicados.En cuanto a la ayuda para encontrar clases e investigación de API, nuevamente, creo que esto es discutible si los proyectos se mantienen pequeños. Nuevamente en Java, javadoc es muy fácil de leer. De todos modos, nadie puede mantener toda la API allí, y habrá un momento en el que necesitará investigar una API sin el beneficio de un IDE. Como, en otros idiomas, o si se está conectando remotamente a un servidor donde no puede abrir el IDE. Enseñe cómo encontrar documentación, no "presione". y puedes ver cuáles son los métodos de un objeto ".
Cualquier programador puede aprender un IDE, pero conocerlo no lo convierte en un buen programador. Dejando de lado el humor negro, "magia" nunca es una buena palabra para un programador.
fuente
Quizás un novato simplemente debería estar trabajando en problemas más fáciles primero. Y no, esos problemas no deberían requerir o alentar el uso de un IDE para completar la tarea. Hay mucho más que ganar a largo plazo al comprender los conceptos básicos. Las herramientas deberían venir después.
Ningún artesano de la carpintería saltaría directamente al uso de una cepilladora de superficie de alta potencia sin comprender primero las complejidades del tipo de madera y el plano manual.
(Nota: autocompletar e intellisense son dos cosas drásticamente diferentes).
Intellisense, en sí mismo, no es malo. Solo es malo cuando se usa una muleta para adivinar la funcionalidad sin leer o comprender la documentación o implementación subyacente.
Punto secundario: si el idioma requiere un IDE para codificar por usted, el idioma probablemente esté en el nivel de abstracción incorrecto para los problemas que está tratando de resolver.
fuente
Cuando crecemos de niños, no se nos dice que debemos entender las intrincadas reglas del idioma inglés antes de poder hablar. No se nos dice que debemos entender completamente el uso apropiado de preposiciones, conjunciones y evitar fragmentos de oraciones. Aprendemos haciendo. Aprendemos a través del éxito y el fracaso.
Un IDE con autocompletar ayuda al nuevo programador a ganar confianza al facilitar la creación de programas, mientras no lucha por recordar cada una de las innumerables funciones de una gran multitud de bibliotecas.
Si uno realmente extrapolara la opinión de que el autocompletado perjudica al nuevo programador porque lo hace demasiado fácil para ellos, entonces podría argumentar que los libros de referencia no deberían usarse durante la programación, porque los conceptos que se encuentran dentro deben comprometerse primero con la memoria, como no tenerlos memorizados los ralentiza y no les permite comprender completamente los conceptos primero.
Autocompletar es una herramienta, se utiliza para hacer que el programador sea más productivo. Al igual que con el aprendizaje de un idioma por primera vez, después de ganar confianza y un nivel de éxito con lo que estamos aprendiendo, trabajamos para mejorar nuestro conocimiento.
fuente
Al principio, es bastante difícil construir algo que funcione, por lo que cualquier cosa que ayude a la marca novata es mejor. Un nuevo programador necesitará a alguien más experimentado para que piense si las listas enlazadas de matriz o las listas enlazadas serán la mejor opción para el problema en cuestión. Cada uno tiene sus fortalezas y debilidades.
Si el novato tiene un IDE o está navegando por los documentos de la API en línea, no habrá ninguna diferencia real entre el código que crean. Si bien lidiar con el dolor de escribir errores de sintaxis puede ser una experiencia de aprendizaje, hay demasiado para aprender a preocuparse por eso desde el principio.
No aprendes a caminar por la cuerda floja yendo directamente al cable sin una red. Empiezas caminando una cuerda que está a centímetros del suelo. Me atrevería a decir que la mayoría de nosotros trabajamos con un IDE y algún tipo de script de compilación (el IDE crea el script de compilación de Visual Studio, pero está ahí). La mayoría de nosotros no construimos nuestras clases a mano con un editor de texto, y luego invocamos el compilador a mano. ¿Por qué deberíamos imponer eso a un novato que tiene mucho más que aprender?
fuente
No veo ninguna necesidad de sufrir el dolor de las herramientas anteriores, incluso cuando un desarrollador está aprendiendo. Creo que el tiempo extra y el esfuerzo que tomaría escribir el código sin las herramientas se gastaría mejor aprendiendo cómo escribir pruebas unitarias y depurar. Una vez que un usuario sabe cómo probar su código y recorrerlo mientras se ejecuta, aprenderá mucho sobre lo que realmente está haciendo.
Además, no es como usar un IDE significa que el código se escribe solo. Un desarrollador inepto o principiante va a escribir código que no funciona si usa un IDE o no.
Solo veo el IDE como otro nivel de abstracción al codificar. Si estoy escribiendo Java, generalmente no necesito entender cómo funciona el código de bytes que genera. Si un nuevo programador está usando libs de Java, no necesita saber en qué paquete está si el IDE puede agregarlo automáticamente. En cualquier caso, si puede surgir un error o problema en el nivel inferior (por ejemplo, choque de nombre de clase) que causa un error, entonces es hora de que el desarrollador lo mire manualmente.
fuente
Muchas otras buenas respuestas, así que no consideres esta una respuesta completa, pero es bueno para los novatos y para los usuarios experimentados ver una imagen completa de las funciones que tienen a su disposición.
En Delphi puedo presionar ctrl-j y veré una lista de todas las cosas posibles que podría esperar que funcionen sintácticamente.
No estoy necesariamente de acuerdo, pero he leído argumentos en el sentido de que los programadores ni siquiera deberían mirar a los miembros de la clase privada de los objetos que usan y de esta manera, el autocompletado le da a cada usuario una referencia de API instantánea.
Los IDE más nuevos permiten a los usuarios y desarrolladores de lenguaje poner metadatos en su inteligencia, lo que mejora aún más la capacidad de leer y comprender lo que hacen las funciones, sin leer la fuente (que es algo que no deberían tener que hacer de todos modos).
Quizás, lo mejor para los novatos es leer y comprender todo lo que implementan. Pero, tal vez sería una mejor pregunta si se debe permitir a los novatos incluir o importar los espacios de nombres o unidades que deseen sin documentar por qué lo están incluyendo.
fuente
En mi experiencia, usar un IDE para aprender los conceptos básicos de OO es excelente porque oculta parte de la complejidad de escribir código mientras permite al nuevo desarrollador centrarse en la lógica del programa. Sin embargo, poco después de aprender a programar y los principios básicos de OO, a través del curso me obligaron a comprender con mayor precisión qué piezas necesitaban interactuar entre sí en los archivos fuente (sin olvidar las declaraciones de importación, crear instancias de las clases correctas, etc.) mediante un curso de programación. donde tuvimos que usar terminales solo máquinas Unix.
Esto es posible en la escuela porque alguien tiene la 'autoridad' para obligarte a usar herramientas de baja fidelidad. Sería mucho más difícil de lograr en un entorno empresarial o corporativo.
fuente
Tengo dos pensamientos sobre esto. La primera es que para aprender realmente algo, creo que hay que saber lo que realmente está sucediendo. Y con lo bueno que se ha vuelto IntelliSense, puede ocultar algo de eso a un nuevo desarrollador. Por ejemplo, tuve una clase de ingeniería web en la universidad donde construimos nuestros propios marcos web para construir nuestras aplicaciones finales. Salí de esa clase con esa capacidad de adaptarme a casi cualquier marco web porque tenía la comprensión de lo que había debajo para empezar. Usar un IDE no está a ese nivel, pero creo que el punto sigue ahí.
Sin embargo, usar un IDE también puede hacer cosas como abrir API a nuevos desarrolladores. Cuando comencé a codificar en serio, el IDE que utilicé me ayudó enormemente porque hacía cosas como escribir un objeto, usar el autocompletado para ver qué métodos tenía y luego investigarlos usando los documentos disponibles. Todo esto se hizo dentro del IDE y fue una gran herramienta de aprendizaje.
Entonces, sí, creo que está bien usar uno siempre que también se tome el tiempo para comprender lo que está sucediendo. Simplemente usar una conversión de objetos sin entender por qué tuvo que hacerlo es realmente malo, pero si un nuevo desarrollador ve que puede usar una conversión de objetos y luego mira para ver por qué no veo nada malo.
fuente
El aprendizaje requiere práctica. La programación puede ser una tarea muy frustrante cuando no tienes idea de lo que puedes hacer ni de cómo funcionan las cosas.
No es práctico, por ejemplo, leer muchos libros sobre principios de programación sin escribir una sola línea de código; uno no aprende nada de esta manera.
Intellisense es muy útil para brindar a los nuevos programadores la ayuda que necesitan para seguir programando, seguir practicando y, por lo tanto, aprender.
Como ya se dijo, aprender API específicas no es lo mismo que aprender principios de programación. Lo que sin duda sucederá es que los nuevos programadores cometerán errores (independientemente de Intellisense), y cómo eligen corregir esos errores es lo que los llevará a convertirse en buenos programadores o pobres.
Si estás tratando de enseñarle a alguien cómo programar, les pido que usen Intellisense y jueguen hasta que se atasquen. Fue entonces cuando traté de construir una base enseñándoles la razón por la que se atascaron.
fuente
OMI, los IDEs te harán más productivo. Pero para los principiantes generalmente no es una buena idea comenzar a programar con IDE. Los editores de texto como notepad ++, notepad, etc. serían suficientes.
Además, generalmente no se considera una buena idea comenzar a aprender la programación con lenguaje de alto nivel. Te sugiero que comiences con el lenguaje ensamblador. Esto te enseñará conceptos básicos y paciencia.
fuente