Джунам и вчерашним выпускникам вузов катастрофически не хватает «уличного» опыта. Чтобы стать отличным разработчиком, понадобятся вполне конкретные навыки, позволяющие превратить теорию в практику, а также понимание того, в какие моменты можно нарушать казавшиеся незыблемыми правила. Эта книга — справочник по выживанию для начинающего разработчика.
«Кодер с улицы» научит вас справляться с реальными задачами. Седат Капаноглу честно делится советами, основанными на личном опыте, а не на абстрактной теории. Вы узнаете, как адаптировать знания, полученные из книг и курсов, к повседневным рабочим задачам.
Пора узнать, как использовать антипаттерны и «плохие» методы программирования. Эта книга построена на конкретных задачах, с которыми вы столкнетесь на работе, — от чисто технических аспектов, таких как создание функции поиска, до законов выживания в проблемной команде с менеджером-параноиком.
Все это превратит вас в настоящего уличного бойца, готового в любой момент приступить к созданию эффективного программного обеспечения.
Author(s): Седат Капаноглу
Series: Библиотека программиста
Edition: 1
Publisher: Питер
Year: 2023
Language: Russian
Commentary: Publisher's PDF
Pages: 320
City: СПб.
Tags: Algorithms; Software Engineering; Debugging; Data Structures; Security; C#; .NET; Scalability; Best Practices; Refactoring; Testing; Career; Threat Models; Computer Science; Code Optimization; Test-Driven Development; Type-Driven Development; Anti-Patterns
Предисловие
Благодарности
О книге
Для кого эта книга
Структура книги
О коде в книге
Форум liveBook
Об авторе
Иллюстрация на обложке
От издательства
Глава 1. На улицы!
1.1. Что важно на улицах
1.2. Кто такой уличный кодер?
1.3. Великие уличные кодеры
1.3.1. Любознательность
1.3.2. Нацеленность на результат
1.3.3. Высокая производительность
1.3.4. Умение справляться со сложностями и неоднозначностями
1.4. Проблемы современной разработки
1.4.1. Слишком много технологий
1.4.2. Парапланеризм на парадигмах
1.4.3. Черные ящики технологий
1.4.4. Недооценка накладных расходов
1.4.5. Не моя работа
1.4.6. Рутина — это гениально
1.5. Чего нет в этой книге
1.6. Основные темы книги
Итоги
Глава 2. Практическая теория
2.1. Краткий обзор алгоритмов
2.1.1. «О-большое» должно быть приемлемым
2.2. Структуры данных изнутри
2.2.1. Строки
2.2.2. Массив
2.2.3. Список
2.2.4. Связанный список
2.2.5. Очередь
2.2.6. Словарь
2.2.7. Хеш-множества
2.2.8. Стек
2.2.9. Стек вызовов
2.3. К чему весь этот ажиотаж с типами?
2.3.1. Сила типов
2.3.2. Проверка правильности
2.3.3. Используйте фреймворк с умом
2.3.4. Типы вместо опечаток
2.3.5. Быть nullable или non-nullable?
2.3.6. Высокая производительность бесплатно
2.3.7. Ссылочные типы и типы значений
Итоги
Глава 3. Полезные антипаттерны
3.1. Если не сломано, сломай
3.1.1. Лицом к лицу с жестью
3.1.2. Ломайте скорее
3.1.3. Соблюдайте границы
3.1.4. Выделение общей функциональности
3.1.5. Пример веб-страницы
3.1.6. Не оставляйте за собой долгов
3.2. Пишите с нуля
3.2.1. Стирайте и переписывайте
3.3. Чините, даже если ничего не сломано
3.3.1. Гонка за будущим
3.3.2. Качество кода и культура поведения
3.4. Не бойтесь повторяться
3.4.1. Повторное использование или копирование?
3.5. Изобретайте
3.6. Не используйте наследование
3.7. Не используйте классы
3.7.1. Enum — это ням!
3.7.2. Структуры рулят!
3.8. Пишите плохой код
3.8.1. Не используйте If/Else
3.8.2. Используйте goto
3.9. Не пишите комментарии к коду
3.9.1. Подбирайте длинные имена
3.9.2. Эффективно используйте функции
Итоги
Глава 4. Распробуйте тестирование
4.1. Типы тестов
4.1.1. Ручное тестирование
4.1.2. Автоматизированное тестирование
4.1.3. Опасная жизнь: тестирование в рабочей среде
4.1.4. Выбор правильной методологии тестирования
4.2. Как перестать беспокоиться и полюбить тесты
4.3. Не используйте TDD и другие сокращения
4.4. Пишите тесты для своего же блага
4.5. Как понять, что именно тестировать
4.5.1. Уважайте границы
4.5.2. Покрытие кода
4.6. Не пишите тесты
4.6.1. Не пишите код
4.6.2. Ограничьтесь выборочными тестами
4.7. Пусть тестированием займется компилятор
4.7.1. Как исключить проверки на null
4.7.2. Как исключить проверки диапазона
4.7.3. Как исключить проверки допустимых значений
4.8. Именование тестов
Итоги
Глава 5. Вознаграждение за рефакторинг
5.1. Зачем нужен рефакторинг?
5.2. Изменения архитектуры
5.2.1. Выделение компонентов
5.2.2. Оценка объема работы и риска
5.2.3. Престиж
5.2.4. Рефакторинг, чтобы упростить рефакторинг
5.2.5. Финальное усилие
5.3. Надежный рефакторинг
5.4. Когда рефакторинг не нужен
Итоги
Глава 6. Все внимание безопасности
6.1. Что еще, кроме хакеров
6.2. Моделирование угроз
6.2.1. Модели угроз карманного формата
6.3. Написание безопасных веб-приложений
6.3.1. Проектирование с учетом требований безопасности
6.3.2. Повышение безопасности через неясность
6.3.3. Не используйте собственные механизмы безопасности
6.3.4. Атаки путем внедрения SQL-кода
6.3.5. Межсайтовый скриптинг
6.3.6. Межсайтовая подделка запроса (CSRF)
6.4. Флуд
6.4.1. Не используйте капчу
6.4.2. Альтернативы капче
6.4.3. Не применяйте кэш
6.5. Хранение секретов
6.5.1. Хранение секретов в исходном коде
Итоги
Глава 7. Самостоятельная оптимизация
7.1. Решаем правильную проблему
7.1.1. Простой бенчмаркинг
7.1.2. Производительность и время отклика
7.2. Анатомия медлительности
7.3. Начните сверху
7.3.1. Вложенные циклы
7.3.2. Строко-ориентированное программирование
7.3.3. Вычисление 2b || !2b
7.4. Разбиваем бутылку по горлышку
7.4.1. Не упаковывайте данные
7.4.2. Производите вычисления локально
7.4.3. Разделяйте зависимые процессы
7.4.4. Будьте предсказуемы
7.4.5. SIMD
7.5. Ввод и вывод
7.5.1. Ускоряйте ввод/вывод
7.5.2. Делайте ввод/вывод неблокирующим
7.5.3. Архаичные способы
7.5.4. Современные операторы async/await
7.5.5. Подводные камни асинхронного ввода/вывода
7.6. Если ничего не помогает, кэшируйте
Итоги
Глава 8. Приятная масштабируемость
8.1. Не используйте блокировки
8.1.1. Блокировка с двойной проверкой
8.2. Смиритесь с несоответствиями
8.2.1. Страшный NOLOCK
8.3. Не кэшируйте подключения к базе данных
8.3.1. В виде ORM
8.4. Не используйте потоки
8.4.1. Подводные камни асинхронного кода
8.4.2. Многопоточность и асинхронность
8.5. Уважайте монолит
Итоги
Глава 9. Жизнь с ошибками
9.1. Не исправляйте ошибки
9.2. Ужас ошибок
9.2.1. Неприятная правда об исключениях
9.2.2. Не перехватывайте исключения
9.2.3. Устойчивость к исключениям
9.2.4. Устойчивость без транзакций
9.2.5. Исключения и ошибки
9.3. Не занимайтесь отладкой
9.3.1. Отладка printf()
9.3.2. Дамп-дайвинг
9.3.3. Продвинутая отладка с помощью резиновой уточки
Итоги