Kirill Profile picture
Jul 21 23 tweets 5 min read
Есть у меня список принципов, которых я придерживаюсь когда пишу код. Кратким списком они есть тут ru.hexlet.io/pages/principl… но без раскрытия, а у людей появляются вопросики. Пришла пора ответить за слова. Лайк, тред, инфлюенс =>
"Язык — это инструмент" банально, но факт. Не прикипайте к языкам, язык для души и работы это разные вещи. Я не люблю го, но буду использовать там где он силен, я люблю кложу, но не буду использовать почти нигде (:D) PHP сила, TypeScript могила
"Программирование — это не язык" tldr: вычислительное мышление. Задача => избавляемся от лишнего (Абстракция) => разбиваем на подзадачи (Декомпозиция) => Находим закономерности (pattern recognition) => строим алгоритм. ru.wikipedia.org/wiki/%D0%92%D1…
"Понимание принципов важнее знания инструментов". Можно много читать книги про рефакторинг функций (мартин ты кто такой?) и радоваться авторефакторингу в иде, но код от этого не станет лучше (а станет хуже!) если не опираться на фундаментальные принципы: чистота, абстракция и т.п
"Паттерны — это не принципы программирования" за шаблонами лежит гораздо большая идея, из которой этот шаблон следует. Если не понимать эту идею, то будет разработка в стиле: так, так куда применить абстрактную фабрику в проекте?
"Написание кода — не цель" Задача самурая устранять боль, наиболее эффективным с точки зрения стоимость/затраты способом. Задачи могут решаться удалением кода или административным решением. Думайте о том как уменьшить количество состояний, а не запрограммировать их все
"Удаление кода лучше его написания" Я бы сказал нет кода нет проблем. Никому не нужно бесконечное число фич. Режьте все ненужное, постоянно осматривайтесь "а нахрен оно тут лежит?". Чувствуйте бизнес, будьте бизнесом, будьте
"Читаемый код важнее быстрого". С хорошей абстракцией, вы всегда успеете оптимизировать ваш код, особенно если она не протекает. Прочитайте хорошую книжку (очень тонкую) optimization.guide
"Любое решение имеет плюсы" Даже если вас съели, у вас есть два выхода. Хороший программист рассматривает любое решение, даже то, которое ему не нравится. Мы тут не фильмы на нетфликсе выбираем.
"Уровень мышления определяет уровень решений" Очень похожая мысль на парадокс блаба nestor.minsk.by/sr/2003/07/307… но для картины мира в голове. Изучайте разные подходы, парадигмы, экосистемы. После js изучение python это трата времени (для мышления), а изучение java мощь
Нативная интеграция: ищу авторов курсов (в хекслет) и преподавателей (в колледж). Люди добры, не проходите мимо, напишите в личку даже если не уверены в своих силах. Мы покажем путь, прокачаем и вдохновим
"Изменяемое состояние — это необходимость и корень всех бед", а не преждевременная оптимизация. Если надо что-то менять, то приходит жопа в: историчности, порядке действий, канкаренси, сложности восприятия, сложности реализации отладке, восстановлении, скорости и дальше по списку
"Побочные эффекты требуют изоляции" пока тема побочных эффектов не понята, никакие паттерны и практики программирования не сделают код лучше. В основе всего и ключом к основному разделению лежат побочные эффекты. Функциональное ядро и императивная оболочка.
Реклама книги: СИКП для тех кому по проще labirint.ru/books/865701/
"Абстракция управляет сложностью" сложность прячется за абстракцией, но сама абстракция может стать сложностью. Как быть? Правильная работа с побочными эффектами, уровневое проектирование, грамотное разделение по областям знаний, не слишком много обобщений
"Однообразие лучше локальных оптимизаций" Это мега важный принцип. Моторная и ассоциативная памяти решают. Делайте одинаково, даже если местами кажется, что можно срезать. Например даже если состояния два, в базе все равно лучше строка: легко расширить, одинаковый код по проекту
"Тесты вселяют уверенность" Страх внесения изменения в проект заводит его в тупик. Юниты мешают изменениям. Интеграционные тесты решают. Не надо ничего мокать, стабы и нормальная инверсия всегда предпочтительнее. Работайте с базой по настоящему.
"Эксплуатация — это часть системы" Ответственность программистов довести фичу до прода, а не слить в main. Time To Market управляет проектами. Обязательно к прочтению: цель и проект феникс
Ну и уже классическое: guides.hexlet.io/ru/check-list-…
"Код — это не продукт" хорошо понимаешь когда начинаешь делать бизнес, а там логистика, саппорт, продажи, сопровождение, аналитика, бухгалтерия, финансы. Из 80 сотрудников Хекслета только 5 человек работает над кодом платформы
"Хороший код не рождает хороший продукт" Как правило, успешный продукт соткан из ниток и изоленты. Скорость изменений решает, а дальше можно продать бизнес и не париться) Программисты склонны переоценивать значимость архитектуры. Уверен что этот твит засияет ночью
Кстати внутри Хекслета охрененный код. Монолит на Ruby, которому 8 лет. Спокойно пилим фичи, подчищаем тех долг и обновляемся на новые версии всего. Весь внешний вид на бутстрапе, фронтенд только в виде виджетов (не считая ide), в остальном старый добрый запрос-ответ и шаблоны
Из недобавленного: не все знают, но программирование в основном состоит из написания кода для переходов между состояниями в рамках каких-то автоматов. Если вы научитесь их видеть в коде, ваш мир не будет прежним.

• • •

Missing some Tweet in this thread? You can try to force a refresh
 

Keep Current with Kirill

Kirill Profile picture

Stay in touch and get notified when new unrolls are available from this author!

Read all threads

