4. Код и разработка - о разделе
О разделе
Готовьтесь к обучению магии программирования. Что такое программа - уже ясно. Но что такое код, как он работает, как его пишут? И только ли в коде вся сложность?
Вообще, лучше воспользуйтесь содержанием или перейдите к Базе знаний. Но для удобства, я размещу здесь ссылки на основные главы раздела:
Алгоритмы
- 4.01. Алгоритмы
- 4.01. Основные алгоритмы сортировки и поиска
- 4.01. Алгоритмическая сложность и анализ эффективности программ
- 4.01. Нотация Большое O
- 4.01. Классы времени выполнения и скорость работы программ
- 4.01. Линейное, квадратичное и логарифмическое время выполнения
- 4.01. Итоги
- 4.01. Чек-лист самопроверки
Алгоритмы
Что такое код и как он работает
- 4.02. Что такое код и как он работает
- 4.02. Теория кодирования
- 4.02. Ключевые слова
- 4.02. Операторы
- 4.02. Функции
- 4.02. Null
- 4.02. Циклы
- 4.02. Уровень языка и виды кода
- 4.02. Синтаксический сахар
- 4.02. Стили кода
- 4.02. Приёмы написания кода
- 4.02. Рефакторинг и его приёмы
- 4.02. Виды задач в кодировании
- 4.02. Итоги
- 4.02. Чек-лист самопроверки
Что такое код и как он работает
Выполнение кода
- 4.03. Выполнение кода
- 4.03. Неопределенное поведение
- 4.03. Как работают функции
- 4.03. Как работают циклы
- 4.03. Как работают условные операторы
- 4.03. Как работают переменные
- 4.03. Как выполняется код
- 4.03. 0x и шестнадцатеричные числа
- 4.03. Сложное железо
- 4.03. Регистры
- 4.03. Машинное слово
- 4.03. Расположение данных в памяти и директивы компилятора
- 4.03. Как исполняется байт-код
- 4.03. Дизассемблирование и декомпиляция
- 4.03. Итоги
- 4.03. Чек-лист самопроверки
Выполнение кода
Проект и фреймворки
Асинхронность
Архитектура выполнения
Парадигмы и уровни абстракции
- 4.07. Парадигмы
- 4.07. Уровни абстракции
- 4.07. Метапрограммирование
- 4.07. Основы SOLID
- 4.07. Итоги
- 4.07. Чек-лист самопроверки
Парадигмы и уровни абстракции
ООП
Зависимости
ORM и работа с данными
Десктопные приложения
Мобильные приложения
Основы работы с Git
Разработка и отладка
- 4.14. Разработка
- 4.14. Традиции и обычаи разработки
- 4.14. Отладка
- 4.14. Анализ и оптимизация производительности
- 4.14. Как создать свою библиотеку
- 4.14. Пет-проект
- 4.14. Список для развития
- 4.14. Структура кодовой базы
- 4.14. Расширения для браузера
- 4.14. Итоги
- 4.14. Чек-лист самопроверки
Разработка и отладка
Сборка мусора
- 4.15. Сборка мусора
- 4.15. Итоги
- 4.15. Чек-лист самопроверки
Сборка мусора
Программирование охватывает не только команды и код (собственно, поэтому я не особо люблю термин «программист» и больше склоняюсь к термину «разработчик»). Сама по себе разработка — это искусство создания новых решений из простых абстрактных идей. Мы уже прошли важный этап подготовки и у нас есть фундамент, который позволит уверенно двигаться дальше.
Программирование требует практики. Мы будем заниматься практикой умеренно. Как я заметил, практического материала в сети и литературе очень много, так как каждый автор считает, что нужно просто практиковаться.
Знаете почему говорят практика, практика, практика? Потому что проблемы и сложности возникают не из-за кодирования, а из-за различных инструментов, отладки, поиска проблем, поиска решений, изучения возможных методов в библиотеках, анализ производительности и исправления ошибок - вот в чём вся сложность, которая познается на практике — это и есть 90% времени работы программиста. Написать легко, да и запустить легко, а вот сделать четко, быстро и без ошибок - уже искусство. А потом тестировщики находят ошибку и всё по новой. Самое страшное, когда у тебя рабочее решение, но заказчик или руководитель захотел что-то подправить, и именно это «поправить» потом сжирает многие часы страданий. Но как можно научиться читать код, к примеру, на Java, не разобравшись в базовых основах ООП? Это главное упущение, с которым я столкнулся. Мы попробуем значительную часть провести за «разжёвыванием» фундамента, чтобы потом было легко, и будем отталкиваться в первую очередь от алгоритмического языка.
На практике всё будет сложно, и даже очень. Первая задача определённого типа заставит застрять с вопросом «Как это реализовать?» и здесь кому-то повезёт и рядом окажется хороший наставник, который покажет и объяснит, а кому-то придётся разбираться самому. Сложнейшим этапом будет поиск способа решения вопроса - искать в интернете, советоваться с коллегами, изучать документацию. ИИ, кстати, здесь не поможет - ведь он попытается решить проблему, а не научить вас работать с такими задачами. Поэтому сначала надо справиться с такой задачей, и когда вам дадут новую задачу похожего типа - уже будет проще, ведь вы уже реализовывали такое и знаете как делать! Причем не важно, запомнили ли вы в голове или записали себе где-то алгоритм решения, но факт - вы уже знаете, что делать и у вас не возникает того самого «застревания».
Таков цикл обучения:
Испугался - Нашел решение - Научился - Научил других.
Шаг «испуга» крайне стрессовый, который будет нагонять мысли вроде «это не моё», «я не смогу», «у меня не получится». Главное преодолеть, а потом будет проще. Причём, следующей проблемой, с которой столкнётся разработчик — это внимательность. Забыл тут дописать, пропустил ошибку там, не исправил здесь - всё это и правится опытом, который помогает набирать хороший наставник. Поэтому настоятельно рекомендую - не только изучайте книгу, но и найдите себе наставника, если есть такая возможность. Попросите выделить время и объяснить вещи, которые «ну никак не лезут в голову».
Разбирайте код. Разбивайте то, что видите, на логические блоки, можете расписывать для себя аналог на алгоритмическом языке (Шаг 1 - объявляем переменную, Шаг 2 - присваиваем значение, Шаг 3 - вызываем метод и так далее). Но давайте пока не будем торопить события и начнём с самых фундаментальных знаний.
Печатайте чаще. Если раньше вы редко печатали, то потренируйтесь в наборе текста на английском языке. Идеальный вариант - если вы будете перепечатывать код, который находите в примерах в ходе обучения. Не копировать, а именно ручками, букву за буквой, символ за символом, и вчитываться, вникать в то, что печатаете. Это замечательная практика.
Повторяйте материал. Человеку свойственно забывать изученное, поэтому не стесняйтесь зубрить - учите, повторяйте, перечитывайте снова и снова. И старайтесь не бежать гуглить решение, а уделить 10-15 минут на то, чтобы сначала попытаться вспомнить.
Тренируйте вспомогательные навыки: алгоритмизация, системное, критическое, творческое мышление, прогнозирование, индукция (делать выводы), дедукция (применение правил), внимательность, концентрация, терпение, рефлексия.
К сожалению, как бы не говорили в различных книгах и курсах - одного обучения и практики вам будет мало, нужно конкретно учиться решать задачи и перед решением получить теоретическую базу. Цель данного тома - научиться разрабатывать, получить теоретическую базу - а в конце книги будут и задачи для разработки своих проектов.
Однако я постараюсь сфокусироваться там, где возникали вопросы у меня. Читатели, которые уже владеют знаниями в области программирования, тоже найдут для себя интересные детали, ведь, как правило, всё упирается в опыт и определённую технологию, а также то, что указывается в учебниках. Мы же постараемся охватить всё без лишней воды, кратко и детально всё в таком объеме, чтобы и разобраться в теории, и иметь под рукой практическое руководство.