О времена, о нравы. Сегодня в Тостере увидел тему, в которой человек признавался, что работая java-разработчиком он знает алгебру и геометрию на уровне 6 класса и просил посоветовать учебники. Этот запрос несомненно вызывает уважение — человек хочет учиться.

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

Да, кодить мы начали в третьем классе, и это был не Хогвартс, не лаборатория по прокачке яйцеголовых — все были обычные парни и девчонки с района. Совсем немногие с инженерными и научными кровями. У нас была крутая математика. А ещё крутой труд, физкультура и история. Всё было пропитано системностью. Вы знали в школе, что история это наука, систематизированная, наполненная внутренней логикой, укладываемая в таблицы и выводы? Знайте, это так. Вы знали, что русский язык описан настолько строго, что почти любую ситуацию в нём можно решить алгоритмически?

В старших классах мы форсировали матан да так, что потом пару курсов в ВУЗе можно было отдыхать. На чём многие, кстати, и погорели. И нет, не были гениями, мозг кипел, распределение оценок было такое же как и везде — двоечники, троечники, хорошисты, ботаны. Ботаны были гениями, это да. Ученики физмат школы не любили ботанов так же, как их не любят везде. Что ещё раз доказывает, что мы не были особенными. Это важно для последующего рассуждения.

На уроках информатики мы решали те же задачи из матана — находили корни уравнений, строили графики. Изучали принципиальное построение языков — типы, структуры данных, алгоритмы, работа с памятью, было немного Delphi и ООП. В основном, конечно же, Pascal. Для общего развития были C и Assembler. Немножко захлестнули БД под конец, конечно же с нормализациями. Изучали двоичную алгебру и делали по фану игры.

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

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

У меня так сложилось, что я стал соприкасаться с программированием спустя более 10 лет после выпуска из школы. Всё поменялось — появился веб, куча каких-то странных слов и названий. Я точно, знал, что эти гении — Программисты, которые создают коммерческий продукт, ушли уже очень далеко, в какие-то параллельные космические миры, где мне их никогда не достать. Что я приду к ним, а они мне скажут: «Брат, какой тебе блог на PHP? Давай ка динамический массив мне через рекурсию организуй, тогда и поговорим.»

И ведь справедливо. Ведь я точно знаю, что программист это даже не профессия. Это специализация инженера.

Подозрения начали закрадываться, когда на Тостере я начал читать вопросы в духе «Нужна ли математика программисту?». И ответы в духе «решение рутинных задач для лендосов математики не требует».

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

У меня вертится в голове старпёрский риторический вопрос: «А как же культура?». Я считаю, что этот вопрос вообще главный для вменяемого инженера, но это отдельная статья. Неужели творческое начало в программировании настолько уступило ремесленному, что важны только плоды и никто даже не заикается о корнях их питающих? Как вообще может приходить человеку в голову вопрос «нужна ли математика программисту»? И насколько вообще опошлено и девальвировано гордое звание Программиста? Неужели никто не говорит о культуре разработчика? Или мы дошли до того, что никто уже этого не понимает? Тогда откуда вы возьмёте этот ваш желанный идеальный код, если не из культуры мысли?

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

UPD
Итак, после менее чем суток отчаянных ломаний копьев вырисовалась некоторая картина.
Это чисто мои выводы.
Пройдёмся по порядку.
Посвящается тем, кто прочитал пост и жаждет ринуться в бой, а читать 100+ комментов, конечно же, не досуг. Нижеследующий текст кое-что прояснит.

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

Культура
По моим наблюдениям очень малая часть читателей готова воспринимать слово «культура», как содержательное понятие, имеющие для них смысл больший, чем сходить в театр или не плюнуть на соседа. Это не говорит ничего плохого о людях, это просто констатация некоторых фильтров восприятия. В случае, если понятие «культура» (как и любое другое понятие) имеет в сознании человека развитое содержание, он анализирует текст в связи со всем тем объёмом смыслов, которое это понятие несёт и дискутирует так же и на уровне этих смыслов. Абсолютное большинство комментаторов дискутировали со мной на уровне профпригодности и и решения производственных задач, вопрос о которых в исходном тексте ВООБЩЕ не поднимался. Если вы ещё раз перечитаете текст, то он весь подводит к последнему абзацу с вопросом «А как же культура?» Дальше по абзацу задаются вопросы, являющиеся смыслом и содержанием топика. Целый абзац вопросов исключительно по культуре, и никто не отвечает о культуре.
Я делаю вывод — в массе своей комментаторы вообще не понимают, о чём идёт речь, когда поднимается вопрос о культуре профессиональной деятельности.
Почему?
У меня есть своя версия, накину для разнообразия. Почти век у нас человека учили, что он — производственный кадр. Что частное ничтожно перед общественным. Что его общественная роль и есть его содержание. Что культура это лубок и правила поведения. Что если о состоялся, как работник, значит он достиг вершин человеческой эволюции. Эта матрица живёт своей жизнью в обществе, и пока никуда не собирается уходить. Сейчас в совокупности с рыночным целеполаганием в образовании (учу не во имя науки, а во имя трудоустройства), подогреваемым идеями индивидуального успеха и эффективности, любой сознательный гражданин понимает, что главное — заморочиться в своей узкой теме и ничего больше не видеть. Лучше всего начинать кодить раньше, чем ходить, а биологию с географией вообще выкинуть нафиг, потому что высокоуровневые решения типа гугла решат все проблемы.
И тут мы переходим к другой проблеме.

Образование
Образование массово воспринимается комментаторами, как курсы повышения квалификации. Если развить идею до предела, то получим, что школьное образование вообще не нужно. Читать и писать можно научится и так. А дальше сиди и пиши код, ведь даже HL++ проекты, как показывает жизнь, можно делать, не будучи профессором. Остальное гугли.

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

Вторая проблема образования, и она более очевидна, состоит в том, что комментаторы в массе своей воспринимают математику как ещё одну область деятельности. Это как минимум значит, что математика преподавалась им в основном как алгебраический счёт и формулы, которые надо зубрить. Не как наука. Преподавать математику, как науку можно и в первом классе. Это всего лишь значит сделать упор на последовательные рассуждения, а не на зубрёжку. Хочу обратить внимание, что ВСЁ точное знание, в том числе и прикладное, основано на строгих формулировках определений и соотношений. Любое рассуждение строится на дереве если-то-иначе. Без этого аппарата даже html написать невозможно. Он встроен во всех нас по причине принадлежности к обществу, которое таким аппаратом оперирует. Математика — тренажёр по овладению этим аппаратом и ключ к эффективной работе с абстракциями любого уровня. Учитывая, что все инженерные профессии, в том числе и программирование, построены на математическом аппарате, странно называть её отдельным видом деятельности. Это показывает простое непонимание того, куда ты попал. Это может быть неважно с точки зрения решения рабочей задачи, но очень важно с точки зрения культуры.

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

Комментарии (192)


  1. AlePil
    14.02.2018 16:00
    +2

    Действительно непонятно.
    Я старше на 10 лет и заканчивал школу (не такую крутую и уже не совсем советскую и не совсем по советским уже программам) в 90-ые годы и не понимаю причины позмущения.
    Мир не катится в ад. И он даже не изменился сильно — такой же разнообразный и красивый. И в нем для решения различных задач, все так же используют разные инстрменты, как ни странно. Да, намного шире начали использоваться программные продукты. Но и они разные. И где-то, кодеру создающему их, действительно хватает элементарной логики и знаний синтаксиса и библиотек, а кому-то нужна и математика и для написания кода нужно решить до сих пор никем не решенное уравнение.
    Лирический коммент? Да, как и пост.


    1. VMesser Автор
      14.02.2018 16:04
      -1

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


      1. AlePil
        14.02.2018 16:24
        +1

        Всякий программист может быть кодером, но не каждый кодер может стать программистом. Фраза древняя и справедливая. Творческое начало программиста никуда не делось, а ремесличество кодера также необходимо как и творчество программера. Потому можно взодхнуть и, осмотреться и… расслабиться, потому как все на месте. И культура, и математика и работяги «от кода» на месте — от понедельника до пятницы — долбят код и не думают о высоких материях. Некогда им))))


        1. Durimar123
          15.02.2018 20:00

          Начну с цитаты:
          «Математику уже затем учить надо, что она ум в порядок приводит»
          М.В. Ломоносов

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

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


          1. AlePil
            16.02.2018 14:59
            +1

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


      1. decomeron
        14.02.2018 17:36

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


        1. boblgum
          15.02.2018 13:52

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


      1. velvetcat
        14.02.2018 22:13
        +1

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

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


        Кстати,


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

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


        1. RdSpclL
          15.02.2018 09:06

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

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


          1. velvetcat
            15.02.2018 20:23

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


            1. GarryC
              17.02.2018 13:43

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


    1. psinetron
      15.02.2018 11:23
      +2

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


  1. cerrenesi
    14.02.2018 16:05
    +1

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


    1. VMesser Автор
      14.02.2018 16:06

      Работодателю не важно. Странно, почему самому человеку это не важно.


      1. KinsleR
        14.02.2018 16:10
        +2

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


        1. VMesser Автор
          14.02.2018 16:36

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


          1. KinsleR
            14.02.2018 16:42

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


          1. RussDragon
            14.02.2018 17:53

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


            1. Neikist
              14.02.2018 18:48

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


            1. MooNDeaR
              14.02.2018 21:26
              +1

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

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


              1. avost
                15.02.2018 02:22

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


                1. Whuthering
                  15.02.2018 10:56
                  +3

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

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

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

                  Помню, как я очень-очень сильно удивился в университете, когда узнал, что концепция, которую я открыл еще в школьные годы, оказывается называется «конечные автоматы» и ей посвящаются отдельные главы в учебниках. А для меня это было само собой разумеещимся делом. Аналогично примерно с реляционной алгеброй, когда много лет писал SQL-запросы, а потом внезапно узнал как это называется и тоже сильно удивился, что кто-то этому еще отдельные спецкурсы посвящает. На базовом уровне там нечего специально «учить» и «постоянно знать», а расширенный уровень нужен только в весьма специфических задачах.
                  Иными словами…
                  Возьмем из вашего списка, к примеру, криптографию. Если вы беретесь разрабатывать новый криптографический алгоритм или улучшать старый, то вам, безусловно, нужна будет сильная математическая подготовка в этой области. А теперь главный вопрос: часто ли перед разработчиками встает такая задача? Когда нужно навернуть шифрования, в случае разработки под какую-то нестандартную среду или с особыми требования просто будет выбран наиболее подходящий алгоритм из уже существующих (критерии выбора вполне известные и формализованные), после чего взять whitepaper с описанием метода и реализовать в коде — причем для реализации по написанному математика нужна на уровне старших классов школы с периодическим заглядыванием в справочник. А в большинстве случаев даже этого не надо будет, т.к. есть проверенные временем и богато-функциональные библиотеки, сделанные сообществом или компаниями: не надо переизобретать велосипед и тратить время на разработку уже разработанного с непонятным качеством на выходе.
                  Сильно подозреваю, что примерно то же самое в остальных областях, а если где-то ситуация отличается — но тут можно просто задать вопрос самому себе, вот есть программист, который давно и успешно разрабатывает, например, высоконагруженные и отказоустойчивые бэкенды для сложных сервисов различных применений. И за свою жизнь ему ни разу не пригодились нейронные сети и квантовые вычисления. Его теперь нельзя называть программистом? :)

                  Короче говоря, подытожив, «матан» программисту нужен при выполнении следущих условий:
                  1. Предметная область разработки связана с математикой
                  2. «Программист» в одном лице совмещает позицию разработчика ПО и позицию аналитика/технолога/научного сотрудника.


                  1. avost
                    16.02.2018 21:03

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

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


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

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


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

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


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

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


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

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


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

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


            1. 16tomatotonns
              15.02.2018 05:59

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


  1. buggiZhuk
    14.02.2018 16:08

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

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

    Очень размытое определение.


    1. VMesser Автор
      14.02.2018 16:15

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


      1. RussDragon
        14.02.2018 17:53

        А при чем здесь математика?


      1. mozomig
        15.02.2018 00:33

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


  1. Voiddancer
    14.02.2018 16:09
    +2

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


    1. ZaDOOMchiviy
      15.02.2018 09:08
      +1

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

      Сложность программ возросла, но при этом программировать стало проще, можно посмотреть на эволюцию языков программирования и инструментов разработки)


  1. fzn7
    14.02.2018 16:10
    +1

    Лучше ответьте кто здесь более культурен. Тот, кто просит подсказать учебник, или тот, кто тыкает пальцем в неведу? «У кого бицуха меньше 45 см, тот не пацан» (с)


    1. VMesser Автор
      14.02.2018 16:20

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


      1. Moxa
        14.02.2018 16:25
        +1

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


        1. Areso
          15.02.2018 13:31

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


          1. VolCh
            15.02.2018 13:58

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


          1. faiwer
            15.02.2018 14:34

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


      1. fzn7
        14.02.2018 16:27
        -1

        Ваш пост это примитивная манипуляция вида «если хочешь быть X, то ты должен сделать Y».
        Вы можете наблюдать ее повсеместно. Например «Если любишь маму, то съешь кашу», «Если ты мужчина, то купи мне шубу», «Если ты патриот, убей врага». Добавим в копилку ваше «Если ты хочешь называть себя программистом, учи матан»?


        1. VMesser Автор
          14.02.2018 16:38

          Фейл. Я согласен со всеми приведёнными «манипулятивными» утверждениями:)


          1. fzn7
            14.02.2018 16:45

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


            1. VMesser Автор
              14.02.2018 16:47

              А как обидит программиста образование?


              1. fzn7
                14.02.2018 16:55

                Если вы вменяемый инженер, то вам не составит труда придумать подходящий случай ;)


              1. DEmon_CDXLIV
                15.02.2018 18:01

                отберет 5 лет жизни.


  1. cl0ne
    14.02.2018 16:17
    +1

    Вы знали, что русский язык описан настолько строго, что почти любую ситуацию в нём можно решить алгоритмически?

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

    звучит как несвязный набор слов. можно для простолюдина объяснить?


    1. VMesser Автор
      14.02.2018 16:30

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

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


      1. staticlab
        14.02.2018 16:35
        +2

        Это односвязный список, а не динамический массив.


        1. VMesser Автор
          14.02.2018 16:40

          У нас разные источники определений. Готов согласиться.


          1. NoRegrets
            14.02.2018 19:18

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


      1. San_tit
        14.02.2018 17:28

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


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


        1. ilionsd
          15.02.2018 09:09

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


      1. kagary06
        15.02.2018 09:09

        На правах помощника КО:

        Заголовок спойлера
        Простейшее использование поиска поможет дать четкие определения для данных терминов.

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

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

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

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

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

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


      1. Whuthering
        15.02.2018 11:08
        +2

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

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

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


        1. Szer
          15.02.2018 13:17
          +1

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

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

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


          1. F0iL
            15.02.2018 14:16
            +1

            Это будет совершенно верно до тех пор, пока еще другое знание не подскажет вам про то, что во многих языках программирования (например, C и C++) оптимизации хвостовой рекурсии не гарантируются стандартом и являются целиком implementation-specific, плюс добавляются неочевидности с RAII, и можно опять же либо отстрелить себе ногу по неосторожности, либо придется обмазываться определенными хаками для достижения задуманного.


            1. Szer
              15.02.2018 15:00

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

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


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


      1. KVL01
        15.02.2018 12:35
        +1

        Эм… выделить кусок памяти, равный произведению размера элемента на длину массива. А дальше арифметика указателей.
        А как рекурсией, просветите?


    1. Dmitry_10
      15.02.2018 00:34

      Всегда удивляло, что люди не могут выучить русский, и лезут в программирование… Ведь русский намного проще.


  1. multiprogramm
    14.02.2018 16:20
    +1

    Вы знали, что русский язык описан настолько строго, что почти любую ситуацию в нём можно решить алгоритмически?

    Это почти ложь.


    1. VMesser Автор
      14.02.2018 16:32

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


      1. staticlab
        14.02.2018 16:38

        Вы под алгоритмом понимаете именно формальный алгоритм, который можно реализовать на компьютере?


        1. VMesser Автор
          14.02.2018 16:42

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


  1. joker2k1
    14.02.2018 16:25

    Просто программирование расширилось и разделилось. На творческое, и ремесленное. Как и все в жизни. Есть разовые задачи, есть рутина. Странно объяснять это здоровому 33-летнему лбу


    1. VMesser Автор
      14.02.2018 16:34

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


      1. bopoh13
        14.02.2018 17:28

        Что вы так за Культуру зацепились :) Хочу напомнить, что развитие предполагает переход от простого к сложному, но не обязательно качественному. Почитайте Пелевина «Empire V» и «Бэтман Аполло» пока у вас всё хорошо. Желание искать адекватных современной К у вас отпадёт )


      1. joker2k1
        14.02.2018 18:54
        +1

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


  1. dom1n1k
    14.02.2018 16:41

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


    1. VMesser Автор
      14.02.2018 16:44

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


    1. OnYourLips
      15.02.2018 14:55
      +1

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

      Да, это не так пафосно, меня «тру программисты» будут называть кодером. Однако моим утешением будет компенсация за мой труд, о которой математики могут только мечтать.


  1. YaRobot
    14.02.2018 16:43

    Я программирую в вебе 16 лет. До этого перловку осваивал.
    Сейчас работаю над крупными HL++ проектами, с террабайтами данных, репликами и т.д.
    Огромные алгоритмы, расчеты и т.п.

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

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


    1. VMesser Автор
      14.02.2018 16:45

      Я согласен, что с 9 классами алгебры программист может быть хорошим и очень хорошим.


      1. Symphel
        15.02.2018 10:33
        +1

        Тогда о чем статья?


    1. pyur
      15.02.2018 13:21

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


      1. YaRobot
        15.02.2018 13:22

        Gudok.ru для печати верстал с 2005 по 2006г.
        :\


    1. POPSuL
      16.02.2018 09:56

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


  1. VolCh
    14.02.2018 17:09

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


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


    1. Crafter2012
      15.02.2018 11:12

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


      1. VolCh
        15.02.2018 12:21

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


        1. Whuthering
          15.02.2018 13:05

          Техник-программист: то же плюс тестирование (юнит прежде всего), рефакторинг, оптимизации

          А что, бывают места, где всего этого нет? Ну, не рассматривая junior-позиции.
          Если да, то проблема не в самом «программисте», а в организации процесса разработки.
          Инженер-программист: то же плюс интеграция модулей и компонент

          Аналогично.
          а также приемочное тестирование

          то же плюс разработка требований

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

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


          1. VolCh
            15.02.2018 14:20

            А что, бывают места, где всего этого нет?

            Бывает. Более того есть основания полагать, что много где бывает, особенно в 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 это громкое название ведущего инженера, избавленного от обязанностей обычного инженера-программиста.


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


  1. DEmon_CDXLIV
    14.02.2018 17:37

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

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


  1. A1ien
    14.02.2018 17:37

    Александр Привалов — вот ориентир к которому надо стремиться! Программист и немножко «маг»… Без «магии» ни куда.
    А вообще —

    Математику уже затем учить надо, что она ум в порядок приводит


  1. EaE
    14.02.2018 17:38
    +1

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

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


    1. vdshat
      16.02.2018 00:06

      Соглашусь на все 100%. Умение писать сочинения — это сродни написанию алгоритма. Поэтому на собеседовании смотрю как человек строит свою речь и мысли организовывает и прошу объяснять словами, а не на листочке, конечно, без фанатизма.


  1. Alter2
    14.02.2018 17:41

    Кто такой программист?

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


  1. exehoo
    14.02.2018 17:42

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


  1. svv1981
    14.02.2018 17:42

    Не хочется обижать автора данной статьи, но попахивает жестким консерватизмом и немножко тяжелым детством. Обычно по медицинским показателям такое настроение и мысли возникают ближе к пенсии и лавочке во дворе.
    Если немножко положительней смотреть на людей которые пытаются что то делать в данной области, но из за нехватки базовых (или фундаментальных) знаний матана и т.д. не совсем преуспевают, станет легче на душе. Представ те что Вас окружают такие же умные физматерые (программисты) специалисты как и вы. Вы тут же начнете писать статьи о том куда делся полет фантазии, где неординарные решения, где ошибки решение которых приводит к серьезным открытиям и т.д.
    РS
    Активный отдых, плавание, алкоголь, женщины, азартные игры всегда помогут разнообразить суровые програмисткие будни.


    1. VMesser Автор
      14.02.2018 17:44

      PS в данном случае влияет исключительно на то, с каким именно настроением будет сказано «б%@ть, это ж п&*^$ц какой-то!»
      Но сказано будет))


  1. decomeron
    14.02.2018 17:42

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


  1. Mikluho
    14.02.2018 17:44
    +1

    Прежде чем спрашивать «кто такой программист» не плохо бы уточнить «что такое программист». Т.е. дать определение профессии, под которую ищете описание человека. Ибо с терминологией у нас тут путаница изрядная.
    По миру ходит много классификаций. От банального программист-кодер до весьма развесистых сложноустроенных определений. Мне так и вовсе думается, что тут можно употребить двумерную матрицу, где по одной оси вектор кодер-конструктор, а по другой специализация. Тогда ткнув пальцем в квадрант можно указать минимальные требования к специалисту, в том числе и по знаниям математики.
    PS
    школу заканчивал в начале 90-х, математику помню где-то на 2-3 курс вуза… Более сложные вещи вымылись из памяти из-за неупотребимости.


  1. novoxudonoser
    14.02.2018 17:51

    О времена, о нравы. Человек о котором не складывается впечатления от том, что он может кого-нибудь качественно судить, берет и судит прикладную область, людей, культуру. Хабр скис(


  1. Modis
    14.02.2018 17:59

    Ну я вот работаю программистом в узкой специальности (САПР), но у меня не такой большой мозг, чтобы помнить все! И математику в том числе! Поэтому, когда стоит математическая задача, то я открываю гугл и ищу ответ. Да, я завидую тем людям, которые в этом всем разбираются и дают ответы. Но если я не на столько супер-умный (или память не очень), но мне нравится моя работа, то что тогда — я должен её бросить? Свою любимую работу?


  1. Neonailol
    14.02.2018 18:11
    +1

    Для россии есть профстандарт, там нормально описано кто такой програмист и чем он занимается Ссылка. Зачем знать матан и уметь решать уровнения, какое это имеет отношение к культуре? Это как те собеседователи, что просят написать на доске алгоритм обхода бинарного дерева, а на практике у них там CMS или CRM на костылях, и самая сложная алгоритмическая задача, с которой они сталкиваются на проекте — использовать LinkedList или ArrayList.


  1. Krotghar
    14.02.2018 18:21

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


  1. oam2oam
    14.02.2018 18:21

    Мне кажется, что призываемая дискуссия в комментах вряд ли состоится. И вовсе не потому, что тема — огонь… Просто кажется, что произошёл сдвиг понятий — для автора программист это специализация инженера, но может, сейчас программист — это специализация многих других специальностей (работающий с информацией формальными методами?) — менеджера, химика, финансиста и т.д…
    Если же рассматривать программиста гораздо более узко — как специалиста по формальным алгоритмам, то, боюсь, таких сейчас значительное меньшинство (даже сложно сказать, сколько — 1%? 0.1%?). И вот для такого узкого понятия по определению странно не знать математику.
    А для широкого определения — можно вообще… не уметь программировать! Мало что ли примеров, когда менеджер проекта не знает ни одного языка (ну тут сами придумайте..).


    1. VolCh
      15.02.2018 12:32

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


  1. Klein12
    14.02.2018 18:22

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


  1. dmitry-suffi
    14.02.2018 18:22

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

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


    1. VolCh
      15.02.2018 12:43

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


  1. nivorbud
    14.02.2018 18:23
    -1

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

    Но… есть одно но. Давайте поставим себя на место работодателя. Сколько стоит такой программист? Легко ли такого найти на рынке? И всегда ли требуется стрелять из пушки по воробьям? Даже если бы мне таковые и потребовались, очевидно, на одного такого я бы нанял десяток программистов попроще, т.е. простых кодеров. В общем на всякий товар есть свой купец. И плюс к тому современное обилие готовых модулей и библиотек позволяет не вникать глубоко в предмет и часто для прикладных целей достаточно школьного образования.


  1. ronin999
    14.02.2018 18:23
    -1

    Программист это творец прежде всего. Это полет мысли, творческий ум.


  1. VMesser Автор
    14.02.2018 18:25

    Чёт конформизм не мой конёк)


  1. BogdanF
    14.02.2018 18:41

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

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


  1. kimisa
    14.02.2018 18:49
    -1

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


    1. michael_vostrikov
      14.02.2018 21:04

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


      1. Neikist
        14.02.2018 21:16

        Мейнстримное программирование еще — это грамотно выстроенные абстракции.


        1. VolCh
          15.02.2018 12:47
          +1

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


      1. VMesser Автор
        15.02.2018 14:08

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


        1. michael_vostrikov
          15.02.2018 14:43

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


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


          1. VMesser Автор
            15.02.2018 15:03
            -2

            При прочих равных мат подготовка позволит быстрее её решить. Особенно при первой встрече с ней. Ваши вопросы показывают, что вам плохо преподавали математику, и вы просто не понимаете её силы, вот и всё. Это не говорит плохо о вас, просто в жизни так сложилось. Я изучал и математику, и программирование, и понимаю, каково их место в жизни, и как они взаимодействуют.


            1. Whuthering
              15.02.2018 15:09
              +1

              При прочих равных мат подготовка позволит быстрее её решить.

              Обоснуйте с конкретным примером, пожалуйста.


          1. VMesser Автор
            15.02.2018 15:04
            -2

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


            1. Whuthering
              15.02.2018 15:13
              +2

              Запишитесь на курс по математике, и поймёте откуда у чего ноги растут. Вот и всё доказательство.

              То есть доказательство предоставлено не будет, так?
              Они называются баги.

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

              P.S. Чисто функциональное программирование (имеющее много общего с математикой) со своими особенностями пока что сюда приплетать не будем по причине отсутствия массовой его распространенности в области промышленной разработки ПО.


              1. VMesser Автор
                15.02.2018 16:29
                -2

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

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

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

                Функциональное программирование имеет настолько много общего с математикой, что является её разделом)
                «Функциона?льное программи?рование — раздел дискретной математики и парадигма программирования, в которой процесс вычисления трактуется как вычисление значений функций в математическом понимании последних (в отличие от функций как подпрограмм в процедурном программировании).»


                1. Whuthering
                  15.02.2018 18:08

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

                  Так объясните же наконец, как мат. подготовка избавит программиста от багов в используемых им инструментах? Мы от вас этого объяснения тут уже две ветви комментов добиться пытаемся.

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

                  Если необходимо более весомое доказательство, то обратимся к учебному минимуму — провести эксперимент 10 раз. То есть Вам надо будет пройти курс математики 10 раз.

                  Прошу прощения за резкость, но что за бред вы вообще пишите?

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

                  Это можно объяснить в целом высоким интеллектом контингента, склонностями к логике и аналитическому мышлению. Математика тут особо непричем.


                  1. vedenin1980
                    15.02.2018 19:03

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


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

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

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

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

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

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

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

                    P.S. И кстати переход на личности (иди изучай математику) — это признак неумения вести конструктивный спор.
                    P.P.S. На всякий случай, у меня высшее математическое образования, так что математику учить не посылайте. :)


                    1. Whuthering
                      15.02.2018 19:43

                      Вы замечательно ответили, только чуть-чуть промахнулись с веткой комментариев :)


            1. michael_vostrikov
              15.02.2018 15:24
              +2

              То есть задачу решить вы не можете. Даже причину предположить, или хотя бы описать, как математика в этом поможет. ЧТД.

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

              Математика это просто способ формального описания. Программирование тоже. Оба они опираются на логику. Просто программирование ближе к реальности.


          1. michael_vostrikov
            15.02.2018 20:14

            Раз привел задачу, надо и ответ написать.

            Скрытый текст
            Оказалось, что если постоянно читать, то все работает нормально. Сошлись на том, что приходящие данные попадают в буфер, а в драйверах Windows, которые отвечают за проброс COM-порта в DOS-программу, наверно есть какой-то косяк, из-за которого оно накапливается, буфер постоянно увеличивается и забирает память. Добавили в драйвер вместо разового чтения цикл пока есть данные, и так оно и работало.


    1. kimisa
      15.02.2018 10:14
      -2

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


    1. VolCh
      15.02.2018 12:46

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


  1. faiwer
    14.02.2018 19:12

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


    Первый:


    • императивное программирование
    • декларативное и фукнциональное, монады и пр.
    • конечные автоматы всех видов
    • структуры данных (стеки, 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. IBAH_II
    14.02.2018 19:24
    +1

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


  1. leossnet
    14.02.2018 19:39
    +1

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

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

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

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

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


  1. vvagr
    14.02.2018 19:41

    Лучше бы вас грамотно писать научили, а не тому, что «русский язык описан настолько строго, что почти любую ситуацию в нём можно решить алгоритмически» :-(


  1. vedenin1980
    14.02.2018 20:08
    +1

    У меня вертится в голове старпёрский риторический вопрос: «А как же культура?»

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

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

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

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


  1. Whuthering
    14.02.2018 20:45
    +1

    Все эти разговоры про «нужна ли программисту математика» напоминают мне другую тему (которую тоже затронули тут в комментариях) про разделение на «программистов» и «кодеров», а также на «программистов» и «инженеров-программистов». К математике мы вернемся чуть позже, а пока порассуждаем о втором вопросе.

    Заглянем в историю. Как и для чего появились ЭВМ и первые программы? Для ускорения и повышения точности математических расчетов и алгоритмов. Криптографы хотели возможность иметь брутфорсить тысячи комбинаций для расшифровки секретных сообщений, военные хотели возможность быстро и точно рассчитывать траектории полета артиллерийских снарядов и ракет, строители хотели возможность расчета прочности конструкций при разных исходных данных, и т.д.
    В свою очередь, процесс проходил примерно так: сначала исследуется предметная область, продумывается алгоритм, выводятся формулы расчета, и потом все это дело переводится в программный (машинный) код.
    Люди, которые делали всё, кроме последнего пункта, были «инженерами», люди же, которые переводили алгоритм, изложенный в виде математических формул, блок-схем или естественного языка, были «кодерами» (или просто «программистами»).

    Годы шли. Техника развивалась, появились языки более высокого уровня, появились ОС. «Кодирование» стало проще, появились люди, совмещавшие в себе обе позиции, и они были «инженерами-программистами». Пока что всё тоже ок.

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

    И тут случилась еще одна перемена, уже управленческо-социальная. Как в 90-х годах все поняли, что когда программисты занимаются разработкой UI/UX часто получается нечто страшное, и в итоге появилась такая отдельная профессия как UI/UX-дизайнер, то чуть позже все поняли, что требовать совмещать в одном лице как профессионала в области разработки ПО, так и профессионала в какой-то предметной области — это сложно и дорого. Как пример, посмотрите на 1Сников (заранее извините, никого не хочу обидеть) — по идее это должен быть программист-бухгалтер, а по факту получается недобухгалтер и недопрограммист. Проблемы это приносило как работодателям (например, непросто найти специалиста-эксперта в области торговли на бирже, и непросто найти профессионала в области разработки ПО, а вероятность найти человека, совмещающего в себе и того, и другого, соответственно, еще гораздо ниже), проблемы это приносило так и самим работникам (в твоем городе может быть десять фирм, где нужны java-синьоры, но у каждой разная специализация по предметной области), и каким-то светлым головам пришла гениальная мысль: анализом предметной области, формулированием ТЗ, и прочим должен заниматься один человек (бизнес-аналитик, менеджер, технолог), а разработкой ПО для получения результата — другой человек (программист). В плюсе оказались все. И это хорошо, и по этой модели сейчас работает все большее и большее количество компаний. Достаточно посмотреть на резюме на хедхантеровских сайтах — ищут именно «Senior-разработчиков микросервисного Java-бэкенда» или «ReactJS Middle developer», а «знание специфики банковской сферы» или «опыт в отрасли XXX» в хотелках указывается в лучшем случае как «будет плюсом» :)
    Правда, концепция «один пишет алгоритмы, а другой их кодит» немного поменялась — с одной стороны стало легче, потому как в 90% задач в наше время важнее не изобретение нового алгоритма или структуры хранения данных, а грамотный выбор и оптимальное использование существующих концепций, либо их модификация под конкретные случаи. Но и без «создания алгоритмов» работать нельзя в принципе, т.к. уже никто не формулирует задания вида «аллоцируй массив, сделай цикл для прохода поэлементно, и т.д.» (такое только в школе на уроках информатики встречается), сейчас разработчик оперируя информацией о том «что есть и что должно получится» разрабатывает последовательность действий. По сути дела, даже элементарный SQL-запрос — это уже алгоритм :)
    Именно поэтому можно сказать, что разделение на «кодеров» и «программистов» устарело лет 20 так назад, сейчас эти понятия размылись и разделение не имеет смысла.

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


    1. vedenin1980
      14.02.2018 20:57

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

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


    1. VolCh
      15.02.2018 13:55

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

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


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


  1. Whuthering
    14.02.2018 21:10
    +1

    Автор, а расскажите все-таки, что вы вкладываете в понятие «Культура»? Чем культура программиста отличается от культуры инженера или культуры учёного?

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

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

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

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


    1. VMesser Автор
      15.02.2018 09:14
      -1

      Вы пытаетесь отменить понятие кульура. Поэтому мне сначала надо Вам доказать её смысл и значение вообще, а потом уже перейти к роли культуры в производственной деятельности. Стоит начинать?


      1. Whuthering
        15.02.2018 10:38
        +2

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


  1. ivorobioff
    14.02.2018 22:59

    Зачем художнику знать геометрию?


    1. VMesser Автор
      15.02.2018 00:46

      Спросите у Леонардо. В живописи он воспроизводил свои естественнонаучные открытия. Инфа от первого лица.


      1. ivorobioff
        15.02.2018 11:15

        Ну вот Леонардо это как раз тот «программист» который силен и в математике, но есть же кучу других хороших художников которые не так сильны в геометрии.


        1. Neikist
          15.02.2018 12:33

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


          1. ivorobioff
            15.02.2018 12:40
            +1

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


            1. VMesser Автор
              15.02.2018 14:12
              -1

              На этот счёт я могу ответить только в своём духе. Да, художник может написать и на шару. Композитор тоже может. Но делает ли им честь открытое пренебрежение академическим знанием? Если они выйдут и скажут — вся эта ваша анатомия и контрапункт — фигня, мы и так можем. Лично я бы подумал: «Гений ты, барин. Но дурак.»


              1. faiwer
                15.02.2018 14:40

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


  1. Alek_roebuck
    15.02.2018 00:47

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

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

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


  1. 2bione
    15.02.2018 00:47

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

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


  1. teemour
    15.02.2018 09:09

    Что за культур-мультур, вы, добрый человек, имеете в виду?


    1. VMesser Автор
      15.02.2018 09:24
      -1

      Ну эт когда не требуется чего-то, но чувствуешь, что надо полюбас)


      1. Whuthering
        15.02.2018 11:02

        Ну эт когда не требуется чего-то, но чувствуешь, что надо полюбас)

        Если у «чувства» есть логическое обоснование — это ок,
        если же нет — это когнитивное искажение и крайне неэффективное расходование времени и сил.


  1. Dadanetnet
    15.02.2018 09:15
    -1

    Всё, что описано — в корне верно. Но автор путает понятия культуры с другими явлениями.
    Хотя, может и нет. Я постараюсь подкорректировать его пост своим пониманием окружающей действтиельности. Суть в том, что современный мир потерял ту опору, когда была борьба систем, какой-то драйв и жесткая конкуренция. Мировая война, а точнее целый цикл — позволил пробиться в социальные верхи людям, которые понимали в своем предмете выши среднего. Сверху был и послан сигнал об соответствующем отборе на ту или иную деятельность. Пока люди были хорошие — сигнал был сильный и правильный. Потом, когда холодная война завершилась, начался «капитализм», начались кровные связи, ОПГ — все это нам известно. Постепенно людей порядочных и профессиональных — сместили обычные «колбасники», для которых обычные инстинктивные удовольствия и желания — основа. Далее — есть нефть, есть ресурсы, можно просто пилить то, что было создано до них, можно вывозить через офшоры триллионы — все схвачено. Люди, которые остались и не попали в тренд — превратились в быдло, с плохим образованием, без картины мира и без той самой «культуры». К слову я — без образования вообще, я учился в классе для отстающих, жизнь уготовила мне путь к социальному дну, но, как вы можете видить — понимаю мир достаточно глубоко. Внутренний импульс нельзя загасить, все равно он будет стараться пробиться вверх. Так что умные люди — это артефакт, это не должно быть массово — природа нас создавала, чтобы мы размножались, а не учили «матан». В советские времена, с жесткой регламентированной программой обучения(лучшей в мире) — обезьянку жестко дрессировали. Просто то, что было скрыто от глаз под прессингом системы — вылезло наружу. Дикость, социальное неравенство, вся та грязь, что мы видим вокруг. У меня всё.


    1. VMesser Автор
      15.02.2018 13:50

      Могу только выразить высочайшую степень уважения.


    1. vdshat
      16.02.2018 00:20

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


      1. Whuthering
        16.02.2018 13:47

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


        1. vdshat
          16.02.2018 23:44

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


  1. braingeek
    15.02.2018 09:16

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

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

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


  1. Dararan
    15.02.2018 09:18
    +2

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


  1. VulvarisMagistralis
    15.02.2018 09:19

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

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

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

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

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


    1. michael_vostrikov
      15.02.2018 13:02
      +1

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


      1. VMesser Автор
        15.02.2018 14:06
        -1

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


        1. michael_vostrikov
          15.02.2018 14:29
          +1

          Если Вы правильно изучали математику, программирование для вас — вопрос изучения синтаксисов и библиотек

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


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


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


          1. VMesser Автор
            15.02.2018 14:40
            -1

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

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


            1. VolCh
              15.02.2018 14:54

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


              1. VMesser Автор
                15.02.2018 17:18
                -1

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


                1. VolCh
                  15.02.2018 18:54

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


                1. VulvarisMagistralis
                  15.02.2018 20:22
                  +1

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


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


                  1. VolCh
                    16.02.2018 12:32

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


                    1. VulvarisMagistralis
                      16.02.2018 13:01

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


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

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

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


                      1. VolCh
                        16.02.2018 13:19

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


    1. VolCh
      15.02.2018 14:26

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

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


  1. pavlushk0
    15.02.2018 09:20

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


    1. Whuthering
      15.02.2018 11:06
      +3

      Жизнь у человека одна, и время ограничено. А в профессиональной сфере — тем более. И уж тем более жизнь не ограничивается профессиональной сферой.
      Вместо того, чтобы «учить» и «владеть» тем, что совершенно не требуется, гораздо лучше заниматься изучением того, что уже требуется или скоро может потребоваться. Благо, таких вещей всегда достаточно существует. А всё подряд учить по принципу «потому что могу», «потому что так надо» и «потому что так Лихачёв сказал» — даже нескольких жизней не хватит.


      1. vdshat
        16.02.2018 00:27

        «Знай понемногу во многом и многое в малом»


    1. VolCh
      15.02.2018 14:28
      +1

      он появляется у людей от страха неудачи в попытке освоения математики

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


  1. kornel
    15.02.2018 09:22
    +2

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

    Вот и считайте, «нужна математика программисту или нет».


    1. VMesser Автор
      15.02.2018 09:23

      Огонь-огонь!))


    1. VulvarisMagistralis
      15.02.2018 10:36
      +1

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


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

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


      1. kornel
        15.02.2018 10:38
        +1

        Не только. И в ту и в другую сторону было. Там в общем копейки, но…


      1. VolCh
        15.02.2018 14:30

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


    1. Whuthering
      15.02.2018 11:22

      Это пример не «нужности математики», а из рук вон плохо построенного рабочего процесса и тупоголового менеджмента.
      Если у программиста есть какой-то пробел в математических знаниях, то проконсультировать его, а также протестировать его работу (при отсутствии QA-отдела, что уже днище, тем более в банке) может и должен тот, кто формулировал и выдавал ему техзадание. Всё, проблема решена.

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

      Каждый должен заниматься своим делом, короче говоря.


      1. VulvarisMagistralis
        15.02.2018 12:33

        Это пример не «нужности математики», а из рук вон плохо построенного рабочего процесса и тупоголового менеджмента.


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

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

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

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


    1. hatari90
      15.02.2018 14:38
      +1

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

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

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


    1. velvetcat
      15.02.2018 20:25
      +1

      Хочу заметить, что молодые «программисты» не знают даже основы школьного курса математики!

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


      1. kornel
        16.02.2018 09:17

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


        1. velvetcat
          16.02.2018 11:42

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


  1. teecat
    15.02.2018 10:29

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

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


  1. marshinov
    15.02.2018 10:37

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


  1. Beshere
    15.02.2018 12:31
    +1

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

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

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

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


  1. Eugene1945
    15.02.2018 12:32

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


  1. dom1n1k
    15.02.2018 13:24
    +1

    Нужна ли веб-программисту математика?
    Ну черт её знает… — toster.ru/q/505921

    Спойлер
    Объясните, как это считается?
    Если 1vw = 1% окна
    То 1920vw = 100%?


    1. VMesser Автор
      15.02.2018 13:48

      Нормальный веб-программист скачает высокоурвненые фреймворки, которые посчитают всё сами. Не вносите смуту)


  1. VMesser Автор
    15.02.2018 13:49
    -1

    Внимание, сенсация!
    Основная статья подверглась апдейту — всем читать!


    1. Whuthering
      15.02.2018 14:25

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


    1. VolCh
      15.02.2018 14:37

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


  1. third112
    15.02.2018 15:11

    См. опрос:

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


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


    1. Whuthering
      15.02.2018 16:41

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

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


      1. third112
        15.02.2018 16:46

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


  1. third112
    15.02.2018 16:46

    Не та ветка.


  1. velvetcat
    15.02.2018 20:37

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


  1. lolikandr
    15.02.2018 22:44

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