Trabajos en «tech», cursos cortos y carreras universitarias

«Trabajar en tecnología» es uno de los temas de moda. Trabajar en «tech» le dicen. Si bien el término «tech» podría sugerir trabajos en las diversas áreas de ingeniería y ciencias aplicadas, la realidad es que en la actualidad el término «tech» se utiliza para referirse a todas aquellas profesiones/disciplinas relacionadas al mundo IT: programación, testing, diseño gráfico/UX, administración de sistemas, datos, IoT, etc..

Este tema ha disparado diversos debates en redes sociales que incluyen posiciones muy variadas como:

  • «cualquiera puede trabajar en tech»
  • «no es necesario ir a la universidad para trabajar en tech»
  • «si querés trabajar en tech mejor no vayas a la universidad»
  • «todo lo que necesitas para trabajar en tech es perseverancia, ver videos de YouTube y practicar React»
  • «leer libros no sirve»
  • «no trabajes en tech si no amas la tecnología»
  • «aunque no te guste programar podes trabajar en tech»

Algunas de estas frases son hechos concretos mientras que otros son ideas , a mi entender, disparatadas.

En primer lugar hay un hecho: existen en la actualidad muchísimas oportunidades de trabajo en «tech». Al mismo tiempo hay incontables casos que demuestran que no es necesario contar con formación universitaria para conseguir un trabajo en «tech».

Personalmente no creo que la formación universitaria conspire contra conseguir un trabajo en «tech», al contrarío, yo creo que todo estudio, conocimiento y experiencia siempre suma. Sobre todo porque la universidad nos da mucho más que contenido. De hecho creo que es justamente «todas esas otras cosas» lo que marcan la mayor diferencia entre estudiar en la universidad o estudiar en alguna otra institución no-universitaria.

Sin embargo, si lo que uno está buscando es una oportunidad laboral y ponemos en la balanza la relación costo/beneficio en el corto plazo, es muy posible que la balanza se incline a hacia hacer una carrera corta y/o curso intensivo en lugar de una carrera universitaria. Explicito «en el corto plazo» porque una carrera universitaria demanda más tiempo que un curso o carrera corta y al mismo el retorno de la inversión de una carrera universitaria es a largo plazo.

Es posible que hoy en día, en muchas organizaciones tener un título universitario no represente un requisito de ingreso. Personalmente creo que el título universitario habilita una mayor proyección. O sea, de alguna forma conseguiste entrar, ahora el punto es hasta donde podes llegar. Ser programador («individual contributor«) puede estar bien para muchos y estoy de acuerdo que en muchos casos se puede prescindir de una carrera universitaria. Pero un rol de manager/liderazgo requiere de otras habilidades y formación que a mi parecer no son tan fáciles de conseguir con cursos informales.

No estoy seguro si es causa, consecuencia o simple coincidencia, pero este auge de las carreras en «tech» coincide con la «segmentación/especialización» de las incumbencias. Si miramos 20 años atrás la gente que trabajaba en sistemas eran literalmente analistas/licenciados/ingenieros en sistemas/computación, era gente que había pasado por una educación formal. Ea mucho menos habitual encontrarse con gente trabajando en sistemas que no hubiera pasado por la universidad. Tal vez había una porción de profesionales que no había completado su carrera pero al menos tenían algunos años de educación formal. Hoy en día la situación es bastante distinta, empieza a ser más habitual encontrar con gente que nunca hizo el intento de una carrera formal en sistemas. Es aquí donde entra en juego la «segmentación/especialización»: en general esa gente que no pasó por la educación formal en sistemas, es típicamente un especialista: desarrollador backend, tester, devops, desarrollador frontend o incluso más especialista aún «desarrollador React» (#graciasJavaScript). De hecho mientras lo escribo, dudo de que el término correcto sea «especialista», pues pienso en la medicina: el pediatra es médico, sabe de pediatría pero también tiene conocimientos generales de medicina. El desarrollador frontend ¿sabe de cuestiones generales de desarrollo (algoritmia, configuration management, testing, etc)? Tengo mis dudas, pero al margen de eso tal vez la situación actual del mercado/industria no requiere que el desarrollador frontend sepa nada más que frontend. Es aquí donde aparece una diferencia importante con las carreras universitarias de sistemas: no forman «especialistas».

Claro que el perfil de un egresado UTN es distinto al de un egresado de UBA Ingeniería, pero ambos son a los ojos del mercado/industria dos generalistas. La universidad no forma programadores, ni testers, ni devops. La universidad forma profesionales mucho más generalistas y que tienen a su vez la capacidad de auto-formarse en cualquier especialización. Este ha sido un punto clásico de tensión entre industria y academia. La industria muchas veces pretende que la universidad ya «le de gente» que sepa Cobol/React/Andriod (o la tecnología de moda) y la universidad (al menos la pública) siempre ha insistido en formar gente con conocimiento «más profundo y duradero» que la tecnología de moda. Hoy en día esto ha llevado a que (parte) de la industria ya no busca gente en la universidades y al mismo tiempo lleva a la universidades a replantearse la formación que otorga (mmm, no creo que todos en la universidad se esten planteando esto, pero si algunos).

En fin, creo que es un tema que aún da para mucha charla. La gran duda que me surge es con que nos entraremos dentro de 3 o 4 años cuando tengamos que evolucionar esas aplicaciones construidas en gran medida (o incluso en su totalidad) por gente que tuvo una forma rápida/no universitaria en sistemas.

Continuará….

Test-Driven Development for Embedded C

Ayer terminé de leer este libro. En una palabra: Excelente.

Lo había tenido en radar por mucho tiempo pero recién ahora con el envión de mi trabajo de investigación sobre TDD decidí invertir tiempo en leerlo. El autor del libro es James Grenning, uno de los 17 autores del Agile Manifesto pero lo que puso el libro en mi radar fue la charla de Grenning «TDD Guided by ZOMBIES» en la cual propone una heurística para definir el orden de la secuencia de tests al hacer TDD.

El hecho de que el título del libro haga referencia a Embedded C es en gran medida anecdótico ya que casi todo el contenido es directamente aplicable a cualquier lenguaje o eventualmente fácilmente extrapolable. Es cierto que algunos capítulos están muy centrados en C y en el desarrollo de software embebido, pero varias de las problemáticas relacionadas a la dependencia del hardware son fácilmente extrapolables a las dependencias de infraestructura que uno se encuentra en el desarrollo de aplicaciones de más alto nivel.

Al margen de TDD, creo que el libro resulta muy valioso para gente trabajando en software embebido ya que provee un conjunto de técnicas que sin duda facilitan/aceleran el desarrollo del software embebido. De hecho lo interesante de las técnicas que propone son aplicables a todo desarrollo a bajo nivel, sea o no embebido. Personalmente he trabajado muy poco con software embebido pero sí he hecho desarrollo en C/C++ y de haber sabido las técnicas mencionadas en este libro creo que habría obtenido mejores resultados.

El libro me ha parecido muy completo, explica los fundamentos de TDD, trata con suficiente detalle las cuestiones de tooling para poder automatizar pruebas en C, escribir código modular y hasta implementar mocking en C. También trata cuestiones de patrones, code smells y trabajo con código legacy.

Para mi es 10 puntos, muy recomendado.

Y un día volvimos al aula…

Todos con tapabocas, con menos distanciamiento que el recomendado pero con puertas y ventanas abiertas, el pasado lunes 21 de marzo volvimos al aula. Si bien creo que nos adaptamos muy bien a las clases online no hay como la interacción dentro del aula.

Algunas clases de MeMo2 claramente conviene que sean virtuales, principalmente aquellas que incluyen actividades de programación. En esos casos resulta muy conveniente que el alumno pueda trabajar sobre su propia computadora. Del mismo modo, hay otras clases en las que la presencialidad es un valor diferencial. Un claro ejemplo de esto es la primer clase de curso, donde conocemos y comenzamos a intentar generar una relación de confianza que facilite el proceso de enseñanza-aprendizaje.

Llevamos 2 semanas de clase y hasta el momento tengo en claro que la primera clase debería ser presencial (por lo que mencioné previamente) mientras que la segunda debería ser virtual, para que los alumnos puedan hacer el setup de sus computadoras durante el tiempo de clase y que eventualmente podamos asistirlos en vivo.

Como de costumbre, en la primera clase les pedimos a los alumnos que completen la encuesta de perfil. Una vez más nos encontramos con situaciones incómodas como ser el tener alumnos con cantidades muy dispares de materias aprobadas: en un extremo 15 y en el otro 32.

También tenemos disparidad en la edad: gente de 21 y gente de 42.

Un rubro en el que notamos un cambio respecto del histórico de la materia es en el laboral. Este cuatrimestre tenemos que el 81% de los alumnos ya trabaja en un actividad afín de la carrera, porcentaje que tradicionalmente estaba en torno al 70%.