Empecé a programar cuando estaba en la secundaria. Me enseñaron Pascal y HTML, entre otras cosas. Pero también estaba tomando algunas clases de programación de verano en un instituto de TI. Es allí donde aprendí Visual Basic y el diseño de software y bases de datos (en ese momento, utilizamos MERISE (Méthode d'Etude et de Réalisation Informatique pour les Systèmes d'Entreprise)). Eventualmente instalé Visual Basic en la computadora de mi casa y podía practicar solo, con libros.
Pero, solo después de graduarme de la escuela secundaria, comencé a aprender y aplicar C# casi a tiempo completo durante los estudios superiores, y eso es lo que consideré mi verdadero comienzo en la programación y la ingeniería de software.
He aprendido algunas lecciones durante la última década y pensé que me tomaría un momento para reunir mis pensamientos sobre estos temas. Me llevó unos diez años y mucha experimentación descubrir algunas de estas cosas.

 

1. Aprender un lenguaje de programación es la parte más fácil: ten cuidado con las plataformas
Toma C# por ejemplo. Aprender el lenguaje C# no es difícil. Si ya tienes una buena comprensión de los fundamentos del lenguaje informático, y si tienes alguna experiencia en otros lenguajes orientados a objetos, puedes convertirse en un programador competente de C# en unos pocos días, al menos en lo que respecta al lenguaje en sí. Sin embargo, el precio real a pagar por aprender no está en el lenguaje, está en la plataforma. Para desarrollar con C# en .NET, necesitas saber:
- .NET Framework
- una o más tecnologías .NET como ASP.NET o WPF
- y el entorno de desarrollo de Visual Studio.
El tiempo requerido para dominar el desarrollo de .NET generalmente se mide en meses, incluso para un desarrollador experimentado. Aprender una plataforma siempre es más costoso que aprender un lenguaje específico, por lo tanto, elegir la plataforma es la decisión más crucial.
El aprendizaje siempre tiene un costo y este es uno de los factores clave a tener en cuenta al elegir la tecnología que deseas aprender. El costo real del aprendizaje es el tiempo, el aprendizaje siempre lleva tiempo. Como no tienes tiempo para aprender todo, es importante pensar estratégicamente sobre lo que quieres aprender. Y dado que los lenguajes son fáciles, debes tener cuidado con las plataformas: las tecnologías asociadas con el lenguaje, las herramientas de desarrollo e implementación, los sistemas operativos y otras infraestructuras.

 

2. Repito, aprender un lenguaje de programación es la parte más fácil: conocer los conceptos fundamentales de la ingeniería de software
La sintaxis en sí misma, las palabras que usas cuando aplica el lenguaje son relativamente simples y puedes aprenderlas fácilmente a medida que avanzas. Sin embargo, eso está lejos de ser suficiente para producir código de calidad, que a menudo involucra principios de OOP, TDD, BDD y SOLID, pruebas unitarias, patrones de diseño y otros conceptos técnicos que están más allá del alcance de este artículo. Como sea...

 

3. En realidad, escribir código es solo una parte (pequeña) del trabajo
A menudo se espera que un ingeniero de software participe en investigaciones tecnológicas, configuraciones de herramientas y proyectos, tareas de administración y DevOps, procedimientos de depuración y prueba, documentación y deuda técnica (reparación y refactorización de código existente). Además, él debe pensar en soluciones y diseñar sistemas: a veces, el trabajo más importante se realiza mientras estamos lejos del teclado.

 

4. Recetas probadas y efectivas: las viejas técnicas aburridas son a veces las mejores
No es realmente "viejo contra nuevo", o incluso "genial vs aburrido", sino más bien la técnica con la que tienes más experiencia. como dice el dicho, no confío en el desarrollador que practicó 1000 tecnologías una vez, pero confío en el desarrollador que practicó la tecnología relevante 1000 veces. Si el objetivo es construir algo de la manera más eficiente y rápida posible, sería más productivo utilizar las tecnologías que dominas mejor.
Por ejemplo, uno de mis contactos gana $ 25,000 al mes con un SaaS que construyó con una combinación aburrida: ASP.NET + SQL Server + Angular 1, porque eso es lo que sabía. Él lo aloja en Windows, porque sabe cómo hacer que Windows sea rápido y seguro. Él tuvo éxito porque dedica todo su tiempo a desarrollar las funcionalidades que exigen sus clientes, en lugar de aprender las tecnologías más sofisticadas.
Es importante darse cuenta de que la cinta de correr tecnológica nunca se detiene, siempre hay cosas nuevas que aprender. Se podría haber lanzado otro marco de JavaScript mientras estás leyendo esto. Las tecnologías avanzadas más populares hoy en día ni siquiera existían cuando comencé (EF Code First, Xamarin, ASP.NET Core, Razor), lo que nos lleva a los siguientes 2 puntos.

 

5. Centrarse en tecnologías sostenibles
La única constante en el mundo es el cambio. La gestión de acciones y tiempo es una habilidad importante para los desarrolladores, particularmente porque estamos en una cinta transportadora tecnológica que sigue avanzando o incluso acelerando.
Por ejemplo, las tecnologías web que eran populares alrededor del año 2000 (Applets Flash, ASP Classic y Java Applets) se están volviendo casi obsoletas y cada vez menos comercializables. Hoy hablamos de ASP.NET Core, SignalR, Angular2, React y VueJS. Ninguna de sus tecnologías existía en el año 2000, y es probable que estas nuevas tecnologías sean obsoletas dentro de 10 años.
¿Qué no ha cambiado realmente? Los fundamentos de lenguajes como C++ / C#, sus implementaciones de algoritmos y sus principios siguen siendo relevantes después de varias décadas. Si dominas los principios básicos de un sistema estable, podrías adaptarse mejor al cambio, podrías apreciarlo y utilizarlo para evolucionar.

 

