Consejos no técnicos para programadores (Y no programadores) en sus 20’s.

Hace un par de días vi un Tweet de alguien que decía:

Mañana cumplo 20.

¿Qué cosas te hubiera gustado entender antes de los 20s?
¿Qué necesito saber? 👀

Cualquier consejo, lo acepto 🌼

Me llamó mucho la atención porque a mi me hubiera gustado tener más personas que me aconsejaran en esa etapa de mi vida, ahora mismo tengo 33 años, no me siento experto en la vida pero he aprendido una que otra cosa que me habría gustado saber antes, respondí ese Tweet pero me gustaría profundizar más, así que aquí te dejo esos consejos y otros más que no cabían en el Tweet.

Disclaimer (Se siente chingón usar esa palabra aunque no estor seguro de qué significa exactamente 😂): Esto me funcionó a mí, puede que algunos consejos no te hagan sentido en tu situación. Los consejos no llevan un orden de importancia.

1. Ahorra e invierte, aunque sea poco pero de forma constante.

Lo sé, es una m@m@d@ que te digan que inviertas tan joven, ganando $100 USD al mes, con tanta vida por delante y sin que siquiera te den una idea de en qué invertir. En esta etapa de la vida es más importante el hábito que la cantidad, puedes empezar ahorrando una cantidad pequeña y fija o un porcentaje (10% por ejemplo) de lo que ganas, y mientras tomas el hábito te recomiendo aprender sobre inversiones ¿Dónde? Dos libros buenos para empezar son I will teach you to be rich de Ramit Sethi y Cómo piensan los ricos de Morgan Housel, ambos libros tienen títulos que parecen más scam que email de príncipe nigeriano que pide dinero, pero son muy muy buenos, te darán una idea de cómo administrar tus finanzas personales y por donde empezar a invertir, otro buen lugar que te recomiendo es el blog de Perro Dinero, me gusta porque explica las cosas informalmente, como si le hablara a un amigo. En este punto hay un concepto muy importante: Interés compuesto, esto en resumen significa que si inviertes poco pero constante esto se irá acumulando y creciendo como bola de nieve, esto en 10 años te dará una super ventaja mucho mayor que si empiezas a tus 30, aunque a los 30 inviertas mucho más. ¿Por qué lo recomiendo? Me quiero retirar a los 52 años, si hubiera empezado a invertir a mis 20s ahora mismo tendría el doble de dinero en mi cuenta de banco y podría hacerlo como a los 45, además gracias al hábito de ahorrar, nunca en la vida laboral me ha pasado que batalle para llegar a fin de mes. Y por cierto, algo muy importante, inicia a ahorrar hoy, no mañana, no la siguiente semana, si tienes $10 USD ahorra eso hoy. Tal vez en otro post profundice más en esto, si tienes dudas me dices con confianza.

2. Aprende inglés

No es 100% indispensable saber inglés para tener un buen trabajo, pero si quieres estar por encima de los sueldos promedio lo es, en especial en programación pero también en otras carreras, además de que la mayoría de los cursos, documentación, artículos actualizados, etc. están en inglés. ¿Por qué lo recomiendo? Yo no salí de los sueldos promedio hasta que lo aprendí.

3. Si te gusta viajar, hazlo todo lo que puedas

No ha habido una sola vez en que diga «No hubiera viajado a ese lugar». Si puedes viajar y te gusta no pierdas la oportunidad de hacerlo, pero ahorra para ello, no vayas a sacar préstamos y cosas de esas 😅. Es un cliché decir esto pero las experiencias valen más que las cosas materiales a largo plazo, hablarás y recordarás tus viajes toda tu vida, además de todo lo que aprenderás.

4. Evita caer en el juego de ver quién tiene más.

No puedo hacer suficiente énfasis en la importancia de este consejo. Si entras en el juego de ver quién tiene más entre tú y tus amigos ya perdiste: Tu vida va a estar dictada por los que te rodean, vas a gastar tu dinero y tiempo en complacer a los demás o encajar con ellos. Esto es peor aún si te comparas con las vidas falsas de Instagram de personas que ni conoces. Tómate un tiempo en pensar cuáles son las cosas que en verdad aportan valor a tu vida, enfócate en ellas y no dejes que las demás te afecten. Por ejemplo: En algún punto aprendí que no me interesan cosas como la ropa, el carro y cosas por el estilo, así que trato de no gastar mucho dinero ni tiempo en esas cosas, pero algo que sí me hace feliz son los libros (Algún día tendré mi biblioteca personal), cosas que mejoren mi salud (Como correr o comer saludable), conocer lugares nuevos y que el tiempo que paso con mi familia y amigos sea de calidad, por eso trato de maximizar todo eso, por cierto, un hobby que tomé últimamente son los juegos de mesa porque creo que ayudan con el tema de la familia y amigos. Creo que este es el consejo más importante desde el punto de vista de la felicidad.

5. Si te gusta emprender, inténtalo.

A menos que tengas mucho dinero y puedas arriesgarte antes sin problemas, este consejo lo recomiendo más llegando a los 30, ya que tengas más experiencia y sólo si tienes la espina de emprender, si lo haces ten en cuenta que probablemente será lo más difícil que hagas en tu vida, necesitarás sacrificar muchas cosas (Tiempo, amigos, fiestas, dinero, etc.) así que no lo hagas solo porque crees que es lo que está de moda o lo que te va a dejar más dinero. Dejando esto de lado, emprender es una de las cosas mas estimulantes por las que he pasado y las que más aprendizajes me han dejado, si sientes que es tu vocación ¡Anímate!.

6. Lee

