Никита Дюмин

Никита Дюмин

Темы
Неделя
Feb 1, 2016 → Feb 8, 2016

Архив недели @NikitaDyumin

Понедельник


Привет, на этой неделе с вами Никита @NikitaDyumin. Fullstack JavaScript. Челябинск.

поговорим об изучении\обучении JS, собеседованиях (с обеих сторон), разделении труда на фронтенде

кроме того, либы и фреймворки в продакшене; кровавый энтерпрайз, легаси; новости JS; FRP как видят его Bacon и Rx, Функциональный JS

Работаю в международных командах, в разных часовых поясах. Agile. Scrum. Можно и об этом поговорить, если интересно.

@jsunderhood компания то какая?
Прикладные технологии twitter.com/abrosimov/stat…

@jsunderhood как проводите DSM?
Корпоративный мессенжер или Skype. Язык - английский. twitter.com/mike1pol/statu…

@jsunderhood Скайп? А на слаку переехать не думали? @mike1pol
Нужды, вроде нет. Скайп - крайне редко, в основном, Webex, был GoToMeeting, вполне удобно, неплохо интегрируется twitter.com/subzey/status/…

@jsunderhood тут скорей интересно как проходит согласование времени DSM
Если есть китайцы и европейцы, то выбора практически нет - наш день. Если есть австралийцы, европейцам совсем тяжко. twitter.com/mike1pol/statu…

Весьма успешно, в гордом одиночестве. Но есть коллеги, которые разделяют мои симпатии к Bacon.js и Rx. twitter.com/lqip32/status/…

@jsunderhood Про собеседования интересно, сейчас сам их прохожу)
Собеседования на JS - нечто особенное. Предлагаю рассказать о своем опыте прохождения. Может, и проведения. twitter.com/Tom910ru/statu…

Интересно, что до сих пор многие собеседования концентрируются на знании самого JS и его особенностей, а не алгоритмах, структурах данных..

@jsunderhood Да, особенное. Пришёл на собеседование. Убедились, что у нас с собеседующим нет вопросов друг к другу. Вышел на работу.
Давно? Надолго? twitter.com/webholt/status…

@jsunderhood провожу собеседования. Даю задачи на js (на размышление и алгоритмы), говорю об индустрии, классические архитектуры обсуждаем.
можно примеры задач? задачи на бумажечке или за компом? Просишь рассказать что-нибудь о предыдущих зачах? Challanges twitter.com/Bardty/status/…

@jsunderhood Я пробовал все, если что у меня есть xgrommx.github.io/rx-book
Спасибо. Полезно. Подобную книгу я бы начал с обозначения проблемы. twitter.com/xgrommx/status…

@jsunderhood Были случаи, когда приходилось кого-то будить для решения срочного вопроса?
я о таких не знаю, обычно на любой стороне света есть кто-то кто может решить проблему. twitter.com/iamakulov_/sta…

Важно вам, как нанимателю, чтобы у кандидата был блог\публичный репозиторий? Кандидаты, важна публичная активность компании?

Надо полагать, так бывает. И, я бы сказал, это нормально. twitter.com/vladimore/stat…

Сколько собеседований на одну вакансию считаете нормальным? Какие считаете обязательными, какие можно комбинировать? Сколько по времени?

@jsunderhood А какое решение обычно предлагают? Ну или так: var step=(next,clb)=>(s)=>(log(s),next(clb)); foo(step(bar, step(baz, log)));
Печально, но часто делают вроде такого: setTimeout(foo, 101); setTimeout(bar, 202); setTimeout(baz, 303); twitter.com/mista_k/status…

@jsunderhood @vladimore это нужно делать для того, что бы показать заинтересованность или точно знать, куда идёшь?
Важно понимать, что собеседования - двунаправленный процесс - ты узнаешь о компании, она о тебе twitter.com/Tom910ru/statu…

@jsunderhood предварительное по скайпу минут 30, после тестовое задание 1 день и уже потом в офисе (обычно в районе часа)
Какого рода задания на дом? twitter.com/mike1pol/statu…

@mista_k @jsunderhood Код немного упоротый, но общая мысль такая: Если A и B уже пришли, их можно показать, не дожидаясь C
На читаемость кода я бы обращал внимание. Но да, не надо ждать всех событий, достаточно соблюдать очередность twitter.com/subzey/status/…

Как на счет тимлида или команды, чтобы определить сможете ли вместе работать? Характер, способность общаться и т.п. twitter.com/medvezhopok/st…

@jsunderhood это ещё не самый плохой вариант. Хуже, когда спрашивают про библиотеки и фреймворки
Назовите методы обхода массива из underscore? Назовите не менее 8 популярных либ, реализующих наследование? :D twitter.com/elergy/statu…

@jsunderhood а когда необходимы алгоритмы в фронтенде?
Алгоритмическое мышление. Бывает, пока про замыкания спрашивают, упускают, что человек не может массив развернуть. twitter.com/iamstarkov/sta…

Вторник


Но ведь вопрос был в том, чтобы знать какие-то либы, кроме языка, в es6 тоже не все есть @hey_daniil @elergy

т.е. все-таки знание JS и веба, не навыки программировать или способность рассуждать? twitter.com/krasivieglaza/…

книги.. это мне нравится. Часто отвечают? @krasivieglaza

@jsunderhood, все так спрашивают про замыкания, будто в этом весь яваскрипт и разработка в целом.
Не зная о замыканиях, долго бы думали над таким? jsfiddle.net/et1jgpfy/ Hint: попереключайте Babel<>JS twitter.com/kinday/status/…

@elergy @jsunderhood инвесторы захотят забрать назад свои деньги как только узнают что там юзают var
только const, только хардкор? twitter.com/hey_daniil/sta…

