Webs para practicar programación

0
1372
A veces nos sentimos un poco oxidados. Es normal si nos ha tocado trabajar en algo que no sea muy exigente técnicamente o estamos repitiendo lo mismo una y otra vez con variaciones muy pequeñas. En ocasiones como estas a mí me gusta salir un poco de lo habitual y enfrentarme a retos en los que prima más la algoritmia que saber los recovecos de X tecnología. Así que aquí explico qué alternativas uso yo cuando quiero refrescar un poco las ideas (y por qué no decirlo, también pasarlo bien estrujándome un poco el coco).

 

Índice de contenidos.

¿Por qué son útiles
Concursos de programación
Webs de ejercicios de programación
Recordatorio de que hay que aplicar el sentido común

¿Por qué son útiles?

Como ya he dicho, a veces viene bien romperse un poco la cabeza con problemas que, si bien es cierto que sabiendo bien un lenguaje se puede buscar una eficiencia mayor, están más centrados en pensar de una manera que muchas veces tenemos adormecida. Nos permite poner en práctica conceptos que apenas usamos en el día a día, o experimentar con restricciones que no tenemos habitualmente.

También es una buena opción si se está aprendiendo una nueva tecnología, porque nos obliga a buscar la manera de hacer algo que no conocíamos hasta el momento y, en algunas de las opciones que propondremos, podemos ver cómo lo han hecho otros usuarios e incluso dar y recibir feedback (lo cuál es increíblemente valioso cuando estamos aprendiendo algo nuevo).

Además también hay determinados sitios que sirven como punto de encuentro para empresas y desarrolladores, así que es posible también encontrar trabajo de esta forma si logras destacar lo suficiente.

Aquí no vas a encontrar problemas en los que tengas que crear un controlador o acceder a una base de datos. No te vas a enfrentar a grandes problemas en los que tengas que hacer una estructura grande de clases y pensar bien la arquitectura. No se va a poner a prueba tu conocimiento del último framework que ha salido de tu lenguaje favorito. Al menos por lo general. Los problemas que vamos a encontrar son bastante más pequeños y su dificultad va a radicar en la algoritmia necesaria y, en ocasiones, van a poner a prueba nuestras aproximaciones con entradas lo suficientemente grandes como para darnos problemas de rendimiento o memoria.

Y ya personalmente, a mí me han servido bastante porque estando en una baja bastante larga me han ayudado a no perder del todo la costumbre de programar y mantener mínimamente el ritmo. Serán cosas básicas, no entraremos en el uso de frameworks ni nada por el estilo, pero es lo que yo he necesitado para mantener la mente medianamente a punto. Y por eso se me ha ocurrido escribir esta entrada.

Concursos de programación

Una buena forma de poner a prueba nuestras habilidades y mejorarlas es mediante los concursos de programación que diversas empresas hacen periódicamente. El hecho de que compitas con otros concursantes en tiempo real, que haya un límite de tiempo y que normalmente no puedas pasar al siguiente problema sin haber hecho el anterior (o en determinadas ocasiones saltándotelo sin poder volver atrás) aporta un extra de presión que de vez en cuando viene bien.

Además una de las cosas buenas que tienen es que en ocasiones hay problemas que no son enteramente de programación. Puede que el enunciado esté oculto y haya que llegar a él o puede ser cualquier otro tipo de problema en el que tengamos que hacer uso de nuestro conocimiento general de informática o pensamiento lateral para resolverlo. La verdad es que este tipo de problemas le aportan frescura y variedad a los concursos.

Además suele haber algún tipo de premio para el ganador o los que hayan quedado en los primeros puestos. Aunque el premio sea lo de menos, le da un extra de competitividad que te motiva a dedicarle más esfuerzos.

La desventaja de este tipo de concursos es que son puntuales. Se celebran en fechas concretas y tienes que adaptarte a ellos. Por fortuna varios de ellos dan acceso a los problemas de ediciones anteriores, por lo que pueden seguir haciéndose para desengrasar la máquina o ver qué tipo de problemas es probable que aparezca el siguiente año.

Voy a dar algunos ejemplos, para que podáis estar atentos a próximas ediciones o hacer problemas de las pasadas siempre que queráis. Tuenti lleva bastantes años organizando su Tuenti Challenge y podemos acceder a todas las ediciones pasadas. Este año han cambiado ligeramente y es la propia Telefónica (la compañía propietaria de Tuenti) la que ha organizado el Code Challenge, pero lamentablemente hasta la fecha no tienen publicados los problemas de esta última edición.

Edición pasada del Tuenti challenge

