Todo lo que escribo aquí es mi opinión y sólo mi opinión, en muchos aspectos estaré equivocado, lo asumo, en otros no tanto, digo yo.
En este tipo de entradas (y asumiendo que no hay peor consejo que el que no te piden), parece difícil expresarse sin caer en la demagogía.
Yo personalmente me considero a mí mismo un newbie, y mucho de lo que creo hay que hacer, o directamente no lo hago o lo repito como un mantra para obligarme a mí mismo a no desviarme del camino.
Dicho esto, y para favorecer la diversidad, voy a escribir mi bio como un relato corto.
Lo cierto es que empecé tarde y empecé por descarte.
Nunca fui un buen estudiante, de hecho tenía una preocupante tendencia a malgastar mi tiempo y esfuerzo en tareas sin recompensa, pero un buen día y mientras discurría con aparente monotonía mi jornada laboral, conocí a una persona en el supermercado que, a la postre, me cambió la vida.
Esta persona era (y sigue siéndolo, no tengo ninguna duda), mucho más inteligente, sensible y altruista que yo. Me sugirió que quizás podía estudiar programación en una academia cercana para, al menos, probar si me gustaba y dejar así de reponer estantes vacíos que, aunque era una tarea muy digna, no nos engañemos, también lo era muy tediosa.
Como no pareció que pillase la indirecta, el tío (mi primer mentor reconocido, de eso va esta iniciativa ¿no?) me regaló el libro Sistemas Operativos de William Stallings y ¡cuidado!, hace 20 años no existía Amazon, comprar un libro así entiendo era un desembolso importante para un estudiante de ingeniería aeronáutica que trabajaba también en el supermercado para pagar sus estudios.
El caso es que probé y el resto ya es historia, me envenené y no pienso parar.
Lo único que lamento (y prometo que lo hago cada vez que recuerdo la historia) es haber perdido el contacto con esa persona, de hecho ni recuerdo su nombre, es imperdonable, soy un desagradecido. Ojalá valga esta pequeña bio para hacerle justicia y darle las gracias. Si por algún motivo lees esto querido_primer_mentor_input, que sepas te estaré eternamente agradecido.
Más recientemente, me convertí en panicoenlaxbox y tengo un blog en el que escribo de vez en cuando.
Si he escrito una bio tan personal (y exagerada quizás) es porque me gustaría recalcar lo siguiente:
- Que un programador se hace, no nace, en esto estoy completamente de acuerdo con Javier Ros, que además lo dijo antes que yo. En mi opinión, para dedicarte al desarrollo de software tiene que tener vocación, si no tarde o temprano desfallecerás y te convertirás en un recurso.
- Puedes ser un excelente programador sin tener una formación reglada (no lo digo por mí, yo ni tengo grado ni soy excelente). Lógicamente, si tienes una ingeniería, grado o ciclo de formación, será mejor, eso es de perogrullo, pero personalmente conozco casos en los que aún no salgo de mi asombro cuando me cuentan que acabaron E.G.B y listo. Se resume bien en la frase show me your code.
- Si puedes tener un mentor, no lo dudes, tenlo. Es más, ten más de uno. Quizás sea un acuerdo tácito y no os llaméis el uno al otro maestro y discípulo, pero no te cortes, búscalo directa o indirectamente porque quien quiere aprender, terminará siempre encontrando alguien que quiera enseñar.
- Por supuesto prepárate para no dejar de estudiar nunca. Tendrás rachas de me apetece entre nada y 0 pero asume que nunca podrás dejar de estudiar y experimentar.
- Relaciónate, no seas un rancio, el networking es super-importante, conocerás un montón de gente y aprenderás de todos ellos, te sentirás pequeño y te molestará no tener opinión sobre todos los temas del universo, pero pasado un tiempo lo recordarás como algo bueno porque esa sensación de frustración te hizo mejorar.
- Asume que, por mucho que tú lo creas, no sabes tanto como piensas. Es un tópico peor no por ello deja de ser cierto, cuanto más sabes más ignoras. Si por el contrario es cierto y sabes un montón de algo (no es mi caso), esfuérzate en compartirlo, enseñar es aprender dos veces. Si además lo explicas en un tono humilde y conciliador, tu reputación te precederá y allí donde vayas te haré una reverencia al verte.
- Invierte en formación, no seas rata (a no ser que no puedas permitírtelo, ahí me callo). Hay un montón de recursos gratis para aprender, pero también los hay de pago (Pluralsight, CampusMVP, desarrolloweb.com, lemoncode, etc.). Si hablamos de libros, pues Manning, O'Really, el ya mencionado CampusMVP, incluso gratuitos como Syncfusion. La verdad es que la lista de recursos es interminable y daría para otro fichero .md.
- No seas indolente, en mi opinión es lo peor que te puede pasar. Esto es super-personal, pero no puedo con la gente que va a pasar el rato a la oficina.
Cada vez me da más reparo decir que soy Full-stack porque lo cierto es que en el servidor soy más feliz y me siento más productivo. Además, con el grado de especialización que hay ahora mismo, ser backend y frontend es una tarea más que ambiciosa y decirlo así, abiertamente, lo mismo te hunden el pecho, pero bueno...
En cuanto al stack tecnológico: C#, ASP.NET MVC, Web API, Entity Framework y Javascript, nada nuevo bajo el sol.
Y hablando de Javascript tengo que decir que me gusta Javascript, ¡arrea!, cierto es que lo sufrí en silencio durante mucho tiempo, pero un día leí Javascript: The Good Parts y mi percepción cambió.
Como se me hace muy complicado intentar separar en básico, medio y avanzado los conocimientos que yo considero necesarios, directamente no voy ni a intentarlo. Ya lo decía Homer Simpson Lo intentaste con todas tus fuerzas y fracasaste. La lección es: nunca lo intentes
Ya en serio, te daré una visión sesgada por el trabajo que actualmente desempeño, aunque también parece un perfil muy habitual.
- Bases de datos relacionales No hay aplicación que no quiera persistir datos de una forma u (bueno, quizás alguna haya que no, pero en un entorno empresarial casi seguro que lo harán). Normalmente será una base de datos relacional y aquí, cierto es que puedes sobrevivir con INSERT, SELECT, UPDATE y DELETE pero, créeme, hay un montón de DDL y DML esperando a ser descubierto.
- ORM Ya sea Entity Framework, NHibernate o algún otro, pero tienes que conocer alguno. No por el mero hecho de hacerlo, sino porque aprenderás cosas como qué es un Bounded Context, un agregado, una entidad, un value object... que sí, que todo esto viene de DDD, nada tiene que ver con el ORM, pero a veces empezar la casa por el tejado tiene sus ventajas.
- Programación orientada a objetos Indispensable tener una buena base de POO. Encapsulación, polimorfismo, herencia, composición y un largo etcétera. Todo tiene un porqué, un motivo legítimo. Si en vez de aprender de forma mecánica te esfuerzas por entender la motivación detrás de cada uno de esos conceptos, serán tuyos para siempre y nadie podrá quitártelos.
- Patrones de diseño Te ayudarán a hablar con tus colegas de profesión unificando el lenguaje. No te los estudies de memoria, pero deberías saber reconocer un pattern opportunity cuando lo veas. Aplicarlo o no es otra historia, pero al menos conocer que existen es algo positivo.
- Fundamentos de la web Si trabajas en web tienes que conocer el medio, huye de abstracciones estilo Web Forms o similar. Cuando haya problemas (y seguro los habrá), agradecerás conocer hasta el más mínimo detalle de como funciona una request y un response, quizás puedes vivir sin profundizar en ello, pero tarde o temprano tendrás una situación de la que no te sacará el framework de turno, tendrás que investigar, usar un sniffer, las developer tools del navegador, configurar un servidor web... y tú ahí, con tu abstracción gorda que pensabas era una bala de plata.
- Arquitectura Quizás no sea tu responsabilidad decidir sobre esto, pero no estaría de más que te interesases por ello. N-layered, DDD, CQRS, al menos tener una visión general, que proponen y que escenarios cubre cada arquitectura.
- Control de código fuente Git, nada más que decir. Ah, bueno sí, SourceTree mola y eso, pero saber que por debajo hay comandos y parámetros, sería un detalle, para que negarlo.
- Testing Hazme caso, ponte ya con esto. Yo durante mucho tiempo me hice el loco y ahora estoy pagando el precio, me está costando cambiar y es una rémora brutal. Si te esfuerzas por hacer testing estás declarando de forma implícita un montón de cosas, cuidado por el diseño, POO, calidad de tu código. No Testing, No Glory.
- Javascript Es la máquina virtual universal, está en todos los lados, desde el navegador hasta el servidor, todos compilan/transpilan a Javascript, todos quiere llevarse bien con él. No vayas contra corriente, apréndelo y úsalo. Quizás no seas un frontend pero, da igual, ya sea como lenguaje de desarrollo o como tooling, acabarás usándolo.
- Inglés Hablarlo molaría, daría mi dedo meñique, pero leerlo es obligado, toda la documentación, foros, etc. principalmente están en inglés.
- Twitter Una fuente de información invaluable y que permite estar en contacto con gente con tus mismos intereses.
- Grupos de usuarios Aquí meto en el mismo sacos, meetup, eventos de la comunidad (sean o no patrocinados), katayunos, merendojos, etc.