No hay costos de licencia para un IDE de Java como para el ecosistema de Microsoft. Más de sus cuotas de matrícula masivas a la universidad.
mjhilton
16
¿Qué? puedes obtener Microsoft Visual Studio Express gratis.
quant_dev
12
En realidad, la mayoría de las veces puede obtener Visual Studio de forma gratuita si es estudiante y cualquier otra aplicación de Microsoft.
Erin
55
porque quieres ganar dinero cuando te gradúes ¿verdad? Pasar 4 años estudiando cosas que nadie usa en el realmundo no es un beneficio para los estudiantes o las empresas que desean contratarlos.
55
@JarrodRoberson, solo algunas empresas usan Java, las universidades realmente deberían educarte en una variedad más amplia de idiomas para que estés mejor preparado para el mundo real. No querrá quedarse atascado siendo solo un programador de Java cuando hay tantas otras formas de pensar y desarrollar.
CaffGeek
Respuestas:
73
A pocas universidades tienen alguien que está lo suficientemente bien sabido que muchos (si no la mayoría) de las decisiones giran alrededor de esa persona gustos, disgustos, opiniones, gustos, etc. Así, por ejemplo, de Texas A & M tiene Bjarne Stroustrup en el personal; Probablemente no sea una sorpresa para nadie que su plan de estudios tiende a enfatizar C ++.
Sin embargo, la mayoría de las universidades son un poco diferentes. Primero, las decisiones a menudo se toman mucho más en beneficio del profesorado que de los estudiantes. El criterio más importante en muchos casos es "¿qué idioma requiere el menor esfuerzo de nuestra parte?" La mayoría de ellos también son cuidadosos en su pereza: quieren no solo el lenguaje con la menor cantidad de conceptos avanzados para aprender, sino también uno que es (por ejemplo) el más lento para innovar, actualizar o adoptar algo nuevo.
En segundo lugar, la mayoría de las decisiones las toma un comité. Esto significa que la decisión final rara vez es (si alguna vez) lo que alguien realmente quería: es lo que menos miembros del comité (especialmente aquellos con mayor influencia) encontraron particularmente objetables. Es como elegir un sabor de helado. A uno realmente le gusta la fresa, pero otro es alérgico a las fresas. Otro realmente ama el chocolate, pero alguien más no puede soportarlo. Otro piensa que el ron con pasas de uva es excelente, pero a los otros dos les preocupa que mencionar "ron" se interprete como alentador del abuso de alcohol, por lo que terminan con vainilla, aunque no es lo que nadie realmente quería.
Finalmente, aunque generalmente es directamente contrario a la mayoría de lo que los dos criterios anteriores producirían de manera aislada, generalmente necesitan (o al menos quieren) ser vistos como sensibles a las necesidades de la industria.
Java es la intersección de estos tres:
Todos los conceptos que incorpora eran bien conocidos en 1980. No hay mucho que saber más allá de la noción más básica de lo que es la POO.
Es la opción insípida, inodoro, no tóxica, biodegradable y políticamente correcta.
Casi el único otro lenguaje en la historia que ha existido tanto tiempo (y probablemente) menos innovado es el SQL. Aunque apenas son lo que llamarías objetivos de rápido movimiento, COBOL y Fortran todavía han innovado más que Java.
Es ampliamente utilizado Cuando te pones a ello, los profesionales y los PHB tienen criterios similares.
Tenga en cuenta que en realidad no estoy diciendo (por ejemplo) que no hay nada más que saber sobre Java que la noción más básica de lo que es OOP, solo que eso es todo lo que se necesita para hacer lo que pasa por un trabajo aceptable de enseñarlo.
Se eliminaron muchos comentarios de aquí, ya que las opiniones sobre esta respuesta están divididas.
Nombre para mostrar el
1
FWIW, prefiero vainilla.
Lightness compite con Monica el
Me inscribí para votar tu respuesta
user2445942
22
Estudié Ciencias de la Computación a principios de los noventa justo antes de que saliera Java. El enfoque seguido por nuestros profesores fue el siguiente.
Primer año: curso introductorio sobre programación y algoritmos en Pascal. ¿Por qué pascal? Porque es un lenguaje limpio diseñado para enseñar los conceptos de programación sin facilidades para hackear. Por supuesto, los estudiantes sabíamos que el lenguaje más popular en ese momento era el C y que había un nuevo lenguaje con creciente popularidad: C ++. Así que estábamos leyendo y discutiendo sobre estos idiomas todo el tiempo y haciendo pequeños proyectos usándolos por nuestra cuenta. Entonces la idea era: en clase hacemos la teoría seria (Pascal) mientras que en casa aprendemos a hackear (C). :-)
Durante el segundo año tuvimos un curso de sistema operativo en el que nos pidieron que hiciéramos los ejercicios en C y ensamblaje. El profesor no nos dio un curso completo sobre C (solo unas pocas lecciones) porque (1) ya habíamos tenido un curso sobre programación durante el primer año y (2) dijo que todo informático que conozca los conceptos de programación debería poder leer un libro y aprender un nuevo lenguaje de programación. El curso transcurrió sin problemas y a todos nos pareció normal que C y la asamblea fueran temas prácticos que se aprenden solos o se discuten en el pasillo con otros estudiantes, pero no valía la pena hacer un curso.
Durante el tercer año tuvimos un curso sobre lenguajes de programación, en el que estudiamos los diferentes paradigmas de los lenguajes de programación (imperativo, funcional, lógico, orientado a objetos), aprendimos conceptos generales y técnicas de implementación, y revisamos los principales lenguajes de programación (Pascal, C, Modula2, Simula, Lisp, C ++, Prolog). Lo que nuestro profesor nos dijo al comienzo del curso fue: no debe evaluar este curso pensando en cuántos lenguajes de programación conoce al final del curso, sino más bien en todos los conceptos generales que ha aprendido, cómo están relacionados entre sí, para qué sirven, cómo se usan en qué idiomas. Luego, aprender un idioma específico es solo cuestión de leer un libro, mirar el código existente, tratar de usarlo en un proyecto específico, etc.
Este enfoque me pareció muy apropiado y efectivo. No creo que la universidad deba apuntar a preparar buenos programadores, sino más bien a proporcionar un buen conocimiento que permita comprender los lenguajes de programación y programación. Convertirse en un buen programador vendrá como un efecto secundario de eso. Ahora estoy considerando solicitar un trabajo donde se requiere Ada y no me da miedo, a pesar de que nunca antes había hecho una programación seria en Ada.
Volviendo a la cuestión de enseñar Java. Supongo que Java se usa a menudo para enseñar porque es lo suficientemente neutral y permite explicar los principios de programación usando un lenguaje que también está cerca del mundo de la industria.
Personalmente, todavía usaría Pascal o un lenguaje similar para un primer curso, porque eso me permitiría distinguir entre estructuras de control y estructuras de datos, que en Java / lenguajes orientados a objetos están estrechamente integrados. Entonces, en mi opinión, Pascal permitiría una introducción más gradual a los conceptos básicos de programación.
Además, un informático (y un buen programador) debe conocer los mecanismos básicos / estructuras de tiempo de ejecución como la pila, el montón, el paso de parámetros, la asignación de memoria, los punteros o cómo implementar tipos de datos abstractos sin utilizar las funciones integradas del idioma (listas, conjuntos, etc.). Java les quita gran parte de esto a los programadores (eso es bueno, por supuesto), pero un principiante debería aprender sobre estas cosas. Tal vez después de un primer curso de programación en Java, también se debería tomar un curso más general sobre conceptos de lenguajes de programación.
Cuando estaba en la universidad en el primer año, hicimos Ada para los cursos de programación (algunos ensamblados en el curso de sistemas informáticos). El segundo año fue un estilo de lenguaje bastante similar. El tercer año, se nos dijo exactamente esto, "todo informático que conozca los conceptos de programación debería poder leer un libro y aprender un nuevo lenguaje de programación". A finales de año aprendimos C, C ++, Java y el lenguaje en el que hiciste tu proyecto (el mío fue Python). Fue la mejor preparación que obtuve para el mundo real, cómo aprender rápidamente y sobre la marcha.
Amy
(+1) Los lenguajes de programación relacionados con Pascal son mejores para usarse para enseñar programación, porque su padre "Niklaus Wirth" los diseñó cuidadosamente para enseñar. ;-)
umlcat
@umlcat: Gracias. Sí, creo que es bueno tener C o C ++ donde puedes romper las reglas y piratear. Pero antes de romper las reglas debes saber qué reglas estás rompiendo. Para esto es muy útil tener un lenguaje de programación limpio como Pascal para aprender cómo debe programar en un "mundo ideal". Entonces al menos sabes lo que estás haciendo cuando pirateas. :-)
Giorgio
@Giorgio: Creo que a los estudiantes se les debe enseñar primero a Pascal y luego a C / C ++ y luego a Java. No me refiero solo a uno u otro, sino a todos en un orden particular. Algunas escuelas dejan de enseñar una a favor de otra. PD También trabajo en C y Java. Espero que ayude ;-)
umlcat
@umlcat: estoy totalmente de acuerdo. También agregaría algunos Lisp, Haskell, Prolog: cuantos más paradigmas de programación se conozcan, mejor.
Giorgio
10
Estaba en la escuela cuando salió Java. Y mi universidad casi cambió de la noche a la mañana. La gente estaba mareada en Java en la academia. Era un Jr cuando salió, y para mi último año, casi toda la academia se estaba moviendo rápidamente para cambiar su plan de estudios. No solo en mi universidad sino en todas partes. Fue realmente tan rápido. Nuestro segundo curso de introducción fue Pascal, que rápidamente se convirtió a Java en menos de un año. ¿Por qué se convirtieron tan rápido? Dos grandes razones
Uno de los académicos quiere enseñar la teoría y los algoritmos. Los lenguajes que facilitan el aprendizaje de aquellos algoritmos que no necesitan mucha experiencia para operar son los mejores: Scheme, Python, Java, Smalltalk, etc. Cuanto más se interpone el lenguaje, más se distrae de aprender los algoritmos reales. En ese momento, los lenguajes de escritura eran ciudadanos de segunda clase mal vistos por los empleadores como baratos, rápidos y sucios. Los académicos los vieron como más imitadores, pero lo que los empleadores quieren también influyó en los académicos.
Eso nos lleva a la siguiente razón. Los empleadores quieren cierta experiencia lingüística, y en ese momento era C / C ++. Pero, C / C ++ requiere de mucha experiencia para aprender, y tiene muchos casos de esquina, y si eso es molesto. Aprendimos cursos en C / C ++ pero no en los niveles inferiores. En ese momento, los empleadores estaban enojados con los programas de CS porque los estudiantes no salían siendo gurús de C / C ++.
Java estaba arrasando la industria casi tan rápido como la academia. Así que finalmente la academia estaba obteniendo lo que querían. Idioma de alto nivel que era más fácil de aprender y un idioma que los empleadores querían. Todo fue demasiado perfecto. Tuve un amigo que regresó a la academia quizás 3 años después de que me fui, y me dijo que podías encontrar un libro de Java en cada materia de CS. Así de rápido se hizo cargo Java de la academia.
Personalmente, creo que Java no ha disminuido el CS. Creo que en realidad ha sido algo bueno porque los estudiantes pueden estudiar CS, participar en Open Source y encontrar trabajo incluso mientras están en la escuela. Todavía creo que deberías estudiar muchos idiomas como estudiante de CS, y eso no debería ser solo Java. Pero, si todos usaran python, Joel también odiaría en python.
Si su escuela todavía usaba Pascal a mediados de los 90, entonces estaban atrasados para una revisión de todos modos. Mis primeras clases de CS fueron en Pascal, ¡pero eso fue en 1980! Curiosamente, solo fueron los cursos introductorios: las clases de nivel superior utilizaron C (para componentes internos del sistema operativo), Modula (para el diseño del compilador), Prolog y algunos cursos de posgrado incluso utilizaron Ada. No entiendo por qué las escuelas todavía no hacen esto.
TMN
1
la mayoría o todos todavía usaban Pascal en 1995, algunos se mudaron a Modula. El mío comenzó a introducir C ++ en 1995 para personas mayores, manteniendo a Pascal para jóvenes. Creo que ya han reemplazado a Pascal con Java (necesitan un lenguaje de bajo nivel ya que gran parte del trabajo implica interacción con el hardware, por lo que C ++ probablemente todavía esté disponible).
Jwenting
Usamos C / C ++ bastante después del curso introductorio de Pascal. Prolog, LISP, Scheme, Smalltalk, Assembly se utilizaron en las clases de nivel medio. A medida que la importancia del consumo de tecnología por parte del gobierno disminuyó en la década de 1990, Ada se eliminó gradualmente y solo se mencionó a fines de la década de 1990. Creo que los peligros de Java no tienen nada que ver con Java, sino con el monocultivo y el aprendizaje. Ahora soy desarrollador de Flex, y Adobe terminó mi capacidad de ganarme la vida la semana pasada. No estoy preocupado porque tengo una larga historia de no usar solo 1 idioma. Tengo Java, Ruby, Php, Python para recurrir.
chubbsondubs
8
Hay algunas razones para eso, que incluyen:
Ubicuidad en el mercado laboral: si las universidades quieren que sus estudiantes trabajen (y recomiendan más estudiantes a la universidad), deben enseñar idiomas relevantes.
Simplifica el currículum
Más fácil de calificar y más fácil de implementar su tarea en ella.
Recolección de basura, por lo que no es necesario enseñar punteros y administración manual de memoria
Tenga en cuenta que hay varias escuelas que enseñan C # por muchas de las mismas razones. Hay muchas más razones, algunas de ellas más particulares para la escuela individual. En esencia, Java se ha convertido en el objeto "BÁSICO" orientado a objetos de antaño.
También hay excelentes libros de Java que ejemplifican la POO, como el primer objeto de Java que usa BlueJ. Sin embargo, en C # no vi esos libros de aprendizaje que lo llevan desde cero y lo aprenden de una buena manera. ¿Estas de acuerdo conmigo?
Goma
Voy a. La enseñanza es una tarea muy difícil, y los maestros todavía están aprendiendo la mejor manera de enseñar. Encontrarás que varias escuelas en línea como Strayer se mantienen en C # y las escuelas tradicionales tienden a Java. Probablemente porque las escuelas en línea atienden a estudiantes que ya están trabajando. Los libros de programación básica pueden aplicarse a cualquier idioma, por lo que hay materiales disponibles.
Berin Loritsch
"Recolección de basura, por lo que no es necesario enseñar punteros y administración manual de memoria". si usted como ingeniero de software no sabe sobre punteros y administración de memoria, o no sabe cómo funcionan, se está perdiendo un conocimiento muy importante.
derecha el
Puede que Java no tenga la *sintaxis, pero sería muy difícil de usar sin una comprensión básica de los punteros.
dan04
@WTP y es por eso que Java se usa a menudo para cursos introductorios (donde anteriormente se usaban Pascal o Modula), y luego se introduce C (++).
Jwenting
6
Me gusta la publicación de Joel Spolsky titulada The Perils Of Java Schools . Creo que Berin Loristch está en lo correcto al simplificar el plan de estudios y también es aplicable al mundo real.
He escuchado lo siguiente decir muchas veces: "un título en Informática no es un título para aprender programación, es aprender la teoría". El lenguaje no necesariamente tiene que importar (aunque no debe interferir) mientras se aprenda la teoría. Java es un lenguaje relativamente fácil de aprender y permite pasar más tiempo aprendiendo la teoría detrás de todo. Esta es una de las razones por las que MIT usa Scheme (eso he escuchado).
@nate c - ya no estaba seguro. Aún así, Python es bastante fácil de aprender también. ¡Gracias por el enlace!
Jetti
Me molestaría por completo con mis alumnos si estuviera enseñando una clase. Te recomendaría que escribas tu propio lenguaje de programación y solo puedes usar ese lenguaje de programación durante el curso de la clase.
berlinbrown2
1
@Berlin - Supongo que por eso no eres profesor entonces :)
Jetti
3
Muchas de las respuestas dadas anteriormente son buenas, pero dejan algo fuera.
Java es un lenguaje multiplataforma. Un estudiante puede usar su Mac, otro su PC y otro su cuenta de estudiante Unix. El mismo código hará lo mismo. Piense en lo fácil que es para el maestro y el departamento de TI de la escuela.
Esta fue la verdadera importancia de Java cuando salió. La broma fue "Codifique una vez, depure en todas partes", pero realmente elimina el hardware y los sistemas operativos de la ecuación.
Tal vez esto explica por qué Java se elige sobre C, C ++ o C #, pero Ruby y Python (entre otros) funcionan bien en plataformas cruzadas.
Eric Wilson el
Buen punto. Creo que los departamentos de CS también favorecen los idiomas fuertemente tipados, por varias razones. Además, Java tuvo una ventaja en los Estados Unidos. Ruby realmente no llegó hasta 1999 o más tarde, y Python estuvo bastante limitado hasta que salió 2.0.
Matthew Flynn el
1
Escuché a profesores decir que usan Java para enseñar porque:
utiliza los paradigmas más nuevos (OOP, algunos genéricos)
sintácticamente muy simple, aunque bastante detallado
No hay conceptos avanzados como funciones de orden superior, cierres, currículums o continuaciones que puedan confundir a las personas que todavía están aprendiendo conceptos básicos.
muchas bibliotecas escritas para ello
los estudiantes no se estancan en la depuración de las pérdidas de memoria ya que hay un gc
Personalmente, me alegro de haber tomado CS en Berkeley cuando usaron Scheme para enseñar. Aunque no me di cuenta de lo elegante que era un idioma hasta unos años más tarde.
Tomé la única clase de Java ofrecida en nuestra escuela. Esto fue a finales de los 90 hasta principios de 2000. Java estaba creciendo pero casi no había despegado. Viniendo de un gran desarrollo en C, estaba un poco frustrado con todo el código repetitivo que necesita para poner en funcionamiento Java. No pude concentrarme en mi tarea. No podía simplemente abrir un archivo con "abrir". Tuve que definir la clase y luego las importaciones, etc., etc.
Era ingeniero informático, así que primero tomé la programación de ensamblaje y luego C y luego C ++, Scheme y ese curso de Java. Fue principalmente un programa escolar orientado a C. La clase de algoritmos se enseñó usando C.
Cuando entré en la industria, Java era claramente el jugador dominante. Tal vez fue el único jugador durante la conversión de los sistemas de back-end COBOL a las aplicaciones empresariales web Java. Java hizo grandes avances en el mundo de los negocios durante los primeros 2000 días.
Al mismo tiempo, no conocía todos los frameworks de Java, pero sabía cómo codificar y adaptarme al entorno de Java. Si tomé cursos de capacitación sobre buenos estándares de codificación Java, probablemente podría haber comenzado con un mejor estilo Java o conocimiento del ecosistema Java.
En retrospectiva, no creo que importe.
Para responder a su pregunta: ¿Por qué estudiamos Java en la universidad?
Java debe enseñarse pero no usarse en todos los cursos:
Deberías aprender Java en algún momento de la universidad si estás aprendiendo informática. Es popular en el mundo de los negocios. Deberías aprender Java y tal vez C #. ABSOLUTAMENTE no enseñaría Java como un curso introductorio de programación. Y Java ciertamente no debería ser el idioma principal utilizado en todos los cursos.
Sobre la crítica de Java:
Java recibe muchas críticas y siempre lo ha recibido. He estado leyendo revistas de Java que mencionan Java con un signo de interrogación, "¿Está Java listo para la empresa?". La plataforma Java sigue siendo una plataforma ampliamente utilizada. Pero, para la mayoría de las tareas de programación generales, Java funciona bien. Y no hay problemas importantes con el uso de Java. No dañará tu conjunto de habilidades. Podría hacerlo si solo confía en las bibliotecas de Java sin aprender lo que sucede debajo. Pero Java no causa ningún tipo de daño cerebral (algunos desarrolladores realmente creen que esto es cierto).
Además, ¿por qué los desarrolladores no atacan C o C ++? O al menos C ++. Los paradigmas de programación imperativos son muy similares. Y nunca consideraría escribir una aplicación web en C ++, pero podría hacerlo con Java.
Así es como configuraría un plan de estudios:
Curso introductorio: esquema, Python, lenguaje ensamblador, C (los tres)
Curso de Algoritmos: C, Haskell, Python (los tres)
Curso de sistema operativo / Curso de redes: C / C ++
Desarrollo de GUI: Java Swing, C ++ en Win32
Programación orientada a objetos: (esto es complicado, no tendría un curso OOP). C ++, Java, C #
¿Empresa? Desarrollo: Java, C #, Python
Diseño del lenguaje, compiladores: Haskell, Scala, C, ensamblaje, esquema, Common Lisp, Prolog.
Los idiomas que enumeré en mi plan de estudios son bastante comunes. Muchas escuelas están enseñando varios idiomas sin problemas. En la industria, utilizará muchos lenguajes de programación diferentes. Usarás idiomas de los que ni siquiera has oído hablar.
El tema de Java en las escuelas no es un problema a menos que quieran protegerte por completo de Java o solo quieran enseñar Java. En ambos casos, las escuelas no están justificadas.
(-1) "Lenguaje ensamblador" demasiado complejo para "Curso introductorio". No me refiero a "no lo enseñan", quiero decir "Vamos a enseñar, más tarde"
umlcat
1
Lo siento, solo respuesta larga y aburrida:
(1) ¿Querías decir:
"¿Por qué estudiamos Java en la universidad, como primer lenguaje de programación?"
(2) ¿O quieres decir:
"De todos modos, ¿por qué estudiamos Java en la universidad, incluso si aprendemos otros lenguajes de programación, antes de Java?"
Parece que realmente quieres decir ambas preguntas.
En caso de (1):
No creo que Java (o .NET C # y Visual Basic) deba enseñarse como primeros lenguajes de programación. Pascal estructurado y modular debe ser el primero, incluso si suena viejo y obsoleto.
Mucha gente piensa que deberíamos enseñarle a la gente programación orientada a objetos o programación funcional inmediatamente, solo porque es "bombo" o "tendencia".
Aprendo Pascal estructurado como una versión pequeña de "Programación orientada a objetos", no como algo similar. Veo un programa estructurado como un único objeto pequeño.
Después de eso, sugiero continuar con los lenguajes funcionales y Object Pascal.
Y luego, C, C ++, C #, VB.Net, Java.
Las razones principales por las que no me gusta Java o C #, como primer lenguaje de programación, es que tienen conceptos mixtos de "punteros", "punteros a objetos" y "objetos" mismos ("referencias").
Creo que los estudiantes deben tener en cuenta las diferencias y similitudes entre esos conceptos. La comparación de objetos Strings en Java es un buen ejemplo de esa rareza:
String A ="Mars";String A ="Venus";// pointer comparison or object comparison ???if(A == B){DoSomething();}
En caso de (2):
Creo que Java o C # deberían enseñarse en la escuela, porque tienen varias características buenas actualizadas y, al mismo tiempo, tienen un uso real.
Deberías aprender Java en algún momento de la universidad si estás aprendiendo informática. Es popular en el mundo de los negocios. Deberías aprender Java y tal vez C #. ABSOLUTAMENTE no enseñaría Java como un curso introductorio de programación. Y Java ciertamente no debería ser el idioma principal utilizado en todos los cursos.
No puedo estar más en desacuerdo. Java era un lenguaje en mi universidad que tenía que tomar para ingresar al programa CS&E en mi escuela. Java es extremadamente fácil de enseñar. Porque puede limitarse a ciertos conceptos que los "no programadores" pueden aprender.
Tampoco puedo decir si enseñarías o no ABSOLUTAMENTE Java como un curso introductorio de programación. ¿Básicamente dijiste que NO ABSOLUTAMENTE NO lo enseñarías ?
La simple razón ya ha sido explicada. Java no tiene derechos de licencia. Puedes enseñarlo usando un editor de prueba básico. Se usa por las razones equivocadas ciertamente.
No estoy de acuerdo con una respuesta anterior, que Java no ha hecho que los estudiantes lo pasen "más tonto", realmente muestra cuando tienen problemas con conceptos relativamente simples como matrices y listas en C ++.
Señalaría que la ignorancia no es lo mismo que ser "tonto". Las personas que "pasan" Java pueden no conocer esos "conceptos simples" porque no se les enseñó. No significa que si se tomaran un tiempo para resolverlo, no lo entenderían.
Jetti
0
El cambio de C a Java ocurrió en el momento equivocado .
Alrededor del año 2000. Estaba en la última clase C en mi universidad.
C ++ tenía demasiadas características para no confundir a un novato. (Y todavía lo hace. Y planea agregar algunos).
.NET no era lo suficientemente maduro y era aún más caro que hoy.
El objetivo C era antiguo y el uso que hizo Apple de él estaba volando por debajo del radar (no había iPhone cerca)
¿Otros problemas de .NET en ese momento? Sin tiempo de ejecución portátil: no había mono disponible.
ZJR
Sin neutralidad del editor de texto . (las guerras del editor de texto son feas, pero reales) Y un IDE predeterminado que hace que los estudiantes se entreguen a repeticiones .
ZJR
Por cierto, hubiera preferido que el mundo hubiera tomado el camino del Objetivo C , Apple no sería el único niño en ese estadio e incluso su modelo de negocio sería un poco menos loco.
ZJR
0
Me siento obligado a agregar a las respuestas aquí, ya que realmente no veo ninguna de estas respuestas que realmente cubra mi perspectiva.
Soy un programador aficionado. Estaba muy por delante de la curva cuando se trataba de 'computadoras' y 'programación'. Completé mi licenciatura - Licenciatura - en 2007 y Maestría unos dos años después - 2009. He trabajado con una gran cantidad de lenguajes, incluidos ensamblado, QuickBASIC, C, C ++, Java, PHP, Perl, Python, Scripts BASH, Javascript, COBOL, etc. .
En mi humilde opinión, el lenguaje que se utiliza para enseñar la programación a los estudiantes es un indicador de los tiempos en los que estamos viviendo actualmente. Por ejemplo, durante la década de 1980, la Asamblea era el lenguaje de bajo nivel, mientras que el C se consideraba un lenguaje de alto nivel.
Durante la década de 1990, C ++, Java, Perl y dichos lenguajes ganaron importancia principalmente porque tenían un nivel mucho más alto que C e incorporaron principios de desarrollo rápido. Así que dejaron de enseñar Asamblea a los estudiantes de CS y enseñaron C como una forma de expresar algoritmos. Poco a poco, eso ha cambiado en la última década, donde C se considera un lenguaje de nivel demasiado bajo para capturar la esencia de los algoritmos de manera efectiva y sin demasiados conocimientos de 'sistemas'. Esto es realmente extremadamente importante ya que el enfoque de un plan de estudios de CS debe ser más "teórico" que práctico y cada vez que alguien quiere escribir un algoritmo, si él / ella se atasca con asignaciones de memoria y aritmética de puntero, entonces no obtendrá en cualquier sitio.
Incluso hoy, si está en un programa de Maestría CS, tendría que completar ciertos requisitos de 'Sistemas' (al menos en los EE. UU. Y esto no debería ser muy diferente para las universidades de EE. UU.) Que necesita que los estudiantes puedan programar aplicaciones de nivel de sistemas y en ciertos casos tan profundos como la piratería a nivel del núcleo para pasar los requisitos. Por lo tanto, aunque el C no es el lenguaje de facto que se enseña en las escuelas, es relevante si desea especializarse en sistemas o computación de alto rendimiento o tales nichos.
También me gustaría mencionar otro punto es que el C requiere mucha disciplina para hacer las cosas bien, mientras que lenguajes como Java están un poco relajados sobre tales restricciones. Esto facilita la realización de cursos sin requerir que los RA / TA inicien GDB para depurar el programa de un estudiante :)
Creo que gran parte de eso es lo que se está utilizando en la industria.
Mi programa de CS tenía una Junta Asesora Industrial, compuesta por personal superior de empresas locales de tecnología y aeroespaciales, y tenían una gran cantidad de aportes al plan de estudios. Las clases introductorias de CS dejaron a Pascal a favor de C el año que comencé (1986), en gran medida a instancias del IAB. Del mismo modo, hubo un impulso para enseñar a Ada en algunos de los cursos de nivel superior ya que las compañías aeroespaciales locales tenían que usarlo para el trabajo del Departamento de Defensa.
Java es bastante ubicuo ahora, especialmente ahora que los dispositivos Android están despegando. Es una mierda desde una perspectiva didáctica, pero entonces, también lo hizo C.
Porque esperan que menos estudiantes reprobarán el curso, lo cual es un FALLO en sí mismo, en mi humilde opinión. Tal vez una de las razones por las que casi nadie toma en serio los títulos universitarios, al menos aquí.
Java es un lenguaje demasiado simple y no enseña a la PC que tiene un paradigma de recursos limitados. Si bien al mismo tiempo obliga a "no hay nada que no pueda resolverse con otra capa de abstracción" línea de pensamiento.
Sí, es bueno para los conceptos de OOP y los problemas de los juguetes, pero enseña a abordar los problemas desde el ángulo equivocado. Use una construcción ordenada aquí, atornille el resto.
Pero la academia es conocida por ser soñadora con AI, OWL y otras tecnologías de juguetes. Mientras siguen investigando tales cosas, a veces, alguien también inventa algo sorprendente allí, pero si quieres ser un buen desarrollador, debes aprenderlo de forma independiente.
real
mundo no es un beneficio para los estudiantes o las empresas que desean contratarlos.Respuestas:
A pocas universidades tienen alguien que está lo suficientemente bien sabido que muchos (si no la mayoría) de las decisiones giran alrededor de esa persona gustos, disgustos, opiniones, gustos, etc. Así, por ejemplo, de Texas A & M tiene Bjarne Stroustrup en el personal; Probablemente no sea una sorpresa para nadie que su plan de estudios tiende a enfatizar C ++.
Sin embargo, la mayoría de las universidades son un poco diferentes. Primero, las decisiones a menudo se toman mucho más en beneficio del profesorado que de los estudiantes. El criterio más importante en muchos casos es "¿qué idioma requiere el menor esfuerzo de nuestra parte?" La mayoría de ellos también son cuidadosos en su pereza: quieren no solo el lenguaje con la menor cantidad de conceptos avanzados para aprender, sino también uno que es (por ejemplo) el más lento para innovar, actualizar o adoptar algo nuevo.
En segundo lugar, la mayoría de las decisiones las toma un comité. Esto significa que la decisión final rara vez es (si alguna vez) lo que alguien realmente quería: es lo que menos miembros del comité (especialmente aquellos con mayor influencia) encontraron particularmente objetables. Es como elegir un sabor de helado. A uno realmente le gusta la fresa, pero otro es alérgico a las fresas. Otro realmente ama el chocolate, pero alguien más no puede soportarlo. Otro piensa que el ron con pasas de uva es excelente, pero a los otros dos les preocupa que mencionar "ron" se interprete como alentador del abuso de alcohol, por lo que terminan con vainilla, aunque no es lo que nadie realmente quería.
Finalmente, aunque generalmente es directamente contrario a la mayoría de lo que los dos criterios anteriores producirían de manera aislada, generalmente necesitan (o al menos quieren) ser vistos como sensibles a las necesidades de la industria.
Java es la intersección de estos tres:
Tenga en cuenta que en realidad no estoy diciendo (por ejemplo) que no hay nada más que saber sobre Java que la noción más básica de lo que es OOP, solo que eso es todo lo que se necesita para hacer lo que pasa por un trabajo aceptable de enseñarlo.
fuente
Estudié Ciencias de la Computación a principios de los noventa justo antes de que saliera Java. El enfoque seguido por nuestros profesores fue el siguiente.
Primer año: curso introductorio sobre programación y algoritmos en Pascal. ¿Por qué pascal? Porque es un lenguaje limpio diseñado para enseñar los conceptos de programación sin facilidades para hackear. Por supuesto, los estudiantes sabíamos que el lenguaje más popular en ese momento era el C y que había un nuevo lenguaje con creciente popularidad: C ++. Así que estábamos leyendo y discutiendo sobre estos idiomas todo el tiempo y haciendo pequeños proyectos usándolos por nuestra cuenta. Entonces la idea era: en clase hacemos la teoría seria (Pascal) mientras que en casa aprendemos a hackear (C). :-)
Durante el segundo año tuvimos un curso de sistema operativo en el que nos pidieron que hiciéramos los ejercicios en C y ensamblaje. El profesor no nos dio un curso completo sobre C (solo unas pocas lecciones) porque (1) ya habíamos tenido un curso sobre programación durante el primer año y (2) dijo que todo informático que conozca los conceptos de programación debería poder leer un libro y aprender un nuevo lenguaje de programación. El curso transcurrió sin problemas y a todos nos pareció normal que C y la asamblea fueran temas prácticos que se aprenden solos o se discuten en el pasillo con otros estudiantes, pero no valía la pena hacer un curso.
Durante el tercer año tuvimos un curso sobre lenguajes de programación, en el que estudiamos los diferentes paradigmas de los lenguajes de programación (imperativo, funcional, lógico, orientado a objetos), aprendimos conceptos generales y técnicas de implementación, y revisamos los principales lenguajes de programación (Pascal, C, Modula2, Simula, Lisp, C ++, Prolog). Lo que nuestro profesor nos dijo al comienzo del curso fue: no debe evaluar este curso pensando en cuántos lenguajes de programación conoce al final del curso, sino más bien en todos los conceptos generales que ha aprendido, cómo están relacionados entre sí, para qué sirven, cómo se usan en qué idiomas. Luego, aprender un idioma específico es solo cuestión de leer un libro, mirar el código existente, tratar de usarlo en un proyecto específico, etc.
Este enfoque me pareció muy apropiado y efectivo. No creo que la universidad deba apuntar a preparar buenos programadores, sino más bien a proporcionar un buen conocimiento que permita comprender los lenguajes de programación y programación. Convertirse en un buen programador vendrá como un efecto secundario de eso. Ahora estoy considerando solicitar un trabajo donde se requiere Ada y no me da miedo, a pesar de que nunca antes había hecho una programación seria en Ada.
Volviendo a la cuestión de enseñar Java. Supongo que Java se usa a menudo para enseñar porque es lo suficientemente neutral y permite explicar los principios de programación usando un lenguaje que también está cerca del mundo de la industria.
Personalmente, todavía usaría Pascal o un lenguaje similar para un primer curso, porque eso me permitiría distinguir entre estructuras de control y estructuras de datos, que en Java / lenguajes orientados a objetos están estrechamente integrados. Entonces, en mi opinión, Pascal permitiría una introducción más gradual a los conceptos básicos de programación.
Además, un informático (y un buen programador) debe conocer los mecanismos básicos / estructuras de tiempo de ejecución como la pila, el montón, el paso de parámetros, la asignación de memoria, los punteros o cómo implementar tipos de datos abstractos sin utilizar las funciones integradas del idioma (listas, conjuntos, etc.). Java les quita gran parte de esto a los programadores (eso es bueno, por supuesto), pero un principiante debería aprender sobre estas cosas. Tal vez después de un primer curso de programación en Java, también se debería tomar un curso más general sobre conceptos de lenguajes de programación.
Esta es solo mi experiencia y opiniones.
fuente
Estaba en la escuela cuando salió Java. Y mi universidad casi cambió de la noche a la mañana. La gente estaba mareada en Java en la academia. Era un Jr cuando salió, y para mi último año, casi toda la academia se estaba moviendo rápidamente para cambiar su plan de estudios. No solo en mi universidad sino en todas partes. Fue realmente tan rápido. Nuestro segundo curso de introducción fue Pascal, que rápidamente se convirtió a Java en menos de un año. ¿Por qué se convirtieron tan rápido? Dos grandes razones
Uno de los académicos quiere enseñar la teoría y los algoritmos. Los lenguajes que facilitan el aprendizaje de aquellos algoritmos que no necesitan mucha experiencia para operar son los mejores: Scheme, Python, Java, Smalltalk, etc. Cuanto más se interpone el lenguaje, más se distrae de aprender los algoritmos reales. En ese momento, los lenguajes de escritura eran ciudadanos de segunda clase mal vistos por los empleadores como baratos, rápidos y sucios. Los académicos los vieron como más imitadores, pero lo que los empleadores quieren también influyó en los académicos.
Eso nos lleva a la siguiente razón. Los empleadores quieren cierta experiencia lingüística, y en ese momento era C / C ++. Pero, C / C ++ requiere de mucha experiencia para aprender, y tiene muchos casos de esquina, y si eso es molesto. Aprendimos cursos en C / C ++ pero no en los niveles inferiores. En ese momento, los empleadores estaban enojados con los programas de CS porque los estudiantes no salían siendo gurús de C / C ++.
Java estaba arrasando la industria casi tan rápido como la academia. Así que finalmente la academia estaba obteniendo lo que querían. Idioma de alto nivel que era más fácil de aprender y un idioma que los empleadores querían. Todo fue demasiado perfecto. Tuve un amigo que regresó a la academia quizás 3 años después de que me fui, y me dijo que podías encontrar un libro de Java en cada materia de CS. Así de rápido se hizo cargo Java de la academia.
Personalmente, creo que Java no ha disminuido el CS. Creo que en realidad ha sido algo bueno porque los estudiantes pueden estudiar CS, participar en Open Source y encontrar trabajo incluso mientras están en la escuela. Todavía creo que deberías estudiar muchos idiomas como estudiante de CS, y eso no debería ser solo Java. Pero, si todos usaran python, Joel también odiaría en python.
fuente
Hay algunas razones para eso, que incluyen:
Tenga en cuenta que hay varias escuelas que enseñan C # por muchas de las mismas razones. Hay muchas más razones, algunas de ellas más particulares para la escuela individual. En esencia, Java se ha convertido en el objeto "BÁSICO" orientado a objetos de antaño.
fuente
*
sintaxis, pero sería muy difícil de usar sin una comprensión básica de los punteros.Me gusta la publicación de Joel Spolsky titulada The Perils Of Java Schools . Creo que Berin Loristch está en lo correcto al simplificar el plan de estudios y también es aplicable al mundo real.
He escuchado lo siguiente decir muchas veces: "un título en Informática no es un título para aprender programación, es aprender la teoría". El lenguaje no necesariamente tiene que importar (aunque no debe interferir) mientras se aprenda la teoría. Java es un lenguaje relativamente fácil de aprender y permite pasar más tiempo aprendiendo la teoría detrás de todo. Esta es una de las razones por las que MIT usa Scheme (eso he escuchado).
fuente
Muchas de las respuestas dadas anteriormente son buenas, pero dejan algo fuera.
Java es un lenguaje multiplataforma. Un estudiante puede usar su Mac, otro su PC y otro su cuenta de estudiante Unix. El mismo código hará lo mismo. Piense en lo fácil que es para el maestro y el departamento de TI de la escuela.
Esta fue la verdadera importancia de Java cuando salió. La broma fue "Codifique una vez, depure en todas partes", pero realmente elimina el hardware y los sistemas operativos de la ecuación.
fuente
Escuché a profesores decir que usan Java para enseñar porque:
Personalmente, me alegro de haber tomado CS en Berkeley cuando usaron Scheme para enseñar. Aunque no me di cuenta de lo elegante que era un idioma hasta unos años más tarde.
fuente
Un poco de historia
Tomé la única clase de Java ofrecida en nuestra escuela. Esto fue a finales de los 90 hasta principios de 2000. Java estaba creciendo pero casi no había despegado. Viniendo de un gran desarrollo en C, estaba un poco frustrado con todo el código repetitivo que necesita para poner en funcionamiento Java. No pude concentrarme en mi tarea. No podía simplemente abrir un archivo con "abrir". Tuve que definir la clase y luego las importaciones, etc., etc.
Era ingeniero informático, así que primero tomé la programación de ensamblaje y luego C y luego C ++, Scheme y ese curso de Java. Fue principalmente un programa escolar orientado a C. La clase de algoritmos se enseñó usando C.
Cuando entré en la industria, Java era claramente el jugador dominante. Tal vez fue el único jugador durante la conversión de los sistemas de back-end COBOL a las aplicaciones empresariales web Java. Java hizo grandes avances en el mundo de los negocios durante los primeros 2000 días.
Al mismo tiempo, no conocía todos los frameworks de Java, pero sabía cómo codificar y adaptarme al entorno de Java. Si tomé cursos de capacitación sobre buenos estándares de codificación Java, probablemente podría haber comenzado con un mejor estilo Java o conocimiento del ecosistema Java.
En retrospectiva, no creo que importe.
Para responder a su pregunta: ¿Por qué estudiamos Java en la universidad?
Java debe enseñarse pero no usarse en todos los cursos:
Deberías aprender Java en algún momento de la universidad si estás aprendiendo informática. Es popular en el mundo de los negocios. Deberías aprender Java y tal vez C #. ABSOLUTAMENTE no enseñaría Java como un curso introductorio de programación. Y Java ciertamente no debería ser el idioma principal utilizado en todos los cursos.
Sobre la crítica de Java:
Java recibe muchas críticas y siempre lo ha recibido. He estado leyendo revistas de Java que mencionan Java con un signo de interrogación, "¿Está Java listo para la empresa?". La plataforma Java sigue siendo una plataforma ampliamente utilizada. Pero, para la mayoría de las tareas de programación generales, Java funciona bien. Y no hay problemas importantes con el uso de Java. No dañará tu conjunto de habilidades. Podría hacerlo si solo confía en las bibliotecas de Java sin aprender lo que sucede debajo. Pero Java no causa ningún tipo de daño cerebral (algunos desarrolladores realmente creen que esto es cierto).
Además, ¿por qué los desarrolladores no atacan C o C ++? O al menos C ++. Los paradigmas de programación imperativos son muy similares. Y nunca consideraría escribir una aplicación web en C ++, pero podría hacerlo con Java.
Así es como configuraría un plan de estudios:
Los idiomas que enumeré en mi plan de estudios son bastante comunes. Muchas escuelas están enseñando varios idiomas sin problemas. En la industria, utilizará muchos lenguajes de programación diferentes. Usarás idiomas de los que ni siquiera has oído hablar.
El tema de Java en las escuelas no es un problema a menos que quieran protegerte por completo de Java o solo quieran enseñar Java. En ambos casos, las escuelas no están justificadas.
(Lo siento Ruby Lang)
fuente
Lo siento, solo respuesta larga y aburrida:
(1) ¿Querías decir:
"¿Por qué estudiamos Java en la universidad, como primer lenguaje de programación?"
(2) ¿O quieres decir:
"De todos modos, ¿por qué estudiamos Java en la universidad, incluso si aprendemos otros lenguajes de programación, antes de Java?"
Parece que realmente quieres decir ambas preguntas.
En caso de (1):
No creo que Java (o .NET C # y Visual Basic) deba enseñarse como primeros lenguajes de programación. Pascal estructurado y modular debe ser el primero, incluso si suena viejo y obsoleto.
Mucha gente piensa que deberíamos enseñarle a la gente programación orientada a objetos o programación funcional inmediatamente, solo porque es "bombo" o "tendencia".
Aprendo Pascal estructurado como una versión pequeña de "Programación orientada a objetos", no como algo similar. Veo un programa estructurado como un único objeto pequeño.
Después de eso, sugiero continuar con los lenguajes funcionales y Object Pascal.
Y luego, C, C ++, C #, VB.Net, Java.
Las razones principales por las que no me gusta Java o C #, como primer lenguaje de programación, es que tienen conceptos mixtos de "punteros", "punteros a objetos" y "objetos" mismos ("referencias").
Creo que los estudiantes deben tener en cuenta las diferencias y similitudes entre esos conceptos. La comparación de objetos Strings en Java es un buen ejemplo de esa rareza:
En caso de (2):
Creo que Java o C # deberían enseñarse en la escuela, porque tienen varias características buenas actualizadas y, al mismo tiempo, tienen un uso real.
fuente
No puedo estar más en desacuerdo. Java era un lenguaje en mi universidad que tenía que tomar para ingresar al programa CS&E en mi escuela. Java es extremadamente fácil de enseñar. Porque puede limitarse a ciertos conceptos que los "no programadores" pueden aprender.
Tampoco puedo decir si enseñarías o no ABSOLUTAMENTE Java como un curso introductorio de programación. ¿Básicamente dijiste que NO ABSOLUTAMENTE NO lo enseñarías ?
La simple razón ya ha sido explicada. Java no tiene derechos de licencia. Puedes enseñarlo usando un editor de prueba básico. Se usa por las razones equivocadas ciertamente.
No estoy de acuerdo con una respuesta anterior, que Java no ha hecho que los estudiantes lo pasen "más tonto", realmente muestra cuando tienen problemas con conceptos relativamente simples como matrices y listas en C ++.
fuente
El cambio de C a Java ocurrió en el momento equivocado .
Alrededor del año 2000. Estaba en la última clase C en mi universidad.
C ++ tenía demasiadas características para no confundir a un novato. (Y todavía lo hace. Y planea agregar algunos).
.NET no era lo suficientemente maduro y era aún más caro que hoy.
El objetivo C era antiguo y el uso que hizo Apple de él estaba volando por debajo del radar (no había iPhone cerca)
fuente
Me siento obligado a agregar a las respuestas aquí, ya que realmente no veo ninguna de estas respuestas que realmente cubra mi perspectiva.
Soy un programador aficionado. Estaba muy por delante de la curva cuando se trataba de 'computadoras' y 'programación'. Completé mi licenciatura - Licenciatura - en 2007 y Maestría unos dos años después - 2009. He trabajado con una gran cantidad de lenguajes, incluidos ensamblado, QuickBASIC, C, C ++, Java, PHP, Perl, Python, Scripts BASH, Javascript, COBOL, etc. .
En mi humilde opinión, el lenguaje que se utiliza para enseñar la programación a los estudiantes es un indicador de los tiempos en los que estamos viviendo actualmente. Por ejemplo, durante la década de 1980, la Asamblea era el lenguaje de bajo nivel, mientras que el C se consideraba un lenguaje de alto nivel.
Durante la década de 1990, C ++, Java, Perl y dichos lenguajes ganaron importancia principalmente porque tenían un nivel mucho más alto que C e incorporaron principios de desarrollo rápido. Así que dejaron de enseñar Asamblea a los estudiantes de CS y enseñaron C como una forma de expresar algoritmos. Poco a poco, eso ha cambiado en la última década, donde C se considera un lenguaje de nivel demasiado bajo para capturar la esencia de los algoritmos de manera efectiva y sin demasiados conocimientos de 'sistemas'. Esto es realmente extremadamente importante ya que el enfoque de un plan de estudios de CS debe ser más "teórico" que práctico y cada vez que alguien quiere escribir un algoritmo, si él / ella se atasca con asignaciones de memoria y aritmética de puntero, entonces no obtendrá en cualquier sitio.
Incluso hoy, si está en un programa de Maestría CS, tendría que completar ciertos requisitos de 'Sistemas' (al menos en los EE. UU. Y esto no debería ser muy diferente para las universidades de EE. UU.) Que necesita que los estudiantes puedan programar aplicaciones de nivel de sistemas y en ciertos casos tan profundos como la piratería a nivel del núcleo para pasar los requisitos. Por lo tanto, aunque el C no es el lenguaje de facto que se enseña en las escuelas, es relevante si desea especializarse en sistemas o computación de alto rendimiento o tales nichos.
También me gustaría mencionar otro punto es que el C requiere mucha disciplina para hacer las cosas bien, mientras que lenguajes como Java están un poco relajados sobre tales restricciones. Esto facilita la realización de cursos sin requerir que los RA / TA inicien GDB para depurar el programa de un estudiante :)
fuente
Creo que gran parte de eso es lo que se está utilizando en la industria.
Mi programa de CS tenía una Junta Asesora Industrial, compuesta por personal superior de empresas locales de tecnología y aeroespaciales, y tenían una gran cantidad de aportes al plan de estudios. Las clases introductorias de CS dejaron a Pascal a favor de C el año que comencé (1986), en gran medida a instancias del IAB. Del mismo modo, hubo un impulso para enseñar a Ada en algunos de los cursos de nivel superior ya que las compañías aeroespaciales locales tenían que usarlo para el trabajo del Departamento de Defensa.
Java es bastante ubicuo ahora, especialmente ahora que los dispositivos Android están despegando. Es una mierda desde una perspectiva didáctica, pero entonces, también lo hizo C.
fuente
Porque esperan que menos estudiantes reprobarán el curso, lo cual es un FALLO en sí mismo, en mi humilde opinión. Tal vez una de las razones por las que casi nadie toma en serio los títulos universitarios, al menos aquí.
Java es un lenguaje demasiado simple y no enseña a la PC que tiene un paradigma de recursos limitados. Si bien al mismo tiempo obliga a "no hay nada que no pueda resolverse con otra capa de abstracción" línea de pensamiento.
Sí, es bueno para los conceptos de OOP y los problemas de los juguetes, pero enseña a abordar los problemas desde el ángulo equivocado. Use una construcción ordenada aquí, atornille el resto.
Pero la academia es conocida por ser soñadora con AI, OWL y otras tecnologías de juguetes. Mientras siguen investigando tales cosas, a veces, alguien también inventa algo sorprendente allí, pero si quieres ser un buen desarrollador, debes aprenderlo de forma independiente.
fuente