@jsunderhood мне,как нанимателю,важно,чтобы работник решал поставленные задачи.И личные репы роли не играют
А если рассматривать личные репозитории, как индикатор того, что кандидат хочет и пытается развиваться? twitter.com/de_gis/status/…

@jsunderhood я часто провожу собеседования. Вопросы задаются просто как способ узнать как человек мыслит. На них нет правильных ответов.
Звучит отлично. Но как кандидат я бы напугался: что если, я мыслю неправильно? twitter.com/pismenny/statu…

@mr_mig_by @jsunderhood не знаю как у вас там, но если я дам наш нормальный таск, то за результатом можно через пару недель приходить.
Пример нормального таска? twitter.com/borovikov/stat…

@NikitaDyumin @iamstarkov @jsunderhood а они разве должны быть лучше?
нет, конечно, просто в моем случае, был отбор агенством, были сеньорные cv, 10+ лет стажа в мега проектах twitter.com/alex_ivantsov/…

@Bardty @jsunderhood не нужно выдумывать что-то с потолка, когда в нашей работе и так хватает проблем и можно спросить про их решения

@jsunderhood у нас была идея давать тестовое задание с gh на закрытие определенного issue либы которую мы используем

Чужими руками причинять добро опенсорсу? @_sashashakun @mike1pol

Если либы небольшие, а проблема понятна - из разряда "просто пойти и сделать". @mike1pol @_sashashakun

1 из 5 уже неплохо. Что читают? @krasivieglaza

Да, получается, надо знать об этом. Знать всем. Или отключить TCO в опциях. babeljs.io/repl/#?experim… @evgeniy_moroz


к тимлиду - хорошо, если есть к кому подойти. Ну, и со временем, хотелось бы стать таким, к которому подходят, ведь так? @kinday

понял сам - пойми другим? @kinday @KilgortTrout

🔥Тред (Никита Дюмин)
@jsunderhood можешь еще накидать задачек для собеседования, буду решать, понял, что ни черта не знаю промисы)

Раз уж постепенно переходим к изучению\обучению: Когда и как вы поняли, что знаете JavaScript? :D

Интересный список. Рекомендую, сам спрашиваю такие\подобные вещи. @krasivieglaza

Зря смеетесь, бывает и так. @POS_troi

ES6\2015 изучили\используете в продакшене и почему нет?

На взгляд, JS удобен тем, что фундаментальных вещей не так много, остального можно избегать (изучать по мере надобности) @sergey_panay

нет\подсознательно, возможно @Semenov

ES6 кратко github.com/DrkSephy/es6-c… ES6 полно exploringjs.com/es6/

Спасибо, было сегодня, но не в контексте ES6.Да, есть там и такая часть. @yamalight

@jsunderhood зачем мне знать алгоритмы, когда есть книжка под боком?
Чтобы время не тратить, например. Соответственно стоит знать то, что используешь часто, за остальным в книжку. twitter.com/pismenny/statu…

@jsunderhood ой, мне бы просто программирование выучить, не говоря уже про JavaScript!
выучить программирование? есть курсы? я бы записался twitter.com/mr_mig_by/stat…

@jsunderhood а я и не знаю. Когда покажется, что знаю - пора из профессии.
JS заботится о нас, JS этого не допустит, новые стандарты не перестанут появляться. twitter.com/Bardty/status/…

@jsunderhood не все возможности, но используем. Деструктуризация - очень мощная вещь. А вот про :: пока есть сомнения.
К слову, "Ваше любимое нововведение в ES2015?" twitter.com/Bardty/status/…

@jsunderhood Arrow Functions, Spread Operator, Destructuring Assignment.
О, аналогично, но в обратном порядке twitter.com/webholt/status…

@jsunderhood =>, деструктуризация и rest, spread и default аргументы функцый
Зачем нужны дефолты? twitter.com/denysdovhan/st…

@jsunderhood оооооч странный вопрос
Если есть аргументы, их кто-то должен передать мне, почему я должен сам решать что-то, если их нет? twitter.com/safinalexey/st…

@jsunderhood чтобы не делать var string = inputString || '';
это тоже решение, но не проблема. Проблема - пустой inputString. Не троллинг, так.. Провокация. twitter.com/iamstarkov/sta…

что плохого? зато я явно задаю значения и, кстати, стало быть, типы twitter.com/lqip32/status/…

мифическая документация, всемогущие IDE, а как же самодостаточный код? Понятный, приятный, простой. twitter.com/lqip32/status/…

@jsunderhood Как собеседуем и нанимаем - bit.ly/20DYa6j
Эх, я же писал, что важно именно "алгоритмическое мышление", что пока мы JS проверяем, люди яйца пожарить не могут twitter.com/pismenny/statu…

@jsunderhood я провоцирую, но на деле за 25 летную карьеру знание алгоритмов мне не пригодилось. Про собеседования - bit.ly/1nKsa2w
Я же не говорил про хоть сколько-нибудь сложные алгоритмы. Яичница. twitter.com/pismenny/statu…

@jsunderhood что думаешь про промисы?
Обожаю, решение вчерашней задачки от @mista_k выглядит привлекательнее, чем множество вариантов без промисов twitter.com/iamstarkov/sta…

@jsunderhood @mista_k уже видел пулл-реквест на внедрение промисов в ядро? github.com/nodejs/node/pu…
Драма. Промисы классные, но не панацея. Хотя меня лично такое API не смущает. twitter.com/iamstarkov/sta…

@jsunderhood там пока не решили какое API выбрать, как я понял
я имел в виду сразу отдавать промисы, без префиксов\постфиксов twitter.com/iamstarkov/sta…

