LinuxForum.Fans
Тема

Нужно ли знать математику что бы стать хорошим программистом?

Автор: White_Nelud 112 сообщений 32539 просмотров
#133597
i2ks написал:
это случайно не к степенным рядам относится?
i2ks написал:
лучше линк на литературку, или в каком направлении копать(в подробности не хочу вдаваться, спрашиваю для саморазвития и не более того)

число цифр в двоичном коде равно целочисленному логарифму по основанию 2. внутри компьютера число цифр всегда одинаковое, потому речь там идёт о местоположении первой единицы. Это настолько важная операция, что даже есть команда в процессоре такая, BTS. Логарифмы придумали, что-бы жизнь математикам увеличить. А программист может значительно ускорить свою программу, в тысячи, а иногда и в миллионы раз. Вместо того, что-бы делить и умножать, часто достаточно посчитать число единичек.

число единиц связанно с признаками делимости, эти признаки помогают быстро находить делители (и в уме и в CPU), нахождение делителей поможет при факторизации, а факторизация чисел - ключ чуть менее чем ко всем схемам шифрования. Подробнее см. >9000 разных книг начиная с работ Гаусса.
Конечно, доказано, что для нахождения делителей 2048битных чисел никакие признаки не помогут, но жизнь - сложная штука: вспомните, как в 2008ом году "исправили" баг таким образом, что поле генерируемых ключей значительно сократилось. Что в теории могло позволить злоумышленнику таки подобрать код доступа, и тут ему очень помог-бы этот матан. Такие дела...

#133599

Чтобы стать быдлокодером, и стать любимым субъектом для цитирования на Говнокоде матан знать НЕ_НУЖНО

#133604
ormorph написал:
Само слово пугает (быдло) предполагает наличие еще царственных особ.

в данном конкретном случае я не о том. быдлокодер, это такой кодер, который пишет быдлокод, и считает это правильным. Т.е. что знать "матан" должен только "ботан" ;) Оно может где-то и так, например в среде менеджеров или дворников, я про них не в курсе. Но только не в среде кодеров.

#133657
drBatty написал:
Оно может где-то и так, например в среде менеджеров или дворников, я про них не в курсе. Но только не в среде кодеров.

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

#133667

ormorph, ну будем надеяться...

#135164

Не отвечал пару дней дабы отписались все заинтересованные темой. Изменил свое отношение к математике и физике, а так же ко всем наукам. Прочитал книгу - автору спасибо. Книга на многое открыла глаза.

По поводу слов Хейнлайна.

«Человек, не способный к математике, не является разумным.
Этого недочеловека в лучшем случае можно терпеть,
раз он научился носить ботинки, мыться и не сорить в доме.»

Сначала появилось желание дать в морду, но потом понял смысл. wink

P.S. Тема решена. (?)

#135179
drBatty написал:
вот кстати практическая задача:
Дано целое число, которое больше 0. Требуется разделить его на 3.

Показать
Кто написал x = y / 3; ? Садись, два.
Операция деления в десятки раз медленнее операции умножения. Вы быдлокодер.
Предположим, у нас 32х битное железо. В этом случае достаточно не делить, а умножить на 1/3. Или, что тоже самое, на 0x55555555. Этим мы ускорим данный участок кода в десятки раз.

Этим должен заниматься компилятор, код должен быть еще и читаемым.

#135250
mycetophylax написал:

Этим должен заниматься компилятор, код должен быть еще и читаемым.

Ага.
Только нужно учесть, что все зависит еще и от контекста, где используется эта "третья часть от y".

Одно дело, когда производится разбивка, допустим, кусочка экрана на три части для отображения трех пунктов меню. Понятно, что такое произойдет один раз и понятно, что если оно будет "делиться на три" даже 100 мс, ничего страшного не произойдет. Ну подумаешь, меню выскочит с едва заметной задержкой!

И совсем другое дело, когда это деление используется несколько миллиардов раз в цикле. Ну допустим, обрабатываем какую-то динамическую картинку, которую хотим вывести на одну треть нашего окна. Понятно, что тормоза от деления даже в 10 нс в итоге выльются в черепашью скорость отображения. Поэтому код нужно будет оптимизировать в ручную. А что бы помнить, что мы тут наделали -- вот для таких случаев в прогах существуют комментарии.

Извините, если кому-то показалось, что я сказал прописные истины. Просто это сказано не для Вас -- на форуме много молодых людей, которые идут вслед за Вами, и могут не знать того, что для Вас очевидно. Будьте терпимее, ОК? :)

#135253
koala написал:

Сначала появилось желание дать в морду, но потом понял смысл. wink

Наш человек! Далеко пойдет.

Сильный не то, кто может в морду дать, а тот, кто еще и себя сдерживает от этого.
А в морду дать -- это что! Эт-фигня! Ты в себе попробуй убить дракона.
И, главное, koala, ни на кого не держи зла.

#135298
mycetophylax написал:
Этим должен заниматься компилятор, код должен быть еще и читаемым.

это пример. компилятор не в состоянии переписать пузырьковую сортировку в qsort или в сортировку Шелла. Причина очень проста: компилятор НЕ ПОНИМАЕТ, когда надо использовать нужную сортировку. Это должен понимать программист. Но для этого он должен знать математику.

Как правильно подметил zhevak, всё от контекста зависит. Вы зря так доверяете компилятору, во первых, его может просто не быть, например, это не С, а bash. Станет-ли Bash проводить такую оптимизацию? Во вторых, С не всегда может отличить константу от не константы. Возможно, мы делим не всегда на три. Но всегда на константу. В этом случае, С не распарсит деление (если конечно в не пользуетесь const с оголтелым фанатизмом, и не делаете из const религию, как это делаю я, Но даже я не всегда надеюсь на Святый const ;) )

zhevak написал:
Поэтому код нужно будет оптимизировать в ручную

ага. его ещё найти надо. то самое место, в котором компилятор почему-то не осилил деление на константу. Очевидно, про это деление нужно знать, если этого не знать, то многие вещи становятся "не нужными", как например const, без которого компилятор деление не осиливает, ибо думать он не умеет, и математику не знает. Он умеет только считать.

#135603
drBatty написал:
ну там конечно посложнее, но суть та же: человек не понимает, что вышеописанное эквивалентно i >=0 && i<=9.

А вот для этого надо прежде всего владеть даже не основами математики, а родным языком в совершенстве. Дабы выразить свою мысль насколько кратко, настолько и доходчиво. И если нет такой у тебя способности, то никогда выше простого кодера не поднимешься в этой жизни. А если ты умеешь описать свою задачу на родном языке, то ты её, считай, и решил. Потом будет только перевод этого текста на тот или иной язык программирования, то есть рутинная операция.

#135606
Cruiser78 написал:
[quote=drBatty]ну там конечно посложнее, но суть та же: человек не понимает, что вышеописанное эквивалентно i >=0 && i<=9.

А вот для этого надо прежде всего владеть даже не основами математики, а родным языком в совершенстве. Дабы выразить свою мысль насколько кратко, настолько и доходчиво. И если нет такой у тебя способности, то никогда выше простого кодера не поднимешься в этой жизни. А если ты умеешь описать свою задачу на родном языке, то ты её, считай, и решил. Потом будет только перевод этого текста на тот или иной язык программирования, то есть рутинная операция.[/quote]
ООП. В C не так. wink

#135609

Хороший программист - обязательно еще и математик, обратное неверно.

#135616
zorro написал:
Хороший программист - обязательно еще и математик, обратное неверно.

А если математики отдельно, программисты отдельно? Математик считает, программист пользуется результатами его работы?

#135633
mycetophylax написал:
А если математики отдельно, программисты отдельно? Математик считает, программист пользуется результатами его работы?

Что значит считает?
В том то и суть, что при написании программ надо знать как математический аппарат, так и то, как это воспринимает машина. Математик часто не может сказать как оптимально запрограммировать решение задачи.

#135637

zorro, а ты знаешь математику?

#135641

mogul82, приходится знать по работе определенные вещи smile
математика безгранична

#135656
zorro написал:
Математик часто не может сказать как оптимально запрограммировать решение задачи.

:o :O oO
Это как так? А нафиг он тогда нужен? :D

#135671
mycetophylax написал:
Это как так? А нафиг он тогда нужен?

Учить математике других.
Математик в чистом виде (не инженер, не программист, а просто математик) вообще ничего кроме этого не может и не должен уметь.
Это ведь фундаментальная наука.
Часто ли можно увидеть математика где-то кроме школы или университета?

#135731
Cruiser78 написал:
А вот для этого надо прежде всего владеть даже не основами математики, а родным языком в совершенстве. Дабы выразить свою мысль насколько кратко, настолько и доходчиво.

это да. согласен.
но я не про то. вот почитайте: http://linuxforum.ru/viewtopic.php?id=11408
неплохо написано, согласны?
а вот как это я написал:

lsof | sed -rn "s%^$BR\s+([0-9]+)\s+\w+\s+([0-9]+)u\s+.*/tmp/(Flash\w+)\s+\(deleted\)$%touch $TD/\3$EXT \&\& dd if=/proc/\1/fd/\2 of=$TD/\3$EXT bs=4096 \&\& file $TD/\3$EXT%e;T;p"

задача математика - объяснить суть. а кодера - ПОНЯТЬ. это главное. дальше просто, на любом ЯП и на любой платформе.

zorro написал:
В том то и суть, что при написании программ надо знать как математический аппарат, так и то, как это воспринимает машина. Математик часто не может сказать как оптимально запрограммировать решение задачи.
mogul82 написал:
а ты знаешь математику?

ключевое слово: оптимально.

математикам наплевать, сколько времени решается задача, час, или 100 лет.

Войдите или зарегистрируйтесь, чтобы ответить.