Pull to refresh

Comments 211

UFO just landed and posted this here
Возмущение, как Вы заметили, лирическое, не воинственное. Я всё о культуре. О том, что есть штуки необязательные и не практичные. Как в повседневной жизни, вроде доброжелательного общения и внимательного отношения к женщинам, так и в профессиональной — если ты таксист, езжай ровнее, чтобы никого по салону не бросало. Вот в этой культурной пустыни я и вопию.
UFO just landed and posted this here
Начну с цитаты:
«Математику уже затем учить надо, что она ум в порядок приводит»
М.В. Ломоносов

Я понимаю автора, хотя он так и не смог точно выявить, что именно его смущает.

Я предполагаю, что для него 15летниего программист это был Титан, Супермен, ТыжПрограммист!
А когда он столкнулся с тем, кто сейчас себя называет программистом, им оказался интеллектуально нищий человек. Вот и произошел когнитивный диссонанс.
UFO just landed and posted this here

Культурный человек не тот, кто не пролил соус на скатерть, а тот, кто.этого не заметил, Чехов не прав?

умный не скажет, дурак не заметит. :)

если ты таксист, езжай ровнее, чтобы никого по салону не бросало.

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


Кстати,


У меня вообще нет никакого высокомерия по отношению к разработчикам, матана не ведающим.

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

Вот Вы правда думаете, что матан там должен быть?
Значение математики не в этом.
А в её вкладе в мышление.

Да, может условному программисту никогда не понадобиться использовать ряды Фурье (так же условно), но ведь понимание того, как это всё утроено облегчит жизнь.

Я понимаю, продемонстрируйте свои решения, созданные под влиянием мышления, отточенного матаном.

Посмотрите серию постов «О потерянном времени» — там есть хорошие решения (в том числе мои), созданных мышлением, отточенным матаном (это я про себя, за других не скажу).
Утверждение, что только к женщинам нужно относиться внимательно и вежливо вкупе с согласием с утверждениями «Если ты мужчина, то купи мне шубу», «Если ты патриот, убей врага» в комментах ниже — признак варварства. Смешно, когда такой человек рассуждает об образованности и культуре.
Оффтоп
Однажды встретились преподаватель математики и ученик спустя 20 лет после обучения.
Учитель математики спрашивает:
— Я хорошо учил тебя математике, ты был лучшим учеником и хорошо в ней разбирался. Прошло 20 лет и скажи мне, пригодилась ли тебе математика хоть раз за прошедшее время?
— Да, учитель, был один случай… Однажды я шел по улице, налетел сильный ветер и сдул с моей головы шляпу. Шляпа улетела прямо в центр большой лужи и её никак нельзя было достать. Я нашел кусочек проволоки изогнул её в качестве интеграла и достал шляпу.


Ну а если серьезно — я свою карьеру программиста начинал с HTML. Математика действительно была не нужна и я просто радовался, что она закончилась и недоумевал о том, что она нужна в каких-то космических работах.
Прошло время, перешел на ту же Java и когда задачи стали сложнее пришлось открывать образовательные сайты и подглядывать формулы. Разбираться в них и вспоминать, что именно ЭТО мне преподавали на математике. Да, пришлось жалеть о том, что не усвоил эти знания тогда и сейчас приходится учить заново. Но, доля негатива у меня имеется к самой технике преподавания. Я помню, что нужно было использовать синусы в геометрии, но их использование сводилось к заучиванию формулы, а затем в нужном месте подстановке значений. Никто не объяснял практических применений данных формул. Серьезно, я разобрался в том что такое синусы годам к 25, когда возникла необходимость рассчитать время наступления сумерек в той или иной области в зависимости от положения солнца. Вот тогда все эти непонятные формулы приобрели понимание. На занятиях мы решали задачи комивояжера и разбирались в алгоритмах A*, но в такой манере, что я даже представить себе не мог, как я смогу это применить. Отсюда и «забивание» на предмет. Сдал экзамен и забыл.
Тем не менее, считаю, что основа любого программирования это не математика в голом виде, а в первую очередь понимание логики и умение ею пользоваться. А вот математика это инструмент, которым некоторые логические задачи решаются. Точно так же как использование фреймворков, библиотек и т.п.
Если человек справляется со своей работой, так ли важно знает он матан или нет?
Вероятно, без знания высшей математики не стать специалистом по машинному обучению, но есть множество других специализаций, где это точно не обязательно.
Работодателю не важно. Странно, почему самому человеку это не важно.

Вы химию знаете? Нет? Химиков это возмущает. Мне тоже в институте говорили что без матана никуда, ан нет, еще куда, хоть я его и помню, плоховато, но помню.

Не знаю, всего знать не могу. Но не считаю, что могу этим кичиться.

Так Вы приводите в пример человека, который не то что кичится, а хочет изучать что-то новое для себя. Как уже сказали — дело в определении слова.

Честно говоря, для меня программист – это, в первую очередь, архитектор. Человек, хорошо владеющий абстракциями и способный выстроить простую, лаконичную и легко-расширяемую связь между различными объектами. И я не очень понимаю, при чем тут математика вообще. Она нужна в довольно узком круге задач по вычислению или оптимизации. Нет, конечно, она полезна, но не критична и, имхо, точно не является обязательной культурной составляющей. Математика – всего лишь инструмент, как и языки программирования.
Как раз математика и состоит из кучи абстракций, так что связь вполне можно проследить.
Вот и я о так же считаю. Я не то, чтобы вообще не знаю матана или не способен его понять. Просто как-то не сложилось у меня с сильными преподавателями что ли. Так или иначе, способности к обощению и декомпозиции мне пригодились куда больше, чем формальные математические доказательства. Более того, даже без математического образования я могу писать производительные вещи, поэтому единственная область сейчас, где реально нужен матан — это сверхпроизводительные вещи и области требующие предельной оптимизации. Боюсь, в этом мире всего с пару десятков компаний, которые могут предложить такие задачи.

Что касается «культуры мышления» — это це всё хрень и чушь :) Например занятия музыкой дают сопоставимые ощущения в мозгу, как и доказательство каких-то теорем. К тому же, кто вообще сказал математикам, что их культура мышления лучше?

Я, возможно, вас удивлю, но матан — это сравнительно небольшая и одна из самых простых областей математики. И, хотя матан и является основой, но даже в математике в чистом виде он не особо применяется, не говоря о программировании. Ну, а ваши рассуждения про "единственную область" вообще смешны. Теория игр? Методы оптимизации оптимизации? Машин лёрнинг? Нейронные сети? Криптография? Квантовые вычисления? Не? Или просто в теорию — формальные грамматики? Теория категорий? Не? Реляционная алгебра, в конце-концов, тоже не? И это лишь малая, самая хайповая часть. Но, впрочем, если ваш кругозор не простирается дальше бложиков на вордпресе и сайтиков-визиток никому не нужных фирм, то, разумеется — единственная область, где нужен "матан" — это сверхоптимизация вордпресса и в мире этим занимаются ровно два десятка компаний. Причём даже в них вам не светит попасть.

UFO just landed and posted this here
многие разработчики каждый день используют какие-то концепции, подходы и методы из д…, даже не зная, как называется то, что они используют, а во многих случаях даже доперев до них самостоятельно без чтения учебников :)

Да, только уровень этого использования ниже плинтуса.


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

Угу. Только там, где человек, знакомый с автоматным подходом, изучивший особенности применения и ограничения сразу решает, — так, это делаем автоматным программированием, вот список состояний, вот граф переходов, — а тот, кто "сам допёр", скорее всего, будет долго думать и изобретать велосипед. Ну, да, он его, в конце-концов изобретёт, но косорыленький, плохоедущий и неремонтопригодный. Или, наоборот, будет пытаться применить КА туда, где они ни каким боком не лезут.


Аналогично примерно с реляционной алгеброй, когда много лет писал SQL-запросы

Угу. Только из "писал запросы" без знания релационной алгебры и сопустствующих дисциплин вовсе не следует "способен написать субд". А так, да, для написания запросов алгебру знать не обязательно. Ну, так нет никаких проблем всю жизнь писать запросы. Наверное, даже обезьяну этому можно научить :). И она от этого станет, о, да, программистом!


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

