• Skip to main content

Pienso Luego Pienso

Ocio al mejor postor

Pronosticando Puestos Desafiantes Como Programador

noviembre 23, 2017 By Facundo

Si no querés estancarte en una calma desesperación, entonces tenés que aprender a decir No. Las empresas solicitan desarrolladores innovadores para sentarlos a programar cosas aburridas. La demanda es altísima. Es una guerra.

El departamento de RRHH está bajo presión. Entonces tuvieron que innovar. Dejaron de enfocarse en pelotudeces. Ping-pong, carreras profesionales con metas de fantasía, playstation, etc. Son carnada fluorescente. Y los programadores (algunos) lo saben.

Planes de Carrera y Reviews de Performance

Los recruiters se adaptan. El poder le pertenece al candidato (calificado). La empresa es una marca.

Los humanos nos sentimos atraídos al valor. Funciona como un imán. Cuando nace el interés aparece una tensión a resolver. Comida. Viajes. Sexo. Ó todo junto. La curiosidad es atractiva.

Los programadores tenemos intereses particulares; casi reiterativos. Trabajar en algo que uno pueda relatar con entusiasmo se siente bien. Ó vivir en un lugar exótico, se siente distinto. Me pasó; aunque no siempre hice cosas interesantes. Pero cuando sí, contagiaba otras áreas de mi vida. Por eso, trabajar para una software factory me desentusiasma.

¿Y qué es un trabajo desafiante para un programador? Robert C. Martin ofrece una grandiosa explicación:

Verás, los programadores tienden a ser introvertidos arrogantes que se concentran en sus ideas abstractas. No nos metimos en este negocio porque nos guste la gente. La mayoría nos metimos en la programación porque preferimos enfocarnos en detalles triviales, hacer malabares con muchos conceptos al mismo tiempo, y en general probarnos a nosotros mismos que tenemos cerebros del tamaño de un planeta, todo sin tener que interactuar con las desorganizadas complejidades de otras personas.

Masturbación cognitiva. Qué bien se siente. Lamentablemente, no existe un único indicador en el cual fiarnos para saber si una empresa vale la pena. Para pronosticar un trabajo desafiante sirve preguntar sobre la tasa de recambio de personal1; o qué desafíos resolvieron; o cuáles van a resolver. Incluso podemos preguntarle al entrevistador el top 3 de cosas que más le gustan de su trabajo. Pero también debemos diseccionar al aviso laboral.

Todo aviso laboral tiene un ADN. Debemos analizarlo. Antes de poner el gancho tenés que decodificar su genoma. Como si fuese una pieza de biología o genética, tratá de identificar los fenotipos del aviso. Me refiero a cualquier característica o rasgo fenotípico observable de un organismo, como su morfología, desarrollo, propiedades, fisiología y comportamiento. La seriedad sirve para este momento.

Análisis de Anuncios Laborales

Me tomé el trabajo de analizar 3 anuncios. A continuación expreso mi punto de vista sobre las pistas que aprendí a reconocer a lo largo de los años. Adicionalmente, encontrarás el link a GitHub con los ejercicios y soluciones que me solicitaron una vez pasado el screening telefónico. Veamos:

Disclaimer: Son anuncios reales.

CLASE DE ANUNCIO #1:ImportanteEmpresa Busca Peón [nota] que apile líneas de código[/nota].

Trabajar para una empresa de esta clase no será algo memorable. Se la dan de superados:

Introducción

ImportanteEmpresa está dentro de un período de crecimiento y es un momento emocionante para ser parte de la historia exitosa de ImportanteEmpresa

Sentís que tus talentos para resolver problemas están siendo malgastados en tu trabajo actual? [nota]Anzuelo con señuelo de goma[/nota] Entonces continuá leyendo porque ImportanteEmpresa podría ser el lugar para vos. Nuestro equipo está compuesto de ingenieros de software que sienten pasión [nota]Muy cliché ¿Existe alguna palabra más quemada que pasión?[/nota] para entregar verdadero valor a nuestros clientes al producir soluciones de pago de alta calidad. [nota]Oración vacía. Pero al menos apunta en qué industria será el puesto[/nota] Somos una compañía en rápido crecimiento y eliminamos las excesivas regulaciones para que vos hagás lo que hacés mejor [nota]El boludeo en wikipedia me sale bien[/nota]. Te incorporarás con gente motivada e inteligente que potencian los productos innovadores que revolucionan la industria de pagos.[nota]Hacen posnets![/nota]

Sobre el puesto

Como desarrollador Java, tendrás la oportunidad de de trabajar en nuestro suite completo de sistemas[nota]Su Majestad te está dando una oportunidad, plebe!![/nota], desde nuestra infraestructura núcleo de pagos hasta varios sistemas innovadores que interactúan con los mercantes. Trabajamos con metodologías ágiles y usamos los principios y prácticas de eXtreme Programming. Esto significa que trabajarás en pequeños equipos y te involucrarás en pair-programming en full-time.[nota]Cosa particular de la ImportanteEmpresa. Personalmente siento desprecio por Pair-Programming porque me duermo. Además me da a muy policía.[/nota]. A partir de un amplio rango de tecnologías, construimos soluciones superiores con componentes crème de la crème así que siempre estarás aprendiendo algo nuevo.

Lo que harás incluye

  • Escribir código bien diseñado, eficiente, testeable, y mucho.
  • Preparar y producir releases de componentes de software.
  • Asegurarte que los diseños están en compliance con las especificaciones.
  • Trabajar de manera colaborativa.
  • Reaccionar rápido al cambio.
  • Producir trabajo de alta calidad con cara commit[nota]No recuerdo absolutamente nada destacable toda esta sección.[/nota]

Qué estamos buscando

  • Experiencia laboral comprobable desarrollando en Java / Destacables habilidades con Java core.
  • Experiencia laboral comprobable construyendo aplicaciones empresariales.
  • Experiencia con Spring, Hibernate, Microservices or TDD (desirable) [nota]Hasta acá, lo típico[/nota]
  • Destacable capacidades de comunicación en todos los ambientes[nota]¿Buscan programadores ó RRPPs?[/nota]
  • Pasión por crear software de calidad.
  • Título universitario o relacionado[nota]Algunos todavía rompen con esto[/nota]
  • Mínimo 3 años de experiencia relevante.

Siengo un ingeniero de software en ImportanteEmpresa

Ponemos mucho énfasis en obtener lo mejor de nuestros ingenieros[nota]Produzcan lacras!!![/nota]. No vamos a gastar tu tiempo en reuniones largas y no creemos en que tu título laboral defina lo que podés hacer o no. Si sos un desarrollador de software de primera a quien le gusta el sonido del continua aprendizaje, una cultura social y divertida (alguien para el tenis de mesa?) [nota]¿Dijeron Ping pong?[/nota], gran work-life balance, y una oficina buena onda en el centro – entonces queremos escuchar sobre vos.

¿Qué me transmite este anuncio?

  • La introducción es aburrida y estándar. Aclara estupideces.
  • Full Time pair programming es el fordismo en las fábricas de ensamble del siglo XXI.
  • La probabilidad de que sea desafiante tiende a cero.

¿Qué ejercicio me pidieron?

Tuve que hacer un test en hackerrank jugando con vectores. El test estaba cronometrado a 90 minutos. ¿Clase de desafío? Codeá nene, MÁS RÁ-PI-DO.

 

CLASE DE ANUNCIO #2: Sumate y Desarrollá Tranquilo

Este tipo de trabajo es ideal para quien busca una vida sin complicaciones. Un puesto así tiene el beneficio de contar con un ambiente ameno y está bueno para quien desee regresar a su casa a tiempo sin pensar en el trabajo. Esta fue la empresa para la que trabajé viviendo en Brisbane (Australia):

Skills and Experience include:

  • Minimum 6 years experience in design and development of high throughput[nota]Suena interesante[/nota], highly available back-end Java applications.
  • Demonstrated experience in all aspects of software development, including design, coding, testing and documentation of large and/or complex enterprise applications technologies whilst working in an Agile environment.
  • Demonstrated experience in support and maintenance of enterprise applications, including the ability to investigate problems in systems and services and contribute to agreed remedies, preventative measures and service improvements.
  • Experience with application release management, including maintaining and administering the tools and methods used for application deployment – manual or automatic – and ensuring release processes and procedures are maintained and improved as required.[nota]Estos últimos puntos son bastante standard[/nota]

Technical requirements:

  • Extensive experience with Spring Core / Spring Boot
  • Experience implementing JSON REST services with Spring MVC
  • Solid understanding of REST principles and the HTTP protocol
  • Spring Data, JPA and Hibernate[nota]Hasta acá, apunta a manejar datos ida y vuelta. Nada desafiante[/nota]
  • Strong understanding of concurrent programming principles in Java[nota]Muy bueno, pero Ojo: aparece QUINTO…[/nota]
  • Familiarity with Enterprise Integration Patterns
  • Familiarity with CI / CD processes and tools
  • DevOps experience in a LINUX server environment (Bonus points for Docker / AWS)[nota]Sumando un poco de moda[/nota]
  • Agile development principles and related tools (Scrum / Kanban)
  • Version control using git, including code review and pull request processes

[nota]La especificación suena bien straight-forward. Y lo era. Buena gente.[/nota]

Important responsibilities include:

[nota]La sección completa refiere al bread-and-butter de sistemas. Nada desafiante[/nota]

  • Developing and implementing university-wide IT applications as approved through IT Governance Framework.
  • Communicating effectively with a wide range of internal and external clients and stakeholders.
  • As part of a team, liaise with clients at the operational level in order to ensure the efficient delivery of client-focused services.
  • Participate in project planning, including monitoring progress and consulting with clients to achieve identified goals.
  • Analyse technical problems in relation to the deployment and integration of information and participate in the development of information technology solutions to meet the business needs of the University.
  • As part of a team ensure that a quality maintenance, support and development environment is maintained.
  • Work within a diverse team in a professional and supportive manner.

¿Qué me transmite el anuncio #2?

  • Se pueden identificar pistas interesantes es la sección de Technical Requirements.
  • Aunque standard, en el aviso aparecen términos que indicarían desafío (high throughput, concurrent programming), pero son dos anzuelos encarnados con bolitas de pan. No les dan mucha importancia.
  • ¿Lo positivo? Aunque no es desafiante, el trabajo es metodológico. El aviso no muestra indicios manipulativos. Son honestos.

¿Qué ejercicio me pidieron?

Tuve que codificar un servicio REST para el manejo de encuestas. Las operaciones posibles eran dos: crear una encuesta y consultar las existentes. Había que incluir casos de prueba. El ejercicio no estaba cronometrado: buscan calidad sobre cantidad. Adjunté el ejercicio acá.

 

CLASE DE ANUNCIO #3: Artesano de Software Se Busca

Este tipo de anuncio es conciso. Va a lo importante.

Who are we?

At OurCompany, we’re committed to using the latest technology to make the world a safer place for you, your family and your business.

Our product is a simple and affordable security solution and general monitoring platform that allows you to keep an eye on your home, kids and pets. OurCompany provides peace of mind wherever you are. [nota]Son concisos. Introducen a que se dedican en 2 oraciones. Y el enfoque está en You en vez de OurImportanteCompany[/nota]

Integrated into your daily life through your mobile device, OurCompany is a well funded Sydney based technology driven start-up[nota]Siempre suman las start-ups. Punto a favor[/nota]. We’re currently 60+ software, marketing and operations people and we’re looking for one more to join us as a Functional Programming Engineer.

[nota]Unos capos: ‘Esto hace nuestra empresa. Este es nuestro producto. Y acá tenés dos ó tres datos mínimos más’[/nota]

What will you be doing?

Yeah, “Functional Programming Engineer”, pretty vague huh? Why so vague? The answer is simply that we’ve got a few new products being developed in Scala, we needed a fast, capable language with more flexibility than our traditional Node stack can handle[nota]Ya suena a desafío[/nota]. There’s more to it, but that would give away the products we’re building.

The fact is, there’s tonnes of you out there, the frustrated Java developer, stuck on Java 6 or 7 and tantalised by Scala or Java 8 (maybe you’re working with Java 8 right now and you’re already bored and need more of a challenge). Do you visit ScalaSyd every month, staring wistfully at the beautiful, succinct syntax appearing before you, delivering more in 10 lines than you could hope to manage in 200 in your legacy restricted environment? [nota]Apuntan al cuasi-fanático. Armaron un argumento elite[/nota]

Do you head home afterwards, excited about adding something new you’ve learned into a personal project, then think sadly to yourself, facing your commute to that monolithic (with three “micro-services”) [nota]Estos tipos entendieron todo[/nota] environment where you can only code in three dimensions?
Want to actually use it daily and learn? This is the role for you!

REQUIREMENTS
Who are you?

You’re an accomplished Software Engineer, you love to tinker, to build stuff. [nota]Así es. Queremos pensar y construir cosas[/nota]
Ideally, you’ll be an accomplished Scala Engineer already, keen to work on a customer facing, disruptive technology that really benefits your customers. But we know there’s like two of you out there[nota]Realistas.[/nota] and you have eleventy million messages from recruiters in your inbox or on Linkedin promising you a free Ferrari if you talk to them. We crashed our last one last week.
Here’s what we want and need to see from you to know you can do the role

 You’re an experienced Software Engineer, you’re a master with Java and you’re bored[nota]Trabajo aburrido = vida aburrida.[/nota]

 Some knowledge of C++ would be ideal, but not necessary

 You’ve been working in fast moving, consumer driven, web focused environments

 You’ve done the Coursera Scala course

 You regularly attend ScalaSyd or Haskell Meetups

 You’re interested in being part of a wider team, we hold monthly tech talks internally, you’d be keen to contribute

 You consider unit tests to be the norm rather than something to show off at code reviews

¿Qué me transmite el anuncio #3?

  • Hay situación de tetris/rompecabezas, hay que pensar, no piden título.
  • Tendré que atacar problemas desde nuevos ángulos.
  • Saben particularmente a quién están buscando.

¿Qué ejercicio me pidieron?

A primera vista da la impresión de que es fácil; cualquier persona con 2 ó 3 años de experiencia podría realizarlo. Esa primera impresión está equivocada – el 90% de los candidatos no hicieron el ejercicio correctamente. Y aunque dijeron debería llevarme unas 6 horas, me terminó llevando casi del doble. Eso sí; sentarse a codearlo fue entretenido.

El ejercicio lo podés ver acá (recomiendo pensarlo mucho y escribir algún bosquejo antes de ver la solución).

 

¿Por qué desaprobé la entrevista del anuncio #3 y terminé trabajando para el anuncio #2?

Pasaron 27 meses desde mi anterior trabajo en sistemas (en Alemania). Luego de debatir satisfactoriamente durante 30 minutos sobre el código de mi ejercicio, pasamos a un pizarrón donde debía esquematizar la cartelera de una empresa de cines para todas sus sucursales. En retrospectiva veo que fallé por ni siquiera recordar como acoplar un conjunto de JSON. La falta de práctica te puede dejar lisiado.


LEER SIGUIENTE: Por Qué No Volvería a Aprender Java

  1. 10% es un techo alto

Relacionado

Filed Under: Uncategorized

Licencia de Creative Commons
Este obra está bajo una licencia de Creative Commons Reconocimiento 4.0 Internacional.

 

Cargando comentarios...