Комментарии 83
Ни о чём. Небо — голубое, трава — зелёная, знание математики — полезно.
Порадовали теги к статье. Выглядят очень весомо.
Порадовали теги к статье. Выглядят очень весомо.
Ждём статью «Нужно ли программисту высшее образование». Ну или linux vs windows сразу, чего уж там.
Ну ведь программист может быть хорошим и без высшего образования? Или такого можно сразу за дверь? Да статья длинная. Я может что то не понимаю в этом мире, но мне кажется, что важнее не то что есть сейчас в наличии, а то, на что готов человек. Готов ли он изучить матанализ, если надо будет, или он скажет, что и так знает и напишет как есть.
Была уже пару лет назад. ;-) О высшем образовании
Сейчас стою перед выбором. Мне 28, женат и ребенок родился недавно. Знаю Java на достаточно глубоком уровне, но текущая зп не устраивает и чувствую что потолок зарплат джависта низок. И мне редко приходится использовать глубокие знания java на практике, а хочется чаще использовать. И вот сейчас думаю а есть ли смысл идти в машинное обучение и учить считай с нуля всю математику или дальше развиваться в Java и искать контору, где будут нужны знания Java глубокие и будут платить за это соответствующие деньги?
Моё имхо: Глубокие знания языка не нужны никому. Да, поначалу вы будете крутым, но потом поезд вашей технологии уйдет, и ваши знания уйдут вместе с ней.
Если вы будете развиваться не в глубь, а в ширь — то у вас будет большее поле пересечения с вашими работодателями. Чего уж говорить про «машинное обучение», я думаю текущая ситуация только подхлестнет спрос на таких спецов. Так что на вашем бы месте я не думал, я бы действовал.
Если вы будете развиваться не в глубь, а в ширь — то у вас будет большее поле пересечения с вашими работодателями. Чего уж говорить про «машинное обучение», я думаю текущая ситуация только подхлестнет спрос на таких спецов. Так что на вашем бы месте я не думал, я бы действовал.
Но тут тоже есть проблема. В новой области меня никто не возьмет на ту же зарплату и придется потратить не один год, чтобы догнать навыки хотя бы на текущую зп.
Потолок ЗП джавистов и дата-сайнтистов отличается не очень сильно (если вообще отличается). Хотите роста ЗП — выбирайте менеджерскую ветку прокачки или делайте свой бизнес.
Я вообще думал дата-сайнтисты получают раза в 2 больше.
Ну вот на работе сейчас часто углубляюсь в согласование требований, проведение собеседований, наставничество над новыми сотрудниками. Возможно постепенно на разработку станет появляться меньше времени и перейду в менеджеры. Так же думаю над бизнесом. Для начала хотя бы интернет магазин. Вообще посещают мысли, что тратить время на изучение совсем новой технологии с туманными перспективами координального увеличения ЗП в моем случае скорее всего не лучшее решение.
Ну вот на работе сейчас часто углубляюсь в согласование требований, проведение собеседований, наставничество над новыми сотрудниками. Возможно постепенно на разработку станет появляться меньше времени и перейду в менеджеры. Так же думаю над бизнесом. Для начала хотя бы интернет магазин. Вообще посещают мысли, что тратить время на изучение совсем новой технологии с туманными перспективами координального увеличения ЗП в моем случае скорее всего не лучшее решение.
зарплаты в IT примерно одинаковы на одном и том же уровне — это само-балансируемая система. Туда, где платят больше, больше людей стремятся, постепенно насыщая спрос на специалистов в соответствующей области и стабилизируя уровень ЗП.
Не думаю, что вы выиграете от того, что вместо senior java developer станете senior data analyst. Скорее наоборот, проиграете, потому что опыт работы у вас будет поделен между двумя специальностями, в то время как максимальный уровень ЗП привязывается к максимальному уровню опыта в одной требуемой специальности, а не к сумме опыта в разных специальностях.
Не думаю, что вы выиграете от того, что вместо senior java developer станете senior data analyst. Скорее наоборот, проиграете, потому что опыт работы у вас будет поделен между двумя специальностями, в то время как максимальный уровень ЗП привязывается к максимальному уровню опыта в одной требуемой специальности, а не к сумме опыта в разных специальностях.
В этом согласен и думаю что метаться туда сюда просто нет смысла. И еще считаю что в рамках одного отдела в одной конторе сложно пробраться на вершину если изначально пришел как не самый сильный джавист, но прошло года 4 и многое изменилось. И хотя меня регулярно повышали это больше похоже на индексацию чем на повышение и координально заработок не меняется.
Еще можно в другую страну поехать. У нас в США, например, программистам (не менеджерам) платят примерно столько же сколько тим-лидам на сходном уровне компетенции.
там и траты соответсвенно. Программист на удаленке в Киеве за 7К$ в месяц реально зарабатывает больше чем программист из Silicon Valley с зарплатой 150К$ в год
Плюсую.
Работал в свое время в маленьком городе на удаленке. Получал процентов на 20% меньше, чем мои коллеги в офисе в Москве. Но по факту у меня сохранялось 70% моей зп, а у них ничего. Через 3 года купил себе квартиру в Питере, а мои коллеги все еще сидят на съеме.
Работал в свое время в маленьком городе на удаленке. Получал процентов на 20% меньше, чем мои коллеги в офисе в Москве. Но по факту у меня сохранялось 70% моей зп, а у них ничего. Через 3 года купил себе квартиру в Питере, а мои коллеги все еще сидят на съеме.
там и траты соответсвенно. Программист на удаленке в Киеве за 7К$ в месяц реально зарабатывает больше чем программист из Silicon Valley с зарплатой 150К$ в годТолько в Bay Area $150K для Senior SDE это мало, скорее это даже для SDE II для полного пакета маловато, а вот в СНГ $7K в месяц я не знаю насколько реально получать при подобной квалификации, уж точно это не медиана.
Просто так программисты никому не нужны, обязательно нужны которые сведущи в предметной области.
Чем шире ваши познания, тем ценнее вы как специалист.
Понятное дело, что нужно искать такого работодателя который максимально использует ваши знания.
Чем шире ваши познания, тем ценнее вы как специалист.
Понятное дело, что нужно искать такого работодателя который максимально использует ваши знания.
У меня похожая ситуация. Я начал изучать ML пару месяцев назад. Копнул немного в математику и в сам процесс ML. Могу сказать, что математика как была для меня непокоримой вершиной так и останется, а сам процесс ML больше относится к программированию чем к математике. Нужно хорошо знать питон или R, применять уже разработанные функции и алгоритмы на практике. Надо хорошо знать теорию вероятностей и descriptive statistics (не знаю как на русском называется). Я конечно подтяну немного общее понимание, но углубляться в математику точно не буду. Пусть математики варятся в собственном соку, разрабатывают нам алгоритмы, а мы будем применять это на практике и зарабатывать деньги :).
Так без знания математики вам как раз тяжело будет разобраться глубоко в ML. Все сведется к «Давайте попробуем это семейство моделей, они ща модные, у Джона вон получилось неплохо решить свои задачи при помощи них» грубо говоря. Потому что не зная математики которая лежит за все этим — вы или не будете знать сильных и слабых сторон различных методов либо будете просто заучивать их и любая нетривиальная задача (а таких 99%), не описанная в учебнике приведет к тому что вы будете слепо пробовать десяток моделей слепо подбирая параметры, но это пол беды — это только машинное время и время разработчика, а вот когда надо будет собрать тренировочные данные если вы не будете разбираться в том что за этим всем лежит и сделаете по методичке — можете большую кучу ресурсов в трубу выкинуть.
применять уже разработанные функции и алгоритмы на практике.Это значит что вы по определению будете на один шаг позади. Если это мелкая аналитика — вы можете себе такое позволить, если это ML которые применяется в конечных продуктах в конкуретной среде — компания исповедующая такой подход всегда будет в роли догоняющего.
Ну так можно про что угодно рассуждать. Если я пишу на C++, то я упираюсь в возможности GCC. Если я работаю с графикой, то я упираюсь в возможности движка и т.д. Я считаю, что можно быть хорошим спецом и без такого глубокого понимания всех деталей. Спрос на таких людей будет. Токарь когда вытачивает деталь на ЧПУ он же знает какие там алгоритмы реализованы верно? Это не мешает ему зарабатывать деньги применяя новые технологии на практике.
Спрос будет и я даже сказал вам какой. Аналогия не верна, когда вы пишете на C++ вы в 99% случаев знаете что результат GCC вас устроит, но тем не менее даже тут есть ряд случаев когда вам надо знать как оно реализовано. В ML же если задача не типовая (а 99% задач скорее всего будут в той или иной мере не типовые) — то незнание математики заставит вас просто запутаться даже в моделях и параметрах, не говоря уже о том что вы не будете знать какую технику можно применить чтобы что-то улучшить.
НЛО прилетело и опубликовало эту надпись здесь
Почему же первые будут богаче? from scikit import svm — это не достаточно для задач где уровень применения ML определяет конкурентное преимущество, например — поисковики. И обычно те кто пишет статьи — они знают как применять ML на порядок лучше и могут получить результат на два порядка быстрее, что ценится компаниями.
Для перехода в машинное обучение математика не нужна — просто поменяй джаву на питон…
Простите, а в какую цифру вы оцениваете потолок джависта?
Дело в том что я как раз хочу переходить в java из php, ровно по той же причине, что потолок php низок и уходить в управленцы нет желания.
Дело в том что я как раз хочу переходить в java из php, ровно по той же причине, что потолок php низок и уходить в управленцы нет желания.
Где-то 150. В Москве. Хотя с текущим курсом может уже все поменялось.
На hh пол сотни вакансий от 200. Потолок где-то 300-400 у лидов. По сравнению с php потолок действительно выше.
Не знаю где вы увидели 300-400 у лидов, но реальность такова что лиды это скорее 200. Хотелось бы конкретики, реальные примеры получения офферов.
Ну реальные офферы никто светить не будет ;) Для .Net 200к не потолок в СПб, а уж в МСк то тем более. Java всегда была чуток поприбыльней, так что считайте.
Сбертех вообще не показатель. Руководитель разработки — менеджер или технарь?.. Смотрите иностранные компании или тех, кто работает на иностранные рынки. Плюс часто хорошие офферы в LinkedIn падают.
Сбертех вообще не показатель. Руководитель разработки — менеджер или технарь?.. Смотрите иностранные компании или тех, кто работает на иностранные рынки. Плюс часто хорошие офферы в LinkedIn падают.
Технарь. В баксах я не рассматриваю. Я говорю только о зп в рублях.
Вообще думаю засиделся я. Пора искать новое место работы. Но реальный потолок это чуть больше 200, но никак не 300 и не 400.
Как вы оцениваете потолок?
Я исхожу из практики хождения по собеседованиям плюс информации людей, которым я доверяю.
Я исхожу из практики хождения по собеседованиям плюс информации людей, которым я доверяю.
Я оцениваю потолок и когда сам ходил на собеседования и вижу на какие деньги идут к нам люди на собеседования. Даже люди почти к 40 все равно идут на 180 и это печалит.
Вот допустим Сбербанк-Технологии считается что платит выше рынка, но при этом вилка руководителя разработки от 150 до 230.
А что же нужно такого знать, чтобы получать 300-400? Я даже не вижу разницы в описании вакансий на 200 тысяч. Опыт работы от 3-х лет, уверенное знание Java. Везде пишут одно и тоже.
300к это не 3 года, а лет 7-10 с качественным опытом(самостоятельное принятие решений и тд.), хороший профиль на GitHub, StackOverflow, возможно статьи и доклады + западная компания или экспортер знаний и скилов.
Если вы очень крут — можете еще посмотреть в сторону TopTal или Crossover. С последним я правда не особо дел имел. Лень задавила делать их второе задание :)
ЯП кстати тут уже вторичен. Переучиться между Java и .Net не проблема. При желании тот же Go и JS можно подтянуть. Или Python.
Если вы очень крут — можете еще посмотреть в сторону TopTal или Crossover. С последним я правда не особо дел имел. Лень задавила делать их второе задание :)
ЯП кстати тут уже вторичен. Переучиться между Java и .Net не проблема. При желании тот же Go и JS можно подтянуть. Или Python.
Ну вот да к сожалению я не публичный разработчик, на гитхабе не веду проекты, на stackoverflow не отвечаю, начал вести недавно блог. Меня никто не знает и в этом моя проблема отчасти. А вы может знаете конторы, которым нужны джависты, но не банки. Возможно создание игровых серверов и т.д. Хотел попасть в jetbrains, но им нужны были люди с опытом написания компиляторов. Я даже к ним на доклад специально поехал, чтобы поговорить потом с их руководством о вакансиях.
Коллега, прям больную тему задел. Есть и обратная сторона медали, я на год старше и всегда развивался «вширь».
Сейчас ищу перспективную компанию/команду, где умения будут оплачены и востребованы, в идеале — в полном объёме… Переезд? Нет проблем, хоть завтра.
Я бы сказал, что знания лишними не бывают, неизвестно где и как они пригодятся. Есть возможность учить математику в общем и машинное обучение в частности — учи. Но и интересную работу никто не запрещает искать =)
Сейчас ищу перспективную компанию/команду, где умения будут оплачены и востребованы, в идеале — в полном объёме… Переезд? Нет проблем, хоть завтра.
Я бы сказал, что знания лишними не бывают, неизвестно где и как они пригодятся. Есть возможность учить математику в общем и машинное обучение в частности — учи. Но и интересную работу никто не запрещает искать =)
изучай английский и начинай фрилансить на зарубежных биржах.
1. «Например, принимая на работу программиста работодатель в первую очередь будет оценивать уровень реальных знаний и навыков, а не цвет диплома. „
В основном это проблема системы образования, которая не успевает за ростом ИТ технологий.
2. “Означает ли это, что теперь на «серьезные» позиции разработчиков будут охотнее брать математиков, а не программистов?»
Для сайтов-визиток — нет. Для разработки чего-либо в области нейросетей, в области компьютерного зрения, кодеков, распознавания — да. И это УЖЕ есть, незачем ждать будущего.
Значит ли это, что сайты-визитки будут писать только говнокодеры — нет. Это разные направления, требуют разных навыков. Для дизайна лучше каллиграфию изучить, а не математику.
В основном это проблема системы образования, которая не успевает за ростом ИТ технологий.
2. “Означает ли это, что теперь на «серьезные» позиции разработчиков будут охотнее брать математиков, а не программистов?»
Для сайтов-визиток — нет. Для разработки чего-либо в области нейросетей, в области компьютерного зрения, кодеков, распознавания — да. И это УЖЕ есть, незачем ждать будущего.
Значит ли это, что сайты-визитки будут писать только говнокодеры — нет. Это разные направления, требуют разных навыков. Для дизайна лучше каллиграфию изучить, а не математику.
В основном это проблема системы образования, которая не успевает за ростом ИТ технологий.Так цвет диплома от этого не зависит. По крайней мере в россии в ВУЗах есть куча бездарных предметов даже на IT специальностях, и если хоть по одному у вас тройка — то диплом не красный. Поэтому красный диплом это совершенно не показатель чего либо.
ну если учиться принципиально без троек (хотя бы из-за стипендии), то можно и формально выйти на красный.
Среди моих 8 одногруппников с красным дипломом реально его заслужили (по уровню знаний) трое, остальные — формально выполнили все критерии, не более.
Среди моих 8 одногруппников с красным дипломом реально его заслужили (по уровню знаний) трое, остальные — формально выполнили все критерии, не более.
хотя бы из-за стипендииЯ так думал курса до 4. А потом устроился на работу и осознал что затраты времени на «учиться без троек» — они того не стоят, лучше потратить их чтобы побольше поработать и отбить 10 стипендий за то же время. Да и в целом качество преподавателей крайне удручает, что даже не хочется ходить и слушать их, лишь бы просто формально сдать на что-то и свободен.
В общем.
У самого образование гуманитарное, но направление было связано бизнес-аналитикой. Сейчас работаю программистом, поэтому есть некоторые сведения:
1) Есть области где нужна жесткая алгоритмизация: BigData, GameDev, Нейросети, Распределительные сети, VR/DF, Оптимизация данных — тут брать человека без математического/it- образования очень сложно, так как требуется оперировать понятиями, которые изучаются только в универе. Но если есть что показать, то пробиться можно будет. Выучиться походу тоже можно.
2) Есть области, где требуется сборка систем из компонентов и допиливание под конкретные задачи. Веб-разработка, Мобильная разработка, Системное администратирование, Проектирование GUI, Автоматизация бизнес-логики и так далее. Тут нужно иметь адекватную голову и знание своего инструмента (языка, фремворка, ide, среды итд). Тут без образования математического образования работать можно, плюс люди без математического образования даже имеют свои плюсы. (Например, экономист будет быстрее и эффективней делать систему учета налогов, чем его собрат математик/it).
Плюс хочется отметить, что чаще всего в проекте ядро пилят именно математики, а все Api, бизнес-логику, интерфейсы и прочее — пилят уже обычные люди.
Поэтому так:
Если у вас нет математического образования — не нужно бояться. Просто нужно четко понимать, что есть ряд направлений, где вам будет пробиться очень сложно, поэтому было бы логичней выбрать что-то другое, например, веб-разрботку/мобильную разработку/автоматизация бизнеса/1C.
У самого образование гуманитарное, но направление было связано бизнес-аналитикой. Сейчас работаю программистом, поэтому есть некоторые сведения:
1) Есть области где нужна жесткая алгоритмизация: BigData, GameDev, Нейросети, Распределительные сети, VR/DF, Оптимизация данных — тут брать человека без математического/it- образования очень сложно, так как требуется оперировать понятиями, которые изучаются только в универе. Но если есть что показать, то пробиться можно будет. Выучиться походу тоже можно.
2) Есть области, где требуется сборка систем из компонентов и допиливание под конкретные задачи. Веб-разработка, Мобильная разработка, Системное администратирование, Проектирование GUI, Автоматизация бизнес-логики и так далее. Тут нужно иметь адекватную голову и знание своего инструмента (языка, фремворка, ide, среды итд). Тут без образования математического образования работать можно, плюс люди без математического образования даже имеют свои плюсы. (Например, экономист будет быстрее и эффективней делать систему учета налогов, чем его собрат математик/it).
Плюс хочется отметить, что чаще всего в проекте ядро пилят именно математики, а все Api, бизнес-логику, интерфейсы и прочее — пилят уже обычные люди.
Поэтому так:
Если у вас нет математического образования — не нужно бояться. Просто нужно четко понимать, что есть ряд направлений, где вам будет пробиться очень сложно, поэтому было бы логичней выбрать что-то другое, например, веб-разрботку/мобильную разработку/автоматизация бизнеса/1C.
В геймдеве базовая математика. Примерно уровня первого курса(кроме кватернионов).
Исключение, только если вы работаете на острие и пилите AAA-движки в крупной компании. В остальных случаях математически знания нужны минимальные.
Исключение, только если вы работаете на острие и пилите AAA-движки в крупной компании. В остальных случаях математически знания нужны минимальные.
Если вы пилите ААА игру в большой компании — математика вообще не нужна, кроме умения вычислять площадь треугольника. В инди-играх необходимы, как минимум, ТФКП и численные методы.
Я слов то таких не знаю. :)
Но большие проекты вполне себе вел, причем уровня повыше традиционного инди.
P.S.
Про ААА — речь шла не про пиление ААА-игр, речь шла про пиление ААА-движков. Там математика нужна, хорошая и много.
Но большие проекты вполне себе вел, причем уровня повыше традиционного инди.
P.S.
Про ААА — речь шла не про пиление ААА-игр, речь шла про пиление ААА-движков. Там математика нужна, хорошая и много.
Хорошей математики много не бывает)
Мне просто за инди-игры обидно стало, что там физ-мата нет…
Честно говоря, когда занимаешься математической задачей, какие-нибудь марковсик модели — то сильно не до программирования. Часами, днями, во сне, погружаешься в абстракцию, доводя сознание до бытового уровня понимания проблемы. После чего задача кажется примитивной и решать ее численно или программно уже неинтересно)
Я тут на днях игру сделал, там полно теории.
Мне просто за инди-игры обидно стало, что там физ-мата нет…
Честно говоря, когда занимаешься математической задачей, какие-нибудь марковсик модели — то сильно не до программирования. Часами, днями, во сне, погружаешься в абстракцию, доводя сознание до бытового уровня понимания проблемы. После чего задача кажется примитивной и решать ее численно или программно уже неинтересно)
Я тут на днях игру сделал, там полно теории.
Пример инди-игры, в которой ахренительное количество физики, кинематики и геометрии
Содержимое
Содержимое
А можете чуть подробней рассказать, зачем тут физика, кинематика и геометрия? Сгенерировать карту кажется достаточно тривиально. Определение куда какой элемент двигать можно сделать на эвристиках.
Хотя наверное я просто не понял правила. В ситуации в начале ролика я думал что на место синего многоугольника упадёт оранжевый. А по факту упал зелёный справа.
Я напишу рассказ, в комментарий не уложиться. Читай на неделе на хабре!
А почему для решения математических задач не нанимать отдельных людей — математиков, а программисты будут заниматься своим делом?
Потому что математические задачи следует решать в рамках написания кода на языке программирования, с учетом всех ограничений и преимуществ, которые вам навешивает ИТ.
Например понимание типов и структур данных (и сколько они занимают, и какие ограничения у чисел с плавающей запятой)
Распарралеливание и отказоустойчивость
Использование готовых библиотек и знание что они есть, а не написание ВСЕГО с нуля.
Например понимание типов и структур данных (и сколько они занимают, и какие ограничения у чисел с плавающей запятой)
Распарралеливание и отказоустойчивость
Использование готовых библиотек и знание что они есть, а не написание ВСЕГО с нуля.
Видели бы вы код, который пишут крутые математики… он очень похож на доказательство теоремы :)
Копался некоторое время назад в коде liblinear'а. Работает очень хорошо, но перфекционист во мне плачет глядя на эти однобуквенные переменные, сырые указатели, смешение new с malloc'ом, внезапного ООП (смешение стилей) и полное отсутствие комментариев к коду.
P.S. Я ни в коем случае не обобщаю, но несколько раз с таким стилем сталкивался.
Копался некоторое время назад в коде liblinear'а. Работает очень хорошо, но перфекционист во мне плачет глядя на эти однобуквенные переменные, сырые указатели, смешение new с malloc'ом, внезапного ООП (смешение стилей) и полное отсутствие комментариев к коду.
P.S. Я ни в коем случае не обобщаю, но несколько раз с таким стилем сталкивался.
Верно. Мне много приходится работать с математиками, есть которые пишут хороший код, а есть, которые и псевдокод записать не могут, хотя работают над алгоритмами и очень успешно. В общем, у математика и у «кодера» разное мировосприятие. Им не просто найти общий язык.
Применительно к обсуждаемой теме знания и навыки математики я бы разделил на два типа: «практическая» и «теоретическая» математика (по аналогии с «пркладная» и «чистая»). В практической не нужно доказывать теоремы. Т.е. если можно ограничиться готовыми алгоритмами, плюс к этому алгоритмами, не требующими сложных доказательств корректности и теоретических оценок трудоемкости, плюс к этому эвристическим алгоритмами — нужна практическая математика. В ней я бы выделил следующие особо важные для каждого программиста разделы.
Азы теории вычислительной сложности: на проблему тысячелетия P =? NP с такими знаниями замахиваться не стоит, но понимать, чем принципиально экспоненциальный по времени выполнения в наихудшем случае алгоритм отличается от полиномиального нужно каждому. Основы теории графов алгоритмический подход — списки (стеки, очереди) и деревья — это графы. Комбинаторика. Линейная алгебра, особо матричная алгебра. Нужно знать еще и отличия целого, действительного и рационального числа и т.д. Теорему Пифагора нужно знать, а вот ее доказательство, даже на школьном уровне, подавляющему большинству программистов знать не требуется.
Можно еще добавить разделы, но уже на приведенном примере виден принцип — широкие, но «поверхностные» с точки зрения чистого математика знания. — Они ведь считают, что если не можешь доказать теорему, то не знаешь ее. А тут и многих теорем знать не нужно — только некоторые практически значимые. В той же теории графов, нпр., столько замысловатых теорем: чтобы во всех разобраться надо потратить очень много сил и времени. Так вот очень многим программистам это не надо — вместо этого те же силы и время лучше употребить на практическое поверхностное изучение другой полезной мат. области. Но и при таком подходе математика столь огромна, что всю охватить жизни не хватит.
Специально употребляю термин «практическая математика» вместо более привычного «прикладная», т.к. многие исследования по прикладной математике требуют доказательств очень непростых теорем. Такие исследования не для обычных программистов. Это ИМХО нормальное разделение труда, и пусть каждый занимается своим делом.
Применительно к обсуждаемой теме знания и навыки математики я бы разделил на два типа: «практическая» и «теоретическая» математика (по аналогии с «пркладная» и «чистая»). В практической не нужно доказывать теоремы. Т.е. если можно ограничиться готовыми алгоритмами, плюс к этому алгоритмами, не требующими сложных доказательств корректности и теоретических оценок трудоемкости, плюс к этому эвристическим алгоритмами — нужна практическая математика. В ней я бы выделил следующие особо важные для каждого программиста разделы.
Азы теории вычислительной сложности: на проблему тысячелетия P =? NP с такими знаниями замахиваться не стоит, но понимать, чем принципиально экспоненциальный по времени выполнения в наихудшем случае алгоритм отличается от полиномиального нужно каждому. Основы теории графов алгоритмический подход — списки (стеки, очереди) и деревья — это графы. Комбинаторика. Линейная алгебра, особо матричная алгебра. Нужно знать еще и отличия целого, действительного и рационального числа и т.д. Теорему Пифагора нужно знать, а вот ее доказательство, даже на школьном уровне, подавляющему большинству программистов знать не требуется.
Можно еще добавить разделы, но уже на приведенном примере виден принцип — широкие, но «поверхностные» с точки зрения чистого математика знания. — Они ведь считают, что если не можешь доказать теорему, то не знаешь ее. А тут и многих теорем знать не нужно — только некоторые практически значимые. В той же теории графов, нпр., столько замысловатых теорем: чтобы во всех разобраться надо потратить очень много сил и времени. Так вот очень многим программистам это не надо — вместо этого те же силы и время лучше употребить на практическое поверхностное изучение другой полезной мат. области. Но и при таком подходе математика столь огромна, что всю охватить жизни не хватит.
Специально употребляю термин «практическая математика» вместо более привычного «прикладная», т.к. многие исследования по прикладной математике требуют доказательств очень непростых теорем. Такие исследования не для обычных программистов. Это ИМХО нормальное разделение труда, и пусть каждый занимается своим делом.
Спорно. В свое время работал в компании, где была необходимость в определенных алгоритмах — заказали на кафедре, а потом сами реализовали в своем коде. Результат всех порадовал.
А как Вы описывали эти алгоритмы? Традиционным мат.языком, т.е. слова естественного языка+ мат.формулы? — Да, и так можно. Нпр., Евклид и Эратосфен свои знаменитые алгоритмы без помощи псевдокода описали, но, нпр., уже школьная задачка преобразования арифметических выражений в польскую нотацию с применением сложной рекурсии без псевдокода выглядит громоздко и ненаглядно даже не для школьника. А ведь чтобы правильно закодировать, нужно точно понять, что хотел сказать автор алгоритма.
MatLab + естественный язык :)
Так как автор был доступен для разъяснений — то проблем особых не возникало. За все время обращались пару раз и каких-то сверх навыков в этой области от разработчиков не требовалось. Еще один раз решали проблему с масштабированием данных на графиках, но тут вспомнил чему учили в универе. Чаще всего использую очень поверхностный набор знаний, который в принципе можно на онлайн курсах осилить.
Так как автор был доступен для разъяснений — то проблем особых не возникало. За все время обращались пару раз и каких-то сверх навыков в этой области от разработчиков не требовалось. Еще один раз решали проблему с масштабированием данных на графиках, но тут вспомнил чему учили в универе. Чаще всего использую очень поверхностный набор знаний, который в принципе можно на онлайн курсах осилить.
Ну, MatLab — это язык программирования, т.о. у Вас не тот случай, который иногда случается у некоторых чистых математиков :)
На практике такой вариант удобнее всего. Вы получаете работающий код, который потом переносите на нужный вам язык в соответствии с принятыми стандартам кодирования. Отладка в большинстве случаев сводится к отладке багов трансляции на ваш язык, а не багов алгоритма.
Да! Ведь могут быть не только баги алгоритма, но и баги реализатора, если он не автор. Ведь практически каждый нетривиальный мат.текст содержит множество смысловых сокращений, иначе бы объем такого текста был бы огромным. Т.о. у реализатора, как правило, есть много возможностей не правильно понять автора и внести баги реализации. Понятно, что реализатору отлавливать такие баги часто бывает сложнее, чем баги алгоритма (свои ошибки увидеть труднее, чем чужие). Хорошо бы издания по CS, публикующие новые алгоритмы, внесли в правила для авторов требование: обязательно вместе с рукописью статьи предоставлять работающий код. Пока такое правило не стало повсеместным, авторам алгоритмов нужно самим понять, что, сделав работающий код, они сделают свой алгоритм гораздо привлекательнее. Ведь каждый автор хочет, чтобы его алгоритм использовали как можно чаще. (Надеюсь, что эта простая мысль будет полезной и для авторов Хабра :) )
А разве настолько часто встречаются статьи без кода, или это у меня такая специфическая выборка?
В большинстве как минимум есть ссылка на .zip. На GitHub выкладывают единицы, но это не критично…
Оффтоп. На днях искал максимально производительный алгоритм поиска клик в графе, может кто подскажет какой-нибудь?
В большинстве как минимум есть ссылка на .zip. На GitHub выкладывают единицы, но это не критично…
Оффтоп. На днях искал максимально производительный алгоритм поиска клик в графе, может кто подскажет какой-нибудь?
PS Как и многим, мне часто приходится искать алгоритмы в литературе/в сетке для реализации в программе. При прочих равных выбираю алгоритм, который был реализован, пусть даже на Алголе-60. Перевести на современный язык и приспособить под свою задачу — это обычно не сложно, главное — гарантия, что автор настолько хорошо продумал алгоритм и предусмотрел возможные сложности, что смог его реализовать в виде хоть как-то работающей программы. К сожалению, вредная традиция публиковать новый алгоритм без программной реализации очень живуча. Надеюсь, что в недалеком будущем ее изживут — это будут большой прогресс для IT.
Ну автора за этим и нанимали :) Так как держать человека в штате для решения одной специфической задачи или даже нескольких было неразумно. Если специфика бизнеса требует постоянного решения таких задач — то имеет смысл. Главное что бы все стороны могли разговаривать на понятном друг другу языке :)
Главное что бы все стороны могли разговаривать на понятном друг другу языке :)Верно. Владение MatLab и подобным — это не всегда бывает, но если хотя бы на уровне Виртовского Паскаля математик может, что-то простое ученическое вроде Ханойских башен написать, то и с ним разговаривать гораздо легче. Хочется верить, что в недалеком будущем все математики будут знать программирование хотя бы на уровне Ханойских башен :)
Способность к обучению наверно самое ценное (редкое) качество сейчас. Если человек получил высшее техническое образование и математикой очень слабо проникся, то, скорее всего, способность к обучению низкая и в сложных областях разработки. Хороший такой критерий, хотя и эвристический. Только какой от него толк? Все равно на практике все прояснится и человек автоматически займет (в идеале) свое место.
>Алгебра (высшая) — применяется довольно редко
А потом удивляются, что это мы базовые концепции, вроде какого-нибудь ООП, не понимаем. То есть как, понимаем, но на исключительно прикладном (я сделаль) уровне
Вот уж прикладная высшая алгебра — определенный мастхев для программистов, ИМХО
А потом удивляются, что это мы базовые концепции, вроде какого-нибудь ООП, не понимаем. То есть как, понимаем, но на исключительно прикладном (я сделаль) уровне
Вот уж прикладная высшая алгебра — определенный мастхев для программистов, ИМХО
Теория категорий мастхев для программистов )
Желающим изучать математику я бы в первую очередь давал вот эту вот ссылку: http://ium.mccme.ru/IUM-video.html
В спецкурсы сразу лезть не стоит, но вот поизучать любую программу НМУ за 1-2 курс — вполне приемлемый уровень сложности.
В спецкурсы сразу лезть не стоит, но вот поизучать любую программу НМУ за 1-2 курс — вполне приемлемый уровень сложности.
там какой-то лютый ад, я с прикладной математики выпустился и не понял даже половины заголовков. Не стоит новичку туда глядеть.
Ну вы, вероятно, удивитесь, узнав, насколько прикладная математика — маленький кусочек в мире всей математики.
Я же и написал, в спецкурсы лезть не стоит, но поизучать программу НМУ за 1-2 курс — вполне норм. 1 курса технического вуза вполне хватит, чтобы понимать 1 курс НМУ (алгебра, геометрия, анализ, топология).
Я же и написал, в спецкурсы лезть не стоит, но поизучать программу НМУ за 1-2 курс — вполне норм. 1 курса технического вуза вполне хватит, чтобы понимать 1 курс НМУ (алгебра, геометрия, анализ, топология).
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Насколько важна математическая подготовка в перспективных направлениях разработки ПО