Угу. И мы регулярно наблюдаем эпические провалы продукции такой школоты на ровном месте со взломами и кражами всего и вся. Именно поэтому. Эффект Даннинга-Крюгера в чистом виде.


И за свою жизнь ему ни разу не пригодились нейронные сети и квантовые вычисления. Его теперь нельзя называть программистом? :)

Видите ли в чём дело. Есть люди, которые создают, ну, скажем, Лахта-центр. Они строители. Да, или, вообще, есть Эйфель. Ну, тот, который башню в Париже построил. Он — строитель. А есть Ашот, который может криво выложить стенку сарая. Он тоже — строитель. Ваш вывод, глядя на Ашота — строителям не нужно знать сопромат, математику, физику, итд и тп. Так?


Короче говоря, подытожив, «матан» программисту нужен при выполнении следущих условий:

Да. Программисту-Ашоту всего этого не нужно.

UFO just landed and posted this here
UFO just landed and posted this here

Математика, в данном случае, работает мозгообразующей структурой. Объективно, в значительном количестве задач она не нужна, но тем не менее, она тянет за собой логику и доказательные методики проектирования, а не 'по общим соображениям'. Да и 'общие соображения' матанников отличаются повышенной точностью и рациональностью.

Скажите, а кто в вашем понимании программист? Какого рода надо решать задачи, что бы считаться программистом?

Программисты это те, которые пишут книги. Это те, кто создаёт ОС и реальный софт.

Очень размытое определение.
Я говорю не об энциклопедическом определении программиста. А о соответствии человека идеалистическому образу программиста и вообще о существовании образа. Культура строится на идеальных недостижимых образах. Культурный человек стремится уподобиться этому образу. Образование — придание человеку некоего образа.
Мой вопрос не о круге задач человека, а о его внутреннем содержании. Я для себя — не трудовой ресурс. Ты для себя — не трудовой ресурс. Мы относимся к себе как к людям. Программист это вид деятельности. Человек в своём виде деятельности с точки зрения себя, как человека должен ли лишь выполнять нормативы? Или должен ещё иметь культуру труда? Что если не культура труда и отношения к профессии двинет его вперёд, за привычные пределы?

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

Раньше каждый автовладелец в гараже мог перебрать карбюратор (утрированно).
А сейчас?
Так и тут.

А сейчас у многих уже инжектор, так что перебирать карбюратор им не требуется.

Сложность программ возросла, но при этом программировать стало проще, можно посмотреть на эволюцию языков программирования и инструментов разработки)
UFO just landed and posted this here
Раньше каждый автовладелец в гараже мог перебрать карбюратор (утрированно).


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

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

UFO just landed and posted this here
Я очень чётко указал, что не имею никакого высокомерия по отношению к тому, кто не знает матана и принимаю всех достойных людей, занимающихся профессионально своим делом на благо семьи и общества.
Я сам много чего не знаю.
Мой вопрос в том, почему многие сомневаются в необходимости этих знаний, пока они не понадобятся для решения конкретной задачи.
Упомянутый Java-разработчик, кстати, пример того, что человек понимает эту необходимость. Потому что на кой ему школьная алгебра, если он уже хорошо работает. А решение каких-то конкретных задач на этом уровне он может получить из ютуба по-быстрому.
многие сомневаются в необходимости математики, т.к. не видят ей практическое применение, я профессионально занимаюсь разработкой софта уже лет десять и с уверенностью могу сказать, что 95 процентам программистов не нужна математика сложнее 5го класса
Но на собеседованиях у вас будут трудности без бинарных деревьев, рекурсий, рядов, теории графов, лимитов и прочего, не так ли?

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

Подскажите, а можно построить бинарное древо без рядов Фурье? Можно ли реализовать алгоритм Флойда-Уоршелла без дифференциальных уравнений? А A*? А написать рекурсивный алгоритм, так чтобы рекурсия была хвостовой и была оптимизирована без Теории категорий? А двусторонний список? А hashmap? Можно ли реализовать hashmap без топологии ленты Мёбиуса?

UFO just landed and posted this here
Фейл. Я согласен со всеми приведёнными «манипулятивными» утверждениями:)
UFO just landed and posted this here
А как обидит программиста образование?
UFO just landed and posted this here
Типа, не обижайся когда заказчик попросить от тебя просто кнопочку на сайт, а не спроектировать звезду смерти.
Вы знали, что русский язык описан настолько строго, что почти любую ситуацию в нём можно решить алгоритмически?

это сравнение русского языка с формальными языками?
Давай ка динамический массив мне через рекурсию организуй, тогда и поговорим

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

Динамический массив. Классическая задача из классических языков.
Смысл — создание массива, не используя тип данных массив.
Создаём переменную, она содержит в себе значение и ссылку на следующую переменную (null по дефолту). Это первый элемент массива.
Создаём такой же второй элемент массива, в первый прописываем ссылку на второй.
Нужно n элементов, не создавая n именованных переменных?
Загоняем в рекурсию. Итого имеем одну переменную, от которой можно по цепочке ссылок добраться до любого из n элементов.

UFO just landed and posted this here
У нас разные источники определений. Готов согласиться.
UFO just landed and posted this here

"не используя тип данных массив"
Эээ… А есть такой тип данных? Статический массив по сути это указатель на начало и оператор "[]".
Динамический массив создаётся тактже, как и обычный, но добавляется обёртка для изменения размера его, т.е. методы добавления и удаления элементов.
А по поводу рекурсии… Ну после попытки использовать ее для расчета числа сочетаний стараюсь ее избегать.


Могу в чем-то ошибаться, программирование — не совсем профильное знание/умение.

Статические массивы — массивы, размер которых известен на этапе компиляции программы. Память под них выделяется на стеке и их максимальный размер не может быть изменён физически.
Если размер массива неизвестен заранее, то память под него выделяют в куче в процессе работы программы. Такой массив называют динамическим, так как его размер может изменяться.
Однако столкнуться с массивами можно только в ЯП системного уровня. На более высоком уровне абстракции динамические массивы оборачивают в классы для более безопасного управления памятью кучи
На правах помощника КО:
Заголовок спойлера
Простейшее использование поиска поможет дать четкие определения для данных терминов.

Массив — это структура данных, элементы которого расположены в памяти друг за другом.
Обычно за именем массива скрывается указатель на первый элемент массива. Таким образом обратиться к нужному элементу массива можно при помощи указателя массива + сдвиг, где сдвиг численно равен размеру памяти одного элемента массива умноженного на порядковый номер нужного элемента.

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

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

Односвязный список — это структура однотипных элементов, связанных между собой последовательно, посредством указателей (внутри каждого элемента находится указатель на другой блок). При этом в памяти они не обязаны находится непосредственно друг за другом.
Для этой структуры преимуществом является тот факт, что можно за константное время добавлять/удалять новой элемента на любую позицию. Но при попытке обратиться к элементу по индексу нужно будет пройти всю цепочку (в случае линейного односвязного списка) с первого элемента до того, который нам нужен.

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

Более подробную информацию рекомендую почитаться в специальной литературе. Также следует иметь в виду, что для каждого языка реализация данных структур может отличаться ввиду их абстрактной природы.
UFO just landed and posted this here
Как уже сказали, рекурсия тут не нужна, и даже опасна — на больших объемах можно стек пробить с очень печальными последствиями.

Кстати, вот вам явный пример, когда знания устройства ОС и работы компиляторов оказываются гораздо ценнее абстрактного «матана» в реальной жизни :)

Ровно до тех пор пока другое знание вам не подскажет про хвостовую рекурсию.

UFO just landed and posted this here
Это будет совершенно верно до тех пор, пока еще другое знание не подскажет вам про то, что во многих языках программирования (например, C и C++)

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


В рекурсии нет ничего опасного. Если какой-то инструмент её неправильно готовит — это проблема инструмента, а не подхода.

Эм… выделить кусок памяти, равный произведению размера элемента на длину массива. А дальше арифметика указателей.
А как рекурсией, просветите?
UFO just landed and posted this here
UFO just landed and posted this here
Вы знали, что русский язык описан настолько строго, что почти любую ситуацию в нём можно решить алгоритмически?

