И почему к нам стоит присоединиться
Миф
Среди комментариев к одному из постов с рекламой моей книги «The Self-Taught Programmer» («Computer Science для программиста-самоучки. Все что нужно знать о структурах данных и алгоритмах») был и такой: «Хочу научиться программировать, но слышал, что в компаниях не воспринимают всерьез программистов без академической степенью». К сожалению, это распространенное убеждение, и к счастью – неверное.
Истина
Среди самых успешных людей в мире есть программисты-самоучки. Так, Барак Обама наградил Маргарет Гамильтон (одну из них) Президентской медалью свободы за ее вклад в работу над лунным проектом «Аполлон». Стив Возняк еще в старших классах купил книгу по Фортрану и сам научился программировать. Впоследствии он изобрел персональный компьютер и стал сооснователем Apple, крупнейшей компании в мире. Самоучками являются и сооснователь Twitter и Square Джек Дорси, и Кевин Систром, сооснователь Instagram, и Дэвид Карп, основатель Tumblr.
Маргарет Гамильтон и код для NASA, который она написала от руки
Кто мы
Не только среди легенд Кремниевой Долины попадаются люди, сделавшие блестящую карьеру программиста, не имея степени по Computer Science. Согласно опросу, проведенному на сайте StackOverflow в 2016 году, 69% разработчиков сообщили, что освоили профессию самостоятельно (полностью или частично).
Опрос разработчиков, проведенный на StackOverflow в 2016 году
Программисты-самоучки руководят компаниями и разрабатывают софт по всему миру от Кремниевой долины до Тель-Авива. Причем, ряды их множатся каждый день; программированию учатся, самостоятельно читая книги или нарабатывая и совершенствуя навыки на специализированных сайтах, например, CodeAcademy, Go Self-Taught и Stack Overflow.
Конечно, мы не отметаем Computer Science как таковую. Мы можем объяснить, что такое полиморфизм. Мы изучаем алгоритмы и структуры данных, и даже умеем обойти двоичное дерево. Не смутимся, если нам предложат в качестве теста набросать код на маркерной доске.
Пример двоичного дерева
Но не каждый, обучающийся программированию, собирается заниматься разработкой на фултайме. У многих есть академические и даже ученые степени, благодаря которым эти люди являются ценными специалистами в своих предметных областях. Вряд ли у них найдется время на четыре года вернуться в университет, чтобы получить полноценный диплом программиста. Но, когда такой эксперт выучится программировать самостоятельно, он получит мощный бонус в своей профессии. Сможет, например, заниматься анализом данных или автоматизировать рутинные задачи, чтобы высвободить свое ценное время. Программисты-самоучки – это сообщество, в котором все до одного имеют дело с компьютерами, коммуникацией и данными, а не обязательно хотят работать программистами на полную ставку.
Преимущества самоучек
Также у нас по умолчанию есть преимущество, о котором я не устаю говорить:
«Как ни боязно работать бок о бок с бакалаврами, магистрами и кандидатами информатике, никогда не забывайте, что у вас, как у самоучки, есть своя фишка. Вы читаете эту книгу не потому, что вам ее задали, а из желания учиться, и такое желание – наибольшее из всех возможных преимуществ».
«The Self-Taught Programmer» Кори Альтхоффа, оригинал
Почему мы программируем
Линус Торвальдс, создатель Linux, сказал:
«Большинство хороших программистов пишут программы, потому что им нравится программировать, а ни ради денег и публичной похвалы».
И я с этим согласен. Изучать программирование стоит не из надежды получить высокооплачиваемую работу, а потому, что программировать безумно интересно. Если вы откроете в себе такую жилку, то без проблем станете олицетворением героя из отличной книги Кэла Ньюпорта, которая называется «Будьте настолько хороши, чтобы вас не могли игнорировать».
Не слушайте пессимистов
Не поддавайтесь на пораженческие замечания, будто научиться программировать вы не сможете, либо что ни одна компания вас всерьез не воспримет. В наше время стало модно писать статьи о том, как не следует учиться программировать. Например, на TechCrunch была опубликована статья «Please don’t learn to code» («Пожалуйста, не учитесь программировать»).
В 2012 году Джефф Этвуд написал одноименную завирусившуюся статью. Не слушайте их.
Также пусть умолкнут все, по чьим словам компании не воспринимают программистов-самоучек всерьез. К 2020 году в США ощущался серьезный дефицит программистов – около миллиона вакансий. При такой острой ситуации на рынке труда никто не может позволить себе игнорировать самоучек. Им придется воспринимать нас всерьез. Мы им нужны. Помните об этом.
Более подробно с книгой можно ознакомиться на сайте издательства:
» Оглавление
» Отрывок
Комментарии (370)
nixtonixto
03.11.2022 18:28+5Без академических знаний сложно разрабатывать что-то серьёзное — когда программист со средним образованием не знает, как умножать матрицы и вообще не понимает более половины символов в формулах. Программист-самоучка может найти свою нишу и успешно в ней работать, но в целом лучше иметь за плечами высшее с математическим уклоном.
exfizik
03.11.2022 18:40+58Я думаю, что 99.5% программистов никогда не сталкивается с умножением матриц.
0.4% делают это примерно так
c = matrix_multiply(a, b)
а оставшиеся 0.1% уже более менее понимают, что, как и зачем.
Программист-самоучка может найти свою нишу и успешно в ней работать
А бывают программисты без своей ниши? Все вроде на чём-то специализируются.
shai_hulud
03.11.2022 19:47+12Я боюсь, что IT уже выросло настолько что это не 0.1% (1 на 1000), а уже 0.001% (1 на 100000), кто будет писать свою математическую библиотеку.
В мире уже ~27 миллионов разработчиков.
M_AJ
03.11.2022 20:27c = matrix_multiply(a, b)
А потом долго думают, почему они не умножаются, а там просто размерности не совпадают.
Miheev2
03.11.2022 22:14+19Так он выдаст ошибку. Иначе что за библиотека.
M_AJ
03.11.2022 23:39Чисто теоретически это может быть что-то древнее и самописное, что просто возвращает код ошибки, но тут да, это искусственный пример, можно привести более реальный. Есть ситуации, где компилятор ошибку не выдаст, например если такой программист не знает что AB не обязательно равно ВА, тогда с точки зрения компилятора ошибки не будет, а вот результат работы программы будет неверным. И подобные ошибки без знаний уже можно вечность ловить.
doctorw
04.11.2022 01:01+3Я думаю, в данном случае, под matrix_multiply понимается вызов функции из готовой библиотеки для работы с матрицами, коих не мало, и почти наверняка все такие случаи там проверяются и если что идёт не так возвращается ошибка в том или ином виде.
hbn3
04.11.2022 02:17+1И может даже на этапе компиляции ...
0xd34df00d
04.11.2022 03:21+1Полноценно — в очень малом количестве языков, и их для числодробилок обычно не используют, увы.
SquareRootOfZero
04.11.2022 08:10Недавно мне библиотека Eigen для C++ вполне себе генерировала ошибку компиляции при попытке перемножить матрицы не тех размерностей. Какой конкретно случай мне проверить, чтобы убедиться в "неполноценности"?
0xd34df00d
04.11.2022 08:24+4Прочитайте эти матрицы из файла, да чтобы размер был при компиляции неизвестен.
SquareRootOfZero
04.11.2022 08:29Если размеры матриц неизвестны на этапе компиляции, то и успешность операции умножения неизвестна на этапе компиляции. Каким образом язык (любой) может в таких условиях выдать ошибку на этапе компиляции?
SquareRootOfZero
04.11.2022 11:38Это про dependent types, что ли? Типа, у каждой матрицы свой тип (включающий размер), и компилятор "какой-нибудь агды" проверяет, что все члены выражения совместимы по типам (и, как следствие, по размерам, при том что эти размеры не обязаны быть compile-time константами, как в "каком-нибудь C++")?
vkni
04.11.2022 16:26Крайне полезная, но до сих пор нереализованная кмк, фича для CAS (скажем Mathematica или Maxima)
M_AJ
04.11.2022 06:35+4все такие случаи там проверяются и если что идёт не так возвращается ошибка в том или ином виде.
В случае с произведением матриц АВ и ВА обе операции могут быть вполне законными, а значит никаких ошибок выдавать не должны, то есть программист должен просто знать, что в данном случае порядок умножения, в отличие от чисел, имеет значение. Если он этого не знает, то просто получит неверный результат, хотя чисто технически это не ошибка — библиотека вычислила то, что её попросили.
AllexIn
04.11.2022 06:40+30.4% конечно, так делают. Но при этом понимание что такое матричное умножение - важно. Например, чтобы выбрать правильный порядок умножения. Да и в целом не понимая что такое умножение составить формулу врядли получится.
Ndochp
05.11.2022 00:22Формула в ТЗ написана :) Надо то ему скорее всего не матрицы множить, а или графику крутить, или производственные задачи решать на бизнес уровне. И некий аналитик уже написал формулу (скорее взял из учебника, но может и у эксперта-математика), и откуда взять каждую из матриц. Откуда может быть выбор порядка умножения у программиста?
nameless323
05.11.2022 01:21Например импорт данных из 3д пакета в двиг игровой или наоборот, где меняется "сторонность" (не знаю как правильно по-русски, handedness), а если вдруг еще и вверх оси разные...
AllexIn
05.11.2022 07:25+2Ну может где-то прогеру и приходят задачи с формулами внутри. Мне вот не приходят. Может у меня работа сильно уникальная. Но врядли.
Ndochp
05.11.2022 12:42Ну не знаю, а как сдавать задачу, если формул в ТЗ нету?
Когда я сдаю что-то не тривиальное, то первый вопрос "а как проверить, что оно не врет" и проверка это ручной сценарий, посчитанный по формулам из ТЗ. А если их там нет, что мне говорить? "Мамой клянусь, правильно работает!"?vassabi
05.11.2022 12:52+1хмм ... обычно это мы пишем формулу, потом отдаем написанную нами формулу заказчику, он ее утверждает и мы добавляем итоговую формулу в ТЗ.
В финале - показываем, что наш проект работает по этой формуле :)
AllexIn
05.11.2022 14:33+1Ну вот простой пример:
Есть грузовик с седлом. Положение седла задано матрицей относительно грузовика. На седле еще одной матрицей задана точка которая должна быть совмещена с прицепом.
В свою очередь у прицепа есть точка крепления к седлу тоже заданная в локальной матрице.
Таким образом у меня есть 5 разных матриц трансформации.
Надо чтобы грузовик встал в такое положение, чтобы точка крепления на прицепе и на седле совпали.
Заказчик мне не будет формулу присылать. Заказчик скажет: "прицеп должен цепляться к грузовику".
Это, кстати, почти не выдуманная задача с реального проекта.AllexIn
05.11.2022 14:36+2А потом еще окажется, что есть седла у которых точка крепления не фиксированная, а представлена линией и нужно на этой линии найти самое "удачное" положение. И формул тоже не будет.
kenoma
05.11.2022 13:42+1Ну вот вам написали в ТЗ - нужно брать трехмерные вектора ускорений с акселерометра мобильного телефона, поворачивать их на угол, растягивать и переносить туда, а потом пересчитать их длины. Насколько хватит знаний программисту самоучке сделать эту задачу простым и понятным образом?
mordotron
05.11.2022 21:50если человеку требуется использовать в своём софте перемножение матриц, как минимум, он знает что это такое, как это делается, и зачем оно тут вообще надо.
AllexIn
05.11.2022 22:21Конечно, скорее всего так оно и есть(на самом деле не всегда, но это не важно).
Только вы почему-то комментируете мой сообщение и игнорируйте контекст. А контекст там как раз вида "Пользуются функцией и знать им что внутри - не надо"
Jianke
05.11.2022 21:50Если библиотека старая, то она не использует параллельные вычисления, ускоряющие вычисление матриц.
lalkaherekek
05.11.2022 21:50-1На деле это вообще не так. Вы должны очень хорошо и легко оперировать с понятиями Дискретной Математики. Такими, как Множества, Отношения, Функции, Комбинаторика и Теория Графов. Иначе вы будете делать кучу глупых ошибок и потом еще дольше их искать. Исправлять и не замечать.
> Я думаю, что 99.5% программистов никогда не сталкивается с умножением матриц.
Примерное число программистов, которым может понадобиться на условной "следующей неделе" оптимизировать умножение матриц, составляет ~100%. И это не зависит от языка. Это зависит от предметной области - Встраиваемые системы или Хайлоад. 100% всего ПО мира это Встраиваемые системы или Хайлоад. Либо вам нужно писать своё перемножение матриц, т.к. на вашем железе свой SSE. Либо у вас какой-то Хайлоад и там матрицы 1000x1000 перемножаются. Только не нужно называть веб-разрабочиков программистами, хорошо? Или вообще всех айтишников программистами. Программист это только С++, Java, С# на проектах от 1 000 000 строк кода. Остальные - айтишники.AllexIn
05.11.2022 22:23+1Очень странное разделение на "программист" vs "it-шник". С чего вы вдруг сняли звание программистов с людей, которые пишут не угодные вам программы?
Я так то радикал, считающий что программист должен знать хотя бы поверхностно как работает то на чем его программы исполняются. Но даже мне не хватает наглости выкидывать из программистов людей не имеющих таких знаний...
Einherjar
03.11.2022 19:00+23Я ни в коем разе не отрицаю необходимости знаний, но серьезность задач это какой то размытый критерий. Система в которой вам, ну например, приходит на почту счет за электричество это несерьезная задача? Подавляющее большинство разработки на планете это типичный энтерпрайз, взаимодейтсвие с базой данных, генерация отчетов, формошлепство, обращения к сторонним сервисам через разные апи, перемножать матрицы самостоятельно там не нужно, а если и кажется что нужно (not invented here?) то скорее всего что то пошло не так и этот велосипед потом обойдется недешево в поддержке. Если только не брать какие то научные отрасли, разработку компиляторов и различных фреймворков, то сугубо математические задачи встречаются довольно редко и как правило уже имеют готовые и отлаженные решения.
wolfy_str
05.11.2022 01:38Изобретать велосипед таки приходится. Но в целом так как я тупой, мне немного сложно понять суть где я работал, но система по обработки данных работает для каждого банка и задача типовая. Так как я даже не понял сути, суть по сути не нужна. Но соответственно каждый банк изобретает свой велосипед, я как то задумался что такой движок вообще то должен быть в открытом доступе, но меня как то осадили быстро. Ушёл же тоже не разобравшись, но чётко понял что по сути фрейморк над которым работал, это типовая вещь для любого банка.
Racheengel
03.11.2022 19:22+4Высшее не для программирования нужно, а для понимания конкретной предметной области. Математика это всего лишь одна из таких областей, не более. Программист на заводе, как правило, имеет одни задачи, программист игр совсем другие. Часто им математика нужна на уровне а * b = c.
p07a1330
03.11.2022 22:22+3Высшее не для программирования нужно, а для понимания конкретной предметной области.
И даже это нужно далеко не всегда (пусть и нужно)
У меня был опыт, когда с одной стороны приходил дизайн странички, которая должна по вводу некоторых параметров осуществлять расчет внутри и выдавать другие параметры, а с другой - Excel файлик с примером расчетов (с формулами)
Соответсвенно, как и почему работает так, а не иначе - было интересно исколючительно из общего развития, но на результат не влияло
vkni
04.11.2022 07:54С учётом того, что народ часто по делу озабочен асимптотиками, математика нужна на уровне аппроксимации частичных сумм рядов. Это конец второго курса.
p07a1330
04.11.2022 08:04+1Для подавляющего большинства случаев ассимп оптику того или иного решения можно посмотреть в <s>таблице красных резиновых мячиков</s> справочнике.
vkni
04.11.2022 16:24Можно. Но зачем, если можно это понять? И, соответственно, выводить. То есть, быть самостоятельным?
p07a1330
04.11.2022 16:29Полагаю, использование библиотек вы тоже порицаете?
Я могу в душе не знать, как работает sort в условном питоне, но при этом его использовать.
А это дает разброс ассимптотик с ним (для адекватных случаев) n/log(n)
vkni
04.11.2022 17:03+1Полагаю, использование библиотек вы тоже порицаете?
Вы таки знаете, что чтобы хорошо использовать библиотеку, нужно примерно представлять, что она делает?
А это дает разброс ассимптотик с ним (для адекватных случаев) n/log(n)
Вот-вот.
p07a1330
04.11.2022 18:50Вы таки знаете, что чтобы хорошо использовать библиотеку, нужно примерно представлять, что она делает?
Это разве не противоречит принципам инкапсуляции из ООП?
Я должен твердо знать, что быбилотека (библиотечная функция) ожидает получить на вход и что она отдает на выход. Остальное - черный ящик.
В архиредких случаях который приходится приоткрывать, но речь сейчас не об исключениях.vkni
04.11.2022 20:46+1Ну тут даже непонятно, что сказать. Вы когда-нибудь работали программистом?
p07a1330
04.11.2022 21:33В том числе в настоящее время
Веб, фронтенд. Миддл+
Понимаю, что вероятнее всего на бекенде своя специфика, но тем не менееp07a1330
04.11.2022 23:36Давайте определимся - мы исходим из фундаментального хорошего программирования, или из сурового энтерпрайза?
Если рассматриваем первый случай - согласен с вами по всем пунткам. Да, программист должен иметь возможность посчитать ассимптотику любой используемой функции. Да, нужно понимать не только что делает функция, но и как она работает. И так далее
Но на практике же, когда над кодом куча уровней абстракции и производительность (повторюсь, смотрю со стороны фронта) важна лишь в той степени, чтобы у пользователя из 95% перцентиля устройств не лагало при серфинге - этому не уделяют столь пристального внимания. И когда я (условно) подключаю к страничке MobX - я не лезу читать 4MB исходников, я просто ожидаю, что он ведет себя так, как описано в документации. И только если вдруг я натыкаюсь на неожиданное поведение, которое не гуглится в issues - тогда можно и попробовать разобраться что там под капотом. По факту, такая ситуация за последние 3 года была только 1 раз.
Хорошо это или плохо - вопрос открытый. Но так есть.
По крайней мере, сужу по личному опыту - если у вас он расходится, то поправьте.
nameless323
04.11.2022 19:59А еще вы можете знать как работает sort в условном питоне, знать другие сортировки и понять что для вашего конкретного случая лучше подойдет другая сортировка из-за известной природы данных например (ну допустим надо сортировать целые положительные числа не больше 1000), и вы можете сразу использовать более оптимальную сортировку сохранив время и нервы следующим программистам кому возможно придется оптимизировать продукт в будущем.
vkni
04.11.2022 20:41Или хотя бы догадываться, что метод нахождения максимального элемента в массиве путём сортировки, а потому взятия первого — это немножечко не то, что, как правило, стоит делать.
0xd34df00d
04.11.2022 20:48+1Но, кстати, в ленивых языках это будет иметь примерно схожую асимптотическую сложность :]
Я как-то, когда ещё был неопытным в хаскеле, пытался побенчмаркать Берроуза-Уилера, где надо было среди прочего сортировать, и для проверки результата использовал что-то вроде
take 10 . runBurrowsWheeler
. Удивился, что оно работало существенно быстрее сишной реализации, а потом только понял, что я бенчмаркаю частичную сортировку первых 10 элементов.
slonopotamus
04.11.2022 12:24+1Для понимания конкретной предметной области нужно понимание конкретной предметной области, а не формальное высшее образование. Получить понимание предметной области можно кучей разных способов.
zede
03.11.2022 21:44+1К счастью, программисты приучены учиться все время и освоение контекста на новой работе вполне реально и обычная практика за время онбоардинга. Пришел, увидел кучу незнакомого, погрузился в область и продолжил, либо ушел. А так если требуется что-то гипер специфичное, то скорее проще базово обучить разработке специалистов этой области.
dimoff66
03.11.2022 22:10+15Вы намешали в кучу два понятия - высшее и математика. Нужно ли для овладения профессией идти в вуз? Безусловно нет. Я работал в веб студии, где из 30 человек лишь трое учились в профильном вузе и лишь один из них его закончил. Тем не менее они получали большие проекты от очень крупных компаний и успешно их реализовывали.
Нужна ли для программирования высшая математика. Мой 20-летний опыт говорит что нет. А даже если бы и была нужна, то снова вопрос что мешает изучить её самостоятельно при обилии материала в интернете? Ничто.
Поэтому опыт показывает что разговоры о необходимости вышки ведут исключительно те, у кого она есть, тем самым они набивают себе цену. Ни один из программистов, кто пришёл в ит самостоятельно, не жалуется на отсутствие вышки. У них есть большой выбор работы и хорошие зарплаты.
sci_nov
03.11.2022 23:21+2Я думаю, что математика нужна для организации работы мозга, как тренировка, как дисциплина. ВУЗ - это тоже своего рода дисциплина, по крайней мере по изначальной задумке. А так да, материалы в интернет по программированию вполне позволяют самообучаться.
Однако, как бы то ни было, мудрое сочетание теории и практики - золотой навык, который без высшего образования, всё-таки, трудно получить, и даже имея высшее далеко не сразу приходит такой навык (если вообще приходит). Нельзя выбрасывать теории, но и нельзя игнорировать практический опыт.dimoff66
04.11.2022 03:09Я думаю, что математика нужна для организации работы мозга, как тренировка, как дисциплина.
В школе у вас математики не было? Или просто за десять лет натренировать мозг нереально и нужно ещё пять?
Однако, как бы то ни было, мудрое сочетание теории и практики
Вот именно поэтому вуз и кажется мне бессмысленным, поскольку там что угодно, кроме мудрого сочетания теории и практики. Очевидный перекос в сторону теории, причём неизбежно устаревающей, ибо высокоуровневое программирование это в сущности набор абстракций, которые очень быстро меняются и совершенствуются с развитием систем, вследствие чего все ваши теории весьма быстро устаревают, и в сухом остатке мы имеем живой ум(либо же его отсутствие) способный воспринимать новые абстракции усовершенствованных языков и подходов и использовать их в работе.
vkni
04.11.2022 07:56+1абстракций, которые очень быстро меняются
Извините, что там быстро поменялось? Модная в узких кругах линейная логика появилась до того, как я пошёл в институт.
Ioanna
04.11.2022 09:44+5В школе просто алгебра и геометрия (по отдельности), а в вузе матанализ, "алгебра и геометрия" (вместе), комплексный анализ, матлогика, теория вероятностей и матстатистика, дискретная математика, теория принятия решений, теоретические основы автоматизированного управления и еще многое другое уже на стыке математики и программирования. Вся эта комбинация вправляет мозги на всю жизнь)
sci_nov
04.11.2022 10:00"В школе у вас математики не было? Или просто за десять лет натренировать мозг нереально и нужно ещё пять?"
Была. Но понятие "матрицы", введенное в сентябре на первом курсе, сломало мозг :), перевернуло сознание. Не так было очевидно с индексацией, то же умножение матриц - целый новый мир, не говоря уже про линейные зависимости, определители...
sci_nov
04.11.2022 10:02"Очевидный перекос в сторону теории"
Да, на то он и ВУЗ. Нельзя всё сразу, и даже работая после инженером, такой золотой опыт приходит не сразу.
yatanai
04.11.2022 15:07Проблема всей отрасли в целом, что она недостаточно формализована, из-за чего сбор информации для обучения других превращается в пытку. Темпы развития ПО требуют улучшать только то, что приносит деньги. И в итоге оно развивается больше как сфера бизнеса, нежели инженерная дисциплина.
Как пример, можно почитать про алокацию и покрытие тестами. Если первое будет в стиле "ну там аэ линейный алокатор крч, эээ", то на второе тебе дадут 100500 примеров как что и где писать, даже свой фреймворк для тестов с нуля.
(Мимо крестопоклонник)
nameless323
04.11.2022 20:01+2Матанализ, линейная алгебра, дифуры и т.п. особо не устарели с того момента как мне их преподавали в вузе. Зато теперь по работе если я вижу криволинейный интеграл я не пугаюсь и не иду разбираться с 0 что вообще такое интегральное исчисление.
PuerteMuerte
03.11.2022 23:37+15Вы намешали в кучу два понятия - высшее и математика.
В отличии от непосредственно программирования, как раз математику без учёбы в ВУЗе освоить крайне малореально. И если предметная область требует наличия математических знаний, надо получать высшее.
что мешает изучить её самостоятельно при обилии материала в интернете? Ничто.
Как минимум,
а) отсутствие учебного плана, по которому можно в нужном порядке изучать различные разделы
б) отсутствие человека, который в интерактивном режиме объяснит непонятные моменты, который в случае изучения высшей математики будет на порядки больше, чем при изучении программирования
в) ничтожное количество профильных форумов, по сравнению с программированием, где можно получить ответы на свои вопросы
г) длительный срок обучения. Стать программистом-джуном за полугодичный курс худо-бедно можно, если вы прилежный ученик. Стать математиком-джуном, это надо несколько лет упорного труда потратить - все эти матаны, терверы, матстаты, их просто много. И если программист может обойтись каким-то одним направлением, в котором работать, бэкграунд математика включает массу смежных направлений, которые все надо понимать.
разговоры о необходимости вышки ведут исключительно те, у кого она есть, тем самым они набивают себе цену
Ну, да, но это работает в обе стороны, потому что разговоры о ненужности вышки вышки ведут те, у кого её нет, и обычно с той же целью :)
Истина тут, как всегда, банально посередине - есть предметные области, где вышка нужна, есть где не нужна. CRUD-формочки клепать можно и без вышки, финтех автоматизировать лучше с вышкой за плечами, причём желательно финансовой/экономической, а не ИТ. Так-то да, если у вас нет вышки, сейчас в ИТ вы без куска хлеба не останетесь, но если у вас она есть, вам будут доступны дополнительные возможности карьерного/профессионального развития, что лишним не бывают.
M_AJ
04.11.2022 00:01+5Как минимум,
а) отсутствие учебного плана, по которому можно в нужном порядке изучать различные разделы
Я бы еще добавил к этим пунктам отсутствие человека, который может проверить решение и указать на ошибку. Нет, можно конечно найти себе личного ментора, который будет все это делать, но едва ли для большинства это проще, чем отучиться в вузе.
Ну, да, но это работает в обе стороны, потому что разговоры о ненужности вышки вышки ведут те, у кого её нет, и обычно с той же целью :)
Тем не менее, в одну из сторон это все же работает лучше, поскольку тому у кого есть вышка, есть с чем сравнивать – он побывал в обоих состояниях, и в состоянии "без вышки" и в состоянии "с вышкой", тот же, кто ее не получал, находился только в одном из них :)
0xd34df00d
04.11.2022 02:04+2В общем я с вами согласен, кроме пары моментов.
отсутствие учебного плана, по которому можно в нужном порядке изучать различные разделы
Это по факту не особо большая проблема — можно отталкиваться от того, что интересно и хочется изучить, и разматывать клубок обратно.
Стать математиком-джуном, это надо несколько лет упорного труда потратить — все эти матаны, терверы, матстаты, их просто много. И если программист может обойтись каким-то одним направлением, в котором работать, бэкграунд математика включает массу смежных направлений, которые все надо понимать.
Не надо. Мне интересны всякие там теории типов с матлогами — и мне совершенно не нужны матаны (как анализ бесконечно малых), теорверы, статы, диффуры, урматы, функаны, ТФКП, методы оптимизации, и прочая хрень из стандартного курса прикладной математики.
Да и по времени — оказалось достаточно года-двух чтения всяких книжек и прорешивания упражнений, чтобы вполне себе на равных разговаривать с выпускниками факультетов чистой математики по этим направлениям.
Ну, да, но это работает в обе стороны, потому что разговоры о ненужности вышки вышки ведут те, у кого её нет, и обычно с той же целью :)
Вышка есть, считаю ее ненужной для подавляющего большинства программистских задач.
vkni
04.11.2022 07:43+1Да и по времени — оказалось достаточно года-двух чтения всяких книжек и прорешивания упражнений, чтобы вполне себе на равных разговаривать с выпускниками факультетов чистой математики по этим направлениям.
Ну, то есть, ты за стандартные 1.5 года получил "магистра" по этой тематике, имея 4 курса близкой к математике специальности + магистра физики. Ну нормально. А если ты ещё 3 года потратишь на аспирантские курсы + выпустишь примерно 3 статьи, то будешь на равных с Эриком :-).
0xd34df00d
04.11.2022 08:25+3Только те курсы математики (и физики), которые у меня были в вузе, помогли в изучении всей этой ерунды, ну, разве что на уровне «воспиталось математическое мышление» (но это неточно).
И эти полтора курса были по книжке в среднем раз в три месяца, от трёх до шести книг (смотря как считать).
vkni
04.11.2022 16:20По моему опыту, я иду от конкретного к абстрактному. Я не могу воспринимать арифметику Пеано, не научившись школьной в совершенстве. Поэтому, кмк, может не всё, но оно полезно.
Да и в програзме суммирование рядов вполне себе нужно. Не даром ассимптотики везде спрашивают — это реально пригождается, пусть и не ежедневно. Да, можно, как один китаец мне на собеседовании сказал, "заучить", но зачем, если можно понять? И, соответственно, выводить.
0xd34df00d
04.11.2022 17:58Да и в програзме суммирование рядов вполне себе нужно. Не даром ассимптотики везде спрашивают — это реально пригождается, пусть и не ежедневно. Да, можно, как один китаец мне на собеседовании сказал, "заучить", но зачем, если можно понять? И, соответственно, выводить.
Те асимптотики, которые вылезают в программировании, обычно получаются через очень простые соображения, и суммировать ряды там не нужно. Ну, то есть, я, наверное, помню этак целых случая два, когда через интегрирование можно было бы получить более точную оценку (какой-нибудь там log n вместо n).
На практике, впрочем, один фиг бенчмаркать надо, потому что кроме асимптотик есть ещё и константы.
vkni
04.11.2022 20:38-1через очень простые соображения, и суммировать ряды там не нужно
Это как это?
В смысле — можно на пальцах просуммировать частичные суммы рядов? Ну можно, но шаг влево, шаг вправо и опа, как сделать неизвестно. А дальше вон, мне там выше рассказывают, что абстракции ООП должны инкапсулировать усё. Ха, ха, ха.
Высший пилотаж в оценках сложности — это работать через производящие функции. Вот это позволяет получить и коэффициенты, правда при этом надо иметь более детальную модель машины, чем просто RAM.
И туда, хочу отметить, твоя условная деятельность и должна идти: автоподсчёт сложности подпрограммы — светлое будущее всего человечества.0xd34df00d
04.11.2022 20:46+1Это как это?
Ну, типа, «проходим один раз по всему массиву — значит, домножаем на n, проходим по половине массива рекурсивно — значит, вылезает логарифм». Такими соображениями покрывается походу этак 99% задач на собеседованиях, а на практике — ну, см. выше, бенчмаркать надо.
Более того, слишком выпендриваться плохо. Мне известны случаи на интервью, когда, например, надо было отсортировать только часть массива из тех элементов, которые подходят под какое-то условие, а весь массив пробегался фиксированное число раз. И, в общем, если интервьюверу написать, что сложность алгоритма — O(n + m log m), где n — весь размер массива, m ≤ n — число удовлетворяющих условию элементов, то интервьювер расстраивался и ставил минусик, потому что считал, что это эквивалентно O(n log n), и типа ты не понимаешь O-нотацию.
И туда, хочу отметить, твоя условная деятельность и должна идти: автоподсчёт сложности подпрограммы — светлое будущее всего человечества.
Справиться бы для начала с автодоказательством, что за границы массива не вылезаем.
vkni
04.11.2022 20:57+2интервьювер расстраивался и ставил минусик, потому что считал, что это эквивалентно O(n log n), и типа ты не понимаешь O-нотацию.
Ну дятлов-то полно. Я летом беседовал с разными кадрами, народ, как правило, не знает, что такое хвостовая рекурсия. Это к вопросу о нужности профильного образования (SICP — это вообще-то "Введение в специальность").
Такими соображениями покрывается походу этак 99% задач на собеседованиях, а на практике — ну, см. выше, бенчмаркать надо.
На практике очень разное попадается. И иногда очень развесистые вещи, но это в интересных группах.
Ещё проблема отсутствия образования в том, что "люди не знают того, чего они не знают". Если человек не слышал про ряды, не научился их суммировать, то когда ему попадётся жизненная возможность это использовать, он её пропустит. То есть, банально не увидит.
Ну да, некоторые вообще дальтоники. Но зачем сознательно выбирать этот путь?
haqreu
06.11.2022 00:28В программировании суммирование рядов - это скорее Тейлор/Маклорен - Фурье/Лаплас, нежели асимптотики сложности, и это очень-очень нужно.
0xd34df00d
06.11.2022 03:17Зачем? Ну, кроме тех задач, где предметная область подразумевает Тейлоров-Фурье-Лапласов?
haqreu
06.11.2022 10:35Ну, обработка сигналов - довольно обширная предметная область, и было бы странно её исключать из кругозора программистов. Так можно договориться и до того, что деревья поиска не нужны.
iig
04.11.2022 10:04можно отталкиваться от того, что интересно и хочется изучить, и разматывать клубок обратно
Хорошо, если вы гений типа Ломоносова.
Вышка есть, считаю ее ненужной для подавляющего большинства программистских задач.
Ну да, правило 80%/20% и тут годится ;)
yatanai
04.11.2022 15:23+1Банально, написать трекер на МК. (Ремешок на руку цепляешь и он отслеживает движение)
Ты идёшь, читаешь, узнаешь что такое кватернионы, узнаешь матан, видишь что датчики шумят, читаешь за фильтры, работает но херово, не нравится идёшь читать за другие фильтры, находишь целую область что этим занимается, находишь страшные слова с дисперсиями вероятностей, читаешь чо это такое, читаешь что это это такое....(минус две недели) Понимаешь что большинство шумящих измерений нужно калибровать, понимаешь что это дорого и пытаешься в мат анализ чтоб научится подбирать коэффициенты для фильтра. Худо бедно подобрал параметры - работает.
9 классов, без вышки, трекер с "удовлетворительной" точностью, не победил только накопление ошибки, нужно калибровать каждые пол часа.
Может стоило бы и в ВУЗе отучиться, потратил бы меньше времени на поиск инфы, но в целом за пару-тройку месяцев разобрался, понял что есть и куда расти по этой теме.
Upd единственный проект за мою жизнь с матаном, даже в написании компиляторов матан не нужон.
iig
06.11.2022 12:19трекер с "удовлетворительной" точностью, не победил только накопление ошибки, нужно калибровать каждые пол часа
То есть задача вроде как решена, но пользоваться результатом фактически невозможно.
Зато узнал про матан, фильтры и пр.
0xd34df00d
04.11.2022 17:36+1Хорошо, если вы гений типа Ломоносова.
Не думаю, что там гениальность нужна. ИМХО достаточно интереса.
nameless323
04.11.2022 20:29Интереса и времени. Обычно с первым все в порядке, со вторым все проще когда молодой и без семьи.
jaoaja
05.11.2022 21:51еще раз перечитайте на что отвечаете. математик-джун - имеет теорию, но не имеет опыта, и если вы
>Мне интересны всякие там теории типов с матлогами — и мне совершенно не нужны матаны (как анализ бесконечно малых), теорверы, статы, диффуры, урматы, функаны, ТФКП, методы оптимизации, и прочая хрень из стандартного курса прикладной математики.
этого не знаете, то вы даже джуном не стали) да и говорить на темы на одном уровне и решать задачи все же разные вещи, разве нет? а вообще лучше ботать матешу(всю естественно) и параллельно решать олимпиадные задачи на любые темы. это просто прокачка мозгов, а так худо-бедно джуном лет за 5 можно
0xd34df00d
05.11.2022 22:20если вы [...] этого не знаете, то вы даже джуном не стали)
Давайте в привычных программистских терминах. Могу ли я быть программистом-джуном, если я знаю C++ на уровне джуна, но не знаю JS, python, ruby, SQL, etc?
да и говорить на темы на одном уровне и решать задачи все же разные вещи, разве нет?
Говорить о решении задач, конечно, а не за чашечкой кофе о жизни. Впрочем, давайте лучше на конкретных примерах.
Положим, я хочу сформулировать некоторую систему типов и доказать, что у неё там progress и preservation выполняется. Зачем мне здесь диффуры, матстаты и ТФКП?
Мой бывший сокурсник, положим, хочет сформулировать и доказать какую-то теорему о гауссовых процессах. Зачем здесь ему уметь отличать экстенсиональные теории типов от интенсиональных и понимать, зачем нужна и чем вредна аксиома K?
Товарищ выше считает distance correlation'ы, другой товарищ пытается оптимизировать развоз товаров — зачем им эти теории типов?
DvoiNic
04.11.2022 08:43И если предметная область требует наличия математических знаний, надо получать высшее.
а если не требует? На мой взгляд, сейчас (т.е. когда разнообразие задач увеличилось) в основном (т.е. подавляющему числу) программистам математика (выше арифметики) не требуется.
Но мозги математика дисциплинирует, это точно. Хотя возможен и обратный процесс — «хорошие мозги» легче «впитывают» математику.а) отсутствие учебного плана, по которому можно в нужном порядке изучать различные разделы
наличие учебных планов в [отечественных] ВУЗах не говорить о том, что в тех планах «разделы изучаются в нужных порядках». И что хоть как-то показывается взаимосвязь разделов, требования. Но это не проблема высшего образования, это проблема конкретной его реализации.б) отсутствие человека, который в интерактивном режиме объяснит непонятные моменты
наличие ментора — бесценно.Aleshonne
05.11.2022 12:33наличие учебных планов в [отечественных] ВУЗах не говорить о том, что в тех планах «разделы изучаются в нужных порядках». И что хоть как-то показывается взаимосвязь разделов, требования. Но это не проблема высшего образования, это проблема конкретной его реализации.
Обычно в вузе есть достаточно опытные преподаватели, которые чисто на собственном опыте могут сказать, в каком порядке студентам нужно изучать темы. Иногда, правда, им мешают образовательные стандарты, из-за чего и получается ситуация в стиле «сегодня я вам расскажу как делать вот эту фигню, а зачем эту фигню делать и почему именно так, а не иначе — вам расскажут через два года».
DvoiNic
06.11.2022 10:35чисто на собственном опыте могут сказать
во-первых, это должны не «преподаватели говорить», а учебный план. типа «для курса ОТЦ нужны такие-то разделы математики и такие-то физики». «для курса аналоговой электроники нужны курс ОТЦ и вот такие разделы математики», а «для ЦОС » — соответственно свой набор. Ну и аналогичная связь внутри разделов математики…
во-вторых, «могут» <> «делают».
в третьих, все сводится «учите эту фигню, потому что она в учебном плане». Из-за чего на 4-5 курсе у некоторых появлялись озарения «если б я знал, что *** в этом предмете понадобится, я б ее на первом курсе учил, а не проходил»
Да, нам («небольшой группе активных студентов») взаимосвязь и необходимость различных предметов рассказывали преподы и старшекурсники, но это были «частные разговоры» в лабе за кружкой чая. А бОльшая часть сокурсников «учила» потому, что «есть в расписании».
И за 30 лет ситуация не сильно изменилась (сын сейчас заканчивает этот же ВУЗ)
N-Cube
04.11.2022 10:06После учебы в вузе вы будете свято уверены, что бесконечно малое это есть не реальная величина (согласно аксиоме Архимеда) и очень удивитесь, что в реальности это не работает. К примеру, Ньютон и прочие «древние» (не только физики, но и математики, кстати говоря) всегда оперировали бесконечно малыми как реальными величинами (нестандартный анализ), что физически корректно в силу квантованности пространства и времени. И в численных вычислениях вы с концепцией бесконечно малого ка предела последовательности окажетесь в ситуации гораздо хуже самоучки, кто для самообразования почитал историю физики или математики:) А уж чтобы кто-то после вуза умел оперировать системами функций (изучите свойства системы тригонометрических функций разного масштаба - получите анализ Фурье, к примеру), которые являются фракталами, кстати говоря - но почему-то фракталы в итоге описал прикладник Мандельброт, а вовсе не фундаментальные математики. И это я еще о реальном уровне выпускников не говорю.
0xd34df00d
04.11.2022 17:38+1Это все оттого, что людям нестандартный анализ не дают. Правда, для него нужен не самый тривиальный матлог, что дает трудности с составлением программы обучения.
0xd34df00d
04.11.2022 01:56+2А даже если бы и была нужна, то снова вопрос что мешает изучить её самостоятельно при обилии материала в интернете?
Отсутсвие обратной связи и проверяющих задания.
Не, понятно, что по calculus 101 есть куча интерактивных курсов на курсере-степике-етц, где и задания проверят, но этим же математика не ограничивается.
Можно, конечно, спрашивать что-то на каком-нибудь math.stackexchange.com, но там вам никто ничем не обязан, и просить проверить каждое решение каждой неочевидной задачи замучаетесь.
bak
03.11.2022 23:27+4А академические знания можно только в ВУЗ-ах получить? Выпускникам ВУЗов видимо и в голову прийти не может что некоторым людям не нужен ВУЗ чтобы научиться матрицы перемножать или читать формулы.
vassabi
03.11.2022 23:51+4я методичку по линейной алгебре взял из библиотеки в 10м классе и всю ее прочитал.
Не скажу, что сильно фундаментально продвинулся, но линейное программирование я более-менее понял еще до университета. И еще я для себя понял, что все возможно выучить - если есть мотивация и свободное время
0xd34df00d
04.11.2022 01:59+10Хотелось бы побольше узнать о вашем опыте, потому что продвинуться в линейном программировании через методичку по линейной алгебре — нетривиальное достижение, так как это довольно разные области математики.
Ndochp
05.11.2022 00:35+1Так линпрограммирование это же симплекс и тд, нам на линейной алгебре его давали вроде.
mayorovp
05.11.2022 09:20Капец. Хотя чему я удивляюсь, в вузах же считают, что линейная алгебра — это про матрицы, а симплекс-метод использует матрицу...
Ndochp
05.11.2022 12:39+1А на каком спецкурсе ВУЗа вы ожидаете увидеть симплекс метод?
Я конечно подозреваю, что "если у вас был предмет высшая математика, то высшей математики у вас не было", но вот в какой семестровый/двухсеместровый курс воткнуть симплкекс кроме линейки я не представляю.
Ну если только есть что-то совсем прикладное и в его рамках изучить линейное программирование как один из методов решения прикладных задач. У нас совсем прикладной курс был двигетели летательных аппаратов, поэтому симплекс был на линейке.arheops
05.11.2022 14:59У нас симплекс был в «теории программирования». Там же были методы градиентного спуска и системы с обратной связью.
haqreu
06.11.2022 00:37+1А где такой курс читали? Потому что я в теорию программирования отнёс бы матлогику, вычисляемость, исчисление типов и т.д...
arheops
06.11.2022 01:00Вычисляемость там тоже была. КНУ, 2002 год.
haqreu
06.11.2022 01:04Так, а сколько часов было отведено на курс, который объединял вычисляемость и лин. программирование? Если меньше пятисот, то у меня плохие новости :(
haqreu
06.11.2022 01:22Ну, насколько я понял, мы говорим про ваш курс, который был озаглавлен «теория программирования», в рамках которого преподавались в том числе вычисляемость, методы градиентного спуска и лин. программирование?
0xd34df00d
05.11.2022 18:15+2А на каком спецкурсе ВУЗа вы ожидаете увидеть симплекс метод?
На «методах оптимизации», например, как оно у нас и было. А линейная алгебра вместе с аналитической геометрией сама по себе успешно заняла два семестра, без всяких симплекс-методов, PCA и прочего, что можно натянуть на базис из линейки, потому что «там матрицы».
haqreu
06.11.2022 00:33Линейное программирование - это подраздел исследования операций, а не алгебры как таковой...
vassabi
05.11.2022 12:20ну там была не тоненькая методичка, а такое себе "пособие для ВТУЗов" ..
и да, как уже выше написали, - в начале там база про векторы, тензоры и матрицы, системы уравнений и линейные преобразования (пару абзацев про теорию представлений),
а потом уже про выпуклые линейные множества и симплекс-метод (на примерах транспортной задач, максимального потока и т.д.) и в конце про двойственную задачу (с примерами на две-три переменных и несколькими уравнениями - с иллюстрациями графиков).
На самом деле - там было не намного сложнее, чем в учебнике геометрии Погорелова последние главы : да, много разного и нового, но все равно каждая следующая теорема - выводится либо сразу из простых аксиом и определений, либо из предыдущих теорем.
sci_nov
04.11.2022 10:05Люди разные. Мне, например, по горло хватало школьной программы, плюс подготовительные курсы к поступлению в ВУЗ не давали возможности читать что-то дополнительное (новое) и в принципе не нужное при поступлении (никто линейную алгебру не требует на вступительных экзаменах, наоборот могут что-то заподозрить :)).
semmaxim
04.11.2022 13:50+3Скорее нужен ВУЗ, чтобы показал, что существует такое понятие как "матрицы" и что с ними можно выполнять определённые действия. ВУЗ по сути даёт сжатую и очищенную выборку знаний для определённой ситуации. Если Вы без ВУЗа захотите изучить "математику", то умрёте от невероятного обилия понятий, знаний и совершенно разных направлений и книг по той самой "математике".
DvoiNic
04.11.2022 14:12чтобы показал, что существует такое понятие как «матрицы» и что с ними можно выполнять определённые действия
и что обобщением к матрицам и действиям над ними упрощаются многие реальные действия (задачи).
bak
04.11.2022 14:19+31) Открою вам страшную тайну - чтобы узнать что есть понятия "матрицы" или "кватернионы" вовсе не нужен ВУЗ. Можно, к примеру, начать писать игру на том же Unity и обнаружить и матрицы и кватернионы и всё остальное.
2) "математику" нельзя изучить, можно изучить конкретные разделы математики. В разных сферах они свои. И чтобы в них разобраться, представьте себе, тоже не нужен ВУЗ. "Умирать" тоже не обязательно, достаточно иметь время и желание.
3) Не понимаю почему все выделяют математику. В некоторых областях нужна физика, в других биология. К примеру недавно мне понадобилось посчитать химические реакции чтобы получить определенные вещества, что мне теперь - в ВУЗ по химии предложите идти? А когда я захочу сделать светящееся генно-модифицированное растение - в ВУЗ по биологии?
N-Cube
04.11.2022 14:48+3Притом игроделы реально знают и умеют применять кватернионы, но выпускники (российских) ВУЗов знают только слово («краснодипломники» еще и историю изобретения припомнят).
semmaxim
04.11.2022 15:03+11) Открою вам страшную тайну - чтобы узнать что есть понятия "матрицы" или "кватернионы" вовсе не нужен ВУЗ. Можно, к примеру, начать писать игру на том же Unity и обнаружить и матрицы и кватернионы и всё остальное.
2) "математику" нельзя изучить, можно изучить конкретные разделы математики. В разных сферах они свои. И чтобы в них разобраться, представьте себе, тоже не нужен ВУЗ. "Умирать" тоже не обязательно, достаточно иметь время и желание.
Вы не поняли. Я ни в коем случае не считаю, что обучение в ВУЗ-е - это нечто сакральное. Это обычное изучение с обычным учителем, который также обычно всё изучал и читал. Всё это вполне можно сделать самому. И любой умный человек, отягощённый свободным временем, вполне на это способен. ВУЗ просто сильно помогает с получением таких знаний. И там работают крайне опытные в деле передачи знаний профессионалы. Вспомните, например, свои конспекты по лекциям по физике. Это же превосходная насыщенная выжимка знаний, которая за 100-200 часов на базовом уровне объяснила практически весь мир, который нас окружает. Мне страшно представить, сколько надо было бы потратить времени и сил, чтобы самому получить такое количество знаний. Одних только книг десятки прочитать. И во всём этом не запутаться. И это я не беру лабораторные работы (прикоснуться ко спектрографу и наглядно изучить способ выяснение состава материалов вне универа мне больше нигде не удалось).
3) Не понимаю почему все выделяют математику. В некоторых областях нужна физика, в других биология. К примеру недавно мне понадобилось посчитать химические реакции чтобы получить определенные вещества, что мне теперь - в ВУЗ по химии предложите идти? А когда я захочу сделать светящееся генно-модифицированное растение - в ВУЗ по биологии?
Понятия не имею. Наверное потому, что из непрофильных предметов для программиста наиболее близка именно математика.
Если бы мне такое понадобилось, то я бы начал с чтения учебников :)
DaneSoul
04.11.2022 15:47И там работают крайне опытные в деле передачи знаний профессионалы. Вспомните, например, свои конспекты по лекциям по физике. Это же превосходная насыщенная выжимка знаний, которая за 100-200 часов на базовом уровне объяснила практически весь мир, который нас окружает. Мне страшно представить, сколько надо было бы потратить времени и сил, чтобы самому получить такое количество знаний.
Так эти же преподаватели пишут учебники по своим курсам. И вместо лекций и конспектов можно взять учебник и получить туже самую систематизированную вижимку знаний.
Другое дело что не все учебники хороши и выбирать надо то что соответствует твоему уровню и задачам. Ну так и в ВУЗе полно бездарных преподавателей, и в отличии от учебника выбора преподавателя обычно нет.vkni
04.11.2022 16:29Учебник неинтерактивен. В общем, конечно, можно быть Зельдовичем, но большинство людей — это простые смертные.
semmaxim
04.11.2022 17:32Так да, я это и пишу. Обучение в ВУЗ - это, по сути, изучение материала (по учебнику и/или по лекциям), практические занятия, интерактив с учителем, близкое общение со сверстниками, общее образование и аттестация полученных знаний. Всё это можно получить и самому - здесь нет ничего невозможного. Но придётся самому выяснять, какую литературу изучать (а учебников могут быть сотни!), искать где-то установки для практической работы, искать преподавателя и пр.
Aleshonne
05.11.2022 13:11+1Разные учебники по одному и тому же предмету предполагают немного разный набор требований для изучения и дают немного разный набор знаний. Например, в вузе А на первом курсе читают отдельный предмет «Теория множеств», а в вузе Б такого предмета нет и теория множеств частично даётся в предмете «Математический анализ» (необходимый минимум для изучения оного), а всё остальное — в предмете «Функциональный анализ». Границы математических предметов часто размыты и разные профессора могут относить одно и то же к разным предметам (например, теория меры где только не всплывает — от матана до теорвера, потому что изучать надо, а для отдельного предмета эта тема слишком мала).
Допустим, вы хотите изучить функциональный анализ и выбрали учебник, написанный преподавателем вуза А (очень хороший и имеющий кучу положительных отзывов), а теорию множеств вы изучали по соответствующему разделу учебника по матанализу, который написал преподаватель вуза Б (это тоже очень хороший учебник). Но есть маленький нюанс — примерно половина теории множеств у вас не была охвачена вообще, что вызовет кучу проблем в изучении функционального анализа.
В вузе преподаватель обычно знает, что вы изучали раньше, и порекомендует учебник, соответствующий вашему уровню. При самостоятельном изучении — задача определять границы предметов ложится на вас, а сделать это, не имея законченного математического образования, не так то просто. Я бы при самостоятельном изучении высшей математики посоветовал как минимум ориентироваться на программу какого-нибудь хорошего вуза (они обычно есть в открытом доступе), а ещё лучше — нанять специалиста, который составил бы индивидуальный план с учётом ваших знаний и ожиданий.
0xd34df00d
04.11.2022 17:42+1При этом у нас в вузе (топовом в РФ) линал давали отвратительно и через пятую точку, и более-менее что-то понимать я стал, когда через пару лет после выпуска прочитал книжку, написанную нормально как про алгебру, а не как в вузе, про ковыряние матриц без понимания
физическойматематической сути линейных операторов.vassabi
05.11.2022 12:35а у нас в универе на линейной алгебре самым запоминающимся ИМХО было про базисы. Очень интересная была разница в объяснениях - между преподом-алгебраистом и преподом-геометром :)
urvanov
04.11.2022 00:29+5ак умножать матрицы и вообще не понимает более половины символов в формулах.
Зачем это всё? Мы просто JSON-ы по REST-ам гоняем туда-сюда.
movl
04.11.2022 04:10Так самые банальные задачки могут быть связаны с этим умножением матриц. Например есть какая-нибудь таблица значений, и есть список коэффициентов для этих значений, необходимо просуммировать значения в каждой строке таблицы с учетом коэффициентов. Первое что на ум приходит, это допустим подсчитать общую стоимость различных услуг для каждого пользователя.
По сути это задача умножения матрицы на вектор, но подобные абстракции в формулировке или решении задачи могут вызывать недоумение у неподготовленных людей. Не то чтобы для примера выше нужны подобные абстракции, эта задача и так легко описывается. Но если источников данных не два, а чуть больше, и расчеты немного сложнее, то использование элементов той или иной теории может оказаться просто удобным инструментом, как для формулирования, так и для реализации задач.
То есть, как минимум, наличие общей теоретической базы может позволить общаться на простом языке, через использование сложных абстракций. Хотя соглашусь, что в большинстве случаев это вовсе необязательно, многие задачи можно и на пальцах объяснить.
DvoiNic
04.11.2022 09:09+1большинстве случаев это вовсе необязательно, многие задачи можно и на пальцах объяснить.
«объясняю вам на пальцах. Видите средний палец?»/s
ну а если серьезно, то даже в парапрограммировании иногда применяется та же «линейка» — начиная от infostart.ru/1c/articles/730702 и заканчивая infostart.ru/1c/articles/158512
Но применяет ее хорошо если 1%
N-Cube
04.11.2022 10:41Чем вам поможет концепция умножения матрицы на вектор, если ни то ни другое в оперативную память заведомо не помещается? Тут поможет только декомпозиция задачи и составление графа зависимостей и его оптимизация… что далеко выходит за пределы познания матрицы и вектора. А если помещаются, то просто берете любую стандартную библиотеку :)
GCU
04.11.2022 01:17+4Пример с умножением матриц неправильный ибо конкретно эта задача решается элементарно/берется готовая из библиотеки. Нужно смотреть глубже - зачем оно вообще понадобилось, а точно ли оно нужно, насколько применимо и т.д. в частности возможно что для этой задачи матрицы не надо перемножать, а обойтись кватернионами например. И тут срабатывает то, что в ВУЗе все знают про кватернионы и поэтому не будут косячить с решением/перемножением матриц. Для того чтобы вкусно готовить / хорошо рисовать / переводить с английского не обязательно иметь профильное образование, но профессионального повара, который плохо готовит, ещё стоит поискать. Никто не будет работать с врачом или например инженером строителем без образования/ сертификации и т.д. Черт возьми даже вождение автомобиля требует получения прав - от этого непосредственно зависит жизнь и здоровье людей. И там где от программиста тоже зависит жизнь и здоровье людей - внезапно тоже требуется профильное образование :) как раз что-то серьезное и ответственное.
Так исторически сложилось, когда ЭВМ были большими и решали ответственные важнейшие задачи своего времени, просто так без знания вышки / дискретки /численных методов / архитектуры ЭВМ там было нечего делать.
Но на современном рынке труда это от программистов не требуется, от ответственности отказ полнейший. Ну и вообще зачем идти в лабораторию/НИИ/завод где нужен диплом и будешь нести ответственность если можно найти место где и отвечать не надо и платят больше :)
И образование, я надеюсь,(давно было) ещё гарантирует хоть какой-то минимальный и достаточный стандарт для выполнения работы по профессии. И программирование в этом плане не сильно отличается от множества других профессий.
arheops
04.11.2022 17:37А вот не факт.
КНУ, кибернетика. Нету квартернионов в программе.
Я вот первый раз слышу это слово.
Но проблема отсутствия образования в том, что без образования ты можешь даже не догадываться, что приблизительно в задаче можно применять и чего гуглить. Нагуглить что-то, чего вообще никогда не слышал на самом деле очень сильно нетривиальная задача.
Да, можно успешно работать мидлом. Но очень желателен хотя бы один человек в команде, кто таки учился.
Fen1kz
04.11.2022 01:54+19Меня как программиста-самоучку бесят "академики", которые считают, что умножение матриц это какое-то тайное знание, которое не просматривается в виде лекций/упражнений на ютубе за пару часов. Такое ощущение, что вас в вузах не столько учат, сколько промывают мозг какие вы классные, нужные и хорошие.
PuerteMuerte
04.11.2022 02:51+4Ну хорошо, это всего лишь умножение матриц. А оптимизируйте мне, плз, регулярную доставку товара из пары складов в несколько магазинов - с учётом сроков доставки, дозагрузки фуры, минимизации простоя фуры (и вообще их количества), расхода топлива. Это уже как раз обычная приземлённая задача для программистов. И ладно, я не прошу задачу решить, нагуглите хотя бы, какой из методов нахождения экстремума функции тут применить, если вы это не изучали :)
SerjV
04.11.2022 04:03+4Это уже как раз обычная приземлённая задача для программистов.
Сколько требуется программистов для замены перегоревшей лампочки? Ни одного - это аппаратная проблема!
В вашем же случае:
Для начала надо ответить на вопрос - а точно ли это задача для программиста? (да, лет 30 назад больших сомнений в этом не было, но время-то идёт...)
Для этого задуматься, а что такое "программист"?..
И если у вас точно не возникнет хотя бы подозрения, что "программист" понятие весьма растяжимое в плане "что у человека на входе" (на выходе понятно, что программный код, иначе он уже точно не программист), и что это поставленная вами задача - точно задача именно для программиста, то тогда повторите еще раз свою мысль ;)
PuerteMuerte
04.11.2022 05:01+2Для начала надо ответить на вопрос - а точно ли это задача для программиста?
Да, в общем случае это задача программиста. Конечно же, вы можете попасть в организацию, где роль программиста выхолощена до кодирования спущенных аналитиками алгоритмов, т.к. любую профессиональную роль можно сколь угодно дробить на более узкоспециализированные вплоть до атомарных операций. Но во-первых, таких организаций все равно меньше, чем тех, где круг ответственности программиста всё-таки шире, и программистам дают задание в виде "что надо сделать", а "как" - решается уже на их уровне. А во-вторых, даже если вы и попали в такую организацию - а вам точно это надо? Ведь самостоятельное решение более сложных задач, это и интереснее, и значительно выше оплачивается.
К слову, об аналитиках - я когда-то по подобной задаче (только там были танкеры и порты, а не фуры и магазины) обратился непосредственно к логистам, которые это вручную считали, как они оптимизируют фрахты. Цитирую: "ну... вот этот танкер, он сюда не войдет, тут десять метров фарватер, а танкер - двенадцать, поэтому мы его вот сюда войдем. Понятно?"
И это не исключение, по моему опыту, подавляющее большинство заказчиков в среднем и мелком бизнесе, и очень многие - в крупном, способны задачу поставить программистам примерно на вот таком уровне.
Fenzales
04.11.2022 15:50+1и значительно выше оплачивается.
Не знаю, лично у меня наибольшую зарплату обычно предлагали в компаниях, где есть чёткое разделение труда.
Цитирую: "ну... вот этот танкер, он сюда не войдет, тут десять метров фарватер, а танкер - двенадцать, поэтому мы его вот сюда войдем. Понятно?"
И это не исключение, по моему опыту, подавляющее большинство заказчиков в среднем и мелком бизнесе, и очень многие - в крупном, способны задачу поставить программистам примерно на вот таком уровне.
Звучит как айти из нулевых на делфи. И кто будет отвечать за факап при формализации таких требований? А если они придут и скажут "перевозка на 5000км считается нормально, но вот в соседний город в 50км у нас погрешность в сотню литров", потому что выбранный метод эвристики не работает на небольших расстояниях?
А если речь не о грузоперевозках, а о инженерных расчётах, то стоит ли перекладывать вывод формул и уровней апроксимации на программиста, или этим должен заниматься знакомый с предметной областью человек?
SerjV
05.11.2022 02:07Начну с конца:
Конечно же, вы можете попасть в организацию, где роль программиста выхолощена до кодирования спущенных аналитиками алгоритмов, т.к. любую профессиональную роль можно сколь угодно дробить на более узкоспециализированные вплоть до атомарных операций. Но во-первых, таких организаций все равно меньше, чем тех, где круг ответственности программиста всё-таки шире, и программистам дают задание в виде "что надо сделать", а "как" - решается уже на их уровне.
Видите ли, за 30 лет, ну или условно "с советских времён", ситуация достаточно сильно поменялась. Если в древние мохнатые времена предполагалось, что на каждом предприятии, где есть компьютеры, к ним должны прилагаться программисты, которые будут писать какие-то программы для автоматизации чего-то, то сейчас во многих конторах к компьютерам ни "операторы ЭВМ" (как должности) не прилагаются, ни даже сисадмины как фактическая роль.
Нынче разработка и эксплуатация софта очень сильно разделены.
Правда, в контексте цифровой трансформации нам усиленно толкают идею, что неплохо бы вести автоматизацию собственными командами, ну прямо диалектическое "отрицание отрицания" и новый виток спирали... Но это уже философия и другой уровень проблемы.
Да, в общем случае это задача программиста.
В общем случае - в наше время это задача аналитика (как роли). А уж как он там её будет решать - в Maple, Маткаде, Матлабе, Математике или вообще в Экселе - это уже его, аналитика, дело. Ибо изобретать велосипеды для таких задач в наше время нет необходимости. А если аналитики и про программы-то такие не слышали или пользоваться ими не умеют - это проблемы не программистов, а аналитиков.
К программисту эта задача действительно может прийти, но при определённых условиях, тут не озвученных.
Вот интересно, сможем с вам докопаться до этих условий? (кроме принципа "я начальник - ты дурак, потому делай, программист, что тебе сказано, да еще и по дороге в бухгалтерии картридж в принтере замени, и на складе разъём у кабеля переобожми")
PuerteMuerte
05.11.2022 04:45сейчас во многих конторах к компьютерам ни "операторы ЭВМ" (как должности) не прилагаются, ни даже сисадмины как фактическая роль.
Во многих не прилагаются, во многих до сих пор прилагаются. По сути, по эту сторону железного занавеса половина среднего бизнеса, которому недостаточно стандартных конфигураций, по-прежнему держит хотя бы своего админа с функцией кастомизации 1С, по другую сторону за этим чаще обращаются на аутсорс, но там так всегда было.
Но и в профессиональных конторах ситуация ничуть не отличается. Мало кто будет держать в штате профессионального математика и бизнес-аналитика в одном лице, особенно если подобные задачи возникают эпизодически, а не являются прямой специализацией компании.
Вот интересно, сможем с вам докопаться до этих условий?
Легко. Знание математики на подобном уровне напрочь отсутствует в штатном наборе скиллов бизнес-аналитика. Он соберёт требования, ограничения задачи, и опишет интерфейс. Математическую часть аналитик вам не опишет, это должен будет как раз программист подобрать. В частных случаях получится пригласить именно профильного консультанта-математика. В общем - это программист будет сидеть и разбираться. Если с математическим бэкграундом, у него получится быстрее. Если без - то долго и с высокой вероятностью неудачи.
SerjV
05.11.2022 20:21Во многих не прилагаются, во многих до сих пор прилагаются. По сути, по эту сторону железного занавеса половина среднего бизнеса, которому недостаточно стандартных конфигураций, по-прежнему держит хотя бы своего админа с функцией кастомизации 1С, по другую сторону за этим чаще обращаются на аутсорс, но там так всегда было.
Админ с кастомизацией 1с? ;) Ну да, а еще и картриджи в принтерах менять, разъемы 8p8c обжимать, витую пару таскать, воду в кулерах менять... Проще говоря - "продвинутый эникейщик", для солидности названный инженер-чтонибудь.
Хотя скорее всего "прогнутся" под стандартную конфигурацию, или опять же наймут аутсорсера на сопровождение нестандартной конфигурации (возможно, в лице той же конторы, что и остальную 1С им поставляют и обновляют).
Но и в профессиональных конторах ситуация ничуть не отличается. Мало кто будет держать в штате профессионального математика и бизнес-аналитика в одном лице, особенно если подобные задачи возникают эпизодически, а не являются прямой специализацией компании.
Минуточку. Я сказал просто "аналитика", без уточнения специализации. Бизнес-аналитик - это достаточно специфичная профессия, которая в штате эксплуатанта, а не интегратора, будет разве что при наличии у конторы СМК, причем реального СМК, а не "бумажного для участия в тендерах".
Ну а если задачи возникают эпизодически - то тут либо нанимать подрядчика, либо забить на задачу, т.к. содержание в штате специалиста ради решения проблем, возникающей раз в год-два- экономически нецелесообразно. Да, иногда можно и просто задачу игнорировать, если постараться.
Легко. Знание математики на подобном уровне напрочь отсутствует в штатном наборе скиллов бизнес-аналитика.
Как уже сказал выше - это вообще не задача для БА. БА работает с бизнес-процессами, потому он в лучшем случае напишет, что если изменить/внедрить автоматизацию на таком-то подпроцессе такого-то бизнес-процесса организации (а если в организации нет СМК - то считай "ой", там надо будет вообще начинать с формализации этих процессов), то у вас улучшатся такие-то показатели работы.
Он соберёт требования, ограничения задачи, и опишет интерфейс.
Для начала - надо ответить на вопрос "а зачем тут вообще писать автоматизацию, а не воспользоваться готовым"? На этот вопрос БА как раз должен ответить, тут ни математиком, ни программистом не надо быть.
Ну и, собственно, пока не ответим на вопрос выше - до программизма не дойдём, ибо смысла нет в программизме до этого момента.
PuerteMuerte
06.11.2022 00:19Админ с кастомизацией 1с? ;) Ну да, а еще и картриджи в принтерах менять, разъемы 8p8c обжимать, витую пару таскать, воду в кулерах менять... Проще говоря - "продвинутый эникейщик",
Это называется "системный администратор". Есть, правда, категория системных администраторов, которые работают с более серьёзными продуктами, имеют узкую специализацию, задницу поднимают исключительно в рамках SLA, и они таких ребят не уважают, придумывают для них названия вроде "эникейщиков". Примерно как программист со знанием предметной области унижает программиста, работающего по ТЗ от аналитиков, называя его "кодером" :)
или опять же наймут аутсорсера на сопровождение нестандартной конфигурации
Да, вполне. Это сути не меняет.
Минуточку. Я сказал просто "аналитика", без уточнения специализации. Бизнес-аналитик - это достаточно специфичная профессия
Я уточнил, потому что постановка задач на уровне "как считать эти цифры" - это как раз прерогатива бизнес-аналитика. И бизнес-аналитик, это не профессия, это тоже роль :) Всего лишь ещё более узкая специализация. Не суть важно, в любом случае в 99.99% реальных кейсов не будет ни бизнес-аналитиков со знанием этого, ни сторонних консультантов.
Для начала - надо ответить на вопрос "а зачем тут вообще писать автоматизацию, а не воспользоваться готовым"?
Я могу легко на него ответить: потому что бизнес не готов делать миграцию на другую учётную систему.
SerjV
06.11.2022 03:10+1Это называется "системный администратор".
Это называется "эникейшик". Который может вырасти из первой линии поддержки на более высокую или даже не совсем поддержку, можно сказать, что даже с рабочей должности на инженерную... Но называться "сисадмином" приятнее, чем каким-нибудь "техником".
И да, с ростом компетенции у админа еще и специализация как правило возникает - сетевик, серверы и т.п.
А вот поддержка 1С тут может быть либо "от бедности организации" (что означает, что человек толком не умеет ни в 1С, ни в администво), либо ближе к девопсу - но такой человек "слишком дорог", чтобы тратить его время на картриджи и разъёмы. Проще заставить пользователей менять их самим (чай не 90-е на дворе, где "требовался программист для работы с программой Word"), ну или вместе с сантехником и электриком еще и техника по "эникейным" работам нанять, если уж работ так много, а пользователи неадекватны.
Есть, правда, категория системных администраторов, которые работают с более серьёзными продуктами, имеют узкую специализацию, задницу поднимают исключительно в рамках SLA, и они таких ребят не уважают, придумывают для них названия вроде "эникейщиков".
Ну или эти время этих ребят слишком дорого, чтобы тратить его на замену картриджей, обжимание разъемов, замены воды в кулере и прочую мелочёвку.
Примерно как программист со знанием предметной области унижает программиста, работающего по ТЗ от аналитиков, называя его "кодером" :)
А вот тут пытаетесь подменить понятия. Нет, степень "крутости" программиста определяется не его знанием предметной области - более того, часто это лишнее знание, засоряющее голову. Тем более, что вникать в предметные области каждого проекта - жизни не хватит.
Знание предметной области могут себе позволить только программисты в командах, работающие над конкретным продуктом и только над ним. Ну или инди-разработчики.
Собственно, именно из-за нецелесообразности тратить время программистов на изучение предметных областей и возникает потребность в использовании аналитиков различных специализаций.
Но, еще раз обращу внимание - зависит от подхода, работает команда над одним и только одним проектом постоянно, или программисты производят код для множества проектов.
Я могу легко на него ответить: потому что бизнес не готов делать миграцию на другую учётную систему.
А зачем сразу миграцию, да еще и учётной системы, для задачи "оптимизации регулярной доставки товара из пары складов в несколько магазинов"?
Эксель отделу логистики же установлен? Ну вот пусть в нём и считают, там же ж можно не только суммы по столбцам в табличках рассчитывать. Не хватает экселя - есть и специализированное ПО, можно доустановить.
Ну или да, он бизнес конечно может обратиться к вендору ПО с просьбой приделать ему еще и такую штуку, вендор ему скажет "любой каприз на ваши деньги, вот такой-то срок и вот столько-то денег в рублёвом эквиваленте, готовы заплатить?" И вот что-то на этом этапе у бизнеса начинается амфибиотропная асфиксия.
Дайте угадаю - вы имели в виду те компании, которые еще сохранили собственную разработку для собственных нужд?..
PuerteMuerte
06.11.2022 05:00-1Это называется "эникейшик".
Это называется "системный администратор". Не существует эникейщиков и кодеров. Есть системные администраторы, есть программисты. А есть зазнавшиеся системные администраторы и зазнавшиеся программисты, которые унижают тех, кто не достиг их уровня профессиональной офигенности.
Знание предметной области могут себе позволить только программисты
Если не брать в расчёт какие-то наукоёмкие отрасли (где профильное образование лучше иметь изначально), знание предметной области могут себе позволить любые программисты, которым не влом. Например, автоматизируя клинику, программисту не требуется знать методы резекции прямой кишки, ему надо знать, какие поля должны быть в истории болезни, и кто и в каком порядке их заполняет. Не такая уж и хитрая предметная область.
Автоматизируя бухгалтерию, программисту не нужно знать план счетов наизусть, и налоговое законодательство. Но что такое основные средства, проводки, дебет, кредит, сальдо, амортизация, это ему тоже знать нужно. И это - не хитрая предметная область. И так далее.
Мы практически все работаем над каким-то конкретным продуктом. И делаем его не неделю, а месяцами и годами. В чём проблема понимать то, что пишешь?
А зачем сразу миграцию, да еще и учётной системы, для задачи "оптимизации регулярной доставки товара из пары складов в несколько магазинов"?
Ну если у вас текущая система не позволяет это делать - что вы купить предлагаете, кроме как новую систему? Модуль логистики к текущей системе? Давайте по дефолту предположим, что его нет - потому что если бы был, про это финдиректор узнал бы раньше программистов, и купил бы его. А раз новую систему, то и миграция прилагается.
Дайте угадаю - вы имели в виду те компании, которые еще сохранили собственную разработку для собственных нужд?..
Я имею в виду любые компании, потому что те, которые не сохранили, обратятся к компании-саппорту своей системы, у которой тоже штатного математика не окажется, и внештатного скорее всего тоже. Вы поймите простую вещь: нет на рынке таких профильных специалистов. Их единицы, и никто их нигде не видел. Это будет делать обычный программист.
Fen1kz
04.11.2022 05:49+1Да за день можно нагуглить. Ну или доказать что это нерешаемая хрень, которая делается перебором.
Потому что пока вас в вузе учили бухать, подлизывать преподам и косить на зачетах - я учился учиться ^^
Это уже как раз обычная приземлённая задача для программистов.
Да ладно? И много вы таких решили?) Хотя бы десяток был?)) Хотя что вы за программист, если за всю карьеру решили лишь десяток "обычных приземленных задач"
UPD: потратил 5 минут, понял что это есть n методов, например
Градиентный метод с постоянным шагом (без ограничений)
Градиентный метод с переменным шагом (без ограничений).
Метод наискорейшего спуска (без ограничений).
Метод сопряженных направлений (без ограничений).
Метод сопряженных направлений)и надо посидеть, попытаться перевести задачу в форму функции f(a,b,c,d,...)= и потом просто перебрать эти методы.
И это при том, что никакой похожей задачи у меня никогда не было и я потратил 5 минут.
Если оч надо - я могу найти, но в ответ я попрошу конфиг для либлаб сисд чтобы передавать в квалитигейт dependency track только актуальные рантайм зависимости от вебпак бандла.
Тоже, сказал бы что "типовая задача", но не буду, у меня адекватность есть ;)
Andy_U
04.11.2022 09:32+8Эти методы работают только для выпуклых дифференциируемых функций...
Fen1kz
04.11.2022 14:06+3Я вообще вот что подумал - у @PuerteMuerte логика такая:
Программирование = алгоритмы = математика. Хороший программист = хороший математик.А для меня программирование = архитектура приложений. То бишь своя, новая и неизведанная область. Конечные алгоритмы и матанализ особо тут не влияют, разве что на принципиальную возможность решить задачу за O(*).
Программирование равнялось математике, когда рассчитать какую-то функцию было достижением. Когда ты руками дырявил перфокарты и считал такты. А сейчас тебе просто надо выделить для этой функции место в системе и уже от этого места ты будешь выбирать какую именно функцию ты будешь использовать. Но выделить это место - само по себе искусство и для меня именно это и есть программирование.
Приведу пример где я хоть что-то понимаю - @PuerteMuerte мог бы спросить меня "а вот тебе типовая задача программиста на триангуляцию полигонов. Какой из методов ты бы выбрал, будь у тебя произвольный замкнутый граф?"
А если бы я программировал систему, я бы не упарывался по триангуляции. Я бы шел от общего к частному и конкретный алгоритм бы ставил в самом конце, в зависимости от требований.
Так вот, получается, что в вузах сейчас преподают "Программирование = алгоритмы = математика". Это как раз объясняет, почему задачу оптимизации фур он считает типовой - ну в вузе же мы их решали сотнями, как же так это не типовая задача. А я, поработавший десяток лет в коммерческих компаниях, понимаю что автору место максимум в нии, сидеть вычислять за 10к. Либо, тадаам, учиться настоящему программированию.
И получается интересная ситуация - оба из нас по своему правы и обоснованно считают друг друга говнокодерами, а то чем они занимаются - настоящим программированием. Ну как, я конечно считаю что тут я правее :)
SerjV
05.11.2022 02:56Я вообще вот что подумал - у @PuerteMuerte логика такая:
Программирование = алгоритмы = математика. Хороший программист = хороший математик.Да было время, когда вместо вместо нынешних "центров обработки данных" были "вычислительные центры"...
А для меня программирование = архитектура приложений. То бишь своя, новая и неизведанная область.
И это правильно.
Конечные алгоритмы и матанализ особо тут не влияют, разве что на принципиальную возможность решить задачу за O(*).
А я, поработавший десяток лет в коммерческих компаниях, понимаю что автору место максимум в нии, сидеть вычислять за 10к.
Оно конечно правильно, но есть нюанс - случаи могут быть разными, может статься что и на ассемблере писать придётся :)
Потому что есть programmer, есть software engineer, есть computer scientist, а по-русски это всё - "программист", ибо так повелось еще со времён, когда должности и профессии были привязаны к ныне отменённой "Единой Тарифной Сетке" (которая определяла допустимые названия должностей и оклады к ним).
PuerteMuerte
05.11.2022 04:48+3Я вообще вот что подумал - у @PuerteMuerte логика такая: Программирование = алгоритмы = математика. Хороший программист = хороший математик.
Эм... нет, я вообще ничего подобного нигде не писал, и даже не могу понять, как вы подобный вывод сделали :)
Я писал, что математика в программировании нужна там, где это предполагает предметная область. Точно так же, как нужна физика там, где программист автоматизирует физические процессы, а финансовое образование нужно при автоматизации финтеха. И да, всякого рода оптимизационные задачи - это достаточно обширный раздел математики, и чёрта с два его получится просто погуглить и разобраться, потому что... это я тоже писал :)
Если гуглить - получится как у вас, куча незнакомых методов, с каждым из которых придётся долго и мучительно разбираться, чтобы в конце (в лучшем случае!) понять, что ни один не подходит.
Fen1kz
05.11.2022 12:46-1Эм... нет, я вообще ничего подобного нигде не писал, и даже не могу понять, как вы подобный вывод сделали :)
Ну потому что вы на пассаж про программистов-самоучек и умножение матриц вместо вопроса про программирование полезли в оптимизационные задачи которые решаются в основном математикой.
Отсюда я сделал вывод, что для вас программирование это, в основном, математика.
Иначе получается, что на мое заявление "какие качества характерны для Х" привели совершенно левый незначительный довод.
Spaceoddity
04.11.2022 10:06+1Ну смотрите. У меня нет высшего образования. Но я успел поучиться в нескольких вузах и прекрасно себе представляю как организован учебный процесс и в "областном политехе" и в МВТУ.
Теперь по поводу вашего сакрального умения решать типовую транспортную задачу (ну т.е. тот вид задач, который студенты экономических специальностей решают пачками по вышке) - у меня это заняло примерно час. Одному товарищу надо было какую-то контрольную решить с этой транспортной задачей (посчитать в экселе на VBA эти самые матрицы). Я, правда, большую часть времени из этого часа пытался понять откуда у меня вместо нулей в конечной матрице мантиссы вылезли...))
Ioanna
04.11.2022 13:59А у товарища, которому вы помогали, в итоге есть диплом о высшем образовании?
Spaceoddity
04.11.2022 16:49В итоге нет. Но его пример нерелевантен. Героиновую зависимость, я думаю, в данном контексте можно рассматривать как "форс-мажорные обстоятельства"))
N-Cube
04.11.2022 10:54+5У меня фундаментальное физмат образование и я много лет занимаюсь научно-вычислительными проектами для вузов, в том числе. Так вот, уже на постановке задачи типа «дана матрица на терабайт» и аспиранты и доктора наук наглухо зависают за отсутствием каких-либо идей, как это вообще обрабатывать на своем десктопе или лаптопе. Про параллелизацию и векторизацию кода почти никто понятия не имеет, так что вся обработка будет выполняться стандартными библиотеками в едином блоке памяти (mmap легко нагуглить) и на одном ядре без попыток хоть как-то это ускорить. И лишь единицы способны хоть что-то прочитать по программированию и научиться, тогда как подавляющее большинство твердо стоят на позиции «нас этому не учили». Да, все ровно так, как и со многими программистами - а что вы хотите, люди-то такие же, не в должности и корочках дело.
sci_nov
04.11.2022 19:46Терабайтовые матрицы - сразу подозрение на неправильную постановку / некорректность задачи. Либо это очень специфическая область - тогда необходимо сотрудничество математиков (которые должны знать тонкости вычислений) и программистов (которые должны уметь использовать ресурсы ЭВМ грамотно). Один человек никогда качественно не решит сложную задачу (либо потратит неоправданно много времени). Команда и еще раз команда.
N-Cube
04.11.2022 20:03Это уже рядовая задача. К примеру, дамп OpenStreetMap уже давно больше терабайта «весит», а это граф, а не простая матрица. Радарный космоснимок это больше гигабайта растр и серия таких растров за 5 лет это несколько терабайт данных (скоро новые спутники будут доступны, там данных на порядок больше). Данные по океанам, трехмерные геологические модели и так далее и так далее - везде объемы данных огромные.
sci_nov
04.11.2022 20:31Да, соглашусь. Данных сейчас много... Но есть ли толк от этого (имею ввиду данные океанов, геологические модели и т.п.)? Я никогда с таким объемом данных не работал. Как бы то ни было, все равно данные читаются последовательно (параллельно-последовательно если быть точнее), за раз их никак не обработать.
N-Cube
05.11.2022 06:36Есть ли смысл в том, чтобы посчитать модели, прежде чем наугад бурить скважину за 30-100 миллионов долларов? :)
Суть в том, чтобы эффективно задействовать все ядра процессора. Скажем, на типовом лаптопе сейчас 8 ядер и 16 гигабайт памяти - итого, всего лишь 2 гигабайта на ядро, примерно как и лет 15 назад на коре2дуо (2 ядра и 4 гигабайта памяти). Если вы эти ресурсы сумеете разумно использовать - то можно терабайты данных в сутки «перелопатить» даже очень сложными алгоритмами. На самом деле, эппл эйр работает быстрее сервера интел/амд с равным числом ядер и кратно большей оперативкой, это не так много, но и совсем не мало. А далее встает вопрос масштабирования - будет ли ваше ПО работать в десять или сто раз быстрее при увеличении доступных вычислительных ресурсов.
SerjV
05.11.2022 03:09тогда необходимо сотрудничество математиков (которые должны знать тонкости вычислений)
А для этого математику придётся стать программистом...
программистов (которые должны уметь использовать ресурсы ЭВМ грамотно)
Ну или кодеру вместо фреймворков и архитектур начать вникать в использование ресурсов вычислительными алгоритмами...
И не эффективнее ли в случае, если подобные задачи становятся не редкими исключениями, а нормальной практикой - т.е. если на такую деятельность есть спрос - вместо двух специалистов (математика и кодера) иметь одного программиста с весьма специфичной специализацией?..
sci_nov
05.11.2022 13:21Частичное проникновение конечно будет, кто ж спорит. Один программист для крупной компании - неэффективно, зачем тогда команды?
SerjV
05.11.2022 20:32Частичное проникновение конечно будет, кто ж спорит.
Зависит от особенностей деятельности, как всегда.
Если программист в конторе работает как функция - сегодня пишет код для задачи одного проекта, завтра - для другого проекта, то это одно. Для него вообще знание о том, что делают продукты, для которых он пишет код - лишнее, т.к. занимают место в голове и мешают эффективно писать код.
А если это продуктовая команда, делающая один продукт - то уже другое.
Один программист для крупной компании - неэффективно, зачем тогда команды?
Вот и будет команда, в которой пара программистов пишут математическую часть задачи и плевать они хотели на фреймворки, интерфейсы и программные архитектуры, которыми занимаются другие программисты, примерно так же, как последним нет дело до того, как вычисление распараллеливается на 20 вычислительных нод :)
Никого ж не удивит, что специалист по базам данных может себе позволить делать структуру и запросы к ней, но не забивать себе голову пользовательскими интерфейсами?..
nameless323
04.11.2022 21:38Умножение матриц это относительно банальный пример. Попробуйте например загуглить что-нибудь занятное из рендеринга, например GTAO то же банальный, или как PBR устроен (про IBL не забудте). И там уже будет далеко не умножение матриц. Безусловно во всем этом можно разобраться и без бэкграунда который дает мат вуз, но будет это все значительно дольше и больнее. И на разобраться в этом не тайном знании (а оно не тайное, диф и интегральное исчисление всего лишь) уйдет далеко не пара часов на ютубе, если начинать с нуля, если все таки было образование, то как раз пара часов и уйдет на вспомнить что это и почему.
Megakazbek
04.11.2022 03:58+9Полагаете, если человек привык самостоятельно изучать программирование, а потом ему где-то понадобится перемножить матрицы, то он не будет в состоянии тоже самостоятельно изучить всё, что нужно про умножение матриц?
iig
04.11.2022 10:12+2Сможет конечно, гугл в помощь. Главное, чтобы гугл помог понять, действительно ли именно эта задача решается именно через умножение матриц.
N-Cube
04.11.2022 09:44+4Академические знания вовсе не подразумевают умение умножать матрицы вычислительно эффективно. Если вычислительно сложную программу писать, руководствуясь только учебником матанализа, то и работать она будет асимптотически бесконечное время - и с точки зрения чистой математики, все будет замечательно. А только понимать формулы, но не создавать новые - это школьный уровень вообще-то (вы посмотрите школьные задачники по математике дореволюционных времен и периода крепкого СССР, к примеру).
DvoiNic
04.11.2022 11:12+1смотря какие «академические знания».
если «общематематические» — то не подразумевают. а если знания «вычислительной математики и численных методов» — то подразумевают. Ну а «среднее положение» — «математика для инженеров» — подразумевают знание того, что для вычислений «математики» в реальном мире на реальной числодробилке (начиная от калькулятора) есть такой предмет, как «численные методы». Ну и, возможно, знание некоторых методов оттуда, применимых к конкретной инженерной дисциплине…N-Cube
04.11.2022 11:34+1Покажите мне российский вузовский учебник по численным методам, где демонстрируются методы работы с большими данными (в разы или на порядке превышающими объем доступной оперативной памяти)? А еще поясните, как вы собираетесь, скажем, distance correlation на терабайте данных посчитать, согласно учебникам?
DvoiNic
04.11.2022 11:51-1я не знаю существуют ли такие учебники вообще (не российские, не ВУЗовские).
Но я вообще не понял смысл вашего вопроса.N-Cube
04.11.2022 12:28+2Вы ссылаетесь на «численные методы», не понимая, что там изучают - никакого вычислительно эффективного перемножения матриц там нет. А есть простейшие методы матричных вычислений и решения дифуров, методы оценки сходимости и тому подобное - и все на таких примерах, которые можно не задумываясь об эффективности решать на микроконтроллере, встроенном в современную лампочку (кстати, раньше все это считали просто на бумаге). Так что на реальной задаче с терабайтной матрицей никакие академические знания вам не помогут, даже если у вас и был такой предмет, как численные методы.
DvoiNic
04.11.2022 13:51+1изучав ЧМ «на реальной задаче с терабайтной матрицей» я буду знать, «где копать». Вполне естественно, что «всё изучить невозможно». Не учат в вузах конкретно «перемножать терабайтные матрицы». В свое время, когда мне понадобилось решать задачу классификации (я даже не знал тогда, что она так называется, это был примерно 97 год) — я знал примерно в какую сторону ковырять, и у кого из бывших преподов спросить совета. и в остальном полученые ранее «академические знания» помогли эту задачу успешно решить.
N-Cube
04.11.2022 14:06+1И вновь вы рассказываете байки про то, как вам мол помогает академическое образование, при этом тщательно обходя заданный выше простой и ясный вопрос - как вы будете считать distance correlation на терабайтной матрице? Видимо, никак, будете искать специалиста с практическим опытом заместо академического :) Кстати, если вдруг захотите погуглить, то не тратьте времени (те библиотеки, что найдете, на больших матрицах не работают).
DvoiNic
04.11.2022 14:16+2Я понятия не имею, как считать. Но я буду знать, в какой стороне искать ответ.
тщательно обходя заданный выше простой и ясный вопрос
вы что, хотите получить ответ: Этому учат в таком-то ВУЗе на такой-то кафедре, в таком-то семестре такого-то курса, в 13:15 в аудитории 17?N-Cube
04.11.2022 14:25+2Так вот в реальности не знаете вы, как искать ответ, и даже никакой идеи не можете предложить. А будете вы гуглить по словам «distance correlation” - ровно так же, как и человек без академического образования. Хотите академическую подсказку? Да пожалуйста - корреляция дистанции основана на центрированных моментах и, насколько я знаю, для них тоже нет открытой big data реализации :) В то же время, человек с практическим опытом начнет с декомпозиции задачи в парадигме map-reduce и построит решение.
DvoiNic
04.11.2022 14:36блин. ну как вам объяснить, что не все начинают с «гуглить»…
И 100500 формошлепов с «практическим опытом» просто не знают страшных слов «декомпозиция» и map-reduce.
зы. вы ожидали, что я брошусь искать ответ на то, «как считать»?
N-Cube
04.11.2022 14:46-1Чем же «формошлеп» с высшим образованием лучше такового без оного? Понтами и «корочкой»? Как видим, на деле для (редкой) реальной задачки, где академические знания могли бы пригодиться, вы гуглить не хотите (или не умеете) и как решать, не имеете понятия. Я же сказал - искать ответ бессмысленно, нужно самому думать… но это для получения «корочки» вовсе не требуется :)
DvoiNic
04.11.2022 14:50Формошлеп — не лучше. Для формошлепства (да и доброй половины «типа программистских задач» ) вообще высшего образования не нужно.
ну а в оставшихся задачах — люди с высшим образованием как правило находят решения лучше и быстрее, чем без оного.
Исключения есть, но, как говорится, «на то они и исключения»
N-Cube
04.11.2022 15:26люди с высшим образованием как правило находят решения лучше и быстрее, чем без оного
Бездоказательное утверждение и, в целом, неверное. Я два десятилетия занимаюсь научным программированием и хуже кода, чем от академических специалистов, я не встречал.
N-Cube
04.11.2022 17:25+1Хотите пример? Академическими специалистами написан пакет спутниковой интерферометрия GMTSAR (в составе бинари плюс шелл скрипты). Хороший пакет, мощный, и код достойный и архитектура проекта. Так вот, я переписал часть его функций на питоне и сделал врапперы для остальных функций так, что теперь могу на Apple Air 8 cores 16 GB RAM обработать объемы данных, которые в GMTSAR не получается обработать на рабочей станции 32 cores 512 GB RAM. Полученный пакет интерферометрии называется PyGMTSAR и доступен у меня на гитхабе. Вот вам разница между теорией и практикой. Другой пример - большой пакет обработки данных по океанам (температура, соленость и прочее) - исходный вариант на матлабе требует несколько суток вычислений на сто ядерном кластере, мой вариант на питоне считает две минуты на двухядерном Apple Air 2014 года (я могу дать ссылку на исходный проект - там очевидно, насколько ужасен этот Matlab код с невероятным количеством вложенных eval). Ну и так далее, примеров сотни можно вспомнить.
Kanut
04.11.2022 17:30Так вот, я переписал часть его функций
Ну так у вас ведь академическое образование. То есть получается в данном конкретном случае один "академический специалист" улучшил работу других.
Вот вам разница между теорией и практикой.
А это вообще к чему? По вашему практика есть только у самоучек, а "академические специалисты" в принципе всегда чистые теоретики?
Ну и так далее, примеров сотни можно вспомнить.
Вы хотите сказать что нет примеров для обратной ситуации? Ну то есть когда не "академические специалисты" пишут плохой код, а потом "академические специалисты" его исправляют? Или их по вашему будет сильно меньше?
N-Cube
04.11.2022 17:57+1Есть разница между написать свою реализацию и просто воспроизвести имеющуюся на другом языке с правильным выбором технологий и прочее, последнее это чистейшее программирование. И начал я с того, что именно воспроизвел существующий код и получил принципиально другие свойства продукта. А уж потом еще раз переписал этот код, уже используя академические знания :)
Kanut
04.11.2022 18:07То есть вы даже сами согласны что в какой-то момент академические знания вам всё-таки пригодились.
N-Cube
04.11.2022 18:28Так я этим и занимаюсь как хобби, для развлечения, чтобы имеющиеся академические знания пригождались :) Вы тоже можете выбрать хобби так, чтобы вам любые знания и умения пригодились, это совсем не показательно же.
Kanut
04.11.2022 19:18Но при этом приводите это как пример того что академические знания не нужны или даже вредны....
N-Cube
04.11.2022 19:35Вообще-то я говорю о том, что академические знания ВМЕСТО практических не годятся. Программист с практическими знаниями (самоучка, в том числе) будет лучше программировать, чем обладатель математических знаний или арфист или сантехник и так далее. Имхо странно, что это вообще обсуждается - знание определенных разделов математики не делает вас лучше как человека или спортсмена или кухарку или доярку или программиста.
Kanut
04.11.2022 20:17Естественно без практики никуда. И никто свежего выпускника ВУЗа сениором не возьмёт. Вопрос скорее в том даёт ли академичкое образование преимущество при равном стаже. И на мой взгляд обычно даёт.
N-Cube
05.11.2022 06:41«Вам шашечки или ехать?» Возможно, за «корочки» вас быстрее возьмут «сеньором» (как же любите вы эти все лычки), но я говорю про профессиональный уровень, на который все это мало влияет. И по моей практике, средний выпускник-физик пишет совершенно кошмарный код (и переучить нереально трудно), в отличие от кода просто посредственного от выпускника-программиста (что решается опытом).
Kanut
05.11.2022 10:57Честно говоря я уже вообще не понимаю что вы хотите сказать. Ведь оба выпускника имеют академическое образование и по умолчанию нулевой опыт.
И для меня "сениор" это не просто лычка, а как раз тот самый профессиональный уровень.
N-Cube
05.11.2022 12:02То есть направление образования вам вообще не важно и после академического образования физкультурником вы готовы работать физиком-ядерщиком? Ну я и говорю, при таком подходе образование это просто «лычка».
Kanut
05.11.2022 12:13+1Где вы у меня такое вычитали? Такого я нигде не писал. Я писал что наличие академического образования помогает и является плюсом.
Это не значит что имея диплом по одной специальности вы сразу можете работать во всех. Это значит что вам будет проще освоить новую специальность. И естественно чем ближе ваше образование к непрофильной специальности, тем проще вам будет.
N-Cube
05.11.2022 12:28-1Так ведь нет - знание численных методов, как их подают физикам, только помешает в работе программистом, я уже писал об этом. Потому, что игнорируются ключевые на практике вещи типа оценки и подготовки данных, оценки аппаратных ограничений (объема данных и методов хранения и кэширования)… изучаются только абстрактные алгоритмы вычисления производных и так далее, притом ровно так, как они были когда-то придуманы для вычислений на бумаге.
Kanut
05.11.2022 12:43+1Я не вижу как оно должно мешать. И да, физику сначала надо будет "войти в ИТ" и понять чем работа программиста отличается. То есть например те самые ваши " оценки и подготовки данных, оценки аппаратных ограничений (объема данных и методов хранения и кэширования)". Но особо много времени это не занимает.
А вот потом умение работать с абстракциями скорее помогает. То есть например у нас в ИТ работает относительно много физиков. Только по моему опыту они относительно быстро уходят в архитекты или там техлиды-тимлиды.
movl
04.11.2022 16:30Бездоказательное утверждение
Вы как-то как-то из одной плоскость в другую перескакиваете. Если взять например двух программистов, допустим тех же формошлепов, с сопоставимым по времени и задачам опыту работы (с одного отдела на работе например). При этом один из них без высшего образование, а другой имеет айтишное или математическое. То вы действительно считаете, что при поиске решения вашей задачи, они будут находится в изначально равных условиях, или что у самоучки будет преимущество?
Я не спорю, конечно, что результат подобного эксперимента может оказаться неожиданным, так как не проводил его и не читал про подобные. Но это вполне себе проверяемое утверждение.
N-Cube
04.11.2022 18:31+3Очень часто вижу преимущества именно у самоучек - потому что люди признают свое незнание и готовы искать и учиться, а люди с «корочками» попытаются что-то выученное применить и при неудаче скажут «да это задача какая-то неправильная» и перестанут пытаться. Заученные знания больше вредны, чем полезны, а «учиться учиться» способны лишь единицы и это не зависит от «корочек», скорее, вопрос психологии.
0xd34df00d
04.11.2022 18:29+1Вы так говорите, будто map-reduce — это что-то дико новое, придуманное промышленниками, и никакого отношения к каким-нибудь моноидам не имеющее.
N-Cube
04.11.2022 18:44Теория гравитации тоже давно придумана, а вы попробуйте ее на практике применить и построить тоже давно придуманный гравилет.
Да вот хотя бы пример с автором эскулайт, phd в computer science Ричардом Хиппом - он уж два десятилетия «пилит» (с командой) этот эскулайт и с каждым годом добивается существенного прогресса в производительности и возможностях… если сравнивать с первыми версиями (хотя у Ричарда и тогда уже был далеко не только академический опыт) это как постгрес против табличного файла с записями фиксированной ширины. Вот и думайте, что значит практическое знание против академического.
0xd34df00d
04.11.2022 19:38Теория гравитации тоже давно придумана, а вы попробуйте ее на практике применить и построить тоже давно придуманный гравилет.
Сравнивать гравилёт со вполне естественным желанием вынести константу как можно дальше за скобки — ну, я не знаю, какого-то вы совсем низкого мнения об академиках.
Вот и думайте, что значит практическое знание против академического.
Ничего не понял, что вы хотели сказать этим примером.
N-Cube
04.11.2022 19:42В формуле для вычисления корреляции дистанции нет констант и каждый элемент зависит от всей матрицы, я это уже в другом комментарии писал.
0xd34df00d
04.11.2022 19:53+1Представьте себе, что вам нужно посчитать не все эти distance correlation'ы, а обычную выборочную дисперсию выборки {xᵢ}. Там формула σ {xᵢ} = Σⱼ (xⱼ — μ {xᵢ})² / n, где μ {xᵢ} — среднее (или делить на n-1, если μ вы тоже оцениваете по выборке и оно не дано вам свыше, но неважно). Так вот, два вопроса:
- Зависит ли μ {xᵢ} от выборки?
- Является ли μ {xᵢ} константой относительно j, и можно ли её вынести за скобки?
N-Cube
04.11.2022 20:30А вы разницу между выборочной средней и генеральной средней знаете? Если да, то это ответ, если нет, то трудно объяснить, почитайте сначала теорию. А вот на практике в map-reduce реализации вполне себе делают вычисление среднего по каждому блоку отдельно - по чисто техническим соображениям. А если среднее и дисперсия бесконечные получаются, то и вовсе придется к двухвыборочной дисперсии переходить - известная проблема дрейфа частоты генератора, к примеру. Вы бы еще про корректность вычисления Фурье преобразования ограниченной выборки спросили :)
mayorovp
05.11.2022 09:28А вы разницу между выборочной средней и генеральной средней знаете? Если да, то это ответ
Это ответ только на первый вопрос, но не на второй.
N-Cube
05.11.2022 12:11-1Вы что-то путаете, ответ на второй вопрос есть - среднее по выборке определено для всей конкретной выборки, а среднее по генеральной совокупности и вовсе определено более чем на конкретной выборке. Впрочем, как и указано, это ничуть не мешает в определенных случаях и среднему и дисперсии стремиться к бесконечности, так что хоть обвыноситесь за скобки, результат окажется бессмысленным.
mayorovp
05.11.2022 12:20Какая разница для чего оно там определено, в конкретной формуле его можно вынести за знак суммы или нет?
N-Cube
05.11.2022 12:34-1Можно выносить, а можно не выносить - и второй случай гораздо интереснее для больших данных. Так чем вам это все поможет для конкретной задачки с distance correlation?
mayorovp
05.11.2022 13:30Тем, что это один из двух способов избежать Ω(N3) сложности алгоритма, равно как и зависимости сразу от всего набора исходных данных.
N-Cube
05.11.2022 14:00-1Ну то есть вы вынесли коэффициент, которого посчитать пока все равно не можете, и на этом успокоились? Как считать-то будете?:)
mayorovp
05.11.2022 15:08А чего это я его посчитать не могу-то, в вашей исходной задаче?
Да и на конкретной выборке среднее по выборке всегда существует...
N-Cube
05.11.2022 15:36-1Конвертируем исходный csv файл в бинарный, получаем 200 гигабайт данных. Пусть скорость чтения с SSD диска будет 2 гигабайта в секунду, тогда вы можете прочитать этот файл за 100 секунд. Миллиард раз прочитать файл для анализа всей матрицы дистанций займет 100 миллиардов секунд. Учитывая, что один год это примерно 30 миллионов секунд, получается, что 3000 лет вам понадобится только на чтение файла, не считая времени на вычисления. Отсюда следует, что если вы не Горец - то нет, не можете вы посчитать это среднее, не доживете.
mayorovp
05.11.2022 15:40Миллиард раз прочитать файл для анализа всей матрицы дистанций
Зачем? Зачем его читать миллиард раз?
Вы сейчас понимаете, что вы в этой ветке единственный кто предлагает идиотские решения, но почему-то приписываете эти решения остальным?
N-Cube
06.11.2022 08:25-1У меня не помещается (16 GB RAM). Впрочем, выше кто-то уже предложил кластер использовать, но дальше не продвинулся.
Увы, тут никто даже не попытался оценить, решаемая ли вообще вычислительная задача, если решаемая, какое нужно "железо" и сколько времени надо будет считать. Кроме метода "тыка" - типа давайте возьмем оперативки больше, чем объем данных (а дальше-то что?) идей нет вообще.
mayorovp
04.11.2022 15:44Справедливости ради, вашу аргументацию можно в обе стороны завернуть. Я вот считаю себя практическим программистом, и терабайтная матрица для меня выглядит больше как вызов чем как что-то страшное — но вот решить вашу задачу без помощи "академиста" и гугления я не смогу совершенно точно. Хотя бы потому что я вообще не знаю что такое distance correlation.
И да, фиг вы эту задачу в map-reduce декомпозируете, по крайней мере "в лоб" тут не получится точно.
N-Cube
04.11.2022 15:59Вообще-то я этот алгоритм за день на map-reduce написал, можете посмотреть в моем профиле на апворк, там есть и не такие задачи :) Определение distance correlation легко нагуглить: https://en.m.wikipedia.org/wiki/Distance_correlation Так вот для программирования этого алгоритма нужны знания практических вещей (аппаратные ограничения и подходы для map-reduce), и никакие академические знания не помогут вам сделать эффективную реализацию.
mayorovp
04.11.2022 16:13+1Формулу ту я видел, но применять в лоб квадратичный алгоритм к триллиону элементов не хватит никакого кластера. Вы или что-то скрываете про задачу, или про своё понимание практического программиста без академических знаний...
Kanut
04.11.2022 16:15Вы или что-то скрываете про задачу, или про своё понимание практического программиста без академических знаний...
Ну если заглянуть в профиль, то :
В 2004 году я закончил Радиофизический факультет ННГУ и моя магистерская работа по моделированию нелинейных оптических сред победила на всероссийском конкурсе (см. www.ifmo.ru/file/conferens/230/2005.doc)
N-Cube
04.11.2022 17:14Так все это благодаря правильному использованию как раз практического программирования :) Ну а обсуждаемая задачка с distance correlation прекрасна тем, что выглядит как академическая, но ее нельзя решить с академическими знаниями и можно с практическими, смотрите мой коммент рядом.
Kanut
04.11.2022 17:16Как ни крути, но академические знания у вас есть. Поэтому нельзя исключить что они вполне себе сыграли свою роль и без них ничего остального бы не было. Даже если вы сами считаете иначе.
N-Cube
04.11.2022 17:29Так в том и дело - академических знаний программирования у меня нет, а дисциплина "вычислительные методы" совсем не то. Более того, я высшее образование получил до того, как вообще придумали distance correlation и стал известен и популярен map-reduce.
Kanut
04.11.2022 17:33Так в том и дело — академических знаний программирования у меня нет, а дисциплина "вычислительные методы" совсем не то
Извините, но нет. Даже если у вас образование физика или даже химика, то у вас уже есть "академические знания", которые вам могут помочь в программировании. Ну по сравнению с человеком у которого 10 классов школы и всё.
Более того, я высшее образование получил до того, как вообще придумали distance correlation и стал известен и популярен map-reduce.
Ну так академическое образование это в первую очередь не про сами знания, а про умение их получать. Например работать с источниками, искать информацию, банально "уметь думать в нужном направлении" и так далее и тому подобное. Если в вашем ВУЗе вас просто "накачали" набором фактов, то это вам с ВУЗом не повезло. Хотя я сомневаюсь что это так было.
N-Cube
04.11.2022 18:04+1Вообще на своем курсе я был известен как раз тем, что на лекции не ходил - а занимался дома по учебникам, это раз. Два - мои однокурсники или достигли успехов в науке и программируют весьма рудиментарно, или не появлялись на занятиях вовсе (работали) и добились успехов в программировании. Вот чтобы кто-то ходил на занятия и знал физику-математику и еще отлично программировал - вообще не припомню ни единого примера. В общем, в академической среде искать хорошего программиста - это как редкие кораллы искать на людном пляже.
Kanut
04.11.2022 18:18Ну ок это ваш опыт. Но это не значит что его можно экстраполировпть на всех. У меня опыт скорее обратный. То есть большинство тех с кем я учился стали хорошими программистами.
И это не значит что это единственный возможный путь стать нормальным программистом. Но на мой взгляд это наиболее простой путь. По крайней мере у нас.
N-Cube
04.11.2022 18:33Вы учились на «не программиста» и почти все ваши однокурсники стали хорошими программистами?! Трудно поверить, просьба огласить вуз, кафедру, год выпуска для проверки :)
Kanut
04.11.2022 19:17Я учился на прикладной математике и на информатике. И там и там большинство одногрупников стало программистами.
ЛЭТИ, прикладная математика 2001. И Friedrich-Alexander-Universität Erlangen, Informatik 2005.
N-Cube
04.11.2022 19:41И в чем логика? Если вы учились на программиста и стали программистом, то почему вы сравниваете себя с учившимися на не программиста и ставшими не программистами? Математика у физиков и у вас - это совершенно разные разделы математики и совершенно по-разному применяются, абсурдно сравнивать вашу прикладную математику (действительно, основа программирования) с фундаментальной (как вы хотите описание эффектов квантовой физики применять для написания кода?).
Kanut
04.11.2022 20:15Речь то вроде бы шла об академическом образовании как таковом? Или исключительно о непрофильном?
khajiit
05.11.2022 11:51+3Даже если у вас образование физика или даже химика, то у вас уже есть "академические знания", которые вам могут помочь в программировании.
А если историка или юриста — эти знания перестают быть академическими?
Умение расчета орбиталей и физикохимических свойств вещества помогут не больше, чем знание особенностей римской политики времен принципата или триста одного случая наступления ответственности без непосредственной вины.
Нет, они могут помочь… если в процессе работы вы случайно наткнетесь на формулу которую еще не успели забыть.работать с источниками
а что скрывается за этим магическим словосочетанием? Потому как любознательному человеку работать с источниками приходится учиться задолго до совершеннолетия.
искать информацию
тоже приходится учиться сильно раньше
банально "уметь думать в нужном направлении"
В смысле не отвлекаться?
Так этот навык приходится осваивать еще в младшей школе. Если, конечно, ты не двоешник или за тебя не делают все родители.Если в вашем ВУЗе вас просто "накачали" набором фактов, то это вам с ВУЗом не повезло
Первое, что слышит абитурьент, приходя в ВУЗ — здесь вам не школа, вам никто ничего не должен. И большая часть преподов в тех ВУЗах, с которым этот имел несчастье так или иначе быть знаком, ведет себя в полном соответствии с этой максимой.
В ВУЗах никого не колышет образовательный процесс, у них совершенно другие задачи. Основная задача ВУЗа — подгонка KPI под дальнейшее финансирование, висящее над ними дамокловым мечом.
Соответственно, весь процесс обучения строится по остаточному принципу.А обучение умениям работать с источниками и прочим придыхательным прилагательным — в преподаваемые дисциплины не входит и сейчас сводится к меня не волнует, гуглите.
Kanut
05.11.2022 12:10А если историка или юриста — эти знания перестают быть академическими?
Нет, не перестают. Но всё-таки на мой взгляд различие между гуманитарными науками и STEM в этом контексте есть.
а что скрывается за этим магическим словосочетанием? Потому как любознательному человеку работать с источниками приходится учиться задолго до совершеннолетия.
Поиск, умение фильтровать, умение быстро просматривать и так далее и тому подобное. И да, этому можно научиться и самому. Но на мой взгляд подавляющее большинство школьников этого не умеют.
Первое, что слышит абитурьент, приходя в ВУЗ — здесь вам не школа, вам никто ничего не должен. В ВУЗах никого не колышет образовательный процесс, у них совершенно другие задачи.
А вот это уже сильно зависит от ВУЗа. И не знаю как с этим сейчас ситуация в России, но когда я учился в ЛЭТИ того что вы описываете практически не было. А уж если взять немецкий ВУЗ где я учился, то там подход вообще очень сильно отличается от российского-советского.
N-Cube
05.11.2022 12:24Когда я пришел в вуз, никакого интернета еще в помине не было. Так что мы изучали библиографию, а ссылки на литературу, которую порой рекомендовали преподаватели - могли вести в «закрытую секцию», откуда студентам книги не выдавали, так что можно получить нужное только на кафедре. Так вот посидеть на кафедре и полистать книгу вообще никак не равно найти нужное в интернете (или хотя бы почитать книгу дома). Теперь интернет общедоступен, но многие преподаватели остались прежними (как и школьные учителя) и я что-то не слышал про замену библиографии на что-то вроде «искусство гуглить».
Опять же, классика - чтобы задать правильный вопрос, нужно знать большую часть ответа. Да вот же мы тут в комментариях уже типичную задачку вычисления одного из видов корреляции мусолим второй день, и почему-то никто еще не сообразил, что же надо искать:) Хотя вроде бы очевидно, что клауд провайдеры предоставляют подобные вычисления на огромных объемах данных и вообще «на лету» - гугл биг квери, скажем, куда более чем на терабайтных данных может сложные метрики считать (и явно на каждый хост все данные не копирует при этом), и методика map-reduce описана многократно и есть открытые реализации, так что, в целом, ясно, куда копать… но все интересующиеся для начала говорят, что это слишком просто, а потом меняют мнение на противоположное :) А вы говорите, что каждый должен и обязан уметь искать информацию всеми способами прямо после вуза…
Kanut
05.11.2022 12:38+1Когда я пришел в вуз, никакого интернета еще в помине не было.
У меня была точно такая же ситуация. Вот только в библиотеке было свободно доступно всё необходимое.
И да, преподаватели, что в России что в Германии, подсказывали по началу где стоило бы поискать. Но чем дальше тем меньше. Возможно мне повезло с преподавателями в ЛЭТИ. Не знаю. В Германии для университета это скорее норма.
N-Cube
05.11.2022 12:59-1Видимо, вас просто не интересовали никакие редкие издания, которые доступны или только кандидатам наук, или только сотрудникам или только по разрешению директора библиотеки. Ни в одной библиотеке мира любую книгу из фондов вам (тем более домой) не выдадут. А в итоге, вы везде натыкаетесь на цитаты из какого-то редкого издания, которое найти невозможно (и все или почти все те, кто цитируют, сами не читали оригинал, а только перецитируют выдержки из него). А сегодня вы можете просто нагуглить нужное :)
Kanut
05.11.2022 13:11+1Для обычного образовательного процесса, особенно на первых курсах, такие издания точно не нужны.
Дипломную-курсовую я в России уже не писал и писал их в Германии. Там в библиотеке студентам были доступны все книги. Редкие в виде диакопий(не знаю как это правильно по русски называется), а частично уже и в дигитальном формате. Если были нужны какие-то работы, которых не было в библиотеке, то при наличии обоснования из можно было заказать. За счёт кафедры или в крайнем случае за свой счёт.
И нет сейчас вы точно так же не можете нагуглить всё что вы хотите потому что к куче научных работ допуск платный и не особо дёшевый. Хотя сейчас конечно с этим всем стало проще.
N-Cube
05.11.2022 14:04Ну почему же с первого курса, мне начиная с третьего курса для курсовой работы разное интересное понадобилось, а цифровых копий не было, конечно. А нагуглить сейчас можно почти все - в платных библиотеках с закрытым доступом найти DOI и по нему уже откопать на сайхабе или просто в частных архивах. Уж точно «знание сайхаба» сегодня несравнимо полезнее бумажной библиографии.
Kanut
05.11.2022 14:09Ну то есть вы получили умение работать с бумажной библиографией и умение копать на сайхабе и в частных архивах. Умеет это средний выпускник школы или даже ПТУ?
N-Cube
05.11.2022 14:12Ну извините, если современный выпускник научится этому годам так к 40 (как мое поколение), то это никуда не годится. А в 20 лет этому не учат и сейчас. Академическое образование это про стабильность, так что лет через 50 расскажут про сайхаб, но, возможно, уже на лекциях по истории :)
Kanut
05.11.2022 14:26Ну извините, если современный выпускник научится этому годам так к 40 (как мое поколение), то это никуда не годится.
Ещё раз: в ВУЗах на мой взгляд этому учат. Где-то лучше, где-то хуже, но учат. В школах и ПТУ скорее нет.
Поэтому умение это делать это одно из преимуществ академического образования.
Академическое образование это про стабильность, так что лет через 50 расскажут про сайхаб, но, возможно, уже на лекциях по истории :)
А вот это скорее проблема именно российских ВУЗов. В Германии точно такой проблемы нет и здесь учат вполне себе актуальным вещам.То есть например у нас в начале 2000-х уже были Java и даже C#.
N-Cube
05.11.2022 14:42Ну вот как раз выбор языка программирования это не так важно, на мой взгляд. Все равно в работе будете использовать 5-10 разных языков постоянно (ну как минимум sql, bash, c, python, javascript), так что даже если с других начнете изучать - разница небольшая. Важно качество обучения.
Kanut
05.11.2022 14:56Конечно именно выбор ЯП это не особо важно. Это просто пример. Тот же C# у нас появился меньше чем через год после официального релиза. Не то чтобы вот прямо "стабильность" и "через 50 лет".
0xd34df00d
05.11.2022 21:46+1А вот это скорее проблема именно российских ВУЗов. В Германии точно такой проблемы нет и здесь учат вполне себе актуальным вещам.То есть например у нас в начале 2000-х уже были Java и даже C#.
Непонятно, зачем вообще в вузах должны быть ЯП.
vkni
05.11.2022 23:17То есть например у нас в начале 2000-х уже были Java и даже C#.
Вы даже не представляете себе, каким замшелым говном на начало 2000х были эти Java и C#.
PuerteMuerte
06.11.2022 00:22Вряд ли те, кто начал учить эти платформы на заре их появления, пожалели об этом впоследствии :)
vkni
06.11.2022 00:50-1Синдром утёнка. Многие С++ники тоже не осознают, что жизнь проводят как мастер-сантехник из анекдота. :-)
PuerteMuerte
06.11.2022 04:44Я вот много на чём писал. В начале 2000-х на Delphi, потом на Java, потом на дотнете, сейчас проект на TS+React+AWS. И знаете, дотнет - лучше :) Он на порядки архитектурно красивее, чем все та мешанина из мусора с редкими бриллиантами, которая сваливается ко мне в node_modules. Поэтому таким утёнком быть не стыдно.
vkni
06.11.2022 07:43+1Он на порядки архитектурно красивее, чем все та мешанина из мусора с редкими бриллиантами, которая сваливается ко мне в node_modules.
Ну вы нашли, с чем сравнивать.
Напоминаю, что в 2000 году уже был практически полностью готов Haskell, с классами типов;
уже 15 лет как были реализованы языки с выводом типов Хиндли-Милнером (SML/OCaml);
ad-hock полиморфизм со статическим выводом типов;
чёрт знает сколько времени существовали языки с алгебраическими типами данных;
чёрт знает, сколько времени был pattern-matching, а не убогий switch.
А тут в 2000 году реализован язык с идеями из Simula 68. :-)
mayorovp
05.11.2022 13:31Да вот же мы тут в комментариях уже типичную задачку вычисления одного из видов корреляции мусолим второй день, и почему-то никто еще не сообразил, что же надо искать
Это вы её мусолите, остальным просто не интересно подробно разбирать очевидные вещи
N-Cube
04.11.2022 17:10+1А вы правильно мыслите. Теперь учтем, что у нас квадратная сложность не от числа значений как таковых, а от числа точек в многомерном пространстве, то есть записей или строк. Пусть будет текстовый файл (типичный формат обмена) на 1 терабайт на входе, в нем набор столбцов, скажем, 50. Значения типа 32-битного float плюс разделитель займут почти 20 байт, итого 1 килобайт на строку и всего получится 1 миллиард записей. Совсем не триллион, верно? Более того, расстояние от точки A до точки Б равно расстоянию от точки Б до точки А, так что еще вдвое меньше. Посчитать это можно и на лаптопе, остается использовать map-reduce так, чтобы не хранить в памяти сразу всю матрицу расстояний размером миллиард на миллиард. Нам для вычислений нужна сама матрица и ее построчные и поколоночные суммы и сумма этих сумм (матрица очевидно симметричная, так что эти суммы построчные и поколоночные равны). Тут уже видна довольна простая реализация - считаем для одного элемента и поблочно считываемого вектора на миллиард элементов дистанции и суммируем с записью на диск, в итоге получаем миллиард поколоночных (построчных) сумм. Можно сразу же вести счетчик сумм от сохраняемых сумм. Дальше остается расписать результат как функцию от дистанций и сумм и снова для каждого элемента читать исходный файл и считать все дистанции.
Как видите, в реализации map-reduce мы считываем исходные данные два раза по миллиарду раз вместо одного раза по миллиарду раз в теории. И тут уж вся задача состоит в том, чтобы правильно выбрать размеры считываемых блоков данных для эффективного кэширования при многопоточной обработке. Так вот я еще не видел академического специалиста, который бы понял, что ограничения тут именно аппаратные и смог бы сделать рабочую реализацию. А "нормальные" программисты с такими аппаратными ограничениями сталкиваются постоянно и задачу решить могут.
mayorovp
04.11.2022 18:09+2Пф, если там на самом деле, как вы говорите, всего лишь миллиард float — то это всего лишь 4 гигабайта, их нетрудно держать в памяти (уж в виртуальной на SSD — так точно). А это значит, что для нахождения distance correlation можно использовать любую нагугленную библиотеку, если только она не на Javascript и не на Питоне. Так что я вижу противоречие вашим прошлым словам.
Ну и называть размер матрицы не по её представлению в памяти, а по записи в текстовом виде — обман.
Кстати, по поводу вашей оптимизации "остается использовать map-reduce так, чтобы не хранить в памяти сразу всю матрицу расстояний размером миллиард на миллиард" — тут всё настолько очевидно, что я не понимаю зачем вы вообще это упоминаете.
А, ещё момент: где в описанном вами алгоритме применяется map-reduce?
N-Cube
04.11.2022 18:25А теперь вы как-то упускаете, что матрица размером миллиард на миллиард элементов :) мы же все попарные дистанции между всеми исходными точками (записями) рассматриваем. Так что полный размер матрицы в памяти это 4 миллиарда в квадрате, то есть 16 экзабайт. А теперь попробуйте «любой нагугленной библиотекой» посчитать что-то на матрице такого размера.
mayorovp
04.11.2022 18:37Ничего я не упускаю, эту матрицу просто не нужно хранить в памяти.
Подстановку формулы вместо переменной делают ещё в школе, если программист находит такую оптимизацию сложной — тут дело не в "академичности"...
N-Cube
04.11.2022 18:48Вы все еще не поняли. Попробуйте записать определение distance correlation так, чтобы можно было всю матрицу не хранить в памяти. Если вы с академическим образованием - вам это не удастся и вы будете пытаться как-то решить неразрешимую проблему обработки такой матрицы. Если вы практик и понимаете, что другого пути нет - то будете искать пути декомпозиции задачи, пока не найдете.
mayorovp
04.11.2022 19:00+1А что там сложного-то?
Берём формулу для dCov, и подставляем в неё формулы элементов матрицы. Всё, больше ничего не требуется.
N-Cube
04.11.2022 19:20Нет, конечно, так не работает :) В формуле для dCov используются ДВОЙНЫЕ ЦЕНТРИРОВАННЫЕ дистанции, а не элементы исходной матрицы! И каждая двойная центрированная дистанция вычисляется через ВСЕ элементы матрицы. Итого ваш вариант будет работать в миллиард раз медленнее, чем вы ожидаете - так что вы просто не доживете до момента, когда результат будет посчитан. Кстати, для вычисления корреляции обычно используется не одна, а две матрицы (и в формуле их две, хотя можно посчитать и с одной матрицей, но результат тривиален) - подумайте, нужен ли вам результат, полученный уже после завершения жизни нашей Вселенной :)
mayorovp
04.11.2022 19:37+1Это презумпция тупости оппонента или что? Разумеется, средние по строкам и столбцам придётся предварительно подсчитать.
Но считать-то их надо независимо от хранения матрицы миллиард на миллиард элементов. И, опять-таки, чтобы подсчитать заранее число которое встречается в формуле несколько раз не надо быть каким-то многомудрым практиком, эту оптимизацию школьников учат делать в некоторых школах...
Ах да, есть ещё альтернативный путь, просто раскрыть все скобки, разбить сумму на несколько и несколько раз вынести общий множитель за знак суммы. Вычислений будет больше, но лишь в константное число раз.
N-Cube
04.11.2022 19:59Ладно, давайте я вас прямо спрошу - вы сколько раз исходный терабайтный файл целиком читать будете? Для вычисления каждого элемента матрицы нужно прочитать две строки (по одному килобайту в нашем примере) из этого файла, для вычисления среднего по столбцу (строке) нужно прочитать весь файл. А как среднее по всей матрице считать будете? Сохранить в памяти или на диске матрицу дистанций невозможно, потому что это 16 экзабайт. А еще файлов-то два, для подсчета корреляции, и нужно кроме ковариации еще дважды вариации посчитать. Прикиньте время выполнения вашего способа…
N-Cube
05.11.2022 06:48Да пожалуйста, мне не жалко. Итого, на всех нодах разом вы сможете прочитать два исходных файла данных, необходимых для вычислений. Прекрасно, но для вычисления каждой строки (столбца) вам нужны ВСЕ данные разом на одной ноде - или вы будете эти два терабайтных файла миллиард раз по сети гонять (то есть для каждой строки). Время передачи одного терабайта в гигабитной сети это часа три, умножаем на миллиард и получаем больше 100 000 лет для одного файла данных. Да вы просто сферический программист в вакууме :)
mayorovp
05.11.2022 09:11Да почему терабайтный-то? Мы ж не идиоты, мы его по сети не текстом передавать будем...
N-Cube
05.11.2022 11:57-1Передавать можно 1/5 терабайта - миллиард записей, в каждой записи 50 полей типа флоат (4 байта). Все равно безумно долго, так что конвертация в бинарный файл вас не спасет вообще никак.
mayorovp
05.11.2022 12:22Так, погодите, у вас только что совсем другие цифры были в исходных данных...
N-Cube
05.11.2022 13:52-1Мы начинали с того, что задан терабайтный csv файл, в котором миллиард строк (многомерных точек) и 50 полей в каждой строке (координаты точки в 50тимерном пространстве). Для вычисления корреляции дистанции (или даже Пирсона) нужно два таких файла обработать совместно, разумеется. Помнится, меня выше даже упрекали, что это мол совсем смешной объем данных:)
Andy_U
05.11.2022 09:38Похоже, мы друг друга не понимаем. В том определении, что я вижу, начиная с Википедии, речь идет о вычислении скаляра для пары векторов. О каких матрицах вы говорите?
N-Cube
05.11.2022 11:59Открываем википедию: https://en.m.wikipedia.org/wiki/Distance_correlation
И читаем определение: «First, compute the n by n distance matrices (aj, k) and (bj, k) containing all pairwise distances…»
У нас n равно одному миллиарду и каждая матрица дистанций получается размерностью миллиард на миллиард.
Andy_U
05.11.2022 13:02+1Ox же. Вот даже в голову не пришло предварительно вычислить эту матрицу, сохранить и потом использовать при больших векторах. На ходу же можно. Но для этого нужно понимать, что матрица, это лишь способ представления линейного оператора, хоть это тут и не используется (тут не матрица, а просто двумерные массив). Вектор прочитали, второй (который из "усредненных"), и само глобальное среднее посчитали и сохраниили, а потом член класса написали, который по j и к вычисляет нужный коэффициент матрицы.
Вдогонку, университетская специальнось "теория ядра и элементарных частиц", кандидатская по теор.астрофизике, Последние 22 года R&D M&S.
N-Cube
05.11.2022 14:09Возвращаемся к уже осуждавшемуся вопросу - вы миллиард раз исходные данные с диска целиком считывать будете (терабайт с CSV или 200 гигабайт в бинарном виде) только чтобы посчитать средние значения по столбцам? И потом снова их считывать, чтобы каждую строку (столбец) матрицы посчитать для дальнейших вычислений?
N-Cube
05.11.2022 14:15-1Один столбец (строка) матрицы дистанций занимает 4 миллиарда байт, то есть 4 гигабайта. А чтобы его посчитать, нужно прочитать с диска два исходных файла по 200 гигабайт каждый в бинарном виде, почти полтерабайта в сумме. И так повторить миллиард раз для анализа полной матрицы, чтобы просто получить средние значения :)
arheops
05.11.2022 15:06У амазона m5d.24xlarge — 386Гб памяти, можно арендовать на час, его вполне хватит на вашу задачу и 200Гб поместятся в память. А если и нет, у того же инстанса NVME диски.
Стоимость 5.424 в час, программист всяко больше на программу потратит.
Да и полтерабайта не такой уж невероятный случай, я работал с базой данных mysql запущенной на машинке с 768 RAM, и там лимит был вроде под 2 терабайта памяти.
Вот такие сервера доступны для заказа на IBM, к примеру. В течении суток(Предел в датацентре Далласа — 4096Гб).<img src="https://prnt.sc/FFj2DP654S0n" alt="image"/>
Чтение 200гб на более-менее современных NVME вообще ниочем. А еще в датацентре IBM есть Оптан. На 2 террабайта, до 4х штук на сервер. Latency меньше 300нс( у ддр-4, к примеру, 10-20).
N-Cube
05.11.2022 15:39-1Так дело в том, что 200 гигабайт надо только прочитать миллиард раз (а еще нужно сами дистанции посчитать, что куда как посложнее просто чтения) и это только для вычисления среднего значения в матрице дистанций :)
N-Cube
05.11.2022 15:43-1Для вычисления используются миллиард миллиардов значений попарных дистанций для миллиарда исходных записей (точек). Да как угодно назовите, матрицей размером миллиард на миллиард или миллиардом векторов размером миллиард элементов каждый - вы эти данные ни в оперативку поместить не можете, ни на диск, ни даже перебрать эти элементы с подсчетом парных дистанций на лету (потому что только чтение исходных данных с диска миллиард раз подряд займет тысячи лет). Что делать-то будете, носитель академических знаний?:)
Andy_U
05.11.2022 15:52Еще раз, для доступа к коэффициентам матрицы A[i,j]=abs(R[i]-R[j], нужен только вектор R. Предварительно вычислять все коэффициенты и сохранять их не нужно. Да, будет несколько медленнее. Это, кажется, ленивыми вычислениями называется?
N-Cube
06.11.2022 08:01-1Опять вы про теорию, про которую не имеете понятия. Ленивые вычисления требуют хранения в памяти всего графа обработки - и для данной задачи это невозможно. Вот у меня Apple Air аж с 24 GB RAM, так какой код запускать для вычислений? Или вы все так и будете фантазировать про межзвездные датацентры, бороздящие просторы галактики?
SerjV
05.11.2022 03:24если «общематематические» — то не подразумевают. а если знания «вычислительной математики и численных методов» — то подразумевают.
Нет такого подразделения. Есть "аналитические" методы, есть "численные/вычислительные".
Разница, если кратко и упрощённо, в том, что аналитический метод даёт на выходе формулу решения, куда подставив значения получите ответ в численном виде (ну и если что - потом по этой формуле можете еще много ответов насчитать для разных значений переменных и параметров), а численные методы сразу вычисляют ответ (но при изменении параметров - придётся всё перерешивать заново).
А все эти "инженерные математики", "математики для экономистов/юристов/социологов" и т.п. - это всего лишь попытки дать некоторую выжимку математических знаний студентам нематематических специальностей.
DvoiNic
06.11.2022 12:19А все эти [математики]- это всего лишь попытки дать некоторую выжимку математических знаний студентам нематематических специальностей.
именно так. Ибо далеко не всем нематикам нужна даже выжимка, не говоря о полном объеме.численные методы сразу вычисляют ответ
они дают (советуют) хороший (по тому или иному критерию) способ численного вычисления этого ответа с учетом вида входных данных, и существующих ограничений.
FrolVII
04.11.2022 12:21+1Любить иногда "порадовать" соседей игрой на пианино - это одно, а вот зарабатывать себе той игрой на хлеб - это совсем другое.
hrozhek
04.11.2022 12:49Вы не рассматриваете важную оговорку из статьи. Если программист-самоучка работает с кодом, в котором много математики, то весьма вероятно, кроме программирования, подучит и математику. И может быть, будет понимать ее не хуже человека, вытяныувшего на тройку в универе просто за счет настойчивых походов к преподавателю на пересдачи. С другой стороны, человек с такой мотивацией может и от университета получить максимум.
DvoiNic
04.11.2022 13:53А если программист-самоучка будет работать с цифровой обработкой сигналов — он сможет сам «подучить»?
ИМХО, скорее всего такой самоучка не пойдет туда, пойдет «формошлепить».
khajiit
04.11.2022 13:21+1А какая разница между изучать закорючки в формулах в интернете ради зачета и забыть и работая в предметной области дагадаетесь?
Во втором случае остаточных знаний — больше.DvoiNic
04.11.2022 13:58для того, чтобы полноценно работать — нужно уже многое знать.
зы. вы хотели бы, чтоб студент-медик изучал анатомию не «в институте ради зачета», а непосредственно на вас в процессе операции?khajiit
04.11.2022 14:51+1Некорректный аргумент: ложная дилемма.
Некомпетентность.Теоретически полученные знания закрепляются среди студентов практическими работами. Для строителе, геологов и археологов это выезды на местность. Для медиков — ВНЕЗАПНО — присутствие на реальных обследованиях и операциях, практика в медучереждениях. Для обывателя столкнуться с этим можно на регулярных систематических манипуляциях: у стоматолога или гинеколога. Никогда не слышали, как стоматолог кому-то рассказывает, куда смотреть на такой корень толстый и завитной?
Это даже не касаясь того, что в процессе работы всегда приходится осваивать новые знания, в любой професии.Так что, если студент-медик изучал анатоми непосредственно на вас в процессе операции, то у него будет в ∞ раз больше практического опыта, чем у того, кто сдал на отъябись ради зачета. И когда он станет врачом, для каджита такой врач будет гораздо предпочтительнее.
DvoiNic
04.11.2022 14:54ну а если сдают не
на отъябись ради зачета
.
ну и у вас как раз ложная дилемма: в вашей картине мира в вузах учатся исключительно прохиндеи, стремящиеся ничего не учить и проехать «на кривой кобыле», а практикой занимаются исключительно умные и добросовестные… а это далеко не так.khajiit
04.11.2022 15:05=) Каджит студентов и образовательный процесс наблюдает не первый год, не в одном ВУЗе. По студентам выборка даже сойдет за репрезентативную.
Ваша попытка сказать "сам такой" провалилась, превратившись в подмену: каджит нигде не утверждал, один подвид студентов изучает только теорию, а другой только практику.
semennikov
04.11.2022 13:37С моей точки зрения ВУЗ нужен прежде всего для систематизации тех знаний что вы получаете самостоятельно и для освещения тех тем которые вы не заметили/случайно пропустили. Ну и для демонстрации более простых решений тех задач что вы уже решили
DvoiNic
04.11.2022 13:56скорее, для системного направления к получению знаний внутри определенной отрасли. И для показа тех решений, что уже нашли до вас, чтоб не изобретать очередной велосипед со взаимно перпендикулярными треугольными колесами
yatanai
04.11.2022 14:54Пишу сам для себя программки уже сколько лет. Были и игры, и компиляторы, и парсеры текста. Но единственный раз когда мне понадобился матан, когда я писал трекер для микроконтроллера и удивился что порядок умножения имеет значение. Спустя года так 3 только
barloc
04.11.2022 18:05Статья специально перевирает (вернее не досказывает) факты.
Про ту же Гамильтон: степень бакалавра по математике и философии (непрофилирующая дисциплина) в колледже Эрлхэм, аспирантура в области абстрактной математики в университете Брандейс, и как итог - профессор математического факультета.
Серьезно, она не знала как перемножать матрицы? :)
NimuraF
05.11.2022 21:51Во многом это утверждение чисто спорное, это как пытаться осваивать дискретную математику именно как академическую науку в надежде, что после этого вы станете выдающимся программистом. В большинстве случаев, увы, это работает как раз наоборот, освоение той же линейной алгебры займёт ну недельку-полторы при работе над реальным проектом, а изучение - обычно семестр, при этом ещё и кое-как, ибо все прекрасно понимают реальную пригодность данных знаний в своей карьере (около нулевую). Да и уж тем более практика показывает, что из математиков программисты обычно очень так себе :/
isitnull
05.11.2022 21:52Я не очень понимаю, каким образом отсутствие академического образование исключает возможность самообразования? И если такому человеку надо освоить изучение матриц, это просто означает необходимость прочитать полторы страницы учебника и потратить максимум два дня неспешного изучения. Разобраться же на уровне понятий и терминологии - это вообще задача на 15 минут.
klimkinMD
04.11.2022 00:10Золушка, принцесса на горошине, спящая принцесса ... А вот Возняк и Гамильтон неудачные примеры, с моей точки зрения, уж лучше пресловутый Билл Гейтс
Daddy_Cool
04.11.2022 01:55+7ОМГ, сколько лет этому холивару!
В прошлых сериях договорились, что хорошее ВО - нужно, плохое - нет.
В плане математики - да, много книг и хороших, и математику уровня 1-2 курсов технического можно изучить самостоятельно при наличии склонностей, дальше сложно - и книг понятных меньше и математика развесистей становится. И обычно те у кого есть склонности уже оказались в ВУЗе.
tym32167
04.11.2022 06:32+2Какая то популистская статья.
Во первых, какие то яркие примеры программистов-самоучек вполне может быть ошибкой выжившего, ведь статистики того, сколько самоучек бросило обучение нет, а таких, я предполагаю, на порядки больше тех, кто имеет академ образование.
Во вторых, нам показывают график и уверяют, что 69% разработчиков - самоучки. Но на том же графике если сложить всех, кто имеет какую то степень в CS или хотя бы колледж, получим чуть ли не 80%. Вероятно, многие, у кого есть степень, точно также считают себя самоучками.
Мы изучаем алгоритмы и структуры данных, и даже умеем обойти двоичное дерево.
Так себе достижение, если честно. Обход деревьев - это рутина, а не какой то вызов в профессии.
Программисты-самоучки – это сообщество, в котором все до одного имеют дело с компьютерами, коммуникацией и данными, а не обязательно хотят работать программистами на полную ставку.
Как и любые другие программисты.
у вас, как у самоучки, есть своя фишка. Вы читаете эту книгу не потому, что вам ее задали, а из желания учиться, и такое желание – наибольшее из всех возможных преимуществ
Как будто у программистов с дипломом этого желания нет. Какой популизм.
Не в обиду самоучкам, но из статьи выходит ощущение, что вот сейчас "докурю и изучу вашу программирование". А на деле получается, что самоучка сначала тратит массу времени, чтобы дорасти до формошлепа, а потом еще больше, чтобы хотя бы какой то уровень подтянуть и не застрять на уровне веб-макаки.
Для работодателя вообще не принципиально, самоучка ты или нет, потому у самоучек нет преимуществ для работодателя. Единственный плюс для самоучек - это то, что для начала работы и получения зарплаты им не надо проводить годы в универе, изучать темы, многие из которых тебе никогда не понадобятся, можно вместо этого потратить 6-12 месяцев на плотную нацеленную учебу и после идти клепать формы и добирать остальные знания на ходу. Наличие же качественного (ключевое слово - качественного) образования позаоляет залетать в компании с мировым именем сразу после универа, минуя годы формашлепства и гонку среди таких же самоучек.
Означает ли, что самоучкой быть плохо? Конечно нет! Но надо понимать, что научиться программировать и строить системы за месяц не получится. Придется долго и усердно учиться уже на работе, восполнять пробелы в основах CS, которых у выпускников с образованием уже давно нет.
fndrey357
04.11.2022 09:22+3Тема больше к вопросу современного образования. Если раньше школьник/студент выучил 52 формулы по физике - он молодец. Сейчас технологии развиваются так, что в ходу проектная деятельность - на стыке нескольких наук, работа на конечный результат без готового решения и, как правило - никаких правил.
Пример. Вчера на Хабре читал статью об УНЧ на стабилизаторе напряжения LM. Эту штуку сделал либо гений, который увидел скрытые возможности либо не знающий, как и куда применить завалявшуюся микруху.
Так-же у программиста. Задачи, которые сейчас ставятся - не имеют готового решения. И человеку, который пытается разбираться в этой проблеме с нуля часто получается найти нестандартный путь решения проблемы.
Поэтому самостоятельное обучение - да не важно кого - программиста, токаря, электрика, водопроводчика - это просто необходимость и атрибут нашего времени.
И, как я дИтям своим объясняю две вещи.
Ардуино просто создано для статистики. Когда мильЁн человек попробуют сделать часы, сто тыЩЩ добавит к часам погодную станцию, десять тысяч чего-то извлекут нового, тысяча пойдут учиться дальше, сотня придет работать в Микрософт или Гугель, 10 человек разработают смартфон который ты держишь в руках, один станет Гейтсом или Возняком.
Люди делятся на тех кто играет в игры их большинство и на тех, кто пишет игры - их меньшинство.
DvoiNic
04.11.2022 10:23+3Если раньше школьник/студент выучил 52 формулы по физике — он молодец.
не, раньше все-таки пытались сделать, чтоб школьник понял.
Хотя, безусловно, не везде — и значительная часть просто «зубрила формулы».
Есть два нюанса:
1. рост «количества формул». Если в какие-нибудь там 40-е годы «учебная» физика в лучшем случае ограничивалась электротехникой и «моделью Бора», то сейчас науки разрослись…
2. появился «прямой доступ» к информации. Раньше книжки-то толком не купить было, только работать в библиотеках, или «лекции». а сейчас — начиная от лекций _хороших_ лекторов, и _хороших_ практиков, и заканчивая литературой — не отрывая задницы, с возможностью многократного повторения, в любое время дня и ночи.И человеку, который пытается разбираться в этой проблеме с нуля часто получается найти нестандартный путь решения проблемы.
— ага, и почти всегда — через *опу, уже изученый (и порой даже отвергнутый) другими — но «нестандартный и оригинальный»
vkni
04.11.2022 17:09Если раньше школьник/студент выучил 52 формулы по физике - он молодец.
Выделить из хаоса физики эти 52 формулы — сложно. Посмотрите, сколько занимают "Начала" Ньютона, и сколько — школьный учебник динамики.
Сейчас технологии развиваются так, что в ходу проектная деятельность -
на стыке нескольких наук, работа на конечный результат без готового
решения и, как правило - никаких правил.Только, извините, где результаты? Пока видно какие-то попытки довести до ума технологии, идущие из советских лет.
fndrey357
05.11.2022 07:34+1Выделить из хаоса физики эти 52 формулы — сложно. Посмотрите, сколько занимают "Начала" Ньютона, и сколько — школьный учебник динамики.
Почитайте Феймановские лекции по физике - там школьный учебник умещается в десяток формул. Рекомендую. Читается как сказка на ночь.
Суть в том, что за крайние 30 лет образование превратилось из обучения "знать и объяснять" в обучение "найти и проанализировать". Поэтому, те, кто кричатЬ, что даешь Советскую систему - не правы.
Я учился при союзе. Я помню что было обидно, когда Физтех давал задачи и там были формулы-понятия-теоремы из другого раздела, а не того, который проходили. Уже в институте - и ТРИЗ и преподу нормальные. Спасибо, чему-то научили....
Для программера гораздо важней, чем для любого другого технаря эта цепочка - нашел информацию-обработал-применил. Потому как у него в отличии от другого технаря срок конечной реализации продукта короче намного.
Поэтому я считаю, что самоучки - это люди, которые сами на сознательном или бессознательном уровне научились искать информацию, обрабатывать ее и самое главное - применять. И такая ситуация - в любой области.
Andy_U
05.11.2022 13:46Я помню что было обидно, когда Физтех давал задачи и там были формулы-понятия-теоремы из другого раздела, а не того, который проходили.
Обидно? Ну, если "проходили", то возможно.
vkni
05.11.2022 16:31Почитайте Феймановские лекции по физике - там школьный учебник умещается в десяток формул. Рекомендую. Читается как сказка на ночь.
Я читал его в школе. К сожалению, реально хорошо физике мало где учат. То есть, умению строить и работать с моделями, держать в голове размерности и погрешности. Да, советскую систему надо менять, но не так, как получается сейчас.
Поэтому я считаю, что самоучки - это люди, которые сами на сознательном
или бессознательном уровне научились искать информацию, обрабатывать ее и самое главное - применять. И такая ситуация - в любой области.Это один из навыков, которые должна давать школа. Но он не исчерпывающий. Школа должна давать очень много чего, что человек сам не будет изучать. Вот нет у него тяги к биологии, а пособие по собственному телу он должен получить.
fndrey357
05.11.2022 19:09Да, советскую систему надо менять, но не так, как получается сейчас.
Вопрос не в Советской системе образования- это просто расхожее словосочетание. Вопрос в том, что информационные процессы повернулись так, что систему образования надо менять
vkni
05.11.2022 22:56ФЛФ — это продукт примерно той же системы образования. То есть, нужно делать "советскую систему образования" ещё более "советской". :-)
Если вы посмотрите "сталинские учебники", то увидите, что они написаны в той же простой, очень эффективной манере, что и ФЛФ. Или возьмёте классический учебник Киселёва по алгебре. Тоже просто, относительно строго, но не слишком строго.из обучения "знать и объяснять" в обучение "найти и проанализировать"
Невозможно "найти и проанализировать", не имея базы. Вы не сможете читать серьёзные книги по алгебре или топологии, не привыкнув к "средне-строгому" изложению матана в ВУЗе, а тот требует нестрогого изложения в школе.
Посмотрите, как разматывают "убеждённого практика" в соседней ветке — если нет базы по графам (буквально 1 семестр), нет базы по оптимизации, то гугли-не-гугли. Просто сознанию не за что зацепиться, чтобы отфильтровать те гигабайты информации.
kvyat
05.11.2022 21:52Согласен с вами. Я думаю, в конечном счёте программирование на каком-то уровне будет необходимо для человека любой профессии как инструмент и школьники уже будут понимать(хотя бы стремиться) как автоматизировать какие-то простые задачи. Я, например, перешёл в программирование из общественного питания. Будучи шефом, нужно было прогнозировать примерное количество блюд проходящих в день. Это занимало много времени и было рутинной задачей. Я как раз увлекся программированием и понемногу сделал инструмент для прогнозирования. В целом, он показывал неплохие результаты, хотя в любом случае приходилось вносить корректировки. Но количество времени удалось значительно сократить. И, безусловно, я звёзд с неба не хватаю, но определенные задачи решать могу и стараюсь этот круг расширять.
rukhi7
04.11.2022 11:24+1Для русскоязычной аудитории это заявление долно производить разрыв мозга, мне кажется:
Не только среди легенд Кремниевой Долины попадаются люди, сделавшие блестящую карьеру программиста, не имея степени по Computer Science.
У русскоязычных нет такого научного напрвления: Computer Science! Видите его даже на русский перевести постеснялись.
Таким образом все русскоязычные, по определению, являются самоучками в области Computer Science, той есть в той области которой для них не существует. Вот такой парадокс, однако!
Вот мне тут один специалист по матлабу отвечал:
(то) как считать систему ДУ (разве не математика?)
Математика, но вычисления это отдельная узкая ее область, тогда как сама математика гораздо шире.
Вроде как, не может быть ничего научного в вычислениях, вот и все!
DvoiNic
04.11.2022 11:46«Легенды» — они на то и «легенды». И то, не «как правило», а «попадаются». а «в среднем» — имеют какую-то «степень».
У русскоязычных нет такого научного напрвления: Computer Science!
есть, например раздел 02.03.* — «Компьютерные и информационные науки»rukhi7
04.11.2022 22:08«Компьютерные и информационные науки»
интересно, как у них там отдельные науки называются, и предмет изучения.
В названии раздела можно как и на заборе, что угодно написать.
DvoiNic
06.11.2022 12:25тут 400 комментов уже надолбали на тему «программист должен уметь самостоятельно искать информацию...»
agray
04.11.2022 17:44Мир вообще-то развивается, алллоу. Вуз нужен только для начальных знаний, а потом всё равно придется гуглить, ездить на конференции, постоянно слушать чо там как чего нового, изучать и пополнять знания. Через нескольких лет практики самоучка от человека с вуза ничем не отличается вообще, при условии что идёт постоянное обучение, а не легаси застой.
Разве что самоучка лучше умеет искать информацию и имеет нестандартный подход.Andy_U
05.11.2022 13:53Разве что самоучка лучше умеет искать информацию
Известная же фраза : "Чтобы правильно задать вопрос, нужно знать бOльшую часть ответа" (C) Роберт Шекли.
и имеет нестандартный подход.
И будет говорить о "триангуляции замкнутого графа". Чуть выше.
agray
06.11.2022 15:23Известная же фраза : "Чтобы правильно задать вопрос, нужно знать бOльшую часть ответа" (C) Роберт Шекли.
Входит в умение поиска информации. Правильно поставить вопрос, чтобы от общих запросов "найти кратчайший путь" перейти к графу и "список алгоритмов на графе". Правда понятия не имею как от этого перейти к триангуляции, но видимо как-то можно.
И будет говорить о "триангуляции замкнутого графа". Чуть выше.
Так он прав. Через триангуляцию Делоне задача коммивояжёра успешно решается. Вот видишь, ты даже о таком не думал и посчитал это смешным, а он нашел триангуляцию уже.
KeyJoo
04.11.2022 20:14Большая цена у переключение между контекстами. Сейчас с одним из учеников именно по этой книге идём(как часть программы обучения программированию). Он молод и пока не ценит того, что имеет в свои годы.
magiavr
04.11.2022 22:55+1В нашем государстве тебе даже бронь не дадут без высшего образования, будь ты хоть супер-пупер программистом, и работай на супер-пупер важном направлении в супер-пупер it- ном предприятии.
nameless323
04.11.2022 23:43Это во многих государствах так работает. Ту же рабочую визу получить может оказаться той еще проблемой без диплома (хотя и не нерешаемой).
Wrench_IT
04.11.2022 23:45+2Я бы сказал, что программист в принципе не может не быть самоучкой: хотя многие говорят, что главный скилл программиста - английский язык, лично я считаю, что главный скилл - как раз способность к самообучению, ведь при практически любом бэкграунде просидеть всю жизнь на одном-единственном стеке одной конкретной версии никак не получится, а значит придется постоянно развиваться. Что касается того, нужно ли высшее образование программисту, то мое личное мнение: высшее образование в принципе является обязательным лишь в тех областях, где невозможно получить доступ к необходимой практике в домашних условиях или критически высока цена ошибки (яркий пример - медицина), для программирования же в большинстве случаев достаточно лишь ПК/ноутбука. Сторонники вышки частенько вспоминают математику, но тут я, опять же, не улавливаю связи: математику также можно освоить самостоятельно в необходимом объеме.
victor_1212
05.11.2022 03:22+1>Маргарет Гамильтон и код для NASA, который она написала от руки
небольшое дополнение - точное название должности которую Маргарет занимала - Director of the Software Engineering Division of MIT's Instrumentation Laboratory, это примерно уровень начальника отдела, у нее конечно была сильная команда, когда фотография была опубликована в 1969, подпись была такая: "Here, Margaret is shown standing beside listings of the software developed by her and the team she was in charge of, the LM [lunar module] and CM [command module] on-board flight software team."
ps
заметим что она училась программированию участвуя в разработке sage, задолго до apollo, там было достаточно у кого можно поучиться, т.е. таки не вполне самоучка
N-Cube
05.11.2022 06:51Так и вы тоже можете начать писать код для ядра линукс и учиться у Торвальдса и прочих. Какое это отношение имеет к академическому образованию? Это и есть самоучка, потому что если вы не учитесь - то и останетесь просто недоучкой :)
victor_1212
05.11.2022 17:37> писать код для ядра линукс и учиться у Торвальдса и прочих
там ситуация была интересней, примерно как если Торвальдс и десяток других такого уровня работали с ней под одной крышей над одним проектом, в то время программисты работающие над sage были впереди академической науки (imho включая Dijkstra), семинары по обучению там тоже были, главное состав очень сильный был, хотя технология создавалась с нуля и под стрессом, вообще над sw несколько сотен программистов работали, включая Margaret, это не слишком широко известно из-за специфики работы, в смысле обычного образования из колледжа она была математик
ps
код ядра linux модифицировать тоже приходилось, как и в аспирантуре учиться именно по специальности, правда супер давно :)
mivallion
05.11.2022 21:52Исходя из опыта проведенных собеседований сделал для себя вывод о том, что профильное высшее образование играет важную роль в формировании специалиста. Выпускник курсов или самоучка чаще всего знает, как выполнить ту или иную задачу, потому что выучил основные функции своего языка и фреймворка, но не знает, почему она решается именно так, что происходит внутри этой функции, какие могут быть подводные камни и прочее. Еще большей проблемой становятся задачи, которые на курсах или в книжках не объясняли. Выпускники профильных направлений в свою очередь могут не знать в текущий момент нужного решения, но легко могут найти решение, потому что знают основы, базу, их этому учили на протяжении 4-6 лет. Все это конечно не исключает исключений с обеих сторон.
Впрочем, это все субъективный опыт, возможно это одно большое совпадение
gvtret
05.11.2022 21:52Сам из самоучек. На последней работе прошел собеседование и сделал тестовое задание. Причем сразу говорил, что у меня нет профессиональной "вышки". Так вот с удовольствием работаю уже 5й год. Со своими навыками мог бы получать и больше, но мне интересно то, чем сейчас занимаюсь, имя оплату в среднем по "сектору".
linchk
05.11.2022 21:52Приобретение знания самостоятельно - один скил (Самоучка). Умение решать несвойственные и неинтересные задачи - другой (Вуз с его системой дисциплин). А дальше вопрос, насколько вы углубляетесь в свою стезю и сколько вам приходится заниматся тем, что не интересно. И еще. Вузовское образование принудительно расширяет кругозор, закладывая основы. Самоучка выбирает и исследует то что интересно. И у того и у другого есть пробелы в областях компетенций, в которые они не полезут за поиском решения, так как даже не подозревают о такой возможности. Хорошо если есть тот кто может охватить необъятное и указать конкурирующие варианты решения. Резюме. Как бы вы не учились отдуваться руководителю проекта :)
Soltt
05.11.2022 21:52Программировать учился сам. Тогда гугла не было потому как был 1994 год, тогда вообще много чего не было. Учился по инструкциям к компьютеру "Агат 2" и на нем же. Из своих наблюдений могу сказать, что "самоучки" (не все) , особенно поначалу, менее дисциплинированны относительно документирования, рефакторинга и проектирования программ. При этом они более креативны и мотивированы внутренним желанием постоянного роста. "Академики" (не все) хорошо мыслят абстрактно, не плохо работают с "указателями в си" :) , но и их приходится вечно толкать, как "жигули" после 5 лет на штрафстоянке.
P.S. Важно не то - как человек научился ремеслу, а то - какой из него ремесленник получился .
C_Sharp
05.11.2022 21:52Я самоучка и мой опыт скорее указывает, что спрос больше будет расти на образованных специалистов, потому что ИИ развивается, а он в основе своей состоит из мат. алгоритмов, которые не программисты пишут, а математики. Программисты кто библиотеки пишет, те могут быть самоучками, а для того кто ими пользуется с каждым годом порог вхождения в специальность будет только понижаться. Почему раньше самоучки получали признание? Потому что они создавали что-то по настоящему новое, основу системы которой мы сегодня можем пользоваться. Сейчас же основной базис в IT определён, направление развития определено, а чтобы выполнять эти задачи больше подходит специалитет. Я думаю, что такие технологии просто не возможно было бы создать без таких вот самоучек, это специфические люди, которые обладают обширными познаниями в различных областях, умеет в короткие сроки усваивать большое количество информации и адаптировать её для поставленных задач, и что по истине уникально, эти задачи они сами себе могут придумать. Сейчас скорее будет более выражена тенденция на рынке программистов такая, что делиться рынок будет на программистов которые могут редактировать и улучшать существующие системы и на программистов более пользовательского профиля.
N-Cube
06.11.2022 08:36Математики столетиями отдельные системы функций создавали и всю жизнь их свойства изучали (Фурье анализ - система простейших тригонометрических функций разного масштаба), а потом биржевой аналитик Мандельброт вдруг показал, что можно создать разномасштабную систему вообще из всего и она будет обладать определенными свойствами (фрактальность). Или в вузах изучают интегральное и дифференциальное исчисления, но вопросом про интегродифференциальное исчисление можно поставить в тупик, навскидку, 99.99% людей с высшим образованием - получается, люди просто выучили, что им велели, и никаких попыток задуматься не было вовсе. И так далее - кажется, что существующая система образования не дает людям преимущество в придумывали чего-то нового.
stp008
06.11.2022 01:58Небольшой факт чекинг
Маргарет Гамильтон - изучала математику в Мичиганcком университете и В 1958 году она получает степень бакалавра по математике (стоит ли говорить, что в то время разработка была производной математики)
Кевин Систром - окончил частную школу Миддлсекса в Конкорде, штат Массачусетс, где углублённо изучал компьютерное программирование, а в 2006 — Стэнфордский университет, получив степень магистра в менеджменте
Джек Дорси - посещал Миссурийский университет науки и технологий, прежде чем впоследствии перейти в Нью-Йоркский университет, где его впервые посетила идея создания «Твиттера»
Стив Возняк - Wozniak eventually returned to Berkeley to finish his coursework, earning his degree in 1986. After graduating, he founded CL9, which created the first universal remote control, and later, Wheels of Zeus, which made wireless GPS technology. He also worked as a fifth-grade teacher, taught computer literacy to middle and high schools students, created two music festivals and was actively engaged in numerous business and philanthropic ventures.
Дэвид Карп - больше похож на предпринимателя, чем на разработчика. David Karp (born July 6, 1986)[1] is an American webmaster, entrepreneur, and blogger, best known as the founder and former CEO of the short-form blogging platform Tumblr.
Корректность рушится в самом начале статьи почти в первом же абзаце. Выводы делайте сами)
victor_1212
06.11.2022 15:58> Маргарет Гамильтон - изучала математику в Мичиганcком университете и В 1958 году она получает степень бакалавра по математике
только ради точности, BA Earlham College, Richmond, Ind. (math major), см.
shteyner
"а потому, что программировать безумно интересно"
Думаю у многих это не так, скорее потому что ты начинаешь понимать, или ты научишься это делать, или рутина победит)
Что бы продуктивно общаться с компьютером, нужно уметь разговаривать на его языке.
VBDUnit
Нейросети, имхо, постепенно пошатнут это утверждение. Чего только стоит суета вокруг StableDiffusion. Разумеется не везде и не всегда, но постепенно возможности формулировки задачи на человеческом языке будут появляться в разных местах.
Другое дело, что часто люди даже на человеческом языке сформулировать задачу нормально не могут. Но тут ИИ тоже может хорошо сработать, и научиться понимать бессвязный поток мысли лучше, чем это делают сами люди.
А в остальном согласен.
vkni
В этой фразе отражается известное заблуждение, что эти возможности формулировки задачи на человеческом языке полезны. Нет, это не так — формулирование задач компьютеру на естественном, то есть плохо формализованном языке, как правило не нужно.
VBDUnit
ИМХО, возможности формулировки задачи на человеческом языке не полезны и не бесполезны, они просто снижают порог вхождения с уровня "умеет работать с компьютером" до уровня "умеет говорить".
И плюсы/минусы тут такие же как у любого другого снижения порога вхождения, например, у перехода от коммуникаторов со стилусом и WP к современным смартфонам, или от C++ к JavaScript, или от профессионального фотоаппарата к мыльнице/камере в смартфоне, или от текстового интерфейса к GUI. Профессиональных возможностей меньше, зато технология становится доступна широким массам.
И да, средний профессиональный уровень продукта, который делается с инструментами с низким порогом вхождения всегда ниже, чем тот, который делается профессиональными инструментами. Это плохо, но закономерно.
N-Cube
Неужели вы думаете, что если вам предоставят компьютер за миллиард долларов, то результаты вашей работы станут в миллион раз лучше, чем на компьютере за тысячу долларов?:)
VBDUnit
Нет, я говорил вообще не об этом. Я не зря упомянул "средний уровень продукта", а не просто "уровень продукта". Попробую развернуть мысль.
Инструменты с низким порогом вхождения создают массовость, и из-за этой массовости средний уровень результатов работы, выполненной с помощью этих инструментов, как правило, падает.
Происходит это потому что к "высшему" (в плане профессионализма/ ресурсности/ проработанности) сегменту добавляется "средний" и "низший". Уменьшение количества затрат на получение результата влечёт за собой снижение требований к качеству - зачем тщательно всё выверять, если можно сделать много образцов/деталей, и выкинуть то, что не подошло. Или не выкинуть, а просто оставить мертвым грузом. Плюс, помимо профессионалов, которые долго учились работать с профессиональными инструментами, появляются новички, а потом и вовсе обыватели, которые теперь тоже могут решать подобную задачу. Они решают её хуже, но зато их много, и они могут делать много работы - им помогают дополнительные слои абстракции в инструментах. Это не плохо, это просто особенность, со своими плюсами и минусами.
Сюда входят истории в духе "быстрое приложение на C++ vs тормознутое приложение на JavaScript с гигабайтом почти неиспользуемых библиотек", "художественный уровень фотографии тогда и сейчас", автомобили тогда и сейчас, впихивание контроллеров во все возможные места даже там, где можно обойтись парой транзисторов. Потому что, по факту, решить задачу с помощью контроллера в большинстве случаев для большинства тех, кто это будет делать, проще, хоть это и не оптимально с точки зрения того, что там внутри происходит.
Лично у меня есть работающий компьютер 1990х годов с Microsoft Word 2000, и этот ворд на нём работает быстрее (по ощущениям, раз в 6), чем современный ворд на двухпроцессорной машине с RTX 3080Ti и NVME SSD. При том, что вычислительная мощность там отличается на 3 - 4 порядка, если не больше. Потому что новый Word создан с помощью инструментов, порог вхождения в которые ниже, чем тот, что был у Word 2000. Плохо это? Отчасти да, отчасти нет. Новый Word может больше, чем старый, хотя сам, будучи инструментом, утратил много черт профессионального инструмента, потому что стал массовым. Привет, ленточный интерфейс.
Разумеется, процесс превращения профессионального инструмента в массовый протяжён во времени, и часто на это накладывается другой фактор - научно-технический прогресс, который действует в противоположную сторону - чем новее продукт, тем больше возможностей. Но это два разных фактора, которые следует отличать.
Это всё ИМХО, конечно.
N-Cube
Массовость порождает новый «средний» уровень, но дисперсия уровня остается - так что новых выдающихся продуктов становится больше, чем вообще всех ранее созданных, что позволяет выбирать. И если вы себе выбрали микрософт офис, как вы отмечаете выше, это всего лишь ваш личный выбор и это вовсе не значит, что за прошедшие десятилетия не появилось новых отличных редакторов на любой вкус. Более того, я уже два десятилетия продолжаю пользоваться консольным midnight commander и абсолютно доволен его производительностью и встроенным редактором :)
Ох уж это завышенное самомнение… Просто приведу пример - в линуксе все было очень плохо с поддержкой веб-камер, пока один врач-анестезиолог 60+ лет не заинтересовался темой и не написал поддержку сотен камер just for fun. С тех пор в линуксе все хорошо с вебкамерами. Не каждый «обыватель» на это способен, но не нужно считать себя избранным и лучше всех «обывателей».
VBDUnit
Термины "профессионал" и "обыватель" здесь используются в значении "человек, долго и много изучавший и работающий с темой" и "человек, недолго и мало изучавший тему, и мало работавший с ней, или вообще не работавший". Без каких-либо намёков на избранность, и то, что одно плохо, а второе хорошо и даёт какие-то привилегии.
Если рассмотреть пример с анестезиологом с точки зрения того, что я написал выше, то можно сформулировать так: вероятность того, что анестезиолог починит программу есть, но, при прочих равных, она меньше вероятности того, что программу починит программист. Как минимум потому, что далеко не все анестезиологи могут программировать, как и далеко не все программисты могут делать анестезию.
N-Cube
Как и все «обыватели», вы не умеете считать вероятности, очевидно, потому что написал драйвера камер с нуля именно анестезиолог, несмотря на наличие десятков миллионов программистов :) Ну а программисты теперь эти готовые драйвера будут адаптировать под разные дистрибутивы и так далее, в общем, делать необходимую техническую работу, которая не подразумевает создания чего-то нового.
VBDUnit
Кстати, а так и не выяснилось, почему так случилось, что была потребность в работе с вебкамерами, но её никто не делал? Просто из-за сложности? И да, я обыватель :)
N-Cube
Потому, что «профессионалы» не работают бесплатно, а эту большую работу никто не оплатил. И только любители типа Торвальдса или того анестезиолога способны работать не за деньги.
khajiit
Просто линукс — это даже не просто Большие Деньги, а Очень Большие Деньги. Т.е. его делают, в первую очередь крупные корпорации. И им гораздо важнее вылизанная поддержка mellanox, чем hid/video.
0xd34df00d
Это так не работает, извините.
rukhi7
То что он анастезиолог не говорит о том что он обываьтель с точки зрения программирования, и что он до 60 лет ни разу не написал ни одного драйвера! Так что пример скорее всего не коректный.
N-Cube
Насколько помню, человек заинтересовался, научился и написал. Ну и что? Помнится, у нас преподаватель был приходящий из института прикладной физики или аналогичного, известный физик лет 75… так он в маткаде программировать научился в 70+, и вполне умел все нужное сам сделать. Просто ему было интересно.
vconst
DvoiNic
не, тут про другое. Типа про «пищалку на микроконтроллере» вместо банального мультивибратора…
firehacker
Только почему-то именно так не делается, по крайней мере в тех машинах, которые мне довелось покоаырять — а это, на всякий случай, машины, сделанные после внедрения CAN-шины и содержащие в себе такие шины.
PuerteMuerte
А если рассмотреть это через призму того, что в старом Word от версии к версии добавлялось намного больше функционала, чем в современном, при этом команда разработчиков была меньше в разы?
Т.е. в сухом остатке, у нас новые инструменты, ниже порог вхождения, но продуктивность разработчика наоборот, упала по сравнению с 90-ми годами. В чём тогда прогресс?
С этим-то как раз всё просто - обработанная медь сейчас на вес намного дороже обработанного кремния.
AlexCzech01
Тут работает принцип Парето - 80% работы занимает 20% времени. Все те 80% фич, которые можно было сделать быстро, уже давно сделали, и нынешним разработчикам достались сложные фичи, которые надо еще и накладывать на код, написанный давно и другими людьми
Ну это если не поддаваться ощущениям, что раньше трава была зеленее
PuerteMuerte
Да не работает он тут, я же эту кухню изнутри много раз видел :) Огромное количество времени тратится на "а давайте перепишем вот это легаси", причём во многих случаях, если не в большинстве, полученный результат оказывается неудовлетворительным (ну потому что нельзя вот так взять и переписать два десятилетия старого кода, который зачастую ещё и плохо документированный), потом это кладётся под диван, а к легаси добавляются новые костыли.
Огромное количество времени тратится на редизайн ради редизайна, нередко с тем же результатом.
Очень много времени занимает бюрократия - митинги, согласования, коллы и прочая байда. Вам не приходилось присутствовать на полуторачасовых митингах, где утверждали добавление пары текстовых полей к сущности, а потом неделю их добавляли, тестировали, утверждали, деплоили? И так далее, и так далее...
Всё-таки в ИТ раньше трава была куда зеленее :)
vkni
Ну и по опыту чат-ботов мы видим, что нормальный GUI все их применения кроет, как бык овцу.
romankonstant
Так вроде как раз всякие штуки вроде { }появились вместо BEGIN END отчасти потому что все намучались с выписыванием этих самых «человеческих слов».
сравните: a => a*a
И: TAKE ARGUMENT NAMED A AND MULTIPLY BY ITSELF
Можно, конечно сказать, что да я просто напишу «TAKE A SQUARED”, но чем это отличается от вызова функции из популярных библиотек, которые эти нейросети и используют. А еще, формулировки немного потеряют консистентность, если нейросети одно и тоже все будут писать своим неидеальным английским. Будем тогда ждать IDE от Grammarly :)
VBDUnit
Ответил выше.
Чтобы писать "a => a*a" нужно знать, как это писать. А многословные формулировки вроде "TAKE ARGUMENT NAMED A AND MULTIPLY BY ITSELF", которые мы можем видеть в Basic/COBOL и прочих - это не естественный язык, а скорее подражание ему. На деле мы все равно пишем команды, просто многословно.
Речь же о том, что задачу обьясняют так же, как объясняли бы её человеку. "Хочу трёхмерный редактор укладки кафельных плиток с возможностью совместного редактирования через аккаунты Google". *появляется софт* "Теперь добавь возможность гуглить текстуру плиток, сделай интерфейс лаконичнее и убери это непонятное текстовое поле". "Сделай мобильную версию". Я имею ввиду примерно это.
Хотя тут уже постепенно отмирает необходимость в софте как таковом - под каждую задачу пользователя софт синтезируется с нуля, и процесс синтеза софта и решения задачи с помощью него сливаются в единый рабочий процесс.
arheops
Речь о том, что 99% заказчиков не смогут однозначно описать, да даже вот так, как вы в примере написали.
Будет что-то типа «хочу чтоб плитка лежала красиво, цвет не вырвиглазный и дизайн лучше фейсбука».
Да зайдите на апворк и почитайте как люди формулируют задания, чтоли.
Вот кстати «сделай мобильную версию» без уточнения — вполне по человечески. Просто потом вам скажут, что хотели не такую.
VBDUnit
Именно! Моё предположение как раз подразумевает, что ИИ, в том числе, позволит переваривать даже плохо сформулированные задачи, без конкретики, где заказчик/разработчик не может и двух слов связать, и не понимает чего хочет. А потом, когда увидит результат
И оно переделает. И будет переделывать и доделывать пока не получится то, что устроит. Это же ИИ, а не живые люди. Ему никогда не надоест, а кушает оно только вычислительное время.
В моём примере выше я как раз описал подход - сначала оно делает что-то, что сочтет нужным, а дальше уже человек уточняет, что должно быть, а что не должно. По желанию оно может набросать сразу 100 вариантов реализации, а пользователь выберет, что ему по душе.
Под естественным языком я подразумеваю не язык программирования, а фундаментально новый способ взаимодействия с компьютером, когда конкретика уже не требуется. Если угодно, это следующее звено цепочки перфокарты/перфоленты -> консоль -> GUI -> ???
arheops
Это нереально.
Часто даже сам формулирущий не знает, как его «переварить».
Для того, чтоб ИИ справлялся хотя бы как мидл он должен быть полным ИИ, который приводит к сингулярности.
VBDUnit
Вот я подозреваю, что не обязательно он должен быть полным ИИ, для того, чтобы решать эту задачу. Нейросети последнее время показывают большие чудеса, а там обученные веса нейронов занимают жалкие гигабайты.
И в этих нескольких гигабайтах хранится штука, которая может любые слова превращать в визуальные образы. Она помнит слова, помнит образы, помнит, как ведёт себя светотень. Совсем не так, как мы - то, что делает аналогичную работу в нашей голове, явно побольше нескольких гигабайт, и гораздо сложнее. Но результат-то почти идентичный.
Так и тут - оно, скорее всего, не будет думать так же, как мы, когда формализуем задачу и реализуем её в виде продукта, и не будет её так комплексно осознавать. Но это штуке это и не будет нужно.
arheops
Для программирования задачи, к примеру, в биологии, вам надо иметь часть знаний из биологии. Тоесть если нейросеть это все будет делать, она и будет полным ИИ.
VBDUnit
Согласен. Но я допускаю, что знания из биологии могут иметь разный "формат", если можно так выразиться. Мы, люди, сформировали знание биологии с помощью такой совокупности образов и понятий, и других механизмов, которая хорошо ложится именно в наш мозг с его плюсами и минусами, и его архитектурой обработки информации.
ИИ же может выработать свой "формат" знаний, который лучше подходит его архитектуре, если так можно выразиться, "мышления". Нам только нужно каким-то образом донести в него информацию, чтобы он самостоятельно её систематизировал, так, как удобно ему. Как пример можно взять обучение нейросетей - это оно и есть, по сути.
Оно может не иметь сознания, не думать и не разговаривать, а просто пытаться имитировать то, что делает человек, находя закономерности. И когда имитация становится достаточно качественной, это можно использовать.
arheops
Если оно может «имитировать» программу опираясь на знания в области, скажите тогда на минуточку, чем оно отличается от полного ИИ?
Возможно, я тоже не имею сознания, просто его «имитирую», ибо культура требует
VBDUnit
Мы закономерно пришли к проблеме философского зомби и вообще проблеме природы сознания и квалиа :)
Примерно так же, как DALL-E отличается от мозга настоящего живого художника. Оно же не обязательно будет "опираться на знания в области" именно так, как это делает настоящее сложное сознание человека.
К примеру, мы довольно хорошо знаем, как функционирует муравейник, какие там химические команды для чего используются. Но муравьи, тем временем, химию не изучали, механику, планирование ресурсов с логистикой и архитектурой тоже, и, тем не менее, работу свою делают. Строят свой муравейник, еду таскают, тлю пасут (!), даже не осознавая (наверное), что они делают. Там это всё заложено на "аппаратном" уровне. Вот здесь примерно то же самое. Вполне вероятно, что для того, чтобы
достаточно гораздо менее сложных систем, чем сознание и полный ИИ. Вполне вероятно, что наш суперуниверсальный мозг сверхизбыточен для этих задач, и они могут решаться куда более простыми системами, без сознания и сильного ИИ.
Этот ИИ, разумеется, будет посложнее нынешних генераторов картинок, но он всё равно будет гораздо проще, чем человеческий мозг.
PuerteMuerte
Но мы же на самом деле не знаем, как работает настоящее сложное сознание человека. Возможно, нам всего лишь нужно будет значительно увеличить количество кремниевых "нейронов" и усовершенствовать методы обучения, чтобы количественные изменения искусственных нейросетей переросли в качественные.
VBDUnit
Да, я именно об этом и говорю. Нам не обязательно знать, как работает сознание человека, чтобы сделать систему, которая внешне, хотя бы в каком-то виде деятельности, проявляла бы себя так же, как сознание. А может быть даже не в каком-то виде деятельности, а в многих.
Мозг сделан из электрохимических нейронов с довольно медленными связями и упором на экономию энергии, и кучей аппаратных блоков на разные важные для нашего тела и выживания вещи. Мы же можем позволить себе конструировать электрические/оптические/квантовые/радиофотонные/??? сети без медленной химии, где сигнал движется со скоростью света, а не 30 м/с, и где энергии может тратиться гораздо больше. Вполне вероятно, что при таких вводных данных перехода к сознанию можно добиться куда более простой архитектурой, чем с той, которую имеет мозг.
И вполне вероятно, что то, что мы называем сознанием (будь оно реальным явлением или просто иллюзией), далеко не единственная форма такого качественного перехода. Вполне может быть, что этот ИИ придет к какой-то другой форме восприятия действительности, такой же феноменальной (или даже более феноменальной), как наше сознание, но устроенной по другому.
vkni
Вы хотите магии. Чтобы оно магически сделалось хорошо. Но нет, так не бывает.
В програзме такая "магичность" приводит к хрупкости. То есть, вы написали программу, её компилятор оптимизировал, она работает быстро. Потом вы изменили в каком-то левом месте что-то, и оптимизация компилятора больше не срабатывает. Всё.
То есть, когда мы пишем программы, мы хотим предсказуемости, стабильности результатов. "Наделение компьютера Алдан бессмертной душой" эту предсказуемость убъёт. В результате, оно будет когда работать, а когда — нет. Вместо гарантированного подбора кухни под гарнитур, оно иногда будет выдавать картины Дали.
P.S.
Постановка задачи ИИ, вселённого в автомат — это тоже текст, тоже программа.
VBDUnit
Любая достаточно развитая технология неотличима от магии (С) Артур Кларк
Современные авто с автопилотом, роборуки, роботы пылесосы, хлебопечки, 3Д-принтеры и квадрокоптеры тоже лет 50 назад казались бы магией.
Как это машина будет корову доить? У неё что, волшебные механические руки будут вымя дёргать? Да ну, глупости. — неточная цитата какого-то фильма про период индустриализации, название которого я не запомнил :/
Есть сказка про блюдечко с яблоком, через которое можно за людьми смотреть. Для времени, когда это было придумано, это была магия. Сейчас этих блюдечек больше миллиарда и их все носят в кармане. Эти блюдечки умеют с вами разговаривать, управлять вашим домом и моментально писать картины без холста, красок и кисточек. И помнить их все. Могут освещать вам дорогу в тёмный час, и достаточно лишь коснуться этого блюдечка в определенном месте, чтобы к вам примчалась карета.
Есть сказка про клубок, который разматывается и показывает путь. Это по современным меркам даже не то что не магия, это какая-то очень морально-устаревшая, даже, я бы сказал, концептуально устаревшая технология.
Как это пылесос сам комнату чистит? У моих знакомых бабушка не верила пока сама не увидела. Магия? Магия. В комнате само делается хорошо, делается чисто.
А как же баги? Это тоже непредсказуемость. В текущем подходе тоже всегда есть вероятность, что оно сработает не так, как надо. И бывает что разработчик тоже не понимает, почему оно так делает.
И если у ИИ вероятность багов будет равная или меньше, чем вероятность багов у текущего подхода — почему нет?
Да, но речь о том, что она будет не такая строгая. Это ближе к выносу реализации задачи на аутсорс вместе с проектированием, аналитикой, разработкой, кодированием и тестированием, только с поправкой, что всё это делает ИИ, и допускается изменение ТЗ тысячу раз с переделыванием всего тысячу раз, пока оно не будет работать так, как надо.
Terimoun
Это так, но при условии, что у тебя есть к этому тяга и если ты каждый раз получаешь какие-то новые задачи. Для гуманитариев обычно - это максимально неинтересно.
shteyner
Не совсем понял что ты имеешь в виду. Как раз если у тебя одинаковые рутинные задачи, их было бы не плохо автоматизировать. А вообще, кого считать гуманитарием? Вот, к примеру, человек занимается историческими изысканиями, там такая бигдата получается, что нужны не поверхностные знания програмирования что бы это разгрести, но програмист, не знакомый с этой темой, не сможет это обработать корректно.
saipr
И какой это язык? Один рисует, другой ведёт моделирование и т.д. И у каждого своё общение.
По этому поводу когда-то давным давно была написана статься "Операционные системы: зачем они инженеру?".
Да, а программист, как нестранно, программирует.
Вот и я, будучи уже более 50-лет программистом, осаюсь им прежде всего потому, что "программировать безумно интересно"