?

Log in

ещё о Дейкстре; первая программа - Поклонник деепричастий [entries|archive|friends|userinfo]
Anatoly Vorobey

[ website | Website ]
[ userinfo | livejournal userinfo ]
[ archive | journal archive ]

Links
[Links:| English-language weblog ]

ещё о Дейкстре; первая программа [авг. 8, 2002|12:03 am]
Anatoly Vorobey
[Настроение |nostalgicnostalgic]

(контекст)

Я время от времени вспоминаю это его высказывание:
Практически невозможно научить хорошо программировать студентов, ориентированных первоначально на БЕЙСИК: как потенциальные программисты они умственно оболванены без надежды на исцеление.


Первая нетривиальная программа в моей жизни была мной написана на Бейсике.

Ещё и какая забавная была программа: она вычисляла число пи до любого знака после запятой (это в теории; на практике больше тысячи было нереально, Бейсик начинал задыхаться). Делала она это, суммируя тригонометрический ряд, который сходился к пи с точностью до коэффициента. Притом самый естественный ряд такого рода -- а именно 1 + 1/3 - 1/5 + 1/7 - 1/9 + 1/11 .... = pi/4 -- использовать было нельзя, так как он сходится до невозможности медленно. Поэтому я пошёл в библиотеку, зарылся в справочники и нашёл быстро сходящуюся формулу. Это было разложение по арктангенсу: пользуемся тем, что pi = 16*arctan(1/5) - 4*arctan(1/239), а эти два арктангенса раскладываем в ряды по формуле arctan(x) = x - x3/3 + x5/5 - x7/7 + .... Такой метод давал больше одного значимого знака на каждую итерацию. Цифры я хранил в бейсиковском массиве, и ещё там были какие-то оптимизации, не помню.

Мне было, кажется, тринадцать лет. Я был безмерно горд и счастлив.


А афоризму Дейкстры этому я не верю, и никогда не верил. Он, несомненно -- забавен? остроумен? не знаю, какое слово подобрать взамен идеально подходящего здесь английского cute -- но одновременно глубоко неверен.
СсылкаОтветить

Comments:
[User Picture]From: sergeax
2002-08-07 02:11 pm
Современный Visual Basic в исполнении Microsoft к Бэйсику прошлых лет со строчками 10 20 30 и т.п. отношения не имеет вообще никакого. Это язык, практически эквивалентный C или Java, с более жестким синтаксисом (что отчасти даже хорошо).
(Ответить) (Thread)
[User Picture]From: zc2
2002-08-07 02:41 pm

вещи не поддающиеся сравнению

Фразу "практически эквивалентный C или Java" я не могу простить. Вы уж извините...
(Ответить) (Parent) (Thread)
[User Picture]From: anton
2002-08-07 03:21 pm

Re: вещи не поддающиеся сравнению

А как это назвать, если они сделали все языки одинаковыми. C#, который в душе java, записанный операторами васика?
(Ответить) (Parent) (Thread)
[User Picture]From: sergeax
2002-08-07 03:28 pm

Re: вещи не поддающиеся сравнению

Вот сразу видно человека, незнакомого с понятием "эквивалентность языков программирования по Дейкстре".
(Ответить) (Parent) (Thread) (Развернуть)
[User Picture]From: shaulreznik
2002-08-07 02:20 pm
Не имеется ли в виду оператор GOTO, который действительно способен развратить нафиК будущего программера?

А я в 12 лет рисовал концентрические круги. И был счастлив :-)))

10 FOR R=5 TO 50 STEP 5
20 CIRCLE (100, 100, R)
30 NEXT R
(Ответить) (Thread)
[User Picture]From: rydel23
2002-08-07 02:25 pm
Класс. Я тоже.

Под Yamahu?

CP/M (предшевственица MS-DOS) + MSX Basic зашитый в ROM.

Хотя эти круги и в Корветском байсике были...
(Ответить) (Parent) (Thread) (Развернуть)
[User Picture]From: avva
2002-08-07 02:28 pm

Ну дык. Я до сих пор помню, как меня научили называть команды:

РУН
СКРЕЕН
КИРКЛЕ
(Ответить) (Parent) (Thread) (Развернуть)
[User Picture]From: zc2
2002-08-07 02:27 pm

в защиту Дейкстры ;-)

IMHO, смысл высказывания Дейкстры можно трактовать как верный с одной оговоркой: если под "ориентированных первоначально" имелось в виду выбранная самими студентами ориентация на то что попроще, разумеется при равной доступности других средств программирования. А Дейкстра, наверное, и представить себе не мог, чтобы талантливые математики пользовались бейсиком и вообще допотопной техникой как это происходило повсеместно в совке.
(Ответить) (Thread)
(Удалённый комментарий)
[User Picture]From: syarzhuk
2002-08-07 02:39 pm
Согласен - с поправкой. Все процедурные языки - C[++], Перл, Джава, Бейсик, Паскаль, PL/1, Фортран, xBase - таки да, взаимозаменяемы. Но функциональные языки - это нечто другое. Я так и не смог освоить Лисп и APL, хотя и не сильно старался :)
(Ответить) (Parent) (Thread) (Развернуть)
(Удалённый комментарий)
(Удалённый комментарий)
(Удалённый комментарий)
(Удалённый комментарий)
[User Picture]From: kukutz
2002-08-08 01:29 am
Зная любой из C/Java/Pascal/PHP/Perl etc. овладеть другим за два дня возможно.

Но овладеть SQL за два дня в объеме большем, чем SELECT *, UPDATE, INSERT представляется мне малореальным.
(Ответить) (Parent) (Thread) (Развернуть)
From: prince_felix
2002-08-08 02:43 am

Позвольте оспорить.

Извините, но Ваше утверждение по поводу двух дней очень спорно. Возможно выучить язык за два дня. Но применять конкретный язык для решения конкретных задач... Из "замеров" на работе мы получили 2 месяца. В этот срок человек обучается новому языку, находит особенности этого языка, находит и обучается использовать библиотеки, ориентируется в документации и т.д.

Конечно, если подходить формально, то все это к языку не относится, но ведь мы говорим о практике?
(Ответить) (Parent) (Thread)
(Удалённый комментарий)
(Удалённый комментарий)
(Удалённый комментарий)
(Удалённый комментарий)
[User Picture]From: syarzhuk
2002-08-07 02:43 pm
13? Я в первом варианте диплома считал функцию Лагранжа по определению: интеграл фи-маленького по бесконечному промежутку. Считаем интеграл от -1 до +1, потом от -2 до +2, потом от -4 до +4 - пока разница между получаемыми таким образом значениями не станет меньше заданной погрешности. В результате у меня одна точка считалась по часу. Потом совершенно случайно нашел в какой-то книге аппроксимирующий полином, в результате все стало летать. Когда рассказал научному руководителю, он схватился за голову - почему, мол, раньше не спросил? А как я мог спросить о том, чего не знал?
(Ответить) (Thread)
[User Picture]From: cema
2002-08-07 08:52 pm
Это мне напомнило, извините, как один мой почти что одноклассник писал программу для раскраски карты (соседние страны разными цветами) таким образом, что для N стран у него было N вложенных циклов. Интересно не то, что он получил за это дело пятёрку, а то, что он быстро понял моё (очень дружелюбное, впрочем) объяснение, почему так делать не надо.
(Ответить) (Parent) (Thread)
From: ex_ilyavinar899
2002-08-07 03:08 pm
Моя первая программа была игра "Жизнь", написанная на PL/I. Мне было столько же лет.
(Ответить) (Thread)
[User Picture]From: ullr
2002-08-07 04:21 pm

Oh, congrats,
my first one was in PL/1 too (tick-tack-toe)
though I was only 10...
(Ответить) (Parent) (Thread)
[User Picture]From: eugen
2002-08-07 03:34 pm
Приятно всё это читать.
Мои первые программы были на ДВК-2.
(Ответить) (Thread)
[User Picture]From: anton
2002-08-07 03:42 pm

Не удержусь и я

А моя первая программа была написана на компьютере "Нафаня" - советском (?) аналоге ZX Spectrum. Эхх..
(Ответить) (Thread)
[User Picture]From: pingva
2002-08-07 03:48 pm
Практически невозможно научить хорошо программировать студентов, ориентированных первоначально на БЕЙСИК: как потенциальные программисты они умственно оболванены без надежды на исцеление.

А я еще слышал что-то такое про то, как Вирт на курсы Паскаля не брал фортранщиков. Пол, покалеченные на всю жизнь, структурно писать не научаться.
(Ответить) (Thread)
[User Picture]From: ullr
2002-08-07 04:30 pm

"Real programmers don't use Pascal"

A oni prosilis'?
(Ответить) (Parent) (Thread)
[User Picture]From: pingva
2002-08-07 04:47 pm

Re: "Real programmers don't use Pascal"

осторожней, щас набегут толпой фанаты Delfi и нас замесят :)
(Ответить) (Parent) (Thread) (Развернуть)
[User Picture]From: alexcohn
2002-08-07 11:54 pm
я бы, в согласии с Максимом, сформулировал тезис Дейкстры более общо:
Практически невозможно научить хорошо программировать студентов, ориентированных первоначально на конкретный язык программирования: как потенциальные программисты они умственно оболванены без надежды на исцеление.
Дело в том, что в те времена, когда он это сказал, обучение программированию шло двумя путями: либо давали Бейсик как истину в последней инстанции (a.k.a. computer programming), либо говорили о структурах программ и данных, не привязываясь к языку (a.k.a. computer science). Впрочем, иногда вместо Бейсика давали COBOL или RPG - согласитесь, это еще хуже.
(Ответить) (Thread)
From: vasja_iz_aa
2002-08-08 01:38 pm
>А афоризму Дейкстры этому я не верю, и никогда не верил.

И я не верю. И в первую очередь, потому, что не считаю бейсик чем то ушербным. Есть разнообразные сферы человеческой деятельности, безусловно относяшиеся к категории "программирование". И в некоторых из них бейсикоподобные языки как раз удобны. В написании управляющих программ для новых ХайТек приборов, например.
Когда то, быть может, он и был справедлив. Когда слово "программирование" действительно хорошо описывало предполагаемую деятельность персонажей, потому как все занимались примерно сходными вещами в сходных условиях. Может быть, не знаю: не совсем уверен, что такое время было.
(Ответить) (Thread)
[User Picture]From: Вадим Сухотин
2014-06-23 06:19 pm

Мой опыт подтверждает афоризм Дейкстры

Мне как-то пришлось дорабатывать программу на FoxPro, начатую другим программистом. Так вот в ней бейсиковские "уши" торчали на каждом шагу. Стиль программы был отвратителен.
1. Имена переменных соответствовали бейсиковским правилам: одна буква или одна буква и одна-две цифры.
2. Были заведены четыре массива для временных переменных разного назначения: v, w, w1, w2. При этом были ещё и переменные с именами вида v1, v5 и т.п., и эти переменные при чтении программы легко было спутать с похожими по названию элементами массива.
3. Процедуры и функции, за исключением одной (и то, судя по всему, позаимствованной у кого-то), не имели параметров. Значения в них передавались через общее пространство переменных. Если надо было передать значение в процедуру, перед её вызовом присваивалось значение определённой переменной, а в процедуре эта переменная анализировалась. В результате перед одним из вызовов этой процедуры тот товарищ забыл присвоить переменную, и процедура работала неправильно.

Я много сил потратил, чтобы сделать из этой программы что-то удобоваримое, с нормальными "говорящими" именами переменных, с параметрами у подпрограмм, с нормальными отступами и т.п.

Хотя, возможно, всё зависит от конкретного человека ?

Edited at 2014-06-23 18:22 (UTC)
(Ответить) (Parent) (Thread)
From: posic
2002-08-11 01:37 am

dva voprosa ne po delu

1. Znaete li Vy pro raskhodyaschiesya ryady Ejlera-Maklorena? Mne kazhetsya, chto eto samyj bystryj posob vychislyat' chislo \pi i emu podobnye

2. (zlostnyj offtopik) Ne znakomy li Vy sluchajno s yuzerom oblomov_jerusal? On menya zaintrigoval svoej zagadochnost'yu.
(Ответить) (Thread)