Soy un joven programador que desea trabajar en el campo algún día como programador. Sé Java, VB.NET y C #. Quiero aprender un nuevo idioma (como programador, sé que es valioso extender lo que sé: aprender idiomas que te hagan pensar de manera diferente). Eché un vistazo en línea para ver qué idiomas eran comunes. Todo el mundo sabe C y C ++ (incluso aquellos muggles que saben muy poco sobre computadoras en general), así que pensé que tal vez debería presionar por C.
C y C ++ son agradables pero son viejos. Cosas como Haskell y Forth (etc., etc., etc.) son viejas y han perdido su popularidad. Tengo miedo de aprender C (o incluso C ++) por esta misma razón. Java también es bastante viejo y lento porque lo ejecuta JVM y no está compilado en código nativo.
He sido desarrollador de Windows durante bastante tiempo. Recientemente comencé a usar Java, pero solo porque era más versátil y difundible a otros lugares. El problema es que no parece un lenguaje muy útil por estos motivos:
- Su propósito más utilizado es para aplicaciones web y aplicaciones para teléfonos celulares (específicamente Android)
- En cuanto a los productos reales hechos con él, las únicas cosas que vienen a la mente son Netbeans, Eclipse (hurra por hacer e IDE con el idioma para el que es IDE; es como hacer una página web para escribir HTML / CSS / Javascript) y Minecraft que resulta divertido pero lento y bipolar en cuanto a especificaciones de computadora. apoyo.
- Aparte de eso, se usa para servidores, pero diablos: no solo quiero hacer / configurar servidores .
Sin embargo, los lenguajes .NET son agradables:
- La gente se ríe si incluso menciono VB.NET o C # en una conversación seria.
- No es multiplataforma a menos que use MONO (que todavía está en desarrollo y tiene algunas mejoras por hacer).
- Carece de cosas de bajo nivel porque, al igual que Java con JVM, CLR lo ejecuta / administra.
Mi primer pensamiento fue aprender algo como C y luego usarlo para saltar a C ++ (solo para asegurarme de que tendría una comprensión / base sólida), pero como dije antes, cada vez es más viejo.
Lo que he mirado
Fantom se ve bien. Es como un buen intermediario entre mis dos idiomas favoritos e incluso me permite publicar entre los dos de manera intercambiable, pero, a diferencia de lo que quiero, se compila en CLR o JVM (según lo que publique) en lugar de ser una compilación completa .
D también se ve bien. Parece un lenguaje muy útil y demultIPLEfuentes que parece ser realmente mejor que C / C ++. Me gustaría saltar con él, pero todavía no estoy seguro de su éxito porque obviamente no es muy convencional en este momento.
Hay un par de otros que se veían bastante bien y se centraron en otras cosas como Opa con desarrollo web y Go by GOOGLE.
Mi pregunta
¿Vale la pena aprender estos idiomas "experimentales"? He leído otras preguntas que dicen que si no estás aprendiendo idiomas constantemente y estás abierto a todos los idiomas, no estás en la mentalidad correcta para programar. Entiendo esto y todavía no lo estoy entendiendo, pero en verdad, si un idioma no se va a convertir en la corriente principal, ¿debería pasar mi tiempo aprendiendo algo más? No quiero aprender lenguajes de programación antiguos (o cualquiera que pronto lo sea). Sé que muchas personas ven esto como algo importante, * pero ¿alguno de ustedes consideraría (suponiendo que no lo supiera) FORTRAN? Mi objetivo es mantenerme actualizado para asegurarme de tener éxito en el futuro.
Renuncia
Sí, soy un joven programador, así que probablemente hice muchas declaraciones ingenuas en mi pregunta. ¡No dudes en corregirme en CUALQUIER COSA! Tengo que comenzar a aprender en algún lugar, así que estoy seguro de que gran parte de mi conocimiento es lo suficientemente incompleto como para haber causado declaraciones incorrectas o fallas en mi pensamiento. Por favor, deje cualquier sentimiento que tenga en los comentarios.
Los resultados...
Estoy realmente sorprendido por las sorprendentes respuestas, la mayoría de ellas señalando muy bien mis malentendidos y juicios erróneos. ¡Aprendí mucho de esto y espero poder utilizar todo lo que he aprendido! Probablemente comenzaré a aprender Haskell a continuación (el idioma no tan antiguo, aunque tenga más de 20 años, jajaja ) y luego comenzaré a buscar otras opciones a mi alrededor.
Gracias
fuente
Respuestas:
La cuestión de aprender idiomas drásticamente diferentes no se trata de aprender los idiomas, se trata de exponerse a diferentes enfoques de los problemas. Herramientas para la caja de herramientas por así decirlo.
Una cosa a tener en cuenta es que Haskell no es particularmente viejo y en realidad es un muy buen candidato para alguien que solo esté familiarizado con los idiomas principales. Incluso un lenguaje muy antiguo como Lisp es muy útil para aprender debido a su influencia en las cosas.
Además, Java y .Net no se interpretan y espero que esté haciendo algunas suposiciones incorrectas basadas en ese etiquetado incorrecto.
fuente
Mantente en forma: practica regularmente
La práctica hace la perfección.
Cuanto más código escriba y lea , más se acercará a la iluminación / dominio como programador / desarrollador / ingeniero de software / guru / ninja / artesano / hacker / palabra de moda elegida. Al no solo codificar y leer más, sino también al probar nuestras nuevas formas de escribir código, los más abiertos de mente (con suerte) permanecen.
Lectura recomendada:
Aprender sobre nuevos paradigmas y características del lenguaje
Tal vez no pueda traducir lo que usa en el nuevo Super-Language-X a su Enterprise-Language-Y, pero tal vez pueda reconocer cuándo podría haber sido una buena opción. Tal vez pueda saber cuándo integrar una tecnología diferente o una pila en su proyecto para adaptarse a un propósito particular. O tal vez sepa cómo usar las características del lenguaje Y para emular la característica genial del lenguaje X y refactorizar su código para beneficiarse de él (y potencialmente iluminar a otros compañeros de trabajo en el camino).
Por ejemplo, podría haber descubierto principios interesantes de FP y desea adaptarlos a Java, que posiblemente no sea FP por diseño .
Lectura recomendada:
Sé un Jack de todos los oficios ... ¿Maestro de algunos?
No sabes qué idioma se convertirá en el tren principal cuando esté en esa etapa "experimental", por lo que no debes preocuparte demasiado por apostar por uno de ellos. Lo más probable es que otras personas hagan la misma apuesta y estarán intrigados cuando los vean aparecer en su currículum. Agregue una herramienta a su cinturón. En nuestro caso, no hay mucho problema con cuánto pesa al final.
Claro, no puedes convertirte en un maestro de todos los oficios. Pero podrías ser un maestro de uno y bastante bueno en el resto. Estás aprendiendo un oficio, y el nuestro es multifacético. Hacer ejercicios con regularidad, asistir a talleres, tomar un libro, escribir un nuevo proyecto para mascotas y otras cosas similares son nuestra forma de mantenernos al día con el ritmo cada vez mayor del cambio en nuestro campo.
Lectura recomendada:
Manténgase adaptable
Si no aprende a adaptarse, es difícil hacerlo cuando lo necesita. Al aprender constantemente cosas nuevas, cada vez se mejora cada vez más al recoger cosas nuevas (siempre y cuando no se limite a desafíos muy similares).
Es como dice la canción "Stay Young" Oasis: Stay young and invencible .
Si puedes adaptarte, puedes sobrevivir.
Lectura recomendada:
Mantente visible: comprende el radar de la agencia de reclutamiento
Utilizan palabras clave y tecnologías como casillas de verificación. Los usamos como recipientes para reclutadores sin sentido.
Funciona en ambos sentidos. Mientras realmente conozca sus cosas, entonces tener muchas cosas en su currículum es bueno. Muestra su adaptabilidad y amplitud de conocimiento. Además, si realmente domina algunos de estos y es decente en algunos otros, le permite modular diferentes versiones de su currículum para diferentes puestos y trabajos.
Otros temas útiles de SE
fuente
Para extender la respuesta de Telastyn, de hecho se trata de la exposición a diferentes paradigmas de programación . Por ejemplo, no se trata realmente de aprender programación lógica, sino de:
http://skilldrick.co.uk/2011/02/why-you-should-learn-brainfuck-or-learn-you-a-brainfuck-for-great-good/
http://norvig.com/21-days.html (Peter Norvig)
fuente
Bueno, este es un montón gigante de falacia. Las personas que conocen C tienen más dificultades para aprender C ++, porque casi todo lo que creen saber sobre cómo usar el lenguaje es un montón de errores. Prácticamente no hay una C idiomática que sea remotamente buena C ++. Es mejor simplemente aprender C ++ desde cero. Las personas como yo, que ofrecen su tiempo como voluntario para ayudar a otras personas a aprender C ++, gastan una proporción masiva tratando de enseñar a las personas a abandonar sus hábitos de C.
En cuanto a la popularidad, bueno, C ++ está experimentando un pequeño resurgimiento recientemente. La gente notó que, en realidad, el rendimiento es muy importante, y no puede salirse con la suya al ejecutar todos los componentes como uno administrado, y Modern C ++ (especialmente con C ++ 11) no se parece en nada a la basura C que creían que era , y realmente no es tan malo en absoluto. Realmente no está envejeciendo. Se está volviendo más nuevo. El nuevo estándar es una gran actualización, y no hay lenguajes de reemplazo adecuados, ya sean actuales o en proceso, para muchas de las áreas en las que se usa C ++ ahora. Esto no es menos importante porque no hay lenguajes con una interoperabilidad decente de C ++ (incluso C ++ en sí), lo que dificulta la migración desde las bases de código de C ++ existentes.
Consigue gente nueva. AFAIK, VB.NET realmente no existe por ninguna razón, excepto para ayudar a migrar lejos de VB6 y no es realmente un objetivo digno en sí mismo, pero C # es un lenguaje real. Es un poco como Java, excepto que luego agregaron características de lenguaje reales y algunas bibliotecas agradables. C # es un lenguaje muy popular y bien soportado con muy buenas herramientas en VS, que no es tan malo, y es una cosa sólida, si no excepcional, para aprender.
MONO es bastante estable. Además, en última instancia, el 90% de los consumidores de escritorio (¿o era el 80%?) Ejecutan Windows en este momento. Si va a desarrollar una aplicación de escritorio, es una pregunta abierta si los usuarios que no son usuarios de Windows valen la pena, incluso si utiliza un lenguaje multiplataforma.
En última instancia, podría obtener mucho de aprender un lenguaje como C ++ o Haskell, que se centra en una tecnología de compilación sólida en lugar de un tiempo de ejecución masivo.
Simplemente no elijas PHP. Lo único que puede aprender de eso es cómo no construir un lenguaje.
fuente
Un par de comentarios sobre lo que has dicho ...
1) Todo programador debe aprender C, incluso si es viejo. Es un gran lenguaje para acercarse a la máquina. Del consejo de Joel a los estudiantes de CS ...
2) Los idiomas pueden ser buenos para aprender mentalidades, incluso si no se usan comúnmente. Aprenda el esquema (o LISP) para comprender la programación funcional, incluso si no está de moda. De otra publicación en este foro .
Ahora, a pesar de atacar su premisa original, creo que debería ser elogiado por su curiosidad. Demasiadas personas se vuelven obsoletas debido a la falta de curiosidad. Aprovechar su desarrollo personal es una gran señal de que se desarrollará bien. Las personas que aprenden más son las que están dispuestas a seguir preguntando cómo funcionan las cosas.
fuente
CUALQUIER idioma que aprenda va a cambiar en los próximos 5 años. No se trata de aprender un idioma que crees que podría ser por un tiempo, sino de aprender CÓMO aprender. ¡La mayor exposición al aprendizaje del idioma y el proceso de aprendizaje de ese idioma lo ayudarán enormemente a largo plazo!
La última compañía para la que trabajé usaba su propio lenguaje interno. Era similar al visual básico pero no igual. Solo por el hecho de que sabía otros idiomas, pude aprender su idioma mucho más rápido que los otros empleados.
Aprendí japonés después de aprender C ++, BASIC, Pascal, y puedo decir que aprender un idioma de computadora y un idioma extranjero requieren las mismas habilidades. Esas habilidades se pueden perder o agudizar. Si tiene el disco, ¡continúe y aprenda nuevos idiomas!
(ps. en cuanto a aprender FORTRAN o ensamblar, creo que es valioso al menos tomar un semestre de los idiomas más antiguos. Te hace pensar en cosas que simplemente das por sentado en los idiomas más nuevos, cosas como banderas, asignación de memoria y demás .)
fuente
Será mejor que aprenda tantos idiomas "antiguos" como sea posible, si alguna vez quiere ser programador. Comience con Lisp, obtenga una buena comprensión de Forth, preste mucha atención a la evolución de todos los idiomas de Wirth, la evolución de Fortran, el ascenso y la caída de Prolog, adéntrese en el ecosistema secreto de Ada, obtenga su arma secreta al aprender Occam. Perseguir la "corriente principal" es la cosa más estúpida que un aspirante a programador podría hacer.
fuente
Estoy de acuerdo contigo en la parte de exposición de las cosas. Aunque conozco Java, C, C ++, Javascript, Python, Ruby y un poco de .NET (principalmente porque odio cualquier cosa M $ <- opinión personal), debo decir que realmente amo programar en D.
D tiene un conjunto de características realmente agradable (la mayoría de ellas se implementan en C ++ / Java (lenguajes que tienen abstracciones de clase), etc.), pero lo que más me encanta son los genéricos y los delegados (facilita la implementación de devoluciones de llamada). Aparte de eso, obtienes una sintaxis mucho más simple para tratar en comparación con C ++. D tiene un recolector de basura realmente eficiente, aunque puede elegir manejar la memoria usted mismo (especialmente cuando interactúa con módulos C / C ++). Aunque D no tiene un montón de módulos aportados por los usuarios que no deberían ser una barrera para la entrada. Puede interactuar fácilmente con las bibliotecas C / C ++ existentes (que son abundantes), lo que lo hace redundante para la necesidad de módulos.
D tiene su propia biblioteca estándar (Phobos) que satisface la necesidad de todos los problemas de programación comunes. También hay una biblioteca alternativa ( Tango-D2 ) que puede usar con Phobos o solo. Si usted es un desarrollador web y necesita escribir un servidor basado en eventos, Tango tiene una buena abstracción Selector (tango.io.Selector solo para select (), poll (), epoll ()). He encontrado que funciona incluso mejor que libev.
fuente
Los idiomas se desarrollan para resolver problemas en algún tipo de dominio (al menos al principio). Si no ha enfrentado problemas que sus herramientas no pueden resolver de una manera que le resulte cómoda, martillará una tabla de madera esperando convertirse en carpintero. Intenta comprender el tipo de problemas que los idiomas intentan resolver. La única diferencia entre un lenguaje "experimental" y un lenguaje nuevo / moderno es el dinero que lo respalda, por ejemplo, Go de google y Dart. Si se desarrollaron en mi patio trasero, probablemente morirán en algún foro y eso es todo. Solo sobreviven si son buenos para explicar los problemas que intentan resolver. O al revés, como Perl y C ++, que son buenos para absorber formas de resolver problemas para seguir con vida. Y podría sugerirle aprender Lua, es ' Es un lenguaje hecho para incrustar dentro de programas, es muy rápido y liviano, lo que le dará herramientas para resolver los problemas grandes o pequeños que algunos lenguajes como Java no pueden resolver de una manera directa. Tomando el ejemplo del japonés, si solo aprendes la sintaxis, la gramática y los alfabetos, ignorando la cultura, nunca entenderás por qué es tan complicado y eventualmente te olvidarás de eso. No está resolviendo nada para ti.
fuente
Aprender varios idiomas diferentes le dará una visión más amplia de la programación. Énfasis en "diferente", por ejemplo, aprender C # y Java no le enseñará mucho más que aprender solo uno de ellos. Pero aprender C # o Java, y un lenguaje funcional (por ejemplo) lo hará.
Habiendo dicho eso, como joven programador, creo que obtendrías mucho más valor al conocer un idioma de manera realmente sólida, antes de saltar mirando diferentes tipos de lenguaje. No queda del todo claro a partir de su pregunta qué tan bien conoce Java, VB.NET y C #. ¿Confía en que si atacó un proyecto usando uno de los idiomas anteriores, su cuello de botella sería el proyecto en sí mismo, no su conocimiento del idioma? Si pasaras más tiempo preguntándote "¿Cómo hago esto en un idioma ?" de lo que pasaría pensando en el problema real, entonces es probable que necesite centrarse más en uno de sus idiomas actuales.
Y personalmente creo que deberías adoptar un enfoque pragmático para decidir cuál es. ¿Java se usa para aplicaciones de Android? Genial, si hacer aplicaciones de Android es algo que le interesa. Irrelevante si no lo es. C # no es una gran opción para el desarrollo que no sea de Windows? Malas noticias si estás interesado en desarrollar para Linux. Irrelevante si no lo eres. Y así.
¿Y los idiomas "experimentales" que mencionaste? Pragmáticamente, van a encajar mal cuando se trata de trabajar con otras personas; probablemente encontrarás miles de personas que conocen C # o Java por cada uno que conoce a Fantom. Para proyectos personales, esto no es necesariamente un problema. Si su objetivo es aumentar su empleabilidad, lo es.
fuente
Se podría decir que aprender a programar en un lenguaje como Postscript o APL es posiblemente una pérdida de tiempo principalmente porque las posibilidades de que alguna vez uses ese conocimiento se acercan a cero. Pero de la misma manera, podría argumentar que Ruby y Python son una pérdida de tiempo si nunca tiene la intención de usarlos para nada.
Pero pocas personas dirían que aprender Lisp es un desperdicio, a pesar de que es probable que tenga que escribir Lisp como Postscript; pero aprender Lisp te enseña a pensar de manera diferente acerca de tu problema (con suerte), por eso la mayoría de los programadores te dirán que vale la pena tu tiempo.
Aún así, nunca evito aprender un nuevo idioma, ya que la inversión de tiempo requerida es realmente solo una hora o cuatro. Y los usos de un idioma como Lua aparecen en los lugares más inusuales , y nunca los hubieras reconocido si no hubieras pasado algunas horas revisando los ejemplos.
Cuando vea un nuevo idioma, lea un poco sobre lo que es útil. Si es un nicho que sus idiomas favoritos no cubren demasiado bien, tómese un día para aprender los conceptos básicos. Sin duda, es mejor pasar el tiempo que ver la temporada 17 de The Bachelor o, de lo contrario, puede perder el tiempo. De esa manera, si le sirve, puede aparecer en la mente y usted sabe dónde encontrar más.
Personalmente, realmente recomiendo buscar en Go. Lo he usado para escribir programas de una sola página que funcionan mejor de lo que tomaría tres días y 13 bibliotecas de terceros en C o C ++, y ni siquiera sería posible en Python, C #, Ruby, etc. Fue diseñado por personas que realmente, realmente, realmente saben lo que hacen.
fuente
Elige unos con diferentes tipos. Agrúpelos por características y elija uno en cada grupo. Si desea hacer esto profesionalmente, elija uno que se use (por lo tanto, C ++ sobre D para lenguaje compilado estáticamente tipado con metaprogramación de plantilla).
Pobre D, es un buen lenguaje, pero carece de la aplicación asesina que tenía C ++: compatibilidad casi total con el lenguaje # 1 de la época (C para el caso de C ++). Es agradable, pero ese pequeño hecho importante probablemente relegará a D al estado secundario en los libros de historia.
fuente
C puede ser viejo, pero aún es muy poderoso e interesante, aprender C te ayudará mucho en tu futuro de "programación".
Java no es lento, quien te haya dicho que no sabe de qué está hablando, Java te aprenderá muchísimo sobre POO
¿Por qué no empiezas con Python y luego vas por C o algo más?
fuente