Настоящий программист
Название цели провокационное, ибо кто такой настоящий программист не знает ни кто, а точнее, у каждого свой ответ на этот вопрос.
Для меня это значит:
- эффективно решать задачи при помощи различных инструментов (языков программирования);
- обладать алгоритмическим мышлением (думать как программист);
- можно добавить еще что-нибудь, но два пункта выше для меня основные.
Исходя из того, что целью является стать программистом, а не уметь программировать, скажем на JavaScript или PHP, обучение в этот раз (а уже были попытки) начну с "базы" - математика + алгоритмы и структуры данных + архитектура ЭВМ и т.д. Параллельно буду практиковаться в решении задач, с помощью языка JavaScript, подробнее будет понятно из этапов цели.
В этапы будут вноситься различные источники получения знаний (курсы, книги и пр.), но это не значит, что изучать их я буду все, если для понимания темы достаточно будет одной книги, остальные читать я не буду и т.д.
Многие этапы будут выполняться одновременно, некоторые последовательно.
Отчеты в этой цели каждый день, еженедельные "саммари" в блоге kovaldmitriy.ru
Цель будет дополняться.
Критерий завершения
Зарабатываю программированием (офис или Upwork).
Личные ресурсы
время - несколько часов в день, базовые знания в верстке, ЯП python, js, php.
-
Структура и интерпретация компьютерных программ (SICP)
-
1.2. Процедуры и порождаемые ими процессы
-
1. Построение абстракций с помощью процедур. 1.1. Элементы программирования
-
1.3. Формулирование абстракций с помощью процедур высших порядков
-
2. Построение абстракций с помощью данных. 2.1. Введение в абстракцию данных
-
2.2. Иерархические данные и свойство замыкания
-
2.3. Символьные данные
-
2.4. Множественные представления для абстрактных данных
-
2.5. Системы с обобщенными операциями
-
3. Модульность, объекты и состояние. 3.1. Присваивание и внутреннее состояние объектов
-
3.2. Модель вычислений с окружениями
-
3.3. Моделирование при помощи изменяемых данных
-
3.4. Параллелизм: время имеет значение
-
3.5. Потоки
-
-
Архитектура компьютера
Цель этапа.
- Общее устройство компьютеров
- Понимание принципов работы процессора и исполнения машинного кода (опкоды, ассемблер)
Курс отсюда
-
Книга “Код. Тайный язык информатики” Чарльз Петцольд.
-
Курс Введение в архитектуру ЭВМ. Элементы операционных систем.
-
Операционные системы + *NIX
Цель этапа
- Процесс/Поток (понятие, состояния, жизненный цикл, сигналы)
- IPC (пайпы, сокеты)
- Владение командной строкой (bash)
- Умение оценить состояние системы (ps, top, free, df, du)
- Понимание системы прав в linux
- Просмотр логов (syslog)
- Перенаправления и потоки
- Переменны окружения
- Системы инициализации (systemd)
- SSH
- Генерация и использование ключей
-
Курс hexlet "Операционные системы"
-
Книга “Современные операционные системы”. Эндрю Таненбаум, Х. Бос.
-
Курс hexlet "Linux: Пользователи"
-
Книга “Операционная система UNIX”. Андрей Робачевский, Сергей Немнюгин, Ольга Стесик.
-
Книга “Руководство администратора Linux”. Эви Немет, Гарт Снайдер, Трент Р. Хейн.
-
Информатика
Трудно отнести к какому то одному этапу, но в целом важные знания )
-
Курс на stepik "Введение в теоретическую информатику"
-
-
Математика
Цель этапа
Получить базовые знания в следующих разделах математики
- Теория множеств
- Булева алгебра
- Комбинаторика
- Теория автоматов
- Теория графов
- Статистика
- Подготовить мозг к пониманию алгоритмов )
Источники, в основном, курсы МФТИ в "исполнении" Райгородского
-
Курс на stepik "Основы дискретной математики"
-
Курс на stepik "Ликбез по дискретной математике"
-
Курс на coursera "Математика для всех"
-
Курс на coursera "Комбинаторика для начинающих"
-
Курс на coursera "Современная комбинаторика"
-
Курс на coursera "Теория вероятностей для начинающих"
-
Курс на coursera "Теория графов"
-
Курс на coursera "Случайные графы"
-
Алгоритмы и структуры данных
Цель этапа
- Массивы
- Ассоциативные массивы/Словари
- Связаные списки
- Графы/Деревья
- Очереди
- Сортировка массивов
- Алгоритмическая сложность
- Обход деревьев
- Операции над списками (вставка, удаление, переворот, поиск циклов и т.п.)
-
Книга "Грокаем алгоритмы. Иллюстрированное пособие для программистов и любопытствующих". Адитья Бхаргава
-
Курс на coursera "Алгоритмизация вычислений"
-
Книга "Алгоритмы. Вводный курс". Кормен
-
Книга "Алгоритмы. Построение и анализ" Кормен
-
Книга "Структура и интерпретация компьютерных программ"
-
Курс на Hexlet "Структура и интерпретация компьютерных программ"
-
Профессия "Бэкенд JS-программист (node.js)" на Hexlet.
Пройти все этапы и минимум 3 проекта.
Ссылка на курс ru.hexlet.io/professions/backend
-
Английский язык
Цель этапа
- Читать любую техническую документацию, понимая 80-90% слов
- Вести деловую переписку, уровень intermidiate
- Разговорный английский - понимать и поддерживать разговор на простые темы + профессиональные термины.
На первом этапе главный способ достижения - чтение документации и художественной литературы, занося неизвестные слова в ANKI или LinguaLeo (есть Premium) + слушать радио (BBC).
На следующих этапах (через 6-9 месяцев, видимо) - сериалы, метод Умин, Пимслер, Italki и пр.
Изучение языка один из важнейших аспектов в профессии "программист", поэтму ежедневные занятия должны быть протяженностью не менее 2-х часов.
-
Практика
Цель этапа
На первом этапе, при изучении математики, информатики и пр. не забывать зачем все это, для этого решать задачки на перечисленных ниже ресурсах.
- hexlet (практика)
- codewars
- leetcode
На последующем этапе внедрять полученные знания на hexlet, путем разработки проектов.
- 4722
- 13 ноября 2017, 08:28
Не пропустите новые записи!
Подпишитесь на цель и следите за ее достижением