Así como los deportes, la guitarra o la pizza con piña 🤮, leer no es para todos, si de plano no te gusta no te recomiendo forzarlo, pero sí te invito a que lo intentes, inicia con libros de temas que te gusten o historias que creas que pueden ser interesantes. Hay dos creencias que creo que son erróneas con respecto a la lectura: La primera es que creemos que la lectura nos gusta o no nos gusta y ya, pero yo lo veo más como correr, al inicio es pesado, tedioso, incómodo y puede ser que no nos guste, pero conforme lo haces más le vas tomando sabor, luego quieres correr 5k o hasta un maratón, lo mismo sucede con la lectura, al inicio es muy pesada y puede tomarte un mes o mas acabar un libro pequeño pero luego quieres leer más libros. La segunda creencia errónea es que hay mucho esnobismo alrededor de los libros: que eres buen lector porque lees los clásicos o malo porque lees a Paulo Cohelo (Por favor no leas a Cohelo 😅), dejándose de bromas cualquier lectura es mejor que no hacerlo y no hay lectura mala, yo empecé leyendo Harry Potter (Odiado por muchos) y aún después de casi 250 libros diferentes leídos los sigo releyendo porque es de mis historias favoritas. ¿Por qué lo recomiendo? Mucha información solo esta disponible a través de los libros, aprendes demasiadas cosas a la vez que te entretienes, te ayudan a tener más empatía y un mejor pensamiento crítico. Beneficios de leer

7. A donde vayas haz buenos amigos.

Me siento raro diciendo esto porque me considero introvertido, pero he tenido la suerte de que en todos los trabajos/escuelas en las que he estado he hecho amistades duraderas, tengo amigos en un montón de lugares, y no solo eso, sino que son lo suficientemente cercanos para pedirles un favor o incluso quedarme con ellos si voy a sus ciudades. Dentro de este consejo te recomiendo hacer un «Mantenimiento de amistades», con la pandemia es más difícil ver a los amigos pero siempre procuro llamarlos o mandarles mensajes solo para saludar, algunos contestan rápido, otros duran días pero contestan, gracias a esto es muy chingón que cuando finalmente vuelves a ver a un amigo(a) se traten como si se vieran todos los días. ¿Algo genial? He trabajado para unas 7 empresas, en 5 de ellas algún amigo me recomendó.

8. Siempre habrá síndrome del impostor, acéptalo e ignóralo lo más que puedas

Esto no es para presumir ni mucho menos, es para dejar claro un punto, llevo como 12 años trabajando, he sido desde vendedor de juguetes hasta director de ingeniería, he tratado de emprender como 4 veces, tengo este blog, he sido profesor de universidad y de cursos online con casi 40000 estudiantes en 100 países, tengo una maestría en Machine Learning graduado con honores y actualmente trabajo para la empresa más grande de renta de scooters en el mundo como Mobile Tech Lead, aún así cuando platico con mis amigos por Whatsapp pienso «No mames, estos cabrones saben un montón y yo no sé nada», cuando veo a otros ingenieros en mi trabajo pienso «Uff estos saben tanto que los demás van a ver que yo soy un bruto y me van a despedir». El síndrome del impostor es esa cosa que te hace pensar que todos saben o son mejores que tú y no mereces estar donde estás, platicando con muchos de los que conozco he concluido que no soy el único, TODOS se sienten así. Así que la próxima vez que lo sientas (Y lo harás), voltea hacia tu izquierda y luego a tu derecha, sí, esas dos personas que viste también lo sienten.

Espero que estos consejos te sirvan aunque sea un poco, gracias por leerme y si en algo puedo ayudarte con mucho gusto lo haré.

¿Cuánto gana un maestro de cursos online y cómo funciona esto de hacer cursos? Mi experiencia como maestro después de 8 años en Udemy.

En 2014 me propuse crear un curso en línea de Matlab, la principal herramienta que conocía y usaba en ese momento mientras hacía mi maestría. Mentiría si digo que no lo hice para ganar dinero extra pero también lo hice porque me di cuenta de cuatro cosas:

  1. Muchas de las materias que había cursado tanto en ingeniería como en mi maestría usaban Matlab.
  2. Como la mayoría de nosotros no sabía Matlab, a veces nos enfocábamos más en aprender a usarlo que en aprender el contenido de las clases en sí.
  3. No encontraba un curso en español que enseñara lo que necesitábamos para llevar los cursos sin problemas.
  4. Me encantaba la enseñanza, ya daba clases a alumnos en la universidad así que pensé “¿Por qué no llegar a más personas?”

Entonces me compré un micrófono Blue Snowball en $35 USD y sin tener experiencia en crear cursos en línea empecé a grabar incluyendo lo que yo creía que un curso de Matlab debería tener.

Ahora tengo 8 años desde que lancé mi primer curso, después del cual vinieron otros, mi principal plataforma ha sido Udemy y me gustaría compartir mi experiencia con ellos. Pero primero algunas estadísticas del desempeño de mis cursos.

Hasta este momento tengo seis cursos, cuatro tienen un precio y dos son gratis:

  • Java puro (gratis)
  • Kotlin puro (gratis)
  • Android con Java
  • Android con Kotlin
  • Matlab
  • Solidworks (En conjunto con otro profesor)

Al momento de escribir esto tengo 36321 estudiantes en 99 países.

Claro que la mayoría de ellos son en los cursos gratuitos, y se han inscrito en el último par de años que empecé a hacer más ruido en mis redes (Sin pagar marketing)

En cuanto a mis reseñas puedo decir que estoy orgulloso, todos mis cursos tienen un promedio de 4.5 o más y esta ha sido la variación, después haré otro post relacionado a por qué creo que he tenido buenas calificaciones pero en resumen ha sido por la atención que doy a mis alumnos, siempre trato de responderles, incluso cuando tienen dudas fuera del curso, como dudas en sus carreras o en sus vidas, estas son las estadísticas de las calificaciones de los cursos hasta ahora:

Ahora, en tráfico y conversión, estos son mis datos actuales, Tasa de conversión es el porcentaje de alumnos que adquieren el curso del total que visitan la página, creo que con un buen marketing podría aumentar el número de visitas pero no se si eso aumente también la Tasa de conversión, como he dicho antes soy totalmente novato en este campo:

Por último, las ganancias, yo veo a esto de los cursos como un ingreso extra, tal vez algún día lo haga a tiempo completo pero lo veo muy lejos, en promedio en el último par de años es de unos $150–$300 USD mensuales, en los meses buenos que suelen ser Octubre y Noviembre hago unos $500 USD y en los meses malos alrededor de $100 USD. Como pueden ver el crecimiento ha sido orgánico. También cabe señalar que no he sido muy constante con mis redes sociales ni con mi canal de Youtube, la única constancia que he tenido es responder siempre a mis alumnos.

Ahora pasemos a mis impresiones con Udemy:

Hasta ahora creo que Udemy sigue siendo la empresa más conocida de cursos en línea en el mundo, con una de las menores barreras de entrada, lo único que necesitas para grabar un curso es saber algo que quieras compartir, una computadora decente y, eso sí, un micrófono de buena calidad, aunque cada vez son más económicos. Subir videos es súper fácil una vez que los tienes grabados y lanzar tu curso se hace en un par de horas, simplemente hay que agregar una descripción, a quien va dirigido y que aprenderán tus alumnos al terminar.

Cada vez que alguien va a empezar a grabar cursos y me pide mi opinión les recomiendo esta plataforma ¿Por qué? Simplemente porque es la más conocida y la que vende más, he intentado con otras y con ninguna me he acercado siquiera a los mismos resultados. Cabe señalar que una de las cosas que más he querido aprender pero hasta ahora no he logrado es el marketing, por lo que en mis cursos he hecho cero marketing, han sido solo un par de veces las que he hecho una promoción pagada en mis redes (con resultados mediocres) y Udemy hace casi el 100% de las ventas de mis cursos. Si quieres empezar en este mundillo creo que es la opción indicada.

Ahora, no todo es color de rosa, Udemy también tiene algunas cosas que nublan la experiencia, algunas bastante malas y una que está haciendo que quiera independizarme a largo plazo.

Al iniciar con mis cursos el convenio con Udemy era que si ellos vendían mi curso iba a ser 50% para ellos y 50% para mí, pero Udemy también te permite crear cupones o enlaces de referidos, entonces si yo vendía mi curso con uno de esos cupones el 97% iba a ser para mí, se oye muy genial pero después descubrí que no era tanto.

En primer lugar, ya es bastante conocido que Udemy siempre tiene descuentos, SIEMPRE. Todo mundo sabe esto, entonces aunque valúes tu curso en $50 USD acostúmbrate a que Udemy cree cupones constantemente y lo venda en $12 USD, entonces, en vez de ganar $25 USD, si Udemy vende tu curso solo te quedan $6 USD, pero eso no es todo, sino que más tarde sacaron otro tipo de ventas, que todavía no entiendo al 100% pero que es algo así: Si alguien entra a su programa de afiliados y vende un curso, a mi me toca solo el 25%, entonces en vez de $25 USD ahora me tocan solo $3 USD por venta ¿Ya no suena tan bonito? ¿O sí?

Lo de arriba es un problema, pero yo trato de verlo por el lado amable, después de todo es una venta extra por la que no tuve que hacer marketing. El problema más grande, y por el que pienso independizarme a largo plazo si algún día me dedico a esto de lleno porque si lo veo como algo crítico, es debido a lo siguiente:

Como te dije arriba, si yo vendo mi curso me toca a mi el 97%, entonces he intentado hacer ventas por mi lado en ciertas ocasiones, pero pasa este proceso:

  1. Creo un cupón, supongamos que de $20 USD
  2. Se lo doy a alguien que quiere mi curso y me contactó por Facebook por ejemplo, esa persona da clic para comprarlo, el enlace la manda a Udemy a la página de mi curso
  3. ¡PUM! Udemy le muestra un bannersote que dice “¡Espera!, yo te lo doy en $10 USD”
  4. La persona se lo compra a Udemy
  5. En vez de tocarme los casi $20 USD solo me toca el 50% de “La venta que hizo Udemy”, es decir $5 USD.

NOTA IMPORTANTE: Esto no lo he podido comprobar, solo es una intuición de lo que me han dicho algunos alumnos y de que a veces vendo un curso en $20 USD y de repente veo que el alumno lo compró con un cupón creado por Udemy y solo me tocaron $5 USD, otra cosa que me hace sospecharlo es que normalmente los de Udemy te responden enseguida cuando tienes dudas, pero cuando les he preguntado si esto sucede siempre me dejan en visto.

No quiero sonar quejoso, es solo lo que me ha sucedido ¿Por qué no me independizo? creo que aún así Udemy me trae cosas buenas, hace ventas por mi y no tengo que preocuparme por el marketing porque no me da tiempo, hago esto como un proyecto alterno, si lo hiciera como full time tal vez lo consideraría más.

Creo que esto de los cursos en línea puede ser muy redituable si eres más constante, aunque sí es una carrera a largo plazo, los retos más grandes a los que me he enfrentado es crear una comunidad que conozca más mi modo de enseñar (Directo y al grano) y darme el tiempo de hacer esto con más constancia y consistencia, estoy seguro que si lo hiciera podría vivir de esto en unos años cuando me retire, pero por ahora tengo otros proyectos entre manos. Otra conclusión que saco es que más allá de las ganancias, algo que me ha mantenido queriendo seguir con esto es cuando mis alumnos me dicen que gracias a mis cursos o mis consejos consiguieron un trabajo o subieron de puesto, sonará trillado pero eso no tiene precio. Ninguna reseña refleja mejor lo que mis cursos aportan a que un alumno me mande un mensaje personal de gratitud.

