Как стать автором
Обновить

Комментарии 85

А я знал. :) Слишком умно пытаются решать повседневные задачи, ищут кошку в темной комнате, видят проблемы там, где они никому не помешают. Ну и из личного опыта, общаться с такими людьми чаще сложнее.

Надеюсь никого не обидел, просто мнение сквозь призму своего опыта.
Сейчас вас набежит, заминусует толпа «олимпиадников», как и автора поста ;)
Олимпиадников одной-ногой-уже-в-гугле…
Вообще не удивительно. Ведь олимпиады не имеют ничего общего с повседневностью.
Еще бы услышать авторитетный ответ на вопрос: нужна ли [высшая] математика программисту?
Как человек, закончивший с отличием математический факультет и работающий 10 лет программистом, устал доказывать, что высшая математика обычному программисту не нужна.
А я вот работаю в трейдинговой конторе (программистом), математика — очень часто бывает нужна, в частности мат-статистика ;)
если бы вы работали в химпроме, вам нужна была бы химия.
Кто нибудь может пояснить, за что человека минусанули?
А как же старые добрые матрицы?
Смените работу.
Что такое «обычный» программист? Который формочки в Дельфи(или кто там сейчас мейнстрим в формошлепстве) штампует или активити в андроиде? Таки да, такому прогеру математика не нужна.
Любая более менее серьезная задача требует как минимум умения ориентироваться в вышке.
>Что такое «обычный» программист?

А что такое более-менее серьезная задача?
Которую может решить менее 50% профессионалов в индустрии, даже если им дать время на обучение и эксперименты.
Такая задача совершенно не обязательно подразумевает знание высшей математики.
Нет, но в большинстве случаев оно упирается именно в математику. С остальными вещами людям, чаще всего, проще разобраться. А если это не математика, а, например, лингвистика, то там внутрях всё равно математика.
>А если это не математика, а, например, лингвистика, то там внутрях всё равно математика.

Нет, ну тогда можно просто сказать, что любая задача так или иначе сводится к математике, ибо компьютер только ее нативно и понимает)
Нет, часть проблем сводится не к «решению проблем», а к соблюдению определённых ритуалов и традиций (условно говоря — правильное форматирование кода, использование правильных мест размещения файлов, пакетирование, тесты и т.д.), что вместе называется software engineering.
Если хорошему специалисту дать время на обучение и эксперименты, то он с одинаковым успехом поднимит свои навыки в любом направление, в том числе и в разных математических категориях.
Удивительно, но нет. Сужу по себе — времени на обучение не жалею, но вся серьёзная математика для меня — просто бессмысленный набор звуков. Слишком оторванно от реальности.
Извиняюсь за занудство, но, эта ветка комментариев отошла от комментария, повествующего о некой серьезной задаче. Я так понимаю, что предполагаема задача реальная и не оторвана от реальности. Следовательно и весь объем знаний, необходимый для ее ришения тоже не будет оторван от реальности.
Хороший пример B-дерево. Достаточно скучаная тема, но становиться интересной и понятной в контексте изучения области приминения, на пример того, как работают индексы в MySQL.
B-tree — это очень плотно и реально. А вот какой-нибудь гомоморфизм самоотображающихся совершенных матриц на кольце альфа-функторов — вот тут вот ой.
Всё таки, нельзя однозначного говорить, нужна математика программисту или нет, есть достаточно много сфер в программировании, где без неё никак, а есть и сферы, где можно обойтись если не полностью без высшей математики, то хотя бы некоторым минимумом. Это же касается и дискретной математики.
Чаще мы просто можем не замечать, что качество кода зависит от тех факторов, про которые как нам кажется, мы уже давно забыли.
Лично мне очень пригодились линейная алгебра (это вообще всплывает на каждом шагу), теория вероятностей, матстатистика, численные методы (более узкоспециализированно). Сдается мне что в другой компании легко могли бы пригодиться так же теория чисел, комплексный анализ и высшая алгебра.
Так что есть масса интереснейших проектов где высшая математика чрезвычайно востребована (и, добавлю, хорошо оплачивается)

