Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

Усилители интеллекта: теории, эксперименты, технологии


Усилители интеллекта: конструкторы алгоритмов 4

Уважаемые любители интеллектуальных программ!

Дорога в мир программирования состоит из нескольких шагов, и на каждом из них могут пригодиться усилители интеллекта, называемые интегрированными средами разработки (IDE = Integrated development environment).
В освоении алгоритмического мышления нам помогал ДРАКОН. В блочной сборке программ - HiAsm. На очереди - освоение языка кодов.

Все мы свободно общаемся на родном языке (а некоторые еще и на иностранном ;0), но листинги с кодом вроде

procedure _Set(var Item: TData; var Val: TData); override;
procedure _Add(var Val: TData);
function _Get(var Item: TData; var Val: TData): boolean;
function _Count:integer;

вызывают у подавляющего большинства священный ужас.

Г.А. Звенигородский

Естественно, было бы проще, если бы команды компьютерам отдавались на русском языке.  Да что там, если бы Россия заняла в программировании лидирующее место, то американцы бы учились у россиян, а не наоборот. И шанс такой был - в конце 70-х годов ХХ века в Сибирском отделении АН СССР была разработана система обучения программированию на языке РАПИРА, способном решать широкий круг задач. РАПИРА, созданная под руководством Г.А. Звенигородского (1952 - 1984), содержала идеи, появившиеся через 15-20 лет в языках типа Python или Ruby, но была вынуждена сойти со сцены. Сказались и гибель 32-летнего основателя школьной информатики (вот какова роль личности в истории), и вытеснение отечественных персоналок Агат более мощными IBM PC.
Впрочем, и сейчас еще этот проект находит своих последователей - в виде Конструктора Исполнителей - среды для начального изучения Объектно-Ориентированного программирования (разработанной в Детском Центре компьютерных технологий Горно-Алтайска, но в настоящее время скрытой в недрах сайта "Школьный сектор", сотрудничающего с IBM) и Исполнителей Константина Полякова, лучшего учителя информатики Спб в 2008 году (в этой IDE можно переключаться между русскими и английскими командами).

Воспоминания программистов:
"Рапиру я любил из-за плюсов известных современных интерпретаторов (Python, LUA, PHP) – динамическое выделение памяти, сборщик мусора, нет объявления типов переменных, элегантность решения задач. Плюс русский язык. И...  еще и гордость за наш продукт".
"Многие программисты остались (или стали - точнее) таковыми благодаря именно Рапире. Я знаю прекрасного преподавателя информатики (к сожалению, она сейчас не работает в школе), которая благодаря Рапире поняла и полюбила программирование. До того её долго и упорно в КГУ учили программированию, но безуспешно.
А сколько было написано ППП различного предназначения на Рапире (в том числе для производственных целей). Рапира безупречна с точки зрения обучения программированию.
В Рапире структуры данных сознательно функционально ясны. При реализации русскоязычного языка программирования наследовались принципы Алгола. Тексты, множества, кортежи функционально осмысливаются легче, чем традиционные для языков программирования механизмы массивов и списков. Структуры Рапиры динамичны, в связи с этим стиль обучения формирует интерактивный диалоговый характер программирования".
http://school.iis.nsk.su/forums/viewtopic.php?id=25

Другой известный проект - ГЛАГОЛ - язык программирования, родственный языкам Паскаль и Оберон. Основное отличие Глагола от Паскаля и Оберона состоит в том, что в нём используются только русские служебные слова. Создатель его - аноним, скрывающийся (от потенциальных работодателей? ;0) за ником Издатель.
Нельзя не упомянуть и ПРОФТ-5 Федора Тюленева из Брянска, основавшего компанию с многозначительным названием "ПОБЕДИТ".  Система содержит в себе интерпретатор языка программирования ПРОФТ, систему разработки программ и многочисленные примеры, показывающие, как работают ПРОФТ-программы. Причем и сама система программирования полностью написана на языке ПРОФТ.

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

Мнение с форума программистов:
"Вот если бы в своё время СССР был впереди в этой области (я имею ввиду вообще информационные технологии), то тогда б, может, и сложилось, что весь мир бы писал на ГЛАГОЛах, Рапирах и т.п. А так как это всё развивалось не здесь, стандартом де-факто являются C/C++ и т.п. Никто ж не обижается, что в медицине преобладает латынь (термины), а музыке - итальянский. Точно так и здесь - английский. Даже стандартный набор символов (ASCII) будет конфликтовать с русскими языками программирования". / http://torrents.ru/forum/viewtopic.php?t=1289032

Однако неизбежное словотворчество (вроде Текстореза в Глаголе) вызывает большие сомнения с точки зрения норм литературного русского языка. Другое дело, что среда программирования должна быть русскоязычной, а уж выучить несколько десятков команд на латинице - большого труда не составит.
В рамках изложенного подхода наибольший интерес представляют IDE с русским интерфейсом, работающие с нормальными (англоязычными) языками программирования. Вот что удалось собрать по этому поводу в дебрях Интернета - все IDE бесплатные:

BlackBox Component Builder (2,8 Мб) - небольшая по объёму и нетребовательная к ресурсам среда визуального программирования, целиком построенная на Компонентном Паскале. BlackBox поддерживает оригинальную концепцию пользовательского интерфейса, основная идея которой: можно вставлять все что угодно во все что угодно. Например, кнопку, другой элемент управления или форму целиком можно вставить в текст, форматированный текст положить на форму, вставить объекты внешних программ (например, таблицу или диаграмму Excel). В этом аспекте среде BlackBox нет равных. Разработана под руководством Никлауса Вирта в швейцарской компании Oberon microsystems; русифицирована и поддерживается в России компанией "Метасистемы" (г. Орел).

PascalABC.NET (3 Мб / с русифицированным Microsoft .NET Framework 40 Мб) - это реализация языка Delphi Object Pascal для платформы .NET, включающая такие важные особенности современных языков программирования как интерфейсы, обобщенные классы (generics), делегаты, сборка мусора, исключения, средства параллельности. PascalABC.NET − это бесплатная среда программирования для обучения, сочетающая простоту языка Паскаль и огромные возможности платформы .NET. Разработана  под руководством С.С. Михалковича на факультете математики, механики и компьютерных наук Южного федерального университета (г. Ростов-на-Дону).

Dev-C++ (9 Мб) - это интегрированная среда для программирования на языках С и C++, работающая под управлением операционной системы Windows. Среда Dev-C++ распространяется свободно с исходными кодами (на Delphi) по лицензии GPL. Достоинства: графический интерфейс; русскоязычное меню; встроенный отладчик GDB; возможность создавать консольные и графические программы. Разработана интернациональной бригадой Colin Laplace, Hongli Lai, Mike Berg, Yiannis Mandravellos.

Microsoft Visual Studio Express 2008 SP1 (создавалась под именем Orcas = касатки) (819 Мб) - с 28 октября 2008 года впервые доступна версия на русском языке. Нацелена на создание приложений для ОС Windows Vista (но поддерживает и XP), Office 2007 и веб-приложений. Бесплатная Visual Studio Express — набор облегченных сред разработки, представляющих собой урезанную версию Visual Studio. В отличие от полной версии, состоит из автономных частей, предназначенных для какого-то одного языка программирования: Visual Basic Express, Visual C++ Express, Visual C# Express, Visual Web Developer Express.

Eclipse 3.2 (120 Мб / с русификатором и Java-машиной JRE142 - 138,8 Мб) - мультиплатформенная и мультиязыковая (т.е. пригодная для разных операционных систем и разных языков программирования) IDE, называемая фреймворком.  Другие примеры фреймворков - NetBeans, wxWidgets, Qt и основанная на ней KDE, FOX Toolkit, платная Microsoft Visual Studio.

NetBeans 6.8 (297 Мб) - самый современный мультиязычный (есть и русский) фреймворк, поддерживающий Java, C, C++, PHP, Ruby и платформы Windows, Linux, Solaris, Mac OS X.

Так за что же взяться в освоении кодинга? С чего начать?

Покопавшись в обозрениях и библиотеках, я нашел следующие общепризнанные варианты:

1. Pascal - язык, разработанный в Швейцарии для обучения программированию, профессиональной работы и выдержавший испытание временем (живет с 1970 года). Его изучают в школе, на нем написано неимоверное число программ, и от него произошли современные языки Delphi (Object Pascal), Oberon (Component Pascal). Так что входить в культуру программирования, игнорируя этот язык, как-то нехорошо. Тем более, что есть русскоязычные IDE, созданные как в противостоянии с американской школой (BlackBox), так и в смычке с нею (PascalABC.NET).

2. Java - язык программирования (живет с 1995 года), получивший колоссальную поддержку сторонников открытого программирования и сумевший потеснить Микрософт даже на ее поле - платформе Windows. Java последние годы стабильно лидирует по рейтингу популярности: на нём работают более 6,5 млн. программистов, он используется в 800 млн. персональных компьютеров и во всех сотовых телефонах, что в сумме дает более 4,5 млрд устройств. На этот язык ориентированы самые мощные бесплатные фреймворки Eclipse и NetBeans. Язык получился удобным для изучения, написанные на нем программы легко читаются и отлаживаются: первую программу можно написать уже через час после начала изучения языка.

3. Языки, включенные в Microsoft Visual Studio Express, - от простейшего Visual Basic (наследника языка BASIC, созданного в 1964 году) до перспективного Visual C# (конкурента Java), тем более, что для "середнячка" С++ есть полноценная русскоязычная IDE Dev-C++ и введение к ней от самого Полякова. За этой линией - авторитет Микрософт и многомиллионная армия пользователей Windows. Каждый из этих языков уступает Java в популярности, но в сумме они превосходят его на треть. Для них есть русскоязычные IDE, а за ними - коммерческий фреймворк Visual Studio ($799).

Для начала взглянем на коды простейшей программы Hello, World! - она вошла в обиход программистов с легкой руки Кернигана и Ричи, авторов языка Си (до сих пор излюбленного инструмента системных программистов, не уступающего по популярности Java).

Язык Код программы Hello, World! Пояснения
Pascal
Delphi
PascalABC.NET
Oberon
(*программа на Паскале*)
program HelloWorld(output);
begin
WriteLn('Hello, World!');
end.

// программа на Object Pascal
program HelloWorld;
var
Greeting:String;
begin
Greeting:='Hello, World.';
WriteLn(Greeting);
end.

//программа на PascalABC.NET
begin
writeln('Привет, мир!');
end.

(*программа на  Oberon*)
MODULE HelloWorld;
IMPORT Out;
BEGIN
Out.String("Hello, World!");
Out.Ln;
END HelloWorld;

* Структура программы в Паскаль:
Program <Имя программы>;
<Раздел описаний>
Begin
<Тело программы>
End.

* Структура программы в Object Pascal (Delphi) и PascalABC.NET:
program имя программы;
uses раздел подключения модулей
var раздел описаний
begin
операторы
end.

* Программа в Component Pascal (Oberon) представляет собой набор модулей:
MODULE Имя;
IMPORT СписокИмпорта;
Определения;
BEGIN
Операторы
END Имя.
Тело модуля исполняется при его загрузке. Внутри тела модуля (в разделе BEGIN..END) можно добавить секцию CLOSE:
BEGIN
Операторы
CLOSE
Операторы
END Имя.
Здесь операторы, расположенные между BEGIN и CLOSE, выполняются при загрузке модуля, а операторы, расположенные между CLOSE и END — при выгрузке его из памяти. Такое расширение было сочтено полезным для компонентных программ, которые загружают и выгружают модули динамически.

* Комментарии заключаются в скобки (* *), а в Дельфи предваряются //
Java //программа на Java
class HelloWorld{
public static void main(String[] args){
System.out.println("Hello, World!");
}
}
* Всякая программа представляет собой один или несколько классов, в этом простейшем примере только один класс (class).
* Начало класса отмечается служебным словом class , за которым следует имя класса, выбираемое произвольно, в данном случае Helloworld. Все, что содержится в классе, записывается в фигурных скобках и составляет тело класса (class body).
* Все действия производятся с помощью методов обработки информации, коротко говорят просто метод (method). Это название употребляется в языке Java вместо названия "функция", применяемого в других языках.
* Методы различаются по именам. Один из методов обязательно должен называться main , с него начинается выполнение программы. В нашей простейшей программе только один метод, а значит, имя ему main .
* Как и положено функции, метод всегда выдает в результате - чаще говорят, возвращает (returns) - только одно значение, тип которого обязательно указывается перед именем метода. Метод может и не возвращать никакого значения, играя роль процедуры, как в нашем случае. Тогда вместо типа возвращаемого значения записывается слово void , как это и сделано в примере.
* После имени метода в скобках, через запятую, перечисляются аргументы (arguments) или параметры метода. Для каждого аргумента указывается его тип и, через пробел, имя. В примере только один аргумент, его тип — массив, состоящий из строк символов. Строка символов — это встроенный в Java API тип string , а квадратные скобки — признак массива. Имя массива может быть произвольным, в примере выбрано имя args .
* Перед типом возвращаемого методом значения могут быть записаны модификаторы (modifiers). В примере их два: слово public означает, что этот метод доступен отовсюду; слово static обеспечивает возможность вызова метода main () в самом начале выполнения программы. Модификаторы вообще необязательны, но для метода main () они необходимы.
* Комментарии в Java могут быть однострочными и многострочными. Однострочные комментарии начинаются с символов // и продолжаются до конца текущей строки, как показано в примере. Многострочные комментарии заключаются в маркеры /* и */, например:
/* Это пример комментария,
содержащего несколько строк. */
Visual Basic ' программа на Visual Basic.
Module Hello
Sub Main()
MsgBox("Hello, World!") ' Display message on computer screen.
End Sub
End Module
* Программа Visual Basic построена из стандартных блоков. Решение состоит из одного или нескольких проектов. Проект в свою очередь может содержать одну или несколько сборок. Каждая сборка компилируется из одного или нескольких исходных файлов. Исходный файл включает в себя определения и реализацию классов, структур, модулей и интерфейсов, и в конечном счете содержит весь код.
* Одиночная кавычка (') в начале первой строки означает, что в ней содержится комментарий и компилятору следует ее игнорировать.
Можно сделать комментарием всю строку, или поместить комментарий в конце другого оператора, как в строке с MsgBox.
Visual С++ // программа на C++
#include
using namespace std;
int main()
{
cout << "Hello, World!" << endl;
return 0;
}
* Чтобы облегчить работу программиста, компилятор с языка C++ содержит специальные библиотеки классов. Такие библиотеки включают в себя практически весь программный интерфейс Windows и позволяют пользоваться при программировании средствами более высокого уровня, чем обычные вызовы функций. Программист отвечает на вопросы генератора приложений и определяет свойства приложения - поддерживает ли оно многооконный режим, технологию OLE, трехмерные органы управления, справочную систему. Подобные средства автоматизированного создания приложений включены в компилятор Microsoft Visual C++ и называются MFC AppWizard. Конечно, MFC AppWizard не всесилен. Прикладную часть приложения программисту придется разрабатывать самостоятельно. Исходный текст приложения, созданный MFC AppWizard, станет только основой, к которой нужно подключить остальное. Но работающий шаблон приложения - это уже половина всей работы. Исходные тексты приложений, автоматически полученных от MFC AppWizard, могут составлять сотни строк текста. Набор его вручную был бы очень утомителен. MFC AppWizard создает тексты приложений только с использованием библиотеки классов MFC (Microsoft Foundation Class library). Поэтому только изучив язык C++ и библиотеку MFC, можно пользоваться средствами автоматизированной разработки и создавать свои приложения в кратчайшие сроки. 
* Комментарии предваряются //
Visual C# // программа на C#
using System;
class HelloWorld
{
public static int Main(String[] args)
{
Console.WriteLine("Hello, World!");
return 0;
}
}
* Чтобы создать приложение C#, потребуется не больше минуты. Для создания программы, которая открывает окно и отвечает на нажатие кнопки, выполните описанные далее действия.
1. В меню Файл выберите команду Создать и щелкните Проект.
2. Удостоверьтесь, что выбран шаблон Приложение Windows Forms, в поле Имя введите MyProject и нажмите кнопку ОК.
Откроется конструктор Windows Forms с формой Windows. Это пользовательский интерфейс для создаваемого приложения.
3. В меню Вид щелкните Панель элементов, чтобы открыть список элементов управления.
4. Разверните список Стандартные элементы управления и перетащите элемент управления Подпись в форму.
5. Также, из списка панели элементов Стандартные элементы управления перетащите в форму кнопку и поместите ее рядом с подписью.
6. Дважды щелкните новую кнопку, чтобы открыть редактор кода. Visual C# вставил метод с именем button1_Click, который выполняется при нажатии кнопки.
7. Измените метод следующим образом.
private void button1_Click(object sender, EventArgs e)
{
label1.Text = "Hello, World!";
}
8. Нажмите клавишу F5 чтобы скомпилировать и запустить приложение.
При нажатии на кнопку теперь будет выводится текстовое сообщение. Поздравляем! Первое приложение C# создано.
* Комментарии предваряются //

Таблица позволяет сопоставить языки на примере простейшей программы (коды ОЧЕНЬ похожи), а комментарии дают взгляд на архитектуру языка и технологии, позволяющие получить исполняемый код.
В традиционную схему "листинг кода + компилятор = файл программы" вписываются только языки семейства Паскаля. А остальные работают по новой, существенно более сложной схеме, когда между файлом (а чаще множеством файлов) программы и операционной системой помещается еще дополнительная платформа. Для Java это JRE, для языков  Microsoft Visual Studio - .NET Framework. Платформа дает независимость от ОС, обогащает программиста множеством инструментов, но усложняет кодирование.

Двигаясь по совету Декарта от простого к сложному, в ближайших выпусках мы познакомимся с работой сначала простых IDE - BlackBox, PascalABC.NET и Dev-C++, а затем и более сложных Microsoft Visual Studio Express, Eclipse и NetBeans.
В качестве тестовой задачи возьмем разработку майевтических машин - системы окон, редактируемых пользователем и связанных гиперссылками, с выводом результатов работы в текстовый файл. При этом мы воспользуемся библиотеками и примерами программ, прилагаемыми к соответствующим IDE.

* * *

Под занавес - история о том, как тяжела и неказиста жизнь простого программиста:

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

* * *

Вот и всё... Вопросы и замечания mailto:feod@narod.ru

До новых встреч!
Юлий Феодоритов
 


В избранное