Языческие разборки.

 
1 2 3 4 5 6 7 14
+
-
edit
 

Valeri2

втянувшийся
Hi!

Давайте отделим настоящих программистов от всех остальных ;)
Заодно и языки сравним.

Итак, предлагается сказать, что делает нижеследующая программа.
Заранее знающим ответ - не подсказывать!

#define BeginProgram void main(int argc, char [b]argv[])
#define CloseBrace }
#define CommandLineArgument -1
#define Declare int i,j,n,Flag=1;
#define EndOfProgram return;
#define False 0;
#define ForLoop ;for
#define GetCommandLineArgument n=atoi(argv[1]);
#define i F1ag
#define If if
#define Increment ++
#define Is ==
#define LessThan *(c&64)[/b]
#define LessThanOrEqualTo !=
#define Modulo %
#define OpenBrace {
#define PossibleFactor j
#define PossiblePrime i
#define Possib1ePrime (c=getchar())
#define PrimeNumber (c^(!i*n%64));
#define Print putchar
#define SetTo =
#define SmallestPrime 2
#define True 1
#define Variables char c;
#define Zero i%j

BeginProgram
OpenBrace
Declare Variables
GetCommandLineArgument

ForLoop (PossiblePrime SetTo SmallestPrime ;
Possib1ePrime LessThanOrEqualTo CommandLineArgument ;
Increment PossiblePrime)
OpenBrace
F1ag SetTo True
ForLoop (PossibleFactor SetTo SmallestPrime ;
PossibleFactor LessThan PossiblePrime ;
Increment PossibleFactor)
If (PossiblePrime Modulo PossibleFactor Is Zero)
F1ag SetTo False

If (Flag Is True)
Print PrimeNumber
CloseBrace

EndOfProgram
CloseBrace
 
+
-
edit
 

=KRoN=
Balancer

администратор
★★★★★
Zeus>А с чего ты ожидаешь, что результат будет целым? При делении результат получается дробным - это закон математики.

При делении целых получится целое, при делении рациональных - рациональное и т.д.

Zeus>А вот если мне надо, скажем, переставить местами первую и вторую половину файла, да еще параллельно убрать непечатные символы?

open FILE, "in.txt" or die "Can't open file: $!";
@strings= $half=@#strings/2;
@out=@strings[0..$half];
push @out, @strings[$half+1..$#strings];
s/x00..x1f//g for @out;
open FILE ">out.txt" or die "Can't write file: $!";
print FILE "$_n" for @out;

Вот так это будет на Perl. Возможно, можно и короче, но это экспромт :)

=KRoN=>>О, женщины! Переспорить вас ну никак невозможно! У вас своя логика! :biggrin:
Zeus>А у сишников - своя ;)

О! Я понял! У Сишников мужская логика у Паскалистов - женская? :)

Zeus>while (a<b) do begin
Zeus>...
Zeus>end;

Ну, понятно. Большинство сишников тоже пишут
while(a[b] ) {
...
}

Так что ничуть не длиннее.
Я, правда, предпочитаю новой строчкой:
while(a[b] )
{
...
}

но набивать всё равно приходится меньше :)
Да к тому же Enter - такая большая кнопочка! :)
А отступы любой нормальный редактор (даже встроенные в FAR или DN) правильно делают. А вообще (не в тему, но) обожаю FAR'овский редактор с плагином colorer. Знает туеву хучу (там на десятки счёт идёт) синтаксических раскрасок (включая вложенные, например, PHP внутри HTML) до весьма экзотических (тот же Forth). Более того, подкрашивает многие синтаксические ошибки - скажем, на Perl мне очень помогает ;)

Zeus>И еще кстати: b^=a^=b^=a; как раз из практики. Ну-ка, сишники, догадайтесь, что здесь написано! Засекаю секундомер! :biggrin:

При чём тут сишники??
Это же элементарная алгоритмика - обмен двух переменных логическими операторами. Только нафиг столько ресурсов жрать-то??
{int tmp=a; a=b; b=tmp;}
даже не нужно заботиться о том, чтобы переменная tmp не была занята. Кстати, вот! На Паскале, чтобы задействовать временную переменнную мне придётся просматривать весь их список, чтобы узнать, не занята ли она уже. А если зевнуть? А на Си - искуственная область видимости - и всё опаньки!

Кстати, как там вообще в Паскале с областями видимости?
Что-то такое нехорошее помнится...
Могу я в процедуре/функции получать доступ к глобальной переменной, одноимённой с локальной?
 
+
-
edit
 

=KRoN=
Balancer

администратор
★★★★★
=KRoN=>>_Математика_ только одна. И она ничего не знает про вычислители ;)
au>Vot v etom ee prakticheskiy nedostatok :)

Математика наука сугубо непрактическая! :)
 

TEvg

аксакал

админ. бан
Зачем же столько define пихать?

нельзя чтоль вместо

BeginProgram
OpenBrace
Declare Variables
GetCommandLineArgument
....

написать

void main(int argc, char argv[])
{
int i,j,n,Flag=1;char c;
n=atoi(argv[1]);
.....

:eek::eek:
 

TEvg

аксакал

админ. бан
>При делении целых получится целое, при делении рациональных - рациональное и т.д.
Это где? В Ся? или в математике?

В паскале да целого результата надо использовать div!
Блин. клавиатура хруснула..
 
+
-
edit
 

=KRoN=
Balancer

администратор
★★★★★
=KRoN=>>Это особенно удивительно, учитывая, что 6 лет назад в НИИТП целый проект спутниковой связи работал с Forth'ом :)
Valeri2>А медики вообще на латыни говорят. Но язык - мертвый. Что касается наших НИИ - так у нас в железо зашивали поддержку Виртовских поделок. Свой путь.

А при чём тут наши только НИИ?
Форт сейчас на каких-то американских спутниках используется - были у меня примеры...

=KRoN=>>Не только. Что-то ближе DEC'овской архитектуры к нему сложно представить :) И для 68к он просто родной.
Valeri2>Да ну, бросьте. На дековской архитектуре родился язык Ц.

И что? Как это может повредить родственности Форту той архитектуры? Может, всё-таки, будем читать как написано, а не как читается? :)

