Страница 1 из 2

Достоинства и недостатки языков программирования

СообщениеДобавлено: 26 янв 2009, 18:40
SergKarm
Тема перенесена из https://shgpi.edu.ru/forum/viewtopic.php?f=39&t=22

xdsl писал(а):Если студент начинал изучение языков программирования, на пример, с языка perl, то я ничуть не удивлен.

В свое время (в 1992г.) я приобрел книжицу, где давались советы начинающим программистам. В качестве примеров к советам приводились программы на языках Бейсик, Паскаль, Фортран, Фокал, Модула 2 и коды микрокалькулятора.
Авторы книги считали, что это были наиболее популярные на то время.
Как в считаете, с какого языка наиболее просто и удобно начинать программирвание сейчас?
(если не оглядываться на школьные курсы и программы).

Re: Говорят и пишут студенты

СообщениеДобавлено: 26 янв 2009, 18:43
xdsl

Re: Говорят и пишут студенты

СообщениеДобавлено: 26 янв 2009, 20:13
SergKarm
xdsl писал(а):С javascript. Пример: https://shgpi.edu.ru/forum/viewtopic.php?f=11&p=195#p195

Да, весьма эффективно. Но диагональ массива не просматривается.
там бы пробелы вставить для наглядности..

Re: Говорят и пишут студенты

СообщениеДобавлено: 26 янв 2009, 20:38
Vladislav_133
Представленный пример напоминает мне русский "мат". Лично я хорошо знаю матерный язык, но никогда его не употребляю.
Проводя аналогию с матерным языком хочу напомнить, что в старину матерные слова и выражения было в основном уделом жрецов, да и то в особых случаях. Считалось, что частое употребления матерных слов ведет к мужскому бессилию.

Re: Говорят и пишут студенты

СообщениеДобавлено: 26 янв 2009, 22:10
xdsl
Имхо, вы совершенно неправы. Там в примере все абсолютно прозрачно, никаких танцев с бубном и шаманства. Просто в данном случае переводы строк и отступы удалены для большей эффектности и возможности демонстрации всего кода с помощью одной строки непосредственно в браузере. Заметьте - предложенный пример был приведен в качестве способа быстро привлечь внимание, поразить школьников, своего рода психологическая бомба.

Что касается javascript, то преимущество в обучении началам программирования заключается в обязательном наличии его интерпретатора в (почти) любом браузере. Ничего дополнительного устанавливать не надо. Проверка работоспособности программы - немедленная. Примеров - море, на любом сайте.

там бы пробелы вставить для наглядности..

Сорри, очень спешил домой, наваял буквально уже стоя одетым.
Код: Выделить всё
javascript:(function(){ var str=""; for (var i=1; i<10; i++) { for (var j=1;j<10;j++) str+=((i*j<10)?"  ":" ")+i*j; str+="<br>"};return "<pre>"+str+"</pre>"} ())

Re: Говорят и пишут студенты

СообщениеДобавлено: 26 янв 2009, 22:22
xdsl
Проводя аналогию с матерным языком хочу напомнить ...
Т.к. Вы неправы в исходных посылках, дальнейшие выводы - чистейший пример риторики, а не логики.

Для полноты картины по примеру Холмса скажем: "Это-же элементарно!"
Код: Выделить всё
javascript:(// используем протокол javascript, позволяющий вычислять выражения. Результат вычисления выводится в браузер.
function() // определяем безымянную функцию
{
  var str=""; // определяем локальную строковую переменную str с пустым значением
  for (var i=1; i<10; i++) // начинаем внешний цикл, итерируя по переменной i.
      // в первом выражении (вычисляется один раз до начала цикла)
      // определяем локальную числовую переменную i, присваиваем ей значение 1
      // во втором выражении (вычисляется каждый раз до входа цикл, если эквивалентно true,
      // то тело цикла выполняется) i сравнивается с 10
      // в третьем выражении (вычисляется каждый раз по окончании тела цикла) значение i увеличивается на 1
   {  // начинается тело цикла
      for (var j=1;j<10;j++) // начинаем вложенный цикл аналогично внешнему, итерируя по переменной j
        str+=((i*j<10)?"  ":" ")+i*j; // добавляем к строковой переменной str один или два пробела
                                              // и произведение внешней переменной на внутреннюю
      // по первому выходу из внутреннего цикла в переменной str находится отдельная строка таблицы умножения,
      // в дальнейшем - набор строк таблицы
      str+="<br>"; // добавляем HTML-перевод строки к переменной str
    };
    return "<pre>"+str+"</pre>"; // возвращаем из функции сформированную таблицу умножения
} // заканчиваем определение безымянной функции ...
() // ... и немедленно ее вызываем
)

Re: Говорят и пишут студенты

СообщениеДобавлено: 26 янв 2009, 22:45
Vladislav_133
Да нет, когда я вижу выражение типа "abcd"+5 или 5+"6" - это и напоминает мне матерный язык. Употреблять только в особых случаях и только для жрецов. Это все перловские штучки.

Re: Говорят и пишут студенты

СообщениеДобавлено: 26 янв 2009, 22:51
SergKarm
xdsl писал(а):Для полноты картины по примеру Холмса скажем: "Это-же элементарно!" ..


а все же.. странички этого форума не особо дружат с AJAX ?

Re: Говорят и пишут студенты

СообщениеДобавлено: 26 янв 2009, 23:07
xdsl
"abcd"+5 или 5+"6"

А что здесь неясного? Жреческого?
Если это паскаль, си и многие другие языки со строгой типизацией, то возникает ошибка несоответствия типов.
Если языки с динамической типизацией, то результат вычисления зависит от правил языка. Например, в javascript операция "+" применима как для числовых, так и для строковых типов. Причём, по строгим правилам языка строковая операция "+" имеет более высокий приоритет. Т.о. при использовании в выражении с операцией "+" одновременно строкового и числового операндов, в полном соответствии с правилами преобразования типов числовой операнд преобразуется к строковому типу. Получаем "abcd"+"5" или "5"+"6". В первом случае результат равен abcd5, во втором 56. Более подробно алгоритм расписан, например, здесь: http://javascript.ru/ecmascript/part11#a-11.6.1

А теперь внимание вопрос: ГДЕ ЗДЕСЬ ШАМАНСТВО???

Re: Говорят и пишут студенты

СообщениеДобавлено: 26 янв 2009, 23:10
xdsl
SergKarm писал(а):а все же.. странички этого форума не особо дружат с AJAX ?

Даже не знаю как и что ответить ... Напоминает вопрос Карлсона, который отправил в столбняк фрекен Бок: "Ты перестала пить коньяк по утрам?" ;)
Поясните вопрос, плиз?

P.S. Мне кажется, или модератору пора разделить эту тему и несколько последних постов вынести в отдельную тему?

Re: Говорят и пишут студенты

СообщениеДобавлено: 26 янв 2009, 23:26
Vladislav_133
Я то приверженец строгих правил типизированных языков и всегда считал, что чем строже правила тем, для меня выше язык,
а реализация тут не при чем. Заметьте, что бэйсик в свое время ругали за его недостаточнуя строгость. Тогда и не снилось, что такие монстры появятся. Вообще строгая типизация позволяет избежать множества ошибок и совсем не уменьшает возможностей программистов. Если ты явно прописал преобразование типа, то значит избежал возможной ошибки, а вот если ошибся и сложил лампочки с телевизорами, и транслятор это не заметил - то ищи потом ошибку. И шаманство здесь в том смысле, что это должно быть исключением из правил.

Re: Говорят и пишут студенты

СообщениеДобавлено: 26 янв 2009, 23:34
xdsl
Заметьте, правила языка не позволяют складывать лампочки с телевизорами. Язык строго по своим, четко специфированным правилам, либо аккуратно разбирает телевизоры на лампочки, либо собирает из лампочек телевизор. И только затем складывает либо лампочки с лампочками, либо телевизоры с телевизорами.