Это почти ложь.
Я бы тут уточнил, что почти ложь это скорее состояние, когда правды осталось так мало, что ещё чуть-чуть и всё — ложь.
В данном случае вернее было бы сказать — почти правда, то есть лжи осталось так мало, что ещё чуть-чуть — и правда.
UFO just landed and posted this here
Да, именно такой.
Те самые исключения, которые «почти» — это участие смыслов, определяемых контекстом, и тут уже яндекс только знает, что с этим делать, и то «почти».
UFO just landed and posted this here
Просто программирование расширилось и разделилось. На творческое, и ремесленное. Как и все в жизни. Есть разовые задачи, есть рутина. Странно объяснять это здоровому 33-летнему лбу
33-летний лоб знает слово культура, которое он повторил здесь уже много раз, и которое сообществом последовательно фильтруется. Возможно прочие разновозрастные лбы недостаточно знакомы с этим понятием, чтобы содержательно использовать его в беседе, и вообще понимать ту роль, которую оно играет в моём повествовании.
Что вы так за Культуру зацепились :) Хочу напомнить, что развитие предполагает переход от простого к сложному, но не обязательно качественному. Почитайте Пелевина «Empire V» и «Бэтман Аполло» пока у вас всё хорошо. Желание искать адекватных современной К у вас отпадёт )
Простите, не хотел вас задеть, всего лишь немного пошутить )
Но я поддерижваю тон комментариев, программирование гораздо шире вашего и моего представления о нем, и то что важно для вас (некая культура), совершенно не важно другим. Программирование уже давно выросло в нечто необъятное. Наверное даже мы уже не представляем каким оно может быть.
UFO just landed and posted this here
Для меня программист — это сокращенная форма от инженер-программист. Если ты по чесноку можешь назвать себя инженером — ты программист, иначе — кодер.
Немного утрированная аналогия: как маркшейдер и забойщик.
Спасибо за ответ.
Все обратите внимание на этот коммент. Автор использует формулировку «по чесноку можешь назвать себя инженером». Т.е. признаться себе честно, а не апеллировать к подобиям определений, что есть проявление культуры.
UFO just landed and posted this here
Я программирую в вебе 16 лет. До этого перловку осваивал.
Сейчас работаю над крупными HL++ проектами, с террабайтами данных, репликами и т.д.
Огромные алгоритмы, расчеты и т.п.

Для меня родная среда Go/PHP/JS.

Делаю качественный продукт, который может легко подстраиваться под бизнес и время.
Но открою вам небольшой секрет: У меня образование 9 классов.
Да, школу заканчивал уже в РФ.
Уровень знаний алгебры, на том же уровне. Однако мне это не мешает, если только иногда.
Я согласен, что с 9 классами алгебры программист может быть хорошим и очень хорошим.

<зануда> "террабайт" — да, чувствуется 9 классный бекграунд )))</зануда>
у самого тоже 9 классов. но два года работы верстальщиком газеты сделали своё дело, правильно говорят "читайте больше" и грамотность сама придёт.

Gudok.ru для печати верстал с 2005 по 2006г.
:\
UFO just landed and posted this here

Везет вам, у вас алгебра осталась на том же уровне… У меня она «выветрилась за ненадобностью».
Тоже занимаюсь вебом уже лет 9, тоже в HL, терабайты данных, оптимизации, костыли и все такое.

Для начала, программист — это выпускник ПТУ или, например, УПК, как я :) Техникума — техник-программист, вуза — инженер-программист. И это по советским меркам.


По текущим же рыночным реалиям получить "лычку" Senior Software Engineer можно, грубо говоря, изучив синтаксис, навострившись решать определенный круг "ремесленных" задач и несколько лет решая их.

А вы не могли бы обозначить круг задач который решает каждый из них?

Кратко
Программист: разработка и отладка программного кода
Техник-программист: то же плюс тестирование (юнит прежде всего), рефакторинг, оптимизации
Инженер-программист: то же плюс интеграция модулей и компонент, а также приемочное тестирование
Ведущий инженер-программист: то же плюс разработка требований и проектирование

UFO just landed and posted this here
А что, бывают места, где всего этого нет?

Бывает. Более того есть основания полагать, что много где бывает, особенно в in house или out staff разработке. В продуктовой или аутсорс — сильно зависит от заказчика/менеджмента.


С точки зрения "среднерыночной" классификации в, скажем так, странах СНГ, разработчиков можно распределить примерно так:
программист — junior software developer
техник-программист — middle/regular/ software developer
инженер-программист — senior software developer, software engineer
ведущий инженер — lead software engineer (не путать с "классическим" team lead)

Для этого существуют такие должности как «бизнес-аналитик», «технолог», «менеджер проекта», «QA-инженер».

Где-то существуют, где-то нет. И не путайте занимаемую должность с ролью в проекте.


Для этого существуют Solution Architect'ы.

Аналогично. В общем и в целом, ведущий разработчик должен уметь писать ТЗ для всех остальных по слабоформализованным бизнес-требованиям и проектировать архитектуру. Что он будет делать на конкретном проекте — ситуативно. С другой стороны, можно считать, что Solution Architect это громкое название ведущего инженера, избавленного от обязанностей обычного инженера-программиста.


Вообще очень многое зависит от размеров организации и количества и качества проектов в разработке одновременно.

Кто такой программист? Это как а кто художник?

Слишком все абстрактно и относительно, можно спорить до бесконечности, и вывести столько определений, что сто спорщиков будут с разным мнением и все правы.
Александр Привалов — вот ориентир к которому надо стремиться! Программист и немножко «маг»… Без «магии» ни куда.
А вообще —
Математику уже затем учить надо, что она ум в порядок приводит
Я программирую с 6го класса. Физфак НГУ, кафедра информатики, хорошее системное образование, всякие там олимпиады и прочая. Считаю, что из всех школьных дисциплин самой важной и образующей для современного 99.9% программиста является написание сочинений. Потому что учит связно излагать свои мысли на заданную тему.

Матан на том уровне, на котором он описан в топике — нужен в некотором наборе узких областей программирования сейчас. Графика, хфт, ну вот ИИ в последнее время хорошо взлетел и довольно требователен по математике, если хочется архитектурами нормально заниматься (хотя опять же, есть и любители просто слои в фреймворке рандомного поперекладывать). В целом позицию из топика считаю снобизмом, хотя разумеется для науки в программировании как в дисциплине в целом место еще осталось. Но не в продакшене. :)
Соглашусь на все 100%. Умение писать сочинения — это сродни написанию алгоритма. Поэтому на собеседовании смотрю как человек строит свою речь и мысли организовывает и прошу объяснять словами, а не на листочке, конечно, без фанатизма.
является написание сочинений

И животноводство.
Кто такой программист?

Тот, кто может намагнитить быстро вращающиеся металлические пластинки в нужных местах.
В 90-е программистом называли человека, способного установить винду, а уж тех, кто умел ее пропатчить, и вовсе величали хакерами =)
Сейчас компьютеры стали одноразовыми гаджетами, продаются в магазинах бытовой техники вместе с утюгами и холодильниками, и «программисты» соответственно тоже перешли в категорию работников руками.
Не хочется обижать автора данной статьи, но попахивает жестким консерватизмом и немножко тяжелым детством. Обычно по медицинским показателям такое настроение и мысли возникают ближе к пенсии и лавочке во дворе.
Если немножко положительней смотреть на людей которые пытаются что то делать в данной области, но из за нехватки базовых (или фундаментальных) знаний матана и т.д. не совсем преуспевают, станет легче на душе. Представ те что Вас окружают такие же умные физматерые (программисты) специалисты как и вы. Вы тут же начнете писать статьи о том куда делся полет фантазии, где неординарные решения, где ошибки решение которых приводит к серьезным открытиям и т.д.
РS
Активный отдых, плавание, алкоголь, женщины, азартные игры всегда помогут разнообразить суровые програмисткие будни.
PS в данном случае влияет исключительно на то, с каким именно настроением будет сказано «б%@ть, это ж п&*^$ц какой-то!»
Но сказано будет))

И да, программист это не профессия, а смысл жизни.( имхо)

Прежде чем спрашивать «кто такой программист» не плохо бы уточнить «что такое программист». Т.е. дать определение профессии, под которую ищете описание человека. Ибо с терминологией у нас тут путаница изрядная.
По миру ходит много классификаций. От банального программист-кодер до весьма развесистых сложноустроенных определений. Мне так и вовсе думается, что тут можно употребить двумерную матрицу, где по одной оси вектор кодер-конструктор, а по другой специализация. Тогда ткнув пальцем в квадрант можно указать минимальные требования к специалисту, в том числе и по знаниям математики.
PS
школу заканчивал в начале 90-х, математику помню где-то на 2-3 курс вуза… Более сложные вещи вымылись из памяти из-за неупотребимости.
О времена, о нравы. Человек о котором не складывается впечатления от том, что он может кого-нибудь качественно судить, берет и судит прикладную область, людей, культуру. Хабр скис(
Ну я вот работаю программистом в узкой специальности (САПР), но у меня не такой большой мозг, чтобы помнить все! И математику в том числе! Поэтому, когда стоит математическая задача, то я открываю гугл и ищу ответ. Да, я завидую тем людям, которые в этом всем разбираются и дают ответы. Но если я не на столько супер-умный (или память не очень), но мне нравится моя работа, то что тогда — я должен её бросить? Свою любимую работу?
Для россии есть профстандарт, там нормально описано кто такой програмист и чем он занимается Ссылка. Зачем знать матан и уметь решать уровнения, какое это имеет отношение к культуре? Это как те собеседователи, что просят написать на доске алгоритм обхода бинарного дерева, а на практике у них там CMS или CRM на костылях, и самая сложная алгоритмическая задача, с которой они сталкиваются на проекте — использовать LinkedList или ArrayList.
Программирование в современном мире — обычный инструмент, автоматизации обработки данных. Он востребован даже в сферах, которые, казалось бы, вообще не связаны с «технарскими» направлениями. Однако умение работать с этим инструментом не делает всех программистами. Кодерами — да, но не программистами.
UFO just landed and posted this here

Программист в узком смысле — это не работа с информации формальными методами, это техническое участие в разработке программного обеспечения. Формально по степени участия разделяются на 4 группы, из которых две "высших" относятся к инженерным, но умение формализовывать и алгоритмизировать задачи, знание базовых алгоритмов, а также непосредственно писать код на языке программирования, требуется с самого низкого, уровня выпускника ПТУ/колледжа с присвоением квалификации "программист".

Учусь сейчас в вузе. И по специальности у меня много математики: дискретная математика, теория графов, оптимизация и принятие решений в технических сферах, алгебра и теория числе, мат. логика и т.д. В тоже время у сокурсников есть только высшая математика и одна смежная дисциплина. Но по факту и они, и мы учимся на инженеров-программистов. Вот только преподаватели по программированию говорят, что они программисты, а мы математики или даже гуманитарии. И вот учишься и не понимаешь, кем выпустишься.
UFO just landed and posted this here
Когда заходит речь о том, нужна ли математика программистам, почему-то говорят о только матане. Но матан — это только лишь один раздел математики. И знания матана действительно применяются на практике лишь в некоторых областях программирования.

Но есть же и другие разделы математики: мат. логика, теория графов, общая алгебра, криптография, мат. моделирование, статистика и тд. В программировании используется математики гораздо больше, чем кажется на первый взгляд.

"Матан" — это обобщенное название высшей математики. Для очень многих задач в программировании она не нужна. Она может использоваться в виде готовых библиотек, но чтобы решить задачу её знание не нужно. Ну если не считать знанием теории графов принцип "зависимость сущностей кода друг от друга не должна выражаться циклическим графом" в формулировке типа "классы не должны ссылаться друг на друга прямо или через другие классы", а знанием статистики умение посчитать среднее сложив всё и разделив на количество слагаемых.

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

Но… есть одно но. Давайте поставим себя на место работодателя. Сколько стоит такой программист? Легко ли такого найти на рынке? И всегда ли требуется стрелять из пушки по воробьям? Даже если бы мне таковые и потребовались, очевидно, на одного такого я бы нанял десяток программистов попроще, т.е. простых кодеров. В общем на всякий товар есть свой купец. И плюс к тому современное обилие готовых модулей и библиотек позволяет не вникать глубоко в предмет и часто для прикладных целей достаточно школьного образования.
Программист это творец прежде всего. Это полет мысли, творческий ум.
Приведу пример: сейчас уметь писать на ассемблере чаще всего совершенно необязательно для большинства прикладных областей, мало кто его знает и надобность заглядывать в дизассембл возникает, насколько я знаю, не так уж и часто даже у тех, кто знает его хорошо; однако, в 70-80-е годы писать на ассемблере значило «быть программистом». С наступлением времени, когда компилятор си стал писать код лучше, чем пишет средний программист на языке ассемблера, уменьшилась и надобность в программистах, обладающих умением писать ассемблерный код хуже, чем это делает компилятор.
То же самое и с библиотеками. Мне тяжело представить, что какого либо известного алгоритма, до сих пор нет в библиотеке в широком доступе. Мало вероятно, что даже хорошо подкованный в математике (в той, что нужна для алгоритма) программист, напишет его лучше, чем это сделало сообщество.

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

Определились: логика и философия нужны программисту больше чем математика

Михаил, не воспринимайте на личный счёт, но это не так. Вы заблуждаетесь. Да, программирование это сплошная логика. Но логика, построенная на несовершенных инструментах. Математика — логика в чистом виде.

Докажите. Бездоказательных утверждений я тоже могу сколько угодно наговорить.


Вот вам кстати задачка. Есть грузовые весы, есть драйвер к ним для COM-порта, есть DOS-программа под Windows XP, которая получает вес с помощью драйвера. Через несколько минут активной работы весов драйвер зависает. Сможете с помощью математики найти причину и предложить решение?

При прочих равных мат подготовка позволит быстрее её решить. Особенно при первой встрече с ней. Ваши вопросы показывают, что вам плохо преподавали математику, и вы просто не понимаете её силы, вот и всё. Это не говорит плохо о вас, просто в жизни так сложилось. Я изучал и математику, и программирование, и понимаю, каково их место в жизни, и как они взаимодействуют.
UFO just landed and posted this here
Запишитесь на курс по математике, и поймёте откуда у чего ноги растут. Вот и всё доказательство.
Хотя нет, доказательств море. Они называются баги. Они лезут из любого программного продукта в количестве, не соизмеримом с логическими проблемами математики, которые встречаются только в каких-то предельно абстрактных областях и имеют скорее концептуальный зарактер, нежели операционный. Математика не издаёт несовершенных инструментов.
UFO just landed and posted this here
Вы не понимаете, что такое математика.
Это искусственно созданный человеком инструмент описания операций над такими же искусственно созданными понятиями. Сам по себе этот инструмент выверен дОнельзя. Именно эта точность и продуманость позволяют использовать язык математики, как язык описания широчайшего круга задач и феноменов в реальном мире. В самом этом инструменте багов минимум. Есть проблемы в решении задач с помощью этих инструментов, когда да, человек допускает ошибку.
В программировании тоже есть абстрактные инструменты, которые сами по себе ничего не делают. Например, языки, библиотеки и т.д. С помощью этих инструментов тоже решают задачи. Но в случае программирования не только сами задачи могут содержать ошибки в решении, но и инструменты ими переполнены. Это по багам.

Теперь по доказательствам.
Так как вы плохо разбираетесь в математике и естественных науках, то не очень понимаете, что такое доказательство. Юридические доказательства мы сейчас не рассматриваем.
Математическое доказательство это цепочка рассуждений на языке математики, доказывающая математическую, то есть в терминах математики, истинность утверждения, также сформулированного на языке математики. То есть математического доказательства, связанного с программированием я привести не могу, так как программирование в используемом нами смысле не является термином математики.
Значит доказательство переходит в естественнонаучную плоскость. Естественнонаучное доказательство строится на эксперименте. Что я вам и предложил проделать. Если необходимо более весомое доказательство, то обратимся к учебному минимуму — провести эксперимент 10 раз. То есть Вам надо будет пройти курс математики 10 раз.

Конкретные примеры связи мат подготовки и решения нематематических задач. Физмат школы традиционно лидируют в олимпиадах по любым направлениям знаний. Это не значит, что всегда занимают первые места, но существует корреляция, непреодолимая никаким скепсисом.

Функциональное программирование имеет настолько много общего с математикой, что является её разделом)
«Функциона́льное программи́рование — раздел дискретной математики и парадигма программирования, в которой процесс вычисления трактуется как вычисление значений функций в математическом понимании последних (в отличие от функций как подпрограмм в процедурном программировании).»
UFO just landed and posted this here
Физмат школы традиционно лидируют в олимпиадах по любым направлениям знаний. Это не значит, что всегда занимают первые места, но существует корреляция, непреодолимая никаким скепсисом.


