Здравствуйте, AndrewVK, Вы писали:
AVK>О да, объяснять полиморфизм на ассемблере это самое оно
А чё?
Тема нашего сегодняшнего урока, дети, инкапсуляция.
Термин инкапсуляция, дети, неотрывно связан с термином абстракйия. Взгляните, пожалуйста, на этот листинг:
Что делает эта программа незнает даже тот долболом, что ее написал. Так вот дети, инкапсуляция и абстракция позволяют нам никода не глядеть на этот УЖАС!
... << RSDN@Home 1.1.4 beta 3 rev. 207>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Все, не могу, уже и меня прет что-то сказать. Все нижесказанное, является моим сугубо личным субъективном мнением.
Давайте разведем детишек и тех кто уже вырос, по ролям:
1 Роль: школьник
Вряд ли он когда-то вспомнит на каких уроках он просиживал. Однако после того, как он получил аттестат, он теоретически не должен пугаться слова компьютер, должен уметь запустить нужную ему программу, игрушку и т.д. и т.п. Остальные рюшки для него лишние. Возможно, еще он смог бы написать макрос для Ворда или Екселя. На фиг ему сдалась ООП. Кто-то пропихивал идею про ООП, ООП достаточно сложная вещь, чтобы детишек этим мучать. Учитывая что это теоретически никогда ему не пригодится.Существует конечно исключение — братва собирающаяся стать программистами. Но для этой братвы, самообразование на основе любознательности, намного полезней, чем долбежка на уроках.
2 Роль: учащийся по некоторой специальности, которое подразумевает знание программирования.
2.1 Для данного человека важен объем знаний, а не в каком порядке оно было получено. Не важно, что он сначала изучил, С или ассемблер. С++ или С. Он их знает оба, и понимает, что из чего выходит.
2.2 На данный момент развития технологий, уже нельзя подготовить человека, который знает все. Значит, нужно подготавливать человека, который может работать на некотором уровне абстракции. Для того, чтобы он хорошо ориентировался на данном уровне абстракции, он должен представлять соседний уровень, на чем она основана. Если он прикладник, то он должен знать SQL, язык, API. Но также он должен представлять себе, как работает БД, он должен представлять то, что такое исполнение кода (что такое сегменты данных, LDT, регистры процессора), и представлять режим ядра Windows и что такое сетевая маршрутизация. Именно представлять, а не знать. Конкретные знания скорее всего не пригодятся, но понимание самой технологии обязательна. Для системного программиста можно продолжить аналогию. Для программиста Net, необязательно учить MSIL. Нужно представлять, что он есть, как он работает, но не более того.
2.3 Знания учащегося очищаются из памяти не более чем за 2 недели. Представление о полученных знаниях остается. Ему на фиг не нужен никакой язык поддерживающий сборку мусора, ему нужно само представление о том, что существует такая штука, примерно представлять что она делает, и знать в какую книжку за этой информацией лезть.
2.4 Человек оканчивающий институт, быстро учится каким-то областям деятельности, если он имеет представление о них. Невозможно дать в институте все возможные знания и навыки. Этому учишься и продолжаешь учиться в процессе работы. Что делать, такова специфика профессии. Но если есть представление о механизмах, знания сами тебя находят. Иногда, не нужно вызубривать что-то, достаточно представить сам механизм, и ты сам догадаешься что, где и как происходит. И самое главное, почему.
Здравствуйте, LaptevVV, Вы писали:
LVV>Интересует любая информация о трансляторах, IDE, справочные материалы, адреса в инете — в общем все, LVV>что мы проанализируем и потом примем решение.
Советую обратить внимание на Smalltalk. Если говорить только о его достоинствах как языка для обучения программированию в целом, то можно назвать следующее:
— это действительно простой (чисто ОО-) язык. Никаких указателей, хитровывернутых конструкций на шаблонах и так далее.
— IDE является составной и неотделимой частью транслятора. За счет отсутствия исходников в привычном понимании этого слова (текстовые файлы) и замены их ясной структуризацией элементов языка (класс, категория, метод...), отраженной в UI среды, навигация по коду осуществляется очень удобно.
— огромная библиотека классов на все случаи жизни. Что важно -- в исходниках, которые служат самой полезной документацией.
— отладчик, инспектор. Во время работы программы можно расковырять ее вдоль и поперек, посмотреть инспектором все что угодно, вносить изменения в код на лету. Жутко полезная фишка при обучении, а потом и просто при работе.
— встроенный сode critic (в реализации VisualWorks Smalltalk). Эта штука, будучи натравленной на класс/пакет, даст много советов по возможным [стилистическим] ошибкам.
— за пару минут рисуются всякие визуальные формочки-кнопочки-рюшечки.
— в случае VisualWorks — свободно доступная некоммерческая версия. Искать в районе Cincom Smalltalk
Также стоит посмотреть на реализацию Squeak. Просто от души советую потратить немного времени и траффика на это чудо — первое знакомство у большинства вызывает чувство некоторого умиления.
Здравствуйте, Serginio1, Вы писали: S>Ну мнение уважаемого мной Товарища Вирта, может и не совпадать с моим. S>Но это не значит что мое мнение не содержит здравого смысла. S>И знать происходящие процессы на низком уровне это должно быть началом. И абстрагироваться и отталкиваться от них. S> Всеже понимать суть высокоуровневых языков легче зная низкоуровневую сущность.
Ну, если честно, то этого я бы ожидал как минимум от инженеров. В средней школе нельзя делать предположений о профессиональной ориентации. Да, надо дать людям хоть какое-то понимание о том, в каком мире они живут. Но блин на практике ясно, что на освоение всей лестницы от физики до ООП меньше четырех лет ты никак не потратишь. Да еще и процентов шестьдесят обучающихся до выпуска не доживут.
В школе начинать с ассемблера — бред. Потому, что в окружающую среду ассемблер не входит. А вот объекты — входят. И суть программирования лучше давать не в терминах ТТЛ-логики.
... << RSDN@Home 1.1.4 beta 3 rev. 185>>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Forth). S> Я полностью с тобой согласен. Поэтому что бы знать что такое jmp'ов или call нужно немного знать Ассемблер.
Это глупость. Ну скажи на милость, кому нафиг упали все эти джампы и коллы? Миллионы людей по всему миру кодят безо всякого знания джампов и коллов. Да, есть риск неявного использования неэффективных алгоритмов. Но это не так страшно: понадобится оптимизировать — узнают все что надо.
Кроме того, ужас в том, что на самом деле все работает совсем не так. Современный процессор — страшная штука. Я вот про 386 еще хоть как-то представлял, что внутрях происходит. Смутно, но представлял. А что делается сейчас в П-4, я просто молчу! Там же все эти множественные конвейеры, предсказания переходов и трактовка регистров как переменных. Ихний ассемблер — язык настолько высокого уровня, что мама дорогая. И что, ты полагаешь что мне без этих знаний как-то хреново работается? Ничего подобного! И ты, смею полагать, наизусть не вспомнишь, какие команды в четвертом пне спариваются, а какие — нет.
Дальше — хуже. Пока что еще можно интересоваться внутренним устройством vtbl и прочего мсила. Но, видишь ли, современные среды вовсю осваивают хотспоттинг. А это означает, что никакой vtbl может и не быть. Забудь о ней. На уровне x86 там будет свитч по указателю на класс вместо косвенного вызова, или проверка класса на наиболее вероятный и банальный джамп. Потому, что проверка лучше предсказывается процессором, а значит меньше шанс сброса конвейера. А может вообще стоять безусловный вызов, потому что в данном контексте удалось избавиться от полиморфизма благодаря глобальной оптимизации.
Ну и кому это интересно, кроме разработчиков фреймворка? Нам достаточно знать, что новый процессор позволяет выжать из сервера на 30% транзакций в минуту больше, а новый фреймворк — еще на 22%. Важнее уметь программировать, т.е. писать адекватные решения прикладным задачам. Прикладных задач на порядки больше чем системных.
... << RSDN@Home 1.1.4 beta 3 rev. 185>>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Здравствуйте, Crab, Вы писали:
C>Если человек пошел к примеру в статистику? Или просто на внедрение какой-либо системы? Ему только скрипты преподать надо и все — готов специалист.
Мы все еще говорим о студентах которые поступили на програмирование? Потому что для внедрения ЕРП систем нужно совсем другое образование + школьный курс информатики.
C>Какой смысл учить студента той же философии или истории, если потом оно ему не пригодится?
Только чтобы отличить Бабеля от кобеля. К профессиональной деятельности это не относится.
C>То что вы предлагаете, прекрасно вкладывается в 3-х месячные курсы по С++, и все — готов "профессионал".
Я раньше ничего не предлогал, а задавал вопрос В действительности знание языка програмирования не делает из человека "профессионала". Как минимум требуется знание платформы, под которую будет вестись разработка. Также нужно знание процесса разработки, понимание как и для чего переиспользовать код, как вести учет багов в проекте. И прочие подобные вещи... Иначе для работодателя ценность вчерашнего студента без опыта работы равна ценности человека, закончившего 3-х месячные курсы по С++ И то что студент умеет вычислять кратчайший путь в графе, используя экзотические языки програмирования, картину сильно не меняет.
Здравствуйте, Alexey_ch, Вы писали:
A_>А какой тогда смысл учиться на программиста? Напомню, что мой вопрос был: "какой смысл учить студентов тому, что не пригодится в профессиональной деятельности?". Или это нормальная ситуация, когда человек тратит 5 лет жизни на образование, потом приходит на работу и узнает, что толку от него практически нет, соответственно зарплата маленькая, пока он не наберется опыта от местных "гуру"? Что мешает давать эти знания в институтах?
Могу на своем опыте сказать, все что когда то изучил и понял когда то в жизни и пригодится.
Программирование это только инструмент, которым надо уметь пользоваться и знать алгоритмы.
Моя специализация это 1С. Возможностей минимум отдача максимум для небольших предприятий. Но при этом нужно знать бухгалтерия и прочие производственные процессы. Благо образование "Обогатителя" это помогает.
При этом разные там Delphi и C# не игнорируются и применяются для решения специфических задач.
А разные алгоритмы применяются во всех языках сообразно их возможностям.
Вывод -- Лишними знания не Бывают!!!!
и солнце б утром не вставало, когда бы не было меня
Здравствуйте, AndrewVK, Вы писали:
AVK>Здравствуйте, Serginio1, Вы писали:
AVK>>> ИМХО на данном этапе что то уровня C# или Java. S>> Уверяю, что нет. Очень сложно понять все принципы ООП,делегаты, интерфейсы, итд без других знаний.
AVK>Вполне возможно без знания того как устроен VMT.
Вполне возможно. Но для меня лично было проще все понимать через VMT и адреса функций итд.
Возможно я и не одинок.
S>> Да и в Net все сразу вникают в MSIL а от него и в Ассемблер. Не все так просто.
AVK>Я вот совсем не смотрел на MSIL поначалу, притом успешно реализовал на дотнете 2 проекта. А джавовский ассемблер я вобще до сих пор не знаю.
S>>>> Предполагал что ты это заметишь. Но саммым эффективным будет существующаяя реализация в С++ и Delphi (за исключением статических виртуальных методов класса).
AVK>>>Ну и что? S>> Очень интересный ответ. Я бы сказал исчерпывающий.
AVK>Почему ты решил что человек обязан знать реализацию VMT в С++? Зачем это ему надо?
Ответил выше.
S>>>> Давай лучше вспомним тему "Как устроены интерфейсы в Net". S>>>> Что бы что то постичь нужно знать низкоуровневую реализацию то бишь фундамент. AVK>>>А зачем это постигать? S>> Что бы понять как использовать и какие могут быть грабли.
AVK>Опыт показывает что это не является обязательным условием.
AVK>>>Знаю, но потребность в этих знаниях на сегодня крайне низкая. Без них вполне можно прожить. S>>Прожить то легко, только уверяю тебя ты сам на подсознательном уровне их используешь.
AVK>От того что ты уверяешь я их использовать не начну. Я тебе уже не раз говорил — все твои экзерсисы с кишками дотнета практически не имеют никакой реальной пользы, на практике они не нужны. За последний год мне по карйней мере тонкости работы джита не понадобились ни разу, хотя, как ты понимаешь, кода на шарпе я написал за это время очень много.
Я сам достаточно много обходился и обхожусь без ассемблера, MSIL итд. И это не является краеугольным камнем. Но считаю для себя лично, что легче работать с с более полным пониманием процесса.
Все таки не хочется уподоблятся своим юзерам умеющим нажимать только на кнопки и непонимающих, что происходит после нажатия.
И если видят результат не совподающим с их пониманием начинают паниковать.
В любом случае на той же информатике начинают с двоичной системы. По твоему принципу это тоже не нужно?????
Как бы там ни было, в общем прав Ты. Но мне почему то эта правда не по нутру.
... << RSDN@Home 1.1.3 stable >>
и солнце б утром не вставало, когда бы не было меня
Здравствуйте, Serginio1, Вы писали:
AVK>>Вполне возможно без знания того как устроен VMT. S> Вполне возможно. Но для меня лично было проще все понимать через VMT и адреса функций итд. S> Возможно я и не одинок.
И на этом основании ты предлагаешь всех детей учить ассемблеру 5 баллов
AVK>>>>Ну и что? S>>> Очень интересный ответ. Я бы сказал исчерпывающий.
AVK>>Почему ты решил что человек обязан знать реализацию VMT в С++? Зачем это ему надо? S> Ответил выше.
Ты ответил зачем лично тебе надо. А зачем это надо детям совершенно непонятно.
S> Все таки не хочется уподоблятся своим юзерам умеющим нажимать только на кнопки и непонимающих, что происходит после нажатия.
Ты считаешь что я им уподобляюсь?
S> В любом случае на той же информатике начинают с двоичной системы. По твоему принципу это тоже не нужно?????
Нужно. Но при чем тут ассемблер?
S> Как бы там ни было, в общем прав Ты. Но мне почему то эта правда не по нутру.
ИМХО потому что ты считаешь что крутость программиста заключается в неких таинствах железа, недоступных простым смертным. А на самом деле эта крутость заключается в умении быстро, красиво и эффективно решать задачи. И это умение простым изучением по книжке х86 ассемблера увы не приобрести.
Здравствуйте, Crab, Вы писали:
C>Затем, что студенты не обязательно пойдут в промышленное программирование.
Тогда чем плох старый бэйсик для написания примитивных алгоритмов?
Здравствуйте, VladD2, Вы писали:
VD>Здравствуйте, Serginio1, Вы писали:
VD>Блин, слышал бы Вирт твои слова о ассембелер.
Ну мнение уважаемого мной Товарища Вирта, может и не совпадать с моим.
Но это не значит что мое мнение не содержит здравого смысла.
И знать происходящие процессы на низком уровне это должно быть началом. И абстрагироваться и отталкиваться от них.
Всеже понимать суть высокоуровневых языков легче зная низкоуровневую сущность.
и солнце б утром не вставало, когда бы не было меня
Здравствуйте, Serginio1, Вы писали:
S> Это достаточно спорный вопрос. Какой цели нужно достичь. S>В школе изучают физику без высшей математики, и понимание идет на уровне заучиваний формул(mv2/2) итд. S>Понятно, что физику изучать надо с высшей математики. А высшую математику нужно начинать с алгебры итд. S> Если нужно обучить программированию то нужно начинать с азов.
А почему ты решил что стартовая точка это Ассемблер? А может это архитектура вычислительной системы? А может внутреннее устройство процессора? Или может основы конечных автоматов с памятью? Или КМОП-полупроводники?
Копать вглубь можно очень далеко, однако понятно что нужно искать золотую середину.
Здравствуйте, AndrewVK, Вы писали:
AVK>Здравствуйте, Serginio1, Вы писали:
S>> Это достаточно спорный вопрос. Какой цели нужно достичь. S>>В школе изучают физику без высшей математики, и понимание идет на уровне заучиваний формул(mv2/2) итд. S>>Понятно, что физику изучать надо с высшей математики. А высшую математику нужно начинать с алгебры итд. S>> Если нужно обучить программированию то нужно начинать с азов.
AVK>А почему ты решил что стартовая точка это Ассемблер? А может это архитектура вычислительной системы? А может внутреннее устройство процессора? Или может основы конечных автоматов с памятью? Или КМОП-полупроводники? AVK>Копать вглубь можно очень далеко, однако понятно что нужно искать золотую середину.
Ну и это неплохо. Но разговор идет о языках. А Ассемблер как раз и будет этой самой золотой серединой.
Для того что внмкнуть в полимрфизм,RTTI нужно всего навсего знать что такое VMT и связь объекта с ней.
Чтобы вникнуть в вызов объектных методов, и различие в вызовах нужно знать, что такое регисты, стек и операции с ними
Что бы вникнуть в битовую,адресную арифметику итд.
И уверяю со знанием ассемблера постичь это намного проще, чем пространные абстрактные объяснения.
Хотя я свое мнение никому и ненавязываю.
и солнце б утром не вставало, когда бы не было меня
Здравствуйте, Serginio1, Вы писали:
S>Ну и это неплохо. Но разговор идет о языках.
Язык понятие растяжимое. VHDL к примеру тоже язык. Начинаем с него?
S> А Ассемблер как раз и будет этой самой золотой серединой.
Не думаю. Скорее это крайность.
S> Для того что внмкнуть в полимрфизм,RTTI нужно всего навсего знать что такое VMT и связь объекта с ней.
О да, объяснять полиморфизм на ассемблере это самое оно
S>Чтобы вникнуть в вызов объектных методов, и различие в вызовах нужно знать, что такое регисты, стек и операции с ними
А зачем в это вникать? Тем более что нет какой то одной реализации VMT. Более того, VMT отнюдь не единственный способ реализации полиморфизма.
S>Что бы вникнуть в битовую,адресную арифметику итд.
Для битовой арифметики ассемблер не нужен и неудобен, адресная арифметика опять же на разных машинах может быть разной.
S> И уверяю со знанием ассемблера постичь это намного проще, чем пространные абстрактные объяснения.
Здравствуйте, Serginio1, Вы писали: S> На самом деле нужна некая система обучения начиная с двоичной системы, логических элементов, итд.
Знаешь, мне мама рассказывала, что когда она пошла на курсы программирования после университета, одна девушка все докапывалась, как там все внутри работает. Поясняла она это тем, что начинать надо с азов, и что пока она азы не освоит, нечего сложные вещи изучать. Тут, наверное, стоит упомянуть, что девушки были с эконома. И пока остальные осваивали Фортран, она мучительно пыталась понять "азы". В те времена азы были попроще нынешних, но увы — девушка была азами и убита.
Те, кто не очень интересовался, каким именно образом получить полный сумматор из полусумматора, полусумматор из вентилей, а вентили — из транзисторов, успешно курсы прошли. Писали они автоматизацию предприятий, конечно, с переменным успехом, но некоторые (как, например, моя мама), стали со временем ведущими и главными конструкторами. Мораль: уже в далеком 1978 году для программирования нафиг не было надо знать даже ассемблер. Упаси байт — логические элементы! Надо было понимать, как превратить лепет в ТЗ, ТЗ-в алгоритм, а алгоритм — в программу. С тех пор в плане программирования изменилось только одно — азы кошмарным образом усложнились.
Я вот себе довольно-таки внятно представляю всю вертикаль, от юзабилити до зонной теории. Ну дак я блин четыре года до университета опыта набирался, четыре года в универе физику изучал, и с тех пор семь лет по специальности работаю. И то есть масса совершенно темных для меня мест, про которые я знаю, что я их не знаю, и наверняка еще куча мест, про которые я даже не знаю.
К чему я клоню? К тому, что преподавать от частного к общему — нельзя. Не доживут. Конечно, начинать сразу с абстракций — тоже плохо. Нормальное обучение мечется вверх-вниз, перемежая анализ синтезом.
... << RSDN@Home 1.1.4 beta 3 rev. 185>>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
У нас всякие полусумматоры на втором курсе в рамках "Logic Circuits", ассемблер — на третьем в рамках "Systems Programming", введение в Word/Excel (грубо говоря) — в первом семестре, "Introduction to Programming in C++" — во втором семестре.
Здравствуйте, Serginio1, Вы писали:
S>Здравствуйте, GlebZ, Вы писали:
S> Так каков должен быть метод обучения, что бы это все представлять на должном уровне???
А хрен его знает. Я сам не знаю. Разве что молиться?
На мою мысль, типа проходить общей теорией по всем сопутствующим курсам, а уже потом вдалбливать узкую специализацию, по типу как и у докторишек, народу это как-то не понравилось. S> Не получится ли как с религией??? И вообще то абстракция на чем то и базируется.
Религия на нижнем уровне, скорее всего да. Смотря кого готовить. Если "практика", то это ему будет помогать. Для "теоретика"???? Теоретик должен все объяснять и подтверждать. Это его природа и обязанность. И курса ВУЗа ему будет очень мало, как впрочем и в других науках. S> Я только высказал свое мнение. В конце концов не мне детишек учить
И не мне, слава богу. Хотя мало процессов, которые можно довести до идеала.
Здравствуйте, Serginio1, Вы писали: S> Опять же не зачем углубляться в него, кто захочет откроет эту спецификации, дать только основы.
Гм. Тогда мы изучаем вовсе не ассемблер, а хрен пойми что — какое-то подмножество ассемблера. S>Для примера программирование на машинных кодах было в институтах, и считаю достаточно полезной.
Гм. Что-то мне подсказывает, что машинные коды, на которых программировали в институтах, это не коды i486.
Вот например Кнут ввел свой собственный ассемблер (Mix — машину) как раз для того, чтобы учить программированию на ее основе.
Есть распространенное мнение, что его подход неверен. Чтобы добраться до мало-мальски сложных алгоритмов, надо прорубиться сквозь кучу всего...
Основным преимуществом Кнутовского подхода является внимание к таким деталям, которые могут никогда не попасть в круг интересов программиста при ином раскладе. Например, алгоритмы выполнения арифметических действий (которые большинство народу считает свойством окружающей действительности, предоставленным нам Господом за хорошее поведение), а также их связь с системами счисления и представлением чисел.
Кроме того, его подход дает весьма наглядное представление о теории сложности. Опять же большинство кнопконажимающего народа имеют весьма смутные представления о таких терминах, как "сложность", "производительность" и т.п.
Но вот только одна проблема: заинтересовать этой ерундой можно уже только человека, который очень хочет залезть в дебри. Вот некоторые широко признанные авторитеты нашего форума просто не смогли прочесть Кнута. Несмотря на свою заинтересованность. Школьник при таком подходе вынесет только одно: программирование — скучное и неприятное занятие.
Надо сначала пряник дать, а уже потом рассказывать про озимые, яровые, разнообразные помолы, и прочие технические летали.
... << RSDN@Home 1.1.4 beta 3 rev. 185>>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Почитал я тут защитников Оберона, и задумался. Надо первачков учить. Раньше мы, естественно, первый семестр учили на Турбо-паскале. А потом переходим на С и С++ — и понеслась. Турбо-паскаль нужен нам был, что на чемпионате мира меньше проблем было. А теперь турбо=паскаль умер, и надо что-то выбирать. С++ как первый язык давать не хочу — поймут отнюдь не все. Студенты есть из сел, поэтому сначала их надо в проблематику написания программ ввести, не касаясь сильно компьютерных особенностей, особенно указателей. Вот на чем? На обероне?
Интересует любая информация о трансляторах, IDE, справочные материалы, адреса в инете — в общем все, что мы проанализируем и потом примем решение.
Кстати, какие альтернативы оберону есть, кто-нить представляет?
На западе, насколько знаю — обучают сначала функциональному языку типа Haskel.
Ы??????????????????????????????????????????
22.10.04 21:20: Перенесено модератором из 'Прочее' — Павел Кузнецов
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Здравствуйте, LaptevVV, Вы писали:
LVV>Почитал я тут защитников Оберона, и задумался. Надо первачков учить.
Зачем учить студентов языкам, которые непопулярны для промышленного програмирования?
Здравствуйте, Alexey_ch, Вы писали:
A_>Здравствуйте, LaptevVV, Вы писали:
LVV>>Почитал я тут защитников Оберона, и задумался. Надо первачков учить. A_>Зачем учить студентов языкам, которые непопулярны для промышленного програмирования?
Затем, что студенты не обязательно пойдут в промышленное программирование.
I'm the hero I'm back
With weapons and with magic spells
Здравствуйте, Alexey_ch, Вы писали:
A_>Здравствуйте, Crab, Вы писали:
C>>Затем, что студенты не обязательно пойдут в промышленное программирование. A_>Тогда чем плох старый бэйсик для написания примитивных алгоритмов?
Да хотя бы тем, что на Трубо Паскакале можно было научить функциональной декомпозиции, работе с указателями, и с горем пополам зачаткам ООП. И показать на этом "примитивные алгоритмы" например переворот строки, сортировка массивов, балансировка дерева, или алгоритм Дейкстры.
На том же корветовском или MSX-овском Бейсике такое делать дооолго.
А вообще речь не об этом. Я имел в виду, что кроме промышленного программирования человек может найти себе применение в других областях, как промышленных, так и научных, как связанных с программированием, так и нет.
I'm the hero I'm back
With weapons and with magic spells
Здравствуйте, Alexey_ch, Вы писали:
A_>Здравствуйте, Crab, Вы писали:
C>>Затем, что студенты не обязательно пойдут в промышленное программирование. A_>Тогда чем плох старый бэйсик для написания примитивных алгоритмов?
В старом Васике подпрограммы плохо прописаны!
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Здравствуйте, Crab, Вы писали:
C>Здравствуйте, Alexey_ch, Вы писали:
A_>>Здравствуйте, Crab, Вы писали:
C>>>Затем, что студенты не обязательно пойдут в промышленное программирование. A_>>Тогда чем плох старый бэйсик для написания примитивных алгоритмов?
C>Да хотя бы тем, что на Трубо Паскакале можно было научить функциональной декомпозиции, работе с указателями, и с горем пополам зачаткам ООП. И показать на этом "примитивные алгоритмы" например переворот строки, сортировка массивов, балансировка дерева, или алгоритм Дейкстры.
А зачем это все тем, кто не будет профессионально писать софт? Особенно ООП.
C>На том же корветовском или MSX-овском Бейсике такое делать дооолго.
Не вижу принципиальной разницы Вносить изменения и сопровождать код будет сложнее, писать -- нет.
C>А вообще речь не об этом. Я имел в виду, что кроме промышленного программирования человек может найти себе применение в других областях, как промышленных, так и научных, как связанных с программированием, так и нет.
А какой тогда смысл учиться на программиста? Напомню, что мой вопрос был: "какой смысл учить студентов тому, что не пригодится в профессиональной деятельности?". Или это нормальная ситуация, когда человек тратит 5 лет жизни на образование, потом приходит на работу и узнает, что толку от него практически нет, соответственно зарплата маленькая, пока он не наберется опыта от местных "гуру"? Что мешает давать эти знания в институтах?
Здравствуйте, LaptevVV, Вы писали:
LVV>В старом Васике подпрограммы плохо прописаны!
Да нет параметров, но так ли это важно для тех, кто только начинает изучать програмирование?
Здравствуйте, Alexey_ch, Вы писали:
C>>А вообще речь не об этом. Я имел в виду, что кроме промышленного программирования человек может найти себе применение в других областях, как промышленных, так и научных, как связанных с программированием, так и нет. A_>А какой тогда смысл учиться на программиста? Напомню, что мой вопрос был: "какой смысл учить студентов тому, что не пригодится в профессиональной деятельности?". Или это нормальная ситуация, когда человек тратит 5 лет жизни на образование, потом приходит на работу и узнает, что толку от него практически нет, соответственно зарплата маленькая, пока он не наберется опыта от местных "гуру"? Что мешает давать эти знания в институтах?
Если человек пошел к примеру в статистику? Или просто на внедрение какой-либо системы? Ему только скрипты преподать надо и все — готов специалист.
Какой смысл учить студента той же философии или истории, если потом оно ему не пригодится? То что вы предлагаете, прекрасно вкладывается в 3-х месячные курсы по С++, и все — готов "профессионал".
I'm the hero I'm back
With weapons and with magic spells
Здравствуйте, Serginio1, Вы писали:
S> Вывод -- Лишними знания не Бывают!!!!
Правильные слова. Но знание мертвых языков вроде Оберона являются не лишними, а бесполезными.
Для тех кто не будет связан с программированием они бесполезны по определению. А для тех кто станет программистом они бесполезны так как не дают практической пользы. Более того человек привыкший к мягко говоря необычным подходам потом будет вынужден переламывать себя, чтобы принять подходы принятые в отрасли.
Изучение программирования на базе того же Шарпа даст и те самые общеразвивающие знания, и полезный опыт. Ну, а так как Шарп ближе к промышленным языкам, то в будущем не прийдется "ломать" понимание и переучиваться.
Надоело как-то, что первые слова в институтах "а теперь детки забудьте все чему вас учили в Школе...".
... << RSDN@Home 1.1.4 beta 3 rev. 206>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, Alexey_ch, Вы писали:
LVV>>В старом Васике подпрограммы плохо прописаны! A_>Да нет параметров, но так ли это важно для тех, кто только начинает изучать програмирование?
Ну, это даже не в старом. Это в доисторическом. Даже тазные покрытые плесенью ТурбоБэйскики и КвикБэйски позволяли создавать нормальные процедуры. А уж в ВБ.НЭТ даже нельзя создать ненормальные.
... << RSDN@Home 1.1.4 beta 3 rev. 206>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, VladD2, Вы писали:
VD>Точно забить голву ученикам тем на чем им 100%-но никогда работать не прицдется.
Зачем наперед загадывать? Два года назад я про St одно название и знал, но
уже больше года работаю и горя не знаю.
VD>Причем СолТок это еще куда большая экзотика чем Оберон.
К сожалению, у меня нет статистики на эту тему. Однако по крайней мере в одной
питерской большой организации активно применют St, про оберон пусть другие скажут.
Здравствуйте, VladD2, Вы писали:
VD>Здравствуйте, Serginio1, Вы писали:
S>> Вывод -- Лишними знания не Бывают!!!!
VD>Правильные слова. Но знание мертвых языков вроде Оберона являются не лишними, а бесполезными.
VD>Для тех кто не будет связан с программированием они бесполезны по определению. А для тех кто станет программистом они бесполезны так как не дают практической пользы. Более того человек привыкший к мягко говоря необычным подходам потом будет вынужден переламывать себя, чтобы принять подходы принятые в отрасли.
VD>Изучение программирования на базе того же Шарпа даст и те самые общеразвивающие знания, и полезный опыт. Ну, а так как Шарп ближе к промышленным языкам, то в будущем не прийдется "ломать" понимание и переучиваться.
VD>Надоело как-то, что первые слова в институтах "а теперь детки забудьте все чему вас учили в Школе...".
Основная задача на начальном этапе обучить принципам программироваия и главное понимание происходящих процессов на аппаратном уровне.Поэтому изучение Ассемблера обязательно. Я полность согласен с Виртом который провозгласил Алгоритмы+Структуры данных= Программа.
При этом Кнут тоже свой язык выдумывал, от которого в отличие от виртовских языков все плюются.
И нужно подать программирование на доступном для понимании языке программирования.
Когдато и Фортран был живее всех живых. Все течет все изменяется. И нужно давать различные языки.
Шарп,Delphi.Net Языки одного уровня, но с различным синтаксисом (правда надо обязательно напомнить про МетаКлассы).
Но для первичного изучения неподходящие. После понимания уверяю можно легко переходить на любой язык.
С функциональными языками нужно поворачивать голову совсем по другому.
В любом случае наш спор бесполезен, т.к. выводы все равно делают преподаватели, а у них надеюсь есть огромный опыт.
и солнце б утром не вставало, когда бы не было меня
Здравствуйте, VladD2, Вы писали:
VD>Здравствуйте, Serginio1, Вы писали:
VD>Блин, слышал бы Вирт твои слова о ассембелер.
Да нечего его по лишний раз отвликать.
Он пока что думает, в чем разница между A = B и B = A, а вы со своим ассемблером лезете
Здравствуйте, Sinclair, Вы писали:
S>В школе начинать с ассемблера — бред. Потому, что в окружающую среду ассемблер не входит. А вот объекты — входят. И суть программирования лучше давать не в терминах ТТЛ-логики.
Тогда нужно учить какой-нибудь не шибко навороченный скриптовый язык с объектами.
Питон, например. Тем более, что синтаксис там — ну проще некуда.
Здравствуйте, Sinclair, Вы писали:
S>Ну, если честно, то этого я бы ожидал как минимум от инженеров. В средней школе нельзя делать предположений о профессиональной ориентации. Да, надо дать людям хоть какое-то понимание о том, в каком мире они живут. Но блин на практике ясно, что на освоение всей лестницы от физики до ООП меньше четырех лет ты никак не потратишь. Да еще и процентов шестьдесят обучающихся до выпуска не доживут. S>В школе начинать с ассемблера — бред. Потому, что в окружающую среду ассемблер не входит. А вот объекты — входят. И суть программирования лучше давать не в терминах ТТЛ-логики.
Это достаточно спорный вопрос. Какой цели нужно достичь.
В школе изучают физику без высшей математики, и понимание идет на уровне заучиваний формул(mv2/2) итд.
Понятно, что физику изучать надо с высшей математики. А высшую математику нужно начинать с алгебры итд.
Если нужно обучить программированию то нужно начинать с азов.
Если дать возможность некого подобия программирования на уровне формул Ёкселя то полностью согласен с Кодт по поводу скриптовых языков.
Кстати по поводу твоего "бренчания по клавишам" в теме про шаблоны, то скриптовые языки при определенном подходе сводят это бренчание до минимума, за счет отсутствия типизации позднего связывания и более простой котогенерации с последующим выполнением. Но мое мнение по этому поводу, что на промышленно уровне за ними будущее. Уже на данном этапе скорости хватает даже для 1С в терминальных сессиях.
и солнце б утром не вставало, когда бы не было меня
Здравствуйте, LaptevVV, Вы писали:
LVV>На западе, насколько знаю — обучают сначала функциональному языку типа Haskel.
В Канаде по специальности Computer Science с первого дня студентам дают
Java. Вместе с учебниками в этом году выдали CD с Java 1.5 и Eclipse (IDE).
На CD находится также Java framework — "Робот в городе".
Первые задания типа :
передвинуть робот A с перекрестка 1,1 на 5,4;
взять thing на перекрестке xy и перместить его на x1y1;
и т.д.
Здравствуйте, AndrewVK, Вы писали:
AVK>А почему ты решил что стартовая точка это Ассемблер? А может это архитектура вычислительной системы? А может внутреннее устройство процессора? Или может основы конечных автоматов с памятью? Или КМОП-полупроводники? AVK>Копать вглубь можно очень далеко, однако понятно что нужно искать золотую середину.
Не знаю. Для меня первое соприкосновение с миром "электронно-счетных машин" — описание из перельмановской "Занимательной математики". Про двоичные сумматоры, ячейки, трехадресные команды... По-моему, хорошая база, по крайней мере, с этим никогда не возникает вопросов, как оно все работает на самом деле.
Я кончил, джентльмены, мне остается только поблагодарить вас за внимание.
A>Не знаю. Для меня первое соприкосновение с миром "электронно-счетных машин" — описание из перельмановской "Занимательной математики". Про двоичные сумматоры, ячейки, трехадресные команды... По-моему, хорошая база, по крайней мере, с этим никогда не возникает вопросов, как оно все работает на самом деле.
Кстати, это совсем не то же, что ассемблер. Никакого "зацикливания" на конкретной архитектуре. Основное понятие — "алгоритм", то есть последовательность шагов, которые нужно предпринять для достижения некоторого результата.
Я кончил, джентльмены, мне остается только поблагодарить вас за внимание.
Здравствуйте, achp, Вы писали:
A>Не знаю. Для меня первое соприкосновение с миром "электронно-счетных машин" — описание из перельмановской "Занимательной математики". Про двоичные сумматоры, ячейки, трехадресные команды... По-моему, хорошая база, по крайней мере, с этим никогда не возникает вопросов, как оно все работает на самом деле.
Дык это еще не самая база, там еще ниже уровни есть
Здравствуйте, AndrewVK, Вы писали:
AVK>Дык это еще не самая база, там еще ниже уровни есть
Это ронятно. Только практика показывает , что эти уровни уже не интересны изнание о них на понимание не влияет.
А этот уровень и вышележащие уровни можно воплотить по-разному — например, на доске с мелком или на бумаге с ручкой и с учеником в роли двоичнго сумматора,АЛУ или даже целого процеммора. Причем даже выходит доыольно увлекательно.
Я кончил, джентльмены, мне остается только поблагодарить вас за внимание.
Здравствуйте, AndrewVK, Вы писали:
AVK>Здравствуйте, Serginio1, Вы писали:
S>>Ну и это неплохо. Но разговор идет о языках.
AVK>Язык понятие растяжимое. VHDL к примеру тоже язык. Начинаем с него?
А это,что за зверь ????
S>> А Ассемблер как раз и будет этой самой золотой серединой.
AVK>Не думаю. Скорее это крайность.
Тогда что такое середина????
S>> Для того что внмкнуть в полимрфизм,RTTI нужно всего навсего знать что такое VMT и связь объекта с ней.
AVK>О да, объяснять полиморфизм на ассемблере это самое оно
S>>Чтобы вникнуть в вызов объектных методов, и различие в вызовах нужно знать, что такое регисты, стек и операции с ними
AVK>А зачем в это вникать? Тем более что нет какой то одной реализации VMT. Более того, VMT отнюдь не единственный способ реализации полиморфизма.
Предполагал что ты это заметишь. Но саммым эффективным будет существующаяя реализация в С++ и Delphi (за исключением статических виртуальных методов класса). Хотя разного рода IDispatch имеют право на жизнь.
S>>Что бы вникнуть в битовую,адресную арифметику итд.
AVK>Для битовой арифметики ассемблер не нужен и неудобен, адресная арифметика опять же на разных машинах может быть разной.
Только битовая арифметика она таже, что и высокоуровневых языках. Только есть знаковые безнаковые итд. S>> И уверяю со знанием ассемблера постичь это намного проще, чем пространные абстрактные объяснения.
AVK>Я я уверяю что нет
Давай лучше вспомним тему "Как устроены интерфейсы в Net".
Что бы что то постичь нужно знать низкоуровневую реализацию то бишь фундамент.
Ты предлагаешь абстрагироваться от фундамента, хотя сам его то знаешь.
Но Сына я точно буду обучать Ассемблеру (если правда вообще захочет программировать)
А в подходах к обучению я не силен. Возможно ты и прав.
и солнце б утром не вставало, когда бы не было меня
ИМХО на данном этапе что то уровня C# или Java.
AVK>>А зачем в это вникать? Тем более что нет какой то одной реализации VMT. Более того, VMT отнюдь не единственный способ реализации полиморфизма. S> Предполагал что ты это заметишь. Но саммым эффективным будет существующаяя реализация в С++ и Delphi (за исключением статических виртуальных методов класса).
Ну и что?
AVK>>Для битовой арифметики ассемблер не нужен и неудобен, адресная арифметика опять же на разных машинах может быть разной. S> Только битовая арифметика она таже, что и высокоуровневых языках. Только есть знаковые безнаковые итд.
Ты внимательно прочел то что я написал?
AVK>>Я я уверяю что нет S> Давай лучше вспомним тему "Как устроены интерфейсы в Net". S> Что бы что то постичь нужно знать низкоуровневую реализацию то бишь фундамент.
А зачем это постигать?
S>Ты предлагаешь абстрагироваться от фундамента, хотя сам его то знаешь.
Знаю, но потребность в этих знаниях на сегодня крайне низкая. Без них вполне можно прожить.
Здравствуйте, Serginio1, Вы писали:
S>Ну и это неплохо. Но разговор идет о языках. А Ассемблер как раз и будет этой самой золотой серединой. S> Для того что внмкнуть в полимрфизм,RTTI нужно всего навсего знать что такое VMT и связь объекта с ней. S>Чтобы вникнуть в вызов объектных методов, и различие в вызовах нужно знать, что такое регисты, стек и операции с ними S>Что бы вникнуть в битовую,адресную арифметику итд. S> И уверяю со знанием ассемблера постичь это намного проще, чем пространные абстрактные объяснения. S>Хотя я свое мнение никому и ненавязываю.
Тут история такая. Выбрав конкретную платформу в качестве базиса, ты получишь одну из возможных реализаций, с риском не увидеть иные возможные способы.
Уж если и учить тонкостям — то в виде загадок / задачек.
Например: Виртуальные функции. Как это можно реализовать?
* vtbl как принадлежность класса + vptr как член объекта
* записать vtbl прямо в объект
В первом случае мы делаем полиморфизм наследованием/перекрытием, а во втором — субклассированием. Кстати, в скриптовых языках (javascript, python) совмещаются оба способа.
А содержание таблицы?
* массив указателей на функции (каждая идентифицируется смещением)
* ассоциативный массив указателей на функции (см. например, TP7, TPW)
* единственная функция-диспетчер (IDispatch, WNDPROC)
Какие ещё варианты можно предложить?
Тогда это реально разовьёт кругозор. А просто "массив голых указателей на функции" — несерьёзно. На каких-то платформах так быстрее, а на других — медленнее.
Может быть, вместо указателей нужно хранить серию jmp'ов или call'ов... Или наоборот, не убавить, а добавить уровень косвенности (как это делается в некоторых реализациях Forth).
Здравствуйте, AndrewVK, Вы писали: AVK>>>Не думаю. Скорее это крайность. S>> Тогда что такое середина????
AVK> ИМХО на данном этапе что то уровня C# или Java.
Уверяю, что нет. Очень сложно понять все принципы ООП,делегаты, интерфейсы, итд без других знаний.
Да и в Net все сразу вникают в MSIL а от него и в Ассемблер. Не все так просто. AVK>>>А зачем в это вникать? Тем более что нет какой то одной реализации VMT. Более того, VMT отнюдь не единственный способ реализации полиморфизма. S>> Предполагал что ты это заметишь. Но саммым эффективным будет существующаяя реализация в С++ и Delphi (за исключением статических виртуальных методов класса).
AVK>Ну и что?
Очень интересный ответ. Я бы сказал исчерпывающий.
S>> Давай лучше вспомним тему "Как устроены интерфейсы в Net". S>> Что бы что то постичь нужно знать низкоуровневую реализацию то бишь фундамент.
AVK>А зачем это постигать?
Что бы понять как использовать и какие могут быть грабли. S>>Ты предлагаешь абстрагироваться от фундамента, хотя сам его то знаешь.
AVK>Знаю, но потребность в этих знаниях на сегодня крайне низкая. Без них вполне можно прожить.
Прожить то легко, только уверяю тебя ты сам на подсознательном уровне их используешь.
И хочешь лишить этого начинающих прогаммистов????
Представляешь какого уровня достигнет наша страна, если их знания и умения будут болше твоих?????
и солнце б утром не вставало, когда бы не было меня
Здравствуйте, Serginio1, Вы писали:
AVK>> ИМХО на данном этапе что то уровня C# или Java. S> Уверяю, что нет. Очень сложно понять все принципы ООП,делегаты, интерфейсы, итд без других знаний.
Вполне возможно без знания того как устроен VMT.
S> Да и в Net все сразу вникают в MSIL а от него и в Ассемблер. Не все так просто.
Я вот совсем не смотрел на MSIL поначалу, притом успешно реализовал на дотнете 2 проекта. А джавовский ассемблер я вобще до сих пор не знаю.
S>>> Предполагал что ты это заметишь. Но саммым эффективным будет существующаяя реализация в С++ и Delphi (за исключением статических виртуальных методов класса).
AVK>>Ну и что? S> Очень интересный ответ. Я бы сказал исчерпывающий.
Почему ты решил что человек обязан знать реализацию VMT в С++? Зачем это ему надо?
S>>> Давай лучше вспомним тему "Как устроены интерфейсы в Net". S>>> Что бы что то постичь нужно знать низкоуровневую реализацию то бишь фундамент. AVK>>А зачем это постигать? S> Что бы понять как использовать и какие могут быть грабли.
Опыт показывает что это не является обязательным условием.
AVK>>Знаю, но потребность в этих знаниях на сегодня крайне низкая. Без них вполне можно прожить. S>Прожить то легко, только уверяю тебя ты сам на подсознательном уровне их используешь.
От того что ты уверяешь я их использовать не начну. Я тебе уже не раз говорил — все твои экзерсисы с кишками дотнета практически не имеют никакой реальной пользы, на практике они не нужны. За последний год мне по карйней мере тонкости работы джита не понадобились ни разу, хотя, как ты понимаешь, кода на шарпе я написал за это время очень много.
Здравствуйте, VladD2, Вы писали:
VD>Здравствуйте, Poisson, Вы писали:
VD>Точно забить голву ученикам тем на чем им 100%-но никогда работать не прицдется.
VD>Причем СолТок это еще куда большая экзотика чем Оберон.
Только что наблюдал сообщение Rational Requisite "Smalltalk/V Stack Overflow"
Здравствуйте, Кодт, Вы писали:
К>Здравствуйте, Serginio1, Вы писали:
S>>Ну и это неплохо. Но разговор идет о языках. А Ассемблер как раз и будет этой самой золотой серединой. S>> Для того что внмкнуть в полимрфизм,RTTI нужно всего навсего знать что такое VMT и связь объекта с ней. S>>Чтобы вникнуть в вызов объектных методов, и различие в вызовах нужно знать, что такое регисты, стек и операции с ними S>>Что бы вникнуть в битовую,адресную арифметику итд. S>> И уверяю со знанием ассемблера постичь это намного проще, чем пространные абстрактные объяснения. S>>Хотя я свое мнение никому и ненавязываю.
К>Тут история такая. Выбрав конкретную платформу в качестве базиса, ты получишь одну из возможных реализаций, с риском не увидеть иные возможные способы.
К>Уж если и учить тонкостям — то в виде загадок / задачек.
К>Например: Виртуальные функции. Как это можно реализовать? К>* vtbl как принадлежность класса + vptr как член объекта К>* записать vtbl прямо в объект К>В первом случае мы делаем полиморфизм наследованием/перекрытием, а во втором — субклассированием. Кстати, в скриптовых языках (javascript, python) совмещаются оба способа. К>А содержание таблицы? К>* массив указателей на функции (каждая идентифицируется смещением) К>* ассоциативный массив указателей на функции (см. например, TP7, TPW) К>* единственная функция-диспетчер (IDispatch, WNDPROC) К>Какие ещё варианты можно предложить?
Можно изощряться по максимуму вплоть до содержания виртуальных статических переменных класса.
Это один из способов организации структур данных.
Просто девиз Алгоритмы+Структуры Данных = Программы, недостаточен по моему мнению без знаний низкоуровневых языков. К>Тогда это реально разовьёт кругозор. А просто "массив голых указателей на функции" — несерьёзно. На каких-то платформах так быстрее, а на других — медленнее.
Ну на самом деле например в Delphi это не "массив голых указателей на функции", а в том числе и виртуальные данные класса. Нужно знать только смещение. Да и адрес RTTI там же. В любом случае речь то не об этом, а об необходимости преподования на начальном этапе Ассемблера. К>Может быть, вместо указателей нужно хранить серию jmp'ов или call'ов... Или наоборот, не убавить, а добавить уровень косвенности (как это делается в некоторых реализациях Forth).
Я полностью с тобой согласен. Поэтому что бы знать что такое jmp'ов или call нужно немного знать Ассемблер.
... << RSDN@Home 1.1.3 stable >>
и солнце б утром не вставало, когда бы не было меня
Здравствуйте, Sinclair, Вы писали:
S>Здравствуйте, Serginio1, Вы писали:
S>Forth). S>> Я полностью с тобой согласен. Поэтому что бы знать что такое jmp'ов или call нужно немного знать Ассемблер. S>Это глупость. Ну скажи на милость, кому нафиг упали все эти джампы и коллы? Миллионы людей по всему миру кодят безо всякого знания джампов и коллов. Да, есть риск неявного использования неэффективных алгоритмов. Но это не так страшно: понадобится оптимизировать — узнают все что надо.
То есть нужно начинать прямо с Явы и С# S>Кроме того, ужас в том, что на самом деле все работает совсем не так. Современный процессор — страшная штука. Я вот про 386 еще хоть как-то представлял, что внутрях происходит. Смутно, но представлял. А что делается сейчас в П-4, я просто молчу! Там же все эти множественные конвейеры, предсказания переходов и трактовка регистров как переменных. Ихний ассемблер — язык настолько высокого уровня, что мама дорогая. И что, ты полагаешь что мне без этих знаний как-то хреново работается? Ничего подобного! И ты, смею полагать, наизусть не вспомнишь, какие команды в четвертом пне спариваются, а какие — нет.
Я веду речь о простых операторах. Я понимаю, что на данном этапе арифметика не нужна и не нужно заучивать таблицу умножения итд.
Но все таки ее по прежнему учат. S>Дальше — хуже. Пока что еще можно интересоваться внутренним устройством vtbl и прочего мсила. Но, видишь ли, современные среды вовсю осваивают хотспоттинг. А это означает, что никакой vtbl может и не быть. Забудь о ней. На уровне x86 там будет свитч по указателю на класс вместо косвенного вызова, или проверка класса на наиболее вероятный и банальный джамп. Потому, что проверка лучше предсказывается процессором, а значит меньше шанс сброса конвейера. А может вообще стоять безусловный вызов, потому что в данном контексте удалось избавиться от полиморфизма благодаря глобальной оптимизации.
В данном случае VMT была просто как пример понимания полимрфизма.
S>Ну и кому это интересно, кроме разработчиков фреймворка? Нам достаточно знать, что новый процессор позволяет выжать из сервера на 30% транзакций в минуту больше, а новый фреймворк — еще на 22%. Важнее уметь программировать, т.е. писать адекватные решения прикладным задачам. Прикладных задач на порядки больше чем системных.
Полностью с тобой согласен. Но писать эффективные алгоритмы возможно только на знании как базовых алгоритмов, так и применяемых в тех же компиляторах. Основня же цель обучения программированию это применение девиза дедушки Вирта.
Ну не надо так ненадо. Уговорили.
... << RSDN@Home 1.1.3 stable >>
и солнце б утром не вставало, когда бы не было меня
GZ>2.2 На данный момент развития технологий, уже нельзя подготовить человека, который знает все. Значит, нужно подготавливать человека, который может работать на некотором уровне абстракции. Для того, чтобы он хорошо ориентировался на данном уровне абстракции, он должен представлять соседний уровень, на чем она основана. Если он прикладник, то он должен знать SQL, язык, API. Но также он должен представлять себе, как работает БД, он должен представлять то, что такое исполнение кода (что такое сегменты данных, LDT, регистры процессора), и представлять режим ядра Windows и что такое сетевая маршрутизация. Именно представлять, а не знать. Конкретные знания скорее всего не пригодятся, но понимание самой технологии обязательна. Для системного программиста можно продолжить аналогию. Для программиста Net, необязательно учить MSIL. Нужно представлять, что он есть, как он работает, но не более того.
Так каков должен быть метод обучения, что бы это все представлять на должном уровне???
Не получится ли как с религией??? И вообще то абстракция на чем то и базируется.
Я только высказал свое мнение. В конце концов не мне детишек учить
... << RSDN@Home 1.1.3 stable >>
и солнце б утром не вставало, когда бы не было меня
Здравствуйте, AndrewVK, Вы писали:
S>> В любом случае на той же информатике начинают с двоичной системы. По твоему принципу это тоже не нужно?????
AVK>Нужно. Но при чем тут ассемблер?
S>> Как бы там ни было, в общем прав Ты. Но мне почему то эта правда не по нутру.
AVK>ИМХО потому что ты считаешь что крутость программиста заключается в неких таинствах железа, недоступных простым смертным. А на самом деле эта крутость заключается в умении быстро, красиво и эффективно решать задачи. И это умение простым изучением по книжке х86 ассемблера увы не приобрести.
Вот чего никогда не воспринимаю так это крутость. Простым изучением ассемблера этого не достигнешь, но в комплексе вполне реально.
На самом деле нужна некая система обучения начиная с двоичной системы, логических элементов, итд.
Это азы.
В любом случае ты крут, а я обычный 1С ник.
... << RSDN@Home 1.1.3 stable >>
и солнце б утром не вставало, когда бы не было меня
Здравствуйте, Sinclair, Вы писали:
S>Здравствуйте, Serginio1, Вы писали: S>> На самом деле нужна некая система обучения начиная с двоичной системы, логических элементов, итд. S>Знаешь, мне мама рассказывала, что когда она пошла на курсы программирования после университета, одна девушка все докапывалась, как там все внутри работает. Поясняла она это тем, что начинать надо с азов, и что пока она азы не освоит, нечего сложные вещи изучать. Тут, наверное, стоит упомянуть, что девушки были с эконома. И пока остальные осваивали Фортран, она мучительно пыталась понять "азы". В те времена азы были попроще нынешних, но увы — девушка была азами и убита. S>Те, кто не очень интересовался, каким именно образом получить полный сумматор из полусумматора, полусумматор из вентилей, а вентили — из транзисторов, успешно курсы прошли. Писали они автоматизацию предприятий, конечно, с переменным успехом, но некоторые (как, например, моя мама), стали со временем ведущими и главными конструкторами. Мораль: уже в далеком 1978 году для программирования нафиг не было надо знать даже ассемблер. Упаси байт — логические элементы! Надо было понимать, как превратить лепет в ТЗ, ТЗ-в алгоритм, а алгоритм — в программу. С тех пор в плане программирования изменилось только одно — азы кошмарным образом усложнились.
S>Я вот себе довольно-таки внятно представляю всю вертикаль, от юзабилити до зонной теории. Ну дак я блин четыре года до университета опыта набирался, четыре года в универе физику изучал, и с тех пор семь лет по специальности работаю. И то есть масса совершенно темных для меня мест, про которые я знаю, что я их не знаю, и наверняка еще куча мест, про которые я даже не знаю. S>К чему я клоню? К тому, что преподавать от частного к общему — нельзя. Не доживут. Конечно, начинать сразу с абстракций — тоже плохо. Нормальное обучение мечется вверх-вниз, перемежая анализ синтезом.
Я полностью с тобой согласен. Поэтому и говорю ИМХО.
Но поверь мне, что для разных людей должен быть свой подход, и универсального нет. Иногда понимание приходит сразу, а иногда и после после набора других знаний. Так и в школе без определенных знаний нет полного понимания, зато в институте все встает на свои места.
В данном случае ведя разговор об ассемблере дать только начальные знания, правда после некоторого изучения структурного процедурного языка или в купе с ним, не заостряя на нем внимания. Возможно это будет правильным решением. И вопросов типа http://www.rsdn.ru/Forum/Message.aspx?mid=882634&only=1
Здравствуйте, VladD2, Вы писали:
VD>Здравствуйте, Serginio1, Вы писали:
S>> В любом случае ты крут, а я обычный 1С ник.
VD>Подумалось... это ж как же 1Эс должен был довести человека, чтобы он предлагал детей учить программированию на ассемблере?
Все очень просто, что бы понять как эта 1С работает. Опять же повторю. Я не за программирование на ассемблере, а только за его изучение и применение на уровне разбора кода высокоуровневых языков.
Ассемблер как самый простой язык заслуживает это.
Во т кстати неплохая ссылочка http://podgoretsky.com/ftp/Docs/Delphi/basm/BasmForBeginners-ru.doc
... << RSDN@Home 1.1.3 stable >>
и солнце б утром не вставало, когда бы не было меня
Здравствуйте, Serginio1, Вы писали: S> Ассемблер как самый простой язык заслуживает это.
Гм. Меня смущает только толщина спецификации этого "самого простого" языка. Или ты имеешь в виду какой-то другой, не x86 ассемблер? В котором, например, есть два разных опкода для банального mov eax, ebx.
... << RSDN@Home 1.1.4 beta 3 rev. 185>>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Здравствуйте, Sinclair, Вы писали:
S>Здравствуйте, Serginio1, Вы писали: S>> Ассемблер как самый простой язык заслуживает это. S>Гм. Меня смущает только толщина спецификации этого "самого простого" языка. Или ты имеешь в виду какой-то другой, не x86 ассемблер? В котором, например, есть два разных опкода для банального mov eax, ebx.
Опять же не зачем углубляться в него, кто захочет откроет эту спецификации, дать только основы. Для примера программирование на машинных кодах было в институтах, и считаю достаточно полезной.
Так малыши узнают, что такое стек, различие в вызовах методов и тд. Это пригодится и в дальнейшем.
Еще раз повторю, что ассемблер нужно преподавать но только в плане подспорья.
... << RSDN@Home 1.1.3 stable >>
и солнце б утром не вставало, когда бы не было меня
По поводу Кнута, все тоже есть весьма на доступном уровне например у Седжвика или Бакнелла.
Кнопконажимателям вообще лучше Васик давать. А по поводу тех же делегатов или
proc= procedure of object; proc = procedure; TMethod.
То желательно знать ФастКалл или обычный Калл.
Со стеком вообще много всяких историй, когда забывают что стековая память изменяется от и до. То же касается и var параметров.
Интересно было бы провести эксперимент.2 группы с ассемблером и без него.
Вот тогда это спор имел бы действительный результат.
... << RSDN@Home 1.1.3 stable >>
и солнце б утром не вставало, когда бы не было меня