Divergent Change
Стремление к структурированию программ оправдано, ведь мы хотим облегчить их модификацию.
Однако если внесение изменений в одно определенное место не удается, возникает следующая проблема.
Расходящиеся модификации имеют место тогда, когда один класс часто модифицируется различными способами по разным причинам. Если, глядя на класс, вы отмечаете для себя, что эти три метода
придется модифицировать для каждой новой базы данных, а эти четыре метода придется модифицировать при каждом появлении нового финансового инструмента, это может означать, что вместо одного класса лучше иметь два.
При каждой модификации должен изменяться один класс, и вся типизация в новом классе должна выражать эти условия. Тогда каждый класс будет иметь свою зону ответственности.
#cleancode
Стремление к структурированию программ оправдано, ведь мы хотим облегчить их модификацию.
Однако если внесение изменений в одно определенное место не удается, возникает следующая проблема.
Расходящиеся модификации имеют место тогда, когда один класс часто модифицируется различными способами по разным причинам. Если, глядя на класс, вы отмечаете для себя, что эти три метода
придется модифицировать для каждой новой базы данных, а эти четыре метода придется модифицировать при каждом появлении нового финансового инструмента, это может означать, что вместо одного класса лучше иметь два.
При каждой модификации должен изменяться один класс, и вся типизация в новом классе должна выражать эти условия. Тогда каждый класс будет иметь свою зону ответственности.
#cleancode
3 Timeless Principles of Quality Code
При написании кода мы часто пользуемся популярными на сегодняшний день практиками и советами, но эти стандарты изменчивы. Однако существуют прочно утвердившиеся принципы написания кода, которые со временем не претерпевают изменений.
С ними вас познакомит статья.
#cleancode #programming
При написании кода мы часто пользуемся популярными на сегодняшний день практиками и советами, но эти стандарты изменчивы. Однако существуют прочно утвердившиеся принципы написания кода, которые со временем не претерпевают изменений.
С ними вас познакомит статья.
#cleancode #programming
Medium
Quality Code : Timeless Principles
Что значит писать качественный код.
Bracket Pair Colorizer
Популярное расширение для Visual Studio Code, позволяющее отмечать различным цветом открывающую и соответствующую ей закрывающую скобки. Определить, какой код к какому блоку относится, будет легко и, самое главное, наглядно.
Source
#tools
Популярное расширение для Visual Studio Code, позволяющее отмечать различным цветом открывающую и соответствующую ей закрывающую скобки. Определить, какой код к какому блоку относится, будет легко и, самое главное, наглядно.
Source
#tools
Parameterize Method
Иногда встречаются два метода, выполняющие сходные действия, но отличающиеся несколькими
значениями. В этом случае можно упростить положение, заменив разные методы одним, который обрабатывает
разные ситуации с помощью параметров. При таком изменении устраняется дублирование кода и возрастает
гибкость, потому что в результате добавления параметров можно обрабатывать и другие ситуации.
#tips
Иногда встречаются два метода, выполняющие сходные действия, но отличающиеся несколькими
значениями. В этом случае можно упростить положение, заменив разные методы одним, который обрабатывает
разные ситуации с помощью параметров. При таком изменении устраняется дублирование кода и возрастает
гибкость, потому что в результате добавления параметров можно обрабатывать и другие ситуации.
#tips
Clean Tests
Очень часто небрежно написанные тесты приводят к катастрофе. С плохо написанными тестами разработчики боятся изменений, их код начинает дурно пахнуть. В итоге мы получаем откровенно некачественный продукт.
Тестовый код не менее важен, чем код продукта. Не считайте его «кодом второго сорта». К написанию тестового кода следует относиться вдумчиво, внимательно и ответственно.
Тестовый код должен быть таким же чистым,как и код продукта.
#tips
Очень часто небрежно написанные тесты приводят к катастрофе. С плохо написанными тестами разработчики боятся изменений, их код начинает дурно пахнуть. В итоге мы получаем откровенно некачественный продукт.
Тестовый код не менее важен, чем код продукта. Не считайте его «кодом второго сорта». К написанию тестового кода следует относиться вдумчиво, внимательно и ответственно.
Тестовый код должен быть таким же чистым,как и код продукта.
#tips
Debugger for Google Chrome
Крайне необходимое расширение VS Code для JavaScript-разработчиков. Помимо привычных функций отладчика, поддерживает большое количество конфигураций, которые позволят разработчикам удобно работать с кодом.
Отладчик работает по Chrome Debugger Protocol. Файлы, открытые в браузере, сопоставляются с файлами из VS Code. Будьте осторожны: отладчик не поддерживает параллелизм, т.е. если вы откроете DevTools в Chrome, отладчик прекратит работу.
#tools
Крайне необходимое расширение VS Code для JavaScript-разработчиков. Помимо привычных функций отладчика, поддерживает большое количество конфигураций, которые позволят разработчикам удобно работать с кодом.
Отладчик работает по Chrome Debugger Protocol. Файлы, открытые в браузере, сопоставляются с файлами из VS Code. Будьте осторожны: отладчик не поддерживает параллелизм, т.е. если вы откроете DevTools в Chrome, отладчик прекратит работу.
#tools
Mutual Exclusion
Взаимное исключение возникает, когда несколько потоков должны использовать ресурсы, которые:
● не могут использоваться несколькими потоками одновременно;
● существуют в ограниченном количестве.
Типичный пример – подключения к базам данных, открытые для записи файлы, семафоры.
Одна из стратегий предотвращения взаимной блокировки основана на предотвращении состояния взаимного исключения.
● Использование ресурсов, поддерживающих многопоточный доступ (например, AtomicInteger).
● Увеличение количества ресурсов, чтобы оно достигло или превосходило количество конкурирующих потоков.
● Проверка наличия всех свободных ресурсов перед попытками захвата.
#tips
Взаимное исключение возникает, когда несколько потоков должны использовать ресурсы, которые:
● не могут использоваться несколькими потоками одновременно;
● существуют в ограниченном количестве.
Типичный пример – подключения к базам данных, открытые для записи файлы, семафоры.
Одна из стратегий предотвращения взаимной блокировки основана на предотвращении состояния взаимного исключения.
● Использование ресурсов, поддерживающих многопоточный доступ (например, AtomicInteger).
● Увеличение количества ресурсов, чтобы оно достигло или превосходило количество конкурирующих потоков.
● Проверка наличия всех свободных ресурсов перед попытками захвата.
#tips
Abstract Factory
В статье объясняется суть паттерна Фабрика и приводятся примеры кода, реализующие данный шаблон. Его достаточно просто понять, если провести аналогию между реальной фабрикой.
Данный шаблон является просто незаменимым для расширяющихся систем, но всё же сам по себе он редко применяется. Обычно его эффективно внедрять в комбинации с другими шаблонами проектирования.
#designpatterns
В статье объясняется суть паттерна Фабрика и приводятся примеры кода, реализующие данный шаблон. Его достаточно просто понять, если провести аналогию между реальной фабрикой.
Данный шаблон является просто незаменимым для расширяющихся систем, но всё же сам по себе он редко применяется. Обычно его эффективно внедрять в комбинации с другими шаблонами проектирования.
#designpatterns
Medium
Design Patterns — Abstract Factory.
Шаблон проектирования Фабрика — краткое руководство.
JSHint
Один из основных статических анализаторов для JavaScript, наряду с JSLint и Closure Compiler. JSHint написан в дополнение к Node.js, а потому он более гибкий.
Он включает большое количество опций, что позволяет выполнять пользовательские проверки путем написания своего собственного генератора отчётов.
Visual Studio Code | Sublime Text | Online
#tools
Один из основных статических анализаторов для JavaScript, наряду с JSLint и Closure Compiler. JSHint написан в дополнение к Node.js, а потому он более гибкий.
Он включает большое количество опций, что позволяет выполнять пользовательские проверки путем написания своего собственного генератора отчётов.
Visual Studio Code | Sublime Text | Online
#tools
Имена должны описывать побочные эффекты
Имена должны описывать все, что делает функция, переменная или класс. Не скрывайте побочные эффекты за именами. Не используйте простые глаголы для описания функции, которая делает что-то помимо этой простой операции.
Функция в примере не ограничивается простым получением «m_oos»; она создает объект «m_oos», если он не был создан ранее. Таким образом, эту функцию было бы правильнее назвать «createOrReturnOos».
#tips #naming
Имена должны описывать все, что делает функция, переменная или класс. Не скрывайте побочные эффекты за именами. Не используйте простые глаголы для описания функции, которая делает что-то помимо этой простой операции.
Функция в примере не ограничивается простым получением «m_oos»; она создает объект «m_oos», если он не был создан ранее. Таким образом, эту функцию было бы правильнее назвать «createOrReturnOos».
#tips #naming
Многозадачность убивает ваш мозг
"Как успевать больше, делать лучше и быть счастливее?" Ответ прост - фокусируйтесь на одной задаче.
Практика многозадачности только наносит вред, заставляя вас думать, что вы перегружены работой. Мы надеемся, что статья изменит ваше отношение к тактике решения проблем.
#selfimprovement #programming
"Как успевать больше, делать лучше и быть счастливее?" Ответ прост - фокусируйтесь на одной задаче.
Практика многозадачности только наносит вред, заставляя вас думать, что вы перегружены работой. Мы надеемся, что статья изменит ваше отношение к тактике решения проблем.
#selfimprovement #programming
Medium
Многозадачность убивает ваш мозг
Многие люди считают себя мастерами многозадачности, но быть может они просто придумали себе это?
Forwarded from Clean Code
Functions instead of comments
Не используйте комментарии там, где можно использовать функцию или переменную. Постарайтесь переработать свой код так, чтобы их можно было удалить.
И запомните: хороший код не требует комментариев.
#comments #functions
Не используйте комментарии там, где можно использовать функцию или переменную. Постарайтесь переработать свой код так, чтобы их можно было удалить.
И запомните: хороший код не требует комментариев.
#comments #functions
Не скупитесь на скобки
Используйте скобки чаще, чем вам это кажется необходимым. Применяйте их для разъяснения выражений, состоящих из двух и более членов.
Скобки должны устранять неоднозначность в последовательности вычисления выражений, четко отражать логику и исключать альтернативы.
#tips #formatting
Используйте скобки чаще, чем вам это кажется необходимым. Применяйте их для разъяснения выражений, состоящих из двух и более членов.
Скобки должны устранять неоднозначность в последовательности вычисления выражений, четко отражать логику и исключать альтернативы.
#tips #formatting
.NET сексуален и вам следует знать об этом!
В статье мы развеем миф о том, что .NET — старая и закрытая экосистема, которая полностью противоречит другим, более гибким и открытым платформам, таким как NodeJS или RubyRails.
Мы продемонстрируем вам, насколько легко и быстро можно создавать приложения и веб-сайты с помощью платформы .NET Core и что она ничем не уступает другим популярным платформам.
Читать статью
#programming #dotnet
В статье мы развеем миф о том, что .NET — старая и закрытая экосистема, которая полностью противоречит другим, более гибким и открытым платформам, таким как NodeJS или RubyRails.
Мы продемонстрируем вам, насколько легко и быстро можно создавать приложения и веб-сайты с помощью платформы .NET Core и что она ничем не уступает другим популярным платформам.
Читать статью
#programming #dotnet
С рекурсией нужно быть осторожным
Прежде чем использовать её в проекте:
● Убедитесь, что рекурсия остановится
● Предотвращайте бесконечную рекурсию с помощью счетчиков
● Ограничьте рекурсию одним методом
● Следите за стеком
Как это ни парадоксально, всем известный пример использования рекурсивного метода для вычисления факториала или чисел Фибоначчи менее понятен, чем итеративный, не считая медленного выполнения и непредсказуемого использования памяти.
#tips #recursion
Прежде чем использовать её в проекте:
● Убедитесь, что рекурсия остановится
● Предотвращайте бесконечную рекурсию с помощью счетчиков
● Ограничьте рекурсию одним методом
● Следите за стеком
Как это ни парадоксально, всем известный пример использования рекурсивного метода для вычисления факториала или чисел Фибоначчи менее понятен, чем итеративный, не считая медленного выполнения и непредсказуемого использования памяти.
#tips #recursion
Хорошие разработчики никогда не перестают учиться!
Да, и это не просто слова. Для разработчиков актуальность знаний стоит на первом месте, причем чем шире наши знания, тем мы более креативны.
Статья покажет вам, насколько широким может быть круг интересов преданных своему делу программистов.
Читать статью
#selfimprovement #learning
Да, и это не просто слова. Для разработчиков актуальность знаний стоит на первом месте, причем чем шире наши знания, тем мы более креативны.
Статья покажет вам, насколько широким может быть круг интересов преданных своему делу программистов.
Читать статью
#selfimprovement #learning
Использование переменных цикла
● Используйте порядковые или перечислимые типы для
границ массивов и циклов
● Используйте смысловые имена переменных, чтобы сделать вложенные циклы читабельными
● Ограничивайте вложенность тремя уровнями
● Делайте циклы достаточно короткими, чтобы их можно было увидеть сразу целиком
Сообщают ли переменные i, j и k что-либо о содержимом transaction? Имена переменных payCodeIdx, month и divisionIdx гораздо красноречивее, чем i, j и k.
Компьютер с одинаковой легкостью прочитает обе версии цикла. Однако людям легче будет читать вторую версию, поэтому второй вариант лучше, ведь ваша основная аудитория состоит из людей, а не из компьютеров.
#tips #naming
● Используйте порядковые или перечислимые типы для
границ массивов и циклов
● Используйте смысловые имена переменных, чтобы сделать вложенные циклы читабельными
● Ограничивайте вложенность тремя уровнями
● Делайте циклы достаточно короткими, чтобы их можно было увидеть сразу целиком
Сообщают ли переменные i, j и k что-либо о содержимом transaction? Имена переменных payCodeIdx, month и divisionIdx гораздо красноречивее, чем i, j и k.
Компьютер с одинаковой легкостью прочитает обе версии цикла. Однако людям легче будет читать вторую версию, поэтому второй вариант лучше, ведь ваша основная аудитория состоит из людей, а не из компьютеров.
#tips #naming
ESLint
Один из лучших линтеров для JavaScript - ESLint берет на себя всю рутину по исправлению простых ошибок, таких как стилевые недочеты, забытый debugger; имеет легкую расширяемость, например, есть готовые плагины для React и Node.js, также существует множество общедоступных конфигураций в виде node.js-пакетов; ESLint активно развивается, потому что в автоматизации рефакторинга и отладки спрос только растёт.
Visual Studio Code | Sublime Text | WebStorm
#tools #linters
Один из лучших линтеров для JavaScript - ESLint берет на себя всю рутину по исправлению простых ошибок, таких как стилевые недочеты, забытый debugger; имеет легкую расширяемость, например, есть готовые плагины для React и Node.js, также существует множество общедоступных конфигураций в виде node.js-пакетов; ESLint активно развивается, потому что в автоматизации рефакторинга и отладки спрос только растёт.
Visual Studio Code | Sublime Text | WebStorm
#tools #linters