Дилемма программиста

Дата публикации: 01/11/2009

Изучение практически любого языка программирования начинается с написания хрестоматийной программы "Hello, World!", но следует признать, что в современном мире программирования этого уже давно недостаточно. Настоящее таково, что собственно язык программирования - это всего лишь небольшая часть тех знаний, которые нужно приобрести, чтобы написать работающую программу. Язык программирования нынче - это некое связующее звено между концептуально чистой идеей и API платформы.

Классический BASIC, который позиционировался как язык для обучения программированию, не был предназначен для написания полнофункциональных программ. Хотя некоторые и пытались его использовать для этих целей, но концептуально он для этого не подходил. Множество современных языков программирования, которые продолжают появляться до сих пор, связаны с определенным мировоззрением их авторов на решение той или иной задачи. Точно также, как наш с вами язык общения влияет на образ наших мыслей, так и у программиста, долго использующего один язык программирования, вырабатывается определенный способ мышления. Это приводит к тому, что хорошо знакомый язык программирования стараются приспособить для решения проблем, к которым он, скажем так, не совсем приспособлен. Или, говоря с технической точки зрения, требует написания гораздо большего количество кода, чем на другом более подходящем языке.


Любой язык программирования - суть способ описать алгоритм решения задачи на "относительно человеческом языке". Чем более понятная и простая концепция у данного языка, тем больше людей смогут им воспользоваться. При этом в отдельный класс можно вынести также и языки разметки, которые, не будучи полноценными языками программирования, по сути используются для тех же целей, но в отношении структурирования текстов. Недаром многие люди, пробующие создавать свои web-странички, по ошибке называют HTML языком программирования. Т.е. в нашем сознании определенно возникает некая общность и параллели между языками программирования и языками разметки. И в том и в другом случае явственно чувствуется искусственность обоих, требующая специального изучения и последующего "скармливания" написанной "программы" компьютеру.

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

Но, как я отметил в самом начале, современный язык программирования - это лишь инструмент, который позволяет нам описать первоначальную идею в однозначных терминах, понятных компьютеру. Главный герой нынче - это "платформа" - некая среда в рамках которой и происходит выполнение программы. Появление платформы есть результат усложнения пользовательского интерфейса и сложности решаемых задач.

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

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

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

Изучение конкретной платформы и ее API составляет основную работу программиста сегодня. Для написания успешной программы соотношение знаний особенностей языка программирования и API конкретной платформы составляет примерно 20/80. Это в устоявшихся и признанных платформах, скажем, Windows, Mac OS X, Flash. Но постоянно появляются новые платформы, которые решают новые задачи. Зачастую эти задачи до появления платформы каждый разработчик решал самостоятельно. И проблема в том, что конкурирующих платформ возникает достаточно много, а выбор той или иной платформы - задача не всегда однозначная.

И вот здесь возникает дилемма программиста. Что лучше - писать полностью весь код самостоятельно, абсолютно точно зная как он работает, но при этом рискуя потерять много времени на реализацию низкоуровневой функциональности, или выбрать какую-то платформу и погрузиться в изучение ее API? В последнем случае мы становимся зависимыми от платформы и расплачиваемся тем, что не до конца понимаем все особенности работы системы.

Теги: мысли, программирование

Смотри также