Добавлен: 05.04.2023
Просмотров: 546
Скачиваний: 1
Поддержка сообщества – это вики-сайты, форумы, учебные руководства и, самое важное, дополнительные библиотеки, развивающие язык. Прошли те дни, когда люди работали автономно. Никто не захочет перерывать горы документации, чтобы решить одну маленькую проблему. Если у языка много сторонников, это увеличивает шансы того, что ранее кто-нибудь сталкивался с вашей проблемой и уже написал об этом на вики-сайте или на форуме.
Хороший пример значения сообщества дает язык Perl. Архив Comprehensive Perl Archive Network (CPAN) поддерживается усилиями сообщества. Главная цель CPAN – помочь программистам в поиске модулей и программ, не включенных в стандартный дистрибутив Perl. По своей структуре он децентрализован; авторы обслуживают и улучшают свои собственные модули. Обычной практикой является создание ответвлений и конкурирующих модулей для одной и той же задачи или цели.
Сценарии
Сценарии проектов, приведенные в данном разделе, иллюстрируют различные факторы, влияющие на принятие решения относительно выбора языка программирования.
- REST-сервис для операции сложения.
- Простая программа чтения фидов.
- Корпоративные приложения.
- Исследовательские проекты [2].
REST-сервис для операции сложения
В этом сценарии рассматривается REST-сервис, выполняющий сложение. Сервис вызывается по URL, http://<url>?num1=number1&num2=number2, а результат должен содержать сумму двух чисел, переданных сервису. Эту программу можно написать на разных языках. В нашем примере используются JSP (см. листинг 1) и PHP (см. листинг 2). JSP-программа написана в Eclipse IDE.
Листинг 1. REST-сервис, использующий JSP
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> <title>Sum</title> </head> <body> <% if (request.getParameter("num1") == null || request.getParameter("num2") == null) { %> <p> <b>Wrong URL!!!</b> </p> <p> <b>Enter URL in this format: </b> <i> http://<url>?num1=number1&num2=number2</i> </p> <% } else { %> <b>Number 1:</b> <i><%= request.getParameter("num1") %></i> <br> <b>Number 2:</b> <i><%= request.getParameter("num2") %></i> <br> <b>Sum:</b> <i><%= Integer.parseInt(request.getParameter("num1")) + Integer.parseInt(request.getParameter("num2")) %></i> <br> <% } %> </body> </html> |
В листинге 2 приведена та же программа, написанная на PHP.
Листинг 2. REST-сервис, использующий PHP
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> <title>Sum</title> </head> <body> <?php if ($_GET["num1"] == NULL || $_GET["num2"] == NULL) { ?> <p><b>Wrong URL!!!</b></p> <p> <b>Enter URL in this format: </b> <i>http://<url>?num1=number1&num2=number2</i> </p> <?php } else { ?> <b>Number 1:</b> <i><?= $_GET["num1"] ?></i> <br> <b>Number 2:</b> <i><?= $_GET["num2"] ?></i> <br> <b>Sum:</b> <i><?= $_GET["num1"] + $_GET["num2"] ?></i> <br> <?php } ?> </body> </html> |
Между этими примерами нет особых различий. Программа сама по себе не использует все возможности обоих языков. Она показывает, что когда дело касается основ, оба языка равноценны.
Возможности JSP позволяют использовать его преимущественно на корпоративном уровне. Например, в случае использования JSP программа при самом первом вызове загружается в память как сервлет. При каждом последующем запросе вызывается программа, находящаяся в памяти, что улучшает время ее реакции. Она также идеальна для среды Java. В случае использования PHP программа загружается в память при каждом вызове, что может увеличить время реакции для критических приложений.
Еще одной важной функциональной возможностью JSP, которая делает его более подходящим выбором для предприятия, является его многопоточность. PHP не имеет встроенной поддержки многопоточности.
Простая программа чтения фидов
Цель этого сценария заключается в предоставлении программе ссылки на фид. Программа должна получить фид и вывести все его заголовки. Чтобы сделать программу более интересной, мы подпишемся на фид в JSON-формате, а не в RSS.
Фрагмент кода, приведенный в листинге 3, взят из O'Reilly и написан на Java.
Листинг 3. Программа чтения фидов, использующая Java
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
import java.io.InputStream; import java.net.URL; import java.net.URLConnection; import org.apache.commons.io.IOUtils; import net.sf.json.JSONArray; import net.sf.json.JSONObject; import net.sf.json.JSONSerializer; public class JsonParser { public static void main(String[] args) throws Exception { String urlString = "http://pipes.yahoo.com/pipes/pipe.run?_id=df36e60df711191549cf529e1df96884& _render=json& textinput1=and&urlinput1=http%3A%2F%2Ffeeds.wired.com%2Fwired%2Findex"; URL url = new URL(urlString); URLConnection urlCon = url.openConnection(); InputStream is = urlCon.getInputStream(); String jsonTxt = IOUtils.toString(is); JSONObject json = (JSONObject) JSONSerializer.toJSON(jsonTxt); JSONObject value = json.getJSONObject("value"); JSONArray items = value.getJSONArray("items"); String title; for (Object item : items) { title=((JSONObject)item).getString("title"); System.out.println("\n" + title); } } } |
В листинге 4 приведена программа, написанная на Python.
Листинг 4. Программа чтения фидов, использующая Python
|
1 2 3 4 5 6 7 8 9 |
#!/usr/bin/python import urllib.request url = "http://pipes.yahoo.com/pipes/pipe.run? _id=df36e60df711191549cf529e1df96884&_render=json& textinput1=and&urlinput1=http%3A%2F%2Ffeeds.wired.com%2Fwired%2Findex" HTTPdata = urllib.request.urlopen(url) json_data = eval(HTTPdata.read()) for item in json_data['value']['items']: print (item['title']) |
Python-программу можно сократить еще больше – всего до трех строк. Оставьте в листинге 4 первые две строки и замените остальной код строкой из листинга 5.
Листинг 5. Сокращенная третья строка
|
1 2 3 4 |
for item in eval((urllib.request.urlopen("http://pipes.yahoo.com/pipes/pipe.run? _id=df36e60df711191549cf529e1df96884&_render=json&textinput1=and& urlinput1=http%3A%2F%2Ffeeds.wired.com%2Fwired%2Findex")) .read()))['value']['items']:print (item['title']) |
Пример приложения продемонстрировал гибкость этих языков. Ни один из них не имеет встроенной поддержки всех необходимых библиотек, поэтому необходимо импортировать нужные пакеты. В Python это даже проще, поскольку можно манипулировать JSON по умолчанию. В Java-коде это труднее, потому что для создания работающей программы необходимо получить JSON-библиотеки и их зависимости.
Корпоративные приложения
При разработке корпоративных приложений проектировщики и программисты должны пройти по канату, балансируя между производительностью, безопасностью, простотой обслуживания и временем разработки. Речь идет не просто о выборе языка программирования, который обеспечит лучшие показатели производительности. Не менее важными факторами являются время создания рабочей версии, гибкость и степень интегрируемости в существующую инфраструктуру.
Важную роль играет также среда, в которой программа будет использоваться. Корпоративные программы никогда не работают автономно. Каждая программа становится частью более крупной задачи, поэтому важным фактором становится способность к взаимодействию.
Представьте себе, что предприятие, использующее свои реализованные на Java-коде Web-сервисы, хочет в качестве надежной платформы добавить WebSphere® MQ. Нет никакого смысла использовать для написания приложения C-интерфейсы системы WebSphere MQ; следует выбрать Java.
Исследовательские проекты
Предположим, что вашим следующим проектом является исследование в области, не связанной с ИТ и компьютерами. Пусть это будет, например, обработка изображений, обработка звука, использование водяных знаков или исследование фондового рынка. Необходимо создать код для имитации реального поведения, но вы не очень разбираетесь в компьютерах.
Проект требует быстрого написания большого количества необязательно идеального кода. Самым важным фактором является время исполнения. В данном случае это означает, насколько быстро можно сделать работающий компонент, чтобы быстрее вернуться к основной задаче. Это напоминает написание маленьких заглушек без особого внимания к способности к взаимодействию. Проект может стать полноценным продуктом, но в данный момент он находится на начальном этапе. Основной задачей является создание прототипа.
В такой ситуации на помощь могут прийти такие языки, как MATLAB и LISP. Если вы начнете создавать прототип на C, то погрузитесь в дебри переменных и указателей и не получите реальных результатов исследования. MATLAB интегрируется с C/C++ и Fortran, что позволяет вызывать C-код из MATLAB и наоборот.
Заключение
В данной работе были рассмотрены некоторые факторы, влияющие на выбор языка программирования. Однако этот список неполон. Например, если опытный программист предложит вам язык, который вы не рассматривали, возможно, вам следует оценить и его.
Мы надеемся, что теперь вам будет легче выбрать язык программирования для вашего следующего проекта. Языков становится все больше, поэтому возможность выбора есть всегда.
Список использованной литературы
- Андреев, А. Эволюция современных языков программирования / А. Андреев // Мир ПК. – 2011. – № 3.
- Гедранович, В.В. Основы информатики и вычислительной техники: учеб.-метод. комплекс: в 2 ч. – Минск: Изд-во МИУ, 2006. – Ч. 2. – 162 с.
- Информатика: учебник / под ред. проф. Н.В. Макаровой. – М.: Ось-89, 2017. – 768 с.
- Информатика / Под ред. А.П. Курносова. – М.: КолосС, 2015. – 272 с.
- Кауфман, В. Языки программирования. Концепции и принципы. / В. Кауфман. – М.: Центр-пресс, 2014. – 231 c.
- Коцюбинский, А.О. Хрестоматия работы на компьютере: практ. пособ. – М.: ТРИУМФ, 2016. – 640 с.
- Малышев Р.А. Локальные вычислительные сети: Учебное пособие. – Рыбинск: РГАТА, 2015. – 83 с.
- Островский В.А. Информатика: учеб. для вузов. - М.: Высшая школа, 2018. — 511 с.
- Семакин И.А., Информатика: Базовый курс /Семакин И.А., Залогова Л., Русаков С., Шестакова Л. – М.: БИНОМ, 2015. – 105с.
- Симонович С.В.Информатика. Базовый курс. — СПб.: Питер, 2013. — 640 с.
- C ++,TurboPasckal,QBasik:Эволюция языков программирования http://langprog.far.ru/historylangprog.html. - 27.05.10.