Насколько важна математическая подготовка в перспективных направлениях разработки ПО



    Профессия программиста становится все более массовой и востребованной. Сейчас порог вхождения в ИТ-сферу в принципе снизился, но продолжает расти интерес к ИТ-технологиям в целом, и к программированию в частности.

    Среди ИТ-компаний и программистов, тем не менее, растет конкуренция. Однако стоит отметить, что, по крайней мере, на рынке труда она достаточно честная. Например, принимая на работу программиста работодатель в первую очередь будет оценивать уровень реальных знаний и навыков, а не цвет диплома. Впрочем, эта ситуация способствует распространению «программистов-самоучек», которые ограничены узкой специализацией. Для них нередко оказывается справедливо выражение «шаг вправо, шаг влево – расстрел». Так что, сейчас недостаточно сказать: этот человек – «ИТшник», или даже программист. Программист программисту рознь.

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

    Я учился в ВУЗе, в котором раньше, лет 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) Теория чисел — аналогично теории конечных групп. В целом, встречается нечасто. Если, конечно, не считать современной криптографии…

    Similar posts

    AdBlock has stolen the banner, but banners are not teeth — they will be back

    More
    Ads

    Comments 83

      +29
      Ни о чём. Небо — голубое, трава — зелёная, знание математики — полезно.
      Порадовали теги к статье. Выглядят очень весомо.
        +5
        Рейтинг топикастера немного не дотянул до 404. Нужно поднатужиться.
        +17
        Ждём статью «Нужно ли программисту высшее образование». Ну или linux vs windows сразу, чего уж там.
          –4
          Ну ведь программист может быть хорошим и без высшего образования? Или такого можно сразу за дверь? Да статья длинная. Я может что то не понимаю в этом мире, но мне кажется, что важнее не то что есть сейчас в наличии, а то, на что готов человек. Готов ли он изучить матанализ, если надо будет, или он скажет, что и так знает и напишет как есть.
            +2
            Иногда важнее это, иногда другое.
              +2
              Если программиста выставляют за дверь, то значит он ошибся дверью
            0
            Была уже пару лет назад. ;-) О высшем образовании
            0
            Сейчас стою перед выбором. Мне 28, женат и ребенок родился недавно. Знаю Java на достаточно глубоком уровне, но текущая зп не устраивает и чувствую что потолок зарплат джависта низок. И мне редко приходится использовать глубокие знания java на практике, а хочется чаще использовать. И вот сейчас думаю а есть ли смысл идти в машинное обучение и учить считай с нуля всю математику или дальше развиваться в Java и искать контору, где будут нужны знания Java глубокие и будут платить за это соответствующие деньги?
              +3
              Моё имхо: Глубокие знания языка не нужны никому. Да, поначалу вы будете крутым, но потом поезд вашей технологии уйдет, и ваши знания уйдут вместе с ней.
              Если вы будете развиваться не в глубь, а в ширь — то у вас будет большее поле пересечения с вашими работодателями. Чего уж говорить про «машинное обучение», я думаю текущая ситуация только подхлестнет спрос на таких спецов. Так что на вашем бы месте я не думал, я бы действовал.
                +2
                Но тут тоже есть проблема. В новой области меня никто не возьмет на ту же зарплату и придется потратить не один год, чтобы догнать навыки хотя бы на текущую зп.
                  +8
                  Потолок ЗП джавистов и дата-сайнтистов отличается не очень сильно (если вообще отличается). Хотите роста ЗП — выбирайте менеджерскую ветку прокачки или делайте свой бизнес.
                    0
                    Я вообще думал дата-сайнтисты получают раза в 2 больше.

                    Ну вот на работе сейчас часто углубляюсь в согласование требований, проведение собеседований, наставничество над новыми сотрудниками. Возможно постепенно на разработку станет появляться меньше времени и перейду в менеджеры. Так же думаю над бизнесом. Для начала хотя бы интернет магазин. Вообще посещают мысли, что тратить время на изучение совсем новой технологии с туманными перспективами координального увеличения ЗП в моем случае скорее всего не лучшее решение.
                      +4
                      зарплаты в IT примерно одинаковы на одном и том же уровне — это само-балансируемая система. Туда, где платят больше, больше людей стремятся, постепенно насыщая спрос на специалистов в соответствующей области и стабилизируя уровень ЗП.

                      Не думаю, что вы выиграете от того, что вместо senior java developer станете senior data analyst. Скорее наоборот, проиграете, потому что опыт работы у вас будет поделен между двумя специальностями, в то время как максимальный уровень ЗП привязывается к максимальному уровню опыта в одной требуемой специальности, а не к сумме опыта в разных специальностях.
                        0
                        В этом согласен и думаю что метаться туда сюда просто нет смысла. И еще считаю что в рамках одного отдела в одной конторе сложно пробраться на вершину если изначально пришел как не самый сильный джавист, но прошло года 4 и многое изменилось. И хотя меня регулярно повышали это больше похоже на индексацию чем на повышение и координально заработок не меняется.
                      +1
                      Еще можно в другую страну поехать. У нас в США, например, программистам (не менеджерам) платят примерно столько же сколько тим-лидам на сходном уровне компетенции.
                        +1
                        там и траты соответсвенно. Программист на удаленке в Киеве за 7К$ в месяц реально зарабатывает больше чем программист из Silicon Valley с зарплатой 150К$ в год
                          +2
                          Плюсую.

                          Работал в свое время в маленьком городе на удаленке. Получал процентов на 20% меньше, чем мои коллеги в офисе в Москве. Но по факту у меня сохранялось 70% моей зп, а у них ничего. Через 3 года купил себе квартиру в Питере, а мои коллеги все еще сидят на съеме.
                            +2
                            там и траты соответсвенно. Программист на удаленке в Киеве за 7К$ в месяц реально зарабатывает больше чем программист из Silicon Valley с зарплатой 150К$ в год
                            Только в Bay Area $150K для Senior SDE это мало, скорее это даже для SDE II для полного пакета маловато, а вот в СНГ $7K в месяц я не знаю насколько реально получать при подобной квалификации, уж точно это не медиана.
                        0
                        Просто так программисты никому не нужны, обязательно нужны которые сведущи в предметной области.
                        Чем шире ваши познания, тем ценнее вы как специалист.
                        Понятное дело, что нужно искать такого работодателя который максимально использует ваши знания.
                      0
                      У меня похожая ситуация. Я начал изучать ML пару месяцев назад. Копнул немного в математику и в сам процесс ML. Могу сказать, что математика как была для меня непокоримой вершиной так и останется, а сам процесс ML больше относится к программированию чем к математике. Нужно хорошо знать питон или R, применять уже разработанные функции и алгоритмы на практике. Надо хорошо знать теорию вероятностей и descriptive statistics (не знаю как на русском называется). Я конечно подтяну немного общее понимание, но углубляться в математику точно не буду. Пусть математики варятся в собственном соку, разрабатывают нам алгоритмы, а мы будем применять это на практике и зарабатывать деньги :).
                        +1
                        Так без знания математики вам как раз тяжело будет разобраться глубоко в ML. Все сведется к «Давайте попробуем это семейство моделей, они ща модные, у Джона вон получилось неплохо решить свои задачи при помощи них» грубо говоря. Потому что не зная математики которая лежит за все этим — вы или не будете знать сильных и слабых сторон различных методов либо будете просто заучивать их и любая нетривиальная задача (а таких 99%), не описанная в учебнике приведет к тому что вы будете слепо пробовать десяток моделей слепо подбирая параметры, но это пол беды — это только машинное время и время разработчика, а вот когда надо будет собрать тренировочные данные если вы не будете разбираться в том что за этим всем лежит и сделаете по методичке — можете большую кучу ресурсов в трубу выкинуть.
                        применять уже разработанные функции и алгоритмы на практике.
                        Это значит что вы по определению будете на один шаг позади. Если это мелкая аналитика — вы можете себе такое позволить, если это ML которые применяется в конечных продуктах в конкуретной среде — компания исповедующая такой подход всегда будет в роли догоняющего.
                          +1
                          Ну так можно про что угодно рассуждать. Если я пишу на C++, то я упираюсь в возможности GCC. Если я работаю с графикой, то я упираюсь в возможности движка и т.д. Я считаю, что можно быть хорошим спецом и без такого глубокого понимания всех деталей. Спрос на таких людей будет. Токарь когда вытачивает деталь на ЧПУ он же знает какие там алгоритмы реализованы верно? Это не мешает ему зарабатывать деньги применяя новые технологии на практике.
                            0
                            Спрос будет и я даже сказал вам какой. Аналогия не верна, когда вы пишете на C++ вы в 99% случаев знаете что результат GCC вас устроит, но тем не менее даже тут есть ряд случаев когда вам надо знать как оно реализовано. В ML же если задача не типовая (а 99% задач скорее всего будут в той или иной мере не типовые) — то незнание математики заставит вас просто запутаться даже в моделях и параметрах, не говоря уже о том что вы не будете знать какую технику можно применить чтобы что-то улучшить.
                          0
                          А мне нравится разделение на data scientist'ов и ml'еров. Условно, первые — это кто делает from scikit import svm, вторые — кто пишут публикации по этим условным svm.

                          Первые, вероятно, будут богаче, быть среди вторых как-то круче, как по мне.
                            +1
                            Почему же первые будут богаче? from scikit import svm — это не достаточно для задач где уровень применения ML определяет конкурентное преимущество, например — поисковики. И обычно те кто пишет статьи — они знают как применять ML на порядок лучше и могут получить результат на два порядка быстрее, что ценится компаниями.
                              +1
                              Максимум по оплате будет среди вторых, да. Медиана-среднее — скорее среди первых.

                              А ещё вторых много во всяких академиях. Ну, потому что в тырпрайзе не столь много времени на то, чтобы пилить алгоритмы.
                          –4
                          Для перехода в машинное обучение математика не нужна — просто поменяй джаву на питон…
                            0
                            Простите, а в какую цифру вы оцениваете потолок джависта?
                            Дело в том что я как раз хочу переходить в java из php, ровно по той же причине, что потолок php низок и уходить в управленцы нет желания.
                              0
                              Где-то 150. В Москве. Хотя с текущим курсом может уже все поменялось.
                                +4
                                На hh пол сотни вакансий от 200. Потолок где-то 300-400 у лидов. По сравнению с php потолок действительно выше.
                                  +1
                                  Не знаю где вы увидели 300-400 у лидов, но реальность такова что лиды это скорее 200. Хотелось бы конкретики, реальные примеры получения офферов.
                                    +1
                                    Ну реальные офферы никто светить не будет ;) Для .Net 200к не потолок в СПб, а уж в МСк то тем более. Java всегда была чуток поприбыльней, так что считайте.
                                    Сбертех вообще не показатель. Руководитель разработки — менеджер или технарь?.. Смотрите иностранные компании или тех, кто работает на иностранные рынки. Плюс часто хорошие офферы в LinkedIn падают.
                                      –5
                                      Технарь. В баксах я не рассматриваю. Я говорю только о зп в рублях.
                                        +3
                                        А в чем проблема с баксами? 4к это реальная цифра в компаниях, которые получают прибыль в валюте. Они как до скачка платили 4-5к так и сейчас платят, а люди довольны и фиг ис сдернешь с места.
                                        0
                                        Вообще думаю засиделся я. Пора искать новое место работы. Но реальный потолок это чуть больше 200, но никак не 300 и не 400.
                                          +2
                                          Как вы оцениваете потолок?
                                          Я исхожу из практики хождения по собеседованиям плюс информации людей, которым я доверяю.
                                            0
                                            Я оцениваю потолок и когда сам ходил на собеседования и вижу на какие деньги идут к нам люди на собеседования. Даже люди почти к 40 все равно идут на 180 и это печалит.
                                              +7
                                              Это biased выборка. Те, кто получает >>180 — они просто к вам не идут.
                                                0
                                                А куда идут те, кто получает больше 180?
                                                  +2
                                                  Они не идут, за ними зачастую сами приходят.
                                                    0
                                                    Раз приходят, то значит о них знают. Получается те кто больше 180 хочет ведет свой блог, пишет на github проекты и т.д.? Как-то ведь о них узнают.
                                                      0
                                                      Еще друзья, знакомые, коллеги и их рекомендации. Иногда хантят предметно — смотрят продукт, потом компанию, ищут в линкедине и пишут.
                                      0
                                      Вот допустим Сбербанк-Технологии считается что платит выше рынка, но при этом вилка руководителя разработки от 150 до 230.
                                        0
                                        А что же нужно такого знать, чтобы получать 300-400? Я даже не вижу разницы в описании вакансий на 200 тысяч. Опыт работы от 3-х лет, уверенное знание Java. Везде пишут одно и тоже.
                                          +2
                                          300к это не 3 года, а лет 7-10 с качественным опытом(самостоятельное принятие решений и тд.), хороший профиль на GitHub, StackOverflow, возможно статьи и доклады + западная компания или экспортер знаний и скилов.
                                          Если вы очень крут — можете еще посмотреть в сторону TopTal или Crossover. С последним я правда не особо дел имел. Лень задавила делать их второе задание :)
                                          ЯП кстати тут уже вторичен. Переучиться между Java и .Net не проблема. При желании тот же Go и JS можно подтянуть. Или Python.
                                            0
                                            Ну вот да к сожалению я не публичный разработчик, на гитхабе не веду проекты, на stackoverflow не отвечаю, начал вести недавно блог. Меня никто не знает и в этом моя проблема отчасти. А вы может знаете конторы, которым нужны джависты, но не банки. Возможно создание игровых серверов и т.д. Хотел попасть в jetbrains, но им нужны были люди с опытом написания компиляторов. Я даже к ним на доклад специально поехал, чтобы поговорить потом с их руководством о вакансиях.
                                              0
                                              Это вам народ из Мск надо поспрашивать ;)
                                    0
                                    Коллега, прям больную тему задел. Есть и обратная сторона медали, я на год старше и всегда развивался «вширь».

                                    Сейчас ищу перспективную компанию/команду, где умения будут оплачены и востребованы, в идеале — в полном объёме… Переезд? Нет проблем, хоть завтра.

                                    Я бы сказал, что знания лишними не бывают, неизвестно где и как они пригодятся. Есть возможность учить математику в общем и машинное обучение в частности — учи. Но и интересную работу никто не запрещает искать =)
                                      0
                                      изучай английский и начинай фрилансить на зарубежных биржах.
                                      +2
                                      1. «Например, принимая на работу программиста работодатель в первую очередь будет оценивать уровень реальных знаний и навыков, а не цвет диплома. „

                                      В основном это проблема системы образования, которая не успевает за ростом ИТ технологий.

                                      2. “Означает ли это, что теперь на «серьезные» позиции разработчиков будут охотнее брать математиков, а не программистов?»
                                      Для сайтов-визиток — нет. Для разработки чего-либо в области нейросетей, в области компьютерного зрения, кодеков, распознавания — да. И это УЖЕ есть, незачем ждать будущего.

                                      Значит ли это, что сайты-визитки будут писать только говнокодеры — нет. Это разные направления, требуют разных навыков. Для дизайна лучше каллиграфию изучить, а не математику.
                                        0
                                        В основном это проблема системы образования, которая не успевает за ростом ИТ технологий.
                                        Так цвет диплома от этого не зависит. По крайней мере в россии в ВУЗах есть куча бездарных предметов даже на IT специальностях, и если хоть по одному у вас тройка — то диплом не красный. Поэтому красный диплом это совершенно не показатель чего либо.
                                          0
                                          ну если учиться принципиально без троек (хотя бы из-за стипендии), то можно и формально выйти на красный.

                                          Среди моих 8 одногруппников с красным дипломом реально его заслужили (по уровню знаний) трое, остальные — формально выполнили все критерии, не более.
                                            0
                                            хотя бы из-за стипендии
                                            Я так думал курса до 4. А потом устроился на работу и осознал что затраты времени на «учиться без троек» — они того не стоят, лучше потратить их чтобы побольше поработать и отбить 10 стипендий за то же время. Да и в целом качество преподавателей крайне удручает, что даже не хочется ходить и слушать их, лишь бы просто формально сдать на что-то и свободен.
                                              0
                                              А если не секрет, какой ВУЗ (или хотя бы регион) у вас?
                                        +3
                                        В общем.

                                        У самого образование гуманитарное, но направление было связано бизнес-аналитикой. Сейчас работаю программистом, поэтому есть некоторые сведения:

                                        1) Есть области где нужна жесткая алгоритмизация: BigData, GameDev, Нейросети, Распределительные сети, VR/DF, Оптимизация данных — тут брать человека без математического/it- образования очень сложно, так как требуется оперировать понятиями, которые изучаются только в универе. Но если есть что показать, то пробиться можно будет. Выучиться походу тоже можно.

                                        2) Есть области, где требуется сборка систем из компонентов и допиливание под конкретные задачи. Веб-разработка, Мобильная разработка, Системное администратирование, Проектирование GUI, Автоматизация бизнес-логики и так далее. Тут нужно иметь адекватную голову и знание своего инструмента (языка, фремворка, ide, среды итд). Тут без образования математического образования работать можно, плюс люди без математического образования даже имеют свои плюсы. (Например, экономист будет быстрее и эффективней делать систему учета налогов, чем его собрат математик/it).

                                        Плюс хочется отметить, что чаще всего в проекте ядро пилят именно математики, а все Api, бизнес-логику, интерфейсы и прочее — пилят уже обычные люди.

                                        Поэтому так:

                                        Если у вас нет математического образования — не нужно бояться. Просто нужно четко понимать, что есть ряд направлений, где вам будет пробиться очень сложно, поэтому было бы логичней выбрать что-то другое, например, веб-разрботку/мобильную разработку/автоматизация бизнеса/1C.
                                          +4
                                          В геймдеве базовая математика. Примерно уровня первого курса(кроме кватернионов).
                                          Исключение, только если вы работаете на острие и пилите AAA-движки в крупной компании. В остальных случаях математически знания нужны минимальные.
                                            –1
                                            Если вы пилите ААА игру в большой компании — математика вообще не нужна, кроме умения вычислять площадь треугольника. В инди-играх необходимы, как минимум, ТФКП и численные методы.
                                              +4
                                              Я слов то таких не знаю. :)
                                              Но большие проекты вполне себе вел, причем уровня повыше традиционного инди.

                                              P.S.
                                              Про ААА — речь шла не про пиление ААА-игр, речь шла про пиление ААА-движков. Там математика нужна, хорошая и много.
                                                +3
                                                Хорошей математики много не бывает)

                                                Мне просто за инди-игры обидно стало, что там физ-мата нет…

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

                                                Я тут на днях игру сделал, там полно теории.
                                                Пример инди-игры, в которой ахренительное количество физики, кинематики и геометрии

                                                Содержимое
                                                  0
                                                  А можете чуть подробней рассказать, зачем тут физика, кинематика и геометрия? Сгенерировать карту кажется достаточно тривиально. Определение куда какой элемент двигать можно сделать на эвристиках.
                                                    0
                                                    Хотя наверное я просто не понял правила. В ситуации в начале ролика я думал что на место синего многоугольника упадёт оранжевый. А по факту упал зелёный справа.
                                                      +2
                                                      Я напишу рассказ, в комментарий не уложиться. Читай на неделе на хабре!
                                            +3
                                            А почему для решения математических задач не нанимать отдельных людей — математиков, а программисты будут заниматься своим делом?
                                              +3
                                              Потому что математические задачи следует решать в рамках написания кода на языке программирования, с учетом всех ограничений и преимуществ, которые вам навешивает ИТ.

                                              Например понимание типов и структур данных (и сколько они занимают, и какие ограничения у чисел с плавающей запятой)
                                              Распарралеливание и отказоустойчивость
                                              Использование готовых библиотек и знание что они есть, а не написание ВСЕГО с нуля.
                                                +5
                                                Видели бы вы код, который пишут крутые математики… он очень похож на доказательство теоремы :)
                                                Копался некоторое время назад в коде liblinear'а. Работает очень хорошо, но перфекционист во мне плачет глядя на эти однобуквенные переменные, сырые указатели, смешение new с malloc'ом, внезапного ООП (смешение стилей) и полное отсутствие комментариев к коду.
                                                P.S. Я ни в коем случае не обобщаю, но несколько раз с таким стилем сталкивался.
                                                  +2
                                                  Верно. Мне много приходится работать с математиками, есть которые пишут хороший код, а есть, которые и псевдокод записать не могут, хотя работают над алгоритмами и очень успешно. В общем, у математика и у «кодера» разное мировосприятие. Им не просто найти общий язык.

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

                                                  Азы теории вычислительной сложности: на проблему тысячелетия P =? NP с такими знаниями замахиваться не стоит, но понимать, чем принципиально экспоненциальный по времени выполнения в наихудшем случае алгоритм отличается от полиномиального нужно каждому. Основы теории графов алгоритмический подход — списки (стеки, очереди) и деревья — это графы. Комбинаторика. Линейная алгебра, особо матричная алгебра. Нужно знать еще и отличия целого, действительного и рационального числа и т.д. Теорему Пифагора нужно знать, а вот ее доказательство, даже на школьном уровне, подавляющему большинству программистов знать не требуется.

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

                                                  Специально употребляю термин «практическая математика» вместо более привычного «прикладная», т.к. многие исследования по прикладной математике требуют доказательств очень непростых теорем. Такие исследования не для обычных программистов. Это ИМХО нормальное разделение труда, и пусть каждый занимается своим делом.
                                                  +3
                                                  Спорно. В свое время работал в компании, где была необходимость в определенных алгоритмах — заказали на кафедре, а потом сами реализовали в своем коде. Результат всех порадовал.
                                                    0
                                                    А как Вы описывали эти алгоритмы? Традиционным мат.языком, т.е. слова естественного языка+ мат.формулы? — Да, и так можно. Нпр., Евклид и Эратосфен свои знаменитые алгоритмы без помощи псевдокода описали, но, нпр., уже школьная задачка преобразования арифметических выражений в польскую нотацию с применением сложной рекурсии без псевдокода выглядит громоздко и ненаглядно даже не для школьника. А ведь чтобы правильно закодировать, нужно точно понять, что хотел сказать автор алгоритма.
                                                      +4
                                                      MatLab + естественный язык :)
                                                      Так как автор был доступен для разъяснений — то проблем особых не возникало. За все время обращались пару раз и каких-то сверх навыков в этой области от разработчиков не требовалось. Еще один раз решали проблему с масштабированием данных на графиках, но тут вспомнил чему учили в универе. Чаще всего использую очень поверхностный набор знаний, который в принципе можно на онлайн курсах осилить.
                                                        +1
                                                        Ну, MatLab — это язык программирования, т.о. у Вас не тот случай, который иногда случается у некоторых чистых математиков :)
                                                          +1
                                                          На практике такой вариант удобнее всего. Вы получаете работающий код, который потом переносите на нужный вам язык в соответствии с принятыми стандартам кодирования. Отладка в большинстве случаев сводится к отладке багов трансляции на ваш язык, а не багов алгоритма.
                                                            0
                                                            Да! Ведь могут быть не только баги алгоритма, но и баги реализатора, если он не автор. Ведь практически каждый нетривиальный мат.текст содержит множество смысловых сокращений, иначе бы объем такого текста был бы огромным. Т.о. у реализатора, как правило, есть много возможностей не правильно понять автора и внести баги реализации. Понятно, что реализатору отлавливать такие баги часто бывает сложнее, чем баги алгоритма (свои ошибки увидеть труднее, чем чужие). Хорошо бы издания по CS, публикующие новые алгоритмы, внесли в правила для авторов требование: обязательно вместе с рукописью статьи предоставлять работающий код. Пока такое правило не стало повсеместным, авторам алгоритмов нужно самим понять, что, сделав работающий код, они сделают свой алгоритм гораздо привлекательнее. Ведь каждый автор хочет, чтобы его алгоритм использовали как можно чаще. (Надеюсь, что эта простая мысль будет полезной и для авторов Хабра :) )
                                                              0
                                                              А разве настолько часто встречаются статьи без кода, или это у меня такая специфическая выборка?
                                                              В большинстве как минимум есть ссылка на .zip. На GitHub выкладывают единицы, но это не критично…

                                                              Оффтоп. На днях искал максимально производительный алгоритм поиска клик в графе, может кто подскажет какой-нибудь?
                                                      +1
                                                      PS Как и многим, мне часто приходится искать алгоритмы в литературе/в сетке для реализации в программе. При прочих равных выбираю алгоритм, который был реализован, пусть даже на Алголе-60. Перевести на современный язык и приспособить под свою задачу — это обычно не сложно, главное — гарантия, что автор настолько хорошо продумал алгоритм и предусмотрел возможные сложности, что смог его реализовать в виде хоть как-то работающей программы. К сожалению, вредная традиция публиковать новый алгоритм без программной реализации очень живуча. Надеюсь, что в недалеком будущем ее изживут — это будут большой прогресс для IT.
                                                        +1
                                                        Ну автора за этим и нанимали :) Так как держать человека в штате для решения одной специфической задачи или даже нескольких было неразумно. Если специфика бизнеса требует постоянного решения таких задач — то имеет смысл. Главное что бы все стороны могли разговаривать на понятном друг другу языке :)
                                                          +2
                                                          Главное что бы все стороны могли разговаривать на понятном друг другу языке :)
                                                          Верно. Владение MatLab и подобным — это не всегда бывает, но если хотя бы на уровне Виртовского Паскаля математик может, что-то простое ученическое вроде Ханойских башен написать, то и с ним разговаривать гораздо легче. Хочется верить, что в недалеком будущем все математики будут знать программирование хотя бы на уровне Ханойских башен :)
                                                  0
                                                  Способность к обучению наверно самое ценное (редкое) качество сейчас. Если человек получил высшее техническое образование и математикой очень слабо проникся, то, скорее всего, способность к обучению низкая и в сложных областях разработки. Хороший такой критерий, хотя и эвристический. Только какой от него толк? Все равно на практике все прояснится и человек автоматически займет (в идеале) свое место.
                                                    0
                                                    >Алгебра (высшая) — применяется довольно редко

                                                    А потом удивляются, что это мы базовые концепции, вроде какого-нибудь ООП, не понимаем. То есть как, понимаем, но на исключительно прикладном (я сделаль) уровне

                                                    Вот уж прикладная высшая алгебра — определенный мастхев для программистов, ИМХО
                                                    0
                                                    Желающим изучать математику я бы в первую очередь давал вот эту вот ссылку: http://ium.mccme.ru/IUM-video.html
                                                    В спецкурсы сразу лезть не стоит, но вот поизучать любую программу НМУ за 1-2 курс — вполне приемлемый уровень сложности.
                                                      +3
                                                      там какой-то лютый ад, я с прикладной математики выпустился и не понял даже половины заголовков. Не стоит новичку туда глядеть.
                                                        0
                                                        Ну вы, вероятно, удивитесь, узнав, насколько прикладная математика — маленький кусочек в мире всей математики.

                                                        Я же и написал, в спецкурсы лезть не стоит, но поизучать программу НМУ за 1-2 курс — вполне норм. 1 курса технического вуза вполне хватит, чтобы понимать 1 курс НМУ (алгебра, геометрия, анализ, топология).
                                                        0
                                                        Есть годнота раз и два например, но в основном там слабо прикладная математика, на первый дилетантский взгляд.

                                                      Only users with full accounts can post comments. Log in, please.