Estoy a punto de inscribirme en la escuela para obtener un título de CS. La escuela que estoy viendo en realidad ofrece tanto Java como C ++ para los cursos introductorios de desarrollo de software (programación orientada a objetos, patrones de diseño, ese tipo de cosas). Es la elección del alumno qué pista seguir, pero solo hay tiempo para seguir una.
Sabiendo lo que sabe ahora, si tuviera la opción, ¿establecería su base de currículum CS en Java o C ++?
Mi debate actual actualmente se ve así:
Un buen amigo (que tiene un doctorado en IA) está promocionando Java como la mejor opción, independientemente de lo que haga, aunque solo sea para abrir más oportunidades de trabajo más tarde, aunque podría ser parcial ya que todo su trabajo ha estado en Java (él a él le encanta). Vivo en el área de Boston, MA, EE. UU. Y veo una cantidad igual de trabajo en Java y C.
Por otro lado, aunque todavía no me he decidido por completo sobre lo que quiero hacer con el título cuando termine, mi preferencia sería desarrollar para Mac, lo que estoy haciendo ahora, aunque de manera limitada. Con ese fin, ya estoy recibiendo una exposición limitada a C ++, pero no he tenido ninguno con Java, y mirando mis proyectos en mi trabajo diario no veo la necesidad de usarlo en el corto plazo, "pronto" medido por al menos dos años.
Probablemente debería tener en cuenta que soy un adulto que regresa a la escuela después de 20 años (actualmente no tengo ningún título de ningún tipo), así que estoy buscando maximizar la oportunidad y el tiempo que pasé lo mejor que pude. Me estoy inclinando hacia C ++, pero sigo siendo ambivalente, y algunos consejos externos ayudarían aquí.
O podría estar pensando demasiado en ello.
ACTUALIZACIÓN: Resulta que la selección de idioma no fue tan clara como supuse originalmente. Mientras que un par de cursos básicos se centraron en Java, algunos de los otros cursos básicos funcionan principalmente en C y Java, pero también en algunos otros que se incluyen en buena medida. De hecho, el resto de mi semestre estará en Objective-C después de pasar tiempo en Java y Javascript. El último semestre fue C, Javascript y PHP, además de algunos otros lanzados como tareas requeridas. Dado que las cosas se dividieron en el medio en general, y todavía estoy recibiendo respuestas a esto, ahora estoy tratando de trabajar mi plan de estudios de manera que cumpla con todos los requisitos para el título, pero absorba tantos idiomas como pueda manejar razonablemente . Hasta ahora, mis calificaciones no han sufrido tratando de hacer esto.
Respuestas:
Yo personalmente iría con C ++, ya que te dará información sobre cómo funcionan partes de Java bajo el capó (punteros, por ejemplo). Moverse a Java desde C ++ es bastante trivial, mientras que moverse al revés es posiblemente más difícil.
Lo verdaderamente difícil del ecosistema Java es su gran cantidad de marcos, bibliotecas, etc. De todos modos, es poco probable que cubran todo eso en la Universidad.
Al final del día no va a importar que tanto el idioma que elija, siempre y cuando se aprende los principios.
Mi JUG me va a matar por respaldar C ++ ;-)
fuente
Tengo que estar en desacuerdo con la mayoría de las personas que defienden Java aquí. Aprender C ++, incluso si no ha estudiado la arquitectura de la computadora y el microprocesador, le brinda tantos conocimientos invaluables sobre la forma en que funcionan y operan los programas de computadora.
Nota bene, NO estoy abogando por que no debas aprender Java (mejor aún, C #) porque estos son langs modernos y rápidos de desarrollo de aplicaciones y se han construido grandes marcos alrededor de ellos que te dan acceso a una gran cantidad de funcionalidades "gratuitas", como acceso a archivos abstractos y similares, sin embargo, un verdadero ingeniero de software debería conocer al menos algo de C ++, C o al menos ensamblador, porque eso es lo que lo separa de los tipos de script-kiddie.
Una vez que sea razonablemente competente con C ++, confiado en la administración de memoria y STL, adquirir Java / C # debería ser muy fácil.
fuente
Las escuelas y los académicos que abogan por Java como la primera opción deberían examinar sus cabezas (o simplemente conseguir un trabajo real ahí fuera). Lo digo como una persona que ha realizado el desarrollo de aplicaciones y sistemas en Java durante los últimos 12 años. Java es un lenguaje atroz para la enseñanza.
La razón es la siguiente: salvo los superdotados, la mayoría de los estudiantes pueden (y probablemente nunca lo harán) comprender la orientación de los objetos sin comprender la programación modular. Y no pueden entender la programación modular sin primero entender la programación estructurada en un lenguaje de procedimiento. Llano y simple. El testamento de esto (entre otras cosas) es que a pesar de que hemos conocido OO durante 3-4 décadas, la gente todavía escribe hiper-spaghetti en la práctica.
Además, una persona que solo confía en un lenguaje basado en gc (ya sea Java o .NET) nunca puede acercarse realmente al hardware. A menos que su ambición sea crear páginas web dinámicas, ¿adivina qué? Debe sentirse cómodo acercándose al idioma.
Vas a una escuela de CS para convertirte en un experto en informática y programador (con suerte con bastantes horas de crédito de práctica práctica de programación en muchos lenguajes de programación). Si todo lo que sabes es Java (o .NET o C o Python lo que sea) entonces eres un "programador de Java" (no un programador que puede trabajar en Java, sino un "programador de Java"). Y eso tiene tanto sentido como decir que eres un "carpintero de martillo" o un "mecánico de destornilladores Phillip", ¿no es así?
Una buena escuela lo expondrá a C (o algún otro lenguaje de procedimiento como Pascal o Ada), luego a C ++ y a una asamblea, dejándolo para que aprenda Java por su cuenta mientras realiza los cursos finales del proyecto en su año junior / senior. Además, debería proporcionarle exposición a lenguajes funcionales para que entienda el concepto de pasar bloques computacionales como argumentos, cálculos sin efectos secundarios, transparencia de ubicación y similares (que tienen aplicaciones prácticas reales, incluso en la web).
Necesita saber qué es un segfault. Necesita saber qué significan la paginación, la memoria virtual y toda esa basura. Debe saber cómo descomponer los problemas en los módulos (ya sean de procedimiento y basados en OO). Necesita saber cómo se implementan realmente los sistemas OO (para que sepa el costo). Debe saber dónde se interrumpe la abstracción OO (y lo hacen porque el mundo y los problemas complejos no están necesariamente orientados a objetos).
Necesitas saber todo eso para convertirte en un experto en computación capaz de trabajar en la empresa o en un nivel muy bajo implementando cosas de nivel de sistema, ya sea para el sector comercial o público, tanto a gran escala como a pequeña escala. escala.
Los académicos que han estado presionando para que Java sea el único lenguaje para gobernarlos a todos no tienen ni idea de lo que realmente necesita la industria. Despistado. Imperdonable despistado. Eso es lo que sucede cuando trabajan en torres de marfil mirando a la industria a distancia.
Han convertido los departamentos de Informática en costosas escuelas vocacionales de 4 años que producen ponis de un solo lenguaje de programación. Y eso podría ser perdonable si al menos pudieran enseñar a los estudiantes habilidades básicas de negocios / empresa / organización (es decir, abandonar la fachada de CS y adoptar un plan de estudios MIS). Pero ni siquiera hacen eso, lo que creo que es un gran mal servicio a la industria, la economía y, en última instancia, a los estudiantes.
Te sugiero que leas el artículo de Joel Spolsky sobre "Escuelas de Java".
http://www.joelonsoftware.com/articles/ThePerilsofJavaSchools.html
En resumen, si no te enseñan un lenguaje de programación procesal (ya sea industrial como C o Ada o uno lo suficientemente bueno para enseñar como Pascal), y te dan si C ++ (si tienes suerte) o Java / C # (si no tienes suerte), buscaría otra escuela. Claro y simple, de un tipo que ha estado utilizando Java para ganarse la vida en el mundo real durante bastante tiempo.
fuente
Creo que mucho depende de tu personalidad. Al menos desde mi perspectiva, Java y C ++ tienen orientaciones radicalmente diferentes que atraen a tipos de personas sustancialmente diferentes.
Cuando te pones a ello, Java es realmente una biblioteca de gran clase, con suficiente lenguaje para poder instanciar objetos e invocar métodos desde esa biblioteca. "Aprender Java" consiste, en gran parte, en memorizar (o al menos darse cuenta) de lo que hay en la biblioteca y cómo está organizado, para que pueda encontrar las cosas que desea cuando las quiere.
C ++ pone mucho menos énfasis en proporcionar código preescrito. Si bien incluye una biblioteca (STL 1 ), esa biblioteca tiene menos que ver con el código que se incluye que con un estilo y un conjunto de principios. Es completamente posible escribir código que sea claramente y fácilmente reconocible como código "STL", a pesar de que usa poco o nada del código escrito previamente.
También hay una diferencia bastante sustancial en cómo se usan los idiomas. Java ha puesto un gran énfasis en mantener el lenguaje simple. Esto facilita la creación de herramientas que manipulan el código Java de varias maneras (por ejemplo, para refactorizar). También significa que tiende a necesitar herramientas que puedan hacerlo, porque la refactorización a menudo implica cambios bastante sustanciales en grandes cantidades de código.
C ++ es un lenguaje mucho más complejo, lo que significa (entre otras cosas) que crear herramientas para manipular el código fuente de C ++ es tremendamente más difícil que para Java. El balance es que es mucho menos necesario: un trabajo de refactorización que podría implicar cientos de cambios en docenas de archivos en Java podría lograrse (por ejemplo) cambiando un solo parámetro de plantilla en C ++.
Java pone mucho más énfasis en ser fácil de aprender. C ++ pone mucho más énfasis en ser fácil de usar, pero (desafortunadamente) solo si realmente sabe lo que está haciendo.
No voy a abogar por uno u otro. Mi opinión sobre los idiomas es mucho menos relevante que tener una idea de qué esperar de cada uno y echar un vistazo honesto a sí mismo para descubrir cuál es el que más le conviene.
1 Sí, sé que eso no es realmente exacto, pero estoy tratando de evitar que esto se convierta en un libro ...
fuente
¡No puedo creer que la gente defienda C ++ como primer idioma! Pasará la mayor parte de su tiempo escribiendo calderas y tratando de sortear las limitaciones y anzuelos en el idioma que realmente aprender a programar.
Java es un lenguaje mucho más simple y no obstaculizará tu aprendizaje.
Si debe aprender C ++, aprenda los conceptos con Java y luego vaya a C ++, o mejor aún, OBJ-C si desea escribir software para Mac. Java y OBJ-C no son muy diferentes.
FYI He pasado 10 años como desarrollador comercial de C ++.
fuente
Yo recomendaría C ++. Tuve algunas clases en Java, y algunas en C ++ en la universidad, y las habilidades específicas de lenguaje que aprendí de C ++ me ayudaron más cuando aprendí idiomas adicionales más adelante. Además, aunque veo mucho más Java que vacantes de trabajo en C ++, la mayoría está buscando una pila Java completa, como:
Y lo más probable es que un plan de estudios basado en Java no lo prepare mucho mejor que uno basado en C ++ en una lista como esa.
fuente
Es difícil porque Java es indudablemente más fácil de aprender. Lo hará más pronto con Java.
C ++ es un lenguaje mucho más difícil de trabajar. Los punteros y la administración de memoria son conceptualmente y prácticamente difíciles de trabajar. C ++ no le ofrece redes de seguridad.
A largo plazo, sería útil comprender todas las cosas que te enseña C ++. Además, la transición de C ++ a Java es mucho más fácil que en la otra dirección.
Pero me pregunto si al comenzar y durante muchos proyectos de grado, la sobrecarga y la depuración adicionales que tiene que hacer para que algo funcione en C ++ realmente haría que sus proyectos sean más difíciles, sus plazos más difíciles de cumplir y su vida mucho más frustrante . Para lograr lo mismo en C ++ y Java, diría que en casi todos los casos harías el trabajo más rápido en Java y tendrías menos problemas molestos. Eso podría ser realmente un gran problema cuando estás al final de un semestre y tienes cinco cursos que necesitan su proyecto de fin de curso el mismo día.
El otro lado de eso es que si esas pruebas no te hacen tirar la toalla por completo, te convertirán en un mejor programador si dominas C ++. Y si su carrera es con C # o Java o Python y nunca tiene que tocar otro puntero en su vida, lo apreciará mucho más ...
fuente
C ++ es el más flexible y ofrece una comprensión más profunda. Indudablemente, obtendrá más de C ++ que de Java. C ++ también es más difícil, porque es más complejo.
Dicho esto, los trabajos de C ++ no son tan comunes como los trabajos de Java.
Java y su descendiente, C #, son las soluciones estándar para el espacio de codificación de hierro grande empresarial / corporativo. Recomiendo aprender uno de los dos en su segundo año y sentirse muy cómodo con eso para cuando termine su título. Le permitirá obtener trabajos mucho más fácil. Eso no significa que piense que esos trabajos tienen un interés intelectual significativo en promedio. Recientemente realicé trabajos de software de craigslist en las Montañas Rocosas y la mayoría de los trabajos eran C # / Java y estaban relacionados con lo que se denomina software " CRUD "; OMI eso es muy aburrido.
fuente
Habiendo enseñado tanto C ++ como Java a nivel universitario, recomendaría encarecidamente Java .
Java ayuda en el proceso de aprendizaje y fomenta un buen comportamiento de programación. Las bibliotecas integradas para Java son útiles y están fácilmente disponibles en cada instalación. Poder crear una aplicación GUI en una oración, usando las bibliotecas integradas disponibles en cada instalación de Java y que coincidan con todos los tutoriales que los estudiantes encuentran en una búsqueda en Google, es crucial para ayudar a los estudiantes a ir más allá del lenguaje y comenzar a comprender los conceptos de programación. .
Los IDEs para Java brindan soporte para estudiantes principiantes y continuos. Traer herramientas poderosas de refactorización a la conversación temprano (mientras se discute sobre POO, por ejemplo) ayudará a los estudiantes a aprender a escribir código que se pueda mantener.
Si bien C ++ es un lenguaje útil para conocer, los conceptos adicionales aprendidos en C ++ realmente no valen el esfuerzo adicional del lenguaje en su conjunto. Hay un gran conjunto adicional de "trucos" que deben enseñarse y que pueden introducirse más adelante (problemas de administración de memoria y desbordamientos de búfer para nombrar un par). Exigir que los estudiantes comprendan esto antes de pasar a conceptos como la complejidad algorítmica y la herencia lo ralentiza, la forma en que requeriría que un conductor entendiera la presión de los neumáticos antes de conducir reduciría la velocidad del conductor. Claro, necesitas saberlo. Pero solo necesita saberlo como algo que se equivocará algún día, no como un componente básico de un concepto más amplio.
fuente
Creo que la pregunta más importante que debes hacerte es si quieres ser un buen programador o enfocarte en informática. Si CS es su objetivo y quiere estar en una ruta PHD, entonces quizás Java sea el camino a seguir. Java proporciona las clases de colecciones de Java, que tienen muchas estructuras de datos y algoritmos prefabricados. La ventaja de esto es doble: en primer lugar, puedes jugar con las estructuras de datos y los algoritmos para ver qué hacen antes de preocuparte por cómo se construyeron. En segundo lugar, esto brinda a los profesores más oportunidades para enseñar los principios de CS que usan estructuras de datos sin tener que preocuparse por lo esencial. Más tarde pueden regresar y hacer que sus estudiantes creen las estructuras desde cero.
C ++ por otro lado es un lenguaje de nivel inferior. Te obliga a considerar los punteros y la recolección de basura. La curva de aprendizaje es un poco más pronunciada, pero al final, cuando te encuentres en la programación del camino con marcos externos, sentirás menos que solo estás confiando en la magia oculta. Además, muchas compañías más grandes todavía usan C ++. Es más difícil pasar de Java a C ++ que de C ++ a Java.
fuente