Здесь показаны различия между двумя версиями данной страницы.
Предыдущая версия справа и слева Предыдущая версия Следующая версия | Предыдущая версия | ||
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> | ||