Программистами не рождаются,
Программистами становятся
В информационном мире профессия программиста приобрела особое значение. В индустриальной эпохе, пока только зарождалась информационная составляющая, программирование было искусством. Музыкальные автоматы исполняли мелодии, записанные перфорацией. Тот, кто программировал эти аппараты без сомнения был искусным программистом и без современных музыкальных редакторов, на перфокартах создавал битовый код для колокольчиков, бойков и других приспособлений, требующих точности и повторяемости.
В XX веке появились вычислительные машины, которые в начале своей эпохи использовали много механики, но времена менялись и появились языки программирования. Чтоб стать программистом приходилось много учиться до входа в профессию. Ностальгия по тем временам не вызывает приятных впечатлений, развитие вычислительной техники побежало с огромной скоростью и к XXI веку достигло огромного потенциала. Появилась сеть, что значительно изменило отношение к компьютерной технике. Польза от использования гаджетов стала настолько существенной, что человек отставший от технического прогресса рискует остаться за бортом жизни.
Бытовое общение
Встречалась ли Вам ситуация, когда говорят: "Ты программист, как хорошо, (восхищенный взгляд) подскажи мне почему у меня пульт от телевизора не работает". Объяснять, что совсем не в курсе о работе электронных устройств и в общем то мало интересуюсь управлением телевизором, бесполезно. Вопрошающий проявляет разочарование, становится понятно, что была неприкрытая лесть, для решения проблем с телевизором.
Даже если попросят посмотреть почему не работает компьютер, все равно не совсем по профессии. Так кто же такие программисты и за что едят свой хлеб с маслом, а нередко и с икрой на масле?
Классификация программистов
1. Программисты для компьютеров и микроконтроллеров - системные программисты. Эти умные люди создают алгоритмы не для конечных пользователей, их служба на первый взгляд, как будто не видна. Автоматизированные системы управления это стык электроники и программирования. Нередко в этой специальности приходится работать и паяльником, и отверткой, знать и использовать свойства электротехники. Продукты их творчества драйвера оборудования, ядро операционной системы, управляющие программы систем управления в аппаратах.
Программируют эти талантливые ребята на assembler, C, C++ и используют визуальные системы программирования контроллеров управления.
В этой специальности наиболее развиты знания и навыки дискретной математики, триггеры, ШИМ регуляторы, ПИД регуляторы все хорошо знакомые для них понятия.
Для чего я это рассказываю? Для того чтобы определить насколько разными знаниями и умениями обладают специалисты одной профессии.
2. Прикладники, разработчики программного обеспечения для конечных пользователей. 1С программисты, стали практически отдельной профессией, именно они прикладники. В данной специальности необходимо учитывать, что продуктом творчества пользуются живые люди и нужно чтоб интерфейсы были интуитивно понятны, красивы и просты в использовании. Пользователей программ совершенно не интересует какая там используется СУБД, о программе судят по интерфейсу, постарайтесь не забывать об этом.
Весьма талантливые специалисты разрабатывают великолепные по структуре базы данных и быстродействию алгоритмы, но для запуска действия используют веселые сочетания клавиш, например, CTRL+SHIFT+H, даже запомнить такое непросто, а перед нажатием одной рукой на клавиатуре нужно немного размять пальцы.
Текст программ тоже нужно писать красиво, желательно с комментариями и пояснениями, нужно заботиться о своих коллегах, которые возможно будут модифицировать код. 1000 строк написать не проблема, сложнее уложиться в несколько строк и получить легко модифицируемый и читаемый алгоритм.
KPI по количеству написанных строк для программистов - огромная ошибка. Самое сложное создавать компактные тексты программ, но понятно, что это не самоцель, иногда скорость работы алгоритма намного выше, несмотря на более длинный код.
3. Долго размышлял и вывел эту специальность, WEB программисты, в отдельную группу. В общем это прикладные программисты, но множество специфичных задач выделяет их из общей массы. Практически все задачи для них клиент-серверное взаимодействие и еще несколько лет назад это были уникальные навыки, и у меня тогда не было бы сомнений выделять их или нет. Сейчас быстро происходит процесс сближения специальностей 2 с 3, скорее сейчас выделяются многопоточники, но я думаю, что и они станут прикладниками.
Разделение на эти три группы очень условно, Front end, Back end, сервера, компиляторы, сервисы, хостинг, много разных специализаций, смотря в каком масштабе смотреть на этих талантливых людей.
Карьера
Лестница развития состоит из трех ступеней:
1. Начинающий (Junior), дословный перевод слова другой, но младший, я думаю, не отображает смысл положения. Как правило в начале карьеры, первые три года специалист работает в этом статусе. Зарабатывает мало, работу ему кидают, ту которую не хотят делать другие, как правило рутина и скучные задачи. Удача если есть хороший наставник, который стремится научить, передать свой опыт и знания, но давайте будем здравомыслящими людьми, идеальный наставник - утопия. Зачем старшим товарищам плодить себе конкурентов? Вот и я думаю незачем тратить силы, проще просто часть работы с себя сбросить на младшего. Поэтому никакой несправедливости, сплошная логика.
Адам Смит, крупнейший идеолог капиталистического мира, которого можно смело ставить в один ряд с Карлом Марксом, доступно объясняет, как возникает высокая зарплата наемным специалистам. Чем выше спрос на программистов, тем выше зарплата. ВУЗы выпускают большое количество программистов и казалось бы, рынок труда должен достигнуть насыщения и зарплаты начнут падать, но этого не происходит. Спрос на программистов, увеличивается, каждый день возникает много новых рабочих мест этой сложной специальности.
Превратить программистов в кодеров не получается. Появляются новые средства разработки, которые облегчают и ускоряют разработку программного обеспечения и вроде уже первоклассникам под силу создавать программы, но пока сложностей только добавляется. Да, "Hello Word!" написать становиться все проще и быстрее, но это не удовлетворяет все возрастающие потребности бизнеса, поэтому необходимо много и кропотливо трудится, помогая бизнесменам автоматизировать бизнес-процессы, вести учет ценностей, поддерживать связь и многое другое. К чему это я? Пока не наблюдается угроз остаться безработным, Начинающим советую брать новые вершины знаний.
2. Опытный (Middle). Никакой не середнячок, после трех лет активной работы, я надеюсь наставники не давали расслабляться, настает тот момент, когда начинается самостоятельная работа. Приходят интересные проекты, увеличивается оклад, но на этом этапе многие уходят из профессии. Программировал - звучит очень часто, на мой взгляд это профессия с наибольшим количеством уходов в другие области IT. Таким образом получаем еще один повод прийти и оставаться в профессии, спрос на нее постоянно растет, а предложение имеет тенденцию падать.
3. Ведущий (Senior). Дословно старший, но русский эквивалент опять точнее. Как правило этого уровня достигают самые способные проработав примерно 6 лет и уже выполнивших сложные проекты, и что греха таить, наделавших ошибок. Но на ошибках учатся, по статистике крахом заканчивается 70% проектов в области программного обеспечения. Как не надо делать программисты усваивают быстро.
Чаще всего за эти годы ведущий успевает изучить 2-3 новейших системы разработки, и в курсе что существует десяток новых систем, но пока неизвестно завоюют ли они умы многих коллег.
Основная задача ведущего программиста - выбор технологии разработки и распределение задач программистам команды. Ведущий может быть один, тогда все проще, разработка нередко даже быстрее получается. Редкие навыки программиста распылять не стоит, поэтому за все самому лучше не браться, а в проектах есть много задач, которые описаны в статье Успешная разработка программного обеспечения .
Мы все учились понемногу
Чему-нибудь и как-нибудь,
Так алгоритмом слава богу,
У нас не мудрено блеснуть.
Как учиться
Технологии в области программного обеспечения меняются чаще чем в других отраслях. Давно забыты те времена, когда человек в молодости обучился специальности и всю жизнь применяет полученные навыки. Потом начался технический прогресс и в течении трудовой деятельности трудящимся пришлось осваивать новые навыки, видимо сначала один раз, потом началось.
Средства разработки программистов меняются раз в два года, таким образом за трудовую деятельность придется осваивать новые системы не менее десяти раз. На мой взгляд это много и необходимо к этому быть готовым. Развитие любознательности является ключевым навыком программиста. Доминирующее эмоциональное состояние интерес, нужно поддерживать для успешного обучения. Очень "интересная" эмоция и некоторыми психологами описывается как положительная. В одной из книг психолог Литвак М.Е. определяет всего две положительных эмоции: радость и интерес.
Поддерживать в себе интерес бесконечно к одной теме не получится. Повышенное эмоциональное состояние продлится от двух недель до трех месяцев и смениться скукой. Скука - это отсутствие интереса. Гормональный фон поменяется, настроение изменится и настанет фаза неприязни к изучаемой теме или системе. За время пика интереса необходимо впитать как можно больше материала, а в этом состоянии можно изучить весьма занудные вещи. Складывается впечатление, что мы устроены очень продумано и логично. Следующая за интересом фаза скуки просто необходима, чтоб осмотреться, подвергнуть ревизии полученные знания, откинуть возможные ошибочные утверждения и от некоторых теорий очистить свою память. Скука длится от недели до двух.
Третий этап уравнивает отношение к знанию между восторгом и критикой. Уже не хочется всему миру рассказать, что наконец найдено единственная верная теория, которую можно ко всему применить. Человек в интересе выглядит немного чудаковато и легко может вызвать раздражение у окружающих, но удержать в себе такую сильную эмоцию как интерес невозможно. Придя к третьему этапу остается выдохнуть и уже применять полученные данные в жизни и работе. Постепенно применяемая система перейдет в статус навыка и будет использоваться неосознанно. Цепочка знания выглядит примерно так:
Неосознанное незнание (понятия не имею) -> Осознанное незнание (нашел интерес) -> Осознанное знание (изучил) -> Неосознанное знание (применяю)
Экология
Многие знания рождают рождают печали.
Как можно понять из цитаты мудрого человека, постоянное обучение имеет побочный эффект и порождает известную "болезнь" депрессию. Полностью избежать проблем с печалями не получится, так или иначе будет спад настроения и нежелание программировать.
Хорошо синдром депрессии и лени снимается спортивными или просто физическими нагрузками. Главное начать тренировку, отвергнув все аргументы и ощущения в теле, проявить силу воли, потом само пойдет. Перегружаться физической нагрузкой не стоит, потом будет труднее пересиливать себя, чтоб начать тренировку.
В аптеке существует множество препаратов улучшающих кровоснабжение и увеличивающих насыщение кислородом мозг, сильно не помогает, но иногда, при обучении или сложном и срочном проекте, улучшают и ускоряют процесс разработки.
Мне больше всего нравится вариант переключения и отдыха - кратковременная, на несколько дней, поездка в тишину леса с любимой женщиной и никакого интернета.
Время проводимое в процессе создания алгоритмов для всех индивидуально, но по опыту скажу, что по 16 часов в сутки проводить в этом состоянии мучительно. Реально около 4 часов, тогда не происходит критичного эмоционального выгорания. Так как в РФ установлен восьмичасовой рабочий день, то возникает вопрос чем заниматься оставшиеся 4 часа.
Это сильно зависит от места работы, в первую очередь обучение, изучение и анализ. У работодателя не должно по этому поводу возникать неприязни, потому что программист всегда на работе. Даже уйдя с работы, все равно идет процесс размышления о том, как решить ту или иную задачу, а это основная работа программиста - думать и находить нужные решения, остальное это просто навык. Вот за это и платят высокую зарплату, за смекалку и сообразительность.
Продолжение следует ...
В одной статье не получается полностью раскрыть тему. Продолжение будет исключительно для программистов, поэтому не коллегам рекомендую продолжение не ждать и при выходе статью пропустить, там я буду делится опытом и секретами с посвященными :) .
Провокация в заключении
Женщина программист, либо не женщина, либо не программист
Много лет пытаюсь опровергнуть это утверждение, к сожалению не получается. Может мне просто не везет. Я утверждаю, что женщины очень умны и часто умнее мужчин, но почему среди них так мало программистов. IT-шниц много, но количество программисток стремится к нулю. Что то здесь не так. Я надеюсь в комментариях прояснить эту, не побоюсь этого слова, проблему.