Cómo convertirse en programador: orientación para futuros profesionales

Así que, ¡vamos allá!

image

Estás terminando tu primer año (y créeme, nada cambiará en un año o dos). Pero en tu cabeza prácticamente no hay ningún conocimiento. E incluso cuando termines la universidad, podrás esperar un salario de 250, como máximo 300 unidades monetarias durante el primer año. Ni siquiera puedes ser llamado "junior", porque sabes muy poco de teoría y no tienes práctica.

Conocerás la teoría de manera deficiente por cuatro razones:

  1. Es un área muy amplia y es imposible abarcar todo en el marco del curso.
  2. La mayoría de las veces se estudia material desactualizado.
  3. En las clases, probablemente estás en redes sociales, charlando con tus compañeros y solo asistiendo para marcar presencia. Solo comprendes el 30-40% de lo que sucede, y aunque el tema sea fácil y recuerdes el 80%, no lo confirmas con práctica después de las clases, sentándote en tu tiempo libre frente a la computadora. En las prácticas, por ejemplo, yo a menudo jugaba a Counter-Strike en red (mientras lograba hacer las tareas de manera mínima para aprobar).
  4. Para estudiar y absorber conocimientos, necesitas un estado de ánimo ideal, un interés ideal y un ambiente adecuado. A las 8-10 de la mañana, es poco probable que cualquier estudiante tenga esto, y como resultado, el material se asimila mal. Asistir a conferencias en la universidad y ver la misma conferencia por la noche en casa en YouTube son cosas diferentes.
image

Así que, como resultado, después de la universidad tendrás más de 20-22 años. No sabrás nada y no tendrás habilidades. En el mejor de los casos, encontrarás algún trabajo a medio tiempo en tu último año y al menos allí adquirirás algo de experiencia.

¿Pasas todo tu tiempo libre paseando, viendo series y organizando tu vida personal? Si ya estás entrando en el mundo de IT, este estilo de vida definitivamente no es para ti.

Yo ya no estudio en la universidad, he pasado por un colegio y una universidad en especialidades de IT, y tengo una comprensión y percepción completamente diferente de todo esto. Lo primero que te diré es que allí no te enseñarán nada, y ya mencioné cuatro razones importantes. Lo segundo es que, si realmente te gusta este campo, debes acostumbrarte a trabajar en ti mismo y a autoeducarte. Autoeducarte siempre y todos los días. Rara vez puedo encontrar un día en el que no vea ni aprenda algo nuevo (a veces lo hago en el trabajo en segundo plano), pero la mayoría de las veces es en mi tiempo libre.

image

También salgo a caminar todos los días, tengo una vida personal, hago deporte como correr y jugar al fútbol, así como otros intereses, pasatiempos y viajes.

image

Simplemente necesitas planificar tu tiempo. A veces es útil hacer planes semanales, pero planifica de tal manera que algo pueda cambiar. Y lo más importante: acostúmbrate a aprender... siempre y casi todos los días.

image

Los programadores, por lo general, son personas perezosas... Es mejor aprender a través de libros, pero como también soy perezoso, escucho podcasts y veo YouTube (y ahora ya he alcanzado un entendimiento bastante bueno de la programación, y me cuesta encontrar algo bueno y nuevo en YouTube, pero aún así encuentro y miro, y de vez en cuando leo libros). Así que acostúmbrate a dedicarte a la autoeducación todos los días. Puedes elegir podcasts sobre programación que te interesen y escuchar los nuevos episodios; de esta manera, estarás al tanto de las últimas novedades y tecnologías en el mundo de IT en general.

image

No esperes que después de defender tu tesis algo cambie... Te volverás más inteligente y de inmediato recibirás una llamada de alguna empresa ofreciéndote un trabajo, al menos por 400 dólares. Simplemente imagina que ayer obtuviste tu diploma y que necesitas seguir adelante.

image

Ahora, en el primer (o segundo, no importa) año, es muy importante entender qué quieres hacer en este campo. Dado que en IT elegiste específicamente la programación, y no SEO, por ejemplo, o diseño, hay varias áreas:

  • Programación de sistemas (escritura de sistemas operativos, controladores, etc.) — es programación de bajo nivel, que para mí es un poco aburrida, pero también complicada.
  • Desarrollo de juegos — aquí no hay comentarios... Sería bueno conocer física.
  • Desarrollo web — no es tan complicado, es bastante interesante, pero puedo decir que necesitas saber increíblemente muchas cosas (aunque en otras áreas, probablemente, también).
  • Desarrollo móvil — tampoco diría que es complicado (aquí hay una división en dos áreas: para Android o para iOS, aunque también hay otras áreas menores). En el desarrollo web, por cierto, también hay dos direcciones: backend y frontend.
  • Aplicado — la escritura de programas para laptops y PC también es de dificultad y de interés promedio. Por lo general, es por donde se comienza en las universidades.
  • Científico — algo específico, enfocado en un perfil estrecho y en la ciencia: ya sea biología, química, matemáticas, etc.
image

Los más demandados, en mi opinión, son el desarrollo web, el móvil y las aplicaciones aplicadas. En cualquier momento puedes cambiar de dirección. Pero si eres senior en programación aplicada, eso no significa que al pasar al desarrollo móvil también serás senior. Tu nivel caerá un par de años (en el mejor de los casos, un año) hasta ser mid-level, ya que es un campo completamente diferente con sus propias recetas.

Además, los programadores tienen su propia clasificación por niveles de conocimiento:

  • Junior — no sabe nada, comete muchos errores. Todas las tareas después de él deben ser revisadas y posiblemente corregidas. Sin experiencia laboral o con muy poca experiencia.
  • Mid-level — un programador bastante competente, capaz de resolver tareas medianas y a veces difíciles (algoritmos). Tiene de 1 a 2 años de experiencia. Ya sabe algo y se le puede confiar.
  • Senior — un especialista muy talentoso, sabe todo o casi todo. Mínimo 4-5 años de experiencia laboral. A veces, para alcanzar este nivel, pueden ser necesarios más años (depende de las cualidades personales de la persona y, posiblemente, del área).

Una vez más, en cuanto a la experiencia y todas estas variedades, todo es relativo. Un senior en nuestra empresa de Minsk puede ser solo un junior en Google.

También se puede destacar al team lead (llamémoslo el "capitán" del equipo :)). Él distribuye tareas entre su equipo, revisa todo y también realiza algunas tareas difíciles. Toda la responsabilidad por las tareas de su equipo recae sobre él. Por lo general, son más experimentados, pero también pueden ser muy buenos mid-levels.

Además, están los arquitectos de software — personas extremadamente inteligentes, también seniors, o incluso más (yo todavía no he alcanzado ese estado zen, así que no puedo decirlo con certeza :)). Todo depende del nivel. Digamos que para diseñar correctamente la arquitectura en desarrollo web, no basta con ser un backend senior; también hay que conocer bien el frontend — y eso ya se considera un desarrollador full-stack.

image

No escuches demasiado a las personas que dictan sus tecnologías y lenguajes de programación, diciendo que uno es mejor que otro... Todo depende de las situaciones y las tareas. Y luego, en el mercado hay un top 5-10 de lenguajes que no han cambiado ni han perdido posiciones en los últimos 20-25 años (a veces simplemente intercambian posiciones entre sí si algo nuevo sale en términos de características, actualizaciones o, por ejemplo, frameworks para esos lenguajes, pero todos estos lenguajes siguen evolucionando). Yo destacaría los siguientes lenguajes: C, C++, C#, Python, Java, JavaScript y PHP. De los más nuevos, se puede mencionar Go, y tal vez Rust. Y los lenguajes de desarrollo móvil, como Kotlin o Swift — estos dos últimos son realmente relativamente nuevos (probablemente solo han sido utilizados activamente durante unos 4-5 años) — y esto tiene una explicación lógica, ya que el desarrollo móvil es uno de los más recientes en comparación con el desarrollo web o aplicado, por lo que algunos lenguajes claros en esta área se formaron más tarde que en otros lugares.

