Продолжим заполнять наш опросник который задают программистам iOS на собеседовании. Мы подобрались к пункту:
знание других парадигм программирования (функциональной, структурной, аспектной, процедурной)
Итак начнем.
А начну пожалуй со слова Парадигма. Если верить Википедии:
Паради́гма (от греч. παράδειγμα, «пример, модель, образец») — совокупность фундаментальных научных установок, представлений и терминов, принимаемая и разделяемая научным сообществом и объединяющая большинство его членов. Обеспечивает преемственность развития науки и научного творчества.
Почему я вообще начал с этого слова? Да потому что оно очень важно в контексте ответов. Парадигма, если сказать проще, общепринятые нормы и стандарты. В любой сфере они свои. Например в экономике это монетаризм, или действующая сейчас концепция предложения-потребления. Опираются они на экономические направления влавствующие в тот или иной момент времени. Я вот все жду когда же экономическая парадигма изменится. Съездив в Тайлад я понял что экономика по Нэшу возможна. Напомню что речь идет о теории равновесия и прочих работах Джона Нэша. Сейчас мировой кризис. Формула потреблять и производить как можно больше себя изжила. Нужно менять парадигму и возможно сейчас это можно будет сделать. Но сделают это азиаты :). Им религия позволяет делать для себя что-то, задумываясь о других.
Так вот вернемся к нашим парадигмам программирования. Опять же Википедия:
Паради́гма программи́рования — это система идей и понятий, определяющих стиль написания компьютерных программ. Это способ концептуализации, определяющий организацию вычислений и структурирование работы, выполняемой компьютером
Их было и есть несколько:
- Императивное программирование
- Декларативное программирование
- Структурное программирование
- Функциональное программирование
- Логическое программирование
- Объектно-ориентированное программирование
Суть у них у всех проста. Алгоритмы в этих парадигмах описываются определенными способами и методами, которые и составляют ориентированность языка. Вот я например запамятовал что функциональное программирование это не то где основа программы функции. Функции в нем приближены к математичским и больше похожи на автоматы. Но для автоматов из дискретной математики есть своя парадигма автоматного программирования. В общем муть.
А на самом деле, в обычном случае, в обычном мире разработки, обычных программ, в основном используются всего два подхода: структурное и обьектно ориентированное. Тут я задумался что стоит внести сюда еще интуитивное, то которое пишется на коленке за 5 минут, но не стал. Нас учили структурному программируованию. Взять алгоритм, разложить его на структуру выполнения и реализовать ее при помощи имеющихся возможностей языка и функций (процедур). Теперь на коне обьектный способ, когда мы берем готовые или создаем свои обьекты и комбинируем их в работающую программу.
Эволюция чистой воды, а вот что дальше?
Не могу себе представить ситуацию в которой создается конечный автомат или функция не изменяющая никаких значений. Точнее могу, но это как с машинами. Есть же трехколесные, а вот почему-то я в жизни только одну видел. Более того, если вы прочитаете вышерасположенные ссылки на википедию, внизу страница, по ссылке перейдете на ресурсы на которые они ссылаются и в случае если это ссылка на форум, то почитаете обьемный срач. К примеру субъектно-оринетированное программирование. Зацепились языками, что-то доказывали друг другу, обвинили друг друга в некомпетентности и неккоректном доказательстве теоремы Ферма. Последнее изменение страницы в 2007 году. Видимо тогда же этот подход программирования и заглох. Вот и так со всеми остальными. Это из очень узких областей, для очень серьезных людей с IQ около 200. Для них это удобно и эффективно, а для большинства просто есть и особо не нужно.
И вот тут я вернусь к началу. Парадигма это общепринятые нормы…. Если нормы отрицают 90% участников они как бы не общепринятые. Это больше смахивает на эффект следования академическим парадигмам. У тех у кого спрашиваем будет только один ответ: Это хорошо! Потому что нам так сказали. Сказать иначе, означает выставить себя в невыгодном свете. Проиллюстрирую:
— Вася привет, ты знаешь автоматное программирование?
— Нет.
— Фу, лошара, это же крутая вещь, там и дискретка и матан. Не хватило ума выучить?
— Да как то не нужно было! (бля, в следующий раз буду говорить что знаю и надо прочитать в википедии).
Вот как-то так в большинстве своем и выглядит подоплека этого вопроса на собеседовании. Моя позиция не изменилась. Если это необходимо знать, будет мной активно использоваться и приносить пользу я буду знать это. В противном случае, я скорее всего буду это игнорировать по причине ненужности.
Комментариев нет