Настоящий текст открывает цикл статей написании программ. Сейчас очень много людей устремились за длинным рублём и называют себя программистами или, что ещё более нагло, разработчиками программного обеспечения. К сожалению человечество сё более развивается в сторону автоматизированных систем, а значит, что потребность в программистах и прочем околокомпьютерном персонале будет только расти.
Давайте попробуем дать определение программиста. Сейчас бытует мнение, что программист - это человек, который умеет писать программы на языке программирования (чаще всего на единственном). Но, как показывает практика, этого недостаточно. В результате подобной практики мы получаем быстро разработанное, но ужасно неэффективное программное обеспечение, успешно пожирающее всё возрастающие объёмы аппаратных ресурсов. Мы получаем толпы адептов одного стиля/языка/подхода, полагающих, что только их знание победит все задачи, возникающие перед создателями программного обеспечения. Так кто же такой программист? По моему скромному мнению программист - это человек, который обладает знаниями в нескольких языках программирования, способный к самообучению и обладающий пониманием самых популярных на рынке аппаратных средств.
А теперь попробую пояснить своё определение. Современная система образования заточена на выпуск узких специалистов. Потому, что так дешевле и потому, что узкий специалист будет неспособен изменить привычный ему порядок вещей. Не обладая достаточным кругозором узкий специалист будет всегда использовать сходные решения для всех задач и, таким образом, будет предсказуем. Дешевизна процесса заключается в ограниченной подаче информации и уменьшении требований к квалификации преподавателей. Многие высшие учебные заведения дают курсы по нескольким языкам программирования, но эти курсы не учат студентов эффективно использовать язык программирования, а, в лучшем случае, знакомят студентов с синтаксисом языка. После прохождения такого курса студент, иногда, неспособен решать даже типовые задачи и его требуется доучивать. Обзор аппаратных средств также ведётся весьма поверхностно. После прохождения курса студенты настолько не понимают специфику работы операционной системы, что не видят разницу между управлением памяти и ресурсами в разных операционных системах, а некоторые видят ровно одну "правильную" операционную систему. Нежелание знать базовые алгоритмы приводит к появлению огромного количества новоизобретённых "велосипедов" и прочих вершин плохого кода. Повальное увлечение технологиями, изолирующими от реальных аппаратных средств, вызванное падением среднего уровня образования приводит к неэффективному использованию и повышению стоимости владения таки программным обеспечением. Разница видима невооружённым взглядом на рынке труда, когда всем требуются, к примеру, Java-программисты со знанием какой-нибудь технологии вроде Spring Framework. А всё потому, что эта технология была использована таким образом, что затрудняет поиск и исправление ошибок, не говоря уже про добавление новых функций.
На вопрос почему сложилась подобная ситуация я могу лишь ответить, что всё дело в бизнесе. Пока за попытку вывести на рынок нефункциональное программное обеспечение не будут наказывать - всё будет продолжаться. Опередить конкурентов и превратить пользователей в тестеров - это, сейчас, обыкновенное поведение компаний по разработке программного обеспечения. Продать то, что ещё не разработано - это успех одних и боль других. Никто не будет платить три года за разработку нормально функционирующей системы. Всем нужно вчера, а максимум через год.
Итог печален. Рынок коммерческого программного обеспечения медленно, но верно превращается в чёрную дыру, поглощающую ресурсы и выдающую "программное обеспечение", неспособное к нормальному функционированию. И так будет, пока программистами становятся все, без разбора и таланта.