Entry tags:
Программирование и математика
"Чем заняться в программировании человеку, который не знает математику на уровне начальной школы?" спрашивает коллега.
Вот блин, застряло в головах у людей, что программирование - это математика. Да нифига. Типичная программа (точнее, некий самодостаточный кусок типичной программы) - это взять сепульку, произвести её сепуление или отдварковать внедлишным способом, что-то сделать с результатом (возможно, передать следующей процедуре) и иногда зачистить память. То есть надо примерно знать предметную область, какие у нас бывают сущности и как с ними оперировать. Математика в такую предметную область попадает не всегда, да и моя практика показывает, что чтобы писать криптографический код, с соответствующими сепульками можно обращаться, не особо думая о нижележащей математике. Не говоря уже о том, что самому криптографию реализовывать по приколу можно, но вообще говоря, не полезно.
Но да, площадь треугольника или прямоугольника - методически годная задача. И проверять удобно. Как, например, все 100500 тригонометрических уравнений, которые я в школе решал - легко сгенерить, можно проверить, никакого практического смысла.
Вот блин, застряло в головах у людей, что программирование - это математика. Да нифига. Типичная программа (точнее, некий самодостаточный кусок типичной программы) - это взять сепульку, произвести её сепуление или отдварковать внедлишным способом, что-то сделать с результатом (возможно, передать следующей процедуре) и иногда зачистить память. То есть надо примерно знать предметную область, какие у нас бывают сущности и как с ними оперировать. Математика в такую предметную область попадает не всегда, да и моя практика показывает, что чтобы писать криптографический код, с соответствующими сепульками можно обращаться, не особо думая о нижележащей математике. Не говоря уже о том, что самому криптографию реализовывать по приколу можно, но вообще говоря, не полезно.
Но да, площадь треугольника или прямоугольника - методически годная задача. И проверять удобно. Как, например, все 100500 тригонометрических уравнений, которые я в школе решал - легко сгенерить, можно проверить, никакого практического смысла.
no subject
no subject
Помню, работал я в Теленаве; там у китайцев с геометрией был швах. Включая тот самый загадочный blue screen, появлявшийся, когда карта стартует (сейчас в той точке Атлантики какой-то остров задекларирован). Когда я сокращал выражение, меня спрашивали, как это, что это, и зачем. Ну и, конечно, строить нормаль к кривой приходилось опять же. И конус всякий там.
Но насчет точки (0,0) я вот что скажу. Дело не только в географии. Дело в плохом подходе к программированию, в вере в "дефолтное значение". У джавщиков это повсюду. Категория Эйленберга-Мура.
Так что да, можно лепить вполне работающий код. Но чтоб понимать, что ты делаешь, нужно образование.
no subject
no subject
Вот это и любопытно. Сформулировать, что входит в "программирование без математики". Ну вот манипуляция текстами, например. Весь UI, весь REPL, API design (по идее), "топология" (в кавычках, конечно), эксплуатация AI.
Много чего.
no subject
no subject
Там еще такой особый фактор - нюх нужен в программировании. Это тоже способность мозга, но как бы совсем не математическая, а скорее игровая.
no subject
В смысле, инструкции очень часто бывают устаревшие или просто ошибочные, и здравый смысл в компьютере не работает, там совсем особенная среда, нужно ее осваивать как ребенок, проверяя что будет если например пальцы в розетку сунуть.
no subject
Делал я тут внезапное kill -9 -1 из программы...
Эффект крайне забавный... Когда по твоему действию с твоей же программой единомоментно падает вся система. Буквально я что-то нажал и всё упало...
no subject
no subject
Отсылки не понял, но я и так специалист по бездне, так что не страшно...
no subject
Есть версия что программирование это про организацию взаимодействия внутри сложных систем.
У меня в нынешнем круге общения есть тетенька-архитектор. Так вот, проблемы у тех кто занимается там проектированием ровно наши. Только реализованные в бетоне и конструкциях:
"-- В аквариум к рыбам на первом этаже прет говно! -- Не должно... -- Но оно прет!! -- Сейчас приеду..."
no subject
no subject
Ты думаешь что у них там чем-то лучше чем у нас?
Такой же бардак.
Только по критичным местам регламентов побольше, что спасает...
no subject
Перевод с человеческого языка на язык, понимаемый компьютером, при всей лексической бедности последнего
no subject
Ты видимо давно с представителями заказчика не общался. Иначе сказал бы "при всей лексической бедности первого".
no subject
no subject
Основной парадокс программирования с моей точки зрения: это простое и увлекательное занятие и удивительно много людей почему-то не способны программировать хорошо или are bored to death.
no subject
no subject
Это фундаментальный закон природы, что человек развивает мозг, либо если у него почему-то особо развито природное любопытство, либо если ему зачем-то это нужно.
По второму, есть просто пассионарии, для которых важно изменять мир, а есть люди, которые ставят в жизни некую цель, часто смешную, и развиваются ровно до тех пор, пока не достигнут эту цель.
Цель может быть, например, стать владельцем квартиры в столице, или стать начальником.
Смешная цель - было интервью, парень в детстве очень хотел мороженого и поставил цель достичь такого дохода, чтобы иметь возможность каждый день есть мороженое сколько захочется.
Ну понятно, он этого довольно быстро достиг, и получил огромный кризис, тк он не знает, зачем дальше жить.
no subject
no subject
Но что это разве значит что обычный мужчина ненормальный? - Я думаю это не значит.
А значит это, что была такая глупость в совке и многие люди ее до сих пор как наследие совка тянут, считать что "в человеке всё должно быть прекрасно", в смысле в совке считалось, что ВСЕ люди одинаковые, и конечно все должны быть способны делать ВСЁ.
Реальность же такая, что люди рождаются разными, и пользуясь пластичностью мозга конечно всех заставляют подогнаться под некий бессмысленный стандарт, который всё равно никто не использует.
Но цена этого идиотизма, хорошо описывается анекдотом, про то что японцы сделали автоматическую бреющую машину, человек спрашивает "но как вам удалось, ведь у всех людей разная форма головы!?" - "да, конечно разная, но только первый раз".
Задумайтесь, как людей реально калечит эта между прочим НАСИЛЬСТВЕННАЯ подгонка под этот мифический стандарт.
В странах G7 такой ерундой не занимаются, у них просто банально в школах отменяют плохие оценки, или говорят (Франция), что человек должен СДАТЬ только французский язык и математику, а всё остальное учить или нет, как он захочет.
Дальше у них просто еще в старших классах происходит разделение, кто хочет учиться всерьез, сдают экзамены и идут в президентские школы по моему, чтобы стать элитой, а кто не хочет - идут по обычной линии, без напряга.
А в США элиту учат в лиге Плюща.
no subject
Математика рано или поздно понадобится, но в больше степени для оптимизации некоторых частей.
no subject
no subject
no subject
Нужно ли ремесленнику понимать "предметную область"? Сапожникъ можетъ сдѣлать сапоги для бизнесмена, а можетъ для математика. Тогда сапожникъ будетъ сначала спрашивать у бизнесмена, какiе ему нужны сапоги. Бизнесменъ что-то будетъ говорить, а сапожникъ "переводить на языкъ сапоговъ". Нѣтъ, сапожнику не нужно ничего понимать про инвестицiи или mergers & acquisitions. Сапожникъ долженъ дѣлать сапоги.
Даже когда предметная область касается математики, программистъ все равно пишетъ программу какъ ремесленникъ. Математикъ объясняетъ, что и какъ вычислить, на языкѣ математики, но программистъ "переводитъ это на языкъ сапоговъ" и получаются опять те же сапоги. Всѣ формулы правильны, но программа не работаетъ, потому что перепутано имя перемѣнной, а python молча дѣлаетъ новую перемѣнную съ такимъ именемъ. Ну или потому что написано data_training = data_validation = data_test = dict() и всѣ три указываютъ на одинъ и тотъ же dict().
Главный вопросъ - нужны ли сегодня инженеры-программисты (скажемъ, для 100% verified compiler) или достаточно имѣть ремесленниковъ.
Мой отвѣтъ - инженеры не нужны, потому что сегодня падаетъ ожидаемое качество работы программистовъ. Поэтому скоро chatgpt 5.0 сможетъ ихъ замѣнить.
Примѣръ изъ функцiональнаго программированiя. "Надо ли знать монады"? "Надо ли знать систему типовъ Hindley-Milner?" "Надо ли знать, что такое лямбда-калькулусъ?" Отвѣтъ - если этого не знать, программистъ-ремесленникъ напишетъ программу гораздо хуже и будетъ мучаться съ ея отладкой. Но сегодня это не важно, потому что качество результата мало кого стало интересовать. (Вчера это тоже было неважно.)
no subject
Например, если под математикой понимать неопределённые интегралы, ряды Тейлора и Жорданову форму матриц, то да, в программировании это пригодится очень вряд ли. А чтобы соваться в криптографию, вряд ли кому-то окажется достаточно уже имеющихся знаний математики и не потребуется отдельно изучать варианты доказательства с нулевым разглашением, постквантовые алгоритмы и т.п.
Но я сталкивался с тем, что для людей (программистов) становится проблемой логарифмический масштаб (потому что слово "логарифм" воспринимается примерно как "мартингал", т.е. непонятный и пугающий математический термин) или оценка сложности алгоритма или прикинуть необходимый размер для очереди запросов, если известна частота в пике, продолжительность пика и скорость обработки, или посчитать сумму чисел 1+2+3+...+n (бывает такое в программировании), или посчитать среднее значение для массива (или, тем более, медианное или персентиль)... То есть, люди спотыкаются там, где человек с базовыми знаниями математики проходит и не замечает.
Хотя, например, знание английского для программиста намного важнее, чем знание математики.
no subject
А в остальном математика - это примерно вот это всё: https://www.youtube.com/watch?v=OmJ-4B-mS-Y
Она не исчерпывается арифметикой, даже если это высшая арифметика (ака Теория Чисел), или арифметика над матрицами с комплексными числами.