Боюсь, у вас тоже проблемы с математикой. Любой знающий основы статистики, знает главное правило «Корреляция еще не означает вследствие», гуглите «Влияние количества пиратов на глобальное потепление».

Знающий научный методы и статистику подумал бы о том, что:
1. Уровень преподавателей в Физмате выше, чем в обычной школе (в том числе по той же информатике),
2. Оборудования в классах Физмата лучше, чем в обычной школе (например, в обычной школе может просто не быть достаточного числа современных компов),
3. В Физмат школы набирают избранных учеников, то есть типичных двоишников и троишников там может просто не быть,
4. Обычные школы могут просто не так мотивированы на участие в Олимпиадах, они не готовят учеников к Олимпиадам специально,
5. Те кто судит Олимпиады могут оценивать работы субъективно в зависимости от сильной школы или слабой,

То есть факт «именно математика ведет к победам по всем дисциплинам» — совсем не очевиден. Более того, совсем не очевидна корреляция «физмат образования с уровнем программиста впоследствии».

Например, известно, что влияние шахмат на умение логически мыслить и последующих успех в технических дисциплинах сильно преувеличено. Умение играть в шахматы дает навык игры в шахматы.

1) Из ваших доводов никакого научно обоснованного доказательства того что математика действительно дает больше для развития навыком программирования, другие интеллектуальные занятия (логика, шахматы, логические загадки и головоломки) не показано.

2) Никак не показано, как именно знание математики дает преимущество в программировании (если оно не связано с бизнес областью математики) большее чем знание экономики, бухгалтерии (а экономический домен знаний это чуть ли не половина всех крупных программных продуктов) или, скажем, логики с философией,

3) Почему культура разработчика должна ограничиваться только математикой — логика, философия, физика, электроника, по идее не менее важны. Но вот где вы возьмете столько времени, чтобы изучить все и сразу?

P.S. И кстати переход на личности (иди изучай математику) — это признак неумения вести конструктивный спор.
P.P.S. На всякий случай, у меня высшее математическое образования, так что математику учить не посылайте. :)
UFO just landed and posted this here
UFO just landed and posted this here
То есть задачу решить вы не можете. Даже причину предположить, или хотя бы описать, как математика в этом поможет. ЧТД.

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

Математика это просто способ формального описания. Программирование тоже. Оба они опираются на логику. Просто программирование ближе к реальности.
Раз привел задачу, надо и ответ написать.
Скрытый текст
Оказалось, что если постоянно читать, то все работает нормально. Сошлись на том, что приходящие данные попадают в буфер, а в драйверах Windows, которые отвечают за проброс COM-порта в DOS-программу, наверно есть какой-то косяк, из-за которого оно накапливается, буфер постоянно увеличивается и забирает память. Добавили в драйвер вместо разового чтения цикл пока есть данные, и так оно и работало.
Для тех, кто меня минусовал — посмотрите хотя бы пару серий сериала Numb3rs. И поймете для чего нужна математика.
P.S. В этом сериале все формулы и расчеты реальные. Там команда математиков специально была приглашена.

Не математикой пронизан мир, а часть людей стремится описать мир математикой.

Вопрос автору. Вот два списка.


Первый:


  • императивное программирование
  • декларативное и фукнциональное, монады и пр.
  • конечные автоматы всех видов
  • структуры данных (стеки, Map-ы, Set-ы, списки, деревья) и алгоритмы (хотя бы базовые вроде бинарного поиска, quicksort, сортировки в ширину, базовых алгоритмов по графам)
  • акторы, волокна, async-await и пр. многопоточные примитивы
  • регистры ЦП, L1, L2, L3, семафоры
  • РСУБД и NoSQL, поисковые БД и прочие другие лихие, индексы
  • Тонкости работы с памятью в *nix & windows
  • Высоконагруженные сервисы
  • SOLID, DRY и пр. аббревиатуры касательно архитектуры приложения и организации кода
  • Asembler, LLVM и пр., хорошее знание архитектур процессоров
  • Rust и его подход к работе с память, тонкости работы с указателями в низкоуровневых языках
  • Безопасность
  • ну и т.д.

Это был первый список, и, скажем:


  • Дифференциальное исчисление
  • Теория категорий
  • Линейная алгебра
  • что там ещё учат в университетах? я всё "прогулял" :(

Должно быть в одном списке или нет? Мне показалось, что та самая "культура", о которой говорит автор, касается как раз первого списка. А вот реальная взрослая математика, которой пытались изнасиловать мой мозг в ВУЗ-е, касается очень узкой, и, вероятно, высокооплачиваемой области, где большую часть из списка 1 можно и не знать. Да почти всё можно не знать. Можно даже код как курица лапой писать.


Как мне показалось, за мой уже не такой и малый опыт, — реально в ходу у большинства математика до 10 класса. Всё что выше касается единиц. Скажем решать системы простых уравнений — must have. Выводить одну переменную из другой в уравнении — must have. Не падать в обморок при виде sinus-а или lg — must have. А вот без первообразных можно уже и обойтись, легко.


Программирую уже лет 15. За деньги лет 7-8. Как обожал это действо в детстве, так прусь от него и по сей день. Постоянно испытываю этот комплекс самозванца и в итоге что-нибудь читаю, пробую, просвящаюсь. Но вот не тянет меня разбираться в этих диффурах, прямо совсем. Они для меня как с другой планеты. Это я такой идиот? :)


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

Сложности с определением «программист», возникают из-за того что не бывает (за редким исключением) сферических программистов в вакууме!
Программирование всегда есть приложение к чему-то. Например, программист металообрабатывающих станков. А что, такой же программист, только оперирует допусками-посадками, системами СПИД (станок приспособление инструмент деталь). Оптимизирует программу по точности/по быстродействию, борется за кроссплатформеность итд. итп. Но мало кто называет его программистом, чаще станочник, чпушник специалист по метало обработке.
Зато если вы пишите под 1С, вас называют программист, хотя по сути — специалист по бухучету.

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

Никто сегодня в здравом уме не требует глубокого знания физики от электрика, хотя первые исследователи электричества в полной мере отвечали гордому званию ученого. А все потому, что данный раздел физики проник во все сферы жизни современного человека. Хотя все еще существует очень малая группа людей (в процентах от общего числа людей, эксплуатирующих электричество в личных целях), которая знает физику электричества очень глубоко.

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

По мере взросления компьютерной отрасли все большее число людей стало вовлекаться в процесс освоения профессии программиста, а отраслевые лидеры (IBM, Microsoft, Sun и т.п.) упрощать процесс программирования путем стандартизации и унификации. И все это ради самой банальной выгоды – лучше потратиться один раз на сознание легкого для освоения и последующего использования языка программирования, а затем платить среднюю зарплату персоналу средней квалификации (которых много), чем постоянно платить высокую зарплату специалистам очень высокой квалификации (которых очень мало).

Поэтому слабые знания высшей математики большинства современных программистов свидетельствуют не о деградации профессии, а о зрелости отрасли программирования, как, например, отрасли электротехники. А для зрелой отрасли характерны такие признаки, как теоретическое решение большинства фундаментальных проблем и четкая корреляция между уровнем знаний и уровнем оплаты труда для большинства инженерных специальностей.
Лучше бы вас грамотно писать научили, а не тому, что «русский язык описан настолько строго, что почти любую ситуацию в нём можно решить алгоритмически» :-(
У меня вертится в голове старпёрский риторический вопрос: «А как же культура?»

Вопрос автору — он знает все произведения всех классических композиторов, может отличить картины Рубенса от Рембранта, прочитал всех известных философов (Кант, Гегель), читал всех английских классиков в оригинале, в совершенстве говорит на французом?

Нет? А 100 лет назад сложно было считаться образованным человеком, если не знаешь всего этого. Как же культура? Если требуете культуру, давайте начинайте с начала — не можешь в совершенстве перечислить все вальсы Шуберта — иди в дворники, нечего тебе делать в программистах.</сарказм>

Такой чувство, что у автора комплексы, он пишет на VBA, но знает математику, а какой-то тип позорит звание Java программиста, так как он ее не знает.

На самом деле, у меня диплом прикладного математика, но недавно (через 10 лет) мне пришлось лезть в википедию, чтобы вспомнить как найти угол между двумя пересекающимися отрезками. Просто не возможно быть специалистом сразу везде и если тратить время чтобы стать хорошим программистом — математика будет забываться. Либо забудется история, экономика, знания классиков. Бессмыслено требовать знание того что не всегда нужно

UFO just landed and posted this here
В некоторых сферах до сих пор держится зависимость «должен разбираться в предметной области», и вот тут всплывает тема про математику, например, в компьтерной графике (разработку граф. движков нельзя представить без линейной алгебры), в обработке сигналов (мат. анализ), в машинном обучении (статистика), и т.д.

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

"Честное слово, я и не подозревал, что вот уже более сорока лет говорю прозой. Большое вам спасибо, то сказали." © Мольер


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

UFO just landed and posted this here
Вы пытаетесь отменить понятие кульура. Поэтому мне сначала надо Вам доказать её смысл и значение вообще, а потом уже перейти к роли культуры в производственной деятельности. Стоит начинать?
UFO just landed and posted this here
UFO just landed and posted this here
Спросите у Леонардо. В живописи он воспроизводил свои естественнонаучные открытия. Инфа от первого лица.
UFO just landed and posted this here
Серьезно? Я вообще думал что в начале ветки вы шутите… Я конечно не художник (хотя в художку год ходил в детстве), но работы с пропорциями, расстояниями, глубиной, формами и т.п. при написании картин дофига и больше.
UFO just landed and posted this here
На этот счёт я могу ответить только в своём духе. Да, художник может написать и на шару. Композитор тоже может. Но делает ли им честь открытое пренебрежение академическим знанием? Если они выйдут и скажут — вся эта ваша анатомия и контрапункт — фигня, мы и так можем. Лично я бы подумал: «Гений ты, барин. Но дурак.»

Погодите, вы всерьёз полагаете, что художники, перед тем как рисовать ту или иную картину, сидят с расчётами и корректировками проекции? Может быть ещё и что-нибудь в области топологии вычисляют? Ну или скажем нужно художнику тень нарисовать, как вы полагаете, будет ли художник вычислять её длину и степень размытости краёв? Наверное он откроет AutoCAD? :)

Тоже учился в российской физматшколе чуть раньше вас. Потом защитил кфмн, для души преподаю старшеклассникам математику в частной школе. А работаю в известнейшей софтверной компании и даже некоторое время имел официальным названием должности — data scientist.

Не буду утверждать, что математика мне не нужна. В конце концов, профильного айтишного образования у меня нет, и на хорошую должность меня взяли, несмотря на мизерный опыт, как раз под впечатлением от математических навыков. По работе действительно иногда применяю навыки примитивного матанализа, несложные техники из математического курса «Численные методы», азы линейной алгебры и аналитической геометрии и статы на уровне первого курса гуманитарных вузов. Но очень редко, не каждый месяц. Более того, уверен, что мог бы работать и без привлечения этой математики — может, немного менее эффективно. Математическую суть за библиотеками машинного обучения я понимаю лучше многих коллег, но результаты часто лучше у тех, кто старательнее работает, даже не разбираясь в сути методов. А ведь работа у нас, по программистским меркам, на редкость наукоемкая.

Кстати, алгоритмов это тоже касается. Да, приходится иногда оптимизировать паросочетания, применять градиентный спуск или отжиг, искать мосты в графе или реализовывать фильтр Блума, но далеко не каждый день, в большинстве случаев — скорее из любви к искусству, чем из насущной необходимости.
Я в школе еще в 7-8 классе решил, что стану программистом, тогда космонавтика уже была не в моде. Тогда же я решил, что буду поступать на подходящий факультет, где начну осваивать языки программирования. Он у нас назывался так «Прикладная математика и информатика». На первом курсе мы начали изучать высшую математику, тогда мне это не показалось странным. Я думал это необходимо для изучения языков программирования. На втором курсе математики стало еще больше и занятий связных с программированием ставились на 2 место. В итоге я бросил учебу в ВУЗе и начал самостоятельно учится программированию, благо в это время уже был доступ в интернет, хоть и медленный, но этого вполне хватало для изучения языков.

Почти все хорошие математики имеют хорошую логику. В программирование важнее, чтобы человек обладал хорошей логикой. А математика на уровне 9-10 класса вполне достаточно для решения многих нынешних задач бизнеса.
Что за культур-мультур, вы, добрый человек, имеете в виду?
Ну эт когда не требуется чего-то, но чувствуешь, что надо полюбас)
UFO just landed and posted this here
UFO just landed and posted this here
Всё, что описано — в корне верно. Но автор путает понятия культуры с другими явлениями.
Хотя, может и нет. Я постараюсь подкорректировать его пост своим пониманием окружающей действтиельности. Суть в том, что современный мир потерял ту опору, когда была борьба систем, какой-то драйв и жесткая конкуренция. Мировая война, а точнее целый цикл — позволил пробиться в социальные верхи людям, которые понимали в своем предмете выши среднего. Сверху был и послан сигнал об соответствующем отборе на ту или иную деятельность. Пока люди были хорошие — сигнал был сильный и правильный. Потом, когда холодная война завершилась, начался «капитализм», начались кровные связи, ОПГ — все это нам известно. Постепенно людей порядочных и профессиональных — сместили обычные «колбасники», для которых обычные инстинктивные удовольствия и желания — основа. Далее — есть нефть, есть ресурсы, можно просто пилить то, что было создано до них, можно вывозить через офшоры триллионы — все схвачено. Люди, которые остались и не попали в тренд — превратились в быдло, с плохим образованием, без картины мира и без той самой «культуры». К слову я — без образования вообще, я учился в классе для отстающих, жизнь уготовила мне путь к социальному дну, но, как вы можете видить — понимаю мир достаточно глубоко. Внутренний импульс нельзя загасить, все равно он будет стараться пробиться вверх. Так что умные люди — это артефакт, это не должно быть массово — природа нас создавала, чтобы мы размножались, а не учили «матан». В советские времена, с жесткой регламентированной программой обучения(лучшей в мире) — обезьянку жестко дрессировали. Просто то, что было скрыто от глаз под прессингом системы — вылезло наружу. Дикость, социальное неравенство, вся та грязь, что мы видим вокруг. У меня всё.
Могу только выразить высочайшую степень уважения.
Заметьте, коллега, большинство минусует, т.к. не может понять суть проблемы или понимает, но предпочитает плыть по течению и не нагружать мозг высокими материями.
UFO just landed and posted this here
Вопрос не стоит совершенствоваться или нет, а в каких направлениях. А тут как раз и получается, что бросили клич «новый фреймворк» и понеслась — забиваем гвозди микроскопом. А нет подумать с точки зрения требований о целесобразности его использования, но это не для нас! И проблема эта лежит как раз в плоскости культуры производства. Уважающий себя мастер не будет пачкать свое имя халтурой. А если во главу угла поставлено «рубить бабло», то про качество можно забыть. И в конечном итоге страдает и бизнес, но это, типа, проблемы заказчика.
UFO just landed and posted this here
Живу я как раз в реальном мире, а не в Матрице.
Что вы имеете ввиду под серьезным местом? К сожалению, работая в довольно крупной IT-компании с подобным сталкиваюсь очень часто и потом приходится исправлять «шедевры». Причем их авторы как архитекторы так и джуны.
Фреймворки, особенно в опенсорц, выходят не только как улучшение предыдущих. Но и как отработанный продукт. Ничего нового, но если ему прикрутить в рекламу, например, BigData, то можно еще раз продать поддержку, привлечь инвесторов и т.д.
Или, как оказалось, конкуренты обошли по технологии, а вложили уже много и имя обязывает. Раскручивается рекламная компания, курсы — у всех на слуху. К сожалению, этот случай очень распространен.
Или очередному менеджеру нужно повышение, квартира, машина и т.п., а прочитал, только «три книжки»… Берем новый перспективный, на требования и наработки плевать, толпу согласных, не согласных — в топку и полный аджайл! Заказчику красивую картинку — лапшу на уши. В этом, бесусловно, есть свой смысл.
«потому что все его используют»

В целом это тоже уменьшает цену поддержки.


«потому что новый»

А это позволит формировать имидж современной компании

Как правило, начиная изучать фреймворк, люди таки думают над целесообразностью такого изучения и, чаще всего, целесообразностью применения. Другое дело, что список и веса критериев могут отличаться от ваших. А в целом затруднительно составить объективную формулу оценки целесообразности, поскольку обычно оперируют субъективными оценками будущего.

Почему вообще возникают вопросы вида «Нужна ли математика программисту»?
Мир в наше время стал куда более многограннее, не только в сфере IT. Уже сколько слов сказано о распределении труда. Каждый выбирает то, в чём он себя чувствует комфортно (по крайней мере не собирается покидать, так называемую, «зону комфорта») и не задумывается над тем, что ему не нужно для его деятельности.
Нравится химия? Тогда занимайся этим, исследуй поведение различных элементов в определённых условиях (теоретически, физически — не важно). Футболлист? Бегай, пинай мяч, развивай своё тело. Писатель? Выражай свою позицию, мысли, создавай прекрасное, удивляй словом. Так же и в программировании, каждое направление требует определённых знаний и умений.

Само слово «программист» — слишком расплывчатое понятие. Если ты web dev, тебе нет необходимости задумываться над сложными математическими оптимизациями, экономии, в то время, как при создании той же ОС-и необходимо иметь представление о памяти и понимать, как сделать быстрее (высосано из пальца).

Возвращаясь к примеру с математикой. Человек, жаждущий попытаться себя найти в этом в первую очередь должен разобраться какие вообще ветви существуют (как и в любой другой сфере). Поскольку, как я считаю, такой вопрос указывает на некомпетентность человека в ситуации (по крайней мере на тот момент). Выучить можно всё, желание бы было.

Автору повезло учиться в "хорошей" школе, окей. Но "хороших" школ мало, на то они и называется "хорошие", а не "обычные" и не все могут попасть в "хорошие". Автор так гордится своей жертвой, что когда-то в детстве обогнал всех на два курса по матану, что теперь ему кажется неправильным, когда оказывается, что мы не в шестидесятых, и есть высокоуровневые языки. И, сюрприз-сюрприз, оказывается, что, например, в случае с java вся эта ерунда в 90% не нужна вплоть до сеньерских позиций. Это круто, что чуваку с тостера понадобилась школьная математика, плохо, что автор, в стиле русскоязычных форумов по Делфи, привык только щеголять своим "хорошим" средним образованием, что он не упускает повода и пишет целый пост на хабр. Представьте, что автор написал бы такой же пост про учебник по английскому. Его бы подняли на смех, потому что принято, что изучать язык — это же всегда круто (хотя английский, наверное, важнее) но с математикой почему-то возникают какие-то сомнения, она преподносится как нечто невероятно важное и базисное. Подобная дискриминация по умению решать никому не нужные математические головоломки, принятая в русскоязычном комьюнити, является вредом наряду с травлей женщин-джуниуров. Я надеюсь, что когда-нибудь можно будет написать вопрос по-русски и не получить в ответ кучу желчи и подобные посты.

Те, кто на Тостере задают вопросы «А нужна ли программисту математика» — это просто те, кому не дается или лень учить математику в школе, а программировать хочется.

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

Но тем перцам с Тостера все же нужно отвечать нужна. Ибо тренирует мозги.

Расширяет кругозор. Как и большая часть из школьной или вузовской программы. Непосредственно это не надо. Но мозги развивает.

Если же человек хочет без абстрактных знаний — сразу рубить бабло, то это классическое ПТУ-шное образование. Максимум практики, минимум теории. После восьмого (сейчас девятого) класса в ПТУ и в поля на заработки.
Почему вы считаете, что для такой тренировки не может использоваться само программирование?
Математика это универсальная описательная система для всех инженерных направлений и наук. Даже психология описывает свой мир статистикой, а не стихами. Если Вы правильно изучали математику, программирование для вас — вопрос изучения синтаксисов и библиотек, вся логика и модели уже есть в голове. Алгоритмы — набор частных случаев. Такая вот магия. Обратно это не сработает, потому что в программировании и близко нет таких описательных систем. Иначе уже был бы один сверхъязык, на котором было бы удобнее всего работать. Люди и мосты научились строить без сопромата, но надо ли этим хвастаться?
Если Вы правильно изучали математику, программирование для вас — вопрос изучения синтаксисов и библиотек

Да, то-то у всех математиков, не знакомых с программированием, вызывает удивление выражение "x = x + 1".


Вот вы изучали математику. Сможете операционную систему написать?


Не "математика помогает программированию" и не "программирование помогает математике". А и программирование и математика зависят от логического мышления. Программирование оказывает на него больше влияния, потому что логика проверяется независимым исполнителем — компьютером.

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

Логика не может быть вторичной по отношению к компьютеру, потому что не он её придумал. Логику придумал и сформулировал человек. Самый развитый логический аппарат заключён в математике, потому что это чистая абстракция, на которую практически не влияют несовершенства внешнего мира. Компьютер это всего лишь вычислительная машина, которая призвана воспроизводить некоторые алгоритмы, придуманные человеком. Она может быть спроектирована и запрограммирована более или менее хорошо, и потому не может являться мерилом верности логики.
Мы можем лишь говорить о степени доверия к её результату.

Есть логика вообще. Она делится на различные виды, прежде всего на классическую (аристотелевскую) и математическую. Математическая логика — пересечение множеств "логика" и "математика". С появлением ЭВМ, а точнее логических и вычислительных устройств появилась машинная логика, которую можно описать с помощью аппарата математической логики, но на практике программисту это описание не нужно, в том числе, потому что более-менее краткое описание будет идеальным типа машины Тьюринга с бесконечной лентой, а полное, с известными физическими ограничениями, необъёмно и избыточно для практики, ведь на практике ему нужно понимание машинной логики, а не аристотелевской или математической. На практике задача программиста чаще всего переводить с языка "бытовой" логики на язык машинной логики. Можно это делать сначала переведя его на язык математической логики, а потом результат на язык машинной. Можно, но нужно ли?

Машина Тьюринга определена через язык математики.
Машинная логика это вообще микроскопический частный случай элементарной алгебры.
Я не говорю, что для решения задач о переустановке дров надо решать систему уравнений.
Я говорю, что математика качает инженерный мозг лучше всего, потому что все инженерные дела сформулированы через математику, являются её отдалёнными правнуками. Если бы программирование включало в себя так же человеческие эмоции в неоцифрованом виде, а в чистом, и красоту музыки в чистом неоцифрованном виде (не знаю, как это возможно, но если бы), то я утверждал бы, что необходимо понимать психологию и искусства, чтобы кодить на таком франкенштейне. Не только опираться на свои опыты в прогрммировании.

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

Я говорю, что математика качает инженерный мозг лучше всего, потому


Лучше всего качает мозг инженера именно та самая отрасль, в которой он работает. Основную массу программистов вполне можно готовить в ПТУ и никакой вышки им там не давать. Уровень вузовского образования нужен в работе не более 1% программистов.

Ну, 1% явно маловато, если следовать формальным делениям и статистике. Я бы сказал, что специализированное вузовское образование нужно процентам 20 программистов, от уровня Senior. Или эквивалентный ему опыт работы программистом.

Ну, 1% явно маловато, если следовать формальным делениям и статистике. Я бы сказал, что специализированное вузовское образование нужно процентам 20 программистов, от уровня Senior. Или эквивалентный ему опыт работы программистом.


Зачем нам тут Парето?

Большая часть занимается сугубо прикладными задачами в отраслях, где вся математики или уже подсчитана и дается в готовом виде («посчитай процент наценки на товар вот по этой формуле») или вообще достаточно знания арифметики на уровне 5 класса школы.

Даже если взять какие-то области, где хоть немного нужно от вышки — геймостроение. То, что нужно в 99,9% укладывается с запасом в половину первого семестра первого курса ВУЗа.

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

это просто те, кому не дается или лень учить математику в школе, а программировать хочется.

Или те, кто уже давно и успешно программирует, но чувствует, что чего-то не хватает для дальнейшего профессионального роста.

