Как fullstack разработчику мне приходится очень много читать литературы по специальности. Но в последнее время я стал замечать, что с моими знаниями стали происходить странные вещи. Они быстро устаревают! Копнем глубже.
Условно знания программиста можно разделить на две большие категории:
- Фундаментальные знания
- Знания технологий
Фундаментальные знания
Это понимание ООП, паттернов проектирования, принципов и метапринципов разработки ПО. Эти знания по большей части устойчивы к устареванию. Они лежат в основе вашего чутья в разработке - что такое хорошо и что такое плохо. По сути они для вас как луч света в темном царстве технологий. Какой бы язык, фреймворк или технологию вы не взяли в руки - интуитивно вы отличите говнокод от конфетки. Увы, фундаментальные знания накапливаются медленно - только с опытом и на практике. Не получится их приобрести сходу просто, например, прочитав книгу банды четырех про паттерны проектирования. В одно ухо влетит в другое вылетит со свистом как из турбины самолета. Проверено на себе. Можно читать правильные книги хоть до ноликов и единичек в глазах. Толка не будет. Но зато в каком-то смысле ваши фундаментальные знания антихрупки. К сожалению одних фундаментальных знаний для разработки ПО будет маловато. Нужно знать конкретные технологии.
Знания технологий
Это понимание технологий, с которыми вы активно работаете в данный момент. Знания технологий недолговечны. Перестав работать с какой-то технологий вы постепенно начинаете забывать нюансы. В лучшем случае эти нюансы осядут в долговременной памяти. Тогда если вы снова с этим столкнетесь даже через год, то быстро восстановите в памяти всю картину. В худшем случае знания через некоторое время улетучатся совсем. При необходимости в будущем с ними работать придется вникать повторно.
Знания о разных техологиях плохо сосуществуют друг с другом одновременно. Долго пишешь sql запросы - постепенно вылетают знания по JQuery. Разработал asp.net core приложение - забыл winforms и webforms. Охватить и запомнить все не получится.
В последнее время знания технологий стали довольно хрупкими. Они быстро появляются и быстро умирают. В книге Талеба можно провести аналогию с одной закономерностью. Если технология уже долго живет, как например SQL c 70-х годов прошлого века, то с высокой долей вероятностью такой долгожитель продолжит свое существование. В ближайшее десятилетие наверняка. А какой-нибудь хайповый JavaScript фреймворк вылетит в трубу в ближайшие пару лет вместе с потраченным на его изучение вашим временем. Поэтому надо очень вдумчиво выбирать во что инвестировать свое нерезиновое время. В свое время я не стал абсолютно ничего читать про silverlight. Не потратил ни минуты свое времени. И не зря.
Книги
Ценность книг для меня со временем стала падать. С самого начала своей карьеры я читал взахлеб. Про проектирование, дизайн, тестирование, юзабилити, паттерны, технологии с которыми непосредственно работал. Увы, без постоянной практики многие знания вылетали. А практиковать все и вся не было возможности.
Конечно ценность ряда книг неоспорима. Например "Совершенный код" Макконела. Но будучи новичком вы конечно сможете похвалиться такой прочитанной книгой, но суть не ухватите. Это тоже самое, что в школе писать сочинение про "Войну и мир".
Когда я изучал ASP.NET Webforms, то прочитал всего Дино Эспозито. Мне хотелось хорошо разобраться в вопросе. Понять фундаментальные основы платформы. Да и просто приятно разрабатывать с пониманием вещей. Про ASP.NET Core книги я уже не читаю. Просто нет смысла. Обновления выходят с такой скоростью, что читать фундаментально уже не хватит времени.
Stackoverflow
Быстрое устаревание знаний хорошо заметно по ответам на нашем любимом stackoverflow. Еще буквально несколько лет назад в поисках решения достаточно было посмотреть первый правильный ответ. В большинстве случаев он вполне устраивал. Сейчас такой подход уже не работает. Правильный ответ чаще всего уже морально устарел:
- Может быть он еще подходит, но с новыми возможностями языка оно будет короче и понятнее.
- Может актуален только для старой версии какого-нибудь фреймворка.
В итоге надо пролистывать список ответов до конца. Вчитываться в каждый и чутьем понимать какой ответ теперь правильный для вашей конкретной ситуации.
Забавно читать вопросы по asp.net core. Там обычно по факту несколько правильных ответов с кучей коментов, аля в версии 1.0 это походит, в 1.1 не работает, а в 2.0 вообще api изменился и там надо вместо молотка дрель брать в руки.
Какой вывод я хотел сделать из написанного? Надо беречь свое время. Оно скоротечно. Вдумчиво выбирать во что его инвестировать. Ценность ряда программистских знаний аналогична по сроку годности скорее йогурту чем тушенке. А потраченное время вам никто не вернет.