Буквально полгода назад у нас в команде (а мы делаем медицинские 3D-сканеры) например пришедший к нам очень сильный математик (и довольно слабый программист) помог свежим подходом из математического анализа и алгебр Ли решить несколько очень серьезных задач, значительно улучшив качество софта. Причем не то чтобы эти задачи ранее не решались вообще. Просто он предложил намного лучшее решение.
Это проекты… ваша задача разрешилась именно на прикладном уровне а не на уровне программирования. Проект — комплексная вещь, состоит из прикладной части и чистого программирования. Вы получили в команду хорошего прикладника и проект продвинулся именно благодаря прикладной его части.
В конторах с которыми мне доводилось работать не было разделения на программистов и прикладников. Разве что UI мог рисовать отдельный дизайнер. В остальном придумывание того ЧТО кодить чтобы решить поставленную задачу было частью работы программиста. В моем понимании эта часть работы является одним из отличий software engineer-а от индусского кодера.
+1

Это раздление устарело лет 40 назад. В моей компании такого разделения вообще нет, и даже UI инженеры не обязательно работают только и исключительно над UI (хотя у всех, понятное дело, есть свои предпочтения и сферы интересов). Инженер он на то и инженер чтобы понимать задачу и решать ее наиболее эффективным способом.

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

Я себя считаю заурядным, хоть и учился по индивидуальному плану в политехе.

Но в жизни пришлось и заниматся и разработкой нового алгоритма компрессии и прочие алгоритмы упаковки карт, и многое другое, так что пришлось таки SC окончить в Принстоне. Хвала Всевышнему есть crousera.org/.
Да вот в этом и беда, что заурядные программеры лезут алгоритмы сжатия разрабатывать! А потом, дико гордясь своим «произведением», вдруг налетают на реального спеца в этой области и быстро приземляются. «Ой, а что это за энтропия такая?… „
Встречаются как-то два проктолога. И один другому говорит:
— Тут коллеги недавно обсуждали вопрос: нужно ли врачу обладать навыками хирурга? Ну там людей уметь резать, операции всякие проводить. Что думаешь по этому поводу?
— Резать живых людей? Да разве ж это медицина? Я уже 10 лет работаю врачом и еще ни одной операции не провел. Медицина — это когда ковыряешься в заднице. А не то баловство, которым они там занимаются.
— Вот и я так думаю.
Слова «высшая математика» как бы заставляют нас усомниться, что вы заканчивали именно математический факультет.
Да собственно и не нужна. Применение математики в программировании — это сугубо прикладная область.
Если задуматься на секунду, на каком этапе в программировании применяется математика? На уровне тех.задания! После того как техническое задание составлено, то уже никакой математики — начинается программирование.
И еще один момент. Чистых программистов не бывает, как правило тот кого называют программистом совмещает прикладника и программиста. Так вот той части которая касается программиста математика ненужна!
Я вот тоже долгое время придерживался этого мнения.

А потом неожиданно обнаружил, что программисту нужно образование, которое прививает культуру структурирования и развивает абстрактное мышление. В принципе, этому можно научиться самостоятельно, но, вообще говоря, высшее математическое образование с этим справляется лучше всего. В частности, часто оказывается, что троечник с математического/физического/другого технического факультета лучше воспринимает концепты и пишет более чистый код, чем очень-талантливый-парень-но-совсем-без-вышки.

Бывают и исключения, но не так часто.
Что такое «обычный программист»?
PS: Я ыот тоже думал, что не нужна, теперь приходится проходить все самостоятельно :) Особенно статистику :)
Так это ведь прикладная часть, к программированию как таковому отношения не имеет.
А что вы при этом создали?

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

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

Как кодеры — ну просто божьи одуванчики. Как сисадмины — ну просто плакать хочется. С другой стороны, большую часть вещей, которые они решают, я даже понять не могу, ибо статистика под самое немогу.

Надо различать области, в которых работает человек.
> толпа «олимпиадников»

откуда бы ей тут взяться))
Отсюда: codeforces.ru
В треде уже встречались ники этих людей.
оттуда
Ну этот пост просто обречён быть заминусованным.