En otros posts estaré subiendo más cosas sobre mi experiencia, espero que te haya servido de algo si tienes interés de enseñar o simplemente en generar un ingreso extra.

Si te ha gustado el post puedes seguirme en Twitter, seguiré posteando sobre este y otros proyectos que siempre estoy construyendo.

Como conseguí mi primer trabajo de programador sin ser ingeniero de software y lo que aprendí de ello.

Este post es más una anécdota personal que otra cosa, pero al final pondré lo que aprendí de ella. Quien sabe, puede ser que alguno de mis errores te sirva para no cometerlo.

Tal como dice en mi perfil en este blog, mi carrera no es como ingeniero de software, sino como ingeniero en mecatrónica, que si bien están relacionadas, no son lo mismo para nada. Para los que no sepan mecatrónica se encarga de juntar la mecánica con la electrónica, agregando toques de programación, pero principalmente orientada a microcontroladores. Al menos en mi carrera no vimos absolutamente nada de desarrollo web, móvil, etc. Entonces ¿Cómo chingados llegué a dedicarme de lleno a la programación? El resumen es que fue una combinación de suerte, curiosidad y atrevimiento.

Siempre me han interesado dos cosas: En primer lugar aprender lo más nuevo en tecnología, como implementarlo y hacer algo con ello, en segundo lugar emprender. Estas dos cosas hicieron que decidiera aprender iOS para programar en iPhone porque quería hacer una app por si me surgía una idea millonaria 🤑; el problema: No tenía para comprar un iPhone y cuando busqué un curso resultó que necesitaba una Mac que tampoco tenía así que me fui por Android, tomé un curso gratuito, resultó que necesitaba saber Java que tampoco sabía 😅 así que tomé otro curso de Java puro. En fin, aprendí lo básico para hacer aplicaciones súper sencillas, esto lo hice mientras hacía una maestría en machine learning, pero la verdad no le veía mucho futuro para lo que yo quería que era emprender.

En fin, al terminar la maestría volví a mi ciudad natal, pensaba tomarme un mes de vacaciones y empezar a buscar empleo relacionado con mecatrónica o con machine learning, aunque de esto último tenía pocas esperanzas. Pero después de solo un par de días de haber llegado mi primo al que le había contado que había tomado los cursillos estaba en la computadora y me dijo «Oye wey, aquí buscan a alguien de Android, ¿Tú sabes de eso que no?», revisé la solicitud de empleo y en efecto buscaban desarrollador de apps móviles con Android, como buen mexicano (E imagino que cualquier hispanohablante ya que todos nos parecemos en esto) pensé «Chingue su madre, vida solo hay una, voy a aplicar», ojo que yo solo sabía lo más de lo más básico no solo de Android sino de programación en general, pero envié mi currículum y no pasaron más de 15 minutos cuando me respondieron que me presentara al día siguiente a una entrevista.

Sobra decir lo nervioso que iba, lo gracioso es que un efecto de cuando me pongo nervioso es que además de las rodillas siento que me tiembla la mandíbula, pero creo que es solo una sensación mía que nadie nota (afortunadamente), bueno pues ese día iba temblando como pocas veces en la vida. Recuerdo solo dos de las preguntas que me hicieron, la primera era si usaba Eclipse o Android Studio, Android Studio acababa de salir ese año y es con el que había aprendido, así que pensé «Al menos en esta pregunta ya me fue bien», luego de varias preguntas me dijeron que iba a tener una semana de prueba donde tendría que implementar un login con la API de Facebook y otras cosas que involucraban hacer requests a internet, y aquí viene otra cosa graciosa, la segunda pregunta que recuerdo fue «¿Prefieres que las respuestas a los requests sean con XML o con JSON?», yo no tenía np idea de qué era XML ni JSON 😵‍💫😂, pero había escuchado algo de HTML entonces pensé «Bueno, si XML se parece en el nombre a HTML pues deben ser algo parecido» como JSON no me sonaba de nada le respondí que XML, me dijeron que empezaba ya al siguiente día, nos dimos la mano y me fui corriendo a mi casa a investigar qué demonios era XML y JSON, busqué mucha teoría y ejemplos y en todos ellos recomendaban usar JSON con Android por sencillez y porque las librerías se ajustaban mejor.

Llegué al siguiente día y una de las primeras cosas que le dije a mi jefe (Quien también fue quien me entrevistó) fue «¿Sabes qué? Pensándolo mejor prefiero JSON». Hice la primera semana de prueba y después de quemarme la cabeza día y noche pude lograr lo que me pedían y me quedé a trabajar, ahí aprendí a programar algo de iOS y también algo de web y lo que aprendí me impulsó a conseguir mi siguiente empleo en Estados Unidos, otra cosa curiosa es que una pregunta común en las entrevistas de trabajo que he hecho desde entonces es ¿Cuál ha sido uno de tus retos más grandes en un trabajo y que lo hayas podido resolver? y les cuento esta misma anécdota después de casi 10 años.