Re: Говорят и пишут студенты

СообщениеДобавлено: 26 янв 2009, 23:59
SergKarm
xdsl писал(а): ... Напоминает вопрос Карлсона, который отправил в столбняк фрекен Бок: "Ты перестала пить коньяк по утрам?" ;)

-Ну.. ответила Фрекен Бок, откупоривая очередную бутылку. -Да ты сам посмотри, Карлсон!
Карлсон с сомнением понюхал пробку, осмотрел этикетку с неровной надписью "JavaScript", полюбовался игрой цветов напитка на солнце и ответил:
-Буржуйский? Пять звездочек?
-А это мы сейчас проверим! с этими словами фрекен Бок скопировала рюмку с коньяком ввиде кода и вставила в браузер и Карлсону.
Результат не заставил себя ждать..

Re: Говорят и пишут студенты

СообщениеДобавлено: 27 янв 2009, 09:37
xdsl
Я действительно не понял вопроса про AJAX :oops:

Re: Говорят и пишут студенты

СообщениеДобавлено: 27 янв 2009, 12:15
xdsl
Vladislav_133 писал(а):Я то приверженец строгих правил типизированных языков и всегда считал, что чем строже правила тем, для меня выше язык,
а реализация тут не при чем.

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

З.Ы. Даже в Вашем любимом С# есть тип dynamic, а в моем любимом паскале - тип variant ;)

Re: Говорят и пишут студенты

СообщениеДобавлено: 27 янв 2009, 22:02
Vladislav_133
И распроклятый goto живет и побеждает, как дело ленина!

Re: Говорят и пишут студенты

СообщениеДобавлено: 28 янв 2009, 11:35
xdsl
Вот попробуйте без goto (сорри! - jmp, jne и т.д.) на Вашем любимом интелловском ассемблере что-нибудь серьезное написать ;)

Re: Говорят и пишут студенты

СообщениеДобавлено: 28 янв 2009, 20:31
Vladislav_133
xdsl писал(а):Вот попробуйте без goto (сорри! - jmp, jne и т.д.) на Вашем любимом интелловском ассемблере что-нибудь серьезное написать ;)


Да нет, goto ведь приверженцы структурного программирования заклеймили позором. А он жив. Я об этом.

Re: Достоинства и недостатки языков программирования

СообщениеДобавлено: 29 янв 2009, 10:15
xdsl
Если мне не изменяет память, то впервые goto "заклеймили позором" математики. Им, видите-ли, стало очень сложно доказывать правильность работы таких программ. А приверженцы структурного программирования просто предложили ограничить использование goto определенными рамками с тем, чтобы чрезмерно не усложнять трансляторы языков. Например goto между телами двух функций просто запрещен, ибо неясно, как обеспечить в таком случае корректные использование локальных переменных и возврат из функции. В то-же время goto процветает как один из скрытых механизмов работы условных и циклических опереаторов, как механизм выхода из циклов и функций, и т.п.

Re: Говорят и пишут студенты

СообщениеДобавлено: 29 янв 2009, 22:54
blacksmith
SergKarm писал(а):-Ну.. ответила Фрекен Бок, откупоривая очередную бутылку. -Да ты сам посмотри, Карлсон!
skip

А для чего тебе тут Аякс? Назови хоть одну причину.

Re: Достоинства и недостатки языков программирования

СообщениеДобавлено: 01 фев 2009, 16:01
Vladislav_133
xdsl писал(а): В то-же время goto процветает как один из скрытых механизмов работы условных и циклических опереаторов, как механизм выхода из циклов и функций, и т.п.


В каком это смысле? Вы же не имеете в виду машинный язык, в противном случае речь бы шла о машинно-ориентированном языке. Вот если нет goto, то его и нет, а оператор break (или exit - в некоторых языках) - это оператор break, совсем с другой функциональностью. Замечу кстати, что в языке FoxPro напроч отсутствует goto (или подобный ему) и ничего, можно писать программу любой сложности.
Критика goto заключается в том, что если есть возможность, то ей обязательно воспользуются, но наличие goto действительно затрудняет анализ программы, разрушает ее блоковую структуру. Такие возможности следует просто устранять. Еще один характерный пример - язык C++. Этот язык содержит возможности и языка C (классического) и объектного языка C++. Но зачастую пишутся программы, где перемешаны оба стиля. В результате получаются чрезвычайно сложные для анализа программы. Отсюда и тенденция к созданию языков подобных Java и C#.
Высказав столь жесткую точку зрения, замечу, что и я грешен (а кто не грешен, разве, что бог, да может еще Дональд Кнут) и иногда пользуюсь оператором goto.

Re: Достоинства и недостатки языков программирования

СообщениеДобавлено: 01 фев 2009, 16:21
xdsl
Я имею в виду именно язык высокого уровня. Если рассмотреть break и continue, то в отсутствие этих операторов проблема незапланированного выхода из цикла или переход на новую итерацию классически решалась с помощью goto. Если посмотреть в ассемблерный код реализации break и continue, то увидим там именно jmp, а не что-то другое. Аналогично - exit в паскале. Таким образом даже в отсутствии оператора goto он продолжает процветать в других операторах, просто усеченный в своей функциональности.

Re: Достоинства и недостатки языков программирования

СообщениеДобавлено: 01 фев 2009, 22:41
Vladislav_133
Ну вот я и говорю, что надо находится на уровне языка, а тогда goto это goto, break это break. Это разные операторы. Мало ли что в них используются команда jmp. Так ведь и в реализации условной конструкции она используется.
А где goto действительно может быть полезен, это когда имеются вложенные циклы и надо перейти из внутреннего цикла к некоторому n-ому. Здесь break проблематично использовать, хотя, конечно, можно.

Re: Достоинства и недостатки языков программирования

СообщениеДобавлено: 02 фев 2009, 09:14
xdsl
А где goto действительно может быть полезен, это когда имеются вложенные циклы и надо перейти из внутреннего цикла к некоторому n-ому

И мы таки опять возвращаемся к javascript, где убеждаемся, что break - это менее урезанный goto по сравнению с другими языками:
Код: Выделить всё
<pre>
<script>
gotolabel:
for (var i=1;i<6;i++)
for (var j=1;j<6;j++)
  for (var k=1;k<6;k++)
   if (i*j*k==30) { document.writeln("i="+i+",j="+j+",k="+k); break gotolabel; }
document.writeln("The end");
</script>
</pre>

Здесь находим одно произведение трех (меньших 6) натуральных значений, равное 30. Получаем:
Код: Выделить всё
i=2,j=3,k=5
The end

Без break получили-бы
Код: Выделить всё
i=2,j=3,k=5
i=2,j=5,k=3
i=3,j=2,k=5
i=3,j=5,k=2
i=5,j=2,k=3
i=5,j=3,k=2
The end

Заметьте, осуществили выход из внешнего цикла, находясь во внутреннем. Без всякого goto, но с эмуляцией его поведения. Вывод: break - это "облагороженный" goto ;)

Re: Достоинства и недостатки языков программирования

СообщениеДобавлено: 02 фев 2009, 11:55
xdsl
Владислав Юрьевич, давайте все-таки обозначим наши позиции, дабы не превращать беседу во флейм.
Моя позиция заключается в том, что на сегодняшний день оператор goto в чистом виде практически исчез из высокоуровневых языков, мутировав в специфичные операторы (break, continue, exit, try ...), решающие задачи, которые раньше решались только с помощью goto. Т.е. goto никуда не делся. Его просто расфасовали в разноцветные мешочки с надписями break, continue, exit, try и продают ;)