Размышляя над тем, какие навыки больше всего нужны программисту, в уме нарисовалась занимательная пирамида по подобию пирамиды Маслоу, а позже была перенесена в компьютерное изображение:
Рассмотрим каждый слой подробнее:
Логика
Конечно же, самое важное, чем должен обладать программист – это логика. Умение правильно мыслить, выявлять взаимосвязи между явлениями безусловно должны быть атрибутами каждого не столько программиста, сколько толкового технаря.
Математика
Если человек обладает логическим мышлением, значит знание математики лишь вопрос времени. Конечно же, разным специализациям необходимы различные разделы математики, однако, знание математического аппарата на уровне хотя бы школьного курса критически необходимо.
Формализация
Перенести любые действия на язык точных наук - дано не каждому. Именно здесь без знания математики, логики, и, возможно, других наук не обойтись. Умение пользоваться декомпозицией сложных задач на более мелкие подзадачи категорически приветствуется.
Алгоритмы и структуры данных
Фактически, алгоритмы и структуры данных необходимы для кодирования формализованной модели процесса/объекта/системы. Строить алгоритмы еще учат в школьном курсе информатики. Там дают понятие термина “алгоритм”, учат их составлять, даже строят блок-схемы по ним. Но какая это потрясающая вещь, кто-нибудь для себя вынес? А ведь мы с ними сталкиваемся каждый день! Да что уж говорить, нашу жизнь можно описать простым алгоритмом, приводящим неизменно к одному и тому же результату. Рождение-> детство-> юношество-> молодость-> зрелость-> старость-> смерть. Это, наверное, самый надежный алгоритм во вселенной!
Языки программирования
Все основные алгоритмы и структуры данных доступны практически(а может и на любом) языке программирования. Здесь уместно сравнение с человеческими языками: их существует огромное множество, однако на каком бы из них ни говорил человек, он сможет выразить все, что угодно! Таким образом, язык программирования является инструментом выражения формализованной модели или алгоритма, следствием выполнения которого является работающая программа.
Шаблоны проектирования
Сюда также я хотел бы отнести и различные архитектуры приложений. На каком бы языке вы ни писали, для каждого существует набор типовых решений конкретных задач. Они существенно упрощают жизнь.
Технологии
Я расположил это понятие на верхушке своего представления о программировании, потому что технологии являются синтезом всего вышеперечисленного. Например, при раскрытии темы веб-технологии оказывается, что это собирательное понятие использования определенного набора языков программирования(скажем, PHP, Java, JavaScript и т.д.), архитектур приложений(например сервис-ориентированные приложения, клиент-серверные приложения) и определенного набора шаблонов проектирования(допустим, MVC, MVVM).
И это все?
Описанная выше пирамида предполагает, что последующий уровень знаний требует некоторые знания из предыдущего. Поэтому, в это представление не вписываются умения владением системами контроля версий, операционными системами и всякого рода методологиями разработки. Это такие вещи, понимание которых делает жизнь проще и краше всегда.