Инструменты пользователя

Инструменты сайта


msx:basic_dialogue_programming_language:008

Различия

Здесь показаны различия между двумя версиями данной страницы.

Ссылка на это сравнение

Предыдущая версия справа и слева Предыдущая версия
Следующая версия
Предыдущая версия
msx:basic_dialogue_programming_language:008 [2022-09-19 21:45]
GreyWolf [VIII.2.3.3. Типы тестов]
msx:basic_dialogue_programming_language:008 [2023-02-19 16:21] (текущий)
GreyWolf
Строка 5: Строка 5:
 <WRAP group  99%> <WRAP group  99%>
 <WRAP half column> \\ </​WRAP>​ <WRAP half column> \\ </​WRAP>​
-<WRAP half column><​WRAP ​justify>+<WRAP half column><​WRAP ​right>
 \\ Я услышал и забыл. \\ \\ Я услышал и забыл. \\
 Я увидел и запомнил. \\ Я увидел и запомнил. \\
Строка 102: Строка 102:
 <WRAP group  99%> <WRAP group  99%>
 <WRAP half column> \\ </​WRAP>​ <WRAP half column> \\ </​WRAP>​
-<WRAP half column><​WRAP ​justify>+<WRAP half column><​WRAP ​right>
 Чтобы избегать //​ошибок//,​ надо набираться //​опыта//,​ Чтобы избегать //​ошибок//,​ надо набираться //​опыта//,​
 чтобы набираться //​опыта//,​ надо делать //​ошибки//​. чтобы набираться //​опыта//,​ надо делать //​ошибки//​.
Строка 115: Строка 115:
 <WRAP group  99%> <WRAP group  99%>
 <WRAP half column> \\ </​WRAP>​ <WRAP half column> \\ </​WRAP>​
-<WRAP half column><​WRAP ​justify>+<WRAP half column><​WRAP ​right>
 Самая коварная уловка дьявола состоит в том, ​ Самая коварная уловка дьявола состоит в том, ​
 чтобы убедить нас, будто его не существует. чтобы убедить нас, будто его не существует.
Строка 134: Строка 134:
 <WRAP group  99%> <WRAP group  99%>
 <WRAP half column> \\ </​WRAP>​ <WRAP half column> \\ </​WRAP>​
-<WRAP half column><​WRAP ​justify>+<WRAP half column><​WRAP ​right>
 Если вам кажется,​ что ситуация улучшается,​ Если вам кажется,​ что ситуация улучшается,​
 значит,​ вы чего–то не заметили! значит,​ вы чего–то не заметили!
Строка 178: Строка 178:
 <WRAP group  99%> <WRAP group  99%>
 <WRAP half column> \\ </​WRAP>​ <WRAP half column> \\ </​WRAP>​
-<WRAP half column><​WRAP ​justify>+<WRAP half column><​WRAP ​right>
 Программисту не всегда нужна ЭВМ, иногда полезнее удобное кресло и спокойная обстановка. Программисту не всегда нужна ЭВМ, иногда полезнее удобное кресло и спокойная обстановка.
 <WRAP rightalign>​ <WRAP rightalign>​
Строка 234: Строка 234:
 <WRAP group  99%> <WRAP group  99%>
 <WRAP half column> \\ </​WRAP>​ <WRAP half column> \\ </​WRAP>​
-<WRAP half column><​WRAP ​justify>+<WRAP half column><​WRAP ​right>
 Никогда не берите на корабль два хронометра,​ берите один или, если есть возможность,​ три, но не два. Никогда не берите на корабль два хронометра,​ берите один или, если есть возможность,​ три, но не два.
 <WRAP rightalign>​ <WRAP rightalign>​
Строка 243: Строка 243:
 <WRAP group  99%> <WRAP group  99%>
 <WRAP half column> \\ </​WRAP>​ <WRAP half column> \\ </​WRAP>​
-<WRAP half column><​WRAP ​justify>+<WRAP half column><​WRAP ​right>
 …путём тестирования никогда нельзя установить отсутствие ошибок в программе. Дело в том, что невозможно определённо утверждать,​ что при проверке найдена последняя ошибка в программе;​ следовательно,​ никогда нельзя быть уверенным,​ что может быть найдена и первая ошибка …путём тестирования никогда нельзя установить отсутствие ошибок в программе. Дело в том, что невозможно определённо утверждать,​ что при проверке найдена последняя ошибка в программе;​ следовательно,​ никогда нельзя быть уверенным,​ что может быть найдена и первая ошибка
 <WRAP rightalign>​ <WRAP rightalign>​
Строка 296: Строка 296:
 <WRAP group  99%> <WRAP group  99%>
 <WRAP half column> \\ </​WRAP>​ <WRAP half column> \\ </​WRAP>​
-<WRAP half column><​WRAP ​justify>+<WRAP half column><​WRAP ​right>
 Вы должны радоваться,​ что мост разрушился,​ — я планировал построить ещё тринадцать по тому же проекту. Вы должны радоваться,​ что мост разрушился,​ — я планировал построить ещё тринадцать по тому же проекту.
 <WRAP rightalign>​ <WRAP rightalign>​
Строка 390: Строка 390:
 <WRAP group  99%> <WRAP group  99%>
 <WRAP half column> \\ </​WRAP>​ <WRAP half column> \\ </​WRAP>​
-<WRAP half column><​WRAP ​justify>+<WRAP half column><​WRAP ​right>
 Перевести программу из хорошего состояния в отличное неизмеримо труднее,​ чем из плохого в удовлетворительное. Перевести программу из хорошего состояния в отличное неизмеримо труднее,​ чем из плохого в удовлетворительное.
 <WRAP rightalign>​ <WRAP rightalign>​
Строка 494: Строка 494:
 <WRAP group  99%> <WRAP group  99%>
 <WRAP half column> \\ </​WRAP>​ <WRAP half column> \\ </​WRAP>​
-<WRAP half column><​WRAP ​justify>+<WRAP half column><​WRAP ​right>
 О несчастном случае мой подзащитный впервые узнал лишь тогда, когда этот случай произошёл. О несчастном случае мой подзащитный впервые узнал лишь тогда, когда этот случай произошёл.
 <WRAP rightalign>​ <WRAP rightalign>​
Строка 544: Строка 544:
 <WRAP group  99%> <WRAP group  99%>
 <WRAP half column> \\ </​WRAP>​ <WRAP half column> \\ </​WRAP>​
-<WRAP half column><​WRAP ​justify>+<WRAP half column><​WRAP ​right>
 Если Вы думаете,​ что разработка и кодирование программы — вещь трудная,​ то Вы ещё ничего не видели. Если Вы думаете,​ что разработка и кодирование программы — вещь трудная,​ то Вы ещё ничего не видели.
 <WRAP rightalign>​ <WRAP rightalign>​
Строка 583: Строка 583:
   - <​WRAP>​ Используйте средства отладки только как вспомогательные. Не применяйте эти средства вместо того, чтобы обдумывать задачу.   - <​WRAP>​ Используйте средства отладки только как вспомогательные. Не применяйте эти средства вместо того, чтобы обдумывать задачу.
  
-**Ясно, что такие средства как трассировка ([[#VIII.3.1. Трассировка|п.VIII.3.1.]]) и аварийная печать ([[#VIII.3.1. Трассировка|п.VIII.3.2.]]) отражают случайный подход к отладке.**+**Ясно, что такие средства как трассировка ([[#n831|раздел ​VIII.3.1.]]) и аварийная печать ([[#n832|раздел ​VIII.3.2.]]) отражают случайный подход к отладке.**
  
 Эксперименты показали,​ что программисты,​ избегающие применения средств отладки,​ даже при отлаживании незнакомых им программ выполняют её лучше, чем те, кто пользуется этими средствами. Эксперименты показали,​ что программисты,​ избегающие применения средств отладки,​ даже при отлаживании незнакомых им программ выполняют её лучше, чем те, кто пользуется этими средствами.
Строка 591: Строка 591:
 Пользуйтесь им только как последним средством. Наиболее общей ошибкой,​ которую допускают начинающие программисты,​ занимающиеся отладкой,​ является попытка решить задачу посредством внесения в программу экспериментальных изменений ("Я не знаю, что неправильно,​ но я изменю этот оператор ''​IF''​ и посмотрю,​ что получится"​). Этот абсолютно неверный подход не может даже рассматриваться как отладка;​ он основан на случайности. Экспериментирование не только уменьшает вероятность успеха,​ но часто и усложняет задачу,​ поскольку при этом в программу вносятся новые ошибки. Пользуйтесь им только как последним средством. Наиболее общей ошибкой,​ которую допускают начинающие программисты,​ занимающиеся отладкой,​ является попытка решить задачу посредством внесения в программу экспериментальных изменений ("Я не знаю, что неправильно,​ но я изменю этот оператор ''​IF''​ и посмотрю,​ что получится"​). Этот абсолютно неверный подход не может даже рассматриваться как отладка;​ он основан на случайности. Экспериментирование не только уменьшает вероятность успеха,​ но часто и усложняет задачу,​ поскольку при этом в программу вносятся новые ошибки.
 </​WRAP> ​ </​WRAP> ​
-  - <​WRAP>​ Если Вы зашли в тупик, отложите рассмотрение программы. Наше подсознание является мощным механизмом решения проблем. То, что мы часто приписываем вдохновению,​ оказывается всего лишь выполненной подсознанием работой по решению задачи,​ тогда как наша сознательная деятельность в это время связана с чем–нибудь другим,​ например с едой, прогулкой или просмотром кинофильма. Если Вы не можете локализовать ошибку в приемлемые сроки (предположительно за 30 минут для небольших программ и за несколько часов для больших),​ прекратите поиски и займитесь каким–нибудь другим делом, так как эффективность Вашей работы, во всяком случае, ​значительно снизится. Проблему следует "​забыть"​ до тех пор, пока Вы либо подсознательно не найдёте её решения,​либо отдохнёте и будете готовы вновь рассмотреть симптомы ошибки.+  - <​WRAP>​ Если Вы зашли в тупик, отложите рассмотрение программы. Наше подсознание является мощным механизмом решения проблем. То, что мы часто приписываем вдохновению,​ оказывается всего лишь выполненной подсознанием работой по решению задачи,​ тогда как наша сознательная деятельность в это время связана с чем–нибудь другим,​ например с едой, прогулкой или просмотром кинофильма. Если Вы не можете локализовать ошибку в приемлемые сроки (предположительно за 30 минут для небольших программ и за несколько часов для больших),​ прекратите поиски и займитесь каким–нибудь другим делом, так как эффективность Вашей работы значительно снизится. Проблему следует "​забыть"​ до тех пор, пока Вы либо подсознательно не найдете ее решения,​ либо отдохнете и будете готовы вновь рассмотреть симптомы ошибки. 
 </​WRAP>​ </​WRAP>​
 И наконец,​ **если Вы окончательно зашли в тупик, то изложите задачу кому–нибудь ещё**. И наконец,​ **если Вы окончательно зашли в тупик, то изложите задачу кому–нибудь ещё**.
  
-Сделав это, Вы, вероятно,​ обнаружите что–то новое. Часто случается так, чтопросто пересказав задачу хорошему слушателю,​ Вы вдруг найдёте решение без какой–либо помощи с его стороны.+Сделав это, Вы, вероятно,​ обнаружите что–то новое. Часто случается так, что просто пересказав задачу хорошему слушателю,​ Вы вдруг найдёте решение без какой–либо помощи с его стороны.
  
 Далее мы рассмотрим некоторые,​ ставшие уже классическими,​ способы получения программистом промежуточных результатов,​ вырабатываемых отлаживаемой программой. Далее мы рассмотрим некоторые,​ ставшие уже классическими,​ способы получения программистом промежуточных результатов,​ вырабатываемых отлаживаемой программой.
Строка 604: Строка 605:
 <WRAP group  99%> <WRAP group  99%>
 <WRAP half column> \\ </​WRAP>​ <WRAP half column> \\ </​WRAP>​
-<WRAP half column><​WRAP ​justify>+<WRAP half column><​WRAP ​right>
 Всякий необходимо причиняет пользу,​ употреблённый на своём месте. Напротив того: упражнения лучшего танцмейстера ​ в химии неуместны;​ советы опытного астронома в танцах глупы. Всякий необходимо причиняет пользу,​ употреблённый на своём месте. Напротив того: упражнения лучшего танцмейстера ​ в химии неуместны;​ советы опытного астронома в танцах глупы.
 <WRAP rightalign>​ <WRAP rightalign>​
Строка 713: Строка 714:
 <WRAP group  99%> <WRAP group  99%>
 <WRAP half column> \\ </​WRAP>​ <WRAP half column> \\ </​WRAP>​
-<WRAP half column><​WRAP ​justify>+<WRAP half column><​WRAP ​right>
 Щёлкни кобылу в нос — она махнёт хвостом. Щёлкни кобылу в нос — она махнёт хвостом.
 <WRAP rightalign>​ <WRAP rightalign>​
Строка 736: Строка 737:
 <WRAP group  99%> <WRAP group  99%>
 <WRAP half column> \\ </​WRAP>​ <WRAP half column> \\ </​WRAP>​
-<WRAP half column><​WRAP ​justify>+<WRAP half column><​WRAP ​right>
 —Вам известны мои методы. Примените их! —Вам известны мои методы. Примените их!
 <WRAP rightalign>​ <WRAP rightalign>​
-—//​Конан Дойль. Собака Баскервилей//​+—//А.Конан Дойль. Собака Баскервилей//​
 </​WRAP></​WRAP>​ </​WRAP></​WRAP>​
 </​WRAP></​WRAP>​ </​WRAP></​WRAP>​
Строка 752: Строка 753:
 <WRAP group  99%> <WRAP group  99%>
 <WRAP half column> \\ </​WRAP>​ <WRAP half column> \\ </​WRAP>​
-<WRAP half column><​WRAP ​justify>+<WRAP half column><​WRAP ​right>
 Разделяй и властвуй! Разделяй и властвуй!
 <WRAP rightalign>​ <WRAP rightalign>​
Строка 804: Строка 805:
 Кстати,​ нажатие клавиш <​key>​CTRL+STOP</​key>​(если,​ конечно,​ Вы не запретите подобное прерывание!) выполняет те же действия,​ что и ввод оператора ''​STOP''​ в Вашу программу,​ только,​ разумеется,​ программную строку,​ в которой произошло прерывание,​ вам будет трудно угадать! Кстати,​ нажатие клавиш <​key>​CTRL+STOP</​key>​(если,​ конечно,​ Вы не запретите подобное прерывание!) выполняет те же действия,​ что и ввод оператора ''​STOP''​ в Вашу программу,​ только,​ разумеется,​ программную строку,​ в которой произошло прерывание,​ вам будет трудно угадать!
  
-Заметим,​ что во время прерывания Вы можете изменять значения переменных. Однако учтите,​ чтоесли "​что–либо"​(например,​ оператор ''​CLEAR''​) делает продолжение программы,​ прерванной по оператору ''​STOP'',​ бессмысленным,​ то любая попытка выполнить команду ''​CONT''​ приводит к сообщению+Заметим,​ что во время прерывания Вы можете изменять значения переменных. Однако учтите,​ что если "​что–либо"​(например,​ оператор ''​CLEAR''​) делает продолжение программы,​ прерванной по оператору ''​STOP'',​ бессмысленным,​ то любая попытка выполнить команду ''​CONT''​ приводит к сообщению
 <WRAP centeralign>"?​ Can't CONTINUE"​ \\ <WRAP centeralign>"?​ Can't CONTINUE"​ \\
 //​("​Нельзя продолжить"​)//​. </​WRAP>​ //​("​Нельзя продолжить"​)//​. </​WRAP>​
Строка 843: Строка 844:
 <WRAP group  99%> <WRAP group  99%>
 <WRAP half column> \\ </​WRAP>​ <WRAP half column> \\ </​WRAP>​
-<WRAP half column><​WRAP ​justify>+<WRAP half column><​WRAP ​right>
 Don't worry, computer bugs don't byte. Don't worry, computer bugs don't byte.
 <WRAP rightalign>​ <WRAP rightalign>​
Строка 850: Строка 851:
 </​WRAP></​WRAP>​ </​WRAP></​WRAP>​
  
-Кроме сбоев в работе компьютера из–за неисправностей каких–либо его узловимеется достаточно много причин,​ по которым происходит прерывание вычислений по программе и при нормально работающем компьютере.Перечислим некоторые из них:+Кроме сбоев в работе компьютера из–за неисправностей каких–либо его узлов имеется достаточно много причин,​ по которым происходит прерывание вычислений по программе и при нормально работающем компьютере.Перечислим некоторые из них:
   - компьютеру "​предложено"​ поделить на нуль;   - компьютеру "​предложено"​ поделить на нуль;
   - при вычислениях получено число большее,​ чем допустимо;​   - при вычислениях получено число большее,​ чем допустимо;​
Строка 1195: Строка 1196:
 <WRAP group  99%> <WRAP group  99%>
 <WRAP half column> \\ </​WRAP>​ <WRAP half column> \\ </​WRAP>​
-<WRAP half column><​WRAP ​justify>+<WRAP half column><​WRAP ​right>
 Следствие 17: некомпетентность не знает преград ни во времени,​ ни в пространстве. Следствие 17: некомпетентность не знает преград ни во времени,​ ни в пространстве.
 <WRAP rightalign>​ <WRAP rightalign>​
Строка 1218: Строка 1219:
   - Некоторые ошибки нельзя выявить,​ разбивая программу на части и отлаживая эти части по отдельности. Ошибка возникает лишь при взаимодействии этих частей. Таким образом,​ стратегия "​разделяй и властвуй"​ не всегда оказывается применимой.   - Некоторые ошибки нельзя выявить,​ разбивая программу на части и отлаживая эти части по отдельности. Ошибка возникает лишь при взаимодействии этих частей. Таким образом,​ стратегия "​разделяй и властвуй"​ не всегда оказывается применимой.
   - Иногда внесение каких–либо изменений в программу с целью локализации ошибки (например,​ промежуточная печать данных,​ трассировка и т.п.) приводит к исчезновению проявлявшихся до этого признаков ошибки или к их изменению. Получается своеобразный заколдованный круг, когда всякая попытка выявить ошибку лишь маскирует её, не давая никакой информации. Эта ситуация схожа с ситуацией,​ имеющей место в физике микромира:​ использование какого–либо прибора для наблюдения процесса полностью изменяет этот процесс.   - Иногда внесение каких–либо изменений в программу с целью локализации ошибки (например,​ промежуточная печать данных,​ трассировка и т.п.) приводит к исчезновению проявлявшихся до этого признаков ошибки или к их изменению. Получается своеобразный заколдованный круг, когда всякая попытка выявить ошибку лишь маскирует её, не давая никакой информации. Эта ситуация схожа с ситуацией,​ имеющей место в физике микромира:​ использование какого–либо прибора для наблюдения процесса полностью изменяет этот процесс.
-  - Иногда,​ изменяя программу методом проб и ошибок,​ можно устранить ошибку,​ т.е. она перестаёт как–либо проявлять себя. При этом остаётся абсолютно непонятным,​ в чем же она заключалась.+  - Иногда,​ изменяя программуметодом проб и ошибок,​ можно устранить ошибку,​ т.е. она перестаёт как–либо проявлять себя. При этом остаётся абсолютно непонятным,​ в чем же она заключалась.
   - <​WRAP>​   - <​WRAP>​
 <WRAP group  99%> <WRAP group  99%>
 <WRAP half column> \\ </​WRAP>​ <WRAP half column> \\ </​WRAP>​
-<WRAP half column><​WRAP ​justify>+<WRAP half column><​WRAP ​right>
 Происходит не просто нечто более странное,​ чем мы предполагали:​странность происходящего превышает и то, чего мы не смели предположить. Происходит не просто нечто более странное,​ чем мы предполагали:​странность происходящего превышает и то, чего мы не смели предположить.
 <WRAP rightalign>​ <WRAP rightalign>​
Строка 1246: Строка 1247:
 повторил свой приказ. Паук снова побежал. Затем юный экспериментатор оторвал пауку ноги и, снова положив его на стол, скомандовал:​ "​Бегом!"​. Но на сей раз паук остался неподвижен. "​Вот видите,​ — заявил торжествующий мальчик,​ — стоило пауку оторвать ноги, как он сразу оглох. повторил свой приказ. Паук снова побежал. Затем юный экспериментатор оторвал пауку ноги и, снова положив его на стол, скомандовал:​ "​Бегом!"​. Но на сей раз паук остался неподвижен. "​Вот видите,​ — заявил торжествующий мальчик,​ — стоило пауку оторвать ноги, как он сразу оглох.
  
-А "​окончив"​ отладку,​ вспомните,​ чтокогда известного датского скульптора Торвальдсена (1768 или 1770–1844) спросили мнение об одной из его скульптур,​ он ответил:​ "Я не вижу в ней недостатков,​ из чего заключаю,​что+А "​окончив"​ отладку,​ вспомните,​ что когда известного датского скульптора Торвальдсена (1768 или 1770–1844) спросили мнение об одной из его скульптур,​ он ответил:​ "Я не вижу в ней недостатков,​ из чего заключаю,​что
 у меня хромает воображение"​. у меня хромает воображение"​.
  
Строка 1254: Строка 1255:
 <WRAP group  99%> <WRAP group  99%>
 <WRAP half column> \\ </​WRAP>​ <WRAP half column> \\ </​WRAP>​
-<WRAP half column><​WRAP ​justify>+<WRAP half column><​WRAP ​right>
 Программа,​ свободная от ошибок,​ есть абстрактное теоретическое понятие. Программа,​ свободная от ошибок,​ есть абстрактное теоретическое понятие.
 <WRAP rightalign>​ <WRAP rightalign>​
Строка 1289: Строка 1290:
 <WRAP group  99%> <WRAP group  99%>
 <WRAP half column> \\ </​WRAP>​ <WRAP half column> \\ </​WRAP>​
-<WRAP half column><​WRAP ​justify>+<WRAP half column><​WRAP ​right>
 Когда кто выходит из дому, пусть поразмыслит о том, что намерен делать,​ а когда снова войдёт в дом, пусть поразмыслит о том, что сделал. Когда кто выходит из дому, пусть поразмыслит о том, что намерен делать,​ а когда снова войдёт в дом, пусть поразмыслит о том, что сделал.
 <WRAP rightalign>​ <WRAP rightalign>​
Строка 1389: Строка 1390:
 Последовательно–модульное и иерархическое (для более сложных программ) строение,​ как наиболее простые по логическим связям,​ являются теми образцами,​ к которым необходимо стремиться при разработке программы. Допустимыми вариантами являются иерархически–хаотическое и, может быть, монолитно–модульное. Последовательно–модульное и иерархическое (для более сложных программ) строение,​ как наиболее простые по логическим связям,​ являются теми образцами,​ к которым необходимо стремиться при разработке программы. Допустимыми вариантами являются иерархически–хаотическое и, может быть, монолитно–модульное.
  
-Помимо модульностидругим свойством,​ которое содействует предупреждению появления в программе ошибок,​ является структурированность.+Помимо модульности другим свойством,​ которое содействует предупреждению появления в программе ошибок,​ является структурированность.
  
 Обычно //​структурированной//​ называется программа,​ логическая структура которой отвечает некоторым жёстко установленным требованиям. Обычно //​структурированной//​ называется программа,​ логическая структура которой отвечает некоторым жёстко установленным требованиям.
Строка 1400: Строка 1401:
 <WRAP group  99%> <WRAP group  99%>
 <WRAP half column> \\ </​WRAP>​ <WRAP half column> \\ </​WRAP>​
-<WRAP half column><​WRAP ​justify>+<WRAP half column><​WRAP ​right>
 Структура (от лат. "​structura"​ — "​строение,​ расположение,​ порядок"​),​ совокупность устойчивых связей объекта,​ обеспечивающих его целостность и тождественность самому себе, т.е. сохранение основных свойств при различных внешних и внутренних изменениях. Структура (от лат. "​structura"​ — "​строение,​ расположение,​ порядок"​),​ совокупность устойчивых связей объекта,​ обеспечивающих его целостность и тождественность самому себе, т.е. сохранение основных свойств при различных внешних и внутренних изменениях.
 <WRAP rightalign>​ <WRAP rightalign>​
Строка 1415: Строка 1416:
 увеличить это число в 5÷6 раз по сравнению с традиционными способами программирования. увеличить это число в 5÷6 раз по сравнению с традиционными способами программирования.
  
-Заметиммежду прочим,​ что при структурном программировании становится излишним вычерчивание //​блок–схем//​. Блок–схема вполне структурированной программы настолько тривиально проста,​ что о программе можно сказать больше по тексту,​ чем по блок–схеме.+Заметим между прочим,​ что при структурном программировании становится излишним вычерчивание //​блок–схем//​. Блок–схема вполне структурированной программы настолько тривиально проста,​ что о программе можно сказать больше по тексту,​ чем по блок–схеме.
  
 Итак, структурное программирование представляет собой некоторые принципы написания программ в соответствии со строгой дисциплиной и имеет целью облегчить процесс тестирования,​ повысить производительность труда Итак, структурное программирование представляет собой некоторые принципы написания программ в соответствии со строгой дисциплиной и имеет целью облегчить процесс тестирования,​ повысить производительность труда
Строка 1479: Строка 1480:
 <WRAP group  99%> <WRAP group  99%>
 <WRAP half column> \\ </​WRAP>​ <WRAP half column> \\ </​WRAP>​
-<WRAP half column><​WRAP ​justify>+<WRAP half column><​WRAP ​right>
 Вы говорите,​ что я повторяюсь. \\ Вы говорите,​ что я повторяюсь. \\
 Но я повторю. Но я повторю.
 <WRAP rightalign>​ <WRAP rightalign>​
-—//Т.Эллиот//​+—//​Т.Эллиот//​
 </​WRAP></​WRAP>​ </​WRAP></​WRAP>​
 </​WRAP></​WRAP>​ </​WRAP></​WRAP>​
Строка 1507: Строка 1508:
 2: S2 2: S2
   …   …
-m: Sm</​code>​|Выполнить предложение Si(толькоесли значение K=i, причём i равно либо 1, либо 2, … либо m (выбор по значению)|<​code>​+m: Sm</​code>​|Выполнить предложение Si(только если значение K=i, причём i равно либо 1, либо 2, … либо m (выбор по значению)|<​code>​
    ON K GOTO N1, N2, …, Nm:    ON K GOTO N1, N2, …, Nm:
    GOTO s    GOTO s
Строка 1521: Строка 1522:
 Дейкстра продолжает:​ "Я пришёл к убеждению,​ что предложение ''​GOTO''​ должно быть устранено из всех языков программирования "​высокого уровня"​ (т.е. отовсюду,​ за исключением,​ возможно,​ простых машинных кодов)"​. Дейкстра продолжает:​ "Я пришёл к убеждению,​ что предложение ''​GOTO''​ должно быть устранено из всех языков программирования "​высокого уровня"​ (т.е. отовсюду,​ за исключением,​ возможно,​ простых машинных кодов)"​.
  
-<WRAP centeralign>​**Однако сейчас стало ясным, что программирование без оператора ''​GOTO''​ — это ещё не структурное программирование. Можно написать программу без оператора перехода,​ логическая структура которой тем не менее будет неудачной. И, наоборот,​ существуют ситуации,​ в которых переход является лаконичным,​ простым и ясным средством,​ в то время как другие подходы сравнительно неудачны**</​WRAP>​+<WRAP centeralign>​**Однако сейчас стало ясным, что программирование без оператора ''​GOTO''​ — это ещё не структурное программирование. Можно написать программу без оператора перехода,​ логическая структура которой тем не менее будет неудачной. И, наоборот,​ существуют ситуации,​ в которых переход является лаконичным,​ простым и ясным средством,​ в то время как другие подходы сравнительно неудачны.**</​WRAP>​
  
 Например,​ правила структурного программирования часто предписывают повторять одинаковые фрагменты программы в разных участках модуля,​ чтобы избавиться от употребления оператора ''​GOTO''​. В этом случае "​лекарство хуже Например,​ правила структурного программирования часто предписывают повторять одинаковые фрагменты программы в разных участках модуля,​ чтобы избавиться от употребления оператора ''​GOTO''​. В этом случае "​лекарство хуже
Строка 1528: Строка 1529:
 Д.Кнут в работе [[bibliography#​b70|[70]]] показал,​ что можно говорить о структурном программировании и при использовании оператора ''​GOTO''​! Структурное программирование на языках Фортран или [[basic:​basic|]] возможно,​ хотя с большими трудностями и некоторыми нежелательными последствиями. Так, например,​ Чармонмен и Ведженер [[bibliography#​b72|[72]]] показали,​ что можно сделать программу на языке Фортран похожей на структурную! Д.Кнут в работе [[bibliography#​b70|[70]]] показал,​ что можно говорить о структурном программировании и при использовании оператора ''​GOTO''​! Структурное программирование на языках Фортран или [[basic:​basic|]] возможно,​ хотя с большими трудностями и некоторыми нежелательными последствиями. Так, например,​ Чармонмен и Ведженер [[bibliography#​b72|[72]]] показали,​ что можно сделать программу на языке Фортран похожей на структурную!
 </​WRAP>​ </​WRAP>​
-  * <​WRAP>​ II. Другой метод улучшения качества программирования заключается в применении //​нисходящего проектирования//,​ ("​top–downprogramming"​ — "​программирование "​сверхувниз""​).+  * <​WRAP>​ II. Другой метод улучшения качества программирования заключается в применении //​нисходящего проектирования//,​ ("​top–downprogramming"​ — "​программирование "​сверху вниз""​).
  
 **Оператор ''​GOSUB''​ является //​основным//​ инструментом //​структурного//​ программирования.** **Оператор ''​GOSUB''​ является //​основным//​ инструментом //​структурного//​ программирования.**
Строка 1539: Строка 1540:
 процесс продолжается,​ пока программа не будет завершена и проверена. процесс продолжается,​ пока программа не будет завершена и проверена.
  
-При другом методе — //​восходящем проектировании//​ (программировании "​снизувверх"​) — Вы вначале пишете подпрограммы нижнего уровня и тщательно их тестируете и отлаживаете. Далее Вы добавляете подпрограммы более высокого уровня,​ которые вызывают подпрограммы нижнего уровня,​ и так до тех пор, пока Вы не достигнете программы самого верхнего уровня. Метод проектирования "​снизувверх"​ пригоден при наличии больших библиотек стандартных подпрограмм.+При другом методе — //​восходящем проектировании//​ (программировании "​снизу вверх"​) — Вы вначале пишете подпрограммы нижнего уровня и тщательно их тестируете и отлаживаете. Далее Вы добавляете подпрограммы более высокого уровня,​ которые вызывают подпрограммы нижнего уровня,​ и так до тех пор, пока Вы не достигнете программы самого верхнего уровня. Метод проектирования "​снизу вверх"​ пригоден при наличии больших библиотек стандартных подпрограмм.
  
 Учтите,​ что иногда лучшим является гибрид двух методов. Однако в обоих случаях каждая подпрограмма должна быть небольшой,​ так, чтобы можно было охватить одним взглядом всю её логику (для персональных компьютеров желательно,​ чтобы и основная программа,​ и подпрограммы //​целиком//​ помещались в пределах 20÷30 строк экрана дисплея!) Учтите,​ что иногда лучшим является гибрид двух методов. Однако в обоих случаях каждая подпрограмма должна быть небольшой,​ так, чтобы можно было охватить одним взглядом всю её логику (для персональных компьютеров желательно,​ чтобы и основная программа,​ и подпрограммы //​целиком//​ помещались в пределах 20÷30 строк экрана дисплея!)
  
-Всякий велосипедист хорошо знает, что ехать сверху вниз быстрее и удобнее,​ чем снизу вверх. В программировании дело обстоит примерно так же: "​сверхувниз"​ писать программы удобнее потому,​ что при таком методе мы точно знаем, какие подпрограммы описывать.+Всякий велосипедист хорошо знает, что ехать сверху вниз быстрее и удобнее,​ чем снизу вверх. В программировании дело обстоит примерно так же: "​сверху вниз"​ писать программы удобнее потому,​ что при таком методе мы точно знаем, какие подпрограммы описывать.
  
 Но есть у этого метода и недостаток:​ на верхнем уровне не всегда видно, куда спускаться,​ то есть как разделить решение задачи на такие части, каждую из которых было бы легко описать отдельной процедурой. У опытных программистов вырабатывается своеобразное чутье: они сразу видят, какие нужны процедуры,​ а новичкам иногда приходится туго. Но есть у этого метода и недостаток:​ на верхнем уровне не всегда видно, куда спускаться,​ то есть как разделить решение задачи на такие части, каждую из которых было бы легко описать отдельной процедурой. У опытных программистов вырабатывается своеобразное чутье: они сразу видят, какие нужны процедуры,​ а новичкам иногда приходится туго.
  
-Метод "​снизувверх",​ хотя и требует большого труда, бывает очень полезен на первых порах. Пусть даже половину составленных Вами подпрограмм придётся потом "​выбросить",​ но зато Вы хорошо почувствуете,​ какие подпрограммы для исходной задачи необходимы. Да и отлаживать каждую написанную подпрограмму можно сразу: ведь все, что "​под ней",​ уже описано (а обычно и отлажено). Словом,​ любишь кататься "​сверху вниз"​ — люби и саночки возить (в обратном направлении). Опытные программисты иногда применяют метод "​снизувверх"​ для того, чтобы заранее заготовить для новой задачи набор подпрограмм,​ которые могут понадобиться в различных случаях. Так что "​возить саночки"​ приходится не только новичкам!+Метод "​снизу вверх",​ хотя и требует большого труда, бывает очень полезен на первых порах. Пусть даже половину составленных Вами подпрограмм придётся потом "​выбросить",​ но зато Вы хорошо почувствуете,​ какие подпрограммы для исходной задачи необходимы. Да и отлаживать каждую написанную подпрограмму можно сразу: ведь все, что "​под ней",​ уже описано (а обычно и отлажено). Словом,​ любишь кататься "​сверху вниз"​ — люби и саночки возить (в обратном направлении). Опытные программисты иногда применяют метод "​снизу вверх"​ для того, чтобы заранее заготовить для новой задачи набор подпрограмм,​ которые могут понадобиться в различных случаях. Так что "​возить саночки"​ приходится не только новичкам!
 </​WRAP>​ </​WRAP>​
   * <​WRAP>​ III. Структурное программирование до сих пор было у нас представлено как свойство или оценка //​окончательного//​ текста программы. \\    * <​WRAP>​ III. Структурное программирование до сих пор было у нас представлено как свойство или оценка //​окончательного//​ текста программы. \\ 
Строка 1663: Строка 1664:
 <WRAP group  99%> <WRAP group  99%>
 <WRAP half column> \\ </​WRAP>​ <WRAP half column> \\ </​WRAP>​
-<WRAP half column><​WRAP ​justify>+<WRAP half column><​WRAP ​right>
 Известно,​ что отладка в два раза сложнее написания программы. Поэтому,​ если Вы были предельно хитроумны при написании программы,​ то что же Вы будете делать при её отладке?​ Известно,​ что отладка в два раза сложнее написания программы. Поэтому,​ если Вы были предельно хитроумны при написании программы,​ то что же Вы будете делать при её отладке?​
 <WRAP rightalign>​ <WRAP rightalign>​
Строка 1680: Строка 1681:
 трюк может спасти положение. Наконец,​ знакомство с трюками полезно и тем, кто их не использует,​ так как позволяет глубже осознать особенности компьютера и чувствовать себя свободно. Из–за своей необычности трюки, как правило,​ реализуются только на языках ассемблерного типа или непосредственно в машинных кодах. трюк может спасти положение. Наконец,​ знакомство с трюками полезно и тем, кто их не использует,​ так как позволяет глубже осознать особенности компьютера и чувствовать себя свободно. Из–за своей необычности трюки, как правило,​ реализуются только на языках ассемблерного типа или непосредственно в машинных кодах.
  
-Однаконикогда не используйте трюков там, где можно использовать простые методы. Заметим,​ что //​элегантное//​ решение задачи — это такое решение,​ которое одновременно и простои оригинально. Простые решения всегда желательны,​ но вопрос о том, всегда ли приемлемы оригинальные решения (трюки),​ остаётся открытым.+Однако никогда не используйте трюков там, где можно использовать простые методы. Заметим,​ что //​элегантное//​ решение задачи — это такое решение,​ которое одновременно и просто и оригинально. Простые решения всегда желательны,​ но вопрос о том, всегда ли приемлемы оригинальные решения (трюки),​ остаётся открытым.
  
 Под //​оригинальностью//​ решения подразумевается его неочевидность. Под //​оригинальностью//​ решения подразумевается его неочевидность.
Строка 1692: Строка 1693:
  
 //​Оригинальность//​ очевидна,​ но //​элегантным//​ этот приём можно считать,​ лишь принимая во внимание особенности конкретной задачи. //​Оригинальность//​ очевидна,​ но //​элегантным//​ этот приём можно считать,​ лишь принимая во внимание особенности конкретной задачи.
-Он, очевидно,​ не эффективен,​ когда используется вне рассматриваемого контекста,​ напримердля перестановки элементов многомерного массива в обычной программе,​ и к тому же может привести к ошибке округления,​ если А и В +Он, очевидно,​ не эффективен,​ когда используется вне рассматриваемого контекста,​ например для перестановки элементов многомерного массива в обычной программе,​ и к тому же может привести к ошибке округления,​ если А и В описаны как вещественные числа. Например:​
-описаны как вещественные числа. Например:​+
 <​code>​ <​code>​
 10 INPUT A,​B:​A=A-B:​B=A+B:​A=B-A:​PRINT A;B 10 INPUT A,​B:​A=A-B:​B=A+B:​A=B-A:​PRINT A;B
Строка 1710: Строка 1710:
  
 Почему в программировании необходима бригадная организация работ? Почему в программировании необходима бригадная организация работ?
-Ответ прост: **задача может потребовать бригадной организации её решения,​ потому что она слишком труднаили слишком велика,​ или слишком разнородна**.+Ответ прост: **задача может потребовать бригадной организации её решения,​ потому что она слишком трудна или слишком велика,​ или слишком разнородна**.
  
-В 1971г. Г.Миллз предложил схему организации программистской деятельности,​ известную как //​бригада главного программиста//​. Этот подход успешно использовался при разработке и реализации нескольких крупных программных проектов.+В 1971г. Г.Миллз предложил схему организации программистской деятельности,​ известную как //​бригада главного программиста//​. Этот подход успешно использовался при разработке и реализации нескольких крупных программных проектов.
  
 По словам Миллза,​ "​бригада главного программиста — это небольшой коллектив сотрудников,​ созданный для эффективной работы и рассматриваемый как единое целое"​. Бригада состоит из нескольких человек,​ обычно от трёх до пяти; среди них — главный программист,​ резервный программист,​ секретарь бригады и по мере необходимости другие специалисты. По словам Миллза,​ "​бригада главного программиста — это небольшой коллектив сотрудников,​ созданный для эффективной работы и рассматриваемый как единое целое"​. Бригада состоит из нескольких человек,​ обычно от трёх до пяти; среди них — главный программист,​ резервный программист,​ секретарь бригады и по мере необходимости другие специалисты.
Строка 1747: Строка 1747:
 <WRAP group  99%> <WRAP group  99%>
 <WRAP half column> \\ </​WRAP>​ <WRAP half column> \\ </​WRAP>​
-<WRAP half column><​WRAP ​justify>+<WRAP half column><​WRAP ​right>
 Форме дай щедрую дань\\ Форме дай щедрую дань\\
 Временем:​ важен в поэме\\ Временем:​ важен в поэме\\
Строка 1763: Строка 1763:
 Трудно дать исчерпывающее определение понятия "//​стиль//​ программирования"​. Попытаемся охарактеризовать его, рассмотрев с различных точек зрения. Главный тезис состоит в том, что //​стиль программирования — это стиль мышления//,​ проявляющийся в умении переводить алгоритм решения задачи на конкретный язык программирования. Трудно дать исчерпывающее определение понятия "//​стиль//​ программирования"​. Попытаемся охарактеризовать его, рассмотрев с различных точек зрения. Главный тезис состоит в том, что //​стиль программирования — это стиль мышления//,​ проявляющийся в умении переводить алгоритм решения задачи на конкретный язык программирования.
  
-Не существует совокупности правил написания программ,​ следуя которым Вы могли бы создавать качественные и не содержащие ошибок программы. Стиль программирования не сводится к хорошему знанию конкретного языка программирования,​ знанию его возможностей и правил записи программ,​ хотя он все это и предполагает. Скорее эти знания помогут отличить программу,​ написанную в хорошем стиле от программы,​ написанной в плохом стиле. Многие достаточно хорошо знают какой–либо иностранный язык, чтобы без особых затруднений читать специальную или художественную литературу на этом языке. Но лишь немногие могут с такой же лёгкостью написать на иностранном языке даже небольшую статью. Таким образом,​ от знания языка до владения языком лежит "​дистанция огромного размера"​. Но даже овладев языком программирования в совершенстве,​ мы лишь незначительно приблизимся к обладанию стилем программирования.+Не существует совокупности правил написания программ,​ следуя которым Вы могли бы создавать качественные и не содержащие ошибок программы. Стиль программирования не сводится к хорошему знанию конкретного языка программирования,​ знанию его возможностей и правил записи программ,​ хотя он все это и предполагает. Скорее эти знания помогут отличить программу,​ написанную в хорошем стиле от программы,​ написанной в плохом стиле. Многие достаточно хорошо знают какой–либо иностранный язык, чтобы без особых затруднений читать специальную или художественную литературу на этом языке. Но лишь немногие могут с такой же лёгкостью написать на иностранном языке даже небольшую статью. Таким образом,​ от знания языка до владения языком лежит "​дистанция огромного размера"​. Но даже овладев языком программирования в совершенстве,​ мы лишь незначительно приблизимся к грамотному ​стилю программирования.
  
-К сожалению,​ взгляд на стиль программирования как на стиль мышления ещё не всеми и не до конца осознан. Очень часто стиль программирования сводится к технологии программирования. За последние годы мы пережили несколько вспышек увлечения модными методологиями и технологиями программирования,​ такиминапример,​ как структурное программирование. Но в главном все они ориентируются на внешние факторы,​ характеризующие программу. Кстати сказать,​ жертвой структурного программирования чуть было не стали Фортран и [[basic:​basic|]] с их неструктурными операторами. Но очевидно,​ что плохо разработанная программа,​ записанная по правилам структурного программирования,​ так и останется плохой программой. В этом плане переход от языка [[basic:​basic|]] к таким языкам структурного программирования,​ как Паскаль и Ада, мало что даст.+К сожалению,​ взгляд на стиль программирования как на стиль мышления ещё не всеми и не до конца осознан. Очень часто стиль программирования сводится к технологии программирования. За последние годы мы пережили несколько вспышек увлечения модными методологиями и технологиями программирования,​ такими например,​ как структурное программирование. Но в главном все они ориентируются на внешние факторы,​ характеризующие программу. Кстати сказать,​ жертвой структурного программирования чуть было не стали Фортран и [[basic:​basic|]] с их неструктурными операторами. Но очевидно,​ что плохо разработанная программа,​ записанная по правилам структурного программирования,​ так и останется плохой программой. В этом плане переход от языка [[basic:​basic|]] к таким языкам структурного программирования,​ как Паскаль и Ада, мало что даст.
  
-Подводя итог сказанному,​ приведём некоторые рекомендации,​ которые,​ как мы надеемся,​ при осознанном и неформальном их использовании помогут вам выработать свой стиль программирования. Большинство рекомендаций имеет достаточно общий характер и могут быть использованы при программировании не только на [[basic:​basic|]],​ но и на многих других языках программирования. Эти рекомендации не являются исчерпывающими. Много подобных советов читатель может почерпнуть из книг по разработке программ и структурному программированию [[bibliography#​b52|[52]]],​ [[bibliography#​b53|[53]]],​ [[bibliography#​b54|[54]]],​ [[bibliography#​b55|[55]]].+Подводя итог сказанному,​ приведём некоторые рекомендации,​ которые,​ как мы надеемся,​ при осознанном и неформальном их использовании помогут вам выработать свой стиль программирования. Большинство рекомендаций имеют достаточно общий характер и могут быть использованы при программировании не только на [[basic:​basic|]],​ но и на многих других языках программирования. Эти рекомендации не являются исчерпывающими. Много подобных советов читатель может почерпнуть из книг по разработке программ и структурному программированию [[bibliography#​b52|[52]]],​ [[bibliography#​b53|[53]]],​ [[bibliography#​b54|[54]]],​ [[bibliography#​b55|[55]]].
  
   - <​WRAP>​**В основе алгоритма решения задачи лежит //​математическая модель//​. Не нужно жалеть времени на разработку и изучение свойств этой модели!**   - <​WRAP>​**В основе алгоритма решения задачи лежит //​математическая модель//​. Не нужно жалеть времени на разработку и изучение свойств этой модели!**
Строка 1836: Строка 1836:
 Если ограничения на память существенны,​ возможно,​ придётся пожертвовать наглядностью программы и комментариями для экономии памяти. Конечно,​ программу можно разделить так, чтобы результат получался поэтапно с помощью не одной, а нескольких программ. Можно также уменьшить размеры программы,​ ограничивая использование повторяющихся операторов или сегментов программы. Для этого может потребоваться объединить модули или сегменты программы,​ что в определённой степени нарушит модульную структуру программы. Кодирование нескольких операторов в одной строке,​ удаление необязательных пробелов в операторах,​ а также исключение операторов ''​REM''​ — все эти приёмы позволяют сэкономить память,​ но сделают программу более трудной для понимания,​ отладки и модернизации. Если ограничения на память существенны,​ возможно,​ придётся пожертвовать наглядностью программы и комментариями для экономии памяти. Конечно,​ программу можно разделить так, чтобы результат получался поэтапно с помощью не одной, а нескольких программ. Можно также уменьшить размеры программы,​ ограничивая использование повторяющихся операторов или сегментов программы. Для этого может потребоваться объединить модули или сегменты программы,​ что в определённой степени нарушит модульную структуру программы. Кодирование нескольких операторов в одной строке,​ удаление необязательных пробелов в операторах,​ а также исключение операторов ''​REM''​ — все эти приёмы позволяют сэкономить память,​ но сделают программу более трудной для понимания,​ отладки и модернизации.
  
-Объем вычислений можно уменьшить различными методами. Прежде всего необходимо исключить лишние вычисления. Следует убедиться,​ что одно и то же значение не вычисляется в программе многократно. Вотчто иногда можно увидеть в программе:​+Объем вычислений можно уменьшить различными методами. Прежде всего необходимо исключить лишние вычисления. Следует убедиться,​ что одно и то же значение не вычисляется в программе многократно. Вот что иногда можно увидеть в программе:​
 <​code>​ <​code>​
 10 FOR I=1 TO N:FOR J=1 TO 1000 10 FOR I=1 TO N:FOR J=1 TO 1000
Строка 1854: Строка 1854:
 </​WRAP>​ </​WRAP>​
 </​WRAP>​ </​WRAP>​
-Тем не менееигнорируйте все предложения по повышению эффективности,​ пока программа не будет правильной. Худшее,​ что может быть сделано,​ — это начать беспокоиться о быстродействии программы до того, как она начнёт работать правильно. Быстродействующая,​ но неправильная программа бесполезна;​ медленнодействующая,​ но правильная всегда имеет некоторую ценность,​ а может оказаться и вполне удовлетворительной.+Тем не менее игнорируйте все предложения по повышению эффективности,​ пока программа не будет правильной. Худшее,​ что может быть сделано,​ — это начать беспокоиться о быстродействии программы до того, как она начнёт работать правильно. Быстродействующая,​ но неправильная программа бесполезна;​ медленнодействующая,​ но правильная всегда имеет некоторую ценность,​ а может оказаться и вполне удовлетворительной.
  
 <WRAP group  99%> <WRAP group  99%>
 <WRAP half column> \\ </​WRAP>​ <WRAP half column> \\ </​WRAP>​
-<WRAP half column><​WRAP ​justify+<WRAP half column><​WRAP ​right
-  - Если программа неверна,​ то её быстродействие не имеет значения. Убедитесь в её правильностипрежде,​ чем Вы начнёте её "​улучшать"​.+  - Если программа неверна,​ то её быстродействие не имеет значения. Убедитесь в её правильности прежде,​ чем Вы начнёте её "​улучшать"​.
   - Сохраняйте программу ясной и понятной,​ не пытайтесь повысить её быстродействие в процессе кодирования. Преждевременная оптимизация — корень всех бед.   - Сохраняйте программу ясной и понятной,​ не пытайтесь повысить её быстродействие в процессе кодирования. Преждевременная оптимизация — корень всех бед.
   - Не стремитесь к оптимизации каждого простого вычисления. Пусть транслятор делает это за Вас.   - Не стремитесь к оптимизации каждого простого вычисления. Пусть транслятор делает это за Вас.
   - Беспокойтесь об алгоритме,​ а не  о деталях программы. Помните,​ что структура данных может существенно повлиять на то, как будет реализован алгоритм…   - Беспокойтесь об алгоритме,​ а не  о деталях программы. Помните,​ что структура данных может существенно повлиять на то, как будет реализован алгоритм…
 <WRAP rightalign>​ <WRAP rightalign>​
-—//​Керниган ​Б., Плоджер ​Ф.//+—//Б.Керниган, ​Ф.Плоджер//​
 </​WRAP></​WRAP>​ </​WRAP></​WRAP>​
 </​WRAP></​WRAP>​ </​WRAP></​WRAP>​
Строка 1877: Строка 1877:
  
 [[bibliography#​b59|[59]]] [[bibliography#​b59|[59]]]
- 
 <WRAP group  99%> <WRAP group  99%>
-<WRAP half column><​WRAP ​justify+<WRAP half column> \\ </​WRAP>​ 
-Меня вы научили говорить \\ +<WRAP half column><​WRAP ​right
-На вашем языке. Теперь я знаю, \\ +Меня вы научили говорить ​ 
-Как проклинать, ​— спасибо и за это. \\ +\\ На вашем языке. Теперь я знаю, ​ 
-Пусть унесёт чума обоих вас \\ +\\ Как проклинать, ​спасибо и за это. ​ 
-И ваш язык.+\\ Пусть унесет чума обоих ​вас 
 +\\ И ваш язык.
 <WRAP rightalign>​ <WRAP rightalign>​
-—//​У.Шекспир. Буря (пер.М.Донского)//+—//​У.Шекспир//​
 </​WRAP></​WRAP>​ </​WRAP></​WRAP>​
-</​WRAP>​ +</WRAP></​WRAP>​ 
-<WRAP half column><​WRAP ​justify+ 
-Взирая на солнце,​ прищурь глаза свои и ты смело разглядишь в нем пятна.+<WRAP group  99%
 +<WRAP half column> ​\\ </WRAP
 +<WRAP half column><​WRAP right
 +Взирая на солнце,​прищурь глаза свои ​ 
 +\\ и ты смело разглядишь в нем пятна.
 <WRAP rightalign>​ <WRAP rightalign>​
 —//​Козьма Прутков//​ —//​Козьма Прутков//​
 </​WRAP></​WRAP>​ </​WRAP></​WRAP>​
 </​WRAP></​WRAP>​ </​WRAP></​WRAP>​
 +
  
 Школьный курс информатики преследует две цели: Школьный курс информатики преследует две цели:
Строка 1950: Строка 1955:
 Почему же, несмотря на столь серьёзную опасность [[basic:​basic|]],​ он так популярен?​ Почему же, несмотря на столь серьёзную опасность [[basic:​basic|]],​ он так популярен?​
  
-Перечислим основные аргументы,​ выдвигаемые его защитниками и попытаемся их прокомментировать.+Перечислим основные аргументы,​ выдвигаемые его защитникамии попытаемся их прокомментировать.
  
-  * [[basic:​basic|]] прост в изучении. Это единственное достоинство языка как такового. Но это та самая простота,​ которая хуже воровства,​ "​простота орудий каменного века"​. [[basic:​basic|]] простпотому,​ что в нем нет сложных элементов (в первую очередь вспомогательных алгоритмов и некоторых алгоритмических конструкций),​ без овладения которыми поставленные цели не достигаются.+  * [[basic:​basic|]] прост в изучении. Это единственное достоинство языка как такового. Но это та самая простота,​ которая хуже воровства,​ "​простота орудий каменного века"​. [[basic:​basic|]] прост потому,​ что в нем нет сложных элементов (в первую очередь вспомогательных алгоритмов и некоторых алгоритмических конструкций),​ без овладения которыми поставленные цели не достигаются.
   * При работе на [[basic:​basic|]] диалог с компьютером происходит быстро и просто. \\ Это достоинство не языка, а его реализации.   * При работе на [[basic:​basic|]] диалог с компьютером происходит быстро и просто. \\ Это достоинство не языка, а его реализации.
   * [[basic:​basic|]] имеется на многих компьютерах,​ он широко распространён. Однако это не достоинство,​ а большая беда. Фактически мы сталкиваемся здесь с осуждённым в промышленности диктатом производителя. Изготовители ЭВМ и программного обеспечения рекламируют [[basic:​basic|]],​ так как [[basic:​basic|]]–системы проще в изготовлении и могут быть перенесены с западных компьютеров.   * [[basic:​basic|]] имеется на многих компьютерах,​ он широко распространён. Однако это не достоинство,​ а большая беда. Фактически мы сталкиваемся здесь с осуждённым в промышленности диктатом производителя. Изготовители ЭВМ и программного обеспечения рекламируют [[basic:​basic|]],​ так как [[basic:​basic|]]–системы проще в изготовлении и могут быть перенесены с западных компьютеров.
Строка 1965: Строка 1970:
 <WRAP group  99%> <WRAP group  99%>
 <WRAP half column> \\ </​WRAP>​ <WRAP half column> \\ </​WRAP>​
-<WRAP half column><​WRAP ​justify>+<WRAP half column><​WRAP ​right>
 Карл Пятый, римский император,​ говаривал,​ что ишпанским языком с богом, французским — с друзьями,​ немецким — с неприятельми,​ италиянским — с женским полом говорить прилично. Но если бы он российскому языку был искусен,​ то, конечно,​ к тому присовокупил бы, что им со всеми оными говорить пристойно. Ибо нашёл бы в нем великолепие ишпанского,​ живость французского,​ крепость немецкого,​ нежность италиянского и, сверх того, богатство и сильную в изображениях краткость греческого и латинского языка… Карл Пятый, римский император,​ говаривал,​ что ишпанским языком с богом, французским — с друзьями,​ немецким — с неприятельми,​ италиянским — с женским полом говорить прилично. Но если бы он российскому языку был искусен,​ то, конечно,​ к тому присовокупил бы, что им со всеми оными говорить пристойно. Ибо нашёл бы в нем великолепие ишпанского,​ живость французского,​ крепость немецкого,​ нежность италиянского и, сверх того, богатство и сильную в изображениях краткость греческого и латинского языка…
  
 Сильное красноречие Цицероново,​ великолепная Виргилиева важность,​ Овидиево приятное витийство не теряют своего достоинства на российском языке… Сильное красноречие Цицероново,​ великолепная Виргилиева важность,​ Овидиево приятное витийство не теряют своего достоинства на российском языке…
 <WRAP rightalign>​ <WRAP rightalign>​
-—//М. Ломоносов. Российская грамматика//​+—//​М.Ломоносов. Российская грамматика//​
 </​WRAP></​WRAP>​ </​WRAP></​WRAP>​
 </​WRAP></​WRAP>​ </​WRAP></​WRAP>​
Строка 2001: Строка 2006:
 |Простота изучения| ​ 3  |  3  |  4  |  4  |  5  |  1  |  3  | |Простота изучения| ​ 3  |  3  |  4  |  4  |  5  |  1  |  3  |
 |Наличие литературы| ​ 5  |  3  |  3  |  4  |  4  |  2  |  1  | |Наличие литературы| ​ 5  |  3  |  3  |  4  |  4  |  2  |  1  |
-|Поддержка фирмами разработчиками микропроцессорных систем| ​ 5  |  4  |  4  |  4  |  4  |  3  |  4  |+|Поддержка фирмамиразработчиками микропроцессорных систем| ​ 5  |  4  |  4  |  4  |  4  |  3  |  4  |
 |Универсальность (широта диапазона решаемых задач)| ​ 3  |  3  |  3  |  3  |  2  |  5  |  3  | |Универсальность (широта диапазона решаемых задач)| ​ 3  |  3  |  3  |  3  |  2  |  5  |  3  |
 |Удобство для системного программирования| ​ 5  |  5  |  4  |  3  |  1  |  4  |  5  | |Удобство для системного программирования| ​ 5  |  5  |  4  |  3  |  1  |  4  |  5  |
Строка 2017: Строка 2022:
 В заключение три цитаты:​ В заключение три цитаты:​
   - <​WRAP>​ Практически невозможно научить хорошему программированию студентов,​ ориентированных первоначально на бейсик;​ как потенциальные программисты они умственно оболванены без надежды на исцеление   - <​WRAP>​ Практически невозможно научить хорошему программированию студентов,​ ориентированных первоначально на бейсик;​ как потенциальные программисты они умственно оболванены без надежды на исцеление
-<WRAP rightalign>​ --- Э.Дейкстра,​ ASMSIGPLAN Notice, 1982, 7, P.13–15</​WRAP>​+<WRAP rightalign>​ --- Э.Дейкстра,​ ASMSIGPLAN Notice, 1982, 7, P.13–15</​WRAP>​
 </​WRAP>​ </​WRAP>​
   - <​WRAP>​ …коль уж становиться программистом,​ то программистом хорошим;​ такого программиста отличает постоянное желание стать ещё лучшим программистом,​ а единственно верный путь для этого — стремиться в совершенстве овладеть несколькими языками,​ т.е. сделаться хорошим лингвистом в программировании. Безусловно,​ можно доказать,​ что несомненный вред нанесли и наносят те, довольно хорошие программисты,​ которые,​ став слишком самодовольными или консервативными,​ полагают,​ что язык, которым они пользуются,​ во всех смыслах является последним словом   - <​WRAP>​ …коль уж становиться программистом,​ то программистом хорошим;​ такого программиста отличает постоянное желание стать ещё лучшим программистом,​ а единственно верный путь для этого — стремиться в совершенстве овладеть несколькими языками,​ т.е. сделаться хорошим лингвистом в программировании. Безусловно,​ можно доказать,​ что несомненный вред нанесли и наносят те, довольно хорошие программисты,​ которые,​ став слишком самодовольными или консервативными,​ полагают,​ что язык, которым они пользуются,​ во всех смыслах является последним словом
Строка 2023: Строка 2028:
 </​WRAP>​ </​WRAP>​
   - <​WRAP>​ **Предмет,​ достойный целого курса лекций,​ вы превратили в собрание //​рассказиков//​.**   - <​WRAP>​ **Предмет,​ достойный целого курса лекций,​ вы превратили в собрание //​рассказиков//​.**
-<WRAP rightalign>​ --- Конан Дойль. Медные буки</​WRAP>​+<WRAP rightalign>​ ---  А.Конан Дойль. Медные буки</​WRAP>​
 </​WRAP>​ </​WRAP>​
  
msx/basic_dialogue_programming_language/008.1663613144.txt.gz · Последние изменения: 2022-09-19 21:45 — GreyWolf