28 puntos por GN⁺ 2024-01-06 | 7 comentarios | Compartir por WhatsApp

9 años de un desarrollador en solitario del editor de texto "Paper"

  • En 2015, era un desarrollador web full-stack común, bastante alejado del mundo de desarrollo de Apple.
  • Mientras usaba Mac, se sintió atraído por las apps de desarrolladores independientes y, inspirado por iA Writer, un editor de Markdown simple y elegante, decidió crear una app parecida.
  • Para desarrollar un editor de texto nativo para Mac, empezó a aprender un nuevo stack tecnológico como Xcode, AppKit y Objective-C.
  • Le puso a la app el nombre Paper y, buscando un minimalismo extremo, diseñó el editor como un simple rectángulo.
  • Lanzó la app para Mac en la Mac App Store en 2017, y en 2019 lanzó la app para iOS.

Por qué eligió una app nativa

  • Eligió una app nativa en lugar de una app de Electron porque su objetivo era ofrecer la mejor experiencia de usuario posible.
  • Las apps nativas son ligeras y rápidas, y ofrecen más formas de implementar funciones únicas relacionadas con el texto.

Por qué eligió Objective-C

  • En 2015, cuando Swift todavía estaba en una etapa inicial, compiló un proyecto vacío de Xcode tanto en Objective-C como en Swift y comparó los paquetes .app.
  • La app de Swift incluía el runtime de Swift y pesaba alrededor de 5 MB, mientras que la app de Objective-C era muy ligera, de unos 100 KB.
  • Como quería una app distribuible más ligera, eligió Objective-C.

Dependencias de terceros

  • Paper no tiene dependencias de terceros.
  • Construyó todo por su cuenta, obteniendo una pequeña ventaja frente a sus competidores.
  • Por ejemplo, el motor de parsing de Markdown de Paper es personalizado y admite menos sintaxis de Markdown que un editor de Markdown tradicional.

Visión

  • La visión inicial de Paper era tener las funciones principales de iA Writer, pero en un paquete más elegante y minimalista.
  • Se enfocó en aumentar la concentración minimizando los elementos que distraen al usuario.
  • Con el tiempo, Paper fue encontrando su lugar en el mercado al mantener el minimalismo mientras añadía funciones gradualmente.

Arquitectura

  • El código de Paper se compone de dos alcances: alcance de la aplicación y alcance del documento.
  • Para cada alcance, definió un storyboard para describir vistas y widgets, y combinar los módulos dentro de ese alcance.
  • Los módulos son clases de Objective-C encargadas de una parte de la funcionalidad dentro de la app, agrupando la lógica relacionada con una característica en un solo lugar.

Código multiplataforma

  • AppKit y UIKit son similares, pero también muy distintos en muchos aspectos.
  • Para resolver esas diferencias, usó macros y categorías de Objective-C.

Depuración

  • En el caso de los frameworks de Apple, hay que leer la documentación en lugar del código, y usar breakpoints para analizar stack traces compilados.

Funciones de pago

  • Entre 2015 y 2017, las suscripciones todavía no estaban ampliamente extendidas y en las app stores lo normal eran los pagos únicos.
  • Como quería ofrecer funciones de pago de una manera amigable para el usuario, solo hizo de pago mejoras cosméticas, no funcionales.

Precios

  • Al principio empezó con dos conjuntos de funciones Pro, cada uno con un pago único de 5 dólares.
  • Actualmente, el precio es de 10 dólares al mes o 100 dólares de por vida para un único conjunto.
  • A través de experimentos de precios, descubrió que los usuarios estaban dispuestos a pagar hasta 100 dólares por una app de un desarrollador poco conocido.

Partes difíciles

  • Los editores de texto son complejos, y con cada actualización del sistema operativo se agregan nuevas formas de insertar, actualizar e interactuar con el texto.

Gimmicks

  • Añadió funciones divertidas como el bounce al redimensionar la ventana, inspirado en la app Things.

Opinión de GN⁺:

  1. Enfoque innovador: Impresiona que, aun sin experiencia en desarrollo de apps nativas, el desarrollador haya creado Paper poniendo la experiencia de usuario como prioridad máxima. Esto muestra lo importante que es el diseño centrado en el usuario en el desarrollo de software.
  2. Aprendizaje y crecimiento: El proceso de aprender un nuevo stack tecnológico y crear un producto con él puede inspirar incluso a ingenieros de software principiantes. Esto subraya que el aprendizaje continuo y asumir retos son esenciales para crecer como desarrollador.
  3. Importancia de la experiencia de usuario: Uno de los elementos del éxito de Paper es la atención minuciosa a la experiencia de usuario y su enfoque en el minimalismo. Esto muestra lo importante que es entender lo que los usuarios realmente quieren y reflejarlo en el producto.

