Профессия программиста становится все более массовой и востребованной. Сейчас порог вхождения в ИТ-сферу в принципе снизился, но продолжает расти интерес к ИТ-технологиям в целом, и к программированию в частности.
Среди ИТ-компаний и программистов, тем не менее, растет конкуренция. Однако стоит отметить, что, по крайней мере, на рынке труда она достаточно честная. Например, принимая на работу программиста работодатель в первую очередь будет оценивать уровень реальных знаний и навыков, а не цвет диплома. Впрочем, эта ситуация способствует распространению «программистов-самоучек», которые ограничены узкой специализацией. Для них нередко оказывается справедливо выражение «шаг вправо, шаг влево – расстрел». Так что, сейчас недостаточно сказать: этот человек – «ИТшник», или даже программист. Программист программисту рознь.
Специализации программистов множатся и развиваются, программист, специализирующийся в одной области приложений, не всегда может понять своего коллегу, работающего в другой области. Хотя вроде бы и языки программирования, и технологии одни и те же. Области приложений могут кардинально отличаться друг от друга, и для того, чтобы писать специализированные программы, мало знать языки и технологии программирования, нужно хорошо разбираться в той области, для которой разрабатывается программный продукт. В последнее время все чаще при изучении предметной области возникает необходимость в математической формализации.
Я учился в ВУЗе, в котором раньше, лет 30-40 назад, не существовало специальности «Инженер-программист». Однако люди, занимающиеся программированием, там были – их называли «ПМщики». Дело в том, что учились они на кафедре Прикладной математики. Но справедливо было бы все-таки называть их математиками, нежели программистами.
Шли годы, и со временем кафедра стала курировать новую специальность – «Программное обеспечение вычислительной техники и автоматизированных систем». Математики в учебной программе стало гораздо меньше, а преподаватели начали сетовать, что у выпускников школ большие проблемы с математикой. То есть, зачисляясь на первый курс, многие студенты уже имеют достаточно слабую математическую базу, а так как времени на этот предмет теперь меньше в учебном плане, то надежды на улучшение ситуации мало.
Конечно, можно еще вспомнить, что раньше была и трава зеленее, и небо голубее… Но где же программистам прокачивать матчасть в сегодняшних условиях? Означает ли это, что теперь на «серьезные» позиции разработчиков будут охотнее брать математиков, а не программистов?
Новые реалии
Уже на последних курсах университета студенты часто узнают, что появились новые технологии, которые в ВУЗе не изучались: их просто не успели включить в учебную программу. Однако благодаря фундаментальному образованию, заложенным основам будущие специалисты могут легко изучить эти технологии самостоятельно. Но тут и встает вопрос о качестве этого образования. Всего ли там достаточно для сегодняшних требований рынка труда?
В последнее время новые технологии стали более наукоемкими – точнее, математикоемкими. Во многих областях человеческой деятельности стало активнее применяться математическое моделирование различных процессов, пишут в своем послании абитуриентам представители Новосибирского государственного технического университета.
Физическая реализация экспериментов, экспериментальная проверка выдвинутых гипотез являются очень дорогостоящими, как правило, требуют значительных человеческих и материальных ресурсов. А имитация экспериментов на математических моделях, выявление закономерностей в ходе многократного моделирования оказывается на порядки дешевле.
На основе математических моделей разрабатывается соответствующее программное обеспечение, реализующее математическую модель объекта и математические методы, позволяющие найти оптимальное решение. И если мы заменяем физический эксперимент математическим, то должны быть уверены, что их результаты совпадают. «И как тут специалисту по IT-технологиям обойтись без глубоких математических знаний и вычислительных методов?», задают вопрос они.
До начала 90-х годов, неспешно развивалась так называемая прикладная статистика. Но развивалась она больше в теоретическом плане, чем в практическом.
А «в один прекрасный» день настала необходимость адаптировать ее к практике. В связи с совершенствованием технологий записи и хранения данных на людей обрушились колоссальные потоки информации в самых различных областях. Деятельность любого предприятия (коммерческого, производственного, медицинского, научного и тд) теперь сопровождается регистрацией и записью всех подробностей его деятельности.
Стало ясно, что без продуктивной переработки потоки данных образуют никому не нужную свалку. Выявление в накопленной информации скрытых закономерностей является задачей интеллектуального анализа данных (Data Mining) – составной части процесса принятия решений. Если смотреть глубже, то в основе интеллектуального анализа данных лежит широкий спектр методов теории вероятностей и математической статистики.
Знания математики нужны большинству программистов, вот только какие именно разделы нужны для разработки того или иного вида ПО? Что нужно знать для того чтобы, программировать игры, искусственный интеллект, big data, научный софт и так далее?
Иван Хватов, разработчик ПО, «Яндекс»:
Насколько нужна программисту математика? Опишите, пожалуйста, свою историю отношений с матчастью.
В целом, нужна. В каких-то областях — больше, в каких-то — меньше. После университета в теорию погружался только если была необходимость по задачам.
В каких направлениях разработки необходима матчасть? Почему? Какие разделы математики там нужны?
Направлений много. Всего не перечислишь. Если, например, говорить про текущий хайп, то необходимо хорошо знать статистику. Базовый уровень, который надо знать везде: университетский курс математической логики, теории вероятности, статистики и дискретной математики.
Можете посоветовать, как подтянуть математический аппарат программистам, давно закончившим ВУЗ? Могут ли здесь быть какие-то сложности?
Проходить онлайн-курсы. Сейчас с этим нет проблем.
Чем отличается математическое мышление от программистского (алгоритмического)?
Не знаю, я бы это не разделял.
Какие специалисты лучше подходят для математикоемкой разработки: математики с азами программирования или программисты с азами математики?
Антон Каракулов, веб-разработчик, ТМ
Насколько нужна программисту математика? Опишите, пожалуйста, свою историю отношений с матчастью.
Всё зависит от того какие задачи предстоит решать программисту. Чем больше прикладных — тем реже нужна матчасть. Чем более системных — тем чаще оказывается востребованной.
К сожалению мои какие-либо внятные отношения с ней закончились на 2 курсе института. В тот момент ещё верилось, что она будет мне полезна и нужна, но в силу обстоятельств отвлёкся на другие знания, и потом уже было очень сложно вернуться к абстрактному изучению.
В каких направлениях разработки необходима матчасть? Почему? Какие разделы математики там нужны?
Как сказал уже выше, чем больше системных задач решается программистом, чем больше нужно знание матчасти. В названии мат. дисциплин всегда путался что к чему, поэтому тут что-то сказать уверено не могу.
Можете посоветовать, как подтянуть математический аппарат программистам, давно закончившим ВУЗ? Могут ли здесь быть какие-то сложности?
От тру-программиста слышал мнение что на coursera хорошие курсы на любой вкус. Можно начать с базовых, а дальше уже выбирать по интересам и необходимостям.
Чем отличается математическое мышление от программистского (алгоритмического)?
Математик определяет понятия (отвечает на вопрос «Что»), а программист транслирует их в машинный язык (отвечает на вопрос «Как»).
Какие специалисты лучше подходят для математикоемкой разработки: математики с азами программирования или программисты с азами математики?
В общем среднем по больнице — конечно, программисты с азами математики.
Артем Кухаренко, основатель NTechLab:
Насколько нужна программисту математика?
Если здесь имеется ввиду знание математики, то, на мой взгляд, оно обязательно далеко не во всех областях программирования, но лишним оно, конечно, тоже не будет. Я бы сказал, что в разных областях оно даст свой прирост к квалификации: в каких-то – 10%, в каких-то – 1000%.
Если имеется ввиду знание теории и основ области в которой человек работает, то, на мой взгляд, это must have для любого эксперта в своей области.
Опишите, пожалуйста, свою историю отношений с матчастью.
Учился в математическом классе одной из лучших матшкол Москвы — Гимназия №1543, потом учился на ВМК МГУ, где тоже была математика, не такая серьезная, конечно, как на МЕХМАТе МГУ например, но на достаточном уровне, чтобы можно было разбираться и понимать, например, современные алгоритмы машинного обучения. Плюс участвовал в школьных олимпиадах по программированию, где нужно было изучать теорию алгоритмов, что в дальнейшем мне очень сильно помогло.
В каких направлениях разработки необходима матчасть? Почему? Какие разделы математики там нужны?
Точно могу сказать, что математическая и алгоритмическая подготовка нужна в областях, связанных с машинным обучением, нейронными сетями, искусственным интеллектом. Мы активно пользуемся знаниями из следующих разделов: математический анализ, линейная алгебра, теория вероятности, линейное программирование и решение оптимизационных задач, алгоритмы, высокопроизводительные вычисления.
Можете посоветовать, как подтянуть математический аппарат программистам, давно закончившим ВУЗ? Какие курсы лучше посещать?
Сейчас появилось много открытых курсов, таких как Coursera, но в них обычно материал дается очень поверхностно, чтобы охватить как можно более широкую аудиторию. Есть, конечно, и исключения, но их мало. Есть несколько ресурсов, где материал дается на очень хорошем уровне, например, Stanford engineering everywhere: там просто записи лекций, которые читаются в Стэнфорде. На мой взгляд, их очень полезно смотреть если есть базовая подготовка.
Но нужно понимать, что получение хороших знаний в любой области – это достаточно долгий процесс и с нуля быстро (за несколько месяцев) получить хорошую математическую (как и любую другую) подготовку не получится. Если все-таки есть цель заняться этим серьезно, то, на мой взгляд, для этого лучше подойдет либо магистратура, либо второе высшее образование в математическом вузе.
Какие специалисты лучше подходят для математикоемкой разработки: математики с азами программирования или программисты с азами математики?
У нас в компании разработка и исследования разделены. Для разработки больше подходят программисты с азами математики, для исследований — математики с азами программирования. Но в обоих командах очень часто встречаются люди, у которых одновременно очень высокий уровень знаний и математики и программирования.
Пользователь Mrrl, рассуждая о разделах математики, необходимых программистам, писал следующее:
1) Математический анализ — без него просто никуда, основа всех численных моделей.
2) Алгебра (высшая) — применяется довольно редко. Либо в виде теории групп — когда нужно что-нибудь сделать с группами вращений или движений пространства, либо в виде конечных групп/полей, где она смыкается с теорией чисел. Но если уж пришлось туда забрести, то приходится использовать активно. Если и не в коде, то в разработке алгоритмов.
3) Аналитическая геометрия — думаю, она нужна любому, кто связан с компьютерной графикой, компьютерной геометрией, моделированием в 3D…
4) Линейная алгебра и геометрия — аналогично аналитической геометрии. Плюс матрицы вылезают во многих задачах обработки информации.
5) Дискретная математика — графы сюда входят? А булева алгебра? А конечные автоматы? Для разработки алгоритмов будет использоваться часто, пусть и в фоновом режиме.
6) Математическая логика — разве что на уровне понимания логических операций и кванторов. Чтобы доказать правильность программ, и реже — чтобы их спроектировать исходя из «дано» и «получить». Может помочь, когда условия задачи слишком формальны и упорно не хотят восприниматься мозгом.
7) Дифференциальные уравнения — если они не являются частью предметной области, то встречаются редко. Чаще в качестве такого же вспомогательного инструмента, как производящие функции. Или для анализа данных, оптимизационных алгоритмов…
8) Дифференциальная геометрия. — Бывает. Когда приходится работать с многопараметрической моделью, полезно представлять себе свойства пространства параметров. Чаще всего это ограничивается метрикой — даже геодезические считать не приходится. Ну, и есть один специфический случай — программы, в которых дело идёт в пространстве Лобачевского.
9) Топология — кроме трассировки плат не могу представить, где она нужна. Возможно, в компьютерной геометрии, например, при построении поверхности по одному или нескольким облакам точек, при расчётах взаимодействия тел, для поиска пути в пространстве допустимых параметров какого-нибудь робота… Но я этим пока не занимался, и насколько нужна именно топология, не знаю. Для разработки алгоритмов, думаю, нужна.
10) Функциональный анализ — не помню, что туда входит. Но если базисы семейств функций (ряды Фурье и более сложные системы) изучаются там, то это полезно. Бесконечномерные пространства, скорее всего, не потребуются.
11) Интегральные уравнения — не сталкивался. Возможно, потому, что в качестве отдельного предмета я их не знаю.
12) Теория функций комплексного переменного — линейные и рациональные функции очень полезны для работы с движениями плоскости и сферы, с комплексными числами работать проще, чем с ортогональными матрицами. Ещё в комплексном поле удобно решать системы полиномиальных уравнений (они редко, но встречаются). И то же пространство Лобачевского в комплексных координатах выглядит приятнее.
13) Уравнения в частных производных — если не часть предметной области… могут пригодиться для каких-нибудь вариантов гладкой интерполяции данных (когда работы с базисными функциями почему-то не хватает). Насколько УрЧП нужны для моделирования, скажем, морской поверхности в компьютерной графике, не знаю — не занимался. Подозреваю, что нужны.
14) Теория вероятностей, математическая статистика, теория случайных процессов — в разной степени в любом анализе данных.
15) Вариационное исчисление и методы оптимизации — ИИ в играх и роботехника.
16) Методы вычислений и численные методы — сколько угодно. Если работа связана хоть с какими-нибудь вещественными числами.
17) Теория чисел — аналогично теории конечных групп. В целом, встречается нечасто. Если, конечно, не считать современной криптографии…
Комментарии (82)
bak
05.11.2016 19:05+17Ждём статью «Нужно ли программисту высшее образование». Ну или linux vs windows сразу, чего уж там.
Leoon
05.11.2016 23:44-4Ну ведь программист может быть хорошим и без высшего образования? Или такого можно сразу за дверь? Да статья длинная. Я может что то не понимаю в этом мире, но мне кажется, что важнее не то что есть сейчас в наличии, а то, на что готов человек. Готов ли он изучить матанализ, если надо будет, или он скажет, что и так знает и напишет как есть.
lukdiman
05.11.2016 19:05Сейчас стою перед выбором. Мне 28, женат и ребенок родился недавно. Знаю Java на достаточно глубоком уровне, но текущая зп не устраивает и чувствую что потолок зарплат джависта низок. И мне редко приходится использовать глубокие знания java на практике, а хочется чаще использовать. И вот сейчас думаю а есть ли смысл идти в машинное обучение и учить считай с нуля всю математику или дальше развиваться в Java и искать контору, где будут нужны знания Java глубокие и будут платить за это соответствующие деньги?
begemot_sun
05.11.2016 19:18+3Моё имхо: Глубокие знания языка не нужны никому. Да, поначалу вы будете крутым, но потом поезд вашей технологии уйдет, и ваши знания уйдут вместе с ней.
Если вы будете развиваться не в глубь, а в ширь — то у вас будет большее поле пересечения с вашими работодателями. Чего уж говорить про «машинное обучение», я думаю текущая ситуация только подхлестнет спрос на таких спецов. Так что на вашем бы месте я не думал, я бы действовал.lukdiman
05.11.2016 20:10+2Но тут тоже есть проблема. В новой области меня никто не возьмет на ту же зарплату и придется потратить не один год, чтобы догнать навыки хотя бы на текущую зп.
bak
05.11.2016 20:21+8Потолок ЗП джавистов и дата-сайнтистов отличается не очень сильно (если вообще отличается). Хотите роста ЗП — выбирайте менеджерскую ветку прокачки или делайте свой бизнес.
lukdiman
05.11.2016 20:31Я вообще думал дата-сайнтисты получают раза в 2 больше.
Ну вот на работе сейчас часто углубляюсь в согласование требований, проведение собеседований, наставничество над новыми сотрудниками. Возможно постепенно на разработку станет появляться меньше времени и перейду в менеджеры. Так же думаю над бизнесом. Для начала хотя бы интернет магазин. Вообще посещают мысли, что тратить время на изучение совсем новой технологии с туманными перспективами координального увеличения ЗП в моем случае скорее всего не лучшее решение.renskiy
06.11.2016 10:28+4зарплаты в IT примерно одинаковы на одном и том же уровне — это само-балансируемая система. Туда, где платят больше, больше людей стремятся, постепенно насыщая спрос на специалистов в соответствующей области и стабилизируя уровень ЗП.
Не думаю, что вы выиграете от того, что вместо senior java developer станете senior data analyst. Скорее наоборот, проиграете, потому что опыт работы у вас будет поделен между двумя специальностями, в то время как максимальный уровень ЗП привязывается к максимальному уровню опыта в одной требуемой специальности, а не к сумме опыта в разных специальностях.lukdiman
06.11.2016 17:44В этом согласен и думаю что метаться туда сюда просто нет смысла. И еще считаю что в рамках одного отдела в одной конторе сложно пробраться на вершину если изначально пришел как не самый сильный джавист, но прошло года 4 и многое изменилось. И хотя меня регулярно повышали это больше похоже на индексацию чем на повышение и координально заработок не меняется.
VenomBlood
06.11.2016 01:35+1Еще можно в другую страну поехать. У нас в США, например, программистам (не менеджерам) платят примерно столько же сколько тим-лидам на сходном уровне компетенции.
Don_Eric
06.11.2016 11:03+1там и траты соответсвенно. Программист на удаленке в Киеве за 7К$ в месяц реально зарабатывает больше чем программист из Silicon Valley с зарплатой 150К$ в год
Terras
06.11.2016 11:05+2Плюсую.
Работал в свое время в маленьком городе на удаленке. Получал процентов на 20% меньше, чем мои коллеги в офисе в Москве. Но по факту у меня сохранялось 70% моей зп, а у них ничего. Через 3 года купил себе квартиру в Питере, а мои коллеги все еще сидят на съеме.
VenomBlood
06.11.2016 11:51+2там и траты соответсвенно. Программист на удаленке в Киеве за 7К$ в месяц реально зарабатывает больше чем программист из Silicon Valley с зарплатой 150К$ в год
Только в Bay Area $150K для Senior SDE это мало, скорее это даже для SDE II для полного пакета маловато, а вот в СНГ $7K в месяц я не знаю насколько реально получать при подобной квалификации, уж точно это не медиана.
begemot_sun
06.11.2016 20:13Просто так программисты никому не нужны, обязательно нужны которые сведущи в предметной области.
Чем шире ваши познания, тем ценнее вы как специалист.
Понятное дело, что нужно искать такого работодателя который максимально использует ваши знания.
khrisanfov
05.11.2016 20:39У меня похожая ситуация. Я начал изучать ML пару месяцев назад. Копнул немного в математику и в сам процесс ML. Могу сказать, что математика как была для меня непокоримой вершиной так и останется, а сам процесс ML больше относится к программированию чем к математике. Нужно хорошо знать питон или R, применять уже разработанные функции и алгоритмы на практике. Надо хорошо знать теорию вероятностей и descriptive statistics (не знаю как на русском называется). Я конечно подтяну немного общее понимание, но углубляться в математику точно не буду. Пусть математики варятся в собственном соку, разрабатывают нам алгоритмы, а мы будем применять это на практике и зарабатывать деньги :).
VenomBlood
06.11.2016 01:38+1Так без знания математики вам как раз тяжело будет разобраться глубоко в ML. Все сведется к «Давайте попробуем это семейство моделей, они ща модные, у Джона вон получилось неплохо решить свои задачи при помощи них» грубо говоря. Потому что не зная математики которая лежит за все этим — вы или не будете знать сильных и слабых сторон различных методов либо будете просто заучивать их и любая нетривиальная задача (а таких 99%), не описанная в учебнике приведет к тому что вы будете слепо пробовать десяток моделей слепо подбирая параметры, но это пол беды — это только машинное время и время разработчика, а вот когда надо будет собрать тренировочные данные если вы не будете разбираться в том что за этим всем лежит и сделаете по методичке — можете большую кучу ресурсов в трубу выкинуть.
применять уже разработанные функции и алгоритмы на практике.
Это значит что вы по определению будете на один шаг позади. Если это мелкая аналитика — вы можете себе такое позволить, если это ML которые применяется в конечных продуктах в конкуретной среде — компания исповедующая такой подход всегда будет в роли догоняющего.khrisanfov
06.11.2016 07:22+1Ну так можно про что угодно рассуждать. Если я пишу на C++, то я упираюсь в возможности GCC. Если я работаю с графикой, то я упираюсь в возможности движка и т.д. Я считаю, что можно быть хорошим спецом и без такого глубокого понимания всех деталей. Спрос на таких людей будет. Токарь когда вытачивает деталь на ЧПУ он же знает какие там алгоритмы реализованы верно? Это не мешает ему зарабатывать деньги применяя новые технологии на практике.
VenomBlood
06.11.2016 08:45Спрос будет и я даже сказал вам какой. Аналогия не верна, когда вы пишете на C++ вы в 99% случаев знаете что результат GCC вас устроит, но тем не менее даже тут есть ряд случаев когда вам надо знать как оно реализовано. В ML же если задача не типовая (а 99% задач скорее всего будут в той или иной мере не типовые) — то незнание математики заставит вас просто запутаться даже в моделях и параметрах, не говоря уже о том что вы не будете знать какую технику можно применить чтобы что-то улучшить.
0xd34df00d
07.11.2016 04:40А мне нравится разделение на data scientist'ов и ml'еров. Условно, первые — это кто делает from scikit import svm, вторые — кто пишут публикации по этим условным svm.
Первые, вероятно, будут богаче, быть среди вторых как-то круче, как по мне.VenomBlood
07.11.2016 10:46+1Почему же первые будут богаче? from scikit import svm — это не достаточно для задач где уровень применения ML определяет конкурентное преимущество, например — поисковики. И обычно те кто пишет статьи — они знают как применять ML на порядок лучше и могут получить результат на два порядка быстрее, что ценится компаниями.
0xd34df00d
07.11.2016 19:16+1Максимум по оплате будет среди вторых, да. Медиана-среднее — скорее среди первых.
А ещё вторых много во всяких академиях. Ну, потому что в тырпрайзе не столь много времени на то, чтобы пилить алгоритмы.
PapaBubaDiop
05.11.2016 21:35-4Для перехода в машинное обучение математика не нужна — просто поменяй джаву на питон…
dekeyro
05.11.2016 23:44Простите, а в какую цифру вы оцениваете потолок джависта?
Дело в том что я как раз хочу переходить в java из php, ровно по той же причине, что потолок php низок и уходить в управленцы нет желания.lukdiman
05.11.2016 23:49Где-то 150. В Москве. Хотя с текущим курсом может уже все поменялось.
bak
06.11.2016 00:09+4На hh пол сотни вакансий от 200. Потолок где-то 300-400 у лидов. По сравнению с php потолок действительно выше.
lukdiman
06.11.2016 00:15+1Не знаю где вы увидели 300-400 у лидов, но реальность такова что лиды это скорее 200. Хотелось бы конкретики, реальные примеры получения офферов.
Razaz
06.11.2016 00:49+1Ну реальные офферы никто светить не будет ;) Для .Net 200к не потолок в СПб, а уж в МСк то тем более. Java всегда была чуток поприбыльней, так что считайте.
Сбертех вообще не показатель. Руководитель разработки — менеджер или технарь?.. Смотрите иностранные компании или тех, кто работает на иностранные рынки. Плюс часто хорошие офферы в LinkedIn падают.lukdiman
06.11.2016 08:07-5Технарь. В баксах я не рассматриваю. Я говорю только о зп в рублях.
Razaz
06.11.2016 13:55+3А в чем проблема с баксами? 4к это реальная цифра в компаниях, которые получают прибыль в валюте. Они как до скачка платили 4-5к так и сейчас платят, а люди довольны и фиг ис сдернешь с места.
lukdiman
06.11.2016 08:21Вообще думаю засиделся я. Пора искать новое место работы. Но реальный потолок это чуть больше 200, но никак не 300 и не 400.
Razaz
06.11.2016 13:56+2Как вы оцениваете потолок?
Я исхожу из практики хождения по собеседованиям плюс информации людей, которым я доверяю.lukdiman
06.11.2016 17:52Я оцениваю потолок и когда сам ходил на собеседования и вижу на какие деньги идут к нам люди на собеседования. Даже люди почти к 40 все равно идут на 180 и это печалит.
VenomBlood
07.11.2016 03:58+7Это biased выборка. Те, кто получает >>180 — они просто к вам не идут.
lukdiman
08.11.2016 15:15А куда идут те, кто получает больше 180?
VenomBlood
09.11.2016 00:59+2Они не идут, за ними зачастую сами приходят.
lukdiman
09.11.2016 09:05Раз приходят, то значит о них знают. Получается те кто больше 180 хочет ведет свой блог, пишет на github проекты и т.д.? Как-то ведь о них узнают.
Razaz
09.11.2016 16:52Еще друзья, знакомые, коллеги и их рекомендации. Иногда хантят предметно — смотрят продукт, потом компанию, ищут в линкедине и пишут.
lukdiman
06.11.2016 00:32Вот допустим Сбербанк-Технологии считается что платит выше рынка, но при этом вилка руководителя разработки от 150 до 230.
lukdiman
06.11.2016 09:19А что же нужно такого знать, чтобы получать 300-400? Я даже не вижу разницы в описании вакансий на 200 тысяч. Опыт работы от 3-х лет, уверенное знание Java. Везде пишут одно и тоже.
Razaz
06.11.2016 14:02+2300к это не 3 года, а лет 7-10 с качественным опытом(самостоятельное принятие решений и тд.), хороший профиль на GitHub, StackOverflow, возможно статьи и доклады + западная компания или экспортер знаний и скилов.
Если вы очень крут — можете еще посмотреть в сторону TopTal или Crossover. С последним я правда не особо дел имел. Лень задавила делать их второе задание :)
ЯП кстати тут уже вторичен. Переучиться между Java и .Net не проблема. При желании тот же Go и JS можно подтянуть. Или Python.lukdiman
06.11.2016 17:01Ну вот да к сожалению я не публичный разработчик, на гитхабе не веду проекты, на stackoverflow не отвечаю, начал вести недавно блог. Меня никто не знает и в этом моя проблема отчасти. А вы может знаете конторы, которым нужны джависты, но не банки. Возможно создание игровых серверов и т.д. Хотел попасть в jetbrains, но им нужны были люди с опытом написания компиляторов. Я даже к ним на доклад специально поехал, чтобы поговорить потом с их руководством о вакансиях.
Landgraph
06.11.2016 14:32Коллега, прям больную тему задел. Есть и обратная сторона медали, я на год старше и всегда развивался «вширь».
Сейчас ищу перспективную компанию/команду, где умения будут оплачены и востребованы, в идеале — в полном объёме… Переезд? Нет проблем, хоть завтра.
Я бы сказал, что знания лишними не бывают, неизвестно где и как они пригодятся. Есть возможность учить математику в общем и машинное обучение в частности — учи. Но и интересную работу никто не запрещает искать =)
saboteur_kiev
05.11.2016 19:24+21. «Например, принимая на работу программиста работодатель в первую очередь будет оценивать уровень реальных знаний и навыков, а не цвет диплома. „
В основном это проблема системы образования, которая не успевает за ростом ИТ технологий.
2. “Означает ли это, что теперь на «серьезные» позиции разработчиков будут охотнее брать математиков, а не программистов?»
Для сайтов-визиток — нет. Для разработки чего-либо в области нейросетей, в области компьютерного зрения, кодеков, распознавания — да. И это УЖЕ есть, незачем ждать будущего.
Значит ли это, что сайты-визитки будут писать только говнокодеры — нет. Это разные направления, требуют разных навыков. Для дизайна лучше каллиграфию изучить, а не математику.VenomBlood
06.11.2016 01:43В основном это проблема системы образования, которая не успевает за ростом ИТ технологий.
Так цвет диплома от этого не зависит. По крайней мере в россии в ВУЗах есть куча бездарных предметов даже на IT специальностях, и если хоть по одному у вас тройка — то диплом не красный. Поэтому красный диплом это совершенно не показатель чего либо.istui
06.11.2016 13:03ну если учиться принципиально без троек (хотя бы из-за стипендии), то можно и формально выйти на красный.
Среди моих 8 одногруппников с красным дипломом реально его заслужили (по уровню знаний) трое, остальные — формально выполнили все критерии, не более.VenomBlood
07.11.2016 04:02хотя бы из-за стипендии
Я так думал курса до 4. А потом устроился на работу и осознал что затраты времени на «учиться без троек» — они того не стоят, лучше потратить их чтобы побольше поработать и отбить 10 стипендий за то же время. Да и в целом качество преподавателей крайне удручает, что даже не хочется ходить и слушать их, лишь бы просто формально сдать на что-то и свободен.
Terras
05.11.2016 19:49+3В общем.
У самого образование гуманитарное, но направление было связано бизнес-аналитикой. Сейчас работаю программистом, поэтому есть некоторые сведения:
1) Есть области где нужна жесткая алгоритмизация: BigData, GameDev, Нейросети, Распределительные сети, VR/DF, Оптимизация данных — тут брать человека без математического/it- образования очень сложно, так как требуется оперировать понятиями, которые изучаются только в универе. Но если есть что показать, то пробиться можно будет. Выучиться походу тоже можно.
2) Есть области, где требуется сборка систем из компонентов и допиливание под конкретные задачи. Веб-разработка, Мобильная разработка, Системное администратирование, Проектирование GUI, Автоматизация бизнес-логики и так далее. Тут нужно иметь адекватную голову и знание своего инструмента (языка, фремворка, ide, среды итд). Тут без образования математического образования работать можно, плюс люди без математического образования даже имеют свои плюсы. (Например, экономист будет быстрее и эффективней делать систему учета налогов, чем его собрат математик/it).
Плюс хочется отметить, что чаще всего в проекте ядро пилят именно математики, а все Api, бизнес-логику, интерфейсы и прочее — пилят уже обычные люди.
Поэтому так:
Если у вас нет математического образования — не нужно бояться. Просто нужно четко понимать, что есть ряд направлений, где вам будет пробиться очень сложно, поэтому было бы логичней выбрать что-то другое, например, веб-разрботку/мобильную разработку/автоматизация бизнеса/1C.AllexIn
05.11.2016 21:31+4В геймдеве базовая математика. Примерно уровня первого курса(кроме кватернионов).
Исключение, только если вы работаете на острие и пилите AAA-движки в крупной компании. В остальных случаях математически знания нужны минимальные.PapaBubaDiop
05.11.2016 21:39-1Если вы пилите ААА игру в большой компании — математика вообще не нужна, кроме умения вычислять площадь треугольника. В инди-играх необходимы, как минимум, ТФКП и численные методы.
AllexIn
05.11.2016 21:40+4Я слов то таких не знаю. :)
Но большие проекты вполне себе вел, причем уровня повыше традиционного инди.
P.S.
Про ААА — речь шла не про пиление ААА-игр, речь шла про пиление ААА-движков. Там математика нужна, хорошая и много.PapaBubaDiop
05.11.2016 23:18+3Хорошей математики много не бывает)
Мне просто за инди-игры обидно стало, что там физ-мата нет…
Честно говоря, когда занимаешься математической задачей, какие-нибудь марковсик модели — то сильно не до программирования. Часами, днями, во сне, погружаешься в абстракцию, доводя сознание до бытового уровня понимания проблемы. После чего задача кажется примитивной и решать ее численно или программно уже неинтересно)
Я тут на днях игру сделал, там полно теории.
Пример инди-игры, в которой ахренительное количество физики, кинематики и геометрииwOvAN
05.11.2016 21:41+3А почему для решения математических задач не нанимать отдельных людей — математиков, а программисты будут заниматься своим делом?
saboteur_kiev
05.11.2016 22:42+3Потому что математические задачи следует решать в рамках написания кода на языке программирования, с учетом всех ограничений и преимуществ, которые вам навешивает ИТ.
Например понимание типов и структур данных (и сколько они занимают, и какие ограничения у чисел с плавающей запятой)
Распарралеливание и отказоустойчивость
Использование готовых библиотек и знание что они есть, а не написание ВСЕГО с нуля.to_climb
05.11.2016 23:48+5Видели бы вы код, который пишут крутые математики… он очень похож на доказательство теоремы :)
Копался некоторое время назад в коде liblinear'а. Работает очень хорошо, но перфекционист во мне плачет глядя на эти однобуквенные переменные, сырые указатели, смешение new с malloc'ом, внезапного ООП (смешение стилей) и полное отсутствие комментариев к коду.
P.S. Я ни в коем случае не обобщаю, но несколько раз с таким стилем сталкивался.third112
06.11.2016 01:38+2Верно. Мне много приходится работать с математиками, есть которые пишут хороший код, а есть, которые и псевдокод записать не могут, хотя работают над алгоритмами и очень успешно. В общем, у математика и у «кодера» разное мировосприятие. Им не просто найти общий язык.
Применительно к обсуждаемой теме знания и навыки математики я бы разделил на два типа: «практическая» и «теоретическая» математика (по аналогии с «пркладная» и «чистая»). В практической не нужно доказывать теоремы. Т.е. если можно ограничиться готовыми алгоритмами, плюс к этому алгоритмами, не требующими сложных доказательств корректности и теоретических оценок трудоемкости, плюс к этому эвристическим алгоритмами — нужна практическая математика. В ней я бы выделил следующие особо важные для каждого программиста разделы.
Азы теории вычислительной сложности: на проблему тысячелетия P =? NP с такими знаниями замахиваться не стоит, но понимать, чем принципиально экспоненциальный по времени выполнения в наихудшем случае алгоритм отличается от полиномиального нужно каждому. Основы теории графов алгоритмический подход — списки (стеки, очереди) и деревья — это графы. Комбинаторика. Линейная алгебра, особо матричная алгебра. Нужно знать еще и отличия целого, действительного и рационального числа и т.д. Теорему Пифагора нужно знать, а вот ее доказательство, даже на школьном уровне, подавляющему большинству программистов знать не требуется.
Можно еще добавить разделы, но уже на приведенном примере виден принцип — широкие, но «поверхностные» с точки зрения чистого математика знания. — Они ведь считают, что если не можешь доказать теорему, то не знаешь ее. А тут и многих теорем знать не нужно — только некоторые практически значимые. В той же теории графов, нпр., столько замысловатых теорем: чтобы во всех разобраться надо потратить очень много сил и времени. Так вот очень многим программистам это не надо — вместо этого те же силы и время лучше употребить на практическое поверхностное изучение другой полезной мат. области. Но и при таком подходе математика столь огромна, что всю охватить жизни не хватит.
Специально употребляю термин «практическая математика» вместо более привычного «прикладная», т.к. многие исследования по прикладной математике требуют доказательств очень непростых теорем. Такие исследования не для обычных программистов. Это ИМХО нормальное разделение труда, и пусть каждый занимается своим делом.
Razaz
06.11.2016 00:53+3Спорно. В свое время работал в компании, где была необходимость в определенных алгоритмах — заказали на кафедре, а потом сами реализовали в своем коде. Результат всех порадовал.
third112
06.11.2016 02:12А как Вы описывали эти алгоритмы? Традиционным мат.языком, т.е. слова естественного языка+ мат.формулы? — Да, и так можно. Нпр., Евклид и Эратосфен свои знаменитые алгоритмы без помощи псевдокода описали, но, нпр., уже школьная задачка преобразования арифметических выражений в польскую нотацию с применением сложной рекурсии без псевдокода выглядит громоздко и ненаглядно даже не для школьника. А ведь чтобы правильно закодировать, нужно точно понять, что хотел сказать автор алгоритма.
Razaz
06.11.2016 02:45+4MatLab + естественный язык :)
Так как автор был доступен для разъяснений — то проблем особых не возникало. За все время обращались пару раз и каких-то сверх навыков в этой области от разработчиков не требовалось. Еще один раз решали проблему с масштабированием данных на графиках, но тут вспомнил чему учили в универе. Чаще всего использую очень поверхностный набор знаний, который в принципе можно на онлайн курсах осилить.third112
06.11.2016 02:49+1Ну, MatLab — это язык программирования, т.о. у Вас не тот случай, который иногда случается у некоторых чистых математиков :)
istui
06.11.2016 13:13+1На практике такой вариант удобнее всего. Вы получаете работающий код, который потом переносите на нужный вам язык в соответствии с принятыми стандартам кодирования. Отладка в большинстве случаев сводится к отладке багов трансляции на ваш язык, а не багов алгоритма.
third112
06.11.2016 21:14Да! Ведь могут быть не только баги алгоритма, но и баги реализатора, если он не автор. Ведь практически каждый нетривиальный мат.текст содержит множество смысловых сокращений, иначе бы объем такого текста был бы огромным. Т.о. у реализатора, как правило, есть много возможностей не правильно понять автора и внести баги реализации. Понятно, что реализатору отлавливать такие баги часто бывает сложнее, чем баги алгоритма (свои ошибки увидеть труднее, чем чужие). Хорошо бы издания по CS, публикующие новые алгоритмы, внесли в правила для авторов требование: обязательно вместе с рукописью статьи предоставлять работающий код. Пока такое правило не стало повсеместным, авторам алгоритмов нужно самим понять, что, сделав работающий код, они сделают свой алгоритм гораздо привлекательнее. Ведь каждый автор хочет, чтобы его алгоритм использовали как можно чаще. (Надеюсь, что эта простая мысль будет полезной и для авторов Хабра :) )
istui
07.11.2016 15:58А разве настолько часто встречаются статьи без кода, или это у меня такая специфическая выборка?
В большинстве как минимум есть ссылка на .zip. На GitHub выкладывают единицы, но это не критично…
Оффтоп. На днях искал максимально производительный алгоритм поиска клик в графе, может кто подскажет какой-нибудь?
third112
06.11.2016 02:45+1PS Как и многим, мне часто приходится искать алгоритмы в литературе/в сетке для реализации в программе. При прочих равных выбираю алгоритм, который был реализован, пусть даже на Алголе-60. Перевести на современный язык и приспособить под свою задачу — это обычно не сложно, главное — гарантия, что автор настолько хорошо продумал алгоритм и предусмотрел возможные сложности, что смог его реализовать в виде хоть как-то работающей программы. К сожалению, вредная традиция публиковать новый алгоритм без программной реализации очень живуча. Надеюсь, что в недалеком будущем ее изживут — это будут большой прогресс для IT.
Razaz
06.11.2016 02:51+1Ну автора за этим и нанимали :) Так как держать человека в штате для решения одной специфической задачи или даже нескольких было неразумно. Если специфика бизнеса требует постоянного решения таких задач — то имеет смысл. Главное что бы все стороны могли разговаривать на понятном друг другу языке :)
third112
06.11.2016 03:08+2Главное что бы все стороны могли разговаривать на понятном друг другу языке :)
Верно. Владение MatLab и подобным — это не всегда бывает, но если хотя бы на уровне Виртовского Паскаля математик может, что-то простое ученическое вроде Ханойских башен написать, то и с ним разговаривать гораздо легче. Хочется верить, что в недалеком будущем все математики будут знать программирование хотя бы на уровне Ханойских башен :)
smxfem
05.11.2016 23:45Способность к обучению наверно самое ценное (редкое) качество сейчас. Если человек получил высшее техническое образование и математикой очень слабо проникся, то, скорее всего, способность к обучению низкая и в сложных областях разработки. Хороший такой критерий, хотя и эвристический. Только какой от него толк? Все равно на практике все прояснится и человек автоматически займет (в идеале) свое место.
Labunsky
06.11.2016 01:48>Алгебра (высшая) — применяется довольно редко
А потом удивляются, что это мы базовые концепции, вроде какого-нибудь ООП, не понимаем. То есть как, понимаем, но на исключительно прикладном (я сделаль) уровне
Вот уж прикладная высшая алгебра — определенный мастхев для программистов, ИМХО
Keyten
06.11.2016 15:02Желающим изучать математику я бы в первую очередь давал вот эту вот ссылку: http://ium.mccme.ru/IUM-video.html
В спецкурсы сразу лезть не стоит, но вот поизучать любую программу НМУ за 1-2 курс — вполне приемлемый уровень сложности.ganqqwerty
07.11.2016 00:02+3там какой-то лютый ад, я с прикладной математики выпустился и не понял даже половины заголовков. Не стоит новичку туда глядеть.
cranium256
Ни о чём. Небо — голубое, трава — зелёная, знание математики — полезно.
Порадовали теги к статье. Выглядят очень весомо.
babylon
Рейтинг топикастера немного не дотянул до 404. Нужно поднатужиться.