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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Поделиться публикацией
AdBlock похитил этот баннер, но баннеры не зубы — отрастут

Подробнее
Реклама
Комментарии 211
  • +15
    Действительно непонятно.
    Я старше на 10 лет и заканчивал школу (не такую крутую и уже не совсем советскую и не совсем по советским уже программам) в 90-ые годы и не понимаю причины позмущения.
    Мир не катится в ад. И он даже не изменился сильно — такой же разнообразный и красивый. И в нем для решения различных задач, все так же используют разные инстрменты, как ни странно. Да, намного шире начали использоваться программные продукты. Но и они разные. И где-то, кодеру создающему их, действительно хватает элементарной логики и знаний синтаксиса и библиотек, а кому-то нужна и математика и для написания кода нужно решить до сих пор никем не решенное уравнение.
    Лирический коммент? Да, как и пост.
    • 0
      Возмущение, как Вы заметили, лирическое, не воинственное. Я всё о культуре. О том, что есть штуки необязательные и не практичные. Как в повседневной жизни, вроде доброжелательного общения и внимательного отношения к женщинам, так и в профессиональной — если ты таксист, езжай ровнее, чтобы никого по салону не бросало. Вот в этой культурной пустыни я и вопию.
      • 0
        Всякий программист может быть кодером, но не каждый кодер может стать программистом. Фраза древняя и справедливая. Творческое начало программиста никуда не делось, а ремесличество кодера также необходимо как и творчество программера. Потому можно взодхнуть и, осмотреться и… расслабиться, потому как все на месте. И культура, и математика и работяги «от кода» на месте — от понедельника до пятницы — долбят код и не думают о высоких материях. Некогда им))))
        • 0
          Начну с цитаты:
          «Математику уже затем учить надо, что она ум в порядок приводит»
          М.В. Ломоносов

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

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

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

          • 0

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

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

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


            Кстати,


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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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


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

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


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

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


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

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


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

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


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

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

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

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

                                    А мужики-то не знали! (с)
                                    И мы регулярно наблюдаем эпические провалы продукции такой школоты на ровном месте со взломами и кражами всего и вся.

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

                                    Ашот либо каменщик, либо бетонщик. Его задача — положить камни или залить бетон, хорошо, надежно. И он это делает. На строительстве Лахта-центра работают точно такие же Ашоты. А вот те, кто проектировал башню, делал расчеты, рисовал дизайн-проект, исследовал грунты под ней, проводил дефетоскопию сооружений, и т.д. — это архитекторы, проектировщики, дизайнеры, дефектоскопы, инженеры.
                                    Это все совершенно разные профессии и позиции, поэтому «программиста-ашота» упоминать тут вообще смысла нет.
                                    • 0
                                      Да, только уровень этого использования ниже плинтуса.

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

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

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

                                      А часто ли перед разработчиком ставится задача взять и написать с нуля свою СУБД? :))) Или программист, ни разу в жизни не написавший свою СУБД — не программист?)
                                      И мы регулярно наблюдаем эпические провалы продукции такой школоты на ровном месте со взломами и кражами всего и вся

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

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

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

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

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

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

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

                          • +8

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

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

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


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

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

                                • +1
                                  Лучше ответьте кто здесь более культурен. Тот, кто просит подсказать учебник, или тот, кто тыкает пальцем в неведу? «У кого бицуха меньше 45 см, тот не пацан» (с)
                                  • 0
                                    Я очень чётко указал, что не имею никакого высокомерия по отношению к тому, кто не знает матана и принимаю всех достойных людей, занимающихся профессионально своим делом на благо семьи и общества.
                                    Я сам много чего не знаю.
                                    Мой вопрос в том, почему многие сомневаются в необходимости этих знаний, пока они не понадобятся для решения конкретной задачи.
                                    Упомянутый Java-разработчик, кстати, пример того, что человек понимает эту необходимость. Потому что на кой ему школьная алгебра, если он уже хорошо работает. А решение каких-то конкретных задач на этом уровне он может получить из ютуба по-быстрому.
                                    • +7
                                      многие сомневаются в необходимости математики, т.к. не видят ей практическое применение, я профессионально занимаюсь разработкой софта уже лет десять и с уверенностью могу сказать, что 95 процентам программистов не нужна математика сложнее 5го класса
                                      • 0
                                        Но на собеседованиях у вас будут трудности без бинарных деревьев, рекурсий, рядов, теории графов, лимитов и прочего, не так ли?
                                        • 0

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

                                          • 0

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

                                        • +7
                                          Ваш пост это примитивная манипуляция вида «если хочешь быть X, то ты должен сделать Y».
                                          Вы можете наблюдать ее повсеместно. Например «Если любишь маму, то съешь кашу», «Если ты мужчина, то купи мне шубу», «Если ты патриот, убей врага». Добавим в копилку ваше «Если ты хочешь называть себя программистом, учи матан»?
                                          • –5
                                            Фейл. Я согласен со всеми приведёнными «манипулятивными» утверждениями:)
                                            • +11
                                              В таком случае не обижайтесь, когда каша будет обжигать язык, подруга отберет квартиру, а врагом окажется ваш родной отец
                                              • –2
                                                А как обидит программиста образование?
                                                • +7
                                                  Если вы вменяемый инженер, то вам не составит труда придумать подходящий случай ;)
                                                  • +3
                                                    отберет 5 лет жизни.
                                                    • 0
                                                      Типа, не обижайся когда заказчик попросить от тебя просто кнопочку на сайт, а не спроектировать звезду смерти.
                                          • +4
                                            Вы знали, что русский язык описан настолько строго, что почти любую ситуацию в нём можно решить алгоритмически?

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

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

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

                                              • +14

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

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

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


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

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

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

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

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

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

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

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

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

                                                      Кстати, вот вам явный пример, когда знания устройства ОС и работы компиляторов оказываются гораздо ценнее абстрактного «матана» в реальной жизни :)
                                                      • +1
                                                        Как уже сказали, рекурсия тут не нужна, и даже опасна — на больших объемах можно стек пробить с очень печальными последствиями.

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

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

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

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


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

                                                      • +1
                                                        Эм… выделить кусок памяти, равный произведению размера элемента на длину массива. А дальше арифметика указателей.
                                                        А как рекурсией, просветите?
                                                        • 0
                                                          Я к тому, что так называемые гуманитарные науки обычно представлют как некое обтекаемоме желе.

                                                          Гуманитарные науки традиционно составляют большую часть т.н. наук переднего края, которые и есть «обтекаемое желе».
                                                        • НЛО прилетело и опубликовало эту надпись здесь
                                                        • +8
                                                          Вы знали, что русский язык описан настолько строго, что почти любую ситуацию в нём можно решить алгоритмически?

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

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

                                                              • –2
                                                                Да, именно такой.
                                                                Те самые исключения, которые «почти» — это участие смыслов, определяемых контекстом, и тут уже яндекс только знает, что с этим делать, и то «почти».
                                                                • +1
                                                                  Довольно необычно видеть подобный ответ от автора подобной статьи.
                                                          • +5
                                                            Просто программирование расширилось и разделилось. На творческое, и ремесленное. Как и все в жизни. Есть разовые задачи, есть рутина. Странно объяснять это здоровому 33-летнему лбу
                                                            • –2
                                                              33-летний лоб знает слово культура, которое он повторил здесь уже много раз, и которое сообществом последовательно фильтруется. Возможно прочие разновозрастные лбы недостаточно знакомы с этим понятием, чтобы содержательно использовать его в беседе, и вообще понимать ту роль, которую оно играет в моём повествовании.
                                                              • +2
                                                                Что вы так за Культуру зацепились :) Хочу напомнить, что развитие предполагает переход от простого к сложному, но не обязательно качественному. Почитайте Пелевина «Empire V» и «Бэтман Аполло» пока у вас всё хорошо. Желание искать адекватных современной К у вас отпадёт )
                                                                • +2
                                                                  Простите, не хотел вас задеть, всего лишь немного пошутить )
                                                                  Но я поддерижваю тон комментариев, программирование гораздо шире вашего и моего представления о нем, и то что важно для вас (некая культура), совершенно не важно другим. Программирование уже давно выросло в нечто необъятное. Наверное даже мы уже не представляем каким оно может быть.
                                                                  • +1
                                                                    Программирование уже давно выросло в нечто необъятное. Наверное даже мы уже не представляем каким оно может быть.

                                                                    Не необъятнее иных областей деятельности.
                                                              • +3
                                                                Для меня программист — это сокращенная форма от инженер-программист. Если ты по чесноку можешь назвать себя инженером — ты программист, иначе — кодер.
                                                                Немного утрированная аналогия: как маркшейдер и забойщик.
                                                                • –3
                                                                  Спасибо за ответ.
                                                                  Все обратите внимание на этот коммент. Автор использует формулировку «по чесноку можешь назвать себя инженером». Т.е. признаться себе честно, а не апеллировать к подобиям определений, что есть проявление культуры.
                                                                  • +1
                                                                    Поэтому я называю себя не программистом, а разработчиком ПО.
                                                                    Я не математик, а ремесленник, который может сделать хороший поддерживаемый продукт по требованиям бизнеса с пологой кривой стоимости поддержки.

                                                                    Да, это не так пафосно, меня «тру программисты» будут называть кодером. Однако моим утешением будет компенсация за мой труд, о которой математики могут только мечтать.
                                                                  • +9
                                                                    Я программирую в вебе 16 лет. До этого перловку осваивал.
                                                                    Сейчас работаю над крупными HL++ проектами, с террабайтами данных, репликами и т.д.
                                                                    Огромные алгоритмы, расчеты и т.п.

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

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

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

                                                                        • 0
                                                                          Gudok.ru для печати верстал с 2005 по 2006г.
                                                                          :\
                                                                          • 0
                                                                            Это тот, что в адском формате выходил, который читать было сложно из-за размера?
                                                                        • +1

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

                                                                        • 0

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


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

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

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

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

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

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

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

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

                                                                                Для этого существуют Solution Architect'ы.
                                                                                • 0
                                                                                  А что, бывают места, где всего этого нет?

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

                                                                                                                                      Прошу прощения за резкость, но что за бред вы вообще пишите?
                                                                                                                                      Кстати, а если человек пройдет 10 раз курс по математике, но ответ на поставленный в комментах вопрос к нему так и не придет — стоит считать, что ваше утверждение в корне некорректное? :) Сколько раз вы проходили курс математики, чтобы ссылаться на подобный опыт?

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

                                                                                                                                      Это можно объяснить в целом высоким интеллектом контингента, склонностями к логике и аналитическому мышлению. Далеко не факт, что математика играет здесь какую-то значимую роль, чтобы можно было говорить о строгих закономерностях.
                                                                                                                                      • +3
                                                                                                                                        Физмат школы традиционно лидируют в олимпиадах по любым направлениям знаний. Это не значит, что всегда занимают первые места, но существует корреляция, непреодолимая никаким скепсисом.


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

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

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

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

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

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

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

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

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

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

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

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

                                                                                                                                  • +7

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


                                                                                                                                    Первый:


                                                                                                                                    • императивное программирование
                                                                                                                                    • декларативное и фукнциональное, монады и пр.
                                                                                                                                    • конечные автоматы всех видов
                                                                                                                                    • структуры данных (стеки, 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 — ТеорВер, дискретку и булеву алгебру. В базовом виде там и учить то нечего, а в расширенном нужны — единицам. ТеорВер нужно знать хотя бы, чтобы не играть в лотереи и уметь работать с информацией.