Re[5]: Почему нельзя преподавать C#
От: Курилка Россия http://kirya.narod.ru/
Дата: 09.03.05 14:28
Оценка: :)
Здравствуйте, _orion_, Вы писали:

__>Здравствуйте, Курилка, Вы писали:


К>>Просвяти неразумного — где ты там зарплату увидел, а?


__> Прости, не правильно понял, это результаты по запросам в гуглу

__>Но тем не менее, то, что программисты на C# получают очеь много — это факт.

Не стоит греметь аргументами, которых сам не разобрал
И поясни — что значит "очень много"?
Больше чем банкиры и олигархи?
И зря ты тут жавистов опустил — они получают примерно такие же деньги, если не больше, а вот про дельфинов есть правда...
Re[9]: Почему нельзя преподавать C#
От: prVovik Россия  
Дата: 09.03.05 14:39
Оценка:
Здравствуйте, GlebZ, Вы писали:

GZ>Нет, не нужно. А вот для того чтобы учитывать что ты работаешь в среде со сборщиком мусора и у тебя нет деструктора, нужно. Поскольку финалайзер и диспозе поддерживается именно языком. И чем тебе грозит работа в финалайзере, тоже нужно знать.

Ну и сколько времени потребуется, чтобы это понять?
Да и потребность в деструкторах в шарпе возникает совсем не часто. А как возникнет, набираешь в MSDN "destructors" и читаешь. Там все написано и про IDispose и про Finalize и т.д. Просто в первый раз получается дольше. Это и есть разведка боем.

GZ>А этой конструкции в С++ нет. Что касается __try/__finally, то я его вообще никогда в жизни не использовал. Детерменированного деструктора С++ хватает для данной функциональности.

Ну дак не в лесу же живем.

GZ>Почти да, и почти нет. Но впрочем это фича платформы которую тоже придется выучить.

Дак и я об этом.

GZ>И что у них есть отличия в наследовании. Они могут наследовать только интерфейсы.

Ниче, компилятор объяснит. А если не понятно, то можно и Ф1 нажать.

GZ>Человеку знающему C++ в ум не придет, что для того чтобы изменить структуру в некотором массиве, нужно выгружать из массива копию, и так же копию обратно вставлять в массив.

Мелочи. Разок полбу граблими получишь, сразу ясно станет.

GZ>И то что при передаче объекта через параметр, нужно помнить что ты создал копию объекта, или ссылку на него.

А в С++ разве не так?
... << RSDN@Home 1.1.4 @@subversion >>
лэт ми спик фром май харт
Re[4]: Почему нельзя преподавать C#
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 09.03.05 14:50
Оценка:
Здравствуйте, minorlogic, Вы писали:

M>Тем что на .NET этого сделать нельзя.


Уверен?
... << RSDN@Home 1.1.4 beta 4 rev. 350>>
AVK Blog
Re[6]: Почему нельзя преподавать C#
От: Andrei N.Sobchuck Украина www.smalltalk.ru
Дата: 09.03.05 14:56
Оценка: :)
Курилка пишет:
> И зря ты тут жавистов опустил — они получают примерно такие же деньги,

afaik, программисты на Коболе получают еще больше. И что ж теперь?

--
Andrei N.Sobchuck
JabberID: andreis@jabber.ru. ICQ UIN: 46466235.
Posted via RSDN NNTP Server 1.9
Я ненавижу Hibernate
Автор: Andrei N.Sobchuck
Дата: 08.01.08
!
Re[12]: Почему нельзя преподавать C#
От: Dog  
Дата: 09.03.05 15:03
Оценка:
V>>> Короче, надо отделять мух от котлет и фреймворк от языка. Язык можно выучить за пару дней, а вот с фреймворком, действительно, придется повозиться.
Dog>> С таким подходом любой язык можно выучить за 3 дня. И после гнуть пальцы
V>Неа, С++ за три дня по любому не выучить, даже если знать шарп. А вот наоборот — легко.
Да ну ? Следуя вашей методе.
1. Ну и сколько времени потребуется, чтобы это понять?
2. Ну дак не в лесу же живем.
3. Ниче, компилятор объяснит. А если не понятно, то можно и Ф1 нажать.
4. Мелочи. Разок полбу граблими получишь, сразу ясно станет.
Где-то между собакой и богом.
Re[7]: Почему нельзя преподавать C#
От: Курилка Россия http://kirya.narod.ru/
Дата: 09.03.05 15:09
Оценка: +1
Здравствуйте, Andrei N.Sobchuck, Вы писали:

ANS>Курилка пишет:

>> И зря ты тут жавистов опустил — они получают примерно такие же деньги,

ANS>afaik, программисты на Коболе получают еще больше. И что ж теперь?


