О языках программирования

О языках программирования

О языках программирования

Сравнение двух языков программирования ни к чему не приведет. Общество программистов и работодателей, в конце концов, останется при своем мнении, а горячие споры на столь «больную» тему вызовут обиду у одних, восторг кратковременной победы, либо разочарование — у других. А пользователю, заметьте, главному герою этого сюжета и вообще все равно. Он плохо представляет себе не только хоть какой-то язык программирования и его назначение, но и разницу в программах под DOS и Windows видит только во внешнем дизайне, ему другой работой заниматься нужно, а не разбираться в вечных спорах без положительного конца. Профессиональным программистам, а также любителям интеллектуального труда следовало бы больше заниматься прямым своим делом, как то, писать хорошие программы. Не критикой своего коллеги заниматься нужно, мол, не на том языке он программу написал, следовательно, уровень его не соответствует принятым международным понятиям и нормам. А вы пользователя спросили? Нет, пользователь для нас в таком деле не авторитет, мы и сами с «усами».

Если товар плохой, то это выяснится сразу, либо в ближайшем будущем. А на какой фирме его изготовили, пусть даже на самой известной, носит далеко не первую роль. Хорошую программу можно написать на любом языке, даже на Бейсике. И плохую программу можно написать на любом языке, даже на Microsoft Visual C++. Если сегодня мы проведем анализ объявлений работодателей и их требований для настольных приложений, то на первое место можно поставить язык Microsoft Visual C++, хотя сами работодатели в этом ровно ничего не понимают. Почему, спросите Вы, почему именно этот язык? Кто проводил анализ языков программирования? Кто распорядился, чьим приказом назначен именно этот «верховнокомандующий»?

Знакомому программисту, электронщику с большим опытом отказали в приеме на работу в одной средней коммерческой фирме. У него не было сертификата от корпорации Microsoft и он действительно не был знаком с Microsoft SQL Server и СУБД Oracle. Случай уже стандартного типа. Все дело состоит в том, что производственные задачи в этой фирме позволяют с лихвой обойтись одним 486-м компьютером с Super Calc v.5.0, FoxPro v.2.0., Lexicon v.1.3, телефоном и матричным принтером, а для ведения бухучета достаточно одного бухгалтера средней руки. Не тут-то было, «зеркалами» отделывают офис, покупают дорогостоящую технику. А отсюда появляются требования и соответственно хлопоты на собственную голову. Не менее как с сертификатом от корпорации Microsoft, не менее чем Microsoft SQL Server или Oracle, не менее как 1С-Бухгалтерия от последних версий с сетью и связью с банком и кассовым аппаратом. Именно так и не менее, с задумками на будущее и желаниями иметь собственный спутник.

Я не хочу впадать в крайности и не хочу создавать мнение, что наличие хорошей техники, программного обеспечения и квалифицированного персонала — это плохо. Я хочу сказать, что нужно уметь считать деньги. И если их сегодня много, то из этого не следует, что деньги можно тратить на браваду и внешний лоск. Товарищ! Скоро наступят другие времена, когда деньги будут зарабатываться труднее, тебе не до «шику» будет.

Казалось бы, какое отношение имеет этот пример к языкам программирования ? Самое прямое, уверяю Вас. Существует пословица: «Если человеку постоянно повторять — свинья, свинья, то человек захрюкает». Если постоянно повторять слова Microsoft, Microsoft, то в книжном магазине человек вместо детектива купит билеты по сертификации Microsoft.

Языки программирования — это в сущности такое же программное обеспечение (ПО), как и любое другое. Разработкой языков программирования управляет бизнес, деньги, вероятность получения ожидаемых прибылей. Отсюда на первое место выдвигается реклама компаний-разработчиков ПО, всюду мы видим и слышим почти одно и тоже: Microsoft, Microsoft. В начале 90-х годов ведущей корпорацией по производству языков программирования была Borland Inc. Мы до сих пор помним слова Turbo Pascal, Turbo C, Turbo Assembler, Turbo Basic, Turbo Prolog (в дальнейшем с приставками Borland), но не Microsoft C, не Microsoft Fortran, не gwbasic, не QBasic, не Microsoft FoxPro (тем более, что это разработка другой компании). И сегодня уже компания Embarcadero продолжает всех радовать замечательными системами для разработки программного обеспечения: Embarcadero RAD Studio XE3, Embarcadero HTML5 Builder и др. Однако ведущим языком программирования постепенно стал Microsoft Visual C++. Когда я получал от работодателя очередной заказ на разработку ПО, то одним из условий стоял язык – Microsoft Visual C++. Почему не Embarcadero C++ Builder, спросил я ? Потому что Embarcadero — это не фирма, получил я в ответ. Вот Вам и программирование, вот Вам и C++ с хреном. Операционная система чья — Microsoft, значит и языки программирования должны быть от Microsoft. Чушь, но это реальность, это действительно происходит сегодня в нашей стране и за рубежом. Что тут сравнивать? Разве людей, стоящих на таких позициях, может переубедить мнение рядового программиста? Бесполезная трата времени.

Общество будет по-прежнему тратить огромные деньги в заведомо усложненную организацию процесса переработки информации, будут по-прежнему устанавливать на столах своих любимых руководителей дорогостоящие компьютеры в роли статуэтки, для печати рядового письма директору ЖЭКа будут по-прежнему применять Microfost Office с лазерным принтером, а для разработки ПО в виде складского учета — Microsoft Access, Microsoft Excel, Microsoft Visual Basic, Microsoft Visual C++. Не станет Microsoft, на смену придёт что-то другое, Oracle или какое-нибудь Sergo Inc. Уже сегодня возможности офисной компьютерной техники значительно превысили потребности предприятий. Предприятиям уже не нужна такая мощность аппаратных средств и ПО. Однако бизнес неумолим. Создаются компьютеры со все новыми и новыми техническими характеристиками с целью извлечения максимальной прибыли, а разработчики ПО под такие компьютеры с той же целью создают ПО с новыми и новыми возможностями (часто повторяющимися с разных мест программы, ненужными и излишними. А пользователи все платят и платят хорошие деньги за раздутое аппаратное и программное обеспечение. Процесс постоянен и его остановить в ближайшее время невозможно. «Золотая информационная лихорадка».

Pascal и C — конкуренты или сторонники

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

1. Зададим первый вопрос сторонникам языка C — почему Pascal и C, почему не Basic и C? Очевидно, что Basic явно уступает языку C, такое сравнение придумать — нанести самое сильное оскорбление программистам C. Хорошо, согласен. Тогда кто первый придумал сравнивать именно языки Pascal и C? Почему это противопоставление языков активно выдвигается вновь и вновь уже более десяти лет, совершенно разными людьми? Из этих вопросов автоматически следует логическое объяснение. Языки Pascal и C – с равнозначными возможностями. Если с этим не согласиться, значит утверждать возможность сравнения Basic и C, Pascal и Basic. Ведь никто не станет сравнивать Майкла Тайсона с местным перворазрядником. Тайсона это оскорбит, поэтому и сравнивают его с боксером равных возможностей, например Холлифилдом. Аналогично и в нашем случае, при сравнении языков Pascal и C. Итак, языки Pascal и C с равнозначными возможностями, в противном случае их никто бы и не стал сравнивать.

2. Можно обратиться и к мнению писателя Фаронова В.В., который отмечал в своих книгах, что Pascal обладает всеми возможностями, с помощью которых можно программировать все функции, которые заложены в компьютер типа IBM PC. Можно привести и следующую цитату (стр.61): «Pascal фирмы Borland стал объектно-ориентированным в версии 5.5 и долго рассматривался как лучшая объектно-ориентированная среда по сравнению с C++. Эта высокая оценка, возможно, объясняется той основой на которой развивался Pascal (если не говорить о том, что он был разработан лучшей в отрасли командой).» (Джон Матчо, Дэвид Р.Фолкнер. Delphi:Пер.с англ.-М.Бином,1995.-464 с.)

3. Pascal является более строгим языком, чем C. Любое несоответствие правилам построения программы, типам данных вызовет ошибку компилятора. А разве это плохо? Переменные должны быть описаны не в любом месте программы, где вздумается, а в строго отведенном разделе описания переменных. Представим себе программу, состоящую из 1000 строк исходного кода. На Pascal все переменные объявлены в разделе описания переменных, а в C — где угодно. Сколько же нужно искать по тексту С-программы то место, где объявлена требуемая переменная, какая из них локальная или глобальная. Что в этом хорошего?

4. В Pascal существуют понятия головной программы, процедуры и функции. В языке C все это вместе взятое есть функции и требуется написание программы подгонять под это понятие. Однако, головная программа, процедура и функция — не есть одно и то же. Структурно Pascal вне сомнения оформлен лучше.

5. Представим себе две столярных мастерских. В первой — идеальный порядок, ничего лишнего, ассортимент и количество инструментов только для работы. Во второй мастерской чисто, но расположение оборудования и инструментов самое хаотичное, инструментов очень много, в ящиках, под верстаками, на гвоздиках и даже на дороге. В такой мастерской есть все, что может придумать человеческий мозг, нет только порядка и строгой организации. Начинаем работать в этих мастерских, изготавливать табуретку. В первой мастерской мы изготовим табуретку быстро, т.к. все инструменты разложены по полочкам и их количество не превышает необходимого для такой мастерской. А во второй мы изготовим такую же табуретку, затратив вдвое больше времени. Оспаривать это бессмысленно, т.к. каждый из нас знает, что больше времени уходит не на саму работу, а на подготовку к ней. Возле компьютера можно навалить три горы технической литературы, найти синтаксис той или иной функции будет очень трудно. Мы будем рыться, искать, пробовать, но только не работать, не писать программу. Лучше положить один единственный, но толковый справочник. В языке Pascal четко прослеживается набор до мелочей продуманных возможностей и инструментов. Ничего нет лишнего. Набор инструментов только самый и самый необходимый, но и самый достаточный.

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

7. О типах данных. Вне сомнения этот вопрос более продуман в языке Pascal. Если это символ, то это символ. И складывать его с переменной целого типа невозможно. Если это тип Boolean, то это Boolean (False или True). Если строка, то имеется и тип данных строковый. Как мы можем работать со строками в Pascale:

— как с массивом символов;

— как со строкой (string);

— как с указателем на массив символов;

— как с указателем на строку.

Как мы можем работать со строками в C:

— как с массивом символов;

— как с указателем на массив символов;

Разница видна, не правда ли? А вы попробуйте взять и написать программу на этих языках, которая из строки ‘Иванов Иван Иванович’ выделит 5-6 и 10-13 символы и сложит их вместе (ответ: ‘ован И’), и обязательно положите рядом часы. На Pascale программист на эту программу затратит не более 5-ти минут, а вот на C значительно больше. Не верите? А вы попишите программы для работы со строками на Pascale и С. Уверен, что сравнивать вам больше не захочется. Элементарные функции и процедуры Pascal для работы со строками большего стоят, чем целый модуль string.h в языке С. Согласен, вы можете сказать, что у Pascal ограничена длина строки 255-ю символами, но это было давно. В Delphi эта разница уже не существует.

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

(текст на Pascal)

case ch of

‘A’..’Z’: begin …………end;

‘a’..’z’: begin …………end;

end;

Напишите этот фрагмент на С самостоятельно, а потом посмотрите на часы.

1. Следует отметить опасности в языке Си, связанные с применением типа данных float даже в несложных арифметических выражениях: (Подбельский В.В., Фомин С.С. Программирование на языке Си: Учебное пособие.-М:Финансы и статистика,1998.-600 с.)

//Пример на языке Си, стр.75

#include <stdio.h>

void main()

{

float a,b,c,t1,t2,t3;

a=95.0;

b=0.02;

t1=(a+b)*(a+b);

t2=-2.0*a*b-a*a;

t3=b*b;

c=(t1+t2)/t3;

printf(«\nc=%f\n»,c);

}

Результат выполнения программы: c=2.441406

А правильный результат : с=1.000000

Заменив первую строку тела программы на строку

double a,b,c,t1,t2,t3 мы получаем правильный результат: с=1.000000

Получается интересная картина. Применяя тип данных float в языке Си мы должны сначала написать программу, отладить ее, решить тестовые примеры, и только тогда принять решение о целесообразности типа данных float, в противном случае в программу потребуется внести изменения, данные типа float заменить на double. Во-первых, это мягко говоря чушь, а во-вторых, double требует в два раза больше памяти.

На Паскале подобного не происходит. Можно совершенно безбоязненно применять тип данных real.

1. Элементы массивов в языке Си нумеруются, начиная с 0. Это — мелочь, но удобным это назвать никак нельзя. Каждый программист сталкивался с ошибками, возникающими из-за нумерации с нуля.

2. Конструкция оператора-переключателя switch в языке Си по сравнению с оператором варианта case в Паскале оформлена хуже, т.к. требуется в каждой строке писать case…. break;

3. Работа с указателями в Паскале лучше организована, проще, логичнее, понятнее, строже.

Пример на Си:

int *k;

можно написать

*k=10;

или

k=10;

компилятор не показывает ошибку.

На Паскале такой номер не проходит. Компилятор сразу сообщит об ошибке.

Пример на Си:

int x[4]={0,2,4,6},*i,y;

i=&x[0]; //i равно адресу элемента x[0]

y=*i; //y равно 0; i равно &x[0]

y=*i++; //y равно 0; i равно &x[1]

y=++*i; //y равно 3; i равно &x[1]

y=*++i; //y равно 4; i равно &x[2]

y=(*i)++;//y равно 4; i равно &x[2]

y=++(*i);//y равно 6; i равно &x[2]

Этот пример хорошо иллюстрирует введение абсолютной путаницы в

элементарных вопросах программирования.

1. В языке Си где надо и где не надо применены указатели. Безмерное употребление указателей значительно усложняет процесс программирования, а законченный вариант программы от этого лучше не становится. Известный американский программист и писатель Чарльз Калверт в своих книгах по программированию на Delphi отмечает, что если при написании программы можно обойтись без применения указателей, то нужно обязательно без них обойтись. Именно поэтому в некоторых языках программирования указатели отсутствуют вообще, например в Java.

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

ЗАКЛЮЧЕНИЕ

Сравнивать языки между собой можно бесконечно, во всех языках присутствуют как сильные, так и слабые стороны.

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

Радоваться надо не количеству возможностей и инструментов того или иного языка, а качеству разработанного программного обеспечения, не забывая о том, сколько сил и времени затрачено на процесс проектирования. Часы и рассудят!

Программируйте на том языке, какой Вы выбрали. А критерием оценки может служить только законченная программа. Хочется пожелать Вам хороших программ, а не ссор и споров на никому не нужную тему о выборе лучшего языка.

Александр Малыгин

Объект обсуждения - программное обеспечение для выполнения автоматизированного конструкторского и технологического проектирования, разработки управляющих программ, вопросы, связанные с разработкой прикладных САПР.

Комментарий “О языках программирования

  1. Сравнение явно в пользу Паскаля (Dephi). В С одни недостатки. Но он гад живет. А почему, не сказано.

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

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