=KRoN=>>Не уверен. Кроме того, есть куча реализаций с регистровой верхушкой стека. Базовые операции эффективно вписываются.
Valeri2>Так реализовывать стек можно как угодно. Но все равно - каждая команда учитывает результат предыдущей.

Для суперскаляров никто не отменял генерацию машкода :)
Чем SP-Forth и занимается, кстати.
Про его размеры и возможности я уже упоминал (кажется, в топике по Форту) - слабО повторить на другой идеологии?

Да, кстати, вылетело из головы - ПОЧТОВЫЙ СЕРВЕР, ПРОКСИ СЕРВЕР, антивирус, антиспам и другие программы для подключения предприятия к Сети (для Windows) работает на Форте.

Valeri2>Для того, чтобы затормозить процессор и делать любую задачу медленно, существуют более высокоуровневые языки. Форт - это как раз попытка сделать что-то простое и быстрое.

Ещё один китайский раз напомню, что Форт создавался не как быстрый или компактный язык, а как язык, позволяющий на порядок увеличить скорость разработки приложений. А уж его компактность оказалась приятным побочным эффектом. Что же до скорости и высокоуровневости - более гибкого языка, чем Форт в природе пока не существует. Какой ещё язык способен расширять свой синтаксис и языковые конструкции?

Valeri2>Да ну. Простой тест - возьмите страницу (экран) текста (без комментариев) и гляньте "орлиным взором". На С++ или Паскале это кое-что дает, видна структура. Фортовую прогу надо разбирать по операции, и каждая операция зависит от предыдущих.

Блин. Человек, всю жизнь евший варёную картошку однажды купил манго. Почистил, сварил (минут 20), растолок, полил подсолнечным маслом, подложил селёдочки... И сказал - манго ужасный мастдай, картошка вкуснее... Это почти 100%-я аналогия. Беда Форта в том, что он позволяет писать на нём как на классических ЯВУ. А это плохой стиль изначально, а на Форте он превращается вообще в ужас. На Форте надо учиться программировать отучаясь от стиля, привитого ЯВУ. Вот базовые парадигмы Форт-программирования:
- Каждое слово должно состоять из семи, плюс/минус двух слов;
- Недопустимы сложные ветвистые условные конструкции.
- Максимально развёрнутые имена слов и переменных, желательно с учётом общепринятых сокращений.
- "Идеальный редактор - у которого отсутствует функция копирования строк" - т.е. в программе не должно быть повторяющихся фрагментов.

Возможно, я что-то упустил ещё важное (эти вещи как-то автоматические). Кстати, в таком стиле писать можно (и нужно!) на любом другом языке, что я и стараюсь практиковать.
 
+
-
edit
 

=KRoN=
Balancer

администратор
★★★★★
>>При делении целых получится целое, при делении рациональных - рациональное и т.д.
TEvg>Это где? В Ся? или в математике?

Естественно в математике, блин!
Обычно, я стараюсь не вести дискуссии с теми, кто меня не слушает, а хватает какие-то обрывки слов...
 
+
-
edit
 

=KRoN=
Balancer

администратор
★★★★★
Владимир>void main(void){
Владимир> int a=2;
Владимир> int b=3;
Владимир> float c=1.0;
Владимир> printf("%f",a/(b/c));
Владимир>}

Владимир>В итоге на экране 0.000000 на BC 3.1!!?
Владимир>Компилятор, говорите..?

Наверное, всё же, не компилятор, а руки :)
Я сечас не поленился, проверил на BC++3.1 и Watcom C++ 10.0
И там и там - 0.666667
 

TEvg

аксакал

админ. бан
>Естественно в математике, блин!
Ну и что из этого?
В железе целочисленное и вещественное деление выполяется разными инструкциями. И в Паскале тоже. Это плохо?
Для меня лучше иметь два оператора / и div, чем объяснять компилятору тип чисел. да и слово float со скобочками требует больше нажатий на клавиши чем две команды паскаля (это к вопросу о хваленной компактности сишного кода.)

Кстати при делении целых яблок завсегда используют либо плавающие числа, либо дроби.
 

TEvg

аксакал

админ. бан
>Наверное, всё же, не компилятор, а руки
>Я сечас не поленился, проверил на BC++3.1 и Watcom C++ 10.0
И там и там - 0.666667

Это не компилятор, это язык, на котором оператор может означать разные вещи.
Нда.. а в Паскале таких неприятностей не бывает. Потому как нет неоднозначности.
 
+
-
edit
 

Voennich

опытный

2 TEvg
Толи я тормоз, толи Вы товаристч уперты до безобразия !

Если пишешь Integer A; это значит ЦЕЛОЕ. т.е. чт оты ничего не знаешь про дробные части. Если тебе нужны дроби то будь добр использовать тип данных с плавающей точкой либо ЯВНО объявлять что тебе нужен нецелый результат..

Посмотри(те) со стороны
логика паскаля:
Я использую целочисленные переменные, поэтому обычное деление выдаст мне дробный результат, но если мне нужен целочисленный результат то я буду использовать ОТДЕЛЬНЫЙ оператор div !!

