Quiero aprender a programar de una manera 'a prueba de futuro', si lo desea. Si bien Windows domina el mercado de SO de escritorio (por ahora), obviamente hay mucho valor en aprender sus lenguajes / marcos / API, etc., esto puede estar sujeto a cambios a medida que surgen nuevos dispositivos o Windows se dispara en el pie (más de Las vistas previas amigables de Windows 8 no parecen demasiado atractivas ...).
¿Estaría en lo cierto al pensar que tener un sólido conocimiento de C / C ++ para la lógica de back-end / programación de bajo nivel y similares, combinado con un lenguaje extremadamente portátil como Java para GUI y demás, sería una buena base para el desarrollo de software que resultará útil en la mayor cantidad de sistemas? - Estoy hablando de computadoras de escritorio, tabletas, teléfonos.
fuente
Respuestas:
Si desea estar preparado para el futuro, el mejor consejo que le puedo dar es no encerrarse en una tecnología.
Así que no aprendas API a ciegas. Aprende cómo se conciben. ¿Cuáles son las filosofías detrás de la escena? ¿Cuáles son sus ventajas y defectos? Piense en el software en general, no en una tecnología específica.
También puede trabajar en una buena concepción del programa, ir a OOP y AOP es una buena opción de la OMI. Pero no solo entienda el mecanismo, realmente trabaje en la filosofía detrás del mecanismo.
No descuides la informática en general, como las estructuras de datos y los algoritmos, porque son conocimientos de tecnología cruzada que siempre son útiles.
También ve por buenas prácticas. A menudo tiene docenas de formas de hacer algo, pero la mayoría son basura: propensas a errores, difíciles de mantener, difíciles de entender más tarde o de otro programador, etc. . . Por lo general, el código es más difícil de leer que de escribir. Entonces, aprenda a dedicar un poco más de esfuerzo a escribir para facilitar la lectura (porque leerá el código más de lo que escribe).
Aprenda técnicas efectivas para depurar (uso inteligente de registro y depurador) y probar (cómo escribir código que se pueda probar fácilmente en la unidad y cómo automatizar estas pruebas).
Entonces, necesitará un fondo de tecnología general. Me refiero a un conocimiento muy amplio, como el funcionamiento de un procesador (la falta de caché o la predicción de bifurcación son un buen comienzo), sobre sistemas UNIX, sobre protocolos de red como IP, TCP y Ethernet, etc. . .
Al final, aprende a aprender. Si sabes aprender, entonces puedes adaptarte.
Necesitará un conocimiento sólido en tecnologías específicas para poder encontrar un trabajo, pero estos están desactualizados muy rápidamente (piense en COBOL, por ejemplo, o en la programación web en el momento de la guerra de IE / Netscape). Así que no confíes en ellos para estar preparados para el futuro. Serán clave para ser contratados, pero definitivamente no lo que hace a un gran programador y lo que hará que sus habilidades sean duraderas en el tiempo.
EDITAR: si recién está comenzando, definitivamente debe hacer algo. Cualquier cosa en realidad. Un juego como Tetris o serpiente es un buen comienzo y divertido. Si no hace las cosas, pasará mucho tiempo aprendiendo y realmente no obtendrá la experiencia necesaria para comprender completamente lo que aprende.
Pongamos un ejemplo con patrones de diseño. Los patrones de diseño son geniales y definitivamente debes usarlos. Pero si se usa en exceso, harán que su código sea complicado y difícil de entender. Tendrá que enfrentar el problema que resuelve un patrón de diseño y perder algo de tiempo tratando de resolverlo o sus efectos secundarios para comprender completamente de qué se trata el patrón de diseño. Los patrones de diseño deben usarse como pequeñas refactorizaciones a lo largo del tiempo cuando el código crece. Y sabrá cuándo se necesita un patrón de diseño cuando el beneficio del mismo sea mayor que la complejidad del código inducida por su uso. Esto requiere experiencia.
Definitivamente, haz las cosas, aprende de tus errores. No puedo insistir más: ¡ HAZ LAS COSAS !
fuente
Lo que separa a los buenos programadores de los malos es su capacidad de programar en CUALQUIER lenguaje. Como han señalado otros carteles, conocer cualquier lenguaje orientado a objetos significativo le dará las herramientas para crear excelentes programas y tener demanda.
Además, si todavía estás en la escuela, asegúrate de tomar algunas clases de escritura. Los mejores ingenieros y programadores también son los que comunican bien sus ideas.
Una vez que comience a trabajar, lo mejor que puede hacer para evitar quedar obsoleto es mantenerse al día con las tendencias actuales. No tenga miedo de dejar un trabajo por otro si no están utilizando la tecnología actual o tienen un proceso terrible, etc. Lo peor que puede hacer para su carrera es tomar un trabajo que lo haga trabajar con tecnología antigua o procesos débiles.
fuente
La respuesta de @deadalnix es buena. Yo agregaría tres cosas:
fuente
Como estás al principio, yo diría que solo aprendas un idioma, no importa cuál. La dificultad no está en el lenguaje (sintaxis) en sí, sino en la comprensión de los conceptos; y estos conceptos generales de programación se aplican a todos los lenguajes de programación, por lo que aprender su segundo y tercer y cuarto (...) lenguaje será mucho más fácil.
Entonces, al principio, no pienses demasiado en ser 'a prueba de futuro'. Sin embargo, a medida que progreses, trata de dominar idiomas que son muy diferentes entre sí. Básicamente, (como dijiste) debes ser útil con un lenguaje de bajo nivel (-ish) como C / C ++, un lenguaje de programación de nivel superior como Java y también un lenguaje de secuencias de comandos (Python, Ruby, etc.). Si desea entrar en las cosas realmente avanzadas, también debe conocer Asamblea.
Pero no te estreses demasiado por esto ahora. Aprender a programar lleva años. Por el momento, solo elija un lenguaje como Java o C # o lo que sea, y apúntelo. :)
fuente
If you want to go into the really advanced stuff you must also know Assembly
- Puedes hacer esto en cualquier nivel, los desafíos son simplemente diferentes.No. Nada de eso ayudará.
Un conocimiento sólido de las estructuras de datos y algoritmos, independiente de cualquier lenguaje de programación específico, es más valioso que la "programación de bajo nivel y similares".
Un "lenguaje extremadamente portátil como Java" es tan portátil como C y no ayuda. La próxima gran cosa será tan diferente de estos lenguajes que su Java súper portátil será una responsabilidad, no un activo.
Mac OS (computadora de escritorio, tableta y teléfono) se realiza en el Objetivo C. Ese podría ser un lugar para comenzar.
Windows (escritorio, mesa y teléfono) se realiza en C #. Ese podría ser un lugar para comenzar.
fuente