Обожаю как люди называют либы. Обожаю потом гуглить. Кто знает CDN для github.com/cujojs/most ?

@jsunderhood rawgit.com/cujojs/most/ma…

@jsunderhood Може глянуть как я с Most+React+Ramda извращаюсь :D jsbin.com/musonu/6/edit?…
Я хотел поговорить об этом всем завтра, но да, давайте уже смотреть! twitter.com/xgrommx/status…

@Semenov @jsunderhood он с винды пишет, я слышал там слэши в другую сторону.
мне кажется, или все фронтендеры (кроме меня, конечно) на маках? twitter.com/Bardty/status/…

всегда было интересно, зачем? twitter.com/ihorzenich/sta…

@jsunderhood .Net и тестить верстку под ИЕ
а цена на эппловское железо такая же? twitter.com/denswor/status…

@jsunderhood с удовольствием сижу на Win10. Никаких проблем не имею.
Рабочий win8, дома win10. VMки на никсах, Под ios дебажим на рабочих маках. Пока не свихнулись. Пока. twitter.com/PollyGlot/stat…

@jsunderhood Я очень много потратил времени на функциональное и реактивное программирование) сейчас haskell
Потратил. Звучит трагично. Смотрел edx.org/course/introdu… ? Эрик крут, я считаю. twitter.com/xgrommx/status…

@denswor @jsunderhood тестить под IE лучше на стеке виртуалок
Я тестирование не заявлял, но можем тоже побеседовать. Использовал Nightwatch на Browserstack. Вопросы? Ответы? twitter.com/amel_true/stat…

@jsunderhood стационарник и вин10
Винда вообще прогрессирует. Лет 15 назад пришлось бы переставлять чуть что. Сейчас иногда достаточно перегрузить. twitter.com/Sigiller/statu…

What is the world coming to? Emacs keystrokes are wired into the base of my spine! twitter.com/bodil/status/6…
Раз уж говорим о рабочих местах. Редакторы? emacs? Кто-нибудь? twitter.com/joeerl/status/…

@jsunderhood coffee лучше
какие конкретно плюсы в продакшене? сегодня в 2016 году? twitter.com/Timrael/status…

@jsunderhood Пробывали сравнивать Nightwatch с "типа" официальным набором биндингов под Selenium - webdriver.io?
пробовали. я только помогал QA, решили, что с оберточкой удобнее twitter.com/operatino/stat…

@jsunderhood Много e2e тестов писали? Для SPA писали? Был доволен стабильностью исполнения тестов и результатами?
Много. Для spa. Стабильность, бывает, подводит. Фокусы всякие. На голом селениуме лучше не было (была Java+WedD) twitter.com/operatino/stat…

@jsunderhood убунту
редактор\IDE? twitter.com/dzenbee/status…

@Bardty @Tom910ru одна из моих задач: jsfiddle.net/008szL5r/

@jsunderhood emacs после 5 лет вима
почему не IDE? навигация по проекту, статический анализ кода, всякие вьюхи с дифами, конфиги для запусков? twitter.com/RusAlexander/s…

@jsunderhood навигация ерунда, стат анализ к иде не имеет отношения, и что такое конфиги для запусков?
стат анализ с результатами построчно. конфиги всякие - удобные менюшечки twitter.com/RusAlexander/s…

@jsunderhood ну и софт который старше тебя, Бесплатный, и до сих пор популярен достоин хотябы знакомства с ним
Кроме того, есть языки, под которые просто нет альтернативы. я emacs использую на никсовых vmках, где нет иксов twitter.com/RusAlexander/s…

Среда


@jsunderhood тут имхо больше вим подходит
Опять же, на мой взгляд, для такой цели лучше всего подходит то, что ты уже знаешь хотя бы примерно. twitter.com/RusAlexander/s…

@jsunderhood es6 и coffee - сейчас сахар, в кофе сахара больше; в Бабеле не работает часть фич из es6, надо искать полифилы на них
К вопросу о любимых вещах ES6, каких фич, которые вам нравятся, не хватает в бабеле? twitter.com/Timrael/status…

@jsunderhood @krasivieglaza Для какого уровня предназначены эти вопросы? Какого уровня человек, если он отвечает на 50%? На 75%? На 90%?
Отвечает на 90% - знает JS и Web, умеет кодить (там есть задачки). Проектирование там не отражено совсем. twitter.com/iamakulov_/sta…

@fliptheweb @jsunderhood А что искажать? Coffeescript не нужен и все =) также как и Ruby
Говорят, кофе был нужен когда JS был слаб и молод. Руби делали, чтобы людям нравилось на нем писать. Людям нравится. twitter.com/xgrommx/status…

@iamstarkov @jsunderhood а, нашёл что там есть промисы из es6, только в доках почему-то об этом ни слова
Потому, что это часть языка, а не ноды. В нодах 4,5 проблем не будет. В старых нодах можно Q, vow, jQuery :D и т.п. twitter.com/safinalexey/st…

Попробуем: jsfiddle.net/80f80tjq/ twitter.com/METALLFACE/sta…
Ну, что же вы? я уже даже сам решил. twitter.com/jsunderhood/st…

@jsunderhood @krasivieglaza Апну. С процентами, пожалуй, слишком, но для какого уровня вообще эти вопросы?
Уровень каждая компания сама определяет. По мне, надо смотреть еще на умение рассуждать, принимать решения. twitter.com/iamakulov_/sta…

@RusAlexander @jsunderhood OOP дно в js - js должен быть функциональным с композициями и каррингом
Кто-то вообще рад этим вашим классам в ES6? Карринг из коробки был бы весьма приятен. twitter.com/xgrommx/status…