codeforces.ru/blog/entry/17301#comments
Да, но пост-то заплюсовали. :-) Т.к. аудитория там более чем адекватная.
не так уж много олимпиадников, сэр)
Ну на самом деле в карму я словил штуки 3 минуса. Впрочем это geektimes, тут всегда найдется кто-то недовольный кто поставит минус в карму за то, что кто-то напишет горькую правду.
Всегда считал умение программировать это, как умение рисовать. Умея рисовать можно выполнять разные задачи — писать картины и строить чертежи, делать наброски схем или строить блок-схемы алгоритмов. С программированием те же дела — можно решать узкоспециализированную задачу как олимпиадник, можно делать продукт как разработчик в команде. Разные задачи — разные условия и цели. Например — олимпиадникам не поддерживать свой код, он должен быть быстрый, а не кристально ясный. Говорят, что код научных сотрудников жутко выглядит, но ПО для них не самоцель.
Говорю как олимпиадник, а потом разработчик.
Есть мнение, что научить олимпиадника писать хороший код, делать продукт, поддерживать сильно легче, чем не-олимпиадника научить качественно решать сложные алгоритмические задачи.
Есть мнение, что для того чтобы научить человека побеждать на олимпиадах, а потом уже писать хороший код надо потратить больше усилий, чем просто научить писать код.
Без сомнения, Михаэль Шумахер (дай бог ему выздоровления) отлично справится если его посадить на место таксиста. Но я что-то не вижу большого желания таксопарков нанимать себе пилотов Формулы-1.
Если и есть подобные примеры — то явно в рекламных целях.
Нет большого желания у пилотов Формулы-1 идти работать в таксопарки. И правильно, зачем оно им?
А научить писать хороший код гораздо сложнее, чем научить писать код, тут даже олимпиадный background приплетать ни к чему.
Олимпиадник быстрее придумает, как решить конкретную небольшую прикладную задачу, а умение сделать крупный проект — оно только с опытом приходит, такому не учат, и уже не важно, олимпиадник ты или нет.

Странное исследование, смысл его совершенно непонятен. Напоминает «потребление мороженого положительно коррелирует с количеством утонувших».
Тест АйКью показывает умение человека решать тест АйКью. Есть огромная пропасть между умением написать милый алгоритм и создать архитектуру приложения который можно поддерживать и масштабировать. Осложняет задачу еще и тот факт, что программист должен в уме написать код, который когда нибудь может быть и будет написать, скомпилировать, оценить его эффективность и удобность работы с ним. Олимпиада и работа это как спорт и армия.
Скорее тест на айкью нужно воспринимать как тест на наличие умственной отсталости.
А что тогда на счёт армейского спорта?
Спортсмен делает сколько может, солдат сколько надо.
Всё вроде было понятно, но в конце запнулся — при чём тут армия?
У вас отношение такое, если я верно понял:

олимпиада : работа
спорт : армия

По каким же параметрам армия аналогично относится к спорту, как работа — к олимпиаде?
В армии, как и в работе, нужно выполнять цели и следить, что-бы по мере выполнения вы по своим не палили и работу работали, причем часто за пределами ваших возможностей. В спорте важна только цель. К тоже же у всех там одинаковые условия. Начали в одно время, у всех одинаковые машины, язык, задачи. Так не бывает в реальной жизни.
а, ясно
у меня немного иные ассоциации с армией, видимо :)
«Олимпиадник» — впечатляюще ацтойное слово. Что значит, олимпиадник? Тот, кто в школе / университете занимался спортивным программированием на разных соревнованиях-олипиадах? Вот я сейчас учусь в 10 классе, хожу на киевские по программированию с класса седьмого-восьмого и честно признаться, не хочу, чтобы меня называли «олимпиадником», это даже звучит, как ругательство какое-то.

Реальность такова, что в проекте у тебя 90% бизнес-логики, прочей рутины и ровно 5-10% алгоритмов. Где-то надо эффективно сделать выборку, где-то надо найти максимальный поток в графе (пишем Форда-Фалкерсона). А подавляющая часть кода: тупые вьюхи и UX (в случае с пользовательскими приложениями). Есть куда более актуальные проблемы: например, работа с базами данных. У меня много знакомых программистов, уже выпускников (sic!) киевских университетов, которые просто не включают мозг при работе с БД.

Software Engineer не должен быть переученым олимпиадником и не должен быть code monkey, который не слышал о MapReduce. Инженер должен правильно решать поставленные перед ним технические задачи, по возможности, максимально эффективным образом. Спортивное программирование, же, в свою очередь, это хобби. Реального применения у него попросту нет, ведь необходимый набор из пятидесяти с копейками алгоритмов можно освоить не решая задачки с топкодера.
В разных компаниях сильно различаются доли того чем занимается разработчик. Особенно если смотреть на Гугл по которому изначальное исследование.
Какое бы это не было пользовательское приложение, бизнес-логики в нем всегда будет намного-намного больше алгоритмической части, что называется, under the hood. Даже если смотреть на Google, где огромная BigData (как я люблю этот термин) и агрессивный хайлоад.
А если это чисто прикладное приложение для обработки данных с БАК, где доля алгоритмов может превышать 90%…
Прикладные приложения — это уже совсем отдельная тема. Тем более, в контексте БАК. Там работают высококлассные специалисты одновременно по физике, информатики и куче других дисциплин. Исследования, все дела.
Не все занимаются пользовательскими приложениями) Но просто не все либо бизнес-лапша, либо алгоритмика.
Говорят, что код научных сотрудников жутко выглядит, но ПО для них не самоцель.

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

Умение разбираться в коде, которому 5-10 лет — часто самый востребованный навык в больших проектах.
"Средний программист пишет в день всего 11 строк, которые идут в релиз" (ц) Мифический человеко-месяц.
Вот поэтому корреляция и отрицательная.
Так вот откуда борода у программистов появляется :)
НЛО прилетело и опубликовало эту надпись здесь
Они не знают, их оценивал ИИ.
НЛО прилетело и опубликовало эту надпись здесь
Пожалуй, добавлю в резюме, что ни разу не побеждал на олимпиаде :)
Что такое «успехи в работе»? Карьерное продвижение?
Возможно, у олимпиадников нет манагерских навыков и навыков политической борьбы.
А код они пишут хорошо любой, хоть олимпиадный, хоть энтерпрайзный.
Вы так говорите исходя из того, что у вас опыт работы с олимпиадниками, или потому что статья зацепила?
Набросать работающий код за несколько часов не парясь о его поддержке — это одно.
Разбираться в энтерпрайзе, legacy-коде, ловить баги — это совершенно другое.
Я так говорю, потому что в статье нет критериев «успеха в работе». Может то, что автору кажется неуспехом, на самом деле не так и плохо.
А причем тут манагерские способности? Основным критерием в карьерном росте является умение и желание брать бОльшую ответственность. А манагерские способность разовьются постепенно при необходимости, если человек конечно сам в состоянии такой груз принять.
Дата-майнинг позволил определить, какие факторы коррелируют с успешной работой сотрудника.

Так какие же факторы коррелируют с успешной работой?
Я думаю, частота моргания и любимый сорт чая. Должны коррелировать. Может, ещё цвет носков, кто знает…
Если вы хотите построить успешную карьеру в сфере разработки ПО, ни в коем случае не увлекайтесь спортивным программированием и участием в конкурсах.
Питер Норвиг сказал противоположное, «it doesn't mean you guys should stop doing the contests». Корреляция — это не обязательно влияние первого фактора на второй; вполне возможно, что олимпиады позволяют раскрыть потенциал тех, у кого изначально слабые способности к аккуратной вдумчивой работе.
НЛО прилетело и опубликовало эту надпись здесь
НЛО прилетело и опубликовало эту надпись здесь
А может всё немного по-другому? Завышенная самооценка из-за побед на конкурсах по программированию снижает мотивацию к усердной работе?
В некоторых случаях определенно да — наблюдал среди друзей, но все же от самого человека многое зависит, от его характера, от эго.
Ага, отрицательно. Чего же тогда Google просто мощным пылесосом собирает всех толковых олимпиадников прям со студенческой скамьи, а бывает что и раньше? Кроме того, проводит одно из самых крупных подобных мероприятий на протяжении уже десяти лет (и довольно агрессивно хайрит на нем).

Отрицательная корреляция, вероятно, получается из-за того выборку составляют именно сотрудники Google. И выводы Норвига могут быть верны только для этой группы. Автор топика популистски пытается сдвинуть акцент на программирование вообще, что в корне неверная интерполяция.

Кроме того:

  • Есть мнение, что кандидат-неолимпиадник, который решит их задачи на структуры данных, эффективную обработку и алгоритмы правда талантливее кандидата-олимпиадника, если тот покажет схожий результат. Ведь в самом деле, второй на протяжении нескольких лет тренируется решать задачки именно на алгоритмы, а в работе требуется более широкий скиллсет.
  • Есть мнение, что часто Google нанимает overskilled сотрудников для того объема в том числе рутинной работы, что есть в компании. Вероятно, победители контестов правда к ней меньше склонны.
  • Возможны спецэффекты вида, что массово олимпиадники появились в большей степени не так давно и многие из них еще молоды и не полностью раскрыли свой потенциал. Вероятно, средний сотрудник неолимпиадник старше и чаще занимает позицию повыше (middle vs junior).


Да и вообще, это мнение далеко не разделяется всюду в компании:

  • Александр Мангилёв:
    Я техникал лид команды отвечающей за кластеризацию бизнесов в Гугле. Учился программировать исключительно учавствуя в олимпиадах (и ни чем кроме олимпиад не занимаясь). Благодаря навыкам полученным в олимпиадах я заметно лучше большинства моих коллег умею придумыать различные эвристики (что очень полезно на практике!). И пишу принципиально более эффективный (и мне кажется, что и более понятный тоже) код если требуются нетривиальные алгоритмы. Мечтаю о красном кодере в команде… Под зарез нужен человек, которому можно просто сказать: «Придумай как это сделать классно» — и что бы он был способен сам придумать классное решение и потом его закодить вообще без моего вмешательства. Полный текст.
  • Павел Наливайко:
    I work for a Search Quality team at Google. We absolutely love hiring winners from programming competitions. Whether they will develop into a high performing engineers or not depends entirely on them, but they definitely posses the raw talents and skills to become one [...] But there aren't too many places where you can get a very relevant background to work in Search Quality anyway. As a team lead, I'd be happy to hire a less experienced contest winner, teach him and help to develop into a star performer. And there are many successful examples (some of them were mentioned in this thread couple of times already ;) Полный текст.
  • Bartholomew «Ruberik» Furrow:
    The conclusion this article offers is drawn from a badly flawed study from over a decade ago, which Google decided neither to publish nor to use the conclusions from. Полный текст.



И выводы Норвига могут быть верны только для этой группы.
Норвиг — один из ведущих и достаточно известных людей в ML и AI (не считая разные закрытые исследования). Это так, к слову. Я не утверждаю что его выводы непогрешмы и священны, но упрекать его в подобных детских ошибках без приведения контраргументов (с циферками и тестами, а не в стиле «он не прав») все же считаю несколько опрометчивым.
Если послшуать Норвига, то он сам и утверждает, что оно только про специфичные условия Гугла в плане сотрудников.
Есть еще один немаловажный фактор — по своему опыту контакта с собеседованиями и олимпиадному прошлому у олимпиадника выше шансы пройти собеседования. И не потому что он обманывает систему и показывает знания которым не обладает, а потому что он лучше приспособлен к решению алгоритмических задач в ограниченных условиях с бонусным стрессом.
Олимпиадки можно сравнить с забегами на сто метров, в то время как промышленная разработка это нечто больше похожее на 42-километровый марафон. Который к тому же бегаешь каждый день, а не раз в 4 года.
Это не значит, что бегать стометровки не круто — отнюдь, это очень увлекательно и эффектно. Дали задачу, напрягся, через пару часов уже свободен, ставишь кубок на стенку. «Девки текут, парни боятся» (хотя скорее наоборот).
Но вот в реальной жизни кубков не дают, задачи однообразны, проекты жуются годами, переменные надо называть из 4-5 существительных, комментариев писать столько, что хватило бы на небольшой роман, а еще митинги, код ревью, appraisal-ы, ну и прочие радости карьеры. И нет никакой гарантии, что олимпиадник будет увлечен подобной работой и будет делать ее хорошо, ему же надо решать ИНТЕРЕСНЫЕ ЗАДАЧИ, но при этом не вляпываясь в рутину. Некоторые так к 25 годам меняют по 5-10 компаний в поисках ЗАДАЧ, а их, бедолаг, везде заставляют CRUD-ы пилить.
С другой стороны, если человек победил в значимой олимпиадке, то значит как минимум последние полгода он к ней усиленно готовился. Чаще — намного дольше, победители АСМ-ов обычно олимпиадят со старших классов. То есть пока кто-то имел время учиться тем же дженерикам, коллекциям, базам данным и фреймворкам, они учились считать количество монеток и площади фигур, совмещая выученные алгоритмы и школьные познания циклов, строк и массивов. Нет, в этом нет ничего позорного, ибо какой может быть программист без знания алгоритмов, это же фундамент. Но на на фундамент еще что-то и достраивать надо, а вот это олимпиадникам зачастую неинтересно, так как они уже испорчены тем, что любая задача решается за 2 часа.
Я бы скорее взял человека, который в олимпиадках не участвовал, алгоритмы знает на уровне необходимого минимума, но, например, имеет хотя бы два своих законченных проекта — пусть это даже будут приложения для смартфонов или те же CRUD-ы. Неважно, сколько тысяч там строк кода, неважно сколько людей этим пользуется — куда важнее, что он закончил что-то большое и не сдался, что он способен бегать на длинные дистанции и не выдыхаться на первом километре.
НЛО прилетело и опубликовало эту надпись здесь
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории