?

Log in

No account? Create an account
ещё о Дейкстре; первая программа - Поклонник деепричастий [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: 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: 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: 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: 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)