@xgrommx @RusAlexander @jsunderhood Не надо юзать карринг, юзайте стрелки.
А как они противопоставляются? вот карринг со стрелками: const add = x => y => x + y; twitter.com/freiksenet_ru/…

@jsunderhood рады все, особенно менеджеры, можно нанять персонал для простых вещей, которому даже неизвестно прототипное наследование
Классы и прототипы подразумевают ООП. Научиться ООП куда сложнее, чем просто понять как работают прототипы. Нет? twitter.com/RusAlexander/s…

@jsunderhood Скажите, вы когда:нибудь употребляли Хаскелль? :)
внутривенно. А если серьезно, особенно интересен опыт для web'а. twitter.com/subzey/status/…

@subzey @jsunderhood есть elm для любителей монад и аппликативов - purescript все это компилится в js
ну, либо что-то вроде github.com/ghcjs/ghcjs twitter.com/xgrommx/status…

@jsunderhood при чем тут лямбды к каррингу? Карринг это разбивание ф-ции от n аргументов на n на ф-ций от 1 аргумента и результат есть ф-ция
Я так и разбил. Руками. А говорил, что было бы интересно, если бы JS умел это делать сам (как ML, Haskell). twitter.com/xgrommx/status…

@jsunderhood У elm'а больше упор на реактивность там Signals из коробки по умолчанию
Из всех "реактивных" инструментов\либ во фронтенде, какую (бы) выбрали и почему? twitter.com/xgrommx/status…

Кстати, сегодняшняя тема #frp #rxjs #baconjs #mostjs Делимся мнениями, вопросами, success story

@jsunderhood @freiksenet_ru @xgrommx @RusAlexander но это не картирование, я не смогу вызвать функцию сразу со всеми аргументами
Можешь, конечно: add(1)(2) :D Скобки - ограничение моей реализации. Та же Rambda позволит передать все за раз. twitter.com/iamstarkov/sta…

@jsunderhood @freiksenet_ru @xgrommx @RusAlexander все ещё вызываешь её дважды, ну да ладно
Нет, я вызываю ее один раз, она возвращает мне функцию, вызвав которую я получу свое вычисление. Все по ГОСТу. twitter.com/iamstarkov/sta…

@jsunderhood ramda

@jsunderhood Что значит «реактивный»? Тот, который работает с данными как с потоками?
кратко: вроде того полно: gist.github.com/staltz/868e7e9… twitter.com/iamakulov_/sta…

@jsunderhood @xgrommx @RusAlexander Ну зачем? Сделай замыкание, тот же partial application. Не надо городить неочевидное и нечитаемое говно.
Замыкание само по себе никуда не передашь, в отличие от аргументов. Приходится городить ёлочки и пирамидки. twitter.com/freiksenet_ru/…

Замыкание само по себе никуда не передашь, в отличие от аргументов. Приходится городить ёлочки и пирамидки. twitter.com/freiksenet_ru/…
Стало быть, замыкание не используешь повторно вне текущего контекста. twitter.com/jsunderhood/st…

@freiksenet_ru @jsunderhood @xgrommx @RusAlexander Ramda.curry((x, y) => x+y)); делайте каррирование очевидным
Представим, что в JS можно было бы const add = (x, y) =&gt; x +y; вызвать и так add(1,2);, и так add(1)(2); twitter.com/iamstarkov/sta…

@jsunderhood монады спасут
само собой twitter.com/mr_mig_by/stat…

Итак, к проблеме jsfiddle.net/80f80tjq/ У нас есть два простых эмиттера событий, но события тяжело согласовывать и синхронизировать

Совокупность событий одного эмиттера можно представить как поток, такой поток можно преобразовывать, объединять с другими.

Тогда, в решении создадим по потоку для каждого эмиттера и укажем, что хотим объединять их суммируя попарно (zip): jsfiddle.net/o8Lbyzp3/

Нас не интересуют конкретные данные, нас не интересует время. Нас интересует только соотношение потоков: как из данных получить новые данные

Мы получаем описание того, как из исходного состояния получить желаемого: более декларативно, менее императивно

Исходное состояние получаем из источников: событий DOM, таймера, констант: Bacon.fromEvent(document.body, "click"); Bacon.constant(42); ..

результирующие состояние применяем к внешнему миру: Bacon.constant(42).onValue(log); или .subscribe в #rxjs или .observe #mostjs

Зачем это все? Императивно, мы изменяем данные, реагируем на события сохраняем состояния, делаем бесконечные проверки, дебажим.

Декларативно, при помощи потоков мы можем описать конечный автомат, который укажет состояние в каждый момент времени.

что же #frp совсем никому не интересно, не понятно?

Все же о Бэконе. Создадим стрим, который порождает модель. Назначим рендеринг сайд эффектом: jsfiddle.net/hmufrf35/2/

Пару кнопок, клики- стримы значений (+1\-1), объединим их в один, модель - редьюс этих значений с помощью суммы. jsfiddle.net/kc25xo3y/2/

Четверг


@jsunderhood чистого frp в js нет это скорее reactive composition
Я давно стесняюсь эти три буквы произносить. Очень уж многое называют ими. Conal Elliott негодует. twitter.com/xgrommx/status…

@YodaPunk @jsunderhood после 18-20 рост почти не меняется. А если меньше, то спрашивать раз в Х времени.
Положим, по условиям меняется. Про опрос: мне кажется, имеется в виду, что момент изменения роста известен, нет? twitter.com/ymatuhin/statu…

Сегодня предлагаю обсудить фреймворки и либы в продакшене.

Рассказывайте, как использовали либы, у которых еще не было релиза и никто не пострадал.

Рассказывайте, как злые менеджеры\юристы\тимлиды не дают вам использовать любимые инструменты.

Рассказывайте, как пришли в проект, а там 100 лет назад, кто-то выбрал либу, которая забагована и не развивается, а вы страдаете.

@jsunderhood Это типа сами написали либу, сами опубликовали, сами использовали.
нет, это типа вы нашли серебряную пулю, а у нее поменялся API :) ну, или создатель утратил интерес к ней. twitter.com/webholt/status…

Иными словами, делимся опытом. Как решаете добавлять ли либу для чего-либо? Как решаете какую либу использовать?

Ну, не все лицензии всем продуктам подходят, например. twitter.com/_sashashakun/s…

@jsunderhood в огромном SPA-проекте не используем вообще внешние зависимости. Новички первые три месяца охреневают, а потом норм.
Но ведь всякие Реакты и Ангуляры как раз и нужны, чтобы легче было поддерживать огромные SPA. Или нет? twitter.com/kojoru/status/…

@jsunderhood Условия заметного аскетизма диктуют необходимость очень аргументированно обосновывать необходимость той или иной либы.
Ну, вот это самое интересное: доводы, причины и подводы. twitter.com/webholt/status…

@jsunderhood Доводы для чего? Для использования или для отказа?
Для использования, для отказа, для замены, для выбора среди прочих аналогов. twitter.com/webholt/status…

Ближе к вечеру. С мыслями надо собраться. twitter.com/lqip32/status/…

@jsunderhood Оно должно быть действительно полезно. Всем.
Не очень конкретно звучит. "Ангуляр полезный?" - "Да, давайте использовать". twitter.com/webholt/status…

Статьи по теме, если кто-то пропустил: habrahabr.ru/company/pvs-st… habrahabr.ru/post/275485/

@jsunderhood Вполне корректно. Выбор ангуляра происходил до меня, но, вероятно, как-то так и выглядел :D
И каково теперь? С оптимизмом смотрите в будущее? Действительно много преимуществ по сравнению с vanillaJS? twitter.com/webholt/status…

@jsunderhood полностью согласен с @kojoru Хотя сейчас мы для View стали использовать React в некоторых местах
Для чего реакт? виртуальный дом? другие реализации смотрели? twitter.com/flaticols/stat…

Кстати, бывает, корпоративным клиентам важно, чтобы либы, которые вы использовали было легко нагуглить. twitter.com/iloldhardly/st…

@jsunderhood Речь про либу, а не про чистый JS? (Неудачное название у неё). Не стану сравнивать тёплое с мягким.

@jsunderhood Не, на ванильном js далеко не уехали бы.
А вот @kojoru едет. Думается, он не единственный. twitter.com/webholt/status…

@kojoru @jsunderhood А как вы привлекаете новых разработчиков? У меня прилично знакомых, для которых факт работы над чем-то самописным...
Мы привлекаем тех, кто готов работать с кодом, с продуктом, а не с тем фреймворком, который изучил :D twitter.com/iamakulov_/sta…

"Он решит все проблемы на земле" twitter.com/themostserious…

@kojoru @jsunderhood вы очень сильно подрываете командную работу этим. С самопалом удобно работать только его автору.
Неплохой аргумент. Наверно. А API third-party всегда удобны и всем понятны? twitter.com/borovikov/stat…

Опыт разработки переносим. А если вы не штампуете однотипные сайтики, то специфика у работы\продукта будет всегда. twitter.com/iloldhardly/st…

@jsunderhood По крайней мере вся команда в равном положении. Кривизну API обычно компенсирует документация и best-practices
Почему вся команда не может контрибьютить в этот (свой) фреймворк? twitter.com/borovikov/stat…

@iamakulov_ @jsunderhood уверен, что таким ребятам в любом случае интереснее будет в маленьких новых проектах, а не в ползучем легаси.
А не любой ли успешный проект превращается в легаси? На всех задорных стартапов не хватит. twitter.com/kojoru/status/…

@jsunderhood Самопал имеет право на жизнь при условии, что он open-source first. Какой интерес конрибьютить в поделку-однодневку?
Вот тут надо сказать, что бывают проекты, которые делают Х и надо написать к У. А бывают, которые пишут годами. twitter.com/borovikov/stat…

@jsunderhood с текущим темпом развития индустрии, любой проект через 2 недели разработки - уже легаси.
Использующий безнадежно устаревшие технологии\подходы\либы\фреймворки. Правда, все тот же JavaScript twitter.com/Bardty/status/…

@jsunderhood только зафиксировал версии зависимостей - все, в дом престарелых пристраивают(
Я бы всегда фиксировал. API меняется. twitter.com/Bardty/status/…

Ну, так и не для себя же. А потому, что нас любит. twitter.com/iloldhardly/st…

@jsunderhood Тем более, у этого мега-поделия не будет главного преимущества - минимализма. Нафига все это надо было тогда?
Почему нет минимализма? Как раз пишется под себя, под свои задачи. Уже говорили тут, что нет лишних мега абстракций. twitter.com/borovikov/stat…

@jsunderhood А у вас, кстати, свои технологии или популярные рыночные?
У нас много web проектов. Есть всякое. Есть свои, есть с BB, есть Angular и, вроде, React. А есть Qooxdoo, конечно. twitter.com/iamakulov_/sta…

А еще, стоит различать библиотеки и фреймворки. От первых (теоретически) избавиться проще.

@jsunderhood за много лет задач будет много, будет много абстракций и легаси. и ненависти всех-не-авторов.
И, тем не менее, весь код будет решать реальные задачи вашего проекта. И весь код свой - правь\удаляй\круши twitter.com/borovikov/stat…

@kojoru @iloldhardly @jsunderhood Расскажите, как сделать самописный фреймворк, который будут любить, а не ненавидеть?
Во-первых, ненавидеть будут всегда. Во-вторых, надо спросить авторов фреймворков, которые тебе нравятся :) twitter.com/iamakulov_/sta…

@jsunderhood Еще раз, это верно (да и то сомнительно) только для авторов, другие будут проклинать этот огромный кривой велосипед.
Решительно не понимаю, кто другие? twitter.com/borovikov/stat…

@jsunderhood всегда есть автор/вдохновитель и так далее и все остальные, включая новых сотрудников.
Новые\другие всегда будут приходить и ненавидеть и хотеть все переписать на Ангуляре\Реакте\Что-там-модно-сейчас twitter.com/borovikov/stat…

@jsunderhood кстати с точки зрения соискателя я бы в контору с велосипедами не пошел был. какая перспектива вникать в это?
Опыт. Названия не важны. API не важны. Важны принципы. Важны: MVC, Observer, Two-way data binding, virtual DOM, etc. twitter.com/borovikov/stat…

@kojoru @iloldhardly @jsunderhood В моём опыте был долгосрочный проект с самописным фреймворком. Половина команды его сильно не любила.
В моем опыте был проект на неподходящем фреймворке, который все ненавидели. Кололись, плакали, но жрали. twitter.com/iamakulov_/sta…

@jsunderhood А как понять, что в команде крутые чуваки, которые знают и применяют эти принципы и при необходимости смогут научить?
Можно спросить. Можно послушать, о чем тебя спрашивают. Послушать о проекте, задачах которые решают. twitter.com/iamakulov_/sta…

@jsunderhood его ненавидели потому что он не подходил или потому что он сам по себе был плох?
Никто не знает. По назначению его не применяли :) Хотя, @lqip32 вы же применили? почему переписываете все теперь? :) twitter.com/abrosimov/stat…

@jsunderhood А на что стоит ориентироваться? Посоветуй какие-то маркеры, пожалуйста. У меня небольшой опыт собеседований.
Дело личное. Цель собеседования - понять подходишь ли ты команде под задачу и подходят ли команда, условия тебе. twitter.com/iamakulov_/sta…

@iamakulov_ @jsunderhood спроси о том, что вдохновляет в их работе, о масштабировании, о планах на будущее
Спроси, как(чьи) идеи оцениваются и попадают в продукт. Спроси о балансе время на новые фичи\ на исправление багов. twitter.com/viatsko/status…

@jsunderhood А на что стоит ориентироваться? Посоветуй какие-то маркеры, пожалуйста. У меня небольшой опыт собеседований.
Используют ли они OSS фреймворки\либы и как выбирали, есть ли недовольные :) Обращай внимание на авторитарность. twitter.com/iamakulov_/sta…

@jsunderhood А авторитарность при чём?
Опасно же. Человек не приемлет других мнений, а вдруг он чего-то не знает или не прав. А ты учишься :) twitter.com/iamakulov_/sta…

Кто-то уже запустил Cycle.js в продакшен?

Описан в академических кругах? Адаптация не быстра. И потом, после MVC появлялись MVP, MVVM, MVI, наконец. twitter.com/krasivieglaza/…

Бывает, на собеседованиях спрашивают, как выбирать и даже какой выбрать из {X, Y, Z}. И даже бывает правильный ответ twitter.com/krasivieglaza/…

@jsunderhood Как поддерживать актуальной информацию является ли пользователь самым высокими среди друзей друзей?
Интересная же задача. Никого не зацепило? twitter.com/YodaPunk/statu…

@ymatuhin @jsunderhood давайте не рост, а вес? Любое меняющееся свойство
Деньги, я предлагаю деньги. Жизненно. twitter.com/YodaPunk/statu…

@jsunderhood Elm => View = Update(Action, Model) ~ Update(Model')
Ёмко, но надо немного разбираться о чем речь. twitter.com/xgrommx/status…

@xgrommx @jsunderhood Elm очень крутой, можно запрограммировать своего марио! elm-lang.org/examples/mario
не то что на других языках twitter.com/lisovskyvlad/s…

@jsunderhood тут вопрос про TCO. И похоже babel не верно ее делает (здесь не применимо), иначе старый код ломается, чего быть не должно
Именно, о том и речь была, что надо знать о ТСО и что замыканиях, чтобы понять почему результат неожиданный. twitter.com/rdvornov/statu…

@jsunderhood оаз уж про Elm заговорили, то там сила в комбинации ФП со строгой типизацией и компилятором.
Строгая типизация - панацея? twitter.com/Bardty/status/…

@jsunderhood ничто не панацея. Но помощь разработчику - да. За счет явности и предсказуемости.

@jsunderhood Первое видео тут xgrommx.github.io/rx-book/conten… - самое лучшее для понимания реактивности
Brian Beckman, Erik Meijer - вообще рекомендую: просто и понятно о сложном. twitter.com/xgrommx/status…

@jsunderhood все же это больше похоже на ошибку. TCO по идее не должна влиять на логику кода, это внутренняя оптимизация...
Это и есть ошибка. Вопрос был в том, как понять откуда ноги растут - пойти и отключить TCO в бабеле. twitter.com/rdvornov/statu…

@jsunderhood нет, но что если я скажу тебе, что в runtime не бывает ошибок принциально?
Будет ложью, наверно. Не спасает статическая типизация от логических ошибок, ошибок единиц измерения и всяких NPE twitter.com/lisovskyvlad/s…

@jsunderhood Ни единой "TypeError: 'undefined' is not a function". Можно сконцентрироваться на логике. Ладно, в типах я сам не шарю.
repl.it/Bjkf концентрироваться надо на проверках на null, а не на логике :D twitter.com/lisovskyvlad/s…

К вопросу о статической типизации, в JavaScript нам просто нужен вывод типов, конечно: ru.wikipedia.org/wiki/%D0%92%D1…

@jsunderhood Flow, Typescript?

Пацаны, добавьте знаний, а? github.com/mr-mig/going-t… @backendsecret @jsunderhood
Набегаем! Заодно тут делимся фантазиями на тему. twitter.com/mr_mig_by/stat…

Пятница


В этот прекрасный пятничный день поговорим о разделении труда в web разработке.

Есть ли у вас выделенные аналитики, дизайнеры, UX, верстальщики.

Пишете ли e2e тесты? Сами? есть ли QA\QC - внутри команды или отдельная группа?

Работал в команде с PO, BA, UX, дизайнером. Довольно удобно, каждый занимается своим делом, но приходится много согласовывать усилия.

В плане тестов писал сам, писали QA внутри команды и была отдельная команда (разные проекты). Понравился второй вариант.

@jsunderhood за много лет видел лишь одного QA, который писал тесты (на api). Остальные - тупо кликеры...
Бывает, разделяют QA и QA Automation должности. Не доводилось сталкиваться? twitter.com/RinatGilmanov/…

@jsunderhood Как поддерживать актуальной информацию является ли пользователь самым высокими среди друзей друзей?
вот такой набросок решения: jsfiddle.net/5ow0rc4t/ twitter.com/YodaPunk/statu…

@jsunderhood У нас, кстати, два QA и два QA Automation
Привязаны к одному продукту? Как успехи? Что используете для e2e? twitter.com/iamakulov_/sta…

Сегодня в рубрике "Задача дня": make this work: const result = plus(one(), 10, mult(two(), three(), 5)); log(result); // 41

@jsunderhood а чего здесь сложного?
Ничего, пятница же :) twitter.com/Bardty/status/…

@jsunderhood А решения в лоб ждём или каких-нибудь хитростей?) :: jsfiddle.net/aeu665tz/
Мило, в reduce можно же без инита? А так: const result = plus(one(), 10, v('a'), plus(two()), three())({ a: 1 }); twitter.com/webholt/status…

Правильный способ? В каком смысле? const - просто гарантия того, что присваивание значения произойдет один раз. twitter.com/vlkosinov/stat…

@jsunderhood как-то не красиво) Immutable.js был бы лучше тут
ждем твое решение :) twitter.com/xgrommx/status…

@webholt @jsunderhood log = () => 41
но ведь это magic number. Надо эксплицировать: const THE_CORRECT_ANSWER = 41; const log = () => THE_CORRECT_ANSWER; twitter.com/elergy/statu…

@jsunderhood на практике по должностям не делили, скорее по обязательствам. QAA писал тесты на селениуме, безуспешно
Почему безуспешно? Не стабильно? На голом селениуме? twitter.com/RinatGilmanov/…

Тогда правильный. С примитивными типами все хорошо. С объектами: Object.freeze(), Immutable.js, ... twitter.com/vlkosinov/stat…

@vlkosinov @jsunderhood забыл вообще когда последний раз писал let. наверное в for of только. какие есть ещё кейсы, зачем переопределять?
В циклах, если не использовать forEach, map, reduce и рекурсию. В замыканиях (когда инициализация асинхронна). twitter.com/milk_is_my_lif…

@jsunderhood Object.freeze изрядно тормозит)
Тормозит. Можно просто не менять :) JS итак держится на конвенциях: что можно, что хорошо, а что плохо. Ну, и либы. twitter.com/xgrommx/status…

@milk_is_my_life @vlkosinov @jsunderhood если не путаю, то в for of тоже работает const. Потому что на каждой итерации инициализируется.
for (const i = 0; i < 10; i++) { console.log(i); } тоже можно выполнить :) выполняться долго будет, правда twitter.com/Bardty/status/…

@RinatGilmanov @jsunderhood про подход - сначала тесты потом код не вспоминали. - типа дорого и долго. 👻
Может, и не дорого: надо сдать быстро и забыть - дорого. Если постоянно (годами) пишете один продукт - окупится. twitter.com/taujavarob/sta…

@RinatGilmanov @jsunderhood тесты идеально чтобы писал не тот кто пишет тестируемых код - и писал бы раньше чем код напишется! Имхо. 👻
"Я тебе тут тесты написал - сиди проектируй как хочешь, но вот твои классы, методы, сигнатуры" twitter.com/taujavarob/sta…

[1,2,3].map(x => () => x) twitter.com/vlkosinov/stat…

Кстати, хорошее решение этой "классической" задачи. twitter.com/vlkosinov/stat…

let и const в циклах twitter.com/vlkosinov/stat…

@jsunderhood @RinatGilmanov но проблема:билд падать не должен. Как сделать если тесты писать перед кодом? - в комите они(тест и код)вместе!👻

@Timrael @jsunderhood выделенные поли ускоряют разработку, но портят людей. Шаг влево, шаг вправо - работа встала. “Это не моя проблема”.
Тоже бывает. Надо вникать и помогать в смежных ролях. twitter.com/Bardty/status/…

Подвох к утренней задаче const result = plus(one(), 10, v('foo'), mult(two(), three(), 5)); log(result({ foo:1 })); // 42 Добавим переменные

Более всего интересно, насколько пришлось изменить код первого решения.

@jsunderhood, а есть пример идеального решения в вакууме?
Наверно, не идеальное, но авторское: gist.github.com/nikitadyumin/6… twitter.com/kinday/status/…

А вот хороший разработчик сохранил обратную совместимость: twitter.com/lqip32/status/…

@jsunderhood там вот это: learn.javascript.ru/let-const
let-const на русском: twitter.com/Sigizmund_RF/s…

