А сложно ли работать программистом?

от автора

Этот вопрос мне часто задают вокруг. Задают родственники, друзья, дети друзей и вообще незнакомые люди. У всех своих цели — кто-то хочет сменить род деятельности, кто-то только выбирает куда пойти учиться, а кто-то желает в первую очередь убедить себя в том, что «вот еще и этим бездельникам ни за что деньги платят». Что же ответить на этот вопрос? Честно говоря, первым делом, конечно, хочется выпятить грудь колесом и двинуть речь о том, что, дескать, окромя нечеловеческого ума и 10 лет глубокой математической подготовки нужно еще иметь природный талант и пахать круглосуточно… Но где-то на третьей минуте этого увлекательного текста включаются мозги и здоровый скептицизм, требующий на время замолчать и немного подумать.

А и правда — сложно ли?

Кодеры vs программисты

Как-то так исторически сложилось, что в самом IT-мире принято отделять «кодеров» от «программистов». Дескать, первые тупо клепают что-то по шаблонам и указаниям сверху, а вот вторые — ТВОРЯТ. Мне это разделение никогда не нравилось. Любому порой может попасться глупая и нудная работа. Писать простой код можно не потому, что ты глуп или ленив, а потому, например, что ты молод и только учишься или хочешь сменить вид деятельности. Более того, сама по себе надпись «программист» на бейджике даже вместе с тем фактом, что ты вроде бы должен как раз «творить», а не «кодить», тоже ничего не значит. Бывает, что «программисты» такого напишут, что кажется, будто они мозги вообще не включали по ходу работы, а бывает и наоборот — рядовой трудяга что-то эдакое заавтоматизирует — и вот уже все смотрят на результат с восторгом. Вывод: формальное название должности не определяет степень сложности работы.

Узкая специализация vs широкая

Есть программисты узкого профиля, а есть программисты широкого профиля. Первые знают, каким именно должен быть параметр Х в методе Y класса Z, для того, чтобы код работал оптимально при выполнении задачи W. Вторые могут не догадываться не только о параметре X, методе Y и классе Z, но даже о существовании задачи W. Первые потратили очень много времени и сил на совершенствовании в своей области, им было тяжело в учении, но зато теперь легко в бою. Вторые тоже учились прилежно и усердно, но больше — общим принципам, универсальным языкам и распространённым задачам. Им было легче в учёбе, но каждый новый день бросает им новые вызовы. Некоторые из них можно перекинуть на узкоспециализированных коллег, но большинство придётся решать самим. Что лучше — поработать в молодости «на будущее» и почивать на лаврах своих знаний, или каждый день вступать в новый бой, «размазывая» сложность во времени? Не знаю. В молодости легче учиться, но предметная область может перестать быть актуальной. С другой стороны, каждый день тратить кучу мозговых усилий на то, что спец в этой сфере сделал бы за минуту — слегка унизительно. Каждый решает сам.

Хочу думать или не хочу

К сожалению, работа программиста порой напоминает работу укладчика парашюта: на результат никто не жаловался. Либо всё хорошо и все молодцы, либо «всё пропало» — но тогда окажется, что и сроки были плохо рассчитаны, и бюджет никакой, и людей мало, и задание глупое, и заказчик плохой и еще 150 причин. «Хороший программист всегда объяснит, почему выданное задание сделать ну никак невозможно». Профессия программиста часто ставит человека перед выбором: думать или не думать? Баг пофиксился каким-то костылём. Думать как сделать лучше, или и так сойдет? Система вроде бы стабильно работает при 10 запросах в секунду. Думать, что будет при 100 или не думать? Сделать рефакторинг или ну его? Свой велосипед или общепризнанное решение? Заложить архитектуру с запасом — или пока и так сойдет?
На каждом шагу есть соблазн увильнуть. Слабый духом программист будет это делать. Многие люди не хотят лишний раз думать и (вот парадокс!) будут постоянно думать, как этого достичь. Есть выбор: усложнять свою жизнь, или не делать этого. Каждый решает сам.

Ограниченность возможностей ума

Есть такая шутка, что, мол, самым лучшим образом природа распределила между людьми ум, поскольку люди часто жалуются на непослушные волосы, некрасивую форму ушей или длинный нос, но никто никогда не пожалуется, что ему досталось маловато ума. Так вот, чушь это всё. Я вот лично жалуюсь, что мне как-раз ума досталось маловато. Я помню только ограниченное количество информации, из-за чего постоянно приходится что-то куда-то записывать. Я отчаянно завидую компьютерам, в которых за какую-то смешную сотню баксов можно поставить новый процессор, удвоив его скорость работы. На понимание какого-то алгоритма я трачу в тысячи, в миллионы раз больше времени, чем компьютер — на его исполнение. Я порой сталкиваюсь с невозможными задачами — и отступаю. Я иногда недооцениваю сроки выполнения задач. Да попросту откровенно торможу порой! И поэтому да, мне частенько бывает сложно именно в силу ограниченности моего ума. Завидую тем, у кого всего-лишь нос длинноват, а вот с головой всё в самый раз.

А должно ли вообще быть сложно хорошему программисту?

Много лет назад «быть хорошим программистом» означало уметь писать эффективные алгоритмы, выжать лишний процессорный такт, сэкономить десяток байтов памяти. Сегодня это не так. Все базовые алгоритмы имеют прекрасные реализации на всех возможных языках, масса разнообразных полезных вещей собрана в хороших, проверенных библиотеках. На сегодняшний день основное свойство «хорошего программиста» — уметь построить из готовых кубиков программу, минимизировав её сложность (тем самым и надежность повысится, и скорость работы, и стоимость сопровождения уменьшится). Именно уменьшение сложности сегодня является самым важным. Если вдуматься, всё, что было придумано в программной индустрии за последние пару десятилетий, служит именно этой цели. Для чего нужно ООП? Чтобы стало проще и понятней. Зачем нужен UML? Уменьшить хаос. Интерфейсы? Управляемые языки? MVC? MVVM? Всё на тот же алтарь. Получается, что умело применяя современные инструменты, программист должен писать только простой, компактный и понятный код? Получается, что хорошему программисту не должно быть сложно, ведь если ему сложно — значит он просто еще не освоил инструменты, которые сделают его работу простой и понятной? Так? А вот и нет. Применение всего вышеуказанного инструментария сделало возможным построить такие системы, которые невозможно было создать раньше. Windows 8 и iOS 6 были созданы в 2012 году не потому, что 20 лет назад не могли нарисовать их дизайн или не было подходящего железа. Всё дело в том, что те способы создания программ, те методологии управления программистами и те подходы к написанию кода просто не могли дать на выходе систему столь высокой сложности, как нынешние ОС. Люди работали на пределе сил, но в итоге сделали намного более простые системы. Сегодняшние программисты тоже работают на пределе сил. И абсолютно точно, что через 20 лет люди будут посмеиваться и над Win8 и над iOS 6, указывая на то, какими примитивными и несовершенными они были. Будем верить, что они тоже поймут, что современные программисты старались, как могли.

А вам — сложно?

Только зарегистрированные пользователи могут участвовать в опросе. Войдите, пожалуйста.

Никто ещё не голосовал. Воздержавшихся нет.

ссылка на оригинал статьи http://habrahabr.ru/post/166609/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *