И вот был разработан первый компилятор. Эту программу назвали Assembler, что переводится как "сборщик". Писать на нем практически так же сложно, как и в машинных кодах, однако теперь уже использовались не числа, а понятные, человеку слова.
Текст на рисунке можно разделить на три колонки:
- адрес инструкции;
- машинный код инструкции;
- код на языке Ассемблера.
Теперь все та же команда копирования регистров выглядела так: mov еах, ebx. В данном случае mov — это команда языка программирования, которая происходит от английского слова move, двигать, еах и ebx — имена регистров. Получается, что приведенная выше команда может читаться как двигать в регистр еах значение из ebx. Да, код на ассемблере не совсем нагляден, но зато намного удобнее, чем то же самое, но в машинных кодах.
Вроде все прекрасно и удобно, но почему-то среди программистов возникли споры и разногласия. Кто-то воспринял новый метод с удовольствием. А кто-то говорил, что машинные коды лучше.
Любители языка Assembler хвалили компилятор за то, что программировать стало проще и быстрее, а противники утверждали, что программа, написанная в кодах, работает быстрей. Говорят, что эти споры доходили до драк и иногда лучшие друзья становились врагами.
В принципе, и те и другие были правы. На языке Assembler действительно программу писать легче и быстрей, но программа, написанная в машинных кодах, работала быстрее и более гибко. Когда программа пишется в машинных кодах, то программист ничем не ограничен, а при работе с ассемблером наши руки более связаны. Мы не всегда можем повлиять на результат и зависим от того, как он захочет превратить наш текст в программу и какие инструкции процессора при этом будет использовать.
Тогда никто не мог себе представить, чем же все может закончиться. Но время показало свое. С помощью Assembler программы писались быстрее, а это один из основных факторов успеха любой программы на рынке. Люди начинают пользоваться тем продуктом, который выходит на рынок первым. Даже если более поздний вариант лучше, человека трудно переубедить перейти на другую версию. Здесь начинает играть большую роль фактор привычки. К тому же, когда программист напишет свою первую версию программы в машинных кодах, программист на языке Assembler выпустит уже пару новых версий.
Вот так и получилось, что те, кто программировал на языке Assembler, превратились в убегающих вперед, а те, кто программировал в машинных кодах, превратились в постоянно догоняющих. В конце концов, первые убежали настолько "далеко", что вторые не смогли догнать и вынуждены были или перейти на Assembler или отойти от программирования совсем.
С этого момента начался бум. Языки программирования стали появляться один за другим. Так появились С, ADA, FoxPro, Fortran, Basic, Pascal и др. Некоторые из них были предназначены только для школьников или обучения, другие были ориентированы на профессиональных программистов. И тут споры перенеслись в другую плоскость — какой язык лучше. Некоторые говорили, что это Pascal, другие утверждали, что С, ну а кое-кто утверждал, что это Basic. Этот спор длится уже около 30 лет, и конца ему не видно. При этом все спорные вопросы разделились на две части.
- Какой язык лучший?
- Что лучше — язык высокого уровня или низкого?
Спор по первому пункту не может закончиться до сих пор. Каждый пытается доказать, что его язык программирования самый мощный, удобный и создает самый быстрый программный код. Мне кажется, что этот спор не закончится никогда. В принципе, такое положение дел устраивает всех, потому что это своеобразная конкуренция. Благодаря ей происходит развитие языков программирования, и мы быстро продвигаемся вперед.
Так все же, какой язык лучше? На этот вопрос можно дать ответ, но немного позже.
Наиболее интересным был спор: "Что лучше — язык высокого уровня или низкого?" Язык низкого уровня — это тот, который ориентирован на команды процессора, т. е. Assembler. К языкам высокого уровня относят С, Pascal, Basic и другие (на то время это были структурные языки программирования, они имели более высокий уровень по сравнению с ассемблером). Они ориентированы на людей и создают им максимум удобства при написании программ. Этот спор проходил в той же манере, как и спор между любителями Assembler и любителями программирования в машинных кодах. Только теперь приверженцы языка Assembler утверждали, что их код самый быстрый, а любители языков высокого уровня утверждали, что они напишут программу быстрей, чем самый лучший программист на языке Assembler.
Спор продолжался достаточно долгое время. И опять победила скорость разработки и "удобство" языка программирования. Любителям Assembler пришлось отступить, потому что теперь они превратились в " догоняющих".
Конечно же, нельзя сказать, что машинные коды и Assembler окончательно ушли из нашей жизни. Они используются до сих пор, но в очень ограниченном количестве. Язык Assembler используется только в качестве вставок для языков высокого уровня, а машинные коды используются для написания того, что не может сделать компилятор (да и для написания самого компилятора они могут потребоваться).
Ушедшие технологии живут и будут жить, но рядовой программист очень редко встречается с ними.
Следующей ступенью стало объектно-ориентированное программирование. Язык С превратился в С++, Pascal превратился в Object Pascal и т. д. И снова борьба. И снова скорость разработки против скорости выполнения программного кода. Опять споры, драки и оскорбления.
Война длилась несколько лет. Сколько времени было потрачено в спорах, сколько волос было вырвано на голове в процессе доказательств силы именно его программного кода. А в результате победила скорость и удобство разработки, т. е. объектно-ориентированное программирование (ООП).
Последней крупной революцией, происходящей в программировании, считается переход на визуальное программирование. Этот переход происходит прямо на наших глазах. Визуальность дает нам еще более удобные средства разработки для более быстрого написания кода, но проигрывает ООП по быстроте работы. Вот почему многие начинающие программисты стоят на перекрестке, не зная, какой язык выбрать.
Лидером в разработке визуальных языков программирования является Borland, а приверженцем ООП остается Microsoft. Конечно же, Билл Гейтс пытается встроить в свои языки визуальность, но она примитивна по сравнению с такими гигантами, как Delphi, Kylix или С++ Builder. Это связано с изначально неправильной разработкой MFC (Microsoft Foundation Classes— Основные Классы Microsoft), которые не могут работать визуально. Нужна глобальная переработка кода, которую почему-то не хотят делать. Вот народ и стоит на двух атомных бомбах, ожидая взрыва одной из них. Как вы думаете, какая бомба рванет? Что победит — скорость разработки или скорость кода? Я не буду отвечать на этот вопрос. История говорит сама за себя, а мы подождем подтверждения этому.
К моменту написания этих строк, победитель уже начинает вырисовываться. Классический С++ уходит в сторону, а вместо него появляется С# и мощные визуальные средства, идеология которых была позаимствована у Java и Delphi. Но Delphi уже давно визуальный и ориентирован на объекты и в нашей стране получил большую популярность, а С# только пытается захватить рынок.
Считается, что прогресс не будет стоять на одном месте и переход на новые технологии программирования рано или поздно состоится. Поэтому я уже перешел на Delphi. Если вы хотите успеть за прогрессом, то тоже обязаны вступить в партию любителей Borland и его подразделения по средствам разработки CodeGear. Выбирайте любой из его компиляторов, и вы не ошибетесь. Для вас есть все, что угодно, — Delphi, JBuilder, Kylix или С++ Builder. Как видите, у корпорации Borland есть визуальные варианты всех языков, и они действительно лучшие.
Осталось только ответить на вопрос: "Какой язык программирования лучше?" Я уже несколько лет пытаюсь ответить на этот вопрос, но окончательного решения вынести не могу. Даже у того же Visual С+ + от Microsoft есть свои плюсы, хотя я его не очень люблю за корявость объектной модели. Как это ни странно, но положительные стороны есть у всех. Вопрос остается только за тем, какие программы будут создаваться? Здесь можно дать примерно такую градацию.
- Если вы будете писать базы данных, программы общего значения или утилиты, то ваш язык Delphi или С++ Builder.
- Если это игры, то желательно Visual С++ плюс знание Assembler. Но это не значит, что нельзя использовать Delphi или С++ Builder. В этих средах вы потеряете не намного больше в скорости работы, поэтому в большинстве игр можно не обращать внимания на эту потерю. Если правильно использовать свои знания, то и на самом медленном и слабом языке программирования можно создать шедевр.
- Если это будут драйверы и работа с "железом", где критичен размер файла, ваш язык чистый С или Assembler.
И все же большую массу программ занимают утилиты и базы данных. А тут визуальность необходима, если вы хотите оказаться впереди. Визуальные языки будут жить и за ними будущее. На протяжении всей этой книги будет рассматриваться лучший (это на мой взгляд, и он может отличаться от других) язык программирования — Delphi.
Корпорация Microsoft тоже движется в сторону визуальности и простоты разработки программных продуктов. Об этом говорит их новая платформа .NET и язык разработки С#.