Пятница, вечереет. Время решающего коммита, дамы и господа. И пусть продакшен содрогнется!

@jsunderhood как вы угадали то? 👻
Опыт подсказывает: важные коммиты всегда приходятся на пятницу, самые важные - на пятницу перед отпуском. twitter.com/taujavarob/sta…

@jsunderhood @taujavarob релизиться перед отпуском грешновато
простые истины с @jsunderhood twitter.com/almalexey/stat…

@pgrekovich @jsunderhood и самый простой способ его соблюсти: задеплоить в 0:01 в субботу
суббота не для работы twitter.com/Devgru/status/…

@pgrekovich @jsunderhood в Казани есть конторы, где это обязательное правило "деплой в пятницу не по фен-шую" )))
жаль, что только там... twitter.com/Woundless/stat…

Суббота


@jsunderhood ну вроде как основатели из США, так что может еще где в России филиалы есть)
А, понятно, почему не дают деплоить в (нашу) пятницу. Им потом разбираться весь день в свою. twitter.com/Woundless/stat…

@jsunderhood наверное) но нам это подали как "деплой в пятницу грозит испорченным уикэндом"
Звучит логично twitter.com/Woundless/stat…

Интерактивные и наглядные описания операций над #rxjs Observables. rxmarbles.com

Кому скучно, можете потроллить: top.fse.guru/how-to-pick-a-… @jsunderhood @cssunderhood
How To Pick a Frontend Web Framework twitter.com/mr_mig_by/stat…

Воскресенье


Итак, воскресенье: моя вахта подходит к концу. Я благодарю всех, кто обсуждал, решал, высказывал свое мнение и просто дотерпел.

Напомню, на этой неделе с вами был @NikitaDyumin "Прикладные технологии" Челябинск.

Екатеринбург, Челябинск, Пермь, Ижевск, Астана, Ростов, все, кто рядом, обратите внимание на региональное сообщество @frontendfellows

@jsunderhood Хочешь рассказать о чём-нибудь на @frontendfellows в Челябинске?
Можно. Я бы еще поговорил о bacon\rx\most - это по делу. Либо за жизнь: легаси, фреймворки, обучение, собеседования. twitter.com/mista_k/status…

@jsunderhood, выручишь? twitter.com/iamakulov_/sta…

@jsunderhood И как понять то, что происходит здесь? pic.twitter.com/fY3TNaZiEJ
console.log(0.5) возвращает undefined, что само собой не функция, но ты вызываешь это с результатом (function(){}()) twitter.com/iamakulov_/sta…

Вот вам и совет напоследок: "всегда ставьте точку с запятой"

@jsunderhood Мне не нравится совет. «Всегда ставьте точку с запятой, если не знаете, как работает коррекция ошибок относительно неё».
Тогда вам еще пара советов не понравится: "не используйте ==" и "не используйте with" twitter.com/webholt/status…

А в этой ситуации "use strict" ничего не меняет. Вера в него преувеличена. twitter.com/webholt/status…

@jsunderhood Про with нравится. Про «==» замечание аналогичное.
Если намучиться и понять with, можно потом ходить и говорить, что там тоже все тривиально. Ну, до очередного WTF twitter.com/webholt/status…

@jsunderhood Хотел сказать про пользование линтерами, но не в ту степь понесло.
Линтеры - хорошо. Но, в основном, полагайтесь на себя: пишите простой, понятный и , стало быть, надежный код. twitter.com/webholt/status…

Чтобы понять JavaScript, надо думать как JavaScript.

@jsunderhood прорекламируйте что-ли JavaScript Паттерны Стояна Стефанова или хотя-бы так: shichuan.github.io/javascript-pat…
Рекламирую twitter.com/pytkin/status/…

@jsunderhood @webholt так как всё новое в JS есть синтаксический сахар - то просто писать уже на выйдет. 👻
Сахар нужен вроде для того, чтобы писать лаконично. Если что-то мешает - не используйте. twitter.com/taujavarob/sta…

@jsunderhood @webholt он не мешает. Он как наркотик. 👻 twitter.com/jsunderhood/st…
Лекарство от сложного кода простое - пишите не для себя, пишите для других, даже если вы один в команде. twitter.com/taujavarob/sta…

@jsunderhood @webholt э, другой может быть гуру или джуниор. 👻

Однажды я прочитал Стефанова и устроился на работу. twitter.com/_sashashakun/s…

@jsunderhood @webholt но гуру код для джуниора покажется пресным, а джуниору код для гуру покажется магическим. 👻 twitter.com/jsunderhood/st…
Не думаю, гуру доволен, когда код ему понятен, джун радуется, когда ему понятно и вам должно радоваться за ваш код. twitter.com/taujavarob/sta…

@jsunderhood @webholt кстати пример: if (flag) { next() } Или?: flag && next() Первый ясен - второй краток. - что выбираем? 😊
Первый, само собой. Ибо завтра у вас добавится еще условие или еще действие. В дебаге проще. История в git чище. twitter.com/taujavarob/sta…

@jsunderhood @webholt Второй пример: function (x) { x = x+5; return x; } Или?: x => x+5; Первый ясен, второй краток. Что выбираем?
Делай return x+5. Fat arrow хорош для простых шаблонных функций без side effects. Если что-то сложнее - function ИМЯ twitter.com/taujavarob/sta…

Понедельник


@NikitaDyumin @jsunderhood не забудь попрощаться с читателями. архив за неделю jsunderhood.ru/NikitaDyumin/
Теперь уже точно конец недели. Спасибо еще раз. Всё былое тут: jsunderhood.ru/NikitaDyumin/ twitter.com/iamstarkov/sta…

Ссылки