This Thread may be Removed Anytime!

PDF

Twitter may remove this content at anytime! Save it as PDF for later use!

Try unrolling a thread yourself!

how to unroll video
  1. Follow @ThreadReaderApp to mention us!

  2. From a Twitter thread mention us with a keyword "unroll"
@threadreaderapp unroll

Practice here first or read more on our help page!

More from @mokevnin

Feb 9
А замутим-ка мы тред про Zero Downtime Deployment или как деплоится и не беспокоиться. У вас как с этим?
Небольшой ликбез. Деплой – процесс выкладки новой версии кода. В простом случае выглядит как: закрыли сайт с сообщением "мы обновляемся" > накатили изменения в базу данных (миграции) > обновили код на серверах > рестартанули сервер > открыли сайт. У кого так лайкаем)
Если это происходит редко, то такая схема вполне позволительна, правда тогда возникает вопрос, почему редко? Деплоиться надо часто, чтобы не копились изменения и баги. А если деплои как положено хочется делать непрерывно? Тогда постоянные простои начинают мешать и раздражать
Read 24 tweets
Jan 16
Скинули сегодня вот такую статью: vc.ru/claim/348250-g… Несмотря на задницу, которая происходит во многих сервисах, все же образовательные площадки продают не курсы. Давайте тред, о том, почему торренты и ютуб не конкуренты платному обучению. Какой ваш личный топ?
Поехали. Есть наблюдения, в которых сходятся специалисты в образовании. Только 7% людей самомотивированы. Они достигают успеха практически всегда, независимо от способа обучения. Им не сможет помешать никакой плохо проведенный курс. Они больше всех топят за самообразование
Примерно такую картину мы наблюдаем в любой учебной группе. Есть несколько человек которые как тараны идут вперед, дальше середнячки и большая часть где-то позади и постепенно отваливается (если есть такая возможность). Школа, универ, опять же курсы. Это все на поверхности
Read 20 tweets
Jan 7
Давайте тред. Про то как значительно упростить интеграции между вашим проектом и сторонними системами. Все что касается событий, рекламных кабинетов, crm, аналитик, слака и кучи других систем. Вы используете сервисы типа Zapier?
Сначала про задачу. В любом SaaS сервисе, помимо самого продукта и его фич, есть много всего вокруг. CRM для продаж, система сквозной аналитики, рекламные кабинеты, событийная анилитка, автоматизация маркетинга (email, боты), виджеты на сайте и так далее. Тонны систем
И все они работают в связке. Когда на сайте оставляют заявку, она должна попасть в CRM продавцам, должна попасть в рекламный кабинет и систему сквозной аналитики для анализа эффективности, а еще нужна нотификация в слак и тикет на работу с клиентов после того как сделка закрылась
Read 28 tweets
Nov 8, 2021
На Хекслете довольно много материалов для опытных разработчиков, но из-за объема курсов, их не всегда легко увидеть. Мучу тред, где делаю краткий обзор развивающих курсов для опытных разработчиков. Сначала JavaScript (front/back). Поехали =>
Два курса + проект по тому как тестировать код. Без привязки к фронту, просто общие концепции и смыслы. Цель курсов в обучении практикам бережливого тестирования. Плюс работа с эффектами, моки, стабы, файлы, асинхронность вот это все ru.hexlet.io/programs/js-te…
SICP как много в этом слове. Книга, которая действительно учит писать качественный код и понимать что такое хорошо и плохо (сорри мартин, ты проиграл). На базе этой книги я сделал аж 5 курсов, которые заставят посмотреть на программирование другими глазами ru.hexlet.io/programs/js-si…
Read 11 tweets
Sep 2, 2021
Пришел после океяна и нет сил писать код (а у меня час дня сейчас). Нет сил – собери совещание как говориться. Делаю тред про то как понимать критичность разных кусков кода при разработке и ревью. Что от чего зависит, где можно и нужно забить, а где нет. Лайк, шер, алишер =>
Глобально и немного грубо весь прикладной код можно разделить на три уровня: Домен – то где бизнес логика + хранилища (бд), Управляющий код – то что оперирует доменом + инфраструктурный код и Представление – любые выходные данные типа binary, json, html и так далее
Ошибки на этих уровнях имеют совсем разные последствия. Некоторые целиком влияют на архитектуру и дальнейшую поддержку всего проекта, другие же локальны и создают грязный код по месту. Важно четко разделять их, для того чтобы не создавать напряжение там где его нет
Read 17 tweets
Aug 22, 2021
А напилю-ка я тред про концепции в разных языках программирования, которые помогают лучше понять возможности кодинга как-такового. Многие из этих концепций сильно облегчают жизнь и кардинально меняют способы описания логики. Поехали =>
Uniform Function Call Syntax. Фича языков D и NiM, позволяющая вызывать функцию тремя разными способами: как метод, как функцию и как команду. Удобно для создания цепочек. Во всех случаях это всего лишь функция: en.wikipedia.org/wiki/Uniform_F…
Так сорри, надо уехать. На днях допилю тред
Read 18 tweets

Did Thread Reader help you today?

Support us! We are indie developers!


This site is made by just two indie developers on a laptop doing marketing, support and development! Read more about the story.

Become a Premium Member ($3/month or $30/year) and get exclusive features!

Become Premium

Don't want to be a Premium member but still want to support us?

Make a small donation by buying us coffee ($5) or help with server cost ($10)

Donate via Paypal

Or Donate anonymously using crypto!

Ethereum

0xfe58350B80634f60Fa6Dc149a72b4DFbc17D341E copy

Bitcoin

3ATGMxNzCUFzxpMCHL5sWSt4DVtS8UqXpi copy

Thank you for your support!

Follow Us on Twitter!

:(