Сначала стоит прочитать статью по ссылке из предыдущего поста.
Там очень хорошо написано, и хоть статья и 2003 года, она действительна и сейчас.
Правда хотелось бы добавить про программистов. Сейчас существует две категории программистов: так называемые кодеры и программисты.
Кодеры это именно те «программисты», которые не делают ничего, кроме как пишут код, по уже всему приготовленному, ну максимум, что придумывает простейшие алгоритмы. И кодеры, по аналогии со статьёй и являются ремесленниками. Это вовсе не значит, что кодеры не нужны, они нужны, тем более если разработка проекта ведётся с помощью людей, чьи обязанности строго разделены и сама разработка проекта ведётся поэтапно.
Программисты же сейчас должны уметь не просто писать код, а самое главное думать, причём думать много. Реально написание кода в проектах занимает максимум 30%, а всё остальное время уходит на создание и продумывания архитектуры, дизайна, безопасность, контроль, отказоустойчивость, на тестирование созданного проекта и на создание сопутствующей документации (спецификации, руководства пользователей, примеры тестирования, описания алгоритмов).
Правда, как по опыту, я знаю, что даже в этапных проектах больше ценятся программисты, чем кодеры, потому что хороших и дешёвых кодеров найти намного проще — можно просто нанять индусов-кодеров.
А ещё наш декан нам сказал, что мы выбрали самую плохую профессию, потому что нужно всё время учиться. Поэтому, если вы хотите быть хорошим программистом, всё время учитесь и много и качественно въёбывайте, чтобы стать хорошими специалистами.