📜 ⬆️ ⬇️

“I'm just a project enthusiast and user of the Dart language” - an interview with Ari Lerner, the author of the famous ng-book



How to write nine books on completely different technologies, including Angular, Vue, React, React Native and others? What is the most important thing in training, what is a “hallway chat” and in general, what does Dart and Flutter have to do with it?

Today our guest is the author of many books and articles on programming, including ng-book - Ari Lerner . What will be the next book, what does the author think about such ... contradictory language as Dart, and why it is so important to communicate at conferences, ask the guys from the program committee of the HolyJS conference ( Dmitry Dmitry Makhnev Makhnev and Evgeny bunopus Kot ).

- Hello. In our interview there will be three sections, in the first we will talk about you, in the second about Flutter, and the third will be final. Let's start to tell you a little about yourself?
')
- To begin, I would like to thank you for the invitation - I am very pleased to have the opportunity to speak at HolyJS. As for me, I live in Brooklyn in New York and I program as much as I can remember - my first language was assembler in the early 1990s. At the moment I am doing blockchains and deep learning, so far separately. For the most part, I work with clients, helping them to go to ICO (Initial Coin Offerings), helping them to work with “token economics”. And still lives with me a wonderful dog Ginger, a mixture of Chihuahua and Corgi - I can talk about it endlessly.

- What does she look like? The size of a chihuahua, but shaggy, like a corgi?

- Yes, this is a reduced corgi with a chihuahua's muzzle. Very nice.

- What do you earn now? Do you write books or work in a company?

- Both. I am writing a book, but it no longer takes all my time. Until I decided what to do next, I work for myself.

- As far as I understand, you founded Fullstack.io 5 or 6 years ago?

- Yes, it was in 2012.

- Tell us about it.

- Fullstack consists of two parts, it is a publishing house of textbooks on programming, as well as an educational platform. With regard to the publication of textbooks, our main audience is professional developers, but we also provide textbooks for universities, schools, and advanced training programs. In addition, we conduct online and live training, usually as part of advanced training. We work with companies like General Electric, Walmart, with armed forces and so on.

- Great. Do you compete with O'Reilly, or do you have a completely different field?

“We are doing things in many ways similar to what O'Reilly does, but we do not directly compete with them, because we have a completely different scale - we do not represent a threat to O'Reilly's world domination over programming books. In addition, we have a slightly different approach. Usually, books are not updated after publication, so as soon as you read it, it is already out of date. If you buy a book from us, we provide constant updates with it.

- Do you publish paper books, or just electronic ones?

- And those and others. We sell paper books through Amazon, but they cannot be updated. Electronic books purchased on Fullstack are automatically updated. You cannot update via Amazon - they have too tight controls.

- As far as I understand, you are the co-author of many books on Fullstack.io - Fullstack React, Fullstack React Native and, of course, the famous ng-book. To write a book, you need to be very familiar with the subject area you are writing about - be it Angular, React, Vue or anything else. What does your preparation for writing a book look like?

- Good question. Let me first tell you how I started writing books at all, and why do I like this activity? And then we go on to how work is going on each individual book.

- Yes of course.

- In 2012, I reached the ceiling in the company where I worked, and decided that it was time to leave. I created my startup - believe it or not, but it was a scheduling company. For her, I wrote an elegant Erlang and Python backend, it seems, with a touch of Ruby. But there was no good frontend, so I began to explore various frameworks and came across Angular. It was a long time ago, before version 1.0. I started writing frontend for my startup, and I really liked Angular, but the documentation was just awful. To understand how this framework works, I began to read the source code and understand how it works - so my close acquaintance with Angular happened.

Around that time, I was asked to give a talk on JavaScript at the San Francisco developer training camp, and then I realized that I really liked to teach. Therefore, I decided to combine these two interests and began to write a mini-guide on Angular for beginners. At first, I thought it would be two or three pages of text, but in the end, 650 pages came out, which I continued to update over the years. In the end, I became the author or co-author of nine books. I taught as a volunteer at every major developer training camp in San Francisco. I also volunteer at organizations like Women Who Code and Bridge Foundry projects, and teach ElixirBridge. I even gave classes in a general prison in the San Francisco Bay area, and still teach here in New York.

Teaching is very important to me, it motivates me to learn more myself. Teaching, I not only help others, I force myself to rise to a new level in order to be able to explain how this or that technology works. I usually prepare by reading the source, especially JavaScript. A year or a half ago, we met Vue, and just started exploring the source code, our work with Vue brought us great pleasure. As I work, I write down all the problems I’m meeting, all search queries on Google, all documentation questions. As a result, we compile a huge and very detailed table of contents, which then with any changes we update along with the entire book.

- Does this happen automatically, with the help of handlers who follow all this information in the documentation?

“We have handlers that track release cycles, but unfortunately, almost everything else — editing the content and images — is done manually. We have hooks for React, and we have automatic code updates, but the content has to be updated manually.

- Clear. As far as I know, you are the co-author of many books. Is it harder to write a book alone or with someone? How do you organize your work, how do you synchronize chapters?

- Just like when collaborating on an application, we use Git to unify the content, so we have versions and branches. Writing a book in collaboration can be difficult, although I think it is somewhat easier in the case of books on technical specialties than on non-technical ones. I think the hardest thing is to ensure a uniform tone for all sections, and determine which demos to use. But, in general, this is not a very difficult task. All attention is absorbed by writing and editing, and we are constantly in touch with each other, which greatly simplifies the process. Over the years, we have developed letter templates that ensure the unity of style to all our numerous authors. And we do our best to ensure that our co-authors write with us, not for us. We position ourselves as a team in which everyone works with each other, and not as the publishing company that the authors work for. In addition, we are all co-editors for those books that we write. Having an editor or editors helps ensure a consistent style throughout the book. Each author edits a section written by another author.

As for tools, we use Git, as well as simple text editors and Markdown. I usually work in Visual Studio Code or Spacemacs - a combination of Emacs and Vim, I highly recommend it if you haven't tried it yet. In addition, we have a lot of our own software, which we wrote to compile, work with style and preview books in real time. We use it before publishing a new release or update of a book. Most of our tools are written in JavaScript, TypeScript or Python.

- Do you use flexible methodologies like Scrum when writing books?

- Yes, but not too active. We hold a kind of modified stand-up meetings, but not every day, but every week, or a week, depending on the pace of work on the book. If I work alone, then my whole stand-up is that I open my text editor, but if I work with someone, then we are constantly in touch with each other through Slack and Google Hangouts.

- How long does it take you to write a book?

- It depends on what kind of book it is, whether I work with co-authors, on the speed of the framework. For example, I wrote ng-book in four months, working in the evenings and on weekends. But for me it is absolutely unimaginable speed, I still do not understand how I managed to do so much. Usually one book takes from six to twelve months.

- Interesting. You spend a lot of time working with interesting tools and processes, possibly co-authoring with someone else, then giving the book to the publication. When the publisher tries to translate the fruit of your work into another language, how do you check the quality of the translation? I ask, because when I started programming, I could not read the technical documentation in English, so I read many books in Russian - for example, the translation of Good Parts of JavaScript and the most famous books of O'Reilly. As far as I know, these translations were terrible. I think about how the authors of the books should have related to this, and what kind of way they could have checked the translations. What is your overall opinion about translations?

- Here I can only talk about my personal experience and how Fullstack works. We have many situations where we do not speak the language into which the book is translated - for example, most of our books are translated into Chinese, and I do not speak Chinese. True, over time I learned a few words, I have a special application for this, Babbel, with which I learn foreign languages. But in the case of Chinese, the best translations were obtained when our translator was also a programmer at the same time. Thanks to this, for any questions, the translator was easier to ask us a question in English, and then correctly translate the answer into Chinese. In Russian, I, unfortunately, do not speak either. I can say "bicycle" - although no, as you hear, even this I can not say. Of course, it's hard not to know the language in which the software is written. I understand this especially well when I look at the documentation of open-source Chinese projects - in order to understand anything, I have to dig into the source code.

- A similar situation was with Vue. As far as I know, his first releases had rather bad documentation, and many issues were described in Chinese. As far as I know, now the mandatory requirement is English.

- Yes it is. I am lucky that my native language is English. Even though I’m not perfect on it, I don’t have any problems with the documentation. I believe that translations are very important. In addition, we live in a time when machine translation is becoming more and more qualitative, especially due to deep learning - this is one of the reasons why I became interested in deep learning. However, I do not think that for all these problems there is one panacea.

- I recently stumbled upon a heated discussion in the Russian part of Twitter. One party to the dispute argued that translations are by definition evil, because programmers are required to know English, it is an international language for everyone. Others said that for juniors and those who do not speak English well, the documentation must be translated. Do you have an opinion on this controversial issue?

- The arguments of both sides are close to me. What I will say now is just my initial reaction, for a long time I did not consider this problem. Perhaps in person we can discuss this topic more deeply. It seems to me that now so much code is written in English that it would be extremely difficult to get rid of English. There are international languages ​​- for example, JavaScript is an international language, if you speak it, then you can communicate with any person anywhere in the world. The presence of an international language - English - makes it easier for us to communicate and collaborate with developers around the world; for example, I spoke with developers in India, France, England, China, Australia. Of course, this is not entirely fair for people who do not speak English - I am sure that if I did not speak English, I would have a different opinion on this issue. In addition, as I have already said, these are just my primary thoughts, I have not considered this problem for a long time, and perhaps tomorrow my opinion will change.

- Yes, we can discuss this in person. Now let's talk about books - they are becoming less popular than before, due to the emergence of platforms such as Media, Twitter, and so on. Do you think books disappear?

- I am not convinced that books are becoming less popular. I believe that everyone works and learns in different ways. Online services in their function are similar to classes in classrooms. And it seems to me that online learning is suitable for developers who want to learn different languages ​​and frameworks differently. Some people find it easier to work with documentation, others - with source codes, some work better in groups, others - alone, through trial and error, or reading books on trains and airplanes and then implementing what they read in practice. On the other hand, I taught in classes where everything was exactly the opposite and where the students simply could not sit down for a book, it gave them nothing. Not that they are not able to read at all, they simply receive less from reading than from working with other people. I think one of the very important achievements of the Internet for the programming community is that it has made learning more accessible, and success - more achievable. Sites and services like Medium or Coursera help spread knowledge and make possible a variety of ways to learn. I am proud to be involved in this evolution of education. Perhaps in the future our books will become interactive, and we will be able to combine them with online courses.

- I remember that once books were sold from a CD or DVD with examples. Now this format is out of fashion.

- Yes, now everyone prefers to send zip-archives - for example, we combine all our demos into one zip-archive. One of the most useful tools we have developed allows us to write all the source code used in the book in one place, and then we have tools that automatically update it from the original sources. Suppose we need to select a row, class, object, or function that we discuss in a book. We have tools through which you can make direct links to the source code. This is also useful because every time you download a book, the source is updated. So we do not write the source directly into the text, but into a separate file.

- My next question will be related to the previous one. You said that everyone learns differently and I, as a developer, can read books, watch videos on YouTube, read articles on a platform for learning. But why should I attend conferences?

- This is a good question. Offhand, I can name two reasons why it is worth doing. The first is the most obvious: presentations and reports at conferences are usually well thought out and specifically designed for viewing. As a rule, such a report is devoted to a clearly defined problem - for example, refactoring. When you sit in the audience, where there is a good report on refactoring, it is as if you are refactoring yourself, you are included in the presentation, in the process. Well, for me the personality of the speaker, his emotions are always interesting.

The second reason is less obvious. I call it “hallway chat” - besides the actual reports, you meet and communicate with people who do the same thing as you. Our activities as developers are by definition individual - but when you begin to communicate with many other people who are in the same space as you and are doing the same things as you, this activity automatically becomes social. Another benefit of “socializing in the lobby” is that you meet people who need your services, your technical knowledge or teaching experience. In my experience, we find more customers than anywhere else — even our books and our videos.

- You have already written a lot of books - tell me, what are you working on now? Maybe some spoilers?

- Now I mainly deal with blockchains. If we talk about blockchains, augmented reality, deep learning, in these areas it's great that they are very popular now, so at almost every conference I attended over the past few years, I entered into very lively discussions with people interested in these items. And often it could be the front end developer on Google, who in his spare time deals with other topics.

As for me personally, the projects that I do are mainly related to the economy - and the most surprising is that this is a very interesting subject. In addition, I am currently working on a book called “C ++ for JavaScript developers”, which is still in the early stages of writing. I will be very happy to discuss this topic, if the meeting at the conference on JavaScript someone who worked with C + +.

- Will this book be somehow related to WebAssembly? You understand, C ++ and JavaScript ...

- The book is mainly devoted to EOS - this is a fairly new blockchain. It is similar to Etherium, but created using LLVM, and this allows you to write a contract for anything that compiles into LLVM, including C ++.

- Great. Let's move on to the next section, it will be more closely related to your presentation at HolyJS. You used to work with Angular, Vue, React, JavaScript - and now you are making a report on Flutter, Google's mobile platform, written in Dart. What prompted you to this?

- In such a formulation, it really sounds funny. Here is a similar story on how I came to Angular, as I have already mentioned above. I wanted to write a few applications for myself and my friends who use Android, who use iPhone. We already published a book about ReactNative, and I had experience with this platform, but I wanted to try something else. I can write in Java, Kotlin and Swift, so I started writing an application in Swift. As far as I know, attempts are being made to adapt Swift for Android, but those with whom I am familiar are still at very early stages, you cannot count on them. In addition, it seems to me that many of them are 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.

— .

- Yes. , 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». . , , , . , . , , , , .

— , ?

- Yes.

— , HolyJS?

— , , , . , — , , . , , , , , , . , — , , . - , . , — .

HolyJS, , , , . - , , . , -, , , .

, , .

— , , -10 -15 , .

— -? .

— . , Dart Flutter — , , JavaScript. : HolyJS 24-25 , 1 Dart Flutter.

— . Flutter -.

Flutter Dart, HolyJS JavaScript: Dart . , : Angular, ng-book . , 24-25 !

Source: https://habr.com/ru/post/429564/


All Articles