Не надо, пожалуйста, путать разные вещи, рынки и специфика кобола и нета различаются заметно сильнее чем жаба и нет, или для тебя уже Java==Cobol?
Просто человек заявлял, что дельфи и жаба — зло, на них работы не найти и получают люди гроши, мой аргумент был против этого (в отношении джавы), я не прав?
Re[13]: Почему нельзя преподавать C#
От: prVovik Россия  
Дата: 09.03.05 15:22
Оценка:
Здравствуйте, Dog, Вы писали:


Dog>Да ну ? Следуя вашей методе.

Dog>1. Ну и сколько времени потребуется, чтобы это понять?
Dog>2. Ну дак не в лесу же живем.
Dog>3. Ниче, компилятор объяснит. А если не понятно, то можно и Ф1 нажать.
Dog>4. Мелочи. Разок полбу граблими получишь, сразу ясно станет.
Dog>

Ну и в чем проблема?
... << RSDN@Home 1.1.4 @@subversion >>
лэт ми спик фром май харт
Re[5]: Почему нельзя преподавать C#
От: minorlogic Украина  
Дата: 09.03.05 15:27
Оценка:
Здравствуйте, AndrewVK, Вы писали:

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


M>>Тем что на .NET этого сделать нельзя.


AVK>Уверен?

Да , если знаешь то не интригуй, а выкладывай Только не забывай что есть ОС кроме виндовс Икс Пи и браузеры кроме IE
Ищу работу, 3D, SLAM, computer graphics/vision.
Re[6]: Почему нельзя преподавать C#
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 09.03.05 15:41
Оценка: +2 -2
Здравствуйте, minorlogic, Вы писали:

AVK>>Уверен?

M>Да , если знаешь то не интригуй, а выкладывай

А что тут интриговать? IE умеет хостить UserControl дотнетовский.

M> Только не забывай что есть ОС кроме виндовс Икс Пи


Никак не влияет

M> и браузеры кроме IE


Для целей обучения некритично.
... << RSDN@Home 1.1.4 beta 4 rev. 350>>
AVK Blog
Re[8]: Почему нельзя преподавать C#
От: Andrei N.Sobchuck Украина www.smalltalk.ru
Дата: 09.03.05 15:50
Оценка: +1
Курилка пишет:
>> > И зря ты тут жавистов опустил — они получают примерно такие же деньги,
>
> ANS>afaik, программисты на Коболе получают еще больше. И что ж теперь?
>
> Не надо, пожалуйста, путать разные вещи, рынки и специфика кобола и нета
> различаются заметно сильнее чем жаба и нет, или для тебя уже Java==Cobol?
> Просто человек заявлял, что дельфи и жаба — зло, на них работы не найти
> и получают люди гроши, мой аргумент был против этого (в отношении
> джавы), я не прав?

Я думаю, что прав. Просто я хотел обратить внимание, что к любым
сравнениям следут подходить с осторожностью. То есть, нужно понимать,
что же именно сравнивается, и можно ли из результата сравнения делать
выводы.

--
Andrei N.Sobchuck
JabberID: andreis@jabber.ru. ICQ UIN: 46466235.
Posted via RSDN NNTP Server 1.9
Я ненавижу Hibernate
Автор: Andrei N.Sobchuck
Дата: 08.01.08
!
Re[9]: Почему нельзя преподавать C#
От: milkpot Россия  
Дата: 09.03.05 17:09
Оценка:
Здравствуйте, GlebZ, Вы писали:

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


M>>Ну и как? Научился? О сишнике надо рассказать Задорнову (сатирику), чтоб тот выступил на одной из ближайших Микрософтовских

