По-моему, один из самых важных навыков программиста — умение работать в команде. Это значит, что нужно уметь договариваться об архитектурных решениях, принимать обратную связь по своему коду и давать обратную связь по коду партнёров в проекте, сдерживать эмоции и поддерживать других участников проекта, делиться знаниями, помогать находить конструктивные решения, уметь признавать неправоту и т. д.
В полезные навыки я добавлю:
- постоянное обновление знаний по технологическому стеку;
- расширение знаний о смежных направлениях (например, если ты бэкенд, сделай pet-проект на фронтед и наоборот);
- умение быстро находить информацию;
- общение с единомышленниками (митапы, хакатоны, open-source проекты, конференции и т. д.).
Прежде всего, давайте определимся, что значит «всегда востребованы»? Язык COBOL уже давно не топовый, но программисты на COBOL всё ещё встречаются.
Говоря о востребованности, можно подразумевать два разных момента:
- Возможность легко найти работу по профессии.
- Возможность профессионального развития.
С первым пунктом всё достаточно просто. Любая из десяти наиболее востребованных технологий так или иначе прокормит вас следующие лет 10–20. И тут надо определить, что такое «всегда». Давайте решим, что «всегда» — это до построения первого настоящего МИ и, соответственно, до наступления сингулярности. После этого события, очевидно, никаких программистов уже не будет. Наступит это, как мне кажется, нескоро, но давать прогноз более, чем на 10–20 лет, я всё же остерегусь.
Со вторым пунктом сложнее. Тут я не готов выдать чёткий список, но, если говорить об общих принципах, обычно хорошо развиваются профессионально те программисты, которые хорошо понимают, из каких элементов состоит система, как они работают, как связаны друг с другом. Что-то вроде «вот страница в браузере, она использует JS, CSS, HTML, они работают вот так, доставляются они в браузер по http — протокол устроен вот таким образом, он базируется на сетевом протоколе TCP с такими-то особенностями, браузер — это процесс, выполняемый операционной системой, процесс отличается от нитей вот таким образом». И так далее.
Эти знания не помогают писать код немедленно, надо ещё знать конкретные технологии, но это здорово помогает при решении проблем и построении надёжной архитектуры системы. И это ценится всегда. А технологии легко изучаются по мере необходимости. Улучшать эти навыки можно, задавая себе вопросы: а как эта штука работает, откуда берутся эти буковки на экране, какие есть альтернативные пути решения задачи?

