Skip to content

Latest commit

 

History

History
133 lines (105 loc) · 11 KB

hard_skills.md

File metadata and controls

133 lines (105 loc) · 11 KB

97 вещей, которые должен знать каждый программист

Замечательная книга полная практических примеров. Читать каждому. Выдержки:

  • автоматизируйте стандарт кодирования
  • будьте предусмотрительны (по долгам надо платить, особенно, по техническим)
  • магии не существует
  • ваш заказчик говорит не то, что думает
  • взаимодействие между процессами влияет на время отклика
  • выучить язык - значит понять его культуру
  • дайте проекту голос (оповещения обо всех процессах)
  • две ошибки могут взаимокомпенсировать друг друга (и это ад отладки)
  • делайте невидимое видимым
  • делайте ревью кода
  • ваш код будут читать
  • заботьтесь о коде
  • не забывайте изучать гуманитарные науки
  • изучайте другие языки программирования и парадигмы
  • изучайте иностранные языки
  • изучайте алгоритмы и структуры данных, инструменты, ОС
  • инкапсуляция - наше все
  • комментируйте лишь то, что не ясно из кода
  • используйте консоль
  • установка и деплой как можно раньше
  • DRY
  • не работайте сверхурочно
  • нет ничего более постоянного, чем временное
  • изобретать велосипед полезно у себя дома
  • одна голова хорошо, а две лучше - практикуйте парное программирование
  • если что-то не получается - отойдите от клавиатуры
  • пишите тесты
  • программировать надо на языке предметной области

Чистый код (Мартин)

Это замечательная книга, которую необходимо читать каждому программисту в самом начале карьеры. Книга не взывает к какому-то одному языку программирования, а учит более абстрактным вещам, которые можно применять независимо от какого-то конкретного языка. Также много внимания уделяется общим вещам: необходимости документирования, написанию тестов, построению процессов разработки, ...

Выдержки:

  1. Пишите код на основе интерфейса, а не реализации
  2. Не документируйте плохой код - перепишите его
  3. Используйте метафоры
  4. Используйте эвристики
  5. Бог скрывается в мелочах
  6. Лучшее - враг хорошего
  7. Боритесь со сложностью (Главный Технический Императив Разработки ПО)
  8. Программируйте в терминах предметной области
  9. Разделяйте программный код на уровни абстракции

Методы оценки кода на наличие ошибок:

  1. тестирование
  2. обзоры

Всему свое место и все оказывается на своих местах

Этапы разработки ПО:

  1. Определение процесса разработки
  2. Управление процессом разработки
  3. Описание целевого программного продукта
  4. Проектирование продукта
  5. Разработка продукта
  6. Тестирование частей продукта
  7. Интеграция частей продукта
  8. Сопровождение

Основные принципы XP-разработки:

  • пересмотр кода;
  • тестирование;
  • проектирование;
  • простота;
  • архитектура;
  • интеграционное тестирование;
  • небольшие итерации;

Внешние качественные характеристики ПО:

  • Корректность
  • практичность
  • эффективность
  • надежность
  • целостность
  • адаптируемость
  • правильность
  • живучесть

Внутренние качественные характеристики ПО:

  • удобство сопровождения
  • гибкость
  • портируемость
  • возможность повторного использования
  • удобочитаемость
  • тестируемость

Рефакторинг (Фаулер)

Рефакторить надо с умом

  • Если в программу нужно добавить функциональность, но код для этого не структурирован должным образом, сначала нужно произвести рефакторинг
  • Проводя рефакторинг, всегда нужно полагаться на тесты время потраченное на создание тестов полностью себя окупает
  • При проведении рефакторинга программа модифицируется небольшими частями
  • После каждой модификации выполняется проверка работоспособности

При разработке любой крупной системы справедливы правила:

  • решаем проблемы по мере поступления
  • каждый раз выбираем наиболее простое и надежное решение

Дизайн для недизайнеров

Книга позволяет разобраться мимнимальным образом в основах дизайна. Довольно приятна для чтения, всегда останется актуальной, поскольку учит довольно базовым вещам + довольно интересное чтиво

Чистая архитектура (Мартин)

Первая половина книги довольно стоящая, читается с интересом, можно найти немало интересного. Вторая, по большей части, много повторяет первую. Много примеров, которые будут полезны начинающим программистам.

Как тестирует Google

Весьма неплохая книга о том, как построены процессы тестирования в Google.

Функциональное программирование на Javascript (Луис Антенсио)

Отличнейшая книга, которая позволяет довольно просто начать осваивать функциональное программирование. В книге приводится много хороших и полезных примеров. Имея фундамент этой книге гораздо проще пробираться через более сложные понятия, касающиеся ФП.

Масштабируемые системы (Клеппман М)

  • "Широко известно, что стоимость программного обеспечения по большей части состоит не из затрат на изначальную разработку, а на сопровождение, поддержание работоспособности, внесении изменений и развитии системы"
  • "Три принципа проектирования программных систем: простота, удобство эксплуатации и возможность развития"

Предметно-ориентированное проектирование - Domain driven design (Э.Эванс)

Это одна из лучших книг. Для меня она стоит в одном ряду с "Совершенным кодом" Макконелла, "Чистой архитектурой" Мартина и "Паттернами разработки" Банды четырех. Местами книга говорит о вполне очевидных вещах вроде Ubiqutous Language, но затем на этом фундаменте строятся более интересные и важные концепции. Здесь приводится описание довольно универсального подхода к разработке корпоративных приложений. Это позволяет разрабатывать приложения, которые гораздо проще поддерживать и развивать со временем. Книга обязательна к прочтению всем, кто считает себя Senior-ом.

Микросервисы - паттерны разработки и рефакторинга (К. Ричардсон)

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

System-design Подготовка к сложному интервью (Алекс Сюй)

Очень хорошая книга, в которой рассматривается множество типовых решений, объясняется как необходимо мыслить при проектировании систем, что учитывать и как доносить свои мысли в процессе интервью. Определенно рекомендую к прочтению