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

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

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

Объектно-ориентированный Платон

Одной из первых концепций, которые мы рассмотрели на уроке Ruby в моей школе кодирования, были классы.

Как вы знаете, в Ruby царят классы, и почти все наследуется от класса. Эти классы содержат методы и атрибуты, но обычно сами по себе ничего не делают. Они первозданная абстракция. Когда создается объект, вызывается класс, объект наследует все функциональные возможности и черты класса и воплощает его в жизнь со своими особенностями.

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

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

Теперь я уверен, что вы видите связь. В объектно-ориентированном программировании идеи Платона стали классами, а вещи стали объектами. Хотя каждая строка Ruby, например, содержит уникальный текст, каждая строка участвует и зависит от String для своих методов (chomp, gsub, split и т. д.).

Оккам Архитектор кода

Одна из мантр, которую я научился повторять снова и снова, будучи рубистом, — СУХАЯ: «Не повторяйся». Крайне предпочтительно писать код только один раз. Это улучшает читаемость, ремонтопригодность и, конечно, даже красоту кода. Как программист, при прочих равных, я предпочитаю более простое решение сложному.

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

Точно так же и Оккам, и программисты все же предпочтут более сложное решение, если оно работает лучше, чем простое.

Рекурсия и круговые рассуждения

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

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

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