Всем доброго времени суток!
Хотел бы обсудить здесь такую тему, как всесторонняя прокачка скилов программиста. Дальше я представлю свое видение решения этого вопроса посредством некоторого абстрактного web-сервиса в вакууме. Всех, кого интересует саморазвитие в области разработки программного обеспечения, прошу под кат.
Зачем все это
С одной стороны периодически возникает ощущение, что полученные когда-то в универе фундаментальные знания о компьютерных науках (CS) потихоньку забываются, уступая место на «жестком диске» более практическим аспектам разработки, с которыми приходится сталкиваться каждый день. И на мой взгляд, это не правильно. Именно фундаментальные знания позволяют создавать действительно качественные решения в текущей практической области, а также с легкостью менять области, используемые языки и инструменты.
С другой стороны есть достаточное количество программистов, которые или не получили профильного образования вовсе (учились на других специальностях, в т.ч. гуманитарных) или же получили посредственное CS обазование. Многие из них хотели бы наверстать упущенное, чтобы стать лучшими специалистами, но потратить 5 лет на обучение в режиме full time мало кто может себе позволить.
Итого, имеем программиста с уровнем скилов X, которому нужно без отрыва от производства выйти на принципиально новый уровень 10X.
Как лечить
Теоретически каждый, кто желает повысить свой уровень, может самостоятельно составить для себя план, что, когда и на сколько подучить/выучить/закодить. Но тут есть следующие проблемы:
- не всегда есть представление, о том, что именно нужно узнать (никому не в упрек, из-за узости кругозора)
- если есть представление, не всегда есть удобный материал для изучения
- если есть материал, не всегда хватает мотивации, так как нет группы единомышленников, идущих к общей цели
- трудно отслеживать прогресс
- материал по различным областям находится на разных ресурсах, нет удобного централизованного «дашборда»
В результате, я сделал для себя вывод, что положение мог бы исправить некоторый web-сервис, назовем его Programmer Skills Checklist, обладающий следующим функционалом:
- список областей знаний CS, разбитый по категориям (в центре «Базовые сведения», от них ответвлениями идут более специфичные категории, например «Веб-разработка», «Базы данных», «Системное программирование», «Администрирование» и т.п.)
- каждая категория может иметь подкатегории
- каждая категория содержит материалы для обучения
- наглядная визуализация графа категорий (в виде ментальной карты, например)
- список категорий и их наполнение является UGC — наподобие Wikipedia
- массовая персонализация чеклиста (чеклист общий для всех, но при этом в своих аккаунтах можно отмечать различные ветви и узлы, как выученные, оставлять примечания и т.п.)
- активная социальная составляющая обучения (возможность создавать группы для совместного изучения категорий, возможность комментировать, оставлять заметки, писать свои статьи)
- практикум по каждому из узлов
Быстрый наборосок Базовой катеогории у меня получился таким:
Основа общие сведения представление данных в ПК архитектура ПК ... языки программирования высокого уровня скриптовые языки низкого уровня операционные системы виды архитектура API методы программирования базовые структуры данных базовые алгоритмы декомпозиция задач архитектура программ ООП (первая глава GoF, первые главы Рефакторинга Фаулера) системное программирование сеть дисковая подсистема ... прикладное программирование консольные приложения GUI-приложения Web-приложения Мобильные приложения ... администрирование базовые знания *nix shell
Благодаря UGC этот набор будет расширен до необходимого и достаточного уровня.
Резюмируя, можно сформулировать основные свойства категорий графа знаний (узлов):
- каждый узел является композитным (может содержать подузлы)
- каждый узел может быть помечен пользователем определенным состоянием («изучен», «в процессе», «фтопку его» и пр.)
- каждый узел может быть прокомментирован и протегирован
- каждый узел содержит список связанных с ним материалов и практикумов (в виде ссылок на сторонние ресурсы, книги, форумы и пр.)
- каждый узел может содержать заметки от участников (публичные и личные)
Заключение
На выходе хочется получить удобный web-сервис, являющийся персональным «дашбордом», направляющим программиста в процессе его профессионального становления, посредством «визуальной карты знаний», списков материалов и практикумов для обучения, взаимопомощи и общественной мотивации участников. С помощью этого сервиса можно как получить новые всесторонние знания в области CS, так и освежить/дополнить полученные ранее, оценить общее состояние своих скилов, честно расставив «галочки», и стараться держать планку на должном уровне.
От вас, друзья, хотелось бы услышать компетентное мнение касательно необходимости и возможности реализации такого проекта. Спасибо за внимание!
P.S. Прошу прощения за обилие сленга и американизмов в тексте.
Автор: Ostrovski