Ahora, esto es lo que aprendí:

  1. Si te gusta algo apréndelo sin importar si no va directamente ligado con tu carrera, la carrera no es la que nos dice qué es lo que haremos siempre, es muy válido cambiar. Yo ahora no volvería a mecatrónica, y no porque no me guste, pero la programación me gusta mucho más.

  2. El NO ya lo tienes, si te llama la atención un trabajo aplica a ello, lo peor es que te digan que no y si en serio te gusta mucho ese empleo, puedes preguntarles si puedes volver a aplicar en 6 meses por ejemplo. Si te contara las veces que me han rechazado en una empresa, fácilmente han sido más de 15.

  3. La parte técnica es más fácil de lo que parece al principio, la parte difícil es aventarse, tuve la suerte de haber quedado en esa empresa jeje, porque desde entonces no me importa mucho si siento que vale la pena arriesgarse. Claro que mucho ojo: Si estás en una empresa y quieres cambiarte a otra no te lanzas así nada mas, primero asegura el otro trabajo antes de renunciar, en esto «Nunca midas la profundidad del río con los dos pies al mismo tiempo».

  4. Normalmente estás más capacitado(a) de lo que piensas. El síndrome del impostor está muy cabrón. Yo iba muy nervioso, pero resultó que al final ya sabía más de lo que creía. Por si no lo sabes el Síndrome del impostor es el que te hace sentir que todos los demás son más inteligentes y habilidosos que tu, en especial al llegar a un nuevo lugar como un nuevo empleo, pero la realidad es que así como tu piensas eso los demás también los están pensando.

Bueno, espero que te haya gustado la anécdota y en especial que te haya servido al menos en lo más mínimo. Si es así te invito a suscribirte al blog y a la Comunidad Hackaprende y a dejar tus dudas y comentarios.

El .gitignore que mejor me funciona en Android

Para los que no lo sepan, .gitignore es un archivo que se puede usar en cualquier proyecto que use git y que sirve para ignorar otros archivos que no queremos en nuestro repositorio (Si no sabes qué es git te recomiendo este video), ya sea por seguridad o porque no son necesarios, por ejemplo archivos como certificados, contraseñas, etc. o autogenerados por la IDE que estamos usando. Dependiendo del proyecto es el .gitinore que necesitarás, este es el que yo uso en Android y me sirve de maravilla:

#built application files
*.apk
*.ap_
*.aab
                           
# files for the dex VM
*.dex
                            
# Java class files
*.class
                            
# generated files
bin/
gen/
                            
# Local configuration file (sdk path, etc)
local.properties
                        
# Windows thumbnail db
Thumbs.db
                
# OSX files
.DS_Store
                            
# Android Studio
*.iml
.idea
#.idea/workspace.xml - remove # and delete .idea if it better suit your needs.
.gradle
build/
.navigation
captures/
output.json 
    
#NDK
obj/
.externalNativeBuild

Lo tomé de aquí y me sirve muy bien, ojo que este documento puede ir cambiando conforme cambian las cosas en Android, aunque no es común que suceda. Como recomendación final, te recomiendo que tu primer commit sea agregar el .gitignore a tu proyecto para no tener problemas después ya que se complica un poco ignorar los archivos una vez que ya los pusimos en el repositorio.

Si te ha servido el artículo te invito a suscribirte al blog y a las redes sociales habidas y por haber 😛.

Parcelables en Android-Kotlin con ‘kotlin-parcelize’

Kotlin cada vez nos facilita más la vida, no dudes que en un futuro solo escribas «Kotlin, por favor desarróllame una app bonita sin errores y que se venta como pan caliente» y lo haga por sí solo (Es broma pero muchos clientes en serio creen que así funciona 😛)

Una de las cosas que se han vuelto muy fáciles es pasar objetos completos entre activities usando intents, para esto tenemos que implementar algo llamado Parcelable en la clase y esto convierte a los objetos a un formato que pueda ser enviado a través de un intent, a este proceso se le llama «serialización».

Supongamos que tenemos una clase Person:

Person(val name: String,
val age: Int,
val weight: Double,
val height: Double)

En vez de hacer esto:

val intent = Intent(this, OtherActivity::class.java)
intent.putExtra("name", person.name)
intent.putExtra("age", person.age)
intent.putExtra("weight", person.weight)
intent.putExtra("height", person.height)
startActivity(intent)

Podemos hacer esto:

val intent = Intent(this, OtherActivity::class.java)
intent.putExtra("person", person)
startActivity(intent)

Como dije arriba, para poder hacer esto la clase Person debe implementar Parcelable, antes esto era una tarea aburrida y repetitiva pero ahora basta con hacer lo siguiente: Primero agregamos el plugin de kotlin-parcelize en el archivo build.gradle(app)

plugins {
    id 'com.android.application'
    id 'kotlin-android'
    ...
    id 'kotlin-parcelize'
}

Luego vamos a la clase Person y agregamos @Parcelize en la parte superior, también implementamos Parcelable así:

import kotlinx.parcelize.Parcelize

@Parcelize
Person(val name: String,
       val age: Int, 
       val weight: Double, 
       val height: Double) : Parcelable

Y listo, ya con eso podemos pasar los objetos de tipo Person entre activities.

Espero que te sirva este pequeño consejo, si es así te invito a suscribirte y dejar tus comentarios o dudas o lo que sea.

¿Cómo tomamos decisiones para avanzar rápido en nuestros proyectos?

Hace un par de años trabajé como director de una empresa muy innovadora que tenía una buena cantidad de proyectos en construcción al mismo tiempo, realmente era muy genial estar desarrollando tantas cosas tan nuevas a la vez.

En fin, era mi primer puesto a tan alto nivel y tenía que tomar decisiones para la empresa todos los días a toda hora. Aprendí mucho, pero algo que me quedó marcado es que tomar decisiones es una tarea más agotadora de lo que parece, yo lo veo así: Cuando te levantas en la mañana tienes la batería recargada🔋 y durante el día cada decisión que tomas te quita un poco de energía, así que solo tienes energía para un cierto número de decisiones a lo largo del día, después de decidir una cierta cantidad de cosas quedas tan agotado que empiezas a tomar decisiones erróneas 😵‍💫. Un error que cometí fue el de no delegar lo suficiente cuando era posible y querer estar presente en cada decisión.

Cuando estás desarrollando un proyecto desde cero, las decisiones a tomar se elevan un 10 a la chorrocientas potencia (Me inventé ese número 😛, pero sí son muchas), desde decisiones de negocio como el nombre que llevará y cómo vas a cobrar, a decisiones de diseño como qué colores se manejarán, cómo será el logo y tipografías, pasando por decisiones técnicas como qué lenguajes de programación usarán.

Como ya he dicho en otras ocasiones, tengo 3 socios que hemos estado trabajando en diferentes proyectos por un poco más de 2 años, para esto hemos desarrollado muy informalmente una forma de tomar las desiciones que hasta ahora me ha parecido genial, nos ha funcionado de maravilla y por eso la comparto aquí.

En Bunu, cada uno de nosotros tiene habilidades muy diferentes y se queda con tareas afines a estas habilidades, por ejemplo hay alguien encargado de la electrónica, del diseño mecánico, de la programación, del marketing, de hacer relaciones con los clientes, ventas, etc.

Para tomar las decisiones sin que sea abrumador seguimos estos principios:

  • Si es una decisión sencilla como elegir el color de un botón, usar un redondeo en el diseño, usar una arquitectura de programación en concreto. El encargado toma la decisión sin tener que avisarnos a todos cada vez, si la persona lo desea se avisa en un grupo por chat que se va a hacer algo para pedir una opinión, pero como nuestra comunicación es asíncrona no necesariamente esperamos a que alguien o todos respondan para continuar trabajando. Muchas veces más que preguntar es presumir lo que estamos haciendo a los demás 😎. Esto también aplica si es una decisión donde quien está haciendo la tarea es el único experto del equipo en ese tema, por ejemplo si alguien sabe Android y los demás no, pues no tiene mucho caso preguntarles si usa una arquitectura en concreto. O si alguien sabe de web esa persona decidirá qué framework usar.

  • Si es una decisión compleja como el diagrama de negocios, cómo vamos a cobrar, si se va a necesitar un gasto fuerte para algo o el nombre del producto. Aquí sí lo comentamos entre todos, aunque tratamos de verlo con tiempo porque de nuevo, la comunicación es asíncrona y no esperamos que todos estén disponibles todo el tiempo, también estas cosas las vemos en una reunión semanal que tenemos los lunes.

  • Manejamos un software de chat llamado Basecamp para comunicarnos, en él creas tareas e invitas a los que pueden aportar a esas tareas, si alguien no está directamente relacionado con un tema y no cree que pueda aportar en él, ni siquiera entra en el chat y no se le pide que lo haga a menos que de verdad pueda aportar algo, también si siente curiosidad puede entrar como «oyente» sin problemas, tampoco es que lo excluyamos. Por ejemplo, supongamos que la tarea en curso es sobre diseño mecánico para fijar los tornillos de una pieza, la persona de ventas no tiene mucho que aportar ahí, entonces no se le invita al chat a menos que quiera hacerlo por curiosidad.

  • Asumimos que el 99% de las tareas no son urgentes, entonces tratamos de poner en espera las decisiones hasta el momento que se requieran. Tratamos de prever con tiempo si se necesitará algo en el futuro para irlo comentando con quien pueda ayudarnos y cuando lleguemos a ese punto ya se tenga una respuesta.

  • Asumimos que todas las decisiones que tomamos son para el bien del proyecto, si hay errores en una decisión no buscamos culpables. Confiamos en las decisiones que toman los demás sin estarles preguntando por qué están haciéndolo de esa manera, sí preguntamos, pero más por curiosidad o porque creemos que podemos aportar algo, nunca por micromanagement.

  • Creemos que la peor decisión es no decidir nada, vamos por rapidez y experimentación y evitamos el parálisis de análisis.

  • Finalmente, una pregunta que podría surgir es: si muchas decisiones se hacen sin tener que esperar o preguntar a los demás ¿Entonces cómo sabemos lo que cada quién está haciendo? En primer lugar, realmente no nos interesa qué está haciendo cada quién en todo momento, eso se ve en los resultados, en segundo lugar, como mencioné arriba, nos encanta presumir, siempre estamos posteando en el chat «Oigan miren lo que logré», «Uff esto no me sale ¿Alguna idea?», «Chequen como funciona esto». Es comunicación asíncrona pero constante. Por cierto, trabajamos 100% remotamente, si fuera en persona sería aún más fácil comunicarlo.

Es muy importante señalar que no es falta de interés en lo que están haciendo los demás, al contrario, si alguien necesita ayuda lo menciona en el chat y todos estamos dispuestos a ayudarnos, pero como dije al inicio del artículo, cada quien es experto en cosas diferentes y trabajar de esta manera nos ayuda a avanzar mucho más rápido, en especial en las etapas tempranas del proyecto.

¿Qué te parece esta forma de tomar decisiones? ¿Crees que funciona o es perjudicial? Te invito a suscribirte y dejar tus comentarios.

Hacklab: Listas con diferentes diseños en Android

Los headers, footers y listas con diferentes diseños en sus elementos son muy pero muy usuales en las apps móviles, solo falta ver estas apps famosas, todas ellas tienen más de un diseño en sus elementos:

Lo raro es que siendo tan usuales no haya muchos tutoriales sobre cómo lograr esto, es por eso que decidí hacer este Hacklab donde explico como implementar Headers, Footers y elementos con diferentes diseños en una misma lista. Para esto vamos a crear una app que muestre la cuenta en un restaurante.

Acá te dejo un enlace al Hacklab:

Si quieres ver más Hacklabs o saber qué es un Hacklab acá te dejo todos los que tengo, iré subiendo más cada vez.

Primera actualización de Bunu – Un servicio para los amantes del café

Hace un par de meses compartí un proyecto que estábamos iniciando y que ayudará a los amantes del café a que nunca se queden sin su taza mañanera. El servicio se llama Bunu y ahora que tenemos 3 meses desarrollándolo creo que es tiempo de poner una actualización de cómo nos ha ido y qué sigue, a ver si nuestro camino puede servir a alguien más.

Al iniciar el proyecto nos propusimos un tiempo de 3 meses para lanzar un MVP, (Si no sabes qué es un MVP te invito a ver este otro artículo). Ya llegamos a los 3 meses y estamos a punto de lanzarlo, aunque resultó todo un reto porque tuvimos que aprender cosas que ninguno del equipo era experto, la principal de ellas fue IoT (Internet of Things), aunque ¿Qué proyecto no necesita que aprendas algo? ahora ya tenemos una báscula totalmente funcional, segura y capaz de conectarse a internet, actualizar su propio software, entre otras características necesarias para que Bunu funcione como reloj suizo.

A la par con el desarrollo, hemos empezado una campaña de marketing, aunque todavía no a gran escala, pero ya tenemos páginas en redes sociales y empezamos a postear aquí y allá sobre lo que estamos haciendo. Muy pronto arrancaremos con todo en esta parte. Acá están nuestras páginas

https://www.facebook.com/bunucafe

https://www.instagram.com/bunucafe/

Acá unas fotos que me gustaron mucho 😎:

Puede ser una imagen de texto que dice "Algunas cosas son mejor en dark mode U bunu"

Otra parte en la que no somos expertos pero que tuvimos que aprender fue la parte del hardware desde la electrónica hasta el diseño e impresión 3D, después de muchas horas y de echar a perder mucho material, por fin estamos produciendo la báscula, te dejo orgullosamente unas fotos de fracaso 😅 y otra de éxito:

Por otra parte, ya tenemos trato con algunas marcas de café que están listas para cuando les digamos que podemos arrancar, empezaremos enviando algunos prototipos a nosotros mismos y a personas cercanas para probar que no truene todo 🤣, y después de probarlo por un par de semanas empezaremos con los envíos a un grupo seleccionado que se haya suscrito en nuestra página web y desee adquirir su base.

Creo que vamos bien y por buen camino, hemos avanzado mucho considerando que este es un proyecto alterno y todos tenemos nuestros trabajos del día a día, muy pronto estaré subiendo otra actualización. Mientras acá te dejo el enlace a nuestra página web recién estrenada, espero que el proyecto te guste tanto como a nosotros y nos puedas apoyar compartiendo en redes sociales.

https://bunucafe.com

Haz tareas que aporten valor

Te voy a contar una historia de uno de los principales errores que he cometido, aunque depende del cristal con que se mire porque aprendí mucho, pero desde el punto de vista emprendedor considero que sí fue un gran error.

Hace un par de años se me ocurrió una idea para mejorar el servicio de los restaurantes, haciéndolo más rápido, con menos errores y, para alguien introvertido como yo, más cómodo. Entonces creé Menumy, una aplicación para lograr resolver estos problemas, no entraré en detalle en el proyecto, en resumen después de alrededor de un año de operar tuvimos que cerrar la startup por algunas razones que nos dejaron mucho aprendizaje y que explico acá.

Para lanzar un producto de este tipo debes aprender bastantes cosas, lo cual es bueno, por ejemplo yo tuve que aprender a programar en backend así que aprendí Django con Python, tuve que aprender a vender, algo de HTML y CSS, algo de React, etc. etc., todo esto estuvo bien porque era esencial para construir el producto y agregaba valor, pero el error que cometí (Uno de tantos) fue el siguiente: Por entonces iba empezando a despegar una nueva tecnología llamada Docker, ahora ya es un estándar en la industria pero en ese tiempo que tu proyecto usara Docker era genial técnicamente hablando. En resumen Docker ayuda a que puedas configurar tus proyectos en cualquier ambiente (Linux, Windows, Mac) en minutos y que funcione en cualquiera de ellos para evitar el típico «En mi máquina sí funciona», ese es su principal uso.

En fin, solo por verme «Cool» y por mi amor por el aprendizaje decidí armar el proyecto usando Docker; ERROR. Sin exagerar el 33% del desarrollo de mi proyecto me llevó entender y configurar Docker, alrededor de 2 de los 6 meses de desarrollo, después de unas semanas ya lo estaba haciendo más por reto y porque me pesaba que el tiempo invertido fuera en vano.

Claro que aprender algo nuevo no es malo, si el objetivo hubiera sido aprender, pero el objetivo era lanzar un producto rápidamente, validarlo, iterar, mejorar y conseguir usuarios y clientes, y aprender Docker no me dio nada de esto en ese momento del proyecto, no lo iba a usar realmente, no había más desarrolladores y aunque hubiera el tiempo de haber configurado Docker no se iba a ver compensado en mucho tiempo. Al cerrar la app pude haber ahorrado dos meses de mi tiempo que pude haber usado o para crear otro producto o haberlo invertido en otras cosas como validación de la idea.

La enseñanza que me queda de esta historia es que Antes de tomar una decisión de irte por una tecnología o cualquier tarea para tu proyecto, como hacer tu logo o gastar en tarjetas de presentación, piensa si aporta valor. Si no, ponla en una lista de «tareas futuras» y olvídate de ella por el momento.

Estas son algunas cosas que no aportan valor al inicio de un proyecto:

  • Quebrarte la cabeza pensando en cosas que escalen.
  • Hacer cosas como logos, tarjetas de presentación, misión y visión de la empresa, organigramas, etc.
  • Ir a demasiados eventos de networking, emprendimiento, dar pláticas. Está bien ir y mejor si ayudas a otros, el error es pensar que estás siendo productivo y agregando valor a tu producto.
  • Aprender y usar tecnologías para agregar mucha seguridad (A menos que esa sea la propuesta de valor de tu producto) o para que todo quede mucho más robusto, como en mi caso con Docker.
  • Gastar tiempo en elegir herramientas de gestión de tareas (Jira, Trello, etc.), gestión de clientes (CRM), y hacer toda una estructura burocrática para llevar el proyecto. Todo esto solo te distraerá y en este punto es como tirarle a un pato con balas de elefante.
  • Tardarte mucho diseñando una pantalla, lo más probable es que esa pantalla cambiará en la siguiente iteración.
  • Tratar de cubrir casos que son muy improbables que sucedan.

Hay un dicho muy trillado que queda como anillo al dedo: «Es diferente estar ocupado que ser productivo», deja de lado las tareas que te mantienen ocupado(a) pero no aportan valor.

Espero que esta pequeña historia te sirva para no cometer el mismo error que yo :P, como siempre todas las dudas y comentarios son bienvenidos y te invito a suscribirte y seguirme en todas las redes habidas y por haber.

Haz cosas que no escalen al principio

Este artículo está basado en un artículo que me encanta de Paul Graham, llamado Do things that don’t scale. Paul Graham es uno de los directivos de YCombinator, una empresa que invierte en startups como Pinterest, Airbnb, Dropbox, etc, si piensas en una de las empresas famosas de Silicon Valley, ellos han invertido ahí.

Vamos empezando por el principio ¿Qué es escalar? En el área de las Startups y las empresas en general, escalar significa que el costo de llegar a pocos clientes y a muchos no aumente proporcionalmente. Ejemplos:

  • Un restaurante tradicional no es escalable o es poco escalable porque si hacer un platillo me cuesta $10 y yo lo vendo en $15 gano $5 por platillo, pero si lo vendo a 1000 clientes, me va a costar en proporción a esos 1000 clientes, es decir, me cuesta unos $10000. Claro, puedo aplicar comprar ingredientes por mayoreo pero no reduciré mucho el costo con eso.
  • Un videojuego es escalable porque llegar a 10 clientes me cuesta $10000 en desarrollo, pero llegar a 100 clientes me cuesta prácticamente lo mismo y llegar a 1000000 de clientes también, la inversión no sube proporcionalmente con las ganancias.

La segunda alternativa suena mucho mejor, y como suena tan bien tendemos a cometer el error de que cuando creamos un nuevo producto, en especial de software, queremos escalar desde el inicio, me atrevo a escribir este artículo porque este error lo he cometido más de una vez u.u. El problema con esto es que como en todo, es difícil iniciar desde 100, se inicia en 0 y se va subiendo poco a poco. Los primeros pasos al lanzar es encontrar tu nicho de mercado, que la gente lo use, te de retroalimentación y puedas mejorarlo, hay que verlo como un gran barril que quieras trasladar, primero hay que empezar a rodarlo poco a poco, con mucho esfuerzo, luego irá tomando tracción y, si no se rompe antes, empezará a rodar por si solo.

Supongamos que estás iniciando una empresa que te lave la ropa: Ordenas en línea, la recogen en tu casa y te la regresan lavada y planchada. Lo voy a explicar con qué hacer y qué no hacer al principio en diferentes casos.

NO: Hacer toda una plataforma para que muchos se suscriban, rentar lavanderías o crearles una app a lavanderías externas para que puedan recibir pedidos. Lanzar en toda la ciudad o incluso en varias ciudades a la vez.

SI: Hacer una página web sencilla, donde TU MISMO(A) vayas a recoger y entregar la ropa, tal vez contratar a alguien que lave y planche pero si es posible hacerlo tú mismo también.

Razón: Lo primero que quieres hacer es validar tu idea, conocer a tus clientes, conocer el problema y si realmente existe un problema, conocer los retos a los que te vas a enfrentar y resolverlos en pequeño para después poder enfrentarlos en grande. Además de no gastar mucho dinero hasta que veas que realmente funciona.


NO: Contratar personal.

SI: Hacer todo lo que puedas tu mismo.

Razón: Uno de los principales errores que cometemos es contratar personas al inicio, en especial en las empresas tecnológicas los sueldos son el gasto más alto que hay, y en específico un super error es subcontratar el núcleo de tu negocio.

NUNCA SUBCONTRATES EL NÚCLEO DE TU NEGOCIO


NO: Desarrollar toda una plataforma que te lleve muchos meses, que tenga mucha seguridad, que use cosas que no agreguen valor al proyecto en su etapa inicial.

SI: Hacer un Producto mínimo viable (MVP) que te permita validar la idea cuánto antes.

Razón: De nuevo, lo que quieres es validar la idea sin que te cueste mucho tiempo, dinero y esfuerzo.


NO: Trates de crecer si no puedes cumplir con la calidad que quieres.

SI: Crea algo que deleite a tus clientes, que les de una experiencia genial.

Razón: Es preferible tener menos clientes que ADOREN tu producto a más clientes que solo les guste. Cuando logres generar esa calidad a mayor escala entonces sí lánzate a más personas.


NO: Lances una campaña de marketing a todo el planeta para que se entere de la existencia de tu producto.

SI: Empezar en pequeño, tal vez en tu ciudad donde tengas un «ambiente controlado», o si se trata de un producto en linea, de un nicho muy específico de personas que puedan adorar tu producto, recuerda que en este punto deberás hacer casi todo manualmente.

Razón: Las Startups son muy frágiles al inicio, a menos que tengas mucho dinero un error puede costarte el quiebre de tu empresa, y un error común es querer llegar a personas que ni siquiera tenemos la posibilidad de atender en nuestra situación actual, y peor, pagando un costo muy alto de marketing.

¿Qué opinas de esto de «No escalar»? ¿Estás de acuerdo o no? te invito a suscribirte y dejar tus comentarios.