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

Место для обсуждения любых вопросов, которые интересны программистам и администраторам, преподавателям и студентам, абитуриентам и школьникам ...

Модератор: Vladislav_133

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

Сообщение SergKarm 26 янв 2009, 18:40

Тема перенесена из https://shgpi.edu.ru/forum/viewtopic.php?f=39&t=22

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

В свое время (в 1992г.) я приобрел книжицу, где давались советы начинающим программистам. В качестве примеров к советам приводились программы на языках Бейсик, Паскаль, Фортран, Фокал, Модула 2 и коды микрокалькулятора.
Авторы книги считали, что это были наиболее популярные на то время.
Как в считаете, с какого языка наиболее просто и удобно начинать программирвание сейчас?
(если не оглядываться на школьные курсы и программы).
Another Perfect Day
SergKarm
 
Сообщения: 11
Зарегистрирован: 12 янв 2009, 16:21
Полное имя: Карманов С.В.

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

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

xdsl
 
Сообщения: 1228
Зарегистрирован: 09 дек 2008, 05:16
Откуда: ВЦ ШГПИ
Полное имя: Слинкин Д.А.

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

Сообщение SergKarm 26 янв 2009, 20:13

xdsl писал(а):С javascript. Пример: https://shgpi.edu.ru/forum/viewtopic.php?f=11&p=195#p195

Да, весьма эффективно. Но диагональ массива не просматривается.
там бы пробелы вставить для наглядности..
Another Perfect Day
SergKarm
 
Сообщения: 11
Зарегистрирован: 12 янв 2009, 16:21
Полное имя: Карманов С.В.

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

Сообщение Vladislav_133 26 янв 2009, 20:38

Представленный пример напоминает мне русский "мат". Лично я хорошо знаю матерный язык, но никогда его не употребляю.
Проводя аналогию с матерным языком хочу напомнить, что в старину матерные слова и выражения было в основном уделом жрецов, да и то в особых случаях. Считалось, что частое употребления матерных слов ведет к мужскому бессилию.
Аватара пользователя
Vladislav_133
Elite
 
Сообщения: 1254
Зарегистрирован: 13 дек 2008, 18:08
Полное имя: П.В.Ю.

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

Сообщение xdsl 26 янв 2009, 22:10

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

Что касается 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>"} ())
xdsl
 
Сообщения: 1228
Зарегистрирован: 09 дек 2008, 05:16
Откуда: ВЦ ШГПИ
Полное имя: Слинкин Д.А.

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

Сообщение xdsl 26 янв 2009, 22:22

Проводя аналогию с матерным языком хочу напомнить ...
Т.к. Вы неправы в исходных посылках, дальнейшие выводы - чистейший пример риторики, а не логики.

Для полноты картины по примеру Холмса скажем: "Это-же элементарно!"
Код: Выделить всё
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>"; // возвращаем из функции сформированную таблицу умножения
} // заканчиваем определение безымянной функции ...
() // ... и немедленно ее вызываем
)
xdsl
 
Сообщения: 1228
Зарегистрирован: 09 дек 2008, 05:16
Откуда: ВЦ ШГПИ
Полное имя: Слинкин Д.А.

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

Сообщение Vladislav_133 26 янв 2009, 22:45

Да нет, когда я вижу выражение типа "abcd"+5 или 5+"6" - это и напоминает мне матерный язык. Употреблять только в особых случаях и только для жрецов. Это все перловские штучки.
Аватара пользователя
Vladislav_133
Elite
 
Сообщения: 1254
Зарегистрирован: 13 дек 2008, 18:08
Полное имя: П.В.Ю.

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

Сообщение SergKarm 26 янв 2009, 22:51

xdsl писал(а):Для полноты картины по примеру Холмса скажем: "Это-же элементарно!" ..


а все же.. странички этого форума не особо дружат с AJAX ?
Another Perfect Day
SergKarm
 
Сообщения: 11
Зарегистрирован: 12 янв 2009, 16:21
Полное имя: Карманов С.В.

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

Сообщение xdsl 26 янв 2009, 23:07

"abcd"+5 или 5+"6"

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

А теперь внимание вопрос: ГДЕ ЗДЕСЬ ШАМАНСТВО???
xdsl
 
Сообщения: 1228
Зарегистрирован: 09 дек 2008, 05:16
Откуда: ВЦ ШГПИ
Полное имя: Слинкин Д.А.

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

Сообщение xdsl 26 янв 2009, 23:10

SergKarm писал(а):а все же.. странички этого форума не особо дружат с AJAX ?

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

P.S. Мне кажется, или модератору пора разделить эту тему и несколько последних постов вынести в отдельную тему?
xdsl
 
Сообщения: 1228
Зарегистрирован: 09 дек 2008, 05:16
Откуда: ВЦ ШГПИ
Полное имя: Слинкин Д.А.

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

Сообщение Vladislav_133 26 янв 2009, 23:26

Я то приверженец строгих правил типизированных языков и всегда считал, что чем строже правила тем, для меня выше язык,
а реализация тут не при чем. Заметьте, что бэйсик в свое время ругали за его недостаточнуя строгость. Тогда и не снилось, что такие монстры появятся. Вообще строгая типизация позволяет избежать множества ошибок и совсем не уменьшает возможностей программистов. Если ты явно прописал преобразование типа, то значит избежал возможной ошибки, а вот если ошибся и сложил лампочки с телевизорами, и транслятор это не заметил - то ищи потом ошибку. И шаманство здесь в том смысле, что это должно быть исключением из правил.
Аватара пользователя
Vladislav_133
Elite
 
Сообщения: 1254
Зарегистрирован: 13 дек 2008, 18:08
Полное имя: П.В.Ю.

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

Сообщение xdsl 26 янв 2009, 23:34

Заметьте, правила языка не позволяют складывать лампочки с телевизорами. Язык строго по своим, четко специфированным правилам, либо аккуратно разбирает телевизоры на лампочки, либо собирает из лампочек телевизор. И только затем складывает либо лампочки с лампочками, либо телевизоры с телевизорами.
xdsl
 
Сообщения: 1228
Зарегистрирован: 09 дек 2008, 05:16
Откуда: ВЦ ШГПИ
Полное имя: Слинкин Д.А.

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

Сообщение SergKarm 26 янв 2009, 23:59

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

-Ну.. ответила Фрекен Бок, откупоривая очередную бутылку. -Да ты сам посмотри, Карлсон!
Карлсон с сомнением понюхал пробку, осмотрел этикетку с неровной надписью "JavaScript", полюбовался игрой цветов напитка на солнце и ответил:
-Буржуйский? Пять звездочек?
-А это мы сейчас проверим! с этими словами фрекен Бок скопировала рюмку с коньяком ввиде кода и вставила в браузер и Карлсону.
Результат не заставил себя ждать..
Another Perfect Day
SergKarm
 
Сообщения: 11
Зарегистрирован: 12 янв 2009, 16:21
Полное имя: Карманов С.В.

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

Сообщение xdsl 27 янв 2009, 09:37

Я действительно не понял вопроса про AJAX :oops:
xdsl
 
Сообщения: 1228
Зарегистрирован: 09 дек 2008, 05:16
Откуда: ВЦ ШГПИ
Полное имя: Слинкин Д.А.

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

Сообщение xdsl 27 янв 2009, 12:15

Vladislav_133 писал(а):Я то приверженец строгих правил типизированных языков и всегда считал, что чем строже правила тем, для меня выше язык,
а реализация тут не при чем.

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

З.Ы. Даже в Вашем любимом С# есть тип dynamic, а в моем любимом паскале - тип variant ;)
xdsl
 
Сообщения: 1228
Зарегистрирован: 09 дек 2008, 05:16
Откуда: ВЦ ШГПИ
Полное имя: Слинкин Д.А.

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

Сообщение Vladislav_133 27 янв 2009, 22:02

И распроклятый goto живет и побеждает, как дело ленина!
Аватара пользователя
Vladislav_133
Elite
 
Сообщения: 1254
Зарегистрирован: 13 дек 2008, 18:08
Полное имя: П.В.Ю.

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

Сообщение xdsl 28 янв 2009, 11:35

Вот попробуйте без goto (сорри! - jmp, jne и т.д.) на Вашем любимом интелловском ассемблере что-нибудь серьезное написать ;)
xdsl
 
Сообщения: 1228
Зарегистрирован: 09 дек 2008, 05:16
Откуда: ВЦ ШГПИ
Полное имя: Слинкин Д.А.

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

Сообщение Vladislav_133 28 янв 2009, 20:31

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


Да нет, goto ведь приверженцы структурного программирования заклеймили позором. А он жив. Я об этом.
Аватара пользователя
Vladislav_133
Elite
 
Сообщения: 1254
Зарегистрирован: 13 дек 2008, 18:08
Полное имя: П.В.Ю.

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

Сообщение xdsl 29 янв 2009, 10:15

Если мне не изменяет память, то впервые goto "заклеймили позором" математики. Им, видите-ли, стало очень сложно доказывать правильность работы таких программ. А приверженцы структурного программирования просто предложили ограничить использование goto определенными рамками с тем, чтобы чрезмерно не усложнять трансляторы языков. Например goto между телами двух функций просто запрещен, ибо неясно, как обеспечить в таком случае корректные использование локальных переменных и возврат из функции. В то-же время goto процветает как один из скрытых механизмов работы условных и циклических опереаторов, как механизм выхода из циклов и функций, и т.п.
xdsl
 
Сообщения: 1228
Зарегистрирован: 09 дек 2008, 05:16
Откуда: ВЦ ШГПИ
Полное имя: Слинкин Д.А.

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

Сообщение blacksmith 29 янв 2009, 22:54

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

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

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

Сообщение Vladislav_133 01 фев 2009, 16:01

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


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

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

Сообщение xdsl 01 фев 2009, 16:21

Я имею в виду именно язык высокого уровня. Если рассмотреть break и continue, то в отсутствие этих операторов проблема незапланированного выхода из цикла или переход на новую итерацию классически решалась с помощью goto. Если посмотреть в ассемблерный код реализации break и continue, то увидим там именно jmp, а не что-то другое. Аналогично - exit в паскале. Таким образом даже в отсутствии оператора goto он продолжает процветать в других операторах, просто усеченный в своей функциональности.
xdsl
 
Сообщения: 1228
Зарегистрирован: 09 дек 2008, 05:16
Откуда: ВЦ ШГПИ
Полное имя: Слинкин Д.А.

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

Сообщение Vladislav_133 01 фев 2009, 22:41

Ну вот я и говорю, что надо находится на уровне языка, а тогда goto это goto, break это break. Это разные операторы. Мало ли что в них используются команда jmp. Так ведь и в реализации условной конструкции она используется.
А где goto действительно может быть полезен, это когда имеются вложенные циклы и надо перейти из внутреннего цикла к некоторому n-ому. Здесь break проблематично использовать, хотя, конечно, можно.
Аватара пользователя
Vladislav_133
Elite
 
Сообщения: 1254
Зарегистрирован: 13 дек 2008, 18:08
Полное имя: П.В.Ю.

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

Сообщение xdsl 02 фев 2009, 09:14

А где 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 ;)
xdsl
 
Сообщения: 1228
Зарегистрирован: 09 дек 2008, 05:16
Откуда: ВЦ ШГПИ
Полное имя: Слинкин Д.А.

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

Сообщение xdsl 02 фев 2009, 11:55

Владислав Юрьевич, давайте все-таки обозначим наши позиции, дабы не превращать беседу во флейм.
Моя позиция заключается в том, что на сегодняшний день оператор goto в чистом виде практически исчез из высокоуровневых языков, мутировав в специфичные операторы (break, continue, exit, try ...), решающие задачи, которые раньше решались только с помощью goto. Т.е. goto никуда не делся. Его просто расфасовали в разноцветные мешочки с надписями break, continue, exit, try и продают ;)
xdsl
 
Сообщения: 1228
Зарегистрирован: 09 дек 2008, 05:16
Откуда: ВЦ ШГПИ
Полное имя: Слинкин Д.А.

След.

Вернуться в Обмен мнениями

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1

cron