¿Cómo aprenden sus desarrolladores los desarrolladores de plataformas Apple?

Excelente pregunta Creo que la capacidad más importante para dominar cualquier campo es la capacidad de responder sus propias preguntas, junto con el conocimiento, la curiosidad y el falibilismo que lo llevarían a seguir preguntándoles.

El peligro en herramientas de alto nivel como el cacao es mágico . Tome los enlaces, por ejemplo: a menudo se introducen en cursos absolutamente introductorios que pueden demostrar cómo construir una aplicación respaldada por una base de datos completamente funcional con cero líneas de código. El problema es que también estás construyendo esa aplicación con cero comprensión .

Esto lleva a los desarrolladores a sentir que se están cayendo de un precipicio tan pronto como algo no funciona o que necesitan hacer algo que no es obvio de inmediato. Pero eso no es culpa de los enlaces, per se: creo que la clave del éxito es tratar este tipo de abstracciones como la automatización de un proceso que entiendes , en lugar de herramientas que hacen que la magia suceda .

Cuando estoy atascado, el primer paso es la generación de preguntas. Sospecho, entonces, que mi habilidad naciente se basa en una comprensión cada vez mayor de cómo funciona toda la pila, desde UIView hasta transistor. Esa comprensión me ayuda a hacer preguntas más perspicaces y proporciona respuestas para las más simples.

Decir que algo es lento. Una buena pregunta es a menudo “¿cómo debe funcionar esto?” Por ejemplo: supongamos que su aplicación suelta marcos cuando agrega sombras. Bien, entonces las sombras son lentas. ¿Por qué son lentos? Se quedan atrás de su contenido sin importar su forma, por lo que el sistema debe determinar la forma de su contenido (¿cómo? Oh, supongo que un fragmento en un búfer de un canal …), y luego hacer algún tipo de desenfoque. Pero supongamos que la forma de su contenido es simple, como un rectángulo. Puede pre-renderizar la sombra en una imagen y dibujarla con un UIImageView (así es como funcionan las sombras de UIScrollView). O si la forma es algo dinámica, tal vez pueda expresar sus parámetros al sistema. ¿Dónde estás poniendo la sombra? En el CALayer, entonces mirarías CALayer.h y encontrarías la propiedad “shadowPath”, y así sucesivamente.

No se deje limitar por lo que proporcionan los marcos: en su mayor parte, solo está haciendo un trabajo ocupado para usted. Puedes hacer el trabajo pesado tú mismo si es necesario. Déjate caer en la pila de capas de abstracción, luego construye una nueva para ti. Si no comprende cómo funciona la siguiente capa hacia abajo, abra la documentación. Si las respuestas no están allí, están en la siguiente capa hacia abajo, o hay un error en la documentación.

Intentaré responder esto desde una perspectiva como desarrollador de iOS durante los últimos 1,5 años y proveniente de un entorno Java y web. Como aprender cualquier otro lenguaje / marco de programación, nada dice mejor que seguir intentándolo por ti mismo, cometer errores, corregirlo / corregirlo, intentarlo de nuevo . Así es como llegué personalmente a esos momentos “aha / zen” al aprender cualquier lenguaje de programación. Se te pegará en la cabeza si lo haces de esta manera.

Usar el desbordamiento de pila o cualquier otro foro es una forma buena y rápida de encontrar una solución a su problema, sin embargo, la mayoría de las veces se volverá vago y no aprenderá nada al final. Simplemente copie y pegue soluciones. Por lo tanto, no consideraría esto tan eficiente, ya que no le beneficia demasiado si no comprende la solución.

Aprendí iOS de forma independiente por mí mismo, no he recibido capacitación formal para hacerlo. Utilicé todos los recursos que puedo aprovechar de Internet y solo codificar. En el proceso, recuerdo a tiempo cuando mostré mi código a un desarrollador de iOS más senior y se reían de mí y me decían que volviera y leyera libros de objetivos. Esto es doloroso, pero siempre ha sido la fuerza impulsora para avanzar, ser más eficiente e independiente.

La clave es que no siempre puede confiar en otros recursos externos, sino aprender de su propia experiencia, cometer errores y hacerlo de manera repetitiva. A partir de esto, comprenderá qué es eficiente y qué no lo es, cómo avanzar hacia el camino correcto, usar documentaciones y, lo más importante, ser más independiente.

En todo caso, hoy hay más recursos para el desarrollo de la plataforma Apple que para cualquier plataforma o lenguaje que haya aprendido a lo largo de los años. La documentación de Apple es la mejor disponible, y los videos WWDC e iTunes U son increíbles. Además, Stack Overflow es un recurso espectacular, especialmente para los tipos de problemas aleatorios que nunca resolvería a través de la deducción.

Una de las mejores formas que he encontrado para resolver los problemas difíciles es tratar de formular una buena pregunta de desbordamiento de pila o error de radar. Como desea comunicar el problema de manera concisa y no sonar como un idiota, lo obliga a reducir el problema y eliminar los elementos que parecen irrelevantes. La mayoría de las veces, cuando llegas a ese punto, no puedes reproducir el problema y te das cuenta de que se encuentra en uno de esos detalles que creías irrelevante. Por cada pregunta de Desbordamiento de pila que publiqué, hay 2 o 3 más que comencé a escribir, pero escribí un chiste cuando descubrí la respuesta en el camino.

También aprendo mucho respondiendo las preguntas de Stack Overflow de otras personas, nuevamente porque te obliga a retroceder y pensar más sobre lo que está sucediendo.

La integración (y la contribución a) proyectos de código abierto es una excelente manera de ver cómo otras personas están innovando en la plataforma, así como de construir relaciones con otros desarrolladores.

También hay un montón de excelentes blogs de Cocoa por ahí. A menudo, lo que obtienes al leer una publicación de blog que no obtienes de la documentación o la capacitación es una explicación de por qué podrías hacer las cosas de una forma u otra. Echa un vistazo a los excelentes blogs de Mike Ash, Matt Gallagher, Graham Lee, Matt Gemmell, Keith Harrison, Ray Wenderlich, Oliver Drobnik, Brent Simmons y Atomic Object, por nombrar algunos.

Finalmente, use otros programadores que conozca. Muchos de los desafíos que enfrentamos como programadores no son específicos de la plataforma, y ​​hablar a través de algún código o diseño con un gran programador que no tiene experiencia en la plataforma a menudo puede conducir a ideas que de otro modo no obtendría. A menudo adoptamos un cierto enfoque porque es la forma de Apple, o porque es lo que siempre hemos hecho, aunque puede que no sea el mejor enfoque. Dar un paso atrás, pensar en el problema en abstracto y discutirlo con otros programadores es una excelente manera de llevar sus habilidades al siguiente nivel.