?

Log in

No account? Create an account

Previous Entry | Next Entry

Расскажу немного про программистов и про нашу внутреннюю кухню.

Было принято считать, что программист - это такой аутичный патлатый перец. Сидит сгорбившись в темном углу и творит никому непонятную магию. Что греха таить, раньше так оно и было. В России образца 90-х профессиональное IT-шное поле было густо засеяно фриками. Зайдешь в прогаммистскую контору - из десяти человек двое вообще не умеют разговаривать, двое в прострации, а еще двое общаться с людьми могут, но не любят. Остальные четверо стали программистами случайно. Нынешний программист - существо социализированное. Сумрачные гении-одиночки не нужны ни бизнесу, ни коллегам.

Почему раньше программист мог позволить себе быть асоциальным, а сейчас не может? Разгадка в том, как изменились программы и сам процесс программирования. Раньше программы писались так, чтобы их понял компьютер. Ведь программа, это набор инструкция для компьютера. И программист выстраивал свое мышление так, чтобы думать как алгоритмическая машина. Разумеется, это меняет человека и не факт, что в лучшую сторону. Программист мог похвастаться: “я написал такой код, в который понимаю только я и машина”. Сейчас говорить такое стыдно. До 80 процентов усилий мы тратим на то, чтобы код был прост и понятен нашим коллегам. Сложность создаваемых продуктов возросла настолько, что иначе никак.

Сотни тысяч строк кода, поддерживаемые силой пары десятков программеров - это норма. При этом бизнес требует, чтобы продукт постоянно дорабатывался. При этом в течении года, каждый третий программист меняет работу и на проект берут новичка. И если в таких условиях писать только для компьютера, и не заботиться о коллегах, не писать понятный код, не уметь объяснить словами свой замысел и “как это работает”, очень быстро наступит полный хаос. Поэтому нынешний программист куда более социален, чем раньше.

Со стороны кажется, что программирование - занятие безэмоциональное, т.к. от компьютера эмоциями ничего не добьешься. Это правда, но лишь отчасти. Необходимости в эмоциях действительно нет, но человек эмоциональный скучать за написанием кода не будет. Рутина есть в любой профессии. Но, если ты не джуниор (новичок), то в процессе работы за неделю проходишь все классические сюжеты (за месяц точно). Тут и охота за сокровищем и осада крепости и самоубийство бога или что там еще было у Борхеса? Но чаще всего проживается не слишком обласканный в литературе жанр производственной драмы. Персонажами драмы выступают: программист, который лезет в твой код, программист, в чей код лезешь ты, протагонист (ты сам), антагонист (твой менеджер) и абстракции, которые ты сочинил сам и применил в своей программе.

Сразу хочется объяснить, откуда берется драматическая составляющая, но сначала придется рассказать об абстракциях, а то будет непонятно. Зато будете разбираться, чем мы живём.

Для людей далёких от темы, программа - это набор инструкций для компьютера. Сложи это и это, нарисуй точку на экране и тд. Нынешний программист очень мало думает об инструкциях и алгоритмах. В первую очередь программист создает абстракции. Сначала в голове и на бумаге, потом в коде. Мейнстримом в этом деле уже много лет является Платоновская философия. Платон заметил, что человеку естественно вмещать в своём уме идею о “вещах вообще”. Выходит, например, Платон во двор, к конюшням, и видит лошадь. У неё черная грива, есть подковы и зовут Незабудкой. А рядом другая, хромая, в яблоках, кличут Забиякой. Это вполне конкретные лошади. А “лошади вообще” в конюшне нет, сколько не ищи. Но в голове откуда-то есть это слово “лошадь” не обозначающее ни одну из лошадей в мире, но зато всех лошадей вместе взятых. Та самая “лошадь вообще”. Эта лошадь и её подруги, другие абстракции, живут в мире идей, идеальном платоновском мире.

Верите или нет, но у программистов есть инструменты для описания “лошадей вообще”. Когда вы видите на экране кнопку, знайте, где-то в исходных текстах программы описана “идея кнопки” или “кнопка вообще”. И есть виртуальный заводик, который пользуясь идеей “кнопки вообще” воспроизвел вот эту конкретную, которую сейчас видно на экране. Те средства, которые использую я, вообще не позволяют создать программу, если там не описана минимум одна идея.

Идея, или на нашем языке “класс” - самый низкий уровень абстракции. В приличном проекте описано несколько сотен, а то и тысяч “идей”. Это очень удобно, потому что внятную идею легко объяснить другому человеку. А, как я уже писал, до 80% усилий программиста уходит на то, чтобы сделать программу понятной не только компьютеру. Есть куча методик, как выделять и описывать идеи. Вот, в каких отношениях должны находиться идея лошади и идея всадника? Нужно ли отдельно описывать идею верховой езды? Является ли “человек вообще” расширенной идеей “всадника вообще”? Для нас это не абстрактные, а вполне конкретные жизненные вопросы, решаемые ежедневно.

В мультфильме “Каникулы в Простоквашино” машину дяди Фёдора тащат по снегу несколько героев. В качестве ездовой собаки используется не только пёс, но и кот и даже академик, папа дяди Фёдора. Он демонстрирует поведение, не свойственное идеи “академика вообще”, и от того сцена выглядит комично. Не нужно быть программистом, чтобы посмотреть на упряжку ездовых академиков и понять что здесь что-то не так. А у нормального программиста есть ещё и особое чутьё на плохие и хорошие абстракции, выделяющее куда более тонкие моменты. Ты можешь не владеть теорией, ты можешь не знать, как правильно, но если то, что ты пишешь, кажется красивым, то с 95% вероятностью ты всё делаешь как надо.

Эстетическое чувство порождает хороший код, а хорошо выполненная работа взращивает самоуважение и зарплату. Возникает соблазн стать тоньше, чувствительней к прекрасному, чтобы создавать безупречные шедевры из идей и кода. Однако, на практике, чем сильнее ты зависим от эстетики, тем сильнее ежедневная боль. Бизнес требует, чтобы запорожец дяди Фёдора вылез из снежного завала прямо сейчас и ты не успеваешь создать подходящую для этого идею трактора, а берешь то, что есть - пса, кота и академика. И слёзы катятся по щекам. И ты даешь себе обещание, что как-нибудь придешь в выходные создашь трактор. Но не выходишь, потому что семья тебя не поймёт. А ещё хуже, если это ты создал пса, кота и академика, а твой коллега взял и впряг их как бурлаков, потому что не разобрался, что это за абстракции, но счел их достаточно удобными для тяговых работ. И вот, мат и проклятия конденсируются возле потолка в грозовую тучу, бьющую молниями по каждому вошедшему. Драма! А менеджер твой вообще не видит связи между прибылью и эстетикой. Он раньше обувью торговал. Оптом.

Дело не шуточное. Постоянные эстетические травмы - основная причина профессионального выгорания. Нужно выработать четкий баланс между комфортом и эстетикой. Те, кто выбрал только комфорт - профессиональные трупы и геморрой для коллег. Те, кто поставил на чувство прекрасного - невротики.

Ну, и напоследок немного слёз по поводу тенденций.

До недавнего времени бизнес не умел взаимодействовать с программистами, а программисты - с бизнесом. Не было четких правил и создание хорошего продукта было искусством на грани интуитивных прозрений. Сейчас программирование, де факто, ремесло. У нас есть профессиональные стандарты и четкие правила хорошего тона. Больше не нужно быть волшебником. Для бизнеса это хорошо. Меньше риски, не нужно выискивать “гениев”, один программер заменяем другим.

Но, блин...

...массовое вовлечение неподготовленных людей в любую духовную практику … чревато утратой понимания ее исходного смысла. (Фейнман)

Как же упал общий уровень. Программистам хорошо платят. В результате к нам идут не по призванию, а за деньгами. Те, кто волшебником быть никогда и не хотел. Человек заканчивает вуз. Он ничего не умеет и внутренней мотивации у него нет. По закону большого города, работу он найдет, хоть это будет и дерьмовая работа, скорей всего. Отработав пару лет, он получает строчку в резюме и какой-то опыт, что повысит его шансы проскочить собеседование на нормальные деньги. А потом уволится до того, как всех задолбает и найдет новую работу. И весь, сцуко, рынок труда забит такими вот экземплярами.

Конечно, на их фоне мы, правильные пацаны, выглядим весьма выгодно, но “за державу обидно”!

Comments

( 31 comments — Leave a comment )
xarita
Nov. 5th, 2016 05:41 am (UTC)
Как ты здорово и понятно написал!
Сижу вспоминаю, а видела ли я таких программистов, как ты, в жизни?

Я подумала. И не смогла привязаться ни к полу, ни к возрасту.

Edited at 2016-11-05 08:50 am (UTC)
mozgosteb
Nov. 5th, 2016 06:14 am (UTC)
Спасибо!
Я-то вполне обычный программист для своего стажа, близкий к "среднему по больнице".
(no subject) - xarita - Nov. 5th, 2016 06:31 am (UTC) - Expand
k_medvezhonkina
Nov. 5th, 2016 06:32 am (UTC)
Ты тоже был патлатым асоциалом, а потом постригся?

И ведь, что интересно, когда-то давно я преподавала конструирование и моделирование одежды, одной из самых частоупотребляемых фраз было:
- Эта линия некрасивая, она не ляжет.
mozgosteb
Nov. 5th, 2016 06:34 am (UTC)
Патлатый я и сейчас, но уже приспособился к социуму. Общительным стал, инициативным.

>>- Эта линия некрасивая, она не ляжет.
Тоже ведь про профессиональную интуицию по сути.
xarita
Nov. 5th, 2016 06:37 am (UTC)
У тебя красивые волосы, тебе идет :) У "зловещих ботанов", не моё выражение, обычно другой вариант ;)
(no subject) - mozgosteb - Nov. 5th, 2016 06:40 am (UTC) - Expand
(no subject) - xarita - Nov. 5th, 2016 06:54 am (UTC) - Expand
(no subject) - mozgosteb - Nov. 5th, 2016 06:55 am (UTC) - Expand
(no subject) - xarita - Nov. 5th, 2016 07:07 am (UTC) - Expand
(no subject) - mozgosteb - Nov. 5th, 2016 07:47 am (UTC) - Expand
(no subject) - xarita - Nov. 5th, 2016 07:54 am (UTC) - Expand
(no subject) - gnawer - Nov. 6th, 2016 08:22 am (UTC) - Expand
(no subject) - mozgosteb - Nov. 6th, 2016 08:52 am (UTC) - Expand
(no subject) - gnawer - Nov. 6th, 2016 09:50 am (UTC) - Expand
(no subject) - mozgosteb - Nov. 6th, 2016 09:52 am (UTC) - Expand
k_medvezhonkina
Nov. 5th, 2016 07:07 am (UTC)
Больно было? ;)
(no subject) - mozgosteb - Nov. 5th, 2016 07:42 am (UTC) - Expand
mozgosteb
Nov. 5th, 2016 07:02 am (UTC)
Первый пост за 6 лет, где пишу о том, в чем на самом деле разбираюсь и не приходится оправдываться "я, на самом деле, не настоящий сварщик" =)
k_medvezhonkina
Nov. 5th, 2016 10:01 am (UTC)
А ты настоящий программист? ;)
(no subject) - mozgosteb - Nov. 5th, 2016 02:46 pm (UTC) - Expand
nyakator
Nov. 5th, 2016 01:38 pm (UTC)
Это же про меня, я пришел забрать ваши деньги насрать в код. xD
mozgosteb
Nov. 5th, 2016 02:47 pm (UTC)
Что ж. Добро пожаловать! -)
gnawer
Nov. 6th, 2016 08:12 am (UTC)
Из моего опыта, мы не выглядим выгодно.

Выгодно выглядит такой человек, у которого менеджерский менталитет, и он учился поворачивать бинарные деревья, со специализацией по прохождению собеседований. Потом он на работе начинает рассуждать про новые технологии которые заебись, вкорячивает одну такую быстренько в проект (что ставит проект раком на год), а затем переходит на более выгодную работу.

Люди которые не выябываются а тупо делают чтобы было надёжно и работало, как были не в почёте, так и всегда будут. Потому что ведь работает само, зачем тогда человеку платить?

Можно иначе сказать: рассмотреть грамотного инженера может только другой инженер и за период времени начиная от месяца, но с другой стороны для убедительной имитации грамотности нужны абсолютно другие навыки, которые позволяют добиться значительно большего успеха значительно быстрее. Вот эти люди которых ты описал (не все, а те которые реально имеют таланты) видят этот тренд и затачиваются соответственно ему.

Edited at 2016-11-06 11:19 am (UTC)
mozgosteb
Nov. 6th, 2016 08:49 am (UTC)
Да, есть и такие экземпляры. И это еще один повод прокачивать социальные навыки, чтобы выявлять эти чертей и переигрывать.

А недобросовестных товарищей рано или поздно раздавит каток технологий, за которым они не успели в виду отсутствия мотивации. И тогда единственным путем для низ будет идти в руководители.
gutnikov_yira
Nov. 6th, 2016 05:08 pm (UTC)
>для убедительной имитации грамотности нужны абсолютно другие навыки, которые позволяют добиться значительно большего успеха значительно быстрее.
О, вот хорошо сформулировано то, о чём я сейчас думаю.
Имхо, для хорошей карьеры важна золотая середина между реальной компетенцией и способностью её изображать. Чистый эксперт своего дела, сидящий в углу аутистом, конечно, так всю жизнь и просидит, даже если на деле всё будет держаться на нём и его знаниях. Но другая крайность тоже не приведёт к удаче, будь ты хоть супер-социализрованным актёром-имитатором, рано или поздно возникнет ситуация, когда спрос будет именно с тебя и твоей реальной грамотности. Во всяком случае, так в моей профессии.
gnawer
Nov. 6th, 2016 06:50 pm (UTC)
Тема ещё в том, что если ты директор, ты не хочешь, чтобы у тебя сидел в углу единственный специалист сверхвысокого уровня, на котором всё держится. Потому что этот специалист может в какой-то момент а) неожиданно свалить, либо б) потребовать неразумно много денег, которые ему тогда придётся дать. С другой стороны, если у тебя есть посредственный инженер, с которым другим сотрудникам легко общаться, то это в большинстве случаев адекватный задаче инструмент.
(no subject) - mozgosteb - Nov. 7th, 2016 01:54 am (UTC) - Expand
mozgosteb
Nov. 7th, 2016 01:48 am (UTC)
Я считаю, что тут не нужна никакая золотая середина. Просто, если ты хороший специалист, не надо чураться это демонстрировать. Если я что-то сделал общественно полезное - я пишу письмо на всю команду, где описываю что сделано и как с этим жить. Если я что-то придумал, как можно что-то улучшить в проекте, обязательно об этом расскажу в столовой. От этого пиара я не трачу свой ресурс специалиста и ничем не жертвую. В общем-то и наоборот тоже. Если я чего-то не знаю или не понимаю - я говорю: "Я не понимаю, как это. Научи." И получаю очень полезную информацию, которую не получил бы, если бы молчал с умным видом.
(no subject) - gutnikov_yira - Nov. 7th, 2016 06:27 am (UTC) - Expand
(no subject) - mozgosteb - Nov. 7th, 2016 06:37 am (UTC) - Expand
( 31 comments — Leave a comment )