логика С:
Я использую целочисленные переменные, поэтому обычное деление выдаст мне результат того же типа что и переменные. А если мне нужен точный результат с плавающей точкой, то я должен Явно указать Это. А не возлагать на компилятор работу по преобразованию Типов.

Кто логичнее ?

Кстати ИМХО если спор C vs Pascal (кстати выкладок по C++ и OP я что то не видел) целиком упирается в "/" и "DIV" то я позволю себе сделать вывод, что на С (++) Вы смотрели полглазом и не имеете понятия о предмете разговора.

точка
 

Zeus

Динамик

Ch>Самый лучший язык - это родной! :) Паскаль, русский...

Вот это совершенно правильно. Хоть и говорится, что язык - под задачу, но у современных Си++ и ОПаскаля практически одинаковые "целевые аудитории", и, как тут уже говорилось, нет ни одной задачи, которую бы можно было выполнить на одном и нельзя на другом. Причем с эффективностью, скажем политкорректно ;) , очень близкой. Так что очень часто эффективнее писать на том языке, который лучше знаешь, а не на том, который каким-то боком лучше для задачи подходит.
И животноводство!  
+
-
edit
 

=KRoN=
Balancer

администратор
★★★★★
Zeus>Наталья, ты прелесть! Правильно, надо учить этих обормотов хотя бы здравому смыслу :biggrin:

Странный какой-то у вас здравый смысл.
Лично у меня, если я порежу яблоко на две половинки целых яблок будет ноль. Может я во Вселенной с другими законами живу?

Zeus>смотрите и запоминайте железное правило: деление косой чертой ("/") в Паскале ВСЕГДА дает дробный результат,

Поэтому Паскалю приходится вводить кучу сущностей типа разных видов деления... Это, на самом деле хорошо, но эта идеология простирается дальше и приводит к разным типам строк, например... А в конечном счёте к учёту половинки яблока как целого... ;)
 

Zeus

Динамик

asoneofus>А вопрос насчёт кол-ва строк некорректен. Что считать строкой?

Да, кстати, интересный вопрос. Моя строка на ОР обычно соответствует 2-3 сишным ;) Особенно если сравнивать с теми, кто любит единственные { в отдельные строки выносить ;)

Да, я уже чувствую грохот бочек и предложения перевести на паскаль что-нибудь вроде b^=a^=b^=a; но, во-1, такие отдельные смысловые короткие конструкции я часто пишу в одну строчку, а во-2, сишникам, чтобы разобраться в нагромождении всяких разных символов {a++||z+=3} :) приходится обильно разбавлять их пробелами и пустыми строками, так что вопрос, кому по клавиатуре больше долбить не так очевиден, как кажется :biggrin:
И животноводство!  

Ch

втянувшийся
Мнение простого программиста О языках программирования Паскаль и Си

2 =KRoN=
Разные типы строк в Паскале - это только для совместимости с СИ (и Виндоуз). А родные Паскалевские строки очень понятны даже детсадовцам.
Zeus и Наталья - руле форевер!
 
+
-
edit
 

Valeri2

втянувшийся
Hi!

=KRoN=>Форт сейчас на каких-то американских спутниках используется - были у меня примеры...

Дак там как раз наверняка рисковые спецпроцессоры какие-нибудь. При создании языка он не декларировался в качестве решения для встраиваемых систем.

=KRoN=>И что? Как это может повредить родственности Форту той архитектуры? Может, всё-таки, будем читать как написано, а не как читается? :)

А Вы найдете для дека ось, на форте написанную.

Valeri2>>Так реализовывать стек можно как угодно. Но все равно - каждая команда учитывает результат предыдущей.

=KRoN=>Для суперскаляров никто не отменял генерацию машкода :)

Сгенерированный машкод унаследует от исходников все ту же тенденцию. Попробуйте код, сгенеренный для 8087, автоматически переделать под SSE. Тяжело это.

=KRoN=>Про его размеры и возможности я уже упоминал (кажется, в топике по Форту) - слабО повторить на другой идеологии?

Гы. Слабо на Форте написать интерпретатор Пролога, и чтобы в одну страницу умещался? Это далеко не самый лаконичный язык.

=KRoN=>Ещё один китайский раз напомню, что Форт создавался не как быстрый или компактный язык, а как язык, позволяющий на порядок увеличить скорость разработки приложений.

Да ну. И почему-то с самого начала на нем не пользовательские проги писали, я всякие тренажеры-эмуляторы. Спутники вон гоняют, итп. Там скоростью разработки никто не интересуется.

Valeri2>Что же до скорости и высокоуровневости - более гибкого языка, чем Форт в природе пока не существует. Какой ещё язык способен расширять свой синтаксис и языковые конструкции?

Многие. Только это считается плохим стилем. Хуже того, с точки зрения некоторых языков программа ничем не отличается от данных, и как данные и представлена. Огромный простор для извращений. Но на самом деле - главное читаемость.

=KRoN=>- Каждое слово должно состоять из семи, плюс/минус двух слов;

Это точно. А те слова, в свою очередь...

=KRoN=>- Недопустимы сложные ветвистые условные конструкции.

И тем не менее, это реальность нашей жизни.


Впрочем, Вы не переживайте. Скоро все будут писать на Яве. А тем, кто знает С/С++, будут доставаться только редкие случайные заказы. Ну там, СУБД написать, или ось какую-нибудь... :)
 
+
-
edit
 

Valeri2

втянувшийся
Hi!

TEvg>Зачем же столько define пихать?
TEvg>нельзя чтоль вместо
TEvg>BeginProgram

Вы не ответили на вопрос - что делает эта программа. Или Вы не настоящий программист? :)
 
+
-
edit
 

=KRoN=
Balancer

администратор
★★★★★
>>Я сечас не поленился, проверил на BC++3.1 и Watcom C++ 10.0
TEvg>И там и там - 0.666667
TEvg>Это не компилятор, это язык, на котором оператор может означать разные вещи.

Ох, горе ты луковое...
Ты АБСОЛЮТНО не читаешь о чём пишут.
Человек пишет, что у него на BC++3.1 получается неверный результат. Я говорю, что на том же (как и на другом - просто на всякий случай) компиляторе, в том же примере (метод vopy/paste) получается верный результат, а значит, человек где-то просто ошибся. При чём тут язык? При чём тут компилятор?

TEvg>Нда.. а в Паскале таких неприятностей не бывает. Потому как нет неоднозначности.

И где там была неоднозначность??

В общем, извини, но тебе я отвечать больше не буду - не люблю, когда человек СОВЕРШЕЕНО не слушает, что ему говорят...
 
RU Владимир Малюх #21.09.2001 10:30
+
-
edit
 
Валери2>А медики вообще на латыни говорят. Но язык - мертвый. Что касается наших НИИ - так у нас в железо зашивали поддержку Виртовских поделок. Свой путь.

Хех, тот самый наш Кронос был именно такой Модула-машинй. :) Примерно такой же как JVM, только не виртуальной а реальной железкой. Как научный эксперимент - даже забавно... Хотя, его производная вроде в какую-то бортовую машинку таки вылилась.
Maschinen muessen "idiotensicher" werden  
RU Владимир Малюх #21.09.2001 10:31
+
-
edit
 
Вот, чтобы разрядить накаливающиеся страсти :) Классический можно сказать текст.


В прошлом, во времена золотой эры ЭВМ было легко отличать мальчика от мужа (иначе их называют "сосунки" и "настоящие мужчины", соответственно). Тогда настоящие мужчины были те, кто понимал в программировании, с сосунки - те, кто не понимал. Настоящий программист легко произносил такие фразы, как "DO 10 I = 1, 10" или "АВОСТ", а все остальные нечто вроде "ЭВМ слишком сложна для меня" и "Я не могу полагаться на ЭВМ - они слишком безличны". Предыдущая работа, B. Feirstein, "Настоящие мужчины не употребляют фруктовый пирог", издание PocketBook, 1982, отмечает, что настоящие мужчины ни на что не полагаются и не боятся быть обезличенными.

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

Однако, существует разница между студентом-первокурсником, освоившим на ЭВМ игру в очко и настоящим программистом. Знание этих различий может помочь детям познать к чему стремиться - модель поведения, стереотоп отца. Это также поможет сохранить рабочие места для настоящих программистов.

Самый простой способ определить, кто является настоящим программистом - по используемому языку программирования. Настоящие программисты используют Фортран. Сосунки используют Паскаль. Никлауса Вирта, разработчика Паскаля, однажды спросили: "Как вы произносите свою фамилию?". "Вы можете обращаться ко мне по фамилии, произнося ее 'Вирт', или обращаться ко мне по значению, 'Ворт'", - ответил он. [Игра слов : Nicklaus Wirth произносится так же, как английское слово Worth - стоящий, ценный]

Исходя из этой ремарки, любой сразу поймет, что Никлаус Вирт - сосунок. Единственный механизм передачи параметров, принимаемый настоящим программистом - это передача параметров по значению, как это реализовано в компиляторах Фортрана G и H для ЭВМ IBM/370. Настоящим программистам для выполнения работы не нужны абстрактные концепции: для счастья им достаточно перфоратора, компилятора Фортран-IV и пива. Настоящие программисты пишут программы работы со списками, обработки строк, учета ресурсов (если они вообще это делают) и искусственного интелекта на Фортране.

Если вы не можете выполнить эти работы на Фортране, выполните их на ассемблере. Если же их нельзя выполнить на ассемблере, их не стоит делать вообще.

В последние несколько лет академиков от вычислительной техники вовлекли на стезю структурного программирования. Они утверждают, что программы становятся более понятными, если используются специальные языковые методы и конструкции. Они, конечно, не могут договориться между собой, какие точно конструкции следует использовать, а примеры, иллюстрирующие их точку зрения, всегда помещаются на одной страничке неизвестных журналов. Когда я окончил школу, я считал себя самым лучшим программистом в мире. Я мог написать непобедимую программу игры в крестики-нолики в трехмерном пространстве на пяти различных языках программирования, а также написать программу, состоящую из 1000 строк, которая бы работала. Затем я попал в реальный мир. Моей первой задачей было прочитать и понять фортрановскую программу емкостью 200000 строк, а затем увеличить скорость ее работы в 2 раза. Любой настоящий программист скажет вам, что все структурированное программирование мира не поможет вам решить проблемы вроде этой - решение этой задачи требует настоящего таланта.

Несколько наблюдений о настоящих приграммистах и структурном программировании:

настоящие программисты не боятся использовать GOTO;
настоящие программисты могут без смущения написать цикл DO на пяти страницах;
настоящие программисты любят арифметические операторы IF, т.к. их использование делает программу более интересной;
настоящие программисты используют самомодифицирующий код, особенно в тех случаях, когда это экономит 20 наносекунд в середине очень короткого цикла;
настоящие программисты не нуждаются в комментариях: текст программы все объясняет;
поскольку в Фортране отсутствуют структурные операторы IF, REPEAT ... UNTIL или CASE, настоящим программистам не нужно беспокоиться, что они их не используют; кроме того эти операторы можно при необходимости симулировать с помощью присваиваемых GOTO.
В последнее время в прессе муссируются структуры данных. Абстрактные типы данных, структуры, указатели, списки и строки стали популярны в определенных кругах. Вирт, сосунок, написал даже целую книгу ("Алгоритмы + Структуры данных = Программы", Prentice Hall, 1976 [русский перевод - изд. "Мир", 198?]), в которой утверждает, что можно написать программу на базе структур данных, не используя другие способы. Как все настоящие программисты знают, единственной полезной структурой данных является массив. Строки, списки, структуры и наборы - это все разновидности массивов и их можно рассматривать как массивы без усложнения вашего языка приграммирования. Хуже всего с этими хитрыми типами данных то, что вы должны их описывать, а настоящие языки программирования, как мы все знаем, обладают возможностью неявного задания типа, основанного на первой букве 6-символьного имени переменной.

В какой операционной системе работает настоящий программист? В CP/M? Боже сохрани! Помимо всего прочего, это в основном игрушка, а не операционная система. Даже маленькие старые дамы и абитуриенты могут работать в CP/M и понять ее.

UNIX, конечно, более сложная система - типичный последователь UNIX'а никогда не может запомнить, как на этой неделе называется команда PRINT - но когда он наконец доберется до нее, UNIX становится восхитительной видеоигрой. Люди не делают серьезных работ в системе UNIX, они рассылают шутки по всему миру по USENET или пишут приключенческие романы и научные статьи.

Нет, настоящий программист использует OS/370. Хороший программист может найти и понять описание только что полученного сообщения об ошибке IJK305I в руководстве по JSL. По-настоящему знаменитый программист может найти ошибки в распечатке 6-мегабайтной области памяти, не используя калькулятор шестнадцатиричной системы счисления.

OS/370 по-настоящему удивительная система. В ней можно уничтожить работы стоимостью несколько человеко-дней с помощью одного неправильно помещенного пробела, так что штат программистов всегда должен быть начеку. Наилучший способ общения с системой - через перфоратор. Некоторые утверждают, что в OS/370 существует система разделения времени, но после внимательного изучения я пришел к выводу, что они ошибаются.

Какие инструменты использует настоящий программист в своей работе? Теоретически, настоящий программист может запускать свои программы, набирая их на передней панели ЭВМ. В добрые старые времена, когда ЭВМ имели передние панели, этот метод использовался время от времени. Типичный настоящий программист знал наизусть начальный загрузчик в шестнадцатиричной системе и восстанавливал его с пульта, когда он разрушался его программой. Более того, память была памятью - ее содержимое не пропадало при выключении питания. В настоящее время память либо забывает факты, когда вы этого не хотите, либо помнит о вещах, которые давно следовало бы забыть. Ходит легенда, что Seymour Cray, изобретатель супер-ЭВМ Cray-1 и большинства ЭВМ фирмы Control Data, ввел с пульта наизусть первую операционную систему ЭВМ CDC 7600 при первом включении этой ЭВМ. Конечно, Cray - настоящий программист.

Одним из моих любимых настоящих программистов был Джим - системный программист фирмы Texas Instruments. Однажды, ему по междугородному телефону позвонил пользователь, чья система разрушилась в процессе очень важной работы. Джим исправил систему по телефону, заставляя пользователя набирать на передней панели ЭВМ команды обращения к диску, исправлять системные таблицы в шестнадцатиричной системе и считывать ему по телефону содержимое регистров. Мораль этой истории: хотя настоящий программист обычно включает в набор своих инструментов перфоратор и АЦПУ, он может в экстренных ситуациях обойтись передней панелью ЭВМ и телефоном.

В некоторых фирмах редактирование текстов программ больше не представляет собой очередь из 10 инженеров, ожидающих освобождения перфоратора 029. Более того, здание где я работал не содержит вообще ни одного перфоратора. Настоящий программист в таких условиях должен выполнять работу с помощью текстового редактора. Большинство систем предлагают на выбор несколько текстовых редакторов, но настоящий программист должен быть очень осторожен в выборе, отражающего его индивидуальность. Многие думают, что наилучшие текстовые редакторы в мире написаны в исследовательском центре фирмы Xerox в Palo Alto для работы с ЭВМ марок Alto и Dorado. К сожалению, ни один настоящий программист не будет работать на ЭВМ с операционной системой под названием Smalltalk (короткий разговор) и конечно же не будет беседовать с ЭВМ с помощью "мышки".

Некоторые из концепций этих редакторов фирмы Xerox были реа- лизованы в редакторах, работающих в операционных системах с более солидными названиями, такими как EMACS и VI. Дело в том, что настоящий программист считает плохим следующий принцип редактора: "То, что вы видите, то вы и получите". Настоящий программист желает редактор с принципом: "Вы это просили, вот вам"; т.е. редактор, который был бы сложным, шифрованным, мощным, непрощающим и опасным. Редактор TECO - чтобы быть точным.

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

Из-за этого настоящие программисты неохотно редактируют уже работающие программы. Они считают более простым непосредственно латать двоичный объектный код, используя прекрасную программу под названием SuperZap (или ее эквивалент на не-IBM машинах). Этот метод настолько хорош, что многие программы, работающие на ЭВМ фирмы ИБМ, не имеют ничего общего со своим собственным текстом на Фортране. В большом количестве случаев первоначальный символьный текст программы вообще не существует. Когда наступает время подправить такого рода программу, никакой администратор даже не думает послать на эту работу кого-либо, кроме настоящего программиста - никакой сосунок (структурный программист) не будут знать даже с чего начать. Это называется защита от несанкционированного доступа.

Некоторые не используемые настоящим программистом средства программирования включают:

препроцессоры Фортрана, такие как Mortran и Ratfor; эти кулинарные рецепты в программировании хороши для выпечки фруктового пирога;
отладчики для работы с текстом программы; настоящие про граммисты могут свободно читать распечатку оперативной памяти;
компиляторы с проверкой границ массива; эти компиляторы душат творчество, запрещая наиболее интересные варианты оператора EQUIVALENCE и препятствуют модификации операционной системы с помощью отрицательных индексов массивов. Кроме всего прочего, контроль границ массива не эффективен;
системы сопровождения и архивизации символьных текстов программ; настоящий программист хранит текст своих программ в закрытом на замок ящике (на перфокартах), т.к. владелец не может оставить свои программы без охраны.
Где же работает типичный настоящий программист? Какие программы достойны таких талантливых индивидумов? Вы можете быть уверены, что настоящий программист не умрет за написанием программы "Зарплата" на Коболе или сортируя список почтовых отправлений журнала People. Настоящий программист желает задачи с важностью землетрясения.

Настоящие программисты работают на национальную лабораторию в Лос-Аламосе, создавая программы на супер ЭВМ Cray-1, моделирующие атомную бомбу. Они так же работают на Агенство по Национальной Безопасности, расшифровывая передачи русских.

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

Одна из приводящих в благоговейный трепет работ настоящих программистов выполнена в Лаборатории реактивного движения, Калифорния. Многие знают всю операционную систему космических кораблей "Пионер" и "Вояджер" наизусть. С помощью симбиоза больших наземных фортрановских программ и маденьких бортовых ассемблерных, они могут совершать невероятные чудеса в навигации и импровизации - такие, как попасть в окно шириной 10 км в кольце Сатурна после 6-ти лет полета в космосе и починить или обойти неисправные сенсорные платформы, радиопередатчики или аккумуляторы. Утверждают, что один настоящий программист умудрился засунуть прграмму распознавания образов в несколько сот байт неиспользованной памяти корабля "Вояджер", которая осуществляла поиск, обнаружила и сфотографировала новую луну Юпитера.

Одна из планируемых задач для корабля "Галлилей" - использовать притяжение Марса на траектории полета к Юпитеру. Эта траектория проходит в 80 ± 3 км от поверхности Марса. Никто не собирается доверить паскалевской программе или программисту такую навигационную задачу.

Многие из настоящих программистов всего мира работают на правительство США, в основном в Министерстве Обороны. Так и должно быть. Однако, недавно на небосклоне настоящих программистов появилась черная туча. Кажется, что кто-то из высокопоставленных сосунков в Министерстве Обороны решил, что все оборонные программы должны быть написаны на некоем великом унифицированном языке ADA. Некоторое время казалось, что ADA была предназначена стать языком, который шел вразрез со всеми правилами настоящего программирования. Это язык со структурой, типами данных, строгим синтаксисом и точками с запятой. Короче, он был разработан для сдерживания творчества типичного настоящего программиста. К счастью, язык одобряемый Министерством Обороны, обладает достаточно интересными свойствами, которые делают его приемлемым - он невероятно сложен, включает в себя способы порчи операционной системы и перераспределения памяти, и Эдгар Дейкстра (Edsgar Dijkstra) не любит его. Дейкстре, как вы должны знать, автору краеугольной работы по методологии программирования "GOTO - считать вредными", апплодируют программисты на Паскале и подобные им сосунки. Да и потом, закоренелый настоящий программист может написать фортрановскую программу на любом языке.

Настоящий программист может пойти на компромисс со своими принципами и работать над вещами немного более тривиальными, чем распад жизни, при условии, что здесь достаточно платят. Например, существует несколько настоящих программистов, разрабатывающих видео-игры в Atari. Но они сами в игры не играют. Настоящий программист знает, как выиграть у машины, и в этом нет пряного удовольствия. Каждый работающий в LucasFilm является настоящим программистом, потому, что нужно быть сумасшедшим, чтобы отвергнуть деньги 50-ти милионов поклонников Звездных войн (Star Wars).

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

В общем случае настоящий программист развлекается так же, как и работает - с помощью ЭВМ. Он не перестает удивляться тому, что его работодатель платит ему за то, что он все равно бы делал для развлечения, хотя он достаточно осторожен, чтобы высказать это мнение вслух. Иногда настоящий программист выходит из конторы, чтобы глотнуть свежего воздуха или кружечку-другую пива. Существует несколько признаков, по которым можно узнать настоящего программиста за пределами машинного зала:

на вечеринке настоящие программисты это те, кто сидит в углу, обсуждая защиту операционных систем и как ее обойти;
на футбольном матче настоящий программист сравнивает ход игры с "проигровками", распечатанными на фальцованной 11- или 14-дюймовой бумаге;
на пляже настоящий программист рисует блок-схемы на песке;
настоящий программист ходит в диско-клуб, чтобы посмотреть мигание лампочек;
на похоронах настоящий программист изрекает : "Бедный Джордж. А ведь он почти заставил работать программу сортировки, когда его хватил инсульт";
в бакалейном магазине настоящий программист настаивает на собственноручной проверке банок на лазерном аппарате, т.к. он не верит, что операторы могут правильно отперфорировать данные с первого раза.

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

Типичный настоящий программист живет перед дисплеем ЭВМ. Вокруг этого дисплея расположены листинги программ, над которыми он когда-либо работал. Они складированы в кучи приблизительно в хронологическом порядке на каждой плоской поверхности конторы. Вы так же обнаружите полдюжины, или около того, наполовину выпитых чашек с холодным кофе. Иногда в кофе можно обнаружить плавающие "хабарики" сигарет. В некоторых случаях в чашках находится выжатый апельсин. И только в тех случаях, когда программист не очень хорош, вы увидите экземпляры руководства OS JSL и принципов работы, открытых на особо интересных страницах. Приклеенный клейкой лентой, на стене висит распечатанный на АЦПУ календарь с собачкой Снуппи за 1969 год. На полу разбросаны обертки от хлеба с сыром и земляными орехами (такого, который становится черствым уже в пекарне, так что не может стать хуже в торговых автоматах). И, наконец, в верхнем левом ящике стола, под коробочкой Oreos, находится линейка-шаблон для вычерчивания блок-схем, оставленная предыдущим владельцем стола. Настоящие программисты пишут программы, а не документацию, которую они оставляют штату сопровождения.

Настоящий программист может работать по 30, 40 и даже 50 часов непрерывно, под интенсивным нажимом. На самом деле, он и предпочитает так работать. Плохое время отклика не беспокоит настоящего программиста; он получает возможность вздремнуть между трансляциями. Если график выполнения работы не очень жесткий, то настоящий программист предпочитает делать свою жизнь более захватывающей, работая первые 9 недель над маленькой, но интересной частью проблемы. Затем, он заканчивает выполнение всей остальной части за 2 или 3 50-часовых марафона. Это не только впечатляет начальника, но и создает удобное оправдание не делать документацию. В общем случае, ни один настоящий программист не работает с 9 до 5, за исключением тех, кто работает в ночную смену. Настоящие прграммисты не носят галстуков. Настоящие программисты приходят на работу вовремя - к обеду. Настоящий программист может знать, а может и не знать имя своей супруги. Он, однако, знает наизусть таблицу ASCII (или EBCDIC) символов. Настоящие программисты не умеют готовить. Бакалейные магазины не часто открыты в 3 часа ночи, так что они должны уметь выживать на печенье и кофе.

Заглядывая в будущее, некоторые настоящие программисты считают, что новейшее поколение программистов имеет не такие же взгляды на жизнь, как их старшие товарищи. Многие из них никогда не видели передней панели ЭВМ. Едва-ли кто-либо из выпускников в наши дни может производить вычисления в шестнадцатиричной системе без калькулятора. Сегодняшние выпускники колледжей слабы - они защищены от реальностей жизни символьными отладчиками, редакторами текстов, которые подсчитывают скобки, и лояльными к пользователю операционными системами. Хуже того, некоторые из этих патентованных ученых умудрились "защититься" без изучения Фортрана! Неужели нам предписано свыше стать отраслью фанатиков UNIX'а и паскалевских программистов?

Из собственного опыта, я думаю, можно смело сказать, что будущее прекрасно для настоящих программистов. Ни OS/370, ни Фортран не высказывают ни каких признаков отмирания, несмотря на усилия программистов на Паскале. Даже такие изощренные уловки, как добавление конструкций структурного программирования в Фортран, провалились. Да, конечно, некоторые изготовители ЭВМ выпустили компиляторы Фортрана-77, но каждый из них оставил возможность перейти в режим компилятора Фортрана-66 с помощью удаления одной перфокарты - чтобы компилировать циклы DO как предписано богом.

Даже UNIX может быть не так уж плох для настоящих программистов, как в прошлом. Последняя реализация UNIX'а обладает потенциальными возможностями, ценными для любого настоящего программиста. Она имеет два различных и слегка несовместимых пользовательских интерфейса, аркан и сложный драйвер терминала, и виртуальную память. Если пренебречь тем, что он структурный, то даже программирование на языке "C" может быть по достоинству оценено настоящим программистом. В конце концов, в нем нет проверки типов, имена переменных имеют 7 (10?, 8?) символов в длину и введен полезный тип данных "указатель" (pointer). Получается, как будто соединены воедино лучшие части языка Фортран и Ассемблера, не говоря уже о более творческих применениях оператора #DEFINE.

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

Да здравствует Фортран!
Maschinen muessen "idiotensicher" werden  
RU Владимир Малюх #21.09.2001 10:39
+
-
edit
 
=KRoN=>>>_Математика_ только одна. И она ничего не знает про вычислители ;)
au>>Vot v etom ee prakticheskiy nedostatok :)

=KRoN=>Математика наука сугубо непрактическая! :)

Сторго говоря математика - совсем не наука. Наука все же изучает нечто реальное существующее. :)
Maschinen muessen "idiotensicher" werden  
+
-
edit
 

=KRoN=
Balancer

администратор
★★★★★
Valeri2>А Вы найдете для дека ось, на форте написанную.

Зачем? он сам себе ОС. Собственно, он и создавался как язык-ОС. У него даже идеология словарей сильно смахивает на старые идеологии файловых систем.

Valeri2>Гы. Слабо на Форте написать интерпретатор Пролога, и чтобы в одну страницу умещался? Это далеко не самый лаконичный язык.

Я видел реализацию идеологии Пролога где-то на 12..15 экранов (это старый формат представлния данных - цельный блок 64x16 символов, т.е. 1к, заполненность текстом обычно ~30..40% (остальное - пробелы) - т.е. по нынешним меркам что-то ~4..5кб. исходных текстов. Только мне тогда это было не интересно :) (да и сейчас - тоже).

Valeri2>Да ну. И почему-то с самого начала на нем не пользовательские проги писали, я всякие тренажеры-эмуляторы. Спутники вон гоняют, итп. Там скоростью разработки никто не интересуется.

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

Вот:




По словам Ч. Мура, основной целью создания нового языка было повышение собственной производительности. Он пишет: "Традиционные языки программирования не обеспечивали желаемой для меня мощности, легкости и гибкости. Я подсчитал, что за 40 лет очень хороший программист может написать 40 программ, а мне хотелось гораздо больше. В мире столько вещей, которые нужно сделать, что мне требовался инструмент, способный помочь в этом" (по словам Мура, в своем окончательном виде язык повысил его производительность в 10 раз).  




Valeri2>Многие. Только это считается плохим стилем. Хуже того, с точки зрения некоторых языков программа ничем не отличается от данных, и как данные и представлена. Огромный простор для извращений. Но на самом деле - главное читаемость.

Нет, ты не понял.
Ты можешь средствами Си сделать из Си - Си++?
Ты можешь из обычного Паскаля сделать Дельфи?
На Форте такие преобразования возможны.
Форт - метаязык - язык для создания проблемно ориентированных языков. Насколько я знаю, больше метаязыков нет.

=KRoN=>>- Каждое слово должно состоять из семи, плюс/минус двух слов;
Valeri2>Это точно. А те слова, в свою очередь...

Да. Это если ты хочешь легко и быстро разбираться в программе. Это элементарная психология и против неё ты не попрёшь. Человек способен одновременно оперировать максимум семью (плюс/минус двумя) токенами.

=KRoN=>>- Недопустимы сложные ветвистые условные конструкции.
Valeri2>И тем не менее, это реальность нашей жизни.

Которую очень легко избегать, выполняя предыдущий пункт.

Valeri2>Впрочем, Вы не переживайте. Скоро все будут писать на Яве.

Её ОЧЕНЬ стараются внедрить ИСКУССТВЕННО. Увы, это гиблый ход. Кстати, уже то, что MS отвернулась от Java для неё большой удар.

Valeri2>А тем, кто знает С/С++, будут доставаться только редкие случайные заказы. Ну там, СУБД написать,

Шо? Субд на C++? Я что, связки типа PHP+SQL или VB+SQL отменили? Как на этом фоне смотрится Си++?
 
+
-
edit
 

=KRoN=
Balancer

администратор
★★★★★
Владимир Малюх>Наука все же изучает нечто реальное существующее. :)

Это частный вид естественных наук :)
 

TEvg

аксакал

админ. бан
>Вы не ответили на вопрос - что делает эта программа. Или Вы не настоящий программист?
Уважаемый Valeri2 перепишите без define - скажу, а так мне лень мозги напрягать.

>Впрочем, Вы не переживайте. Скоро все будут писать на Яве
Щас. :) Книжечка есть 95 года выпуска, а там утверждение - через два года не будет Ся, а только Java, Java одна Java кругом :)

>Ох, горе ты луковое...
>Ты АБСОЛЮТНО не читаешь о чём пишут.
>Человек пишет, что у него на BC++3.1 получается неверный результат. Я говорю, что на том же (как и на другом - просто на всякий случай) компиляторе, в том же примере (метод vopy/paste) получается верный результат, а значит, человек где-то просто ошибся. При чём тут язык? При чём тут компилятор?
Объясняю - в сях оператор может выполнять разные вещи, а чтобы человек понял что будет, ему надо посмотреть тип переменных, которые где-то там (хрен знает где) описаны. А компилятор невиновен :)
>а значит, человек где-то просто ошибся
Ставлю пять против одного что в строчке printf("%f",a/(b/c));
А в Паскале ошибится труднее и в этом его превосходство перед другими языками.

>И где там была неоднозначность??
значок "/" например. Не всегда можно сказать что он делает.
 
+
-
edit
 

Valeri2

втянувшийся
Hi!

=KRoN=>Я видел реализацию идеологии Пролога где-то на 12..15 экранов

Так вот на Лиспе это - одна страничка примера в учебнике, небольшого формата. Впрочем, и С тоже... может всякое. Сколько на Форте будет занимать прога, играющая в шашки? Вариант на С - 2832 байта. Это - именно мощь и гибкость языка.

Valeri2>>Многие. Только это считается плохим стилем. Хуже того, с точки зрения некоторых языков программа ничем не отличается от данных, и как данные и представлена. Огромный простор для извращений. Но на самом деле - главное читаемость.

=KRoN=>Ты можешь из обычного Паскаля сделать Дельфи?
=KRoN=>На Форте такие преобразования возможны.

На процедурных языках и Форте мир не зациклился. Вы поосторожней со словами "единственный в мире".

=KRoN=>Форт - метаязык - язык для создания проблемно ориентированных языков. Насколько я знаю, больше метаязыков нет.

О господи, какая детская наивность. Бизон и Yacc Вас устроят?

Valeri2>>Впрочем, Вы не переживайте. Скоро все будут писать на Яве.

=KRoN=>Её ОЧЕНЬ стараются внедрить ИСКУССТВЕННО. Увы, это гиблый ход. Кстати, уже то, что MS отвернулась от Java для неё большой удар.

Я просто общаюсь со своими знакомыми, живущими в штатах. Больше половины программеров пишут на Яве, курсы по плюсам сворачивают в довольно престижных ВУЗах. А MS для дотнета, по тамошним летним слухам, набирал кофеинщиков как на пожар.

Valeri2>>А тем, кто знает С/С++, будут доставаться только редкие случайные заказы. Ну там, СУБД написать,
=KRoN=>Шо? Субд на C++? Я что, связки типа PHP+SQL или VB+SQL отменили? Как на этом фоне смотрится Си++?

Уважаемый, если Вы не чувствуете разницы между БД и СУБД - может не стоит так шашкой махать, а?

Владимир Малюх> Хех, тот самый наш Кронос был именно такой Модула-машинй

Кстати, "наш" не означает ли Вашу причастность?

TEvg>Уважаемый Valeri2 перепишите без define - скажу, а так мне лень мозги напрягать.

Всем лень напрягать, лишь бы пальцами по клаве стучать. Возьмите м прогоните препроцессором - будете удивлены.
 
1 2 3 4 5 6 7 14

в начало страницы | новое
 
Поиск
Настройки
Твиттер сайта
Статистика
Рейтинг@Mail.ru