7 comentarios

 
woung717 2024-01-06

La mayoría de los documentos de desarrollo de Apple no son muy amigables, así que hay que escarbar bastante en la documentación... y si aun así falta información, muchas veces toca revisar las interfaces del SDK... por eso también resulta admirable, en otro sentido.

 
ndrgrd 2024-01-06

Me preguntaba qué era una actualización cosmética, y resulta que en el texto original dice visual changes.
¿Se usa la palabra “cosmético” en ese sentido? Yo la veo por primera vez.

 
geeker 2024-01-08

Como neo es un bot de IA, parece que terminó siendo una traducción mecánica jajaja

 
apkas 2024-01-07

El original es más bien una mejora cosmética.

 
cosine20 2024-01-08

Entonces, una mejora estética parece verse mejor...

 
ragingwind 2024-01-06

Parece un desarrollador digno de tomar como modelo a seguir.

 
GN⁺ 2024-01-06
Comentarios en Hacker News
  • "Los detalles cuidadosos en los márgenes son lo que se siente como magia"

    • Puede que al principio los usuarios no noten los detalles finos de una app, pero con el tiempo terminan descubriéndolos.
    • Estas funciones extra tan cuidadas son lo que hace que el usuario pase de simplemente apreciar una app a amarla.
    • Dan la sensación de que el desarrollador entiende a sus usuarios y de que el producto está bien mantenido.
    • Ponen como ejemplo la app Procreate, elogiando que su interfaz de usuario (UI) sea simple, pero aun así tenga muchas funciones ocultas que se pueden descubrir.
  • "Un gran texto basado en 15 años de experiencia como desarrollador de apps iOS"

    • Mencionan que fue una buena decisión mantenerse en desarrollo nativo, evitar dependencias de terceros y usar Objective-C.
    • Aunque luego se cambiaron a Swift, a veces extrañan las ventajas de Objective-C.
    • Dicen que descargaron y probaron la app, y que les gustaron las pequeñas pistas en la barra de menú.
  • "La posibilidad de desarrollar con pocas o ninguna dependencia en plataformas Apple"

    • Gracias a la riqueza y profundidad de AppKit/UIKit, es práctico crear apps muy pulidas sin elementos de terceros.
    • También mencionan que, incluso comparados con otros frameworks como Qt, los frameworks de Apple siguen siendo competitivos.
  • "La evolución de Swift y las especulaciones sobre componentes integrados en la plataforma o la optimización binaria"

    • Desde Swift 5, se logró la estabilidad de ABI (Application Binary Interface).
    • Explican que la decisión de usar solo Swift desde 2014 ha funcionado bien.
    • Sobre SwiftUI, creen que todavía le falta bastante para reemplazar a UIKit/AppKit.
  • "Desconfianza hacia la elección de dependencias y la importancia de aprender"

    • Expresan rechazo a añadir paquetes y librerías externas antes siquiera de escribir código.
    • Valoran mucho el enfoque del autor de convertir las desventajas del ecosistema Apple en una experiencia positiva de aprendizaje.
  • "Solicitud de materiales de aprendizaje y recomendaciones sobre AppKit y desarrollo para Mac"

    • Mencionan que les cuesta encontrar información sobre desarrollo para Mac.
    • Explican que la documentación reciente de Apple es insuficiente y que, como la documentación antigua tampoco ha sido actualizada para Swift, terminan dependiendo del autocompletado de Xcode.
  • "Respeto por la atención al detalle y la artesanía"

    • Elogian la atención meticulosa del autor y su artesanía, diciendo que el texto es hermoso e inspirador.
  • "Una mención interesante al gesto de girar para deshacer"

    • Comentan que el gesto les recordó la escena del protagonista de "Doctor Strange" cuando hace retroceder y avanzar el tiempo.
  • "Elogios al minimalismo del blog y de la app"

    • Expresan la alegría que sienten al usar una app que hicieron ellos mismos, y dicen que sienten algo parecido al usar vim-motions o Neovim.
  • "Sorpresa por la falta de acceso al código SDK en el ecosistema de desarrollo de Apple"

    • Expresan extrañeza ante el hecho de tener que mirar directamente el código ensamblador y piden confirmación al respecto."