6. Equilibrio entre exploración y explotación
La exploración consiste en aprender cosas nuevas, estudiar nuevas técnicas, leer libros, ver videos tutoriales, practicar y mejorar las habilidades. La explotación, por el contrario, se trata de aprovechar lo que ya sabemos para resolver problemas reales. Se trata de pensar creativamente sobre formas de usar el conocimiento que ya tenemos para crear valor para los demás.
Entonces sí, ambas tareas son necesarias e importantes. El riesgo es estar demasiado enfocado en cualquiera de estas actividades.
Con emasiada exploración, nunca alcanzarás un nivel útil de experiencia en la tecnología elegida. Hay un gran costo de oportunidad con este tipo de aprendizaje ligero, porque, aunque expande tu mente, el tiempo que lleva implica que realmente no mejoras las habilidades que ya has adquirido.
Por otro lado, demasiada explotación puede evitar que tu evoluciones en nuevas tecnologías y puede limitar tus oportunidades de empleo.

 

7. Es fácil ser excelente... Es difícil ser consistente.
Es fácil ser genial por 2 minutos. Es difícil mantenerse excelente constantemente, todos los días.
Cuando tienes una buena idea para un nuevo proyecto, sientes un gran deseo de comenzar a investigar, diseñar y programar. Sientes prisa por convertir tu idea en algo real y te vuelves súper productivo. Pero el problema es que esta motivación se desvanece con el tiempo.
Sí, es divertido y es fácil tener nuevas ideas y comenzar a trabajar en ellas. Pero luego están los esfuerzos a realizar, los ajustes, el lanzamiento, el mantenimiento, las correcciones, las mejoras, etc. Durante varios meses Aquí es donde se pone difícil. Es difícil mantenerse enfocado en la misma idea, en el mismo proyecto durante meses y años. Se necesita mucha disciplina.
Es fácil ser excelente. Es difícil ser consistente.

 

8. Diversifica tus habilidades
No seas solo un programador, conviértete en un experto que programa, un experto en otro campo relevante que te apasionas. Puedes ser un emprendedor, un gerente de proyecto, un científico de Big Data, un investigador, un especialista en seguridad, etc. Si eres un experto que programa, además de poder programar (quizás a tiempo completo), también tienes un credibilidad adicional que está relacionada con algo diferente a la ingeniería de software.
De ahí la importancia de seguir la educación superior. Si vas a la universidad y ya sabes cómo programar, probablemente no aprenderás mucho sobre programación. Eso no significa que no debas ir a este tipo de escuelas. Necesitarás una cierta cultura, y las universidades son excelentes lugares para obtenerla. Adquieres cultura estudiando y entendiendo el mundo que los humanos han creado, desde diferentes ángulos. Sería difícil adquirir este tipo de conocimiento si no haces nada más que estudiar programación.

 

9. Elige tus nichos para destacar
Cuanto más pequeño sea el nicho que elijas, mayores serán tus posibilidades de ser visto como un profesional destacado en tu campo. Por ejemplo, es muy difícil para los desarrolladores destacarse con un título como "Desarrollador PHP". Son competentes, versátiles, útiles, pero no notables. Se sienten fácilmente reemplazables porque hay tantas personas con un conjunto de habilidades comparables. Esta área es demasiado amplia para que puedas destacar fácilmente entre la multitud. Si, por otro lado, te haces conocido por un nicho, como Xamarin.Forms o Visualizaciones de JavaScript, es mucho más probable que seas valioso para aquellos que buscan específicamente ese conjunto de habilidades.

 

10. Era de las Habilidades
La información es el conocimiento específico que necesitas para resolver problemas. Las habilidades representan la capacidad de implementar soluciones utilizando tu conocimiento.
En un mundo donde la mayoría de los conocimientos y herramientas son casi gratuitos, ¿qué hace la diferencia? Es habilidad, por supuesto. Ya no somos una sociedad basada en el conocimiento, somos una sociedad basada en habilidades. Hubo un tiempo en que casi todos los títulos universitarios garantizaban un buen trabajo. Ahora esto ya no es el caso. A nadie le importa lo que sabes. La gente están interesados ​​en lo que puedes hacer. Te pagan por hacer cosas, no por saber cosas.

 

Aprende a programar en 10 años
Los investigadores han demostrado que lleva unos diez años (o 10 000 horas) desarrollar competencia en un campo.
La solución es la práctica reflexiva: no es suficiente repetir las mismas cosas una y otra vez, pero debes desafiarte a ti mismo con una tarea que exceda tu habilidad actual, probarla, analizar tu desempeño y corregir todos los errores. Entonces repite. Y repite de nuevo. Parece que no hay atajos reales. Aprender a través de la lectura es bueno. Pero ensuciarse las manos en la práctica es mejor. El mejor tipo de aprendizaje es aprender haciendo.
Personalmente, los pequeños proyectos y prototipos realmente me ayudaron a mejorar. Pero todavía hay cosas interesantes que dominar, por lo tanto, sigamos aprendiendo.