Мой Курс 01
Михаил Нинин, 2023-11-14
Что я хочу дать вам в этом курсе:
- Своё представление о том, как программист мыслит на 5 уровнях:
- Папки и Файлы: организация проектов
- Код: инструкции, выражения, токены
- Данные и структуры данных: порядок хранения информации предметной области
- Сущности, оперирующие данными: переменные, константы, функции, параметры, свойства, методы, классы
- Интерфейсы: графический (GUI), текстовый диалог (CLI), программный диалог (API)
- Как учиться программировать:
- Относиться к этому пути как к игре, как к приключению.
- Максимально погрузиться в англоязычное окружение (язык интерфейсов программ, сайтов, документации, литературы, видео, аудио).
- Освоить печать всеми пальцами без необходимости смотреть на клавиатуру (typing.com).
- Первый год (а лучше два) сосредоточиться на базовых технологиях (HTML, CSS, JS), не торопясь переходить к фреймворкам (без коммерческой необходимости).
- Мерять роли ученика и наставника, менти и ментора.
- Слушать других программистов/разработчиков (интервью, доклады, стримы).
- Смотреть, как другие программисты решают задачи (YouTube, стримы).
- Смотреть обучающие ролики (туториалы на YouTube).
- Проходить видео-курсы (c Udemy и др. обучающих платформ).
- Читать книги (бумажные, электронные, веб-версии).
- Читать документацию (MDN, W3Schools, DevDocs, GeeksForGeeks и др.).
- Читать статьи-разборы отдельных тем или решений (Medium, Dev.to, Tproger, CSS-Tricks, Smashing Magazine и др.).
- Читать исходный код (проектов, библиотек, фреймворков).
- Проходить интерактивные курсы (CodeCademy, FreeCodeCamp, SoloLearn, Exercism и др.).
- Разбирать примеры в песочницах (CodePen, JSFiddle, Repl.it и др.).
- Экспериментировать в консоли или альтернативных REPL.
- Писать конспекты учебных материалов (на бумаге, в .txt, в .md, в системах вроде Notion, Obsidian, Miro), завести глоссарий для терминов и понятий (там же).
- Писать код (концепты решений, проекты, игры, библиотеки, фреймворки).
- Без сожаления бросать начатые проекты (заметив, что дальше “не идёт”) и начинать новые.
- Писать свои имплементации уже реализованных решений (стандартных методов, популярных библиотек).
- Писать тесты (для своих или чужих решений, загодя или после имплементации).
- Делать одно и то же по-разному (всё познаётся в сравнении).
- Писать документацию (от комментариев или справочника до полного описания проектов).
- Писать статьи-разборы отдельных тем или решений (можно даже не публикуя).
- Решать задачи (CodeWars, HackerRank, LeetCode, CodinGame и др.).
- Практиковать парное программирование с демонстрацией экрана (роли драйвер/навигатор).
- Учиться в группах (на курсах или самоорганизованных).
- Готовиться, просматривая публичные собеседования онлайн (YouTube).
- Договариваться и проходить собеседования (импровизированные с коллегами и настоящие с потенциальными работодателями).
- Находить и использовать возможности стажировки на реальных open-source проектах и в компаниях или во фрилансе в качестве помощника или исполнителя.
- Просить код-ревью более опытных коллег.
- Искать и оказывать помощь и поддержку коллег(-ам).
- Никогда не останавливаться в развитии, продолжать учиться даже после пауз, проверять и повышать квалификацию, расширять компетенцию.
- Необходимые языки WEB-а:
- HTML: структура документа, сайта, интерфейса приложения
- CSS: оформление, шрифты, цвета, размеры, расположение элементов
- JS: интерактив, динамические изменения интерфейса и данных
- Инструментарий разработчика:
- Браузеры / Developer Tools: Chrome, Firefox, Safari, Edge и другие.
- Редакторы: VS Code, WebStorm и другие.
- Системы контроля версий: Git, GitHub, GitLab, BitBucket и другие.
- Специальные расширения: к браузерам, к редакторам кода.
- Искусственный Интеллект: ChatGPT и альтернативы, GitHub Copilot и альтернативы (как для решений, так и для пояснений, документации, тестов, постановки задач, обратной связи).
- Утилиты: для цветов, графики, макетов.
- Облачные сервисы: редакторы-песочницы, бесплатные хостинги, платформы с репозиториями пакетов.
- Уровни абстракции:
- Переменные
- Объекты
- Функции
- Классы
- Компоненты
- Модули
- Пакеты
- Библиотеки
- Фреймворки
- Стэки технологий
- Зерокодинг
- Аспекты разработки:
- Функции ради возвращаемого значения или побочного эффекта
- Области видимости
- Синхронный / Асинхронный код
- Клиент-серверное взаимодействие
- JSON / XML
- REST API
- WebSockets
- Модульность
- Парадигмы:
- Процедурное программирование
- Объектно-ориентированное программирование
- Функциональное программирование
- Алгоритмизация задач с вытекающим решением:
- От частного к общему
- Декомпозиция
- Представлять конкретные данные
- Выполнять каждый шаг в уме
- Проверять свой прогноз выполнения (отладчик, консоль, pythontutor.com/javascript.html)
- Находить расхождения с действительностью
- Вносить коррективы в свои ожидания и код
- Первое решение хоть как-нибудь
- Второе - переписанное лучше
- Третье - попытка написать хорошо
- Сравнивать с чужими решениями
- Ценить разнообразие решений
- Возвращаться и перечитывать этот список при сомнениях и в трудные моменты.