Otra compañía que apuesta muy fuerte por este tipo de concursos es Google, que una vez al año organiza dos concursos a nivel mundial. Por un lado tenemos el Hash Code, que es un concurso que se hace en equipos de hasta 4 personas y tiene dos rondas de unas pocas horas de duración en distintos días. Se puede hacer en cualquier sitio, pero hay unos cuantos certificados por Google al que cualquier equipo puede ir y sentir más el ambiente competitivo al estar junto a otros equipos (además de obtener merchandising de Google). El otro concurso que organizan es el Code Jam, también a nivel mundial pero esta vez se trata de una prueba individual y en la que dispones de varios días para hacer todos los problemas que puedas. En ambas tienes acceso a las ediciones previas.

Edición pasada del Hash Code

Edición pasada del Code Jam

Además algunos eventos tecnológicos también cuentan con concursos de programación. Puede que sea directamente en el propio sitio en el que se organizan o bien online,y que sea en cualquier época, en la fecha en la que se organiza el evento o unos días antes. En estos eventos podríamos nombrar a Codemotion o a T3chFest.

Por último mencionar también la existencia de hackatones, que son un estilo parecido de concurso en el que se normalmente se participa en grupos de 2 a 5 personas (aunque hay algunas excepciones cuya participación es individual). La diferencia, por lo general, está en que están más enfocados en el producto final y el objetivo suele ser entregar un MVP de la idea de producto que teníais en mente. Además, mientras que los otros suelen darse casi en exclusiva en el contexto de eventos tecnológicos, estos no tienen por qué.

Webs de ejercicios de programación

Los concursos están muy bien, y yo siempre que puedo apuntarme a uno y la agenda me lo permite suelo participar. Pero tienen dos pegas. Por un lado están acotados en el tiempo y aunque muchos cuelgan los problemas de pasadas ediciones no dan ninguna herramienta que permita corregirlos o dar feedback. Y por otro que en algunos casos los problemas son bastante grandes y no puedes hacerlo en un rato que tengas libre.

Como alternativa para resolver estos dos puntos tenemos diversas webs que nos ofrecen distintos tipos de ejercicios de programación. Las hay muy variadas, como veremos a continuación, pero tienen en común que están más orientadas a la práctica o el aprendizaje de conceptos muy concretos. Además no es raro que cuenten con algún tipo de comunidad gracias a la que podemos aprender cosas nuevas y un sistema de progresión para incitarnos a seguir practicando.

La primera que nos encontramos es Code Wars, donde podemos ver todos los puntos que hemos comentado. Por un lado tiene un sistema de progresión en el que tenemos que resolver problemas de programación para subir de nivel. Además, aunque hay unos cuantos tests para que tengas un ejemplo del funcionamiento, para completar el problema hay que pasar una serie de tests para los que no sabemos la entrada y que forzarán los límites de nuestros algoritmos. El principal factor diferenciador de esta página es que, en mi opinión, potencia mucho la comunidad. Cuando solucionamos cualquier problema tenemos acceso a las soluciones de los demás miembros para que podamos puntuarlas, comentarlas, ver los comentarios de otra gente y, en definitiva, aprender de ellos. Además tiene distintos modos de práctica y un foro para poder comunicarnos con otros usuarios. Por último, está asociada con Qualified para que las empresas puedan publicar ofertas de trabajo y tener mayor visibilidad sobre las capacidades técnicas de los candidatos.

Ejemplo de un ejercicio en Code Wars

La siguiente es Codechef, una página india (aunque el contenido está en inglés, no os preocupéis) con ejercicios de programación de distinto nivel de dificultad. La interfaz es simple, pero cumple muy bien su propósito. Con respecto al contenido, en este caso estamos ante algo mixto. Por un lado tenemos ejercicios de programación y por otro un calendario con distintos concursos. Además tiene un foro de soporte donde poner tus dudas o ayudar a otros miembros de la comunidad. Admite gran cantidad de lenguajes, entre los que se incluyen los más conocidos, por lo que no tendréis problema en encontrar el vuestro.

Ejemplo de un ejercicio en Codechef

En la misma línea tenemos LeetCode, pues también combina concursos con ejercicios. Está bastante orientada a buscar trabajo y tiene un apartado importante para realizar entrevistas técnicas, pero obviamente se puede usar sin ese fin. Es bastante interesante porque agrupa distintos tipos de ejercicios de corte similar para hacer packs con los que aprender o practicar un concepto determinado. Por supuesto también tiene un sistema de progresión y admite bastantes lenguajes.

Ejemplo de un ejercicio en LeetCode

