×Закрыть

Математика як основа академічного програмування

Всім привіт. Я активно програмую з 2005-2006 року. Шлях мій доволі банальний: Basic на Спектрумі, Borland Pascal в школі і Політесі, сам освоїв спочатку Visual Basic, згодом Delphi. Писав на C консольні програмки, потім пробував C++ Builder. В результаті зайнявся веб розробкою на PHP.

Освіта не профільна, тому рівень матетатики дуже низький. Завжди вважав що моєї самоосвіти буде достатньо. Але швидко зрозумів, що пишу я «поганий код». І що академічних знань дуже бракує. Почав читати книжки не по конкретній мові чи технології, а заглиблюватися в теорію. Зрозумів нащо існує ООП, що таке патерни програмування, ахітектура ПЗ і т.п..
Зараз пишу на RubyOnRails 3, код зовсім іншого рівня. Зрозумів скільки помилок робив раніше.

Ну а тепер суть питання: хочу підтягнути математику до рівня читання і розуміння таких книжок як The Art of Computer Programming Дональда Кнута і т.п. Чи може хтось порадити мінімальний курс математики (теорія ймовірності, дискретна математика і т.п.) який для цього необхідний, і чи є якась література, щоб не перелопачувати самостійно весь курс вищої математики.

Знаю що в багатьох фірмах беруть людей лише з Прикладної Математики. Можливо випускники цього факультету поділяться досвідом :)

P.S. Графікою і іграми не займаюся, так що геометрія наразі не цікавить.

LinkedIn
Допустимые теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter
Допустимые теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter
Дискретна математика + Introduction to Algorithms Кормена замість томиків Кнута. В універі вчилися по книзі «Дискретна математика» (Нікольський, Пасічник, Щербина) — досить непогана книженція для початківця.

А решта — всього потрохи для загального розвитку: теорія ймовірності, теорія БД, мережі і т.д.

Знаю що в багатьох фірмах беруть людей лише з Прикладної Математики.

Название контор в студию!

Можливо випускники цього факультету поділяться досвідом :)
Делюсь, записывайте. :)
Проблема в том что все еще преподают все еще “обыкновенную математику” — не заточенную под комп. науки, поэтому пользы от самой математики не много.
Но есть другой момент:
Что бы меня не выперли из универа, мне пришлось:
— познакомиться с Лиспом
— познакомиться с Ассемблером
— познакомиться с ЦПП (и его ООП)
— знать о том что такое нормализация БД
— хоть немного понимать мат логику и дискретку в целом
— получить представление о том как компутер выполняет вычисления
— и много всякого разного

От и получается “копієчка до копієчки”. Профильное образование дает “пинок вперед”.

Хотел бы добавить к сказанному...

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

У MIT есть бесплатный онлайн-курс «Mathematic for computer science». Ну и вообще у них много вкусного по части математики и computer sciences — ocw.mit.edu/courses

Коментарі обнадіюють. Здається я не дарма вчуся в своєму технікумі. Залишилось зовсім мало до закінчення курсу по дискретній математиці. сподіваюсь про автомати нам роскажуть..

А що, в 2005 році Спектрум ще десь жив?

Живее всех живых :) Питерский «Пентагон»: pentagon.nedopc.com/info.htm

Интересно, какой функционал на этих Монстрах можно стартануть?

Диззи, Робокоп, аудиодемки, Art Studio (это фотошоп такой), SoundTracker (типа Кубэйза) :) Разводка печатных плат, куча языков программирования, цифровые виды связи (у него была встроенная пищалка типа модема — компаратор обычный, на 300 бод)

<p><p>Тут сам цинус в том, что он руками паялся, а не покупался моноблок :)</p></p>

Хе-хе. Ні звісно. З 2005 я займаюся веб програмуванням. А Спектрум і Бейсік, це те, з чого починалося моє знайомство з комп’ютером і програмуванням. Якщо не помиляюся це було в 1998 році. Батьки відмовлялися купити Спектрум додому, думали що то будуть суцільні ігри, а на ПК не було грошей. В 2000 році я таки купив свій перший ПК — Pentium 166, 32 мб оперативки. О то радість була!

Не упомянули о том, что математика — это еще и прокачка мозга нехилая ;) Думаю, тут эффект для программиста больше, чем от непосредственно математических знаний.

Конечно дискретка. Если хочется учить мало, а эффект иметь побольше, то (ИМХО):

Теория множеств в хвост и гриву. Хоть наивная, необязательно Цемерло-Френкеля. Множества, отношения, свойства бинарных отношений, инъекции/сюрьекции/биекции, множества подмножеств, биноминал, мощность и счетные множества. Я прокачивал эту тему гораздо позже таких вещей как базы данных или ООП, а зря, совсем по-другому думается (и эти области имеют свои теоретико-множественные формулировки). Особенно полезно поделать разные упражнения на доказательства.

Ну, дальше булева логика (куда ж без нее). Все, что касается комбинаторики. Сложность алгоритмов, O-нотация. Автоматы (они на самом деле везде, а не только в парсерах или в стиральной машине :) Графы.

Если математика нужна для понимания Кнута, то может лучше взять Скиену? Это реально классная книжка по алгоритмам.

Автоматы они на самом деле везде

Вот именно. Теория конечных автоматов. Погуглите. Кто этого не понимает, тот не программист, а кодер.

Отсюда сразу понятно, как задачу делить на объекты (ООП). На самом деле деление задачи на объекты — это понимание, как программа должна работать. Каждий объект — автомат. Если в объекте больше одного автомата — дели на объекты, сколько автоматов — столько объектов.

Можливо хтось може привести приклади того як математика допомагала в роботі. Це б стимулювало тих хто вважає що математика нікому не потрібна.

Был нетривиальный таск. Гугл «сказал» что задача решается итерационно. Реализовал. Алгоритм оказался медленным. Софт зависал на 10 секунд. Посидел, подумал и спросил себя — «а почему бы не эдак? (полиномы, производные, ряды)...». Реализовал. Софт крутит рантайм. А касательно стимулов могу добавить, что если человек не может себя мотивировать, то никто его не сможет мотивировать. Трудности для интересующихся только разжигают интерес, когда для неинтересующихся являются только аргументом лени.

Побояню. Как то на работе уронил ключи в унитаз, так я достал проволку, свернул её в форме интеграла и достал их.

А если по теме, то реальная математика нужна в 0.001% случаев.

Приятно видеть, когда человек/программист осознает недостаток собственных знаний. Если четко и целесообразно формулировать для себя таски, то есть шанс вырасти в грамотного человека/программиста.

logmein: Математика — это алфавит. И букв в этом алфавите побольше двух-трех десятков. Базовые курсы даются в техн.ВУЗ-ах.(2 года минимум). Далее же, как и всё в жизни — самообразование. Уточни пожалуйста, какая задача тебя волнует, может быть смогу навести на соответствующую литературу.

Не плохие курсы тут: www.intuit.ru/...og/mathematics

Удачи.

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

сама по себе — она не цель, а лишь один из способов моделировать процессы.
программист не обязательно должен быть квалифицированным математиком (не кидайтесь тапками)

математическое мышление должно дополняться умением мыслить многомерно и абстрактно, иначе оно — топор без рукоятки.

швидко зрозумів, що пишу я “поганий код”. І що академічних знань дуже бракує.

умение формулировать мысль в виде кода , как и мышцы, развивается постепенно. мне в своё время удалось сбежать из конторы где я варился в лайнокоде. правда, попал тогда в контору где за код п*здили жутко, зато, школа получилась хорошая.

Поищите книгу «Дискретная математика для программистов», автор, по-моему Новиков. Теория вероятности и математическая статистика — вряд ли сможете использовать в программировании, но в целом желательно знать.

Дуже дякую за книжку. Обов’язково почитаю. Чи можите ще назвати якісь книжки з «цієї серії».

это смотря какие задачи стоят, теория вероятности со статистикой последнее время очень выручает...

Ну для понимания работы ораклового оптимизатора теорвер пригодилась. Т.е. знания нужные на самом деле, только для написания алгоритмов применять вряд ли получится.

а понимание дает возможность составлять оптимизированные алгоритмы, пусть даже не на прямую

А можно пример применения теровера для понимания оптимизатора оракла? Желательно не притянутый за уши.

Среагировали на слово теорвер? Ок, в чистом виде теория вероятности малополезна, просто в вузах под этим предметом учат также мат. статистику. Она и имелась ввиду, а именно — законы распределений. Распределение данных в таблице — важный параметр для CBO.

А под громким словом статистика понимается количетсво записей в таблице или что-то посложнее? Какие ключевые слова гуглить?

Посложнее. Почитайте про Oracle cost based optimizer, его работа основана на статистической информации — это не число записей, а именно статистические характеристики набора данных. В старых версиях был rule based optimizer — там без статистики обходились.

Ок, посмотрел, там максимум собираются гистограммы. Считать ли это статистикой, решай сам.

Кнут тебе не нужен, математика тоже, если только не будешь писать специализированный софт.

К тому же Кнут давно устарел, а еще если мне не изменяет память, книжки Кнута не предполагают серьезного мат. бекграунда, там все вводится с нуля, хоть и не простым языком.

Коли я починав програмувати, то саме так і думав. Зараз займаюся веб програмуванням. В більшості випадків все дуже просто. Вивів форму, отримав від користувача дані, зберіг в базуданих. При наступному запиті вивів дані з бази на сторінку. Стандартна процедура. Звісно для цього математика не потрібна. Але є купа задач де без складних алгоритмів не обійтись. А береж будь-яку серйозну книжку по алгоритмах — і вилізають хвости з математики :(

Теория вероятностей для алгоритмов — явный перебор. Дискретки должно хватить.

по моему скромному мнению, память тебе все же изменила. «Серьезный мат.бэк» — понятие растяжимое, но все же кумекать кое-что надо хорошо, чтоб читать Кнута легко и непринужденно, а не сидеть над каждой страничкой, вдупляясь в мат.смысл. Книжка нетривиальная и свое название оправдывает. Это мое мнение.

А насчет «устарел» — я не понял. Вообще.

А насчет «устарел» — я не понял. Вообще.
Например наличием фибоначиевого поиска, и много других вещей которые уже не нужны и/или не могут быть применены к современному программированию. А кучи нужных вещей там нету.

Пересмотрел Кнута, там в первом томе в первой главе как я и говорил вводится весь мат апарат необходимый для понимания книги. Т.е. никаких специальных знаний иметь не обязательно, но материал не простой, и котелок варить должен.

Ну для початку визнач свій математичний рівень. Як на рахунок шкільної програми: тригонометрія, логарифми, інтеграли? Якщо з цим погано, то починайте з шкільної програми. Багато людей забувають її через рік-два після школи. Тобі, мабуть, тепер ці знання стануть у пригоді. Якщо ж з цим все добре — зайди на сайт будь-якого вузу, там є навчальна програма всіх факультетів і кафедр. Скачай список предметів, там переважно є список рекомендованої літератури. От по ньому і вчися.

Ну я, як і мабуть більшість, в школі ніколи не думав, що математика пригодиться мені в житті :)

Більшість шкільної програми я пам’ятаю.

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

Подписаться на комментарии