
¿Cómo escribir nueve libros sobre tecnologías completamente diferentes, incluyendo Angular, Vue, React, React Native y otros? ¿Qué es lo más importante en el entrenamiento, qué es el "chat de pasillo" y, en general, qué tienen que ver Dart y Flutter con él?
Hoy, nuestro invitado es autor de muchos libros y artículos sobre programación, incluido
ng-book -
Ari Lerner . Cuál será el próximo libro, qué piensa el autor de un lenguaje tan controvertido como Dart, y por qué es tan importante comunicarse en las conferencias, preguntan los chicos del comité de programa de la conferencia HolyJS (
Dmitry Dmitry Makhnev Makhnev y
Eugene bunopus Kot ).
Hola Habrá tres secciones en nuestra entrevista, en la primera hablaremos sobre usted, en la segunda sobre Flutter, y la tercera será final. ¿Primero te contamos un poco sobre ti?- Para empezar, me gustaría agradecerle la invitación. Estoy muy contento de tener la oportunidad de hablar en HolyJS. En cuanto a mí, vivo en Brooklyn en Nueva York y programo todo lo que puedo recordar: mi primer idioma fue ensamblador a principios de la década de 1990. En este momento, estoy involucrado en blockchains y aprendizaje profundo, hasta ahora por separado. En su mayor parte, trabajo con clientes, les ayudo a ingresar al ICO (Ofertas iniciales de monedas) y les ayudo a trabajar con la economía de fichas. Y también conmigo vive un increíble perro Ginger, un cruce entre un chihuahua y un Corgi. Puedo hablar de ella sin cesar.
"¿Cómo se ve ella?" ¿El tamaño de un chihuahua, pero peludo, como un corgi?- Sí, este es un Corgi más pequeño con cara de chihuahua. Muy lindo
- ¿Qué estás ganando ahora? ¿Escribes libros o trabajas para una empresa?- Tanto eso como otro. Estoy escribiendo un libro, pero ya no me lleva todo mi tiempo. Hasta que decidí qué hacer a continuación, trabajo para mí.
- Según tengo entendido, hace 5 o 6 años fundaste Fullstack.io?- Sí, fue en 2012.
- Cuéntanos sobre él.- Fullstack consta de dos partes, este es un editor de libros de texto sobre programación, así como una plataforma educativa. Con respecto a la publicación de libros de texto, nuestro público principal son los desarrolladores profesionales, pero también proporcionamos libros de texto a universidades, escuelas y programas de educación continua. Además, realizamos capacitaciones en línea y en vivo, generalmente como parte de la educación continua. Trabajamos con compañías como General Electric, Walmart, con los militares, etc.
- Genial ¿Compite con O'Reilly, o tiene un área completamente diferente?- Hacemos cosas que son muy similares a lo que hace O'Reilly, pero no competimos directamente con ellas, porque tenemos una escala completamente diferente: no representamos una amenaza para el dominio mundial de libros de programación de O'Reilly. Además, tenemos un enfoque ligeramente diferente. Por lo general, los libros después de la publicación no se actualizan, por lo que tan pronto como lo lea, ya no está actualizado. Si nos compra un libro, le proporcionamos actualizaciones constantes.
- ¿Publican libros en papel o solo electrónicos?- Ambos y otros. Vendemos libros en papel a través de Amazon, pero no podemos actualizarlos. Los libros electrónicos comprados en Fullstack se actualizan automáticamente. No puede actualizar a través de Amazon, tienen un control demasiado estricto.
- Según tengo entendido, usted es coautor de muchos libros en Fullstack.io - Fullstack React, Fullstack React Native y, por supuesto, el famoso ng-book. Para escribir un libro, debe estar muy familiarizado con el área temática sobre la que está escribiendo, ya sea Angular, React, Vue o cualquier otra cosa. ¿Cómo es tu preparación para escribir un libro?Buena pregunta Permítanme decirles primero cómo comencé a escribir libros, y ¿por qué me gusta esta lección? Y luego pasemos a ver cómo va el trabajo en cada libro individual.
"Sí, por supuesto".- En 2012, llegué al techo de la empresa donde trabajaba y decidí que era hora de irme. Creé mi startup, lo creas o no, pero era una empresa de programación. Para ella, escribí un elegante backend en Erlang y Python, al parecer, con un toque de Ruby. Pero no había una buena interfaz, así que comencé a explorar varios marcos y me encontré con Angular. Pasó mucho tiempo antes de la versión 1.0. Comencé a escribir un frontend para mi startup, y realmente me gustó Angular, pero la documentación era simplemente horrible. Para entender cómo funciona este marco, comencé a leer el código fuente y descubrir cómo funciona: así es como me familiaricé con Angular.
Casi al mismo tiempo, me pidieron que diera una charla sobre JavaScript en un campamento de capacitación para desarrolladores en San Francisco, y luego me di cuenta de que realmente me gusta enseñar. Así que decidí combinar estos dos intereses y comencé a escribir una mini-guía para Angular para principiantes. Al principio pensé que serían dos o tres páginas de texto, pero al final había 650 páginas que seguí actualizando a lo largo de los años. Finalmente me convertí en autor o coautor de nueve libros. Enseñé como voluntario en todos los principales campos de entrenamiento para desarrolladores en San Francisco. También soy voluntario en organizaciones como Women Who Code y Bridge Foundry, y enseño ElixirBridge. Incluso di clases en una prisión general en el área de la Bahía de San Francisco, y todavía enseño aquí en Nueva York.
La enseñanza es muy importante para mí, me motiva a aprender más yo mismo. Al enseñar, no solo ayudo a los demás, me obligo a elevarme a un nuevo nivel para poder explicar cómo funciona esta o aquella tecnología. Normalmente me preparo leyendo la fuente, especialmente JavaScript. Hace un año o medio, conocimos a Vue, y recién comenzamos a estudiar la fuente, nuestro trabajo con Vue nos trajo un gran placer. Mientras trabajo, escribo todos los problemas que encuentro, todas las consultas de búsqueda en Google, todas las preguntas sobre la documentación. Como resultado, compilamos una tabla de contenido enorme y muy detallada, que luego, con cualquier cambio, actualizamos junto con todo el libro.
- ¿Esto sucede automáticamente, con la ayuda de controladores que monitorean toda esta información en la documentación?- Tenemos controladores que rastrean los ciclos de lanzamiento, pero, desafortunadamente, casi todo lo demás, editar contenido e imágenes, se realiza manualmente. Tenemos ganchos en React, y tenemos actualizaciones automáticas de código, pero el contenido debe actualizarse manualmente.
- Ya veo. Que yo sepa, usted es coautor de muchos libros. ¿Es más difícil escribir un libro solo o con alguien? ¿Cómo organizas tu trabajo, cómo sincronizas los capítulos?- Al igual que con el desarrollo conjunto de aplicaciones, utilizamos Git para unificar contenido, por lo que tenemos versiones y ramas. Escribir un libro en colaboración puede ser difícil, aunque creo que es algo más fácil en el caso de los libros sobre especialidades técnicas que sobre los no técnicos. Creo que lo más difícil es garantizar un tono uniforme para todas las secciones y determinar qué demos usar. Pero, en general, esta no es una tarea muy difícil. Toda la atención es absorbida por la escritura y la edición, y estamos constantemente en contacto entre nosotros, lo que simplifica enormemente el proceso. Con los años, hemos desarrollado plantillas de escritura que proporcionan unidad de estilo a todos nuestros autores. Y hacemos nuestro mejor esfuerzo para asegurarnos de que nuestros coautores escriban con nosotros, y no para nosotros. Nos posicionamos como un equipo en el que todos trabajan entre sí, y no como una editorial para la que trabajan los autores. Además, todos somos coeditores de los libros que escribimos. Tener un editor o editores ayuda a garantizar un estilo consistente en todo el libro. Cada autor edita una sección escrita por otro autor.
En cuanto a las herramientas, utilizamos Git, así como simples editores de texto y Markdown. Por lo general, trabajo en Visual Studio Code o Spacemacs, una combinación de Emacs y Vim, muy recomendable si aún no lo ha probado. Además, tenemos un montón de nuestro propio software, que escribimos para compilar, trabajar con estilo y previsualizar libros en tiempo real. Lo usamos antes de publicar un nuevo lanzamiento o actualizar un libro. La mayoría de nuestras herramientas están escritas en JavaScript, TypeScript o Python.
- ¿Utiliza metodologías flexibles como Scrum al escribir libros?- Sí, pero no demasiado activo. Realizamos algún tipo de reuniones de pie modificadas, pero no todos los días, sino todas las semanas o después de una semana, dependiendo del ritmo de trabajo del libro. Si trabajo solo, entonces todo mi stand-up es que abro mi editor de texto, pero si trabajo con alguien, estamos constantemente en contacto entre nosotros a través de Slack y Google Hangouts.
- ¿Y cuánto tiempo te lleva escribir un libro?- Depende de qué libro sea, si trabajo con coautores, de la velocidad del marco. Digamos que escribí un ng-book en cuatro meses, trabajando por las tardes y los fines de semana. Pero para mí esta es una velocidad absolutamente inimaginable, todavía no entiendo cómo logré hacer tanto. Por lo general, un libro lleva de seis a doce meses.
- Interesante Pasas mucho tiempo, trabajas con herramientas y procesos interesantes, tal vez en colaboración con otra persona, y luego entregas el libro a la publicación. Cuando el editor intenta traducir el fruto de sus trabajos a otro idioma, ¿cómo verifica la calidad de la traducción? Pregunto porque cuando comencé a programar, no podía leer la documentación técnica en inglés, así que leí muchos libros en ruso, por ejemplo, la traducción de Good Parts of JavaScript y los libros más famosos de O'Reilly. Que yo sepa, estas traducciones fueron terribles. Pienso en cómo los autores de los libros deberían haber reaccionado a esto, y de qué manera podrían haber verificado las traducciones. ¿Cuál es su opinión general sobre las traducciones?- Aquí solo puedo hablar sobre mi experiencia personal y cómo funciona Fullstack. Tenemos muchas situaciones en las que no sabemos el idioma al que se está traduciendo el libro; por ejemplo, la mayoría de nuestros libros están traducidos al chino, pero yo no hablo chino. Es cierto que con el tiempo aprendí algunas palabras, tengo una aplicación especial para esto, Babbel, con la que aprendo lenguas extranjeras. Pero en el caso del chino, las mejores traducciones se obtuvieron cuando nuestro traductor también era programador al mismo tiempo. Gracias a esto, para cualquier pregunta, fue más fácil para el traductor hacernos una pregunta en inglés y luego traducir correctamente la respuesta al chino. Lamentablemente, tampoco hablo ruso. Puedo decir "bicicleta", aunque no, como oyes, ni siquiera puedo decir eso. Por supuesto, es difícil no saber el idioma en que está escrito el software. Entiendo esto especialmente bien cuando miro la documentación de los proyectos chinos de código abierto; para entender cualquier cosa, tengo que profundizar en la fuente.
- Una situación similar fue con Vue. Hasta donde sé, sus primeros lanzamientos tenían una documentación bastante pobre, y muchos problemas se describieron en chino. Hasta donde yo sé, el inglés es ahora un requisito.- Sí lo es. Tengo suerte de que mi lengua materna sea el inglés. Aunque no lo hablo con fluidez, no tengo problemas con la documentación. Creo que las traducciones son muy importantes. Además, vivimos en una época en la que la traducción automática es cada vez mejor, especialmente gracias al aprendizaje profundo; esta es una de las razones por las que me interesé en el aprendizaje profundo. Sin embargo, no creo que haya una panacea para todos estos problemas.
- Recientemente, me encontré con una acalorada discusión en la parte de Twitter en ruso. Un lado de la disputa argumentó que las traducciones son, por definición, malas, porque los programadores deben saber inglés, y es un idioma internacional para todos. Otros dijeron que para los jóvenes y aquellos que no hablan inglés muy bien, la documentación debe ser traducida. ¿Tienes una opinión sobre este controvertido tema?"Los argumentos de ambas partes están cerca de mí". Lo que diré ahora es solo mi reacción inicial, durante mucho tiempo no pensé en este problema. Quizás en una reunión personal podamos discutir este tema más profundamente. Me parece que hay tanto código escrito en inglés en este momento que deshacerse del idioma inglés sería extremadamente difícil. Hay idiomas internacionales: por ejemplo, JavaScript es un idioma internacional; si lo habla, puede comunicarse con cualquier persona en cualquier parte del mundo. La presencia de un idioma internacional, el inglés, nos facilita la comunicación y la colaboración con desarrolladores de todo el mundo; Por ejemplo, hablé con desarrolladores en India, Francia, Inglaterra, China, Australia. Por supuesto, esto no es del todo cierto en relación con las personas que no hablan inglés: estoy seguro de que si no hablara inglés, tendría una opinión diferente sobre este tema. Además, como dije, estos son solo mis pensamientos iniciales, no he pensado en este problema durante mucho tiempo y quizás mañana cambie mi opinión.
- Sí, podemos discutir esto en persona. Ahora hablemos de los libros: se están volviendo menos populares que antes, debido a la aparición de plataformas como Media, Twitter, etc. ¿Crees que los libros están desapareciendo?"No estoy convencido de que los libros se estén volviendo menos populares". Creo que todos trabajan y aprenden de diferentes maneras. Los servicios en línea en su función son similares a las clases en clases. Y me parece que el aprendizaje en línea es adecuado para desarrolladores que desean aprender diferentes idiomas y marcos de manera diferente. Es más fácil para algunos trabajar con la documentación, otros para la fuente, algunos funcionan mejor en grupos, otros solo, por prueba y error, o leyendo libros en trenes y aviones y luego implementando lo que han leído en la práctica. Por otro lado, enseñé en clases donde todo era exactamente lo contrario y donde los estudiantes simplemente no podían sentarse en el libro, esto no les dio nada. No es que no supieran leer en absoluto, solo obtienen menos de la lectura que del trabajo con otras personas. Creo que uno de los logros más importantes de Internet para la comunidad de programación es que ha hecho que el aprendizaje sea más accesible y que el éxito sea más factible. Sitios y servicios como Medium o Coursera ayudan a difundir el conocimiento y permiten una variedad de oportunidades de aprendizaje. Estoy orgulloso de estar involucrado en esta evolución de la educación. Quizás en el futuro nuestros libros se vuelvan interactivos y podamos combinarlos con cursos en línea.
- Recuerdo que una vez que los libros se vendieron con un CD o DVD con ejemplos. Ahora este formato está pasado de moda.- Sí, ahora prefieren enviar todo en archivos zip; por ejemplo, fusionamos todas nuestras demostraciones en un archivo zip. Una de las herramientas más útiles que desarrollamos nos permite escribir todo el código fuente utilizado en el libro en un solo lugar, y luego tenemos herramientas que lo actualizan automáticamente de las fuentes originales. Supongamos que necesitamos resaltar una cadena, clase, objeto o función que discutimos en un libro. Tenemos herramientas a través de las cuales puede hacer enlaces directos al código fuente. Esto también es útil porque cada vez que descarga un libro, la fuente se actualiza. Entonces escribimos las fuentes no directamente en el texto, sino en un archivo separado.
- Mi próxima pregunta estará relacionada con la anterior. Usted dijo que todos aprenden de diferentes maneras y que yo, como desarrollador, puedo leer libros, ver videos en YouTube, leer artículos en alguna plataforma de capacitación. Pero, ¿por qué debería asistir a conferencias?Esta es una buena pregunta. Por casualidad, puedo nombrar dos razones por las que vale la pena hacerlo. El primero es el más obvio: las presentaciones y conferencias en conferencias generalmente están bien pensadas y especialmente diseñadas para su visualización. Como regla general, dicho informe está dedicado a un problema bien definido, por ejemplo, refactorización. Cuando te sientas en una audiencia donde se presenta un buen informe de refactorización, es como si te estuvieras refactorizando, estás incluido en la presentación, en el proceso. Bueno, para mí, la personalidad del orador y sus emociones siempre son interesantes.
La segunda razón es menos obvia. Lo llamo "chat en el pasillo": además de los informes en sí, te encuentras y te comunicas con personas que están haciendo lo mismo que tú. Nuestra actividad como desarrolladores es, por definición, individual, pero cuando comienzas a comunicarte con muchas otras personas que están en el mismo espacio que tú y participan en lo mismo que tú, esta actividad se vuelve automáticamente social. Otro beneficio de "hablar en el lobby" es que conoces a personas que necesitan tus servicios, tu conocimiento técnico o tu experiencia docente. En mi experiencia, encontramos más clientes que en cualquier otro lugar, y esto incluso se aplica a nuestros libros y videos.
- Ya has escrito muchos libros - dime, ¿en qué estás trabajando ahora? Tal vez algunos spoilers?- Ahora trato principalmente con blockchains. Si hablamos de blockchains, realidad aumentada, aprendizaje profundo, es genial en estas áreas que sean muy populares ahora, por lo que en casi todas las conferencias a las que asistí en los últimos años, entablé conversaciones muy animadas con personas interesadas en estos sujetos. Y a menudo podría ser el desarrollador front-end de Google, quien en su tiempo libre se ocupa de otros temas.
En lo que a mí respecta personalmente, los proyectos con los que me ocupo están principalmente relacionados con la economía, y lo más sorprendente es que este es un tema muy interesante. Además, actualmente estoy trabajando en un libro llamado "C ++ para desarrolladores de JavaScript", hasta ahora está en una etapa temprana de la escritura. Estaré muy contento de discutir este tema si me encuentro con alguien que trabajó con C ++ en una conferencia de JavaScript.
- ¿Este libro estará relacionado de alguna manera con WebAssembly? Entiendes, C ++ y JavaScript ...- El libro está dedicado principalmente a EOS: esta es una cadena de bloques bastante nueva. Es similar a Etherium, pero creado usando LLVM, y esto le permite escribir un contrato para todo lo que se compila en LLVM, incluido C ++.
- Genial Pasemos a la siguiente sección, estará más estrechamente relacionada con su informe sobre HolyJS. Solía trabajar con Angular, Vue, React, JavaScript, y ahora está informando sobre Flutter, la plataforma móvil de Google escrita en Dart. ¿Qué te impulsó a hacer esto?- En esta redacción, realmente suena divertido. Aquí hay una historia similar a cómo llegué a Angular, que mencioné anteriormente. Quería escribir algunas aplicaciones para mí y mis amigos que usan quién es Android, quién es iPhone. Ya publicamos un libro sobre ReactNative, y tenía experiencia con esta plataforma, pero quería probar otra cosa. Puedo escribir en Java, Kotlin y Swift, así que comencé a escribir una aplicación en Swift. Hasta donde sé, se están haciendo intentos para adaptar Swift para Android, pero aquellos con los que estoy familiarizado todavía están en las primeras etapas, no se puede contar con ellos. Además, me parece que muchos de ellos son hacks. iOS Java, , , Java iOS. , JavaScript — , Redux, , . - Flutter.
Flutter Dart, , TypeScript. JavaScript, , , Redux. Flutter , , . , . , Flutter AOT- JIT-, , UI. , , Flutter, , Flutter .
Flutter — , , , . Flutter — hot reload, web. , Swift, , , , , , , , , . , Flutter UI , -. Flutter, , . , Dart TypeScript, , , JavaScript, JavaScript Dart.
— Dart — , , JavaScript, . Dart , ? ?— , , Dart . — , Clojure. , , , - JavaScript TypeScript — , . Dart , , . , , , , , . , TypeScript Flow. , Flutter . , , Flutter JIT-, , Flutter.
Dart — , , JavaScript, “” . , , — Java, , , . , Dart, JavaScript JavaScript. , , , Dart JS. Isolates Dart Web workers Dart. -, Dart . , Dart , Flutter, , Dart , React Native, JavaScript.
— .- si. , React Native , - — , JavaString, . Flutter , . , Dart Java, C#, ActionScript JavaScript, , , - , .
— Clojure, — . Dart , .— , Clojure — .
— , -, — — Flutter? , , ? , «Hello World»?— , Flutter . - Flutter React Native, . , , , — Flutter . , , — Flutter. , , , — , Java Swift, , -, , . , , Flutter , , .
, Flutter , — , Twitter. , , , , AR VR. AR- Swift, Flutter . , iOS, Android .
— , Flutter Twitter — Twitter PWA. Flutter PWA? -, .— , Flutter -, . - - Dart, . Dart . Dart JavaScript- , , JavaScript.
— , .— , . Flutter , , JavaScript.
— . , , . , , JavaScript — JavaScript. — Angular Ionic, — Cordova PhoneGap. , ? , JavaScript?— . , , JavaScript , , — React Native, Node.js , , Dart. JavaScript, -, . , — , . , - . , 2018 - , , — , , — , JavaScript.
— JavaScript , — Go, ClojureScript, Dart? , JavaScript?— , ? , , — , . Go, , , Go C++ — . JavaScript Dart, ClojureScript. , C , . , . , . , JavaScript, . . Swift Java — , AR Swift, , , Flutter, , , Swift .
— , 2013 , Dart, , , , Dart . Dart Flutter, Dart Flutter? AngularDart, Dart .— . , - , . - , , Flutter — Dart. , Cupertino — Flutter iOS — . , , Flutter Flutter — .
Dart, , , , . 2013 EcmaScript , , Google, ECMAScript. Flow TypeScript , . Dart Flutter , 1.0 Flutter.
, , Flutter, Fuse, C#. . JavaScript , , Dart JavaScript, Dart Flutter.
— , . . ?— , «hallway chat». . , , , . , . , , , , .
— , ?- si.
— , HolyJS?— , , , . , — , , . , , , , , , . , — , , . - , . , — .
HolyJS, , , , . - , , . , -, , , .
, , .
— , , -10 -15 , .— -? .
— . , Dart Flutter — , , JavaScript. : HolyJSse llevará a cabo del 24 al 25 de noviembre, y el 1 de diciembre habrá una conferencia sobre Dart and Flutter.- Genial Flutter estará fuera de beta por ahora.Aunque en el caso de Flutter, el código está escrito en Dart, el informe de Ari sobre HolyJS estará diseñado para personas con experiencia en JavaScript: no se requiere una introducción preliminar a Dart. Y las áreas de discusión en la conferencia significan que después del informe habrá una oportunidad para discutir con Ari todo lo que le interese: al menos hacer una pregunta sobre Angular, al menos darle un ng-book para su firma. En general, ¡nos vemos del 24 al 25 de noviembre en Holi !