Project Euler es ligeramente distinto a lo que vamos a encontrar en otros sitios. En vez de tener que subir nuestro código, se nos darán unos datos de entrada con los que trabajar y un cuadro de texto para escribir y validar el resultado. Por tanto en esta ocasión no vamos a tener feedback de ningún tipo ni vamos a tener datos de entrada complejos ocultos que vayan a intentar buscar un punto flaco en nuestro código. Por lo tanto podemos hacer optimizaciones locales que se ajusten a los datos que tenemos. Así mismo, no tenemos necesidad de programar un sistema para coger la entrada de un fichero o de teclado o de validar esas mismas entradas. Eso ya va a ser cosa nuestra, hasta que punto queramos centrarnos únicamente en el problema en sí o dar un pequeño extra. Además tiene un foro para los participantes y un sistema de progreso por niveles. Pero una de las cosas que más llaman la atención (y que sin duda es el principal motivo de su nombre) es que todos y cada uno de sus problemas son matemáticos. De todos los que he utilizado es el único que, por su modo de validar el resultado, no tiene ningún IDE o editor de textos incluído, así que podrás usar el que prefieras. También implica que podemos usar el lenguaje que queramos, como si lo queréis hacer a mano (aunque eso le quitaría toda la gracia como ejercicio de programación).

Ejemplo de un ejercicio en Project Euler

Y también muy distinto a lo que solemos encontrar está CodinGame. Una plataforma muy enfocada al aprendizaje de nuevas habilidades, conceptos y lenguajes, y todo ello mediante la programación de juegos. Cada uno de ellos pone en práctica un concepto distinto que va a señalar de antemano, de forma que podemos escoger el que queramos practicar. Además hay algunos juegos en los que tienes que competir contra otros jugadores en tiempo real en batallas de solo unos pocos minutos con retos bastante interesantes. Personalmente uno de los que me parecen más interesantes es que en vez del enunciado de un problema te dan distintos ejemplos de uso, y a partir de ahí tienes que averiguar las especificaciones. También tiene un apartado de programación de bots. Además cuenta con distintos medios para que la comunidad pueda ponerse en contacto, así como la búsqueda de trabajo.

Ejemplo de un ejercicio en CodingGame

El caso de The SQL Murder Mystery es bastante original y es un concepto que me ha gustado mucho. En lugar de los típicos ejercicios de programación, aquí se nos pone en la piel de un investigador y tendremos que resolver un crimen. Lo interesante es que solo podemos usar SQL para, a partir de un par de datos, navegar por las tablas que tenemos a nuestra disposición hasta dar con la solución. A pesar de que no tiene ejercicios al uso, he decidido ponerlo en esta lista porque cumple perfectamente con el objetivo de ayudarnos a desengrasar y mejorar nuestras habilidades técnicas en SQL, que viene muy bien y muchas veces lo tenemos olvidado. Por supuesto es relativamente corto y no hay variedad de casos, pero me ha parecido lo suficientemente interesante para estar en esta lista.

Enunciado de The SQL Murder Mystery

Por supuesto, mencionar que estos son solo los que yo personalmente he probado. Hay muchos más, algunos exclusivamente dedicados a practicar la maquetación de webs. Estos que he comentado me han parecido interesantes bien por el tipo de problemas que ofrecen, bien por las opciones de comunidad que ofrece o cualquier otro aspecto. Y además se adaptan bastante bien a un perfil de backend como el mío.

Además también mencionar que en alguno de ellos es bastante sencillo buscar la solución en algún otro sitio. Pero no estamos haciendo esto porque nos pongan una pistola en la sien. Lo hacemos por diversión, por mejorar o poner a punto nuestras habilidades, por aprender cosas. Y si no damos nosotros mismos con la solución no lo estaremos haciendo.

Recordatorio de que hay que aplicar el sentido común.

Cuando usamos este tipo de recursos para mejorar nuestras habilidades seguro que estamos deseosos de poner en práctica lo que hemos aprendido (y esto se aplica también a cada vez que asistimos a una charla, evento o cuando un amigo nos comenta una nueva tecnología). Todo conocimiento es bueno, pero hay que tener sentido común a la hora de usarlo.

Debemos entender que estar trabajando y hacer estos ejercicios son situaciones distintas. Normalmente trabajamos con compañeros, por lo que la legibilidad de nuestro código es tan importante como que sea eficiente. Si por ahorrar 3 décimas de segundo en una operación que apenas se usa vamos a provocar que un compañero tenga que perder 10 minutos en entender nuestro código le estamos haciendo un flaco favor. Y en caso de que sea crítico que ahorremos ese tiempo siempre podemos hacer uso de comentarios para explicar la razón (que no el cómo, a no ser que sea muy rebuscado).

Además puede ser que el equipo ya tuviese una manera estandarizada de enfrentarse a un problema recurrente. Por mucho que creamos que la nuestra es mejor no podemos actuar como un lobo solitario e implementarla cuando nos apetezca. Tendremos que ponerlo en conocimiento del equipo y llegar a un acuerdo conjunto (y documentarlo si creemos que es necesario).

Otra cosa es si estamos trabajando en un proyecto personal o trabajamos solos por el motivo que sea. Ahí obviamente podemos hacer lo que queramos. Pero mi consejo es el mismo, porque quién sabe si nuestro yo futuro se acordará o pensará igual cuando dentro de unos meses llegue a ese código: favorecer la legibilidad y, sobre todo, tener sentido común.

Dejar respuesta

Please enter your comment!
Please enter your name here