Нужны ли программисту математика и алгоритмы?
Аноним28/02/24 Срд 16:03:15№30670871
Привет, Двач–Кодач!
Одни утверждают, что математика нахуй не нужна (разве что арифметика, чтобы сдачу в магазине считать), а до алгоритмов можно и самостоятельно додуматься.
Другие же утверждают, что надо, как минимум, уметь в интегральное исчисление и числовые ряды (особенно если инженерно-техническое симуляции, робототехника, либо бигдата, аль вовсе разработка ИИ), а знания алгоритмов и паттернов программирования прилично экономят время, чтобы самостоятельно не изобретать велосипед. И вообще, не читал SICP и TAOCP — не программист.
Кто прав? Первые спокойно говнокодят на 1С, получая зарплату выше среднего по городу; а вторые либо работают на оборонных заводах за 30–40 тысяч (алсо, многие люди с высшим образованием уходят в простые работяги, где обезьянка за станком с ЧПУ, которой просто показали какие кнопки тыкать и как загружать заготовку, может получать больше сотни тысяч в месяц), либо получают километровую зарплату в яндексах-хуяндекс, но попасть туда очень тяжело из-за огромного конкурса на место.
И в чём прикол всякие курсов погроммирования? Мне они кажутся скамом, ибо, когда учился в колледже, давали лишь самые верхи, а на двухмесячных курсах, наверное, всё должно быть ещё хуже. Алсо, старый препод в колледже (один из двух, кто действительно шарил) говорил, что вообще похуй какой язык программирования, если вы знаете алгоритмы, архитектуру ОС и т.д., также если читать про реализацию сложных вещей, то начинает быть охуевание с того, как же много матана всякого.
Правда, я сам отработал лишь менее недели эникеем в больнице, ибо испугался бабки-вахтёрши, что не пустила меня без бахил, а из универа меня пидорнули.
И какую бы книжку посоветовали дурачку, чтобы подтянуть математику? Вроде "Высшая математика для начинающих физиков и техников" Зельдовича и Яглома годная, но инфа в ней — первый курс универа, только чуть более подробно разжёвано. Интереса делать игры, в отличие от большинства вканутов в кодинг, делать нет — гамедаве меня крайне разочаровал, ибо en masse он представляет собой лишь мобильные параши, где рекламы больше, чем геймплея; а потому хочется делать что-то стоящее, а не тупую работу, которую даже ценят меньше, чем монотонное прикручивание одних и тех де гаек на конвейере.
P.S.
Некоторые говорят, что и английский язык нахой не нужон — по популярным технологиям инфу быстро переводят, а если что-то редкое, то и не нужно.
>>3067087 (OP) Паттерны не математика. Устоявшиеся шаблонные практики. Без их знания сложнее разобраться в чужом коде, если он писал с их учетом. Как в шахматах. Большинство мыслит ходами, а гроссмейсетры партиями. Партии в этом случае паттерны.
Да математика не нужна, ты если шарагу не кончал и кодишь, то ты уже шаришь в булевой математике или как она там, просто не осознаешь этого. Лучше спросить, какая база нужна для прогера. Какие алгоритмы знать? Что почитать про устройство железа? Что почитать про паттерны проектирования или еще чего?
>>3067128 Мне кажется, когда человек без знания математики говорит, что она нахуй не нужна, то это то же самое, как если бы неумеющий готовить говорил, что есть дошик и "Вкус очка" — ведь он не умеет, а потому и не находит этому применения в жизни.
>>3067087 (OP) > до алгоритмов можно и самостоятельно додуматься Можно. Как и до патернов, как и либы свои писать. Только когда ты что-то придумаешь, ты въебешь тонны ресурсов чтобы понять его область применимости. Большая часть эмпирических алгоритмов на графах очевидна, но у нас есть источники в которых описаны их плюсы, минусы и подводные камни. Если двигаешь кнопки, то хер забей на это всё, и учись двигать и красить кнопки быстро. Если нужно оптимальное решение в нагруженной среде, то потрать хоть пару часиков на поиск существующих алгоритмов тут бы неплохо уметь отображать свою задачу на задачу потока/графа/операцию над множествами, но наверное я много прошу .
>>3067504 > тут бы неплохо уметь отображать свою задачу на задачу потока/графа/операцию над множествами У-у-у, математика. Вы бы ещё ряды Фурье написали — половина двачеров о таком ни разу не слышала, наверное.
Пару раз приходилось реализовывать алгоритмы, которых не было в универе. Знание математики и опыт помогли понять, как это работает и как это нормально реализовать.
Понимание сложности алгоритмов необходимо, чтобы не написать случайно ёбу, которая будет годами считаться.
Вот вам алгос с яндекса, хули. Решите за O(1) Когда сумма левой части больше правой, то к правую часть просто увеличить надо А вот когда левая часть меньше правой, то мозгоебка начинается. Решение просто добавлять + 1 к числу, пока левая и правая суммы не станут равны не считается, сложность будет O(n), думайте
>>3068994 По факту если меньше именно левая то проще провести полный перебор. Проверка на счастливый это О(1) всгда, сложность О(n) при N меньше миллиона(а это 100%) это вообще ахуено, тем более что О(n) это худший вариант.
Сосите жопу короче. Задача решается полным перебором за наносекунду.
>>3068994 Элементарно решается. есть число - a1a2a3a4a5a6, где цифры это позиция. П.1 Если a1+a2+a3 > a4+a5+a6 то считаем a1+a2+a3 - a4+a5+a6 = R потом делаем по очереди проверки 9-a6 - R< 0 9-a6 + 9 - а5 - R < 0 9-a6 + 9 - а5 + 9 - а4 - R < 0 когда на каком-то шаге и получили тру мы получили искомое число П.2 Если a1+a2+a3 < a4+a5+a6 то проверяем a5 < 9 && a1+a2+a3 > a4+a5+1+0 то есть обнуляем младший из разрядов, если успех, то мы свели задачу к П.1 если не успех, то проверяем a4< 9 && a1+a2+a3 > a4+0+0 обнуляем второй разряд если успех то мы свели задачу к П.1 Если не успех то получаем a1+a2+a3+1 > 0 обнулили всё правое число и опять свели задчу к П.1 Я дольше описывал чем придумывал
>>3067087 (OP) Алгоритмы и математика нужна программистам, но далеко не всем. Как не всем программистам нужен SQL или RegExp. Изучаешь их по мере необходимости. А вот в паттернах приходится разбираться практически всем. Но и это не первичная задача. Это проблема комплексности и совместной работы, с этой проблемой сталкиваешься не сразу.
Для этой задачи да. Для более общей, в которой в числе m содержится 2n цифр, это работает за log(m)самого числа или O(n)количества цифр, в этом случае простой перебор работает за O(m).
>>3084713 Но почему? O(1) - это константное время, а в твоём решении есть различные случаи, когда выполняется разное количество действий, пусть их и не много.
>>3067087 (OP) Про математику не скажу. Но вот относительно посыла про деньги - не понимаю. Типа. Ну как. Смотри. Мне нравится, когда мой код работает быстро. Ну, просто типа, я рос во времена XP, я знаю как бесит, когда у тебя игрулька загружается 20 минут, что можно сходить чай попить и серию мультека посмотреть. Или когда у тебя интерфейс лагает, или когда у тебя что-то зависло и "НЕ ОТВЕЧАЕТ". И все это вот. Это пиздец как бесило тогда. До того, что сейчас - я на малейшие задержки триггерюсь как ебанутый. Ну так вот. Из-за этого, я в своем коде - стремлюсь к тому, чтобы все было МАКСИМАЛЬНО быстро. Весь перформанс, который можно выжать. Мне и так платят неплохо, но тут - я просто чувствую, что КАЙФ. Типа, блядь. Раньше обрабатывалось 10 запросов в секунду, теперь - 10к. Круто? Да пиздец как круто. А кто скажет что-то другое - пусть идет нахуй. И да, адептам: Ряяя, преждевременные оптимизации... Ряяя, нада красивый код. Идите нахуй. Моя часть кода будет такой быстрой, какой я смогу ее сделать. А вы оправдывайте свою лоускильность тем, что заботитесь о качестве кода, который через полгода оказывается говном и его выкидывают нахуй. Короче. Такие вот дела.
>>3088627 >Да пиздец как круто. А кто скажет что-то другое - пусть идет нахуй. Нахуй идёшь только ты тратя деньги бизнеса на какую-то хуйню вместо работы. Тебя кто-то просил делать быстро?
>>3088711 Про какой бизнес вы вообще всё время говорите? Вы думаете банкам и крупным компаниям не похуй, куда сливать бабло? Оно всё равно бесконечное и можно платить за перекладывание жсонов по 300к. В данном случае перформанс кода - не самое худшее вложение.