Мне кажется, я понял автора. Образование, и, в частности, математика — это обязательные слагаемые культурного инженера (программиста), и математикой (как и другими дисциплинам) нужно владеть даже если повседневная работа этого не требует. Нужна ли математика программисту — такой вопрос вообще ставить не следует, он появляется у людей от страха неудачи в попытке освоения математики, но это не имеет значения, нужно просто стараться узнавать, учить, работать в этом направлении каждый день и не важно сколько времени это займёт — пару семестров или 15 лет. Тем более, что в наше время легко и бесплатно доступны тонны материала по интересующим дисциплинам (на ютубе вагон всяких каналов с лекциями). Слышал такое выражение (приписывают Лихачёаву) — если человек задаёт вопрос "надо ли мне что-то знать или учить" или "зачем мне это знать" то на нём можно смело ставить крест.

UFO just landed and posted this here
«Знай понемногу во многом и многое в малом»
он появляется у людей от страха неудачи в попытке освоения математики

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

Хочу заметить, что молодые «программисты» не знают даже основы школьного курса математики!
История из личного опыта:
Понадобилось сделать кредитный калькулятор на вебморду одного мелкого банка. Говорю, ребят, чтобы не париться, пусть мне ваши разработчики пришлют формулы, по которым они считают на внутреннем банковском приложении.
Присылают. Быстро прямо на javascript пишу калькулятор. Отдаю на проверку.
— Не верно. График погашения не бьется с тем, что выдает наша программа.
Беру их график. Перепроверяю. Нахожу у себя неточность с округлением. Я его делаю алгебраически, а банкиры, как и положено, приведением к большему с учетом в дальнейших расчетах.
Опять отдаю на проверку.
— Опять не верно. График погашения не бьется с тем, что выдает наша программа.
Перекапываю всё, не нахожу у себя ошибку.
Связываюсь с банком:
— Народ, я, конечно, понимаю, что вы меня в потроха своего софта не пустите, но можете просто прислать вашего программиста с лаптопом, на котором будет реальный кусок кода вашего калькулятора, пофиг на каком языке он написан?
Присылают. Смотрю… Спрашиваю:
— А кто писал этот код?
— Я.
— Вот смотри, вот мат. функция, которую мне прислали, написанную, чуть не от руки, вот её реализация у тебя. Не находишь разницы?
— Нет, всё верно!
Потом я связывался с его начальством и объяснял, что ошибка не в моём, а в их калькуляторе, и человека, который его писал, необходимо ещё раз отправить в школу, т-к для него отрицательная и дробная степень числа — это одно и тоже!
Как итог — банк, без широкой огласки, вынужден был с несколькими тысячами клиентов перезаключать приложения к кредитным договором с новыми графиками выплат.

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


Полагаю — перезаключили потому что в их пользу?

Но вообще программисты и математика в данном конкретном примере не связаны.
Программист был обязан реализовать так как ему дали формулу.
И кто-то из ответственных за финансовую часть там был еще обязан проверить и перепроверить как считает созданная программистом программа. Дело программиста здесь маленькое.
Так что математику не знает какой-то из финансовых сотрудников, а не программист. Или тестирование плохо в банке поставлено.
Не только. И в ту и в другую сторону было. Там в общем копейки, но…

Нередко программист сам ищет формулы на основе бизнес-задач типа "нам нужен аннуитетный продукт".

Вот ответственные и «перепроверили». Результат устроил.
Как там говорят «если всё работает — не трогай» :D
UFO just landed and posted this here
Это пример не «нужности математики», а из рук вон плохо построенного рабочего процесса и тупоголового менеджмента.


Тем более что этом могла быть и не ошибка программиста по неграмотности. А умышленно написанный некорректный код.

Из жизни, слышал от пострадавших лично:

Заказали программисту платежную систему (прием платежей за сотовые, коммунальные и т.п. и переотправки их дальше по цепочке) — он все сделал.

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

Потом я связывался с его начальством и объяснял, что ошибка не в моём, а в их калькуляторе, и человека, который его писал, необходимо ещё раз отправить в школу, т-к для него отрицательная и дробная степень числа — это одно и тоже!

Это была формула расчета аннуитета?

Сам с таким сталкивался, когда дали тех. задание с расчетами рисковых параметров (слегка посложнее калькулятора) с описанными формулами, по которым все сходилось 1 в 1. После N-ной ошибки «считает неправильно» начал разбираться и выяснил, что они сравнивают не со своей предоставленной методикой, а с каким-то эксель-файлом, который им сделал неизвестно кто и когда. Настоял пересчитать при мне на калькуляторе по своим формулам и выяснил, что считать они не умеют. Спустя десяток-другой пыхтений, они пришли к выводу, что наш расчет с их методикой все-таки сходится. И получил зеленый свет на отказ подобных ошибок не по существу. :)
Хочу заметить, что молодые «программисты» не знают даже основы школьного курса математики!

Вы сделали этот вывод на основании одного эпизода?

Если взять не только «программистов», то эпизоды были и ещё. Несколько раз в год приходится с нуля рассказывать людям 20-27 лет что такое пропорции.

И даже это больше говорит о Вас, нежели о мире.

Было… Во времена обучения в институте (конец восьмидесятых) профессора с кафедры рассказывали подобное. Типа «приходит заслуженный… и говорит „А тут мы посчитаем квадратик“ — »в смысле матрицу?""

Знания нужны и полезны — смысла нет отрицать. Проблема определить, какие знания потребуются тебе в будущем, чтобы их получить. Слишком много интереснейших вещей

Вы не один такой. Мне 29, я тоже окончил физ-мат школу и виду как снижается качество образования. Готовят в основном «обслуживающий персонал». Может это и неплохо, но все чаще ощущаю себя героем романа Олдоса Хаксли.

Математика — это просто еще одна предметная область. Вот так к этому надо относиться.

Можно всю жизнь профессионально писать программы и не затрагивать багаж даже старших классов школьной программы. Львиная доля программистов просто пересыпает туда-сюда данные и показывают на экране отчёты с арифметическими действиями в формулах.

Это не хорошо и не плохо. Просто так есть.

Другой вопрос, если вы занялись чем-то, связанным с точными науками. Вот тут-то придется обновить вузовский матан.
Математика нужна чтоб мыслить уметь аналитически. У программиста думаю главное не просто знать принципы а уметь построить всю систему в голове и продумать её ещё до написания кода.
Гуру программирования это я думаю люди хорошо знакомые с алгоритмикой.
Нормальный веб-программист скачает высокоурвненые фреймворки, которые посчитают всё сами. Не вносите смуту)
UFO just landed and posted this here

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

См. опрос:
6. Роль математики для информатики в школе высокая


Из более чем тысячи человек только 61% ответили «Да». Никто не спорит, что для создания простых web-страниц математика не нужна. Более того: можно и HTML не знать. Это ремесло, простая инженерия. Но существует наука computer sci. На русский это название не совсем удачно переводят как информатика. Для изучения основ информатики матан не обязателен. А вот, нпр., теория вычислительной сложности (математическая) необходима. В современном мире повсеместно наблюдается разделение труда: кто-то как пирожки «печет» простенькие web-странички, а кто-то разрабатывает новые алгоритмы, доказывая на теоретическом (т.е. математическом) уровне их корректность и производительность для наихудшего случая. И та, и другая работа востребованы. Как и в случае с автобусами: кто-то их водит по маршрутам, и его называют водитель автобуса, а кто-то разрабатывает новые модели автобусов, и его называют инженером. Возможно, что не всякий инженер сможет сразу стать хорошим водителем, но водителю переквалифицироваться в инженера, наверное, гораздо труднее.
UFO just landed and posted this here
все-таки ему разрешается использовать в проекте что-либо уже изобретенное и производимое сторонними поставщиками?
Разрешается. Аналогично: если я создал новый алгоритм, то могу, нпр., в нем использовать сортировку пузырьком, а в доказательстве корректности теорему Пифагора.

Вопрос автору: насколько глубоко надо знать то, что происходит после нажатия кнопки включения ПК, чтобы считаться профессионалом?

Вопрос автору — расскажите, пожалуйста, подробнее про культуру Программиста в разрезе математики. А то ведь у современного программиста много сторон — культура комментирования кода, культура проведения рефакторинга, культура работы с git и т.д.
Sign up to leave a comment.

Articles