Комплекс (синдром) самозванца - вещь распространенная и многим знакомая, особенно в такой динамично развивающейся области как айти - каждый год появляются новые языки, фреймворки, библиотеки - даже если вы не меняете стек - выходят новые версии знакомого вам продукта - и по ряду причин на них приходится переходить и осваивать. Поэтому специалисту все время вынужден осваивать новое на ходу, в процессе работы - что приводит его в замешательство - ему кажется что он работает с продуктом которого толком не знает.
Похоже, что этот комплекс есть у всех интеллектуальных работников - будь то врачи, инженеры и ученые. Интернет наполнен статьями о том как побороть тревожность от комплекса самозванца - мол, не знать всего - это нормально, это не повод переживать - а повод изучать неизвестное - по мере сил и необходимости.
Но вот в около-айтишной литературе я все время натыкался на педалирование комплекса. Помню как лет 10 назад меня, тогда еще молодого кодера, ошеломила книга “Clean coder” (в русском переводе “Идеальный программист”) Р. Мартина с вот такой цитатой из нее
Вы знаете, что такое диаграмма Насси—Шнейдермана? Если не знаете – почему? А чем отличаются конечные автоматы Мили и Мура? Должны знать. Сможете написать процедуру быстрой сортировки, не обращаясь к описанию алгоритма? Выполнить функциональную декомпозицию диаграммы информационного потока? Что означает термин «бесхозные данные»? Для чего нужны «таблицы Парнаса»?
Дальше следовал список тем которые, по Мартину, обязан был знать каждый программист:
Вы должны быть способны описать все 24 паттерна из книги «Банды Четырех»… должны уметь работать с UML, DFD, структурными диаграммами, сетями Петри, диаграммами переходов, блок-схемами и таблицами решений… должны… должны…
- Аааааа! Я, на момент прочтения книги, даже не слышал о половине тем которые, по мнению автора, обязан был знать - иначе “вон из профессии”. Море того что я не знал - пугало. Неясно было даже за что хвататься - и мой комплекс самозванца рос как на дрожжах, усугублялась каждый день, да и поводов к этому все прибавлялось - сколько бы я не учился - море неизведанного расширялось быстрее. То в одном проекте оказалось что в жава-проект встроен рабиинрейлс который собирался мавеновским плагином - но на новой версии жавы плагин потребовал новую версию себя - которая потребовала новую версию рельса - которая не смогла собрать легаси код проекта - но у меня не было опыта работы с раби - аааа, я самозванец! То на другой работе был RabbitMQ - а у меня не было опыта работы с очередями - аааа я самозванец!
Даже сейчас, 10 лет спустя, я не знаю многое из того что, по мнению Мартина, знать обязан (пробовал на прогулке вспомнить все паттерны “Банды четырех” - вспомнил 17, из них реально был бы готов объяснить 10-12) но вот тревожность поубавилась - и на вопрос “почему не знаю” уже не краснею как не сделавший домашку школьник а отвечаю:
-
Во-первых, потому что это все и сразу мне не надо - а мозг склонен забывать лишнее. Я не пишу книги и не читаю лекции по паттернам - а в повседневной жизни все 24 паттерна мне не встречаются - от силы 10. Вот их я и помню. Я не занимаюсь оптимизацией компиляторов - поэтому, хоть я когда-то и прослушал лекцию по JMM - навряд ли сейчас смог бы сам пересказать ее содержимое - кроме базовых вещей о том почему ряд оптимизаций недопустим в многопоточном коде.
-
Во-вторых, потому что моя работа часто имеет мало общего с красивой и сложной архитектурой из книг Фаулера или Банды Четырех. Мои повседневные задачи, в общем, достаточно тривиальны - CRUD-контроллер да формочка ввода-отображения, да логика с валидацией и перехода по статусам. И такой код редко требует серьезной оптимизации - но имеет и свои сложности - которые Мартин, описывающий сферическое программирование в вакууме, упоминает вскользь - а я трачу на него 70% времени. Например, тривиальная задача описанная в таске как “предоставить возможность страховщику сменить клинику” - выливается в часы обсуждений с менеджером новой логики - что если в “старую” клинику уже ушли заказы, что если страховщик поменяет клинику, сделает заказ и вернет ее назад и т.д. В итоге реально меняется 10-15 строк кода, сделанные изменения поймет и школьник - и в коде нет “ничего интересного” - им не похвастаешься на конференции. Но тем не менее он отнимает очень много времени - чтобы понять что именно от тебя требуется. Наверно, тут можно провести параллель с медициной - опытный хирург описывает пересадку сердца - это все очень важно и нужно. В то время как вы - фельдшер в рабочем поселке - и 99% ваших обязанностей - делать прививки, перевязки и выдавать антибиотики. Не так романтично - но не менее нужно.
-
Ну и в третьих - я не знаю всего потому что я не живу - и не хочу жить - только работой. Я провожу выходные на природе, вечера - с семьей, занимаюсь спортом, читаю худлит, иногда туплю в интернете. Да, один-два вечера в неделю я изучаю что-нибудь теоретическое, плюс постоянно что-то практическое приходится изучать на работе. Этого хватает чтобы успешно выполнять мои рабочие обязанности и понемногу накапливать багаж знаний - несмотря на то что отношение знаю/(должен знать по мнению гуру) становится все ближе и ближе к нулю.
Ну и вывод. Учиться в айти - придется постоянно. В этом есть свои плюсы, в этом есть свои минусы. Натыкаться в работе на что-то новое вы будете постоянно. Комплекс самозванца будет у вас возникать постоянно. Это - повод изучать то чего вы не знаете. Но не повод комплексовать, впадать в депрессию и тревожность от того что так мало знаете. Знать все - невозможно, “отнеситесь к этому с пониманием” как любит говорить один президент. Встретились на проекте с новым фреймворком который прям реально понадобится - окей, найдите книжку и прочитайте. Нашли у себя “белые пятна” - запишите в бэклог, как будет время - погуглите - прочтете статью на хабре, посмотрите ролик - и разберетесь на досуге. Для работы - практической работы программиста - этого более чем хватает. А остальное оставим “Идеальным программистам”.
Шурик


Комментарии (62)