M>>презентаций.
GZ>Почему ты решил что это говорит в пользу или не в пользу языка? Я просто говорю что они слишком разные даже на бытовом уровне.
Я ничего не решал, просто эта история — повод посмеяться Ибо нет смысла напрягаться.
Разница и так понятна (можно ж и книжки почитать, в сети покапаться).
.НЕТ (и C#) — новое кулинарное блюдо от Микрософт.
Завтрак туриста под названием C у них немного пригорел. Испугались и решили пошаманить — получился .НЕТ
C# — как приправа жгучая

GZ>С уважением, Gleb.
Re[7]: Почему нельзя преподавать C#
От: d Bratik  
Дата: 09.03.05 22:49
Оценка: -2
Здравствуйте, Cyberax, Вы писали:

C>d Bratik пишет:


>> А теперь попробуйте объяснить человеку, который учил в школе

>> математику и делает в программировании свои первые шаги, почему
>> программа объявляется с помощью ключевого слова class, а не program

C>Сначала говорим, что это такое "магическое слово" и на него можно не

C>обращать внимание. А вот потом, когда будет изучатся ООП — тогда уже и
C>объяснять про классы. Более того, так можно построить плавный переход от
C>процедурного стиля к ООП (например, сначала вводя коллекции как "черные
C>ящики").

Вы когда-нибудь пытались объяснить программирование хотя бы одному человеку, который его еще не знает?

>> почему программа представляет собой множество, в котором, как

>> известно, порядок элементов не важен

C>А он не важен, вообще говоря. Порядок методов в классе значения не имеет.


А порядок операторов в процедуре тоже не имеет значения?

>> почему главная процедура, читаемая по английски как "пустая главная"

>> (void main)

C>Так же — сначала считаем магическим словом, когда изучение дойдет до

C>функций — объясняем.

Так все Ваши ученики будут заниматься сплошным copy-paste без малейшего понимания сути вещей

>> на самом деле не пустая и, наконец, почему понятие главной процедуры

>> не объединено с понятием программы

C>А почему оно должно быть объединено?


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

>> C>А _нафига_ нужен Дельфи? Через 5 лет Дельфи уже уйдет в историю и

>> C>останется в нишевых областях (как сейчас FoxPro и прочие dBase'ы).
>> Для преподавания программирования на ближайшие 5 лет ничего лучшего
>> пока нет.

C>Да? Чтобы через пять лет студенты оказались зависимыми от

C>_коммерческого_ продукта (Дельфи — оно ведь далеко не бесплатное), да
C>еще и устаревшего.

Главное, чтобы студенты не оказались зависимыми от бредовых идей, некомпетентных людей и комитетов, которые стандартизируют разное барахло.

Только коммерческое ПО является инновационнным. Весь бесплатный софт — это сплошное подражательство — караоке-ПО. А студентов нужно приобщать к лучшему, что есть на рынке. И не важно, сколько это стоит. Для процесса обучения цена софта не должна играть никакой роли (и в нашей стране не играет .

>> C>Зоннон — тоже полная фигня. Это не промышеленный язык, и *новых фич

>> в нем примерно "0"*.
>> Глупое заявление.

C>Назовите в нем новые фичи, пожалуйста. Я слушаю...


Концепция ООП (понятия definition и implementation), концепция activity, концепция синхронизации между потоками (оператор wait), концепция протоколов, описываемых в формате EBNF, концепция параллельных вычислений (алгоритмы максимально эффективны на однопроцессорных и многопроцессорных комплексах). Есть и другие новые фичи.

>> C>Ага, умение программировать у вас = умение писать GUI

>> Далеко не только

C>Каюсь, зыбыл. Еще и RDBMS.


И это еще далеко не все.
Re[8]: Почему нельзя преподавать C#
От: Cyberax Марс  
Дата: 10.03.05 09:44
Оценка:
d Bratik пишет:

> C>Сначала говорим, что это такое "магическое слово" и на него можно не

> C>обращать внимание. А вот потом, когда будет изучатся ООП — тогда уже и
> C>объяснять про классы. Более того, так можно построить плавный
> переход от
> C>процедурного стиля к ООП (например, сначала вводя коллекции как "черные
> C>ящики").
> Вы когда-нибудь пытались объяснить программирование хотя бы одному
> человеку, который его еще не знает?

Пытался. Получалось, хотя и дооолго.

> C>А он не важен, вообще говоря. Порядок методов в классе значения не

> имеет.
> А порядок операторов в процедуре тоже не имеет значения?

Смотря на каком языке

>>> почему главная процедура, читаемая по английски как "пустая главная"

>>> (void main)
> C>Так же — сначала считаем магическим словом, когда изучение дойдет до
> C>функций — объясняем.
> Так все Ваши ученики будут заниматься сплошным copy-paste без
> малейшего понимания сути вещей

На _первых_ занятиях — да. Потом будут постепенно понимать что они делают.

>>> на самом деле не пустая и, наконец, почему понятие главной процедуры

>>> не объединено с понятием программы
> C>А почему оно должно быть объединено?
> Это не я Вас спрашиваю, это Вас новичок спросит, а Вы уж потрудитесь
> объяснить.

Новичок как раз не спросит.

> А объединены они должны быть, поскольку главная процедура это и есть

> сама программа.

Спорный момент.

> Для чего создаются процедуры? Правильно, для их неоднократного вызова

> из разных мест программы — чтобы один и тот же код по десять раз не
> писать. Ну вот теперь объясните здравомыслящему человеку, на кой ляд
> нужна "пустая главная" процедура, которая вызывается непонятно откуда
> всего один раз?

А кто сказал, что она может быть вызвана только один раз?

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

> C>Да? Чтобы через пять лет студенты оказались зависимыми от

> C>_коммерческого_ продукта (Дельфи — оно ведь далеко не бесплатное), да
> C>еще и устаревшего.
> Главное, чтобы студенты не оказались зависимыми от бредовых идей,
> некомпетентных людей и комитетов, которые стандартизируют разное барахло.

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

> Только коммерческое ПО является инновационнным.


Ага, конечно.

> Весь бесплатный софт — это сплошное подражательство — караоке-ПО. А

> студентов нужно приобщать к лучшему, что есть на рынке. И не важно,
> сколько это стоит.

Важно, я не хочу платить за что-то. C# изучать еще можно — для него есть
свободные имплементации и он стандартизован ИСО.

> Для процесса обучения цена софта не должна играть никакой роли (и в

> нашей стране не играет .

И это плохо. Очень плохо.

> C>Назовите в нем новые фичи, пожалуйста. Я слушаю...

> Концепция ООП (понятия definition и implementation)

Чего? _ЭТО_ вы называете _НОВЫМ_?????

> концепция activity, концепция синхронизации между потоками (оператор wait)


Такая синхронизация уже лет ... назад была в Erlang'е. Ничего нового в
ней нет.

Кстати, только нормальные функциональные языки позволяют сделать
корректный wait. Рекомендую почитать про асинхронный ML:
http://portal.acm.org/citation.cfm?id=866513

> концепция протоколов, описываемых в формате EBNF


И что тут нового, кроме того что это в язык непонятно зачем добавили?

> концепция параллельных вычислений (алгоритмы максимально эффективны на

> однопроцессорных и многопроцессорных комплексах). Есть и другие новые
> фичи.

OpenMP (для С++ в том числе) уже лет 5 назад было.

--
С уважением,
Alex Besogonov (alexy@izh.com)
Posted via RSDN NNTP Server 1.9
Sapienti sat!
Re[8]: Почему нельзя преподавать C#
От: Dog  
Дата: 10.03.05 09:48
Оценка:
DB>Вы когда-нибудь пытались объяснить программирование хотя бы одному человеку, который его еще не знает?
А зачем ? Выбор професси програмист в большенстве своём — это осознаный выбор. А все остальным ваше программирование нафиг не упало. Всяких бухгалтеров надо учить пользоваться Вордом, Эксэлем, Интернетом а не паскалем.

C>>Да? Чтобы через пять лет студенты оказались зависимыми от

C>>_коммерческого_ продукта (Дельфи — оно ведь далеко не бесплатное), да
C>>еще и устаревшего.
DB>Главное, чтобы студенты не оказались зависимыми от бредовых идей, некомпетентных людей и комитетов, которые стандартизируют разное барахло.
Громкие слова. Так и хочется спросить. А судьи кто ?
Где-то между собакой и богом.
Re[13]: Почему нельзя преподавать C#
От: Gaperton http://gaperton.livejournal.com
Дата: 10.03.05 12:34
Оценка:
Здравствуйте, Andrei N.Sobchuck, Вы писали:

ANS>VladD2 пишет:

>> ANS>После 82г изменения были. Как минимум, блоки превратились в полноценные
>> ANS>замыкания,
>>
>> Спасибо, Кею за то что он адаптировал хорошую идею для ООЯ. В 2002
>> запыкания выродились в полноценную концепцию делегатов.

ANS>Ирония тут не в тему. Кей отношения к замыканиям не имеет. А банальные

ANS>указатели на функцию тем более.
Если я правильно помню, замыкания впервые появились в старом добром Algol 68.
Re[14]: Почему нельзя преподавать C#
От: Dog  
Дата: 10.03.05 13:07
Оценка:
ANS>>Ирония тут не в тему. Кей отношения к замыканиям не имеет. А банальные
ANS>>указатели на функцию тем более.
G>Если я правильно помню, замыкания впервые появились в старом добром Algol 68.
Этот язык надо обязательно включить в программу обучения, как яркий пример концепции замыкания
Где-то между собакой и богом.
Re[15]: Почему нельзя преподавать C#
От: Gaperton http://gaperton.livejournal.com
Дата: 10.03.05 20:30
Оценка:
Здравствуйте, Dog, Вы писали:

ANS>>>Ирония тут не в тему. Кей отношения к замыканиям не имеет. А банальные

ANS>>>указатели на функцию тем более.
G>>Если я правильно помню, замыкания впервые появились в старом добром Algol 68.
Dog>Этот язык надо обязательно включить в программу обучения, как яркий пример концепции замыкания
Да, неплохо было бы. По крайней мере, было бы меньше дурацких постов про замыкания, что уже дело.
Re[15]: Почему нельзя преподавать C#
От: VladD2 Российская Империя www.nemerle.org
Дата: 11.03.05 01:15
Оценка: 59 (8)
Здравствуйте, Andrei N.Sobchuck, Вы писали:

ANS>Имеющий глаза да увидит:

ANS>"is an abstraction representing a function, plus the lexical
ANS>environment (see static scoping) in which the function was created
,
ANS>and its application to arguments"

ANS>Выделено мной.

Я бы даже охарактеризовал твое видение как — "гляжу в книгу — вижу фигу". (шучу).

Ладно, попробую объяснить как этот термин понимаю я (по подробнее), хотя в статье на которую я дал ссылку и так все более менее описано.

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

Например:
lambda x . x + y

содержит свободную переменную "y". Такое выражение не является замкнутым в том смысле, что оно ссылается на некую неопределенную в данном контексте переменную.
А вот такой пример:
lambda x . lambda y . x + y

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

Таким образом замыкание — это некая функция с ее контекстом которую можно передать в другую функцию в качестве параметра (ну, или присвоить некой переменной).

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

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

Интересно, что в С++ подобного решения нет. Нет, конечно, в С++ есть старые добрые указатели на функции, но это наследие не ОО С. А вот ОО-замыкания в С++ нет. Да, в С++ есть указатель на член класса, в том числе и на метод класса. Но вот он то как раз ничего общего к замыканиям не имеет, так как не позволяет передавать ссылку на абстрактный метод. Говоря языком лямбда-исчислений — он содержит свободную переменную, т.е. не замкнут. Забавно, что с помощью шаблонов и какой-то матери в С++ таки возможно эмулировать замыкания, но это уже получается не первокласный объект, а паттерн требующий напряжения как людских мозгов, так и компилятора. Кстати, интерфейсы тоже можно рассматривать как замыкания. Только не на одной функции, а целого ряда.

Однако это все таки есть ООЯ реализующие замыкания как первоклассные сущности. Это Delphi. В нем данная сущность так и называется — Closure. Характерно, что Borland же является инициатором предложения по введению в С++ замыканий в комитет по стандартизации С++.

C# имел аналогичную фишку еще в самой первой версии. И называлась она делегат. Анонимные методы же C# 2.0 это несколько иное решение, хотя и тесно связанное с первым. Он всего лишь позволяет объявлять методы прямо внутри других методов. При этом C# 2.0 точно так же позволяет замыкать анонимные методы на контекст в котором они объявлены. Просто, этот контекст несколько иной (он уже включает и методы в которые вложен анонимный метод). В общем, анонимный метод — это свого рода ООП-лямбда++.
Ради хохмы изобразил совершенно сумасшедшую вещь (для императивного программиста):
using System;

class Program
{
    delegate int Inner(int x);
    delegate Inner Outer1(int y);

    static void Main(string[] args)
    {
        Outer1 a = delegate(int x)
        {
            Inner c = delegate(int y)
            {
                x++;
                return x + y;
            };

            return c;
        };

        Console.WriteLine(a(4)(5));
    }
}

На консоль выводится 10.



ANS>пока не зарелизили, до того и нет (подсказка: на СД со вторым

ANS>сервиспаком был 1.1).

Ну, это для тех кто видеть не хочет. Все остальные делаю поиск по этому сайту и качают совершено рабочий Framework. Или от того, что Microsoft напишет "Релиз!" что-то изменится? Возможно что на сегодня этой бэтой воспользовалось народу больше чем всеми версиями Смолтока.

ANS>Сам термин "(лексическое) замыкание" происходит от того, что эта

ANS>конструкция замыкает в себе все переменные из лексического контекста в
ANS>котором функция определена, а не того в котором выполняется.

Ну, откуда, по-моему, происходит термин я написал выше. В себя же замыкания замыкаться не могут хотя бы на основании выделенных тобой строк. "Scope", или по нашему область видимости, для замыкания — это область в которой определен метод, а не как не тело метода.

>> Легко WinFX Indigo Don Box

>> <http://www.google.ru/search?hl=ru&amp;q=WinFX+Indigo+Don+Box&amp;lr=&gt;

ANS>"Ты не мудри, ты пальцем покажи" (с) анек


Там первые же ссылки идут прямо куда нужно. Общая идея — будет некий фрэймоврк с помощью которого можно будет декларативно или программно указать как и куда нужно осуществлять вызов. Асинхронность базируется на идеологии посылки сообщений. Ну, а там уже разные транспорты от инпроцесс до Web-сервисов.

ANS>Это врядли. Даже применение банальных

ANS>внешних <br />
<span class='lineQuote level1'>ANS&gt;итераторов</span>
уже потребует техники программирования отличной от

ANS>"обычной" (и доказывает, что foreach — это недоработка проектировщиков).
ANS>Конечно обратная совместимость будет в любом случае, однако часть фич
ANS>станет "deprecated".

Это мягко говоря заблуждение. Наличие столь простого механизма реализации паттерна итератор кончено приятный подарок. Но и раньше их можно было делать. foreach и введение в базовые библиотеки интерфейса IEnumerable — это очень грамотное и хорошо продуманное дизайнерское решение. Паттерн Итератор очень широко используется на практике в ООП. Введение же его в язык позволяет избежать эмуляции этого паттерна императивными средствами, и тем самым позволить более четко и однозначно выражать намерения программиста. Так же оно упрощает освоение этого паттерна и восприятие при чтении кода.

У этого паттерна есть де стороны. 1. Применение. Когда я я могу перечислять элементы любого списка. 2. Реализация. К сожалению в первой версии C# озаботились только первой стороной вопроса. Вторая версия просто исправляет эту недоработку и автоматизирует не только применение паттерна, но и его реализацию.

Итераторы же в C# — это ни что иное как дополнительный синтаксический сахар. Все что можно сделать с помощью них в новой версии можно было сделать и в старо, но это было делать значительно сложнее.

Кстати, очень жаль все же, что ребятки не озаботились упрощением реализации этого паттерна для сложных (например, иерархических) структур данных. Конечно можно просто использовать итераторы рекурсивно, но это не так эффективно (хотя конечно это можно оптимизировать компилятор).

ANS>Ничего не имею против технологий от МС.


Позволь мне усомниться в искренности твоих слов. Ты подспудно сравниваешь их творения со своим фаворитом — Смолтоком и постоянно пытаешься найти некое преимущество отбрасывая все аргументы которые тебе не угодны.

ANS> Но активное время их жизни — 5-7

ANS>лет.

Давай посчитаем. Васик от МС живет уже лет 25-23. ДОС хотя давно морально устарел живет уже 20 лет. Вин16 до сих пор здравствует во всех версиях Windows. У меня, например, бухгалтерия до сих пор 16-битная и я с успехом запускаю ее под ХРюшей.

ANS> Если их считать истиной в последней инстанции (что ты постоянно

ANS>подчеркиваеш),

Я? Истиной? Здорово! Я постоянно критикую все кривое что есть у них. Просто это почему-то считается нормальным и даже очень правильным. Такая же критика в сторону какого-нибудь Линукса или Смолтока сразу встречает бурю протестов. Вот тебе и кажется, что что-то превозносится.

Что да языков программирования, то я с большим удовольствием повозился с Руби и Питоном. Многие аспекты этих языков мне очень понравились. Мне так же очено понравились идеи родившиеся в ФЯ вроде функций высшего порядка, подбора по образцу и даже идея встраивания в язык мощных высокоуровневых средств работы со списками (хотя она уже довольно спорна). Но я так же увидел и ряд существенных недостатков которые для мнея лично являются более важными. Так мне очень не нарвятся такие вещи, как странности в понимании областей видимости Питоном, а так же необязательность декларации переменных и нетипизированность этих языков. Так же я вижу более перспективной идею управляемого исполнения и наличия промежуточного языка. Именно он эти факторы позволяют успешно конкурировать Яве и .NET-у в том числе и с интерпретируемыми нетипизированными языками. Ведь недавно считалось, что фишка вроде generic-ов в принципе невозможна для статически типизируемых языков (возможны только шаблоны которые полностью разрешают все связи на стадии компиляции), а единственным выходом в создании гибких полиморфных решений казались именно динамически типизируемые языки.

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

ANS> не обращая внимания на классику, то полученные знания

ANS>могут устареть уже к окончанию института.

Это ты не пытайся не видеть, что эта самая классика очень грамотно интегрируется в эти самые новые решения. Хотя нет. Замечаешь, но только тогда когда пытался унизить эти технологии говоря, что мол ничего нового в них нет. Получает эдакий парадокс. Ничего нового в них нет так как оно было придумано в других местах. А то что это самое новое как раз и интегрируется в это "старое" пытаемся умалчивать.

По мне новое в .NET, то что впервые столько прогрессивных подходов интегрированы в одну среду и один язык (можно даже сказать, что во все совместимы с .NET-ом языки). И мне очень нравится, что .NET в отличии не остановился на достигнутом, а продолжает впитывать интересные идеи.

>> Я наблюдал подобное явление не раз. Ломка начинается даже когда люди

>> осваивают С++ после Дельфи. А уж осваивать С++ после смолтока или даже
>> Руби — это форменное издевательство.

ANS>Вероятно потому, что остаётся недоумения зачем нагородили такие

ANS>сложности, когда можно было просто и изящно.

Возможно отчасти и от этого. Но не находишь, что от части — это происходит потому, что людям вовремя не преподали идею типизации и не объяснили всего что с этим связано. По сути кроме строкой типизации в С++ особых преимуществ нет. Но очень многие привязаны к этому языку именно из-за следствий этой строгой типизации. Ведь любой динамически типизированный язык не нуждается в шаблонах. Любая функция полиморфна! Но те самые проверки типов во время компиляции и ту самую скорость получаемого кода просто нельзя обеспечить если в любом месте программы можно переопределить переменную присвоив ей не только другой тип, но и совершенно другое значение.

ANS>Да не бьюсь. С чего ты взял?


А со столь рьяного противостояния появлению C#-а или Явы в университетах и школах.

ANS> Петиций в минобразования не пишу и пр.


А как расценивать твое творчество в данной теме? Ты это все для себя, так сказать, для души, что ли пишешь?

ANS>Хотя, государственная политика, имхо, должна подразумевать, что

ANS>получившиеся специалисты будет более эффективны.

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

ANS> Эффективность

ANS>подразумевает не только скорость написания программы, но и качество.

И конечно же неоспоримо, что качество программ на Смолтоке конечно же выше, или выше качество программистов обучавшиеся на Смолтке?

ANS>Например, если Вася Пупкин слабает сайт/веб приложение в стиле "что вижу

ANS>о том и пою", то, когда прийдёт необходимость сайт
ANS>модифицировать/расширить его прийдётся переписать.

И конечно же в этом был виноват грязный Майкрософт который заставил этого Васю набраться бездарных идей от свого подлого детища извращающего концепции ООП и процедурного программирования. Прелэсно!


ANS> В рамках одной фирмы

ANS>- это фигня, а вот в рамках страны получится, что куча народу не создают
ANS>пользу а занимаются переделыванием того, что можно было сделать один
ANS>раз.

Знаешь как это называется? Ты ассоциировал .NET, C# и Microsoft с неким дерьмом — пришил ярлык неудачного решения. И теперь борешься с этим ярлыком. По сути ты ничего сказать не можешь. Ты все время борешься с ярлыком. Причем ты даже не декларируешь ущербность C#-а явно. Ты прост говоришь:

Эффективность подразумевает не только скорость написания программы, но и качество.

Вроде как бы про сам C# или .NET ты ничего не сказал. Но так как сами сообщения направлены именно против него, и так как негатив бросается в воздух, то у читателя твоих сообщений даже не возникнет сомнения, что именно применение C#-а снизит качество кода.
В общем, меня такие приемы очень раздражают.

ANS> Второй момент, то самое пресловутое устаревание технологий. Говорят

ANS>раз в три года нужно переучиваться. А чему переучиваться, если за
ANS>последние тридцать лет нового ничего не придумали?

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

ANS> Вот и получается, что

ANS>зная классику при "изобретении" всяких SOP, AOP, введении внутренних
ANS>итераторов, итераторов, кои являются недо-сопроцедурами и прочей
ANS>белеберды, достаточно это всё соотнести с уже извесными концепциями, и
ANS>даже сразу можно видеть где всё это можно применить и как.

И конечно если изучать "классику" на языке отличном от Смолтока то:

специалисты будет более эффективны

! Изумительно.

ANS> Тратя меньше

ANS>времени на обучение собственно программирования программист будет больше
ANS>тратить времени на изучение предметной области.

И конечно меньше всего времени на только что введенную в разговор область ученик будет тратить изучая Смолток, а в C#-е он зашьется в предметной области. Ведь немыслимо же на C#-е изучать концепции ООП? Надо обязательно ведь с Web- сервисв в WinForms-ов начать. Так?

ANS> Значит будет более

ANS>эффективен не только программист, но и конечные пользователи. А из
ANS>эффективности отдельных людей состоит эффективность всей страны.

В общем, все здорово, все верно. Теперь переклей ярлык на свой любимый Смолток и произнеси эту тираду в его сторону. Уверяют тебя ничего ровным счетом не изменится.

Вот только когда обученный базовым вещам "специалист" прийдет на реальное производство, то начнет от свой трудовой путь с... не поверишь... с обучения! С обучения тому самому C#-у, Яве или С++. По этому я не против чтобы программист изучал в вузах, школах, колледжах и ПТУ всякую экзотику вроде Смолтка, но пусть он ко всему прочему изучит так же Шар-п, Яву и С++. Причем начнет с Явы или C#-а, затем изучит С++ и только потом приступит к изучению Смолтока, чтобы потом у него не возникало ломки и недопонимания таких базовых концепций как понятий типа и статического контроля типов.

>> ANS>Однако же, множество людей рекомендуют для начинающих

>> ANS>SICP, в котором примеры на схеме <http://mitpress.mit.edu/sicp/&gt;.
>>
>> Много людей рекомендуют больше жрать чтобы похудеть. Что же теперь их
>> всех слушать?

ANS>Понятно. Аргументов нет и не предвидится.


С твоей стороны я их так и не заметил. Вместо них пытаешься давить авторитетами. Аргументами нужно давить.

ANS>Гм. Вот в java всякие там Integer прекрасно являются nullable и без

ANS>введения лишних концепций.

Видимо потому они потом ввели автобоксинг.

ANS>И это является хорошим дизайном когда во-второй версии закрывают прорехи

ANS>первой?

Отличным. Язык поддерживает статическую и динамическую типизацию. Боксинг дает возможность полиморфно работать с вэлью-типами. А то что при этом он за одно дополняет вэлью-тип возможностью хранить состояние null — это всего лишь побочный эффект. Nullable же позволяет получить ту же возможность не прибегая к боксингу, а значит оставяась в рамках статичесой типизации и порождая высокоэффективный код.

Собственно nullable это банальное применение паттерна Обертка. Рельно они реализованы на базе generic-ов. Nullable-тип это не что иное как Nullable<T>. Где T обобщенный тип. А расширение языка всего лишь делает использование этого паттерна более удобным. Просто вводятся алиса с Nullable<T> на T? и новый оператор "??" который просто сокращает запись старого доброго "? :".

Что характерно оператор ?? прекрасно совместим и с паттерном боксинга, так как совместим со ссылочными типами. Так что нет разницы писать:
Integer i = null;
...
Integer val = i ?? new Integer(0);

Или:
int? i = null;
...
int val = i ?? 0;

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

ANS>Создание nullable из простого типа. Уж не помню где встречал.


В языке это прозрачно и подобная терминология в спецификации не используется. Ну, а то что это встраивание паттерна Обертка в язык — дык в этом нет ничего плохого. Более простой и понятный синтаксис для часто используемых паттернов — это очень грамотное решение, на мой взгляд. Все кто с этим взглядом не согласны спокойно используют Яву. Хотя она тоже пошла по пути интеграции паттернов не выдержав конкуренции. Так в Яву 1.5 введены автобоксинг и тот самый foreach (только на испльзующий ключевое слово for).


Подитоживая снова повторю мою основную мысль. C# и Ява — это современные ООЯ лишенные многих недостатков других языков и впитавшие большинство новаторских идей современности. Они идеально подходят в качестве первого ООЯ. Все это не говорит, что изучать Смоток, Руби, Питон, С++ и т.п. вредно или ненужно. Нужно и полезно! Но ни в коем случае они не должны быть противовесом C#-у, Яве и С++. И лучше все же изучать их уже после C#-у, Яве. Объясняется это очень просто. С вероятностью 90% (а то и больше) прейдя на работу человек будет использовать эти языки или их аналоги. При этом человек уже будет иметь серьезный опиты и у него не будет ломки. Ну, а пропроитарнсоть языка тут вообще не причем. В конце концов по этом пункту разницы между Смолтоком и C#-ом просто нет.
... << RSDN@Home 1.1.4 beta 3 rev. 279>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[16]: Почему нельзя преподавать C#
От: Dog  
Дата: 11.03.05 08:53
Оценка: :)))
VD>Ладно, попробую объяснить как этот термин понимаю я (по подробнее), хотя в статье на которую я дал ссылку и так все более менее описано.
Спасибо за объяснения замыканий. Просто не представляю как я жил без этого. Всё, ухожу замыкать

VD>Вот только когда обученный базовым вещам "специалист" прийдет на реальное производство, то начнет от свой трудовой путь с... не поверишь... с обучения! С обучения тому самому C#-у, Яве или С++. По этому я не против чтобы программист изучал в вузах, школах, колледжах и ПТУ всякую экзотику вроде Смолтка, но пусть он ко всему прочему изучит так же Шар-п, Яву и С++. Причем начнет с Явы или C#-а, затем изучит С++ и только потом приступит к изучению Смолтока, чтобы потом у него не возникало ломки и недопонимания таких базовых концепций как понятий типа и статического контроля типов.

+1
Где-то между собакой и богом.
Re[16]: Почему нельзя преподавать C#
От: Dog  
Дата: 11.03.05 08:53
Оценка: +1 :)
ANS>>>>Ирония тут не в тему. Кей отношения к замыканиям не имеет. А банальные
ANS>>>>указатели на функцию тем более.
G>>>Если я правильно помню, замыкания впервые появились в старом добром Algol 68.
Dog>>Этот язык надо обязательно включить в программу обучения, как яркий пример концепции замыкания
G>Да, неплохо было бы. По крайней мере, было бы меньше дурацких постов про замыкания, что уже дело.
Лучше бы было меньше дурацких постов. Как мне запустить программу без фрэймворка ? Или объясните , что такое шаблоны в С++.
Где-то между собакой и богом.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.