Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
Вам понадобится логика, комбинаторика, теория множеств, все виды дискретной математики, теория графов, теория вычислимости, формальные грамматики, лямбда-исчисление, формальная семантика, топология, теории типов, теория чисел, группы, кольца, поля, категории.Где это больше пригождается — в бэкенде или фронтенде?
Вот у нас есть ООП. Инкапсуляция, наследование, полиморфизм. В чём математическая основа этой штуки? Теория множеств? Или группы? Или категории? Как базовые понятия (объект, класс, атрибут, метод) мэппятся на математику?
Есть доступное простым смертным описание этой штуки?ИМХО в Википедии четко и доступно:
В математике, логике и компьютерных науках теорией типов считается какая-либо формальная система, являющаяся альтернативой наивной теории множеств, сопровождаемая классификацией элементов такой системы с помощью типов, образующих некоторую иерархию. Также под теорией типов понимают изучение подобных формализмов.
Теория типов — математически формализованная база для проектирования, анализа и изучения систем типов данных в теории языков программирования (раздел информатики). Многие программисты используют это понятие для обозначения любого аналитического труда, изучающего системы типов в языках программирования. В научных кругах под теорией типов чаще всего понимают более узкий раздел дискретной математики, в частности λ-исчисление с типами.
Современная теория типов была частично разработана в процессе разрешения парадокса Рассела и во многом базируется на работе Бертрана Рассела и Альфреда Уайтхеда «Principia mathematica»[1].
про множественное наследование
многие вещи в ЯП появились не из-за объективной необходимости (не из-за свойств окружающего мира, физики, математики), а из-за свойств человеческого сознания — в частности, из-за свойства делать такие ошибки, которые исправный комп никогда не сделаетДаже не столько из за свойств делать ошибки, сколько из-за, скажем так, врождённой объектной ориентированности нашего мышления. Для того, чтобы о чём-то помыслить, нам нужно объявить кусок реальности отдельной дискретной сущностью и обозвать словом. То есть это не самой реальности свойственно состоять из объектов, а нашему мышлению свойственно пребывать в полном недоумении до тех пор, пока мы не смогли с некоторой устраивающей нас степенью условности поделить единую реальность на объекты.
То есть это не самой реальности свойственно состоять из объектов, а нашему мышлению свойственно пребывать в полном недоумении до тех пор, пока мы не смогли с некоторой устраивающей нас степенью условности поделить единую реальность на объекты.Делая программу МС, я не задумывался над выделением объектов «буква», «слово». Чаще просто определял по мере надобности локальные переменные. «Объект» Граф — это просто несколько массивов: один — двумерная матрица смежности с элементами Булева типа, где элемент (i,j) равен истине, если существует ребро между вершинами i и j, другой массив — вектор, где компонента i — слово (стандартная строка string) из словаря существительных русского языка, и т.д. Все операции осуществлял через простые процедуры и функции, но не методы ООП. ИМХО через ООП все то же самое выглядело бы академичнее, но код был бы большего размера, а выигрыша никакого. (Тем более, что не преследовал цели публиковать код).
Могут такие примеры спасти молодых бойцов от шаманских бубнов?Молодых бойцов от шаманских бубнов, увы, не спасёт ничто :(
многократно типизировать объекты. То есть, например, объект Вася пусть будет типа «ТМужчина+ТСантехник+ТАлкаголик», объект Маня будет «ТЖенщина+ТУборщица+ТАлкаголик».
Интерфейсы?
Как только обстоятельства чуточку меняются (мы называем это уточнением постановки задачи) вполне вероятно, что тот способ декомпозиции реальности, который нам секунду назад казался незыблемой вечной истиной, летит ко всем чертям. Если та декомпозиция уже была воплощена в иерархию классов, начинаем всё перепиливать. Или, если на это нет бюджета, расставлять миллион костылей.Увы, это общая проблема моделирования. Модель всегда минимизирует свойства прототипа, т.е. отбираются только значимые свойства. Нпр., модель самолета для испытаний в аэродинамической трубе может быть сделана из монолитного куска дерева и не иметь двигателя, иллюминаторов, шасси и т.д. Для каких-то других испытаний придется выбросить деревяшку и изготовить другую модель, отражающую другие свойства прототипа. Про методологию мат.моделирования очень интересные книги:
Начинается всё с попытки вообще формализовать, что такое программа на языке программирования. Ну там, что значит её выполнение, например.Именно программа? — что такое программа на языке программирования, а не что такое алгоритм?
То есть можно быть на редкость успешным программистом, напрочь при этом забыв, что такое логарифм.
Сомнительно. Логарифм — это базовое понятие, которое используется в О нотации, которая, в свою очередь, может привести к неправильному выбору структуры данных, которая вызовет деградацию производительности конечного приложения.
Вот у нас есть ООП. Инкапсуляция, наследование, полиморфизм. В чём математическая основа этой штуки? Теория множеств? Или группы? Или категории? Как базовые понятия (объект, класс, атрибут, метод) мэппятся на математику? Вот реляционная алгебра, например — прямой потомок исчисления предикатов. А ООП — чей потомок?
Это аргумент против ООП, не против математики.
Если ваш друг прочитал интересную статью и рассказал вам об этом, вы просто сэкономили много своего времени, потому что он дал вам обработанные, кристаллизованные знания.
Возьмите хорошую книгу и решайте олимпиадные задачи онлайн.
Для Питона, увы, нет эквивалента SICP.
Почему вы так думаете?
Вот по ссылке заявлена книга SICP in Python: https://wizardforcel.gitbooks.io/sicp-in-python/content/index.html
Темы в ней, правда, немного переставлены. Странно было бы ждать полного эквивалента от книги на другом языке.
Советы студентам-программистам