Много мелких конфликтов в команде происходит из-за разных ожиданий.
Разработчик и менеджер договорились, что форум выкатят до конца недели. Разработчик под этим понимает одно, а менеджер совсем другое. В конце недели они неизбежно столкнуться с непониманием.
При выдаче ожиданий другим людям стоит строго уточнять, что они поняли, и если поняли неправильно, корректировать.
#softskills
Разработчик и менеджер договорились, что форум выкатят до конца недели. Разработчик под этим понимает одно, а менеджер совсем другое. В конце недели они неизбежно столкнуться с непониманием.
При выдаче ожиданий другим людям стоит строго уточнять, что они поняли, и если поняли неправильно, корректировать.
#softskills
Последний язык в "7 языков за 7 недель" — Haskell. Единственный чисто (фанатично) функциональный язык в книжке.
Писать на нем очень приятно, он невероятно выразителен. Отсутствие изменяемого состояния упрощает любой код, а чистота функций гарантирует их предсказуемость.
Система типов логичная, удобная. Вывод типов работает хорошо и совсем не мешает выражать намерения в коде.
Но реальные программы должны иметь побочные эффекты. Иначе они ничего полезного не сделают. И тут начинаются сложности. Все побочные эффекты реализованы через монады. Это сложный концепт. Но, допускаю, что благодаря этому решению все остальное а языке кристально однозначно.
#языки
Писать на нем очень приятно, он невероятно выразителен. Отсутствие изменяемого состояния упрощает любой код, а чистота функций гарантирует их предсказуемость.
Система типов логичная, удобная. Вывод типов работает хорошо и совсем не мешает выражать намерения в коде.
Но реальные программы должны иметь побочные эффекты. Иначе они ничего полезного не сделают. И тут начинаются сложности. Все побочные эффекты реализованы через монады. Это сложный концепт. Но, допускаю, что благодаря этому решению все остальное а языке кристально однозначно.
#языки
Касательно монад, подписчик прислал хорошее объяснение — https://m.habr.com/post/257903/comments/#comment_8429641
Habr
Нужная книга
Дочитал "Семь языков за семь недель" Брюса Тейта. И она хороша. Рассмотренные языки очень разные. Каждый из них несёт свою идею. Освоить их важно и нужно. Это позволит не зацикливаться на привычном способе программирования.
Не думаю, что кому-то придется в реальной жизни столкнуться с Io, Prolog или Erlang, но те способы мышления, которые прививают эти языки точно пригодятся.
#языки
Дочитал "Семь языков за семь недель" Брюса Тейта. И она хороша. Рассмотренные языки очень разные. Каждый из них несёт свою идею. Освоить их важно и нужно. Это позволит не зацикливаться на привычном способе программирования.
Не думаю, что кому-то придется в реальной жизни столкнуться с Io, Prolog или Erlang, но те способы мышления, которые прививают эти языки точно пригодятся.
#языки
Мудрость из книги
Рефакторинг важен. Осенью купил курс Рефакторинг.Гуру, сейчас до него добрался.
В первых разделах рассмотрены запахи плохого кода — признаки необходимости рефакторинга.
Самый распространный запах — единица кода (метод, класс, модуль) стала слишком большой.
Это проиходит когда метод-класс-модуль берет на себя больше отвественности чем должен. В таком случае следует пересмотреть дизайн единицы кода и разделить ее по отвественностям.
Не нужно бояться, что это приведет к ухудшению производительности. Чаще всего, это не играет роли.
Конспект интерактивного курса "Рефакторинг.Гуру".
#рефакторинг
Рефакторинг важен. Осенью купил курс Рефакторинг.Гуру, сейчас до него добрался.
В первых разделах рассмотрены запахи плохого кода — признаки необходимости рефакторинга.
Самый распространный запах — единица кода (метод, класс, модуль) стала слишком большой.
Это проиходит когда метод-класс-модуль берет на себя больше отвественности чем должен. В таком случае следует пересмотреть дизайн единицы кода и разделить ее по отвественностям.
Не нужно бояться, что это приведет к ухудшению производительности. Чаще всего, это не играет роли.
Конспект интерактивного курса "Рефакторинг.Гуру".
#рефакторинг
Мудрость из книги
Еще один запах плохого кода — одержимость элементарными типами.
1. Когда деньги выражаются как float или телефонный номер как string — это проблема. Подобные значения должны быть выделены в класс, вместе с присущим ему поведением.
2. Когда константа используется для кодирования информации (например, USERADMINROLE = 1 для обозначения роли) — это проблема. Вместо этого лучше использовать разные классы.
3. Когда строковый константы выступают ключами ассоциативного массива — это проблема. Такие массивы легко заменяются DTO.
Конспект интерактивного курса "Рефакторинг.Гуру".
#рефакторинг
Еще один запах плохого кода — одержимость элементарными типами.
1. Когда деньги выражаются как float или телефонный номер как string — это проблема. Подобные значения должны быть выделены в класс, вместе с присущим ему поведением.
2. Когда константа используется для кодирования информации (например, USERADMINROLE = 1 для обозначения роли) — это проблема. Вместо этого лучше использовать разные классы.
3. Когда строковый константы выступают ключами ассоциативного массива — это проблема. Такие массивы легко заменяются DTO.
Конспект интерактивного курса "Рефакторинг.Гуру".
#рефакторинг
Мудрость из книги
Если параметров функции становиться больше 3-4 — случилась ошибка проектирования и ее нужно исправить.
Варианты этой проблемы:
1. Функция объединяет несколько алгоритмов. Тогда ее легко разбить на несколько функций с меньшим числом параметров.
2. Функция принимает набор связанных данных, но отдельными аргументами. В таком случае, параметры следует передавать единым аргументом — DTO.
Иногда большое количество параметров необходимо, чтобы избавиться от высокой связанность двух классов. Тогда лучше оставить все как есть.
Конспект интерактивного курса "Рефакторинг.Гуру".
#рефакторинг
Если параметров функции становиться больше 3-4 — случилась ошибка проектирования и ее нужно исправить.
Варианты этой проблемы:
1. Функция объединяет несколько алгоритмов. Тогда ее легко разбить на несколько функций с меньшим числом параметров.
2. Функция принимает набор связанных данных, но отдельными аргументами. В таком случае, параметры следует передавать единым аргументом — DTO.
Иногда большое количество параметров необходимо, чтобы избавиться от высокой связанность двух классов. Тогда лучше оставить все как есть.
Конспект интерактивного курса "Рефакторинг.Гуру".
#рефакторинг
Мудрость из книги
Если в нескольких местах встречаются одинаковые группы данных (например, параметры подключения к БД) — этот код, возможно, плох.
Такие группы данных нужно выносить в отдельные классы, которые будут отвечать за всю группу.
Конспект интерактивного курса "Рефакторинг.Гуру".
#рефакторинг
Если в нескольких местах встречаются одинаковые группы данных (например, параметры подключения к БД) — этот код, возможно, плох.
Такие группы данных нужно выносить в отдельные классы, которые будут отвечать за всю группу.
Конспект интерактивного курса "Рефакторинг.Гуру".
#рефакторинг
Нужная книга
Прошлой весной прочёл "Программирование без дураков" Катрин Пассинг и Йоханесса Яндера снова не совсем про код.
Она о коммуникации, стиле кодирования, необходимости тестирования, работе с чужими кодом. О важности проектов с открытым исходным кодом и способах помочь им.
#softskills
Прошлой весной прочёл "Программирование без дураков" Катрин Пассинг и Йоханесса Яндера снова не совсем про код.
Она о коммуникации, стиле кодирования, необходимости тестирования, работе с чужими кодом. О важности проектов с открытым исходным кодом и способах помочь им.
#softskills
Мудрость из книги
В хорошем коде редко встречается большое количество операторов
Самый простой способ — изолировать их в специльной функции. Чтобы никакой внешний код не беспокоился об этом.
Если от этих условий меняется логика работы — можно использовать полиморфизм, или паттерн стратегия.
Конспект интерактивного курса "Рефакторинг.Гуру".
#рефакторинг
В хорошем коде редко встречается большое количество операторов
switch и if. С такими местами нужно бороться.Самый простой способ — изолировать их в специльной функции. Чтобы никакой внешний код не беспокоился об этом.
Если от этих условий меняется логика работы — можно использовать полиморфизм, или паттерн стратегия.
switch-if допустимы (даже необходимы) в абстрактных фабриках и фабричных методах.Конспект интерактивного курса "Рефакторинг.Гуру".
#рефакторинг
Мудрость из книги
Если в дочернем классе неиспользуются методы/данные родительского — значит что-то не так. Обычно это происходит, если наследование используется только для переиспользования кода, а не отражения отношения "является". В таком случае следует заменить наследование композицией.
На мой взгляд наследование почти никогда не улушает кода и его всегда можно заменить композицей без ущерба для читаемости кода.
Конспект интерактивного курса "Рефакторинг.Гуру".
#рефакторинг
Если в дочернем классе неиспользуются методы/данные родительского — значит что-то не так. Обычно это происходит, если наследование используется только для переиспользования кода, а не отражения отношения "является". В таком случае следует заменить наследование композицией.
На мой взгляд наследование почти никогда не улушает кода и его всегда можно заменить композицей без ущерба для читаемости кода.
Конспект интерактивного курса "Рефакторинг.Гуру".
#рефакторинг
Мудрость из книги
Если в классе присутствуют поля, которые нужны только в короткий промежуток жизненного цикла объекта — код немного испортился. Проблема в читаемости таких участков. Не ясно, когда это поле инициализировано, когда нет.
Такие поля нужно уничтожать, например, выделяя поле и связанную с ним логику в отдельный класс.
Конспект интерактивного курса "Рефакторинг.Гуру".
Если в классе присутствуют поля, которые нужны только в короткий промежуток жизненного цикла объекта — код немного испортился. Проблема в читаемости таких участков. Не ясно, когда это поле инициализировано, когда нет.
Такие поля нужно уничтожать, например, выделяя поле и связанную с ним логику в отдельный класс.
Конспект интерактивного курса "Рефакторинг.Гуру".
Мудрость из книги
Если в проекте существует два класса, которые делают одно и тоже, но имеют разные интерфейс — беда.
В такой ситуации часто можно просто удалить один из классов, и заменить его использование на второй. Если такой вариант не подходит (классы делают чуть-чуть разные вещи) то можно выделить общий интерфейс и реализовать его в каждом классе.
Конспект интерактивного курса "Рефакторинг.Гуру".
#рефакторинг
Если в проекте существует два класса, которые делают одно и тоже, но имеют разные интерфейс — беда.
В такой ситуации часто можно просто удалить один из классов, и заменить его использование на второй. Если такой вариант не подходит (классы делают чуть-чуть разные вещи) то можно выделить общий интерфейс и реализовать его в каждом классе.
Конспект интерактивного курса "Рефакторинг.Гуру".
#рефакторинг
В университете на Computer Science специальностях студенты разрабатывают свой язык.
Это хорошее упражнение, оно даёт знания о внутреннем устройстве языков, причинах принятия решений при дизайне этих языков.
После прочтения "Семь языков за семь недель" у меня сформировались требования к идельному языку программирования. В качестве упражнения я решил его написать. Процесс буду описывать в небольших статьях.
#justlang
Это хорошее упражнение, оно даёт знания о внутреннем устройстве языков, причинах принятия решений при дизайне этих языков.
После прочтения "Семь языков за семь недель" у меня сформировались требования к идельному языку программирования. В качестве упражнения я решил его написать. Процесс буду описывать в небольших статьях.
#justlang
Мудрость из книги
Если для небольшлого изменения поведения требуется внести много правок в код — что-то пошло не так.
Простого рецепта лечения этой проблемы нет. Для кождого случая нужно найти своей лекарство. Возможно, где-то в классе имеются другие запахи и их исправление поможет победить и этот.
Конспект интерактивного курса "Рефакторинг.Гуру".
#рефакторинг
Если для небольшлого изменения поведения требуется внести много правок в код — что-то пошло не так.
Простого рецепта лечения этой проблемы нет. Для кождого случая нужно найти своей лекарство. Возможно, где-то в классе имеются другие запахи и их исправление поможет победить и этот.
Конспект интерактивного курса "Рефакторинг.Гуру".
#рефакторинг
Мудрость из книги
Очень распространенная проблема — параллельные иерархии наследования.
Скорее всего, эта проблема — ошибка на этапе проектирования. Вполне вероятно, что можно свети это к одной иерархии. Если нет — подумать и найти решение.
Конспект интерактивного курса "Рефакторинг.Гуру".
#рефакторинг
Очень распространенная проблема — параллельные иерархии наследования.
Скорее всего, эта проблема — ошибка на этапе проектирования. Вполне вероятно, что можно свети это к одной иерархии. Если нет — подумать и найти решение.
Конспект интерактивного курса "Рефакторинг.Гуру".
#рефакторинг