En general, hay que entender que los lenguajes pueden ser tanto funcionales como orientados a objetos (existen otras paradigmas), y es importante reconocer que se diferencian entre sí en muchos aspectos. Además, hay que recordar cómo funcionan: en algunos casos hay compiladores, en otros intérpretes (pero eso ya son detalles). Es realmente genial cuando un programador entiende a nivel de asincronía, procesos y hilos, pero esto no se logra de inmediato.

Tampoco escuches a aquellos que dicen que, por ejemplo, PHP es un mal lenguaje; esa es la opinión de personas que muestran su ignorancia y falta de conocimiento en programación (esta broma proviene de los "malos programadores", del bajo umbral de entrada del lenguaje, lo cual, en realidad, es más un punto a favor que en contra, y porque antes PHP era realmente malo... pero eso fue en 2000, como máximo hasta 2007-2010. Ahora es muy bueno, y más del 70% de los proyectos web en el mundo (backend) se desarrollan con él. También se puede decir lo mismo sobre JavaScript (incluso hay una broma sobre una prostituta y JS). A mí tampoco me gusta, pero lo uso con frecuencia. También he escuchado críticas hacia Java y Python... aunque creo que se pueden encontrar chistes sobre cualquier lenguaje. Así que todo esto es cuestión de gustos.

image

Entonces, después de que hayas decidido la dirección, intentaré explicar, utilizando tecnologías web como ejemplo, por qué es tan importante comenzar a estudiar programación lo antes posible y por qué no deberías confiar demasiado en las instituciones educativas. Para ser un buen especialista, necesitas conocer bien un par de lenguajes de programación. Además de los lenguajes, debes conocer un montón de tecnologías, protocolos y algunas cosas generales que son necesarias no solo para el desarrollo web, sino para todos los programadores. Incluso omito el hecho de que necesitas saber algoritmos y que es muy recomendable tener conocimientos en disciplinas matemáticas (desde cálculo y teoría de probabilidades hasta matemáticas discretas y modelado matemático). Sin embargo, respondiendo honestamente a la pregunta de si la matemática es necesaria para los programadores modernos (si no se trata de un trabajo específico), mi respuesta es: "no, no es necesaria". En el 80% de los casos, el trabajo se reduce a tomar datos de una base de datos y mostrarlos en una vista (en la pantalla, si lo simplificamos). Y no importa si se trata de una aplicación móvil, aplicada o web. O simplemente escribir datos en una base de datos. Aquí lo que realmente importa es hacerlo correctamente, de acuerdo con una cierta arquitectura.

image

Frontend:

  1. HTML5 (y hay que estar atento a lo que se planea en la versión 6).
  2. CSS (idealmente, hay que revisar los borradores). Es importante usar correctamente los selectores (recordar que CSS funciona de derecha a izquierda, entre otros aspectos).
  3. Debes conocer al menos un framework de CSS y entender cómo funciona (Bootstrap es una buena opción).
  4. Es necesario conocer preprocesadores de CSS (Sass, Less, etc.) — saber cómo funcionan y ser capaz de usarlos.
  5. Necesitas saber los fundamentos básicos de SEO — esto es imprescindible (entender cómo usar las etiquetas HTML5, que no se pueden colocar elementos de bloque dentro de elementos en línea, dónde y en qué cantidad usar las etiquetas h1-h6, etc.).
  6. JavaScript (desde ECMAScript 6) — aquí, de hecho, puedes estudiar este lenguaje en profundidad... y hay muchas otras cosas a las que prestar atención:
    • jQuery (una biblioteca muy útil... pero los frameworks son mejores).
    • Frameworks (React, Vue, Angular).
    • npm — gestor de paquetes.
    • Build tools (Gulp, Grunt, Webpack) — además, son necesarios para SEO, para que la página entregue únicamente el código de estilos y scripts que necesita, y nada más.
  7. Dominar Emmet.
  8. Si no te gustan los scripts comunes, aprende CoffeeScript o TypeScript, o algo similar. Entonces, no olvides aprender Babel u otro compilador a JS.
  9. API de motores de búsqueda y algoritmos de posicionamiento (esto es más bien para SEO). (+ AMP, Turbo, Yandex Zen).
  10. Maquetación (válida, compatible con navegadores, moderna, adaptable).
image

Backend (usaré PHP como ejemplo):

  1. PHP puro.
  2. CMS (he trabajado con muchos, pero recomiendo WordPress).
  3. Frameworks (Laravel, Symfony, Yii o cualquier otro). Los dos primeros son los más destacados.
  4. PSR — estándares sobre cómo escribir código correctamente, dónde colocar comillas, dónde poner espacios (tabulaciones), cómo nombrar variables y mucho más.
  5. REST — al igual que el punto 4, es una forma de programación correcta y de nombrar métodos adecuadamente.
  6. Seguridad. No sé cuánto se presta atención a la seguridad en aplicaciones móviles, pero en la web es a menudo un gran problema. Y es lógico, porque el mejor depurador de un desarrollador web es el navegador. Con él se puede obtener mucha información sobre la página, y si se instalan algunas extensiones, se pueden realizar manipulaciones bastante útiles. Por lo tanto, en la web es necesario saber cómo protegerse al menos de inyecciones SQL, vulnerabilidades XSS y ataques de falsificación de solicitudes entre sitios (CSRF) — aunque estas no son las únicas amenazas (también se pueden añadir DoS y DDoS, pero eso es más bien para la configuración del servidor).
  7. Sistemas ORM (Doctrine es una buena opción) y PDO.
  8. Consola (la utilizo casi todos los días).
  9. Configuración del servidor (al menos lo básico, saber cómo funcionan los servidores y qué sucede en el backend durante las solicitudes).
  10. Docker (sería bueno echar un vistazo a los almacenamiento en la nube y a los "contenedores" ya configurados para proyectos. También es importante conocer qué son Kubernetes y OpenShift. A veces es más fácil optar por la nube que desplegar un gran stack de tecnologías en local).
  11. Composer.
  12. cURL.
  13. Protocolos — este punto debería haber estado más arriba, junto a los puntos 4-6. Pero no voy a reescribir nada. Es necesario saber las diferencias y cómo trabajar con HTTP, HTTPS, FTP, SSH y algunos otros.
  14. Aprender a usar un IDE, como PhpStorm, o buenos editores de texto (con extensiones instaladas) — esto también se aplica al frontend.
  15. Linux — la mayoría de los servidores funcionan con este sistema operativo, por lo que es altamente recomendable conocerlo.

Además, debes saber sobre programación orientada a objetos (OOP). Existen lenguajes funcionales en los que se puede desarrollar un startup completo sin una sola clase. Pero PHP (al igual que la mayoría de los lenguajes modernos) es orientado a objetos, así que es esencial conocer OOP. Cuanto más profundo sea tu entendimiento, mejor (clases, interfaces, traits). También sería bueno conocer diferentes paradigmas de programación. Debes entender que el mismo código en el mismo lenguaje puede escribirse de distintas maneras a través de diferentes paradigmas. Tu proyecto debe adherirse a uno solo. Esto también se aplica a los nombres de las variables, es decir, o usas notación camelCase en todas partes, o notación snake_case.

Es necesario conocer patrones — debo admitir que durante mi estudio de esto en la universidad, consideraba que era el tema más inútil. Y hay que reconocer que es el tema más complicado (para mí). Cualquier patrón puede interpretarse de diferentes maneras (solo en la web se pueden encontrar varias implementaciones de un patrón determinado. Si tomamos una aplicación de escritorio o móvil, puede haber una implementación algo diferente). En resumen, es un tema descrito de manera ambigua. Pero es extremadamente importante.

SOLID — es la forma de escribir código. Y SOLID no son los únicos principios. Por cierto, REST y PSR (que mencioné anteriormente) también se pueden considerar principios de buena escritura de código.

Pruebas — pruebas unitarias en PHP. Pero esto es en un ideal. Yo prácticamente no escribo pruebas... aunque son necesarias. Debes entender que incluso las pruebas pueden ser diferentes: pruebas funcionales, pruebas de aceptación, pruebas unitarias, etc.

Es necesario dominar Git, Mercurial o cualquier otro sistema de control de versiones.

No olvides trabajar con formatos de datos: JSON, XML, YAML.

image

Acostúmbrate a estar al tanto de las actualizaciones de los lenguajes y tecnologías con los que trabajas. Los lenguajes, por lo general, no se actualizan con frecuencia, pero a veces hay cambios fundamentales.

image

Cuando estudiaba en instituciones educativas, me parecía que el problema de los grandes datos y la optimización del código no me afectaría o que lo haría muy pronto. En realidad, no es así. Hace tiempo que trabajo con datos de varias decenas de miles de registros. Si un conocimiento básico de bases de datos y la normalización de tablas me ayudan en el backend (donde rara vez surgen problemas), en el frontend esto sucede con más frecuencia. Los motores de búsqueda son extremadamente exigentes con el código tanto en términos de optimización como de rendimiento (especialmente en rendimiento). Y aquí es necesario entender cómo hacer que todo se cargue de forma asíncrona o diferida. Puedes tener un núcleo semántico perfectamente trabajado, pero ¿de qué sirve si no hay optimización en la velocidad de carga de las páginas? Así que también hay que prestar atención a esto.

Escribe código correctamente para que, con el paso de los años (o meses), al eliminar (o desactivar) módulos, no quede código en el proyecto. Esto puede suceder, por ejemplo, en el frontend con CSS y JS si el código no está organizado correctamente. Yo llamo a este tipo de código "código muerto". No es necesario, pero los motores de búsqueda lo encuentran y se quejan de él.

Al mismo tiempo, prácticamente no he tocado las bases de datos... esto implica que ya sabes y puedes trabajar con ellas. Qué bases en particular no es lo principal.

Es necesario conocer enfoques arquitectónicos, la arquitectura de aplicaciones... de nuevo, en todas partes es completamente diferente: web, móviles y aplicaciones de escritorio. Por ejemplo, consideremos un gran proyecto web: el backend consta de tres partes. Una está hecha en Symfony, la segunda en Laravel y la tercera en PHP puro. El frontend, por ejemplo, consta de dos partes, que están hechas en React y Vue. Si profundizas en cualquiera de estas partes, cada una tiene su propia arquitectura, sus propios patrones — tanto grandes como pequeños. Es necesario dividir grandes secciones de código en capas (por ejemplo, envolviendo modelos en repositorios y accediendo a repositorios en lugar de a modelos, utilizando observadores, etc.) — todo esto hace que el código sea elegante, y la aplicación modular y fácilmente extensible. Pero al mismo tiempo, hay que recordar que cuanto más delgada sea la capa, más rápido funcionará la aplicación (por ejemplo, no usar un sistema ORM entre la base de datos y el lenguaje donde basta con PDO puro). La comprensión de todo esto vendrá con los años.

image

Otra cosa muy importante: es necesario utilizar frameworks (al menos en proyectos grandes). Es más complicado escribir con frameworks que con código limpio. Pero los frameworks ofrecen varias ventajas:

  • Aceleran el desarrollo de aplicaciones en general.
  • Dictan un estilo y una filosofía a los que te adhieres, lo que reduce la cantidad de código de mala calidad.
  • Hay muchos módulos listos para usar (por ejemplo, de autenticación), y no te importa cómo están implementados por dentro (autenticación básica, basada en tokens, JWT o algo más).
  • Seguridad. Como mencioné anteriormente, en la web es un problema al que hay que dedicar mucho tiempo y esfuerzo. Y los frameworks a menudo ya han abordado esto por ti.
image

Hay una opinión de que un desarrollador fullstack es un eterno "middle". En parte, estoy de acuerdo con esto, y dedico mucho de mi tiempo libre al aprendizaje y al desarrollo personal para que esta frase no se aplique a mí, y para poder hacer buenos proyectos llave en mano tanto en el frontend como en el backend — y no de manera descuidada, sino utilizando algo nuevo y fresco.

Es posible que haya olvidado algo, ya que no se puede retener todo en la cabeza. Y sí, no hablaré del inglés... cuanto mejor, mejor.

No es necesario que aprendas ambas áreas de inmediato; puedes empezar con una sola. Y recuerda: si consideras que tu código del año pasado es "código basura" y podrías reescribirlo mejor, significa que estás pensando en la dirección correcta y desarrollándote.

Así que he descrito el ámbito web... puede que haya olvidado algo... pero créeme, esto cubre alrededor del 90% de lo que necesitas saber para ser un buen profesional. Otra cuestión es que todo esto se puede estudiar durante años.

Como ves, en la práctica solo utilizo dos lenguajes de programación, pero además de ellos, como he mencionado anteriormente, hay un montón de otras cosas que realmente son necesarias.

En otras áreas de la programación, no creo que algo cambie radicalmente... hay sus propias tecnologías y lenguajes... pero el principio y el volumen son aproximadamente los mismos.

No todas las cosas que estoy aprendiendo (especialmente si son algo completamente nuevo o complicado) las puedo entender a la primera... a menudo necesito leer y revisar varias veces para comprender completamente cómo funciona. Así que no te asustes si algo no queda claro a la primera. También depende mucho de la fuente que presenta este material (algunos autores y narradores lo explican mejor, otros peor).

Ahora sabes lo que te espera por delante, y solo tienes dos opciones: o recoger el documento ahora mismo, o comenzar a estudiar programación hoy mismo.

image

Aquí hay mucha terminología que es extremadamente difícil de entender incluso para un estudiante de segundo o tercer año, pero todo esto está disponible en Internet. Ahora sabes por dónde empezar y qué estudiar. Esta lista se puede considerar como un rompecabezas, donde cada punto es simplemente una pieza, y al dominar algo de esta lista, la imagen general de la programación web en tu mente se volverá un poco más clara y correcta.

image

Y como conclusión, resumamos los aspectos de la profesión de programador.

Ventajas:

  • Profesión con futuro. Un buen especialista no se quedará sin trabajo.
  • Salario alto, aunque no de inmediato.
  • Trabajando en IT, de una manera u otra, estarás al tanto de los últimos eventos en el ámbito tecnológico.
  • A menudo, un horario más flexible que en otras áreas. Posibilidad de trabajar no solo en horarios convenientes, sino también de forma remota desde otros países.

Desventajas:

  • Necesitas saber muchas cosas. Debes estar en constante mejora y utilizar metodologías y enfoques actuales.
  • Es muy recomendable conocer el idioma inglés.
  • Impacto negativo en la salud. Se dice que esto puede afectar la vista. La programación implica un estilo de vida sedentario que debe complementarse con deporte u otras actividades activas.
  • Gran responsabilidad (por ejemplo, al trabajar con datos bancarios y financieros).
  • A veces, es difícil encontrar un lenguaje común con clientes y gerentes.
image
Вверх