Inspiraciones


El post original se puede leer en mi dev.to.

Te pasa de querer programar algo y no saber que? tengo un bloqueo de ideas hace tiempo, quiero hacer algo con xxx y no se me ocurre qué /cazzo/ hacer

Así empezó la conversación con un amigo. Después de hablar un poco, creo haber destilado un par de ideas que me gustaría compartir

¿Por qué yo?

Q: Habiendo miles de otros posts de miles de otras personas -muchas mejor calificadas que yo-, por qué leer este?

A: Creo que mi enfoque es mucho más especifico del que eh encontrado: Proyectos personales de programación, cuyo principal driver1 es aprender algo nuevo.

Prove it

En mi porfolio (florius.com.ar) podrás ver alguno de los proyectos más recientes y más interesantes. No son muchísimos, pero son algunos. Siempre estoy tinkering2 con algo nuevo.

Fuentes de inspiración

Voy a separar la inspiración en 3 categorías, no porque una sea más “fácil” o menos costosa; si no porque he conocido personas que están muy entonadas con una u otra categoría, y tal vez alguna de esta resuene más contigo.

Level 1 - Directo

En el trabajo, me pasa a veces que estoy haciendo algo, y pienso

“Uh, esto sería super guay si fuese así”

Pero caigo en la realidad de que no habría forma que pueda completar el feature en el tiempo si hiciera todo ese cambio, ni que me aprueben un PR si agrego siete millones de bibliotecas 😅. Entonces me lo anoto: “Estaría bueno una aplicación que haga X o una biblioteca que haga Y”.

Tiene una aplicación real, concreta y directa (por eso el nombre); que si existiese la usaría aquí y ahora. Pero no existe.

Algunos ejemplos de esto mismo

  • GitHub :: koncierge 🔔: Necesitabamos segmentar clientes según un u otro atributo; entonces se me ocurrió que un DSL parecido al query-dsl de Mongo podría verse bien. Finalmente terminamos utilizando algo similar en produción!
  • GitHub:: Apples and Oranges: Tambien en el trabajo quería una forma de testear un código que tenía todos BigInts, algunos números tenían impuestos otros no; entonces no podía sumar libremente unos con otros; por lo que me ocurrió una librería para “tagear” objetos.
  • GitHub :: marble-OS: En la facultad, para probar y evaluar trabajos prácticos, muchas veces necesitabamos lanzar programas de manera sincronizada. La mejor herramienta hasta el momento era ser una persona alta que pueda presionar en dos computadoras diferentes la tecla ↵ Enter.

Para este tipo de proyectos, recomiendo siempre estar atento a hacerse este tipo de preguntas:

  • Este feature/bug/issue en el que estoy trabajando: ¿Tiene alguna parte súper interesante que podría extraer en su propia cosa?
  • ¿Puedo desacoplar completamente esta sección de lógica en su propia cosa?
  • Veo que alguien tomó esta decisión de arquitectura; ¿por qué no lo habrán hecho diferente? ¿puedo hacerlo de otra forma?

Level 2 - Concretization

Otra “forma” que suelo descubrir nuevas ideas es encontrar un blog post o algo que sea una idea abstracta, y convertirla en algo más concreto. No es casual que me guste mirar videos sobre matemática!

En esta categoría no empiezo de un proyecto como en la categoría anterior, si no que llego a un proyecto desde algo más abstracto.

Algunos ejemplos de mis proyectos que surgieron a partir de esta forma de encarar problemas:

Para este tipo de proyectos recomiendo pensar cada vez que escuches o leas algo (no importa de que; no digo oque hay que solo hacer uso de matemática! Estoy seguro que otras ramas de la ciencia son tan aptas a esto.) pensar:

  • ¿Cómo podría usar eso?
  • ¿En qué universo esta idea sería útil?
  • ¿Veo que dice que se puede usar en X e Y; se podrá usar en Z?

(bonus: Creo que este mentalidad ayuda mucho a adquirir nuevos conocimientos. Más que una atención pasiva sobre un tema nuevo)

Level 3 - Snapshot

A mi gusto, la mejor forma de inspiración: Cuando pienso solo en una interacción, en una pantalla, en un link.

  • GitHub :: es-dia-de-helado-de-fruta: Mi novia me dijo que hoy no era día de helado de fruta, porque hacía mucho frio. Sería ideal tener una página que le pueda pasar para demostrarle la temperatura
  • FrasaL: Tienes un amigo que habla español traduciendo literalmente verbos preposicionales del ingles? Dice cosas como “velocidad de dios” en vez de “buena suerte”, y quieres pasar una página como DeepL para ayudar a otras personas a comprenderle?
  • GitHub :: delCanioBot: Necesitas un bot que genere imágenes de Nicolás del Caño, a razón de el meme del año, Nico del Caño?

A veces estos chistes incluso terminan siendo aplicaciones de verdad, como una aplicación para coordinar car pooling (GitHub :: catapult).

No tengo una buena recomendación para estos proyectos “chistes”, más que intentar hacerte pensar que no necesariamente un proyecto tiene que ser completamente serio; y son muchas veces estos proyectos que se combinan y que sirven de lugar para aprender nuevas tecnologías o metodologías. Y te podrían brindar un armazón para proyectos al futuro.

Level 9000 - Todas las anteriores

Lamentablemente, la “creatividad” no es un proceso súper directo. A veces algo sale por un lado, a veces por otro. A veces 2 ideas inconexas se conectan en una idea mejor. Personalmente, me gusta escribir estas esbozos de ideas en un receptáculo físico. hay quienes prefieren un archivo en la computadora. Hay quienes tienen varios pre-ideas en la mente a la vez y nueva información decanta esas pre-ideas en un proyecto.

Gracias por tu tiempo, y espero que algo de todo esto te ayude a encontrar inspiración!


  1. driver: Un factor que hace que suceda o se desarrolle un fenómeno particular. 

  2. tinkering: Intentar reparar o mejorar algo de manera casual o poco metódica. 

  3. otp: One-time password 

Melian

Random Posts

koncierge Una librería para segmentar usuarios

La historia de una librería para evaluar variantes de tests AB, dado una definición de un experimento con un DSL parecido a Mongo y un contexto. #xpost

carbn

We are constantly trying to write code that easier for a human to comprehend. These high-level languages gave us the power of expression. And we like this!

We want more expression, and safety in the code we write; but we also want code that humans can understand and reason about. So what if we re-think our current software stack? And have humans evaluate other human’s code.

carbn is a Humans-as-a-Service, cutting edge technology that makes your code run in the distributed brains of our agents.

#raving

Discovering Crystal

I was working with Ruby on Rails on a project with other very skilled Ruby and Rails developers. As many others working with Ruby, we liked it’s syntax, it’s ease of use, it’s dependencies (gems) but had some issues with it. Every programming language does. As luck would have it, I was also in close contact with some very vociferous advocate of Crystal. You can imagine, with the tagline: “Fast as C, Slick as Ruby”, I was hooked. #xpost

Limit the Problem Space!

Simply put, the “problem space” is the entire spectrum of inputs that exists in the process of finding a solution to a problem. How can we make our code less error-prone? In this post I explore some of the ways we can do so. Join me! #xpost