Определение программы. Взгляд с первой стороны

[Начало]

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

Михайло Ломоносов

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

Это было примерно так:

Вопрос: Наши партнеры предлагают написать прототип [программной системы] на “Processing-3”, так как у них уже нужные библиотеки и т.д. Ты не против?

Мой ответ: Мне все равно на чем программировать.

Это разговор далеко не первый разговор такого содержания в моей жизни. “Processing” здесь часть переменная. Это мог бы Ruby, Lua, JavaScript, PHP, (уходя все дальше в прошлое) Delphi, Oberon, Modula-2, Forth, Pascal, Fortran, Algol Burroughs, Эль-76, Альфа… Естественно, в любом месте этой цепочки мог быть (и был) C и начиная с какого-то времени C++. А вот ответ мой был, по сути, всегда одинаковым: если нам выгодней (по каким-то соображениям) решать задачу на этом языке, то я могу использовать этот язык.

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

Я могу программировать на любом языке, потому что я программирую не на языке.

И вторая, близкая, но другая:

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

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

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

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

Сразу несколько уточняющих вопросов:

  • Является ли это обычным? Мне кажется, что нет. Мне кажется, что большинство программистов программирует на каком-то одном языке (нескольких языках). Для меня это странно, что-то вроде привязывания палок к ногам, чтобы колени не гнулись. Ведь «… ишпанским языком с богом, французским с друзьями, немецким с неприятелями, итальянским с женским полом…».
  • А на чем я программирую? У меня есть точный и бесполезный ответ: «на лексиконе программирования». Помните, анекдот про заблудившийся вертолет, который подлетает к небоскребу с плакатом: «Где мы?» В ответ, после некоторой суеты, в окно небоскреба выставляют ответный плакат: «Вы в вертолете!» Вот это такой же точный и бесполезный ответ, как и про «лексикон программирования». Если же попробовать все же ответить, то ответ будет примерно таким: я изначально думаю и делаю разработку в достаточно общих понятиях, которые потом транслирую на конкретный язык программирования и конкретные библиотеки/компоненты/фреймворки…
  • Почему я так программирую? Вот тут ответ у меня вполне обоснованный: я компиляторщик, с опытом разработки компиляторов с разных языков и на разные платформы. Я умею видеть суть за туманом и синтаксическим сахаром. Я понимаю, откуда растут ноги у решений, принятых разработчиками языков. Плюс к этому, я изучал историю компьютеров и языков программирование.

Какие же интересные выводы мы можем сделать из этих вопросов/ответов:

  • Не буду акцентировать внимание на очевидной для меня и думаю, что не столь очевидной для многих мысль, что обучение IT должно включать в себя историю программирования и, обязательно, несколько принципиально разных языков программирования, например, вот такую троицу: Smalltalk, Forth, Oberon и плюс к ним Scratch. А уж потом те языки, что сейчас в моде. Я не настаиваю именно на этих языках, это всего лишь мои личные предпочтения и выражение уважение к их авторам/разработчикам.
  • А вот дальше мы подходим к выбору:
    • Или я гений/сумасшедший/маг (нужное подчеркнуть), который видит то, что не видят другие
    • Или в основе любого (человеческого) языка программирования/среды разработки лежат общие подходы и понятия, некий, условно скажем, философский уровень программирования. И его можно использовать для того, чтобы лучше (быстрее, дешевле) разрабатывать хорошие (надежные, быстрые, легкие) программы.

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

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *