Re[14]: Oberon???????????????????????????????????
От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
Дата: 26.10.04 13:38
Оценка: -1 :)
Здравствуйте, Sinclair, Вы писали:

СГ>>1) Существуют модули

S>Что такое модули? Или это в седьмом классе понятно всем и без объяснения?

На модуль, в отличие от пространства имен, можно пальцем показать, вот это модуль, вот как он выглядит и вот он где конкретно находится.

СГ>>2) Один модуль может импортировать другой модуль

S>Что значит импортировать?

Опять на это можно прямо пальцем показать, вот так, мол, смотрите, один модуль пользуется услугами другого модуля...

СГ>>2) Существуют классы (еще одна непонятность — что еще за классы? Классы чего? Мы в седьмом классе учимся и что с того?)

S>Верно. Что-то все-таки надо детям рассказывать.

То-то и оно!

СГ>>3) У классов есть статические методы (опять ребенку непонятно что такое статические и что такое методы, в чем разница между подпрограммами и методами?).

S>А при чем тут подпрограммы? Кто-то считает понятие подпрограммы присутствующим в детской голове прямо с рождения? Лично я в седьмом классе колбасил арканоиды безо всяких подпрограмм. Так что это — заблуждение. И вводить понятие метода ничуть не хуже, чем начинать с каких-то подпрограмм.

Метод — это подпрограмма (процедура) ассоциированная с контекстом исполнения — объектом, т.е. ввести понятие метода сложнее чем ввести понятие подпрограммы (процедуры).

СГ>>Что такое void? Почему именно Main?

S>Да. с Void придется повозиться.

Опять, то-то и оно.

S>Итак, пока что у нас Оберон — C# идут один-в-один, за исключением void. Во всем остальном паритет.


А еще за исключением class, Main, static,...
Re[15]: Oberon???????????????????????????????????
От: Kluev  
Дата: 26.10.04 13:42
Оценка: 1 (1) +1 :)
Здравствуйте, Сергей Губанов, Вы писали:

<поскипано>

S>>Итак, пока что у нас Оберон — C# идут один-в-один, за исключением void. Во всем остальном паритет.

СГ>А еще за исключением class, Main, static,...

Зачем так жарко спорить когда питон уже всех "порвал" своей простотой
Re[15]: Oberon???????????????????????????????????
От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
Дата: 26.10.04 13:49
Оценка:
Здравствуйте, LaptevVV, Вы писали:

LVV>Ага, почитайте вот это


LVV>


Если не секрет, то скажите пожалуйста, что именно Вас рассмешило?
Re[16]: Oberon???????????????????????????????????
От: LaptevVV Россия  
Дата: 26.10.04 14:00
Оценка:
Здравствуйте, Сергей Губанов, Вы писали:

СГ>Здравствуйте, LaptevVV, Вы писали:


LVV>>Ага, почитайте вот это


LVV>>


СГ>Если не секрет, то скажите пожалуйста, что именно Вас рассмешило?

Ну, тут война, как у Макаревича в "Поезде"
А смысл-то один — жизнь. Только точка зрения разная.
Так и тут — ноги растут из одного места! А потом, четко было сказано, что Билл- непрофессионал — самоучка, поэтому подвигнуть его обратить внимание на надежность могут только происки конкурентов!
Ей-Богу, мне смешно!
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Re[14]: Oberon???????????????????????????????????
От: cat-man-do  
Дата: 26.10.04 14:06
Оценка: -1
Здравствуйте, Sinclair, Вы писали:

СГ>>4) Как понять что Console как-то связана с приведенной выше using System;

S>Хорошо, свяжем их явно.
S>
S>class Class1
S>{
S>    static void Main()
S>    {
S>        System.Console.WriteLine("Hello World");
S>    }
S>}
S>

S>Итак, пока что у нас Оберон — C# идут один-в-один, за исключением void. Во всем остальном паритет.

В Oberon-е мне нравится _однозначность_ его конструкций. Например, то что в C# можно написать System.Console.WriteLine и Console.WriteLine _я_ уже считаю недостатком языка. Если я в программе на Oberon вижу цепочку identifier1.identifier2.identifier3, то всегда знаю что identifier1 объявлен в текущем модуле и могу быстро посмотреть что он означает. Если мне встречается Console.WriteLine в программе на C# я не смогу сразу понять что такое Console и откуда оно взялось, я в курсе, что современные IDE легко позволяют мне это определить, но это решение одного из проявлений проблемы, а не ее самой. В Delphi похожие недоработки языка приводили к необходимости, в сложных библиотеках, идентификаторов состоящих из 8-10 слов.
В Oberon невозможно обратится к полям/методам результата функции, его можно только присвоить переменной или передать в другую функцию/процедуру, после Delphi это очень раздражало, но то, что вызов метода выглядит как вызов метода (последовательности действий, возможно изменяющих переменные/поля) и отличается от обращения к полям _я_ засчитываю как достоинство языка.
Re[15]: Oberon???????????????????????????????????
От: Sinclair Россия https://github.com/evilguest/
Дата: 26.10.04 14:25
Оценка:
Здравствуйте, cat-man-do, Вы писали:


CMD>В Oberon-е мне нравится _однозначность_ его конструкций. Например, то что в C# можно написать System.Console.WriteLine и Console.WriteLine _я_ уже считаю недостатком языка. Если я в программе на Oberon вижу цепочку identifier1.identifier2.identifier3, то всегда знаю что identifier1 объявлен в текущем модуле и могу быстро посмотреть что он означает.

Не факт, что это достоинство. Фактически, это означает необходимость везде использовать Fully Qualified Names. В среде с развитыми библиотеками это привело бы к идентификаторам кошмарной длины. Как вам имя класса System.Data.SqlClient.SqlConnection?
CMD> Если мне встречается Console.WriteLine в программе на C# я не смогу сразу понять что такое Console и откуда оно взялось, я в курсе, что современные IDE легко позволяют мне это определить, но это решение одного из проявлений проблемы, а не ее самой.
Ну, если так не хочется использовать короткие имена — выкинь все using. Прелесть в том, что всегда есть выбор
CMD>В Delphi похожие недоработки языка приводили к необходимости, в сложных библиотеках, идентификаторов состоящих из 8-10 слов.
Нет. В Delphi недоработка состояла в одноуровневости имен пакетов, что приводило к вынужденным конфликтам имен. И то, на самом деле всегда можно было использовать Qualified Name безо всяких десятисловных идентификаторах.
CMD>В Oberon невозможно обратится к полям/методам результата функции, его можно только присвоить переменной или передать в другую функцию/процедуру, после Delphi это очень раздражало, но то, что вызов метода выглядит как вызов метода (последовательности действий, возможно изменяющих переменные/поля) и отличается от обращения к полям _я_ засчитываю как достоинство языка.
Хм. Это на Delphi вызов метода выглядит как обращение к полю или свойству. На C# вызов метода отличается весьма характерными скобочками.
... << RSDN@Home 1.1.4 beta 3 rev. 185>>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[9]: Oberon???????????????????????????????????
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 26.10.04 14:43
Оценка:
Здравствуйте, Сергей Губанов, Вы писали:

СГ>То есть сначала надо будет объяснить что такое namespace,


Необязательно

СГ> class, static void Main,

СГ>ее аргумент string[] args,

необязательно

СГ> вот этого кракозябла [STAThread] — объяснить.


Совсем не нужно

СГ>Не хило?


ВВ преподает не в школе, а в институте.
... << RSDN@Home 1.1.4 beta 3 rev. 207>>
AVK Blog
Re[12]: Oberon???????????????????????????????????
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 26.10.04 14:43
Оценка:
Здравствуйте, Sinclair, Вы писали:

S>И чем же этот хрен слаще вот такой редьки:

S>
S>using System;
S>class Class1
S>{
S>    static void Main()
S>    {
S>        Console.WriteLine("Hello World");
S>    }
S>}
S>

S>?

using можно тоже убрать.
... << RSDN@Home 1.1.4 beta 3 rev. 207>>
AVK Blog
Re[8]: Oberon???????????????????????????????????
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 26.10.04 14:57
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Здравствуйте, Serginio1, Вы писали:


S>> Твое отношение к скобкам известно. Мне лично не нравятся приоритеты особенно в длинных выражениях.


VD>Приоритеты тут в общем-то не причем. Хотя они тоже вещь полезная.


VD>>>выглядят одинаково? А смысл совершенно разный. Смысл пасклая бует таким:

VD>>>
VD>>>if ((a == (b & b)) < c)
VD>>>    ...
VD>>>


S>> Это бред для любого языка. Сравнивать булевы величины с числовыми.


VD> Знаток, блин... Надыбай компилятор С++ определи переменные с типом int и поробуй скомпилировать. Уверяю тебя, что все скомпилируется без проблем.


Конечно скомпилируется. Если в С++ такое проходит для float

  float a=1/(1<< 23);
  if (a) {.....}


Народ активно использует на неравенство 0 любые типы.
А в твоем примере сравнивать булевы с небулевыми для защитника типобезопасности считаю БРЕДОМ.
VD>В общем, ты меня извини. Но нехочу я с тобой осбуждать вопросы безопасного программирования. Ты его в принципе не признаешь.
Я признаю любое, оптимально подходящее для решения конкретной задачи. Для примера 1С нетипизированный язык, без битовой арифметики итд. Однако на ней можно делать огромную кучу полезных вещей.
А если добавить сюда и перегрузку то сдвиг в лево << может обозначать,что угодно
О каком безопасном программировании может идти речь.
S>> Все при том же. Ты не сможешь приенить битовые операторы к булевым и булевы к небулевым.

VD>Да нет никаких булевых операций в дельфи. Там только битовые. О том и речь. Это жудчайшая кривь. От этого, как оказалось, отакзался даже Вирт в Обероне.


Ну ну. Достань компилятор Delphi и сравни булевый тип с небулевым
Сразу вылетит ошибка компиляции. А на ассемблерном уровне полностью с тобой согласен.
VD>>>C# не для тебя. Он для тех кому дороги слова типобезопасность и для тех кто не будет уродовать код ради лишней милисикунды.
S>> А ты помнишь песню "Есть только миг между прошлым и будущим, именно он называется жизнь".
S>> Все в этом мире относительно.

VD>


S>> Ну Паскаль всегда был типобезопасным в отличие от некоторых языков, Иногда правда и во вред.


VD>Паскаль то может и был. А вот Дельфи никгда. Там типобезопасность очень быстро порезализ для производственных нужд. Оно и понятно. Жизнь есть жинь. Но разум то нужно иметь...


S>> Но любые ограничения легко обходятся.


VD>А, ну, вот пусть фанаты и обходят. А детей учить на этом убожище не стоит.

Ага С++ это верх совершенства . Да и разговор здесь шел не о Delphi.

S>> Ага в Яве и C# болше влияния Delphi (Паскаля) нежели C++.


VD>Ага. Ну, просто одно влияние дельфи... если другого не видил. Дельфи вышло в 95-ом. К этому моменту Ява уже разрабатвалась несколько лет.


S>> (Всетаки Delphi был раньше Явы)


VD>Ага. Примерно на пол года. Вот как они успели то все передрать.


VD>И главное, как грамотно подрали то! Ни одной проблемы у дельфи не переняли.

Извини но Ява очень упрощенный язык.
и солнце б утром не вставало, когда бы не было меня
Re[14]: Oberon???????????????????????????????????
От: WWL  
Дата: 26.10.04 16:52
Оценка:
Здравствуйте, Sinclair, Вы писали:

S>Итак, пока что у нас Оберон — C# идут один-в-один, за исключением void. Во всем остальном паритет.


НИ КАКОГО ПАРИТЕТА!!!
То, что написал Серней, это всё ЯВНОЕ знание о том, как пишутся программы на КП. Неявностей и недоговорённостей нет. То, что ему преполагалось в ответ — ОЧЕНЬ упрощённая версия, того, что МОЖНО написать. В связи с тем, что есть ещё и "сокровенные знания", присутствует риск "нарваться" на оные, без понимания и представления, "а чё происходит-то?..."
Всё на свете — суета сует...
Re[15]: Oberon???????????????????????????????????
От: Sinclair Россия https://github.com/evilguest/
Дата: 26.10.04 17:15
Оценка:
Здравствуйте, WWL, Вы писали:

WWL>НИ КАКОГО ПАРИТЕТА!!!

WWL>То, что написал Серней, это всё ЯВНОЕ знание о том, как пишутся программы на КП. Неявностей и недоговорённостей нет. То, что ему преполагалось в ответ — ОЧЕНЬ упрощённая версия, того, что МОЖНО написать. В связи с тем, что есть ещё и "сокровенные знания", присутствует риск "нарваться" на оные, без понимания и представления, "а чё происходит-то?..."
Ты не мог бы мне теперь все это объяснить так, чтобы я понял? Какая еще упрощенная версия? Он написал рабочую программу на Обероне. Я — на шарпе. Или тебя смущает то, что в Шарпе можно еще много чего написать? Ну так и КП словом END не заканчивается.
... << RSDN@Home 1.1.4 beta 3 rev. 185>>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[9]: Oberon???????????????????????????????????
От: VladD2 Российская Империя www.nemerle.org
Дата: 26.10.04 17:23
Оценка:
Здравствуйте, Сергей Губанов, Вы писали:

Еще раз повторяю, что сложности на первом уроке можно скрыть. Пространства имен вообще можно не затрагивать, остально решается с помощью снипет-компилятора. Ну, а дальше не долго и про классы рассказать в общих чертах. Нагрузка будет не сильная, за то потом будет чето показывать и о чем расскзаывать.

ЗЫ

Блин, дайте мне несколько детей и через неделю они будут писать на шарпе программки.
... << RSDN@Home 1.1.4 beta 3 rev. 207>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[10]: P.S.
От: VladD2 Российская Империя www.nemerle.org
Дата: 26.10.04 17:23
Оценка:
Здравствуйте, Сергей Губанов, Вы писали:

СГ>P.S. Предыдущее сообщение про C#, на счет Питона прошу его не относить, я в Питоне не компетентен.


В Питоне классы не обязательны. Более того они там уступают Шарпу.
... << RSDN@Home 1.1.4 beta 3 rev. 207>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[11]: Oberon???????????????????????????????????
От: VladD2 Российская Империя www.nemerle.org
Дата: 26.10.04 17:23
Оценка: +1
Здравствуйте, Сергей Губанов, Вы писали:

СГ>
СГ>MODULE MyModule;

СГ>IMPORT StdLog;

СГ>BEGIN
СГ>  StdLog.String("Здравствуй мир!");

СГ>END MyModule;
СГ>



Кстати, получается, что разница только в том, что объяснять прийдется про модуль вместо класса. Да уж это татальная разница.
... << RSDN@Home 1.1.4 beta 3 rev. 207>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[13]: Oberon???????????????????????????????????
От: VladD2 Российская Империя www.nemerle.org
Дата: 26.10.04 17:23
Оценка:
Здравствуйте, Kluev, Вы писали:

Ну, в таком виде им только детей пугать. Хотя конечно просой оператор вывести будет проще.

Но еще раз повторяюсь. Снипет-кмпилятор решит эту проблему на первых порах.
... << RSDN@Home 1.1.4 beta 3 rev. 207>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[14]: Oberon???????????????????????????????????
От: VladD2 Российская Империя www.nemerle.org
Дата: 26.10.04 17:23
Оценка:
Здравствуйте, Sinclair, Вы писали:

S>В качестве учебного языка мне он уже нравится. Я так понял, что единственное, что ему вменяется как помеха промышленному применению — так это производительность.


Ему много чего вминяется. Он не типизированный. Не требует объявления переменных перед использованием. Имеет необычную и странную реализацию ООП.

S>Зато есть шанс показать все (или почти все) концепции современного программирования в одном флаконе. Это очень круто.


Это да. Хотя не все. ЛП он не затрагивает.
... << RSDN@Home 1.1.4 beta 3 rev. 207>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[15]: Oberon???????????????????????????????????
От: VladD2 Российская Империя www.nemerle.org
Дата: 26.10.04 17:23
Оценка:
Здравствуйте, INTP_mihoshi, Вы писали:

INT>Ну, в Caml все практически так же... И без извратов с identами


Уж Окамл точно не стоит в качестве первого языка брать.
... << RSDN@Home 1.1.4 beta 3 rev. 207>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[13]: Oberon???????????????????????????????????
От: VladD2 Российская Империя www.nemerle.org
Дата: 26.10.04 17:23
Оценка:
Здравствуйте, Сергей Губанов, Вы писали:

СГ>Оберон:


СГ>1) Существуют модули

СГ>2) Один модуль может импортировать другой модуль
СГ>3) В модулях есть подпрограммы, которые можно вызывать из других модулей

Нет в этом примере подпрограмм.

СГ>C#:


СГ>1) Существуют пространства имен (уже непонятность — а что, собственно, еще за пространство да еще и имен? Где они расположены? А как они выглядят эти пространства?)


Это не нужно на первом уроке. Хотя людям будер проще понять пространства имен енжели какие-то модули.

СГ>2) Существуют классы (еще одна непонятность — что еще за классы? Классы чего? Мы в седьмом классе учимся и что с того?)


Вот это действительно небольшая затыка. Но думаю — это как раз пробем не вызовет.

СГ>3) У классов есть статические методы (опять ребенку непонятно что такое статические и что такое методы, в чем разница между подпрограммами и методами?). Что такое void? Почему именно Main?


Да не надо на первом же уроке разжевывать все. Все равно ребенок будет офигивать от кучи непонятных слов, а не от кучи понятий. До понятий еще дожить нужно.

СГ>4) Как понять что Console как-то связана с приведенной выше using System;


А не нужно его приводить на первом уроке. Можно так:

class Class1
{
    static void Main()
    {
        System.Console.WriteLine("Hello World");
    }
}





В общем лучше я попробую представить как бы я начал обучение "с нуля".

1. Демонстрируем вычисление:
123 + (321 - 454) / 23

даем орлам снипет-компилятор и предлагаем по воодить математические выражения. Объясням, что такое операторы, приоритеты и т.п.

2. Вводим понятие утверждение (statment).
Вводим понятие переменная и тип данных. Демонстрируем код типа:
int x = 321 - 454;
123 + x / 23;


Кстати, если уж говорить об минимизации объясняемых понятий, то Питон действительно рулит, так как в нем нет нужны на начальном этапе объяснять очень многие понятия. Они и не типизированный, так что не нужно будет теорию типов толкать. Да что там?! Он даже наличия функции (процедуры) не требует, не то что модуля. Так что тут Оберон в пролете. Но не думаю, что минимизация тут сильно нужна. Продолжим...


3. Вводим понятие функции и процедуры.
Демонсрируем примеры:
int Calculate()
{
    return 321 - 454;
}

static void Main()
{
    int x = Calculate();
    123 + x / 23;
    Console.WriteLine(123);
}


тут же говорим про вызов и возвращаемое значение. Объясняем, что Console.WriteLine — это процедура определенная во вне.

4. Даем понятие пространства имен и лкассов.
Даем не полное описание, а именно общее понятие. Объясняем, что пространства имен и калассы позволяют группировать связанные функции и процедуры. Так же говорим, что в классах можно объявлять переменные-члены.

Вот тут в качестве примера тот самый:
using System;

class Class1
{
    static void Main()
    {
        Console.WriteLine("Hello World");
    }
}


5. Объясняем понятие класса более подробно.
Вводим понятие экземпляра класса. Расширяем понятие — тип.

using System;

class Ученик
{
    public string _имя;
    public string _фамилия;
    public string _отчество;
    public string _возраст;

    public string Описание()
    {
        return "Имя: " + _имя 
            + " Фамилия: " + _фамилия
            + " Отчество: " + _отчество
            + " Возраст: " + _возраст;
    }
    
    static void Main()
    {
        Ученик ученик = new Ученик();
        ученик._имя      = "Петр";
        ученик._фамилия  = "Иванов";
        ученик._отчество = "Васильевичь";
        ученик._возраст  = 15;
            
        Console.WriteLine(ученик.Описание());
    }
}


Ну, и далее наворачиваем по нарастающей. В водим операторы, и т.п.

Причем именно вводим ООП до структурного программирования, так как оно тогла лучше уляжется в колове.
... << RSDN@Home 1.1.4 beta 3 rev. 207>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[15]: Oberon???????????????????????????????????
От: VladD2 Российская Империя www.nemerle.org
Дата: 26.10.04 17:23
Оценка:
Здравствуйте, LaptevVV, Вы писали:

LVV>

главный язык программирования — т.наз. C# — смоделирован во многом, в том числе и в отношении безопасности программирования, по образцу Оберона.

LVV>

Да тут ничего смешного то нет. И слова эти чистая правда. Шарп и Оберон действительно языки в которых типобезопасноать выведена на первое место. Разница межу ними только в том, что Шарп жив, а Оберон остался научным эксперементом. Как результат этого научного эксперемента тот же Шарп получил прекрасную систему типов и принцыпы работы с ними. Заслуга ребят из МС в том, что они сумели совместить удобство и типобезопасность.

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

Так что нужно сопоставить цели и средства. Если нужно быстро стартануть, то есть два пути:
1. Снипет-компиляторы.
2. Интерпретатор (Питон в данном случае).

Далее чему мы учим?
1. Правильному безопасному программированию? Тогда Питон идет лесом как неудоволетворющий условию.
2. Пытаемся объяснить сразу несколько парадигм? Тогда питон самое оно.
3. ООП? Тогда идел лесом Оберон, да и Питон рассматривается с сомнением.
... << RSDN@Home 1.1.4 beta 3 rev. 207>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[15]: Oberon???????????????????????????????????
От: VladD2 Российская Империя www.nemerle.org
Дата: 26.10.04 17:23
Оценка:
Здравствуйте, Сергей Губанов, Вы писали:

СГ>На модуль, в отличие от пространства имен, можно пальцем показать, вот это модуль, вот как он выглядит и вот он где конкретно находится.


Как раз концепцию модуля будет понять куда сложее чем пространства имен и даже класса. Модуль понятие полуфизическое, полулогическое.

СГ>Опять на это можно прямо пальцем показать, вот так, мол, смотрите, один модуль пользуется услугами другого модуля...


Что значит пользуется услугами? Включает один другой? Или что-то магическое происходит? Не расскзывать же про процесс создания объектников и х связывании и т.п.?

СГ>То-то и оно!


СГ>Метод — это подпрограмма (процедура) ассоциированная с контекстом исполнения — объектом, т.е. ввести понятие метода сложнее чем ввести понятие подпрограммы (процедуры).


В общем, если подходить с позиции "нужно меньше да побыстрее", то Оберон в полноейшем пролете по сравнению с Питоном. В питоне можно смело начинать обяснение хоть с оператора сложения. Ничто этому не помешает.
... << RSDN@Home 1.1.4 beta 3 rev. 207>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.