Esta no es una historia de cómo aprendí a construir aplicaciones que se comunican con un periférico BLE, sino una historia de cómo aprendí la programación funcional.
Una vez, me contrataron para crear una aplicación que manejara la comunicación con un periférico BLE. Al mismo tiempo, estaba tratando de aprender algo de programación funcional para mí, ya que había escuchado que era una habilidad genial. Antes de esa aplicación, solo estaba creando aplicaciones de la manera tradicional e imperativa.
Encontré un marco de programación reactivo (ReactiveCocoa, luego fue renombrado como ReactiveSwift) que estaba tratando de entender y usar.
Mi primer objetivo era establecer una conexión con el periférico BLE usando CoreBluetooth y la forma tradicional (devoluciones de llamada, etc.). Fue bastante fácil hacerlo ya que la documentación por parte de Apple era realmente buena.
Una vez que hice eso, estaba tratando de pensar en agregar ReactiveCocoa en la mezcla para ver cómo se comportaría. Al principio me pirateé un código que parecía funcionar bien y usé ReactiveCocoa. La cuestión era que el código parecía demasiado complejo y era difícil de leer. Tenía que ser algo de mi parte, algo que estaba haciendo que no era tan bueno.
Comencé a investigar la documentación de ReactiveCocoa para obtener algunas respuestas. Había tantas cosas allí que podía leer, tantos operadores que podía usar pero no había ejemplos que pudieran guiarme. Entonces, como usuario de github, abrí un problema en el repositorio de ReactiveCocoa pidiendo ejemplos. Los mantenedores fueron muy serviciales y me señalaron algunos diagramas de mármol que pude ver.
Una vez más, no estaba seguro de cómo usar todo eso, pero comencé a experimentar. El código en mi aplicación se volvió mejor y un poco más legible, pero no me detuve allí.
Comencé a experimentar con ReactiveCocoa en proyectos simples, buscando el código fuente del framework e intentando ver qué estaba disponible.
Mientras tanto, la aplicación de iOS estaba creciendo y creciendo, pero aún sentía que el código no era bueno. Lo reescribí nuevamente usando todo lo que había aprendido desde entonces. Se vuelve mucho mejor. Estaba evolucionando de la misma manera que yo.
Después de eso, encontré un canal de Slack que usan los encargados del mantenimiento. Me uní y seguí todas las discusiones allí. Ayudó mucho también.
Estoy tratando de decir que no se espera que conozcas todas las API de un idioma. Sin embargo, se espera que esté motivado por lo que hace y siempre trate de mejorar. La primera vez serás un pirata informático que copiará el código pegado aquí y allá, pero a medida que pase el tiempo mejorarás cada vez más y no se detendrá mientras tengas la motivación para hacerlo.