Здравствуйте, chrysler, Вы писали:
C>Необходимо узнать, как задаются массивы на ассемблере.
У каждого ассемблера свой синтаксис, о каком речь?
Так MASM определяется статический массив из 256 неинициализированных байт
.data?
array db 256 dup (?)
People who are more than casually interested in computers should have at least some idea of what the underlying hardware is like. Otherwise the programs they write will be pretty weird (c) D.Knuth
Здравствуйте, gear nuke, Вы писали:
GN>Здравствуйте, chrysler, Вы писали:
C>>Необходимо узнать, как задаются массивы на ассемблере.
GN>У каждого ассемблера свой синтаксис, о каком речь?
GN>Так MASM определяется статический массив из 256 неинициализированных байт GN>
GN>.data?
GN>array db 256 dup (?)
GN>
Спасибо. А как производится обращение к каждому элементу массива?
C>Спасибо. А как производится обращение к каждому элементу массива?
Вот так каджый элемент будет проинициализирован своим номером:
.code
start:
mov eax, offset array ; загружаем адрес первого элемента в регистр
@@: mov [eax], al ; наш массив выровнен по границе 4К, поэтому младшей байт адреса равен номеру, сохраним его
inc al ; перейдём к следующему элементу
jnz @b ; продолжаем цикл пока нет выхода за пределы массива.
end start
Но таким способом ассемблер изучить сложно. Лучше начать с книжек/туториалов + смотреть готовый код (рекомендую образовательные программы от The Svin) — это поможет задавать более конкретные вопросы.
People who are more than casually interested in computers should have at least some idea of what the underlying hardware is like. Otherwise the programs they write will be pretty weird (c) D.Knuth
Здравствуйте, Сергей Мухин, Вы писали:
СМ>начинать лучше не с ассемблера. Это наихудший вариант начала.
Почему это? По-моему, вполне логичен переход к от абстракций низших порядков к высшим.
BulatZiganshin в школе компелировал в хекскодах, а теперь написал лучший в мире архиватор.
Страуструп — устал писать на ассемблере и сделал С++
...
И вообще, утверждение тянет на противоречие Тезису Чёрча—Тьюринга
People who are more than casually interested in computers should have at least some idea of what the underlying hardware is like. Otherwise the programs they write will be pretty weird (c) D.Knuth
Здравствуйте, gear nuke, Вы писали:
СМ>>начинать лучше не с ассемблера. Это наихудший вариант начала.
GN>Почему это? По-моему, вполне логичен переход к от абстракций низших порядков к высшим.
где абстракции, а где ассемблер? Это абсолютные антиподы.
Что бы построить здание лучше окончить архитектурный ВУЗ, чем техникум по замешиванию бетона или производству кирпичей.
GN> в школе компелировал в хекскодах, а теперь написал лучший в мире архиватор.
это какой? Лучший по какому критерию?
GN>Страуструп — устал писать на ассемблере и сделал С++
а я думал он устал писать на С.
GN>И вообще, утверждение тянет на противоречие Тезису Чёрча—Тьюринга
гм. это тут не применимо, т.к. речь идет о методологии преподования, а не о науке.
Здравствуйте, Сергей Мухин, Вы писали:
СМ>где абстракции, а где ассемблер? Это абсолютные антиподы.
Ассемблер — абстракция над машкодами.
СМ>Что бы построить здание лучше окончить архитектурный ВУЗ, чем техникум по замешиванию бетона или производству кирпичей.
Ну да, а что бы рулить — не надо знать, что под капотом, только не на любом авто далеко уедешь. Так что не будем засчитывать "сравнения по аналогии".
СМ>это какой? Лучший по какому критерию?
В подписи у Булата есть ссылки на сравнения которые делал не он. здесь
GN>>Страуструп — устал писать на ассемблере и сделал С++
СМ>а я думал он устал писать на С.
А я читал его D&E. Впрочем, С — это портабельный ассемблер PDP, на котором видимо устали писать K&R.
СМ>гм. это тут не применимо, т.к. речь идет о методологии преподования, а не о науке.
Из тезиса Чёрча следует, что нет принциписальной разницы, на каком языке (учиться) писать. Пока на сцену не выходит наука под названием "менеджмент".
Да и были интересны аргументы (или наилучший вариант начала) а не попытки опровергнуть мои
People who are more than casually interested in computers should have at least some idea of what the underlying hardware is like. Otherwise the programs they write will be pretty weird (c) D.Knuth
Здравствуйте, gear nuke, Вы писали:
СМ>>где абстракции, а где ассемблер? Это абсолютные антиподы.
GN>Ассемблер — абстракция над машкодами.
ассемблер не абстракция на машкодом, а просто мнемонические имена для них
СМ>>Что бы построить здание лучше окончить архитектурный ВУЗ, чем техникум по замешиванию бетона или производству кирпичей.
GN>Ну да, а что бы рулить — не надо знать, что под капотом, только не на любом авто далеко уедешь. Так что не будем засчитывать "сравнения по аналогии".
Вы наверно недавно за рулем или машина старая. Я заглядываю под капот только для того, что бы залить жидкость для омывания лобового.
СМ>>это какой? Лучший по какому критерию?
GN>В подписи у Булата есть ссылки на сравнения которые делал не он. здесь
и читать не буду. в любом случае это не аргумент, что кто-то начал с ассемблера.
GN>>>Страуструп — устал писать на ассемблере и сделал С++
СМ>>а я думал он устал писать на С.
GN>А я читал его D&E. Впрочем, С — это портабельный ассемблер PDP, на котором видимо устали писать K&R.
это ближе к истине
СМ>>гм. это тут не применимо, т.к. речь идет о методологии преподования, а не о науке.
GN>Из тезиса Чёрча следует, что нет принциписальной разницы, на каком языке (учиться) писать. Пока на сцену не выходит наука под названием "менеджмент".
бред. Это если у Вас есть бесконечная жизнь и бесконечное время, чтобы учиться. А попробуй написать, что ниб на ассемблере большое
GN>Да и были интересны аргументы (или наилучший вариант начала) а не попытки опровергнуть мои
Здравствуйте, Сергей Мухин, Вы писали:
СМ>ассемблер не абстракция на машкодом, а просто мнемонические имена для них
Интересная теория. Что же тогда такое метки?
СМ>Вы наверно недавно за рулем или машина старая. Я заглядываю под капот только для того, что бы залить жидкость для омывания лобового.
О... а я еще в курсе как масло проверять . Для остальных случаев знаю, что есть специально обученные люди. Которые, кстати, и управлять машиной могут лучше. Это, если возвращаться к вопросу об архитекторах, которые, без производителей стройматериалов — 0 без палочки. Но вообще-то, демагогия, хоть и великая сила, если и имеет отношение к изучению чего-либо — так это людской психологии, а не программирования.
GN>>В подписи у Булата есть ссылки на сравнения которые делал не он. здесь
СМ>и читать не буду. в любом случае это не аргумент, что кто-то начал с ассемблера.
Ясно — "есть 2 мнения — моё и неправильное". Вот так и выходит — у Булата со мной мнение неправильное, хоть и более объективное.
GN>>Из тезиса Чёрча следует, что нет принциписальной разницы, на каком языке (учиться) писать. Пока на сцену не выходит наука под названием "менеджмент".
СМ>бред.
Ну как же бред-то. Про менеджмент даже согласуется с:
СМ>А попробуй написать, что ниб на ассемблере большое
А я пробовал. Проблема не написать, а кому-то другому поддерживать. Ну и кроссплатформенность опять же. В общем, проблема не в самом ассемблере.
СМ>Это если у Вас есть бесконечная жизнь и бесконечное время, чтобы учиться.
Вот именно, что после изучения абстракций на фундаментальные знания времени не хватит — пора писать код, заказчики торопят А изучается ассемблер, как самый простой язык, очень быстро. После него на С-Паскаль уйдёт день, если в религию не удариться.
People who are more than casually interested in computers should have at least some idea of what the underlying hardware is like. Otherwise the programs they write will be pretty weird (c) D.Knuth
Здравствуйте, gear nuke, Вы писали:
СМ>>ассемблер не абстракция на машкодом, а просто мнемонические имена для них
GN>Интересная теория. Что же тогда такое метки?
Точка в машкоде, до которого лень считать смещение в команде.
СМ>>Вы наверно недавно за рулем или машина старая. Я заглядываю под капот только для того, что бы залить жидкость для омывания лобового.
GN>О... а я еще в курсе как масло проверять . Для остальных случаев знаю, что есть специально обученные люди. Которые, кстати, и управлять машиной могут лучше. Это, если возвращаться к вопросу об архитекторах, которые, без производителей стройматериалов — 0 без палочки. Но вообще-то, демагогия, хоть и великая сила, если и имеет отношение к изучению чего-либо — так это людской психологии, а не программирования.
СМ>>и читать не буду. в любом случае это не аргумент, что кто-то начал с ассемблера.
GN>Ясно — "есть 2 мнения — моё и неправильное". Вот так и выходит — у Булата со мной мнение неправильное, хоть и более объективное.
Я его мнение не видел. На каком то уровне развития ассемблер знать надо, конечно. Но тут то явно начальный уровень (если смотреть на первое сообщение темы)
GN>>>Из тезиса Чёрча следует, что нет принциписальной разницы, на каком языке (учиться) писать. Пока на сцену не выходит наука под названием "менеджмент".
СМ>>бред.
GN>Ну как же бред-то. Про менеджмент даже согласуется с:
СМ>>А попробуй написать, что ниб на ассемблере большое
GN>А я пробовал. Проблема не написать, а кому-то другому поддерживать. Ну и кроссплатформенность опять же. В общем, проблема не в самом ассемблере.
1. ну напиши что-ниб, а потом то же на С++, только не сложение двух чисел. И посмотри на затраченное время
2. сопровождение занимает большее время в жизненном цикле программы. Посмотри сколько хороших программ брошено, т.к. нет сопровождения, или застыли в версии 1.74
СМ>>Это если у Вас есть бесконечная жизнь и бесконечное время, чтобы учиться.
GN>Вот именно, что после изучения абстракций на фундаментальные знания времени не хватит — пора писать код, заказчики торопят А изучается ассемблер, как самый простой язык, очень быстро. После него на С-Паскаль уйдёт день, если в религию не удариться.
помнить сотни команд, регистров, флагов, какая команда какие флаги меняет и тп. это просто тренировка памяти — не более.
Здравствуйте, Сергей Мухин, Вы писали:
СМ>Точка в машкоде, до которого лень считать смещение в команде.
Хорошо, уже получили абстракцию над адресом (про абстрагирование мнемониками от машкодов пропустили). Впрочем, такое толкование — это на уровне скорее автокода, чем современного ассемблера, где метки являются подвидом констант, привязанных к адресу. Про макросы, которые представляют возможности метапрограммирования и часто являются тьюринг-полным языком, думаю, распространяться смысла нет.
СМ>Я его мнение не видел.
Ну да, это моя проблема, я видел, а теперь надо что-то доказывать. здесь
. Это просто линки из избранного (не мной) в профиле.
СМ>На каком то уровне развития ассемблер знать надо, конечно. Но тут то явно начальный уровень (если смотреть на первое сообщение темы)
Вот именно, человек сам, интуитивно выбрал наиболее подходящий для себя путь, а ему в ответ "ты не прав", без предложения альтернатив. Где конструктив, в чем смысл такого запугивания?
СМ>1. ну напиши что-ниб, а потом то же на С++, только не сложение двух чисел. И посмотри на затраченное время
Да что ж сложение.. возьмём еще проще задачу: "Hello, World!" из книжки... только без чужей помощи, Ок? Но не спешим с выводами — скажу по секрету, у нас уже больше метра сорцов, а такой примитив еще не собирается Посмотри на объём готовых библиотек, что бы понять хинт (ага, а они еще все поверх C runtime)
А сложение зря отверг — это как раз то, что на ассмеблере неудобно делать, но делают — как же люди проживут без bignum либ
СМ>2. сопровождение занимает большее время в жизненном цикле программы. Посмотри сколько хороших программ брошено, т.к. нет сопровождения, или застыли в версии 1.74
Я про это писал. Проблема не в языке, а отсутсвии стандартов. Поэтому на ассмеблере — это проекты одного человека, со всеми вытекающими.
Но это мы куда-то не туда идём. Речь шла о старте в изучении, а не промышленном девелопменте.
СМ>помнить сотни команд, регистров, флагов, какая команда какие флаги меняет и тп. это просто тренировка памяти — не более.
Неправда, (мнемонических) команд — пара десятков, а флаги гораздо проще UB в С++. Это всё очень просто по своей сути, если понимать арифметику (булеву и адресную) и голову перед этим не забивать пёрлами. Я видел 7ми летнего ребёнка, который писал в машкодах, про другие языки примеров не знаю. Зато вот такие найти ближайшее число, которое делиться на 8
вопросы сплошь и рядом возникают. И примеры из книги Уоррена порой как какая-то магия воспринимаются. Вот вам и абстракции над двоичным представлением...
People who are more than casually interested in computers should have at least some idea of what the underlying hardware is like. Otherwise the programs they write will be pretty weird (c) D.Knuth
Здравствуйте, gear nuke, Вы писали:
GN>Здравствуйте, Сергей Мухин, Вы писали:
СМ>>Точка в машкоде, до которого лень считать смещение в команде.
GN>Хорошо, уже получили абстракцию над адресом (про абстрагирование мнемониками от машкодов пропустили). Впрочем, такое толкование — это на уровне скорее автокода, чем современного ассемблера, где метки являются подвидом констант, привязанных к адресу. Про макросы, которые представляют возможности метапрограммирования и часто являются тьюринг-полным языком, думаю, распространяться смысла нет.
Причем тут машина Тьюринга? Пытаешься приделать умные слова, при этом я то всю теориб МТ проходил еще 20 лет назад. А мы обсуждаем методологию обучения программирования.
СМ>>Я его мнение не видел.
GN>Ну да, это моя проблема, я видел, а теперь надо что-то доказывать. здесь
. Это просто линки из избранного (не мной) в профиле.
ну вот я опять не читал, но одну ссылку открыл и поискал слова ассемблер — его НЕТ!
СМ>>На каком то уровне развития ассемблер знать надо, конечно. Но тут то явно начальный уровень (если смотреть на первое сообщение темы)
GN>Вот именно, человек сам, интуитивно выбрал наиболее подходящий для себя путь, а ему в ответ "ты не прав", без предложения альтернатив. Где конструктив, в чем смысл такого запугивания?
Я никого не запугивал, не надо передергивать. вот мои слова: начинать лучше не с ассемблера. Это наихудший вариант начала.
СМ>>1. ну напиши что-ниб, а потом то же на С++, только не сложение двух чисел. И посмотри на затраченное время
GN>Да что ж сложение.. возьмём еще проще задачу: "Hello, World!" из книжки... только без чужей помощи, Ок? Но не спешим с выводами — скажу по секрету, у нас уже больше метра сорцов, а такой примитив еще не собирается Посмотри на объём готовых библиотек, что бы понять хинт (ага, а они еще все поверх C runtime)
не понял. Мерилом является что? метр сорцов или метр кода?
GN>А сложение зря отверг — это как раз то, что на ассмеблере неудобно делать, но делают — как же люди проживут без bignum либ
СМ>>2. сопровождение занимает большее время в жизненном цикле программы. Посмотри сколько хороших программ брошено, т.к. нет сопровождения, или застыли в версии 1.74
GN>Я про это писал. Проблема не в языке, а отсутсвии стандартов. Поэтому на ассмеблере — это проекты одного человека, со всеми вытекающими.
т.е. никому не нужные. я полностью с тобой согласен
GN>Но это мы куда-то не туда идём. Речь шла о старте в изучении, а не промышленном девелопменте.
СМ>>помнить сотни команд, регистров, флагов, какая команда какие флаги меняет и тп. это просто тренировка памяти — не более.
GN>Неправда, (мнемонических) команд — пара десятков, а флаги гораздо проще UB в С++. Это всё очень просто по своей сути, если понимать арифметику (булеву и адресную) и голову перед этим не забивать пёрлами. Я видел 7ми летнего ребёнка, который писал в машкодах, про другие языки примеров не знаю. Зато вот такие найти ближайшее число, которое делиться на 8
вопросы сплошь и рядом возникают. И примеры из книги Уоррена порой как какая-то магия воспринимаются. Вот вам и абстракции над двоичным представлением...
ну пример не доказательство. я могу привести пример программистов не знающих ассемблер, при этом реализовали несколько ассемблеров.
---
тема становится скучной. я не думаю что в форуме можно доказать ту или иную точку зрению
я предлагаю еще раз объявить в максимально общем виде и не дискутировать
мое последнее слово:
начинать обучение программированию лучше не с ассемблера. Это наихудший вариант.
. Это просто линки из избранного (не мной) в профиле.
одну стать прочитал. Правильно говорит, но не глубоко копает. СНо за последний абзац я двумя руками за:
пора наконец понять, что интересы вузов в России не совпадают с интересами бизнеса. вузы — это порфессура со знаниями времён царя Гороха, заинтересованная в том, чтобы не осваивая ничего нового, с умным видом продолжать зачитывать свой хлам студентам и на выходе из вуза, когда до них вдруг доходит, что им читали туфту, разводить руками со слвоами "зато мы научили вас учиться". доходы вуза и его отдельных преподавателей НЕ ЗАВИСЯТ от востребованности его выпускников в экономике
ps
я правда не понял, зачем ты привел эту ссылку. Она льет воду на мою мельницу
Здравствуйте, Сергей Мухин, Вы писали:
СМ>Причем тут машина Тьюринга? Пытаешься приделать умные слова, при этом я то всю теориб МТ проходил еще 20 лет назад.
Где ж я про МТ писал? Повторюсь — макроассемблеры представляют больше возможностей по метапрограммированию, чем тот же С или первый язык Вирта для обучения студентов.
СМ>А мы обсуждаем методологию обучения программирования.
Обсуждение — это когда есть конструктив.
СМ>ну вот я опять не читал, но одну ссылку открыл и поискал слова ассемблер — его НЕТ!
представьте себе ассемблер с ООП расширениями, шаблонами, клозурами, монадами, примитивами синхронизации и т.д. смешно? было бы смешно, если б не было близко к правде.
СМ>Я никого не запугивал, не надо передергивать. вот мои слова: начинать лучше не с ассемблера. Это наихудший вариант начала.
Но ответа на вопрос "почему?" не будет.
СМ>не понял. Мерилом является что? метр сорцов или метр кода?
Предпосылка, что в С++ будет "неявно" использоваться написанный кем-то библиотечный код (std::cout<<), даст очень серьёзную погрешностью в измерениях.
СМ>т.е. никому не нужные. я полностью с тобой согласен
Они нужны авторам, как минимум, для обучения
СМ>ну пример не доказательство.
Пример показывает, что асм достаточно прост для понимания детьми.
СМ>я могу привести пример программистов не знающих ассемблер, при этом реализовали несколько ассемблеров.
Ого... могут реализовать то, что не знают?
СМ>--- СМ>тема становится скучной. я не думаю что в форуме можно доказать ту или иную точку зрению
Каждый человек имеет право на свою точку зрения, АТ — что начинать следует с ассемблера (возможно, по неопытности), я — потому что альтернатив MK61 не было, и видел достаточно примеров успешных разработиков, которые давно забыли асм. Причём, я не доказываю — а аргументирую свою. И есть еще твоя точка зрения — которую, оказывается, ты пытаешься доказать, причём очень странным способом.
СМ>я предлагаю еще раз объявить в максимально общем виде и не дискутировать
Попробую:
Ассемблер не является наихудьшим вариантом для начала. Выбирать следует исходя из индивиуальных особенностей мышления и конечных целей (да, до сих пор востребаваны даже знания Зилога).
Плюсы:
Ассемблер не навязывает "истинного пути", ортогонален к парадигмам и алгоритмам, потому позволяет научиться делать выбор. Даёт понимание на интуитивном уровне таких "сложных вещей" в промышленных языках, как поинтеры (итераторы), ООП (и полиморфизм в чатности), примитивные (представление целых, вещетвенных, ASCII) и сложные структуры данных. Позволяет понять, почему программы на Forth более компактны, чем на нём Даёт представление об утройстве виртуальных машин и интерпретаторов.
Минусы:
Можно "заболеть" и топтаться на уровне "вызываем MessageBox". Особенно, если начинать с уроков Iczelion (учимся писать на асме так, как является моветоном на С)
СМ>мое последнее слово: СМ>начинать обучение программированию лучше не с ассемблера. Это наихудший вариант.
Плохо ценишь свои слова — уже 2 лишних ответа ниже
People who are more than casually interested in computers should have at least some idea of what the underlying hardware is like. Otherwise the programs they write will be pretty weird (c) D.Knuth
Здравствуйте, gear nuke, Вы писали:
СМ>>начинать лучше не с ассемблера. Это наихудший вариант начала.
GN>Почему это? По-моему, вполне логичен переход к от абстракций низших порядков к высшим.
Это совершенно неправильно и нелогично. Начинать следует с высокого уровня и углубляться в детали постепенно.
Из того факта, что ассемблер более всего способствеует понимаю, как работает компьютер, никак не следует, что с него надо начинать.
GN>BulatZiganshin в школе компелировал в хекскодах, а теперь написал лучший в мире архиватор.
КомпИлировал. Начинал-то он не с хекс-кодов.
GN>Страуструп — устал писать на ассемблере и сделал С++
Устал писать на Си и сделал С++. Уж с историей языка-то можно было ознакомиться.
GN>И вообще, утверждение тянет на противоречие Тезису Чёрча—Тьюринга
Тезис Черча-Тьюринга к механизмам обучения людей никак не относится и не применяется.
Здравствуйте, Кодёнок, Вы писали:
Кё>Это совершенно неправильно и нелогично.
Почему тогода при изучении математики такой подход? Сначала яблоки, потом числа, потом поля.
Кё>Начинать следует с высокого уровня и углубляться в детали постепенно.
Ответ на вопрос "почему?" будет хоть у когото? Ассемблер не мешает изучать "высокий уровень" (здесь
внизу более развернуто)
Кё>Из того факта, что ассемблер более всего способствеует понимаю, как работает компьютер, никак не следует, что с него надо начинать.
Я не подменяю необходимые и достаточные условия. С него начиать не следует, а можно. Чувствуешь разницу?
GN>>BulatZiganshin в школе компелировал в хекскодах, а теперь написал лучший в мире архиватор.
Кё>КомпИлировал. Начинал-то он не с хекс-кодов.
Возможно. (я вот начинал с паскаля и бейсика, которые в дальнейшем никак не помогли, разве что получать оценки — сменилось время, и парадигмы).
А компИлирует компилятор. Кампеляция — это "другой термин" — название процесса, чем-то напоминающий работу автоматических инструментов
Кё>Устал писать на Си и сделал С++. Уж с историей языка-то можно было ознакомиться.
Ознакамливался. К сожалению, мне сложно искать и цитировать бумажную D&E, где Бьёрн пишет, что он не был экспертом по С, а писал на BCPL и Simula (который не устраивал в силу тормозов). Поэтому воспользовался гуглом
C++ was designed primarily so that my friends and I would not have to program in assembler, C, or various modern high-level languages
Совместимости с C лёгла в основу, т.к это промышленный язык. И нужно просто не знать ассемблер PDP, что бы утверждать. что K&R C чем-то от него принципиально отличается, кроме синтакиса.
Кё>Тезис Черча-Тьюринга к механизмам обучения людей никак не относится и не применяется.
Однако он "ставит знак равенства" между языками.
Кстати, уже показательно — 2й человек не может ничего сказать о начале обучения более, чем пытаться отрицать мои аргументы. Зачем же выбирать тупиковый путь: даже если моя теория будет признана неверной, это никак не докажет верность любых других теорий
People who are more than casually interested in computers should have at least some idea of what the underlying hardware is like. Otherwise the programs they write will be pretty weird (c) D.Knuth
Здравствуйте, gear nuke, Вы писали:
Кё>>Тезис Черча-Тьюринга к механизмам обучения людей никак не относится и не применяется.
GN>Однако он "ставит знак равенства" между языками.
есть люди, с которыми безполезно спорить. они всегда считают себя правыми, за ними всегда последнее слово. таки не трогай.
Здравствуйте, gear nuke, Вы писали:
Кё>>Начинать следует с высокого уровня и углубляться в детали постепенно. GN>Ответ на вопрос "почему?" будет хоть у когото? Ассемблер не мешает изучать "высокий уровень" (здесь
Потому что принцип обучения — от простого к сложному. Простое — это меньшее количество делатей, которые необходимо изучить перед выполнением задания. Арифметика, последовательности и строки — это уже известно обучающемуся. Чтобы показать, как складывать числа, в его внимание вводится только синтаксис, и пара стандартных функций. Ассемблер заставляет вводить концепт памяти, регистров, адресов, стека, компиляции в конце концов, просто чтобы естественную операцию сделать. Поэтому он хуже.
Кё>>Из того факта, что ассемблер более всего способствеует понимаю, как работает компьютер, никак не следует, что с него надо начинать. GN>Я не подменяю необходимые и достаточные условия. С него начиать не следует, а можно. Чувствуешь разницу?
Если ставить вопрос как «можно ли», то я скажу что можно и кокосы лбом колоть. Если вопрос стоит — как учиться лучше и быстрее, то ассемблер не лучший выбор.
GN>Ознакамливался.
Либо «знакомился», либо «ознакомился».
GN>Кстати, уже показательно — 2й человек не может ничего сказать о начале обучения более, чем пытаться отрицать мои аргументы. Зачем же выбирать тупиковый путь: даже если моя теория будет признана неверной, это никак не докажет верность любых других теорий
Здравствуйте, Кодёнок, Вы писали:
Кё>Ассемблер заставляет вводить концепт памяти, регистров, адресов, стека, компиляции в конце концов, просто чтобы естественную операцию сделать. Поэтому он хуже.
Вот это уже — что надо
Спасибо, я понял свою ошибку — подразумевал, что эти знания уже есть у автора топика.
Кё>Или просто не хочешь понять, что тебе объясняют.
Снимаю перед тобой шляпу, если ты увидел объяснения в оспариваниях Сергей Мухин
People who are more than casually interested in computers should have at least some idea of what the underlying hardware is like. Otherwise the programs they write will be pretty weird (c) D.Knuth
Здравствуйте, gear nuke, Вы писали:
GN>Спасибо, я понял свою ошибку — подразумевал, что эти знания уже есть у автора топика.
да, лопухнулся, но признать ошибку — большое достоинство, не все так могут.
Кё>>Или просто не хочешь понять, что тебе объясняют.
GN>Снимаю перед тобой шляпу, если ты увидел объяснения в оспариваниях Сергей Мухин
т.е. я оказался прав, только не смог донести до аудитории. будем работать.
Здравствуйте, Сергей Мухин, Вы писали:
СМ>да, лопухнулся, но признать ошибку — большое достоинство, не все так могут.
Верно заметил — ввязаться в спор с людьми, не читавшими п.5 правил, и делающими безосновательные выводы о незнании топикстартером таких вещей как регистры, компиляция, ... — это именно "лопухнуться".
СМ>т.е. я оказался прав, только не смог донести до аудитории. будем работать.
Прав, мантра "ассемблер — наихудьший вариант" действительно есть.
СМ>будем работать.
Первый шаг — ответ на вопрос "почему?" в этом топике.
People who are more than casually interested in computers should have at least some idea of what the underlying hardware is like. Otherwise the programs they write will be pretty weird (c) D.Knuth
Re[4]: массивы на ассемблере
От:
Аноним
Дата:
06.10.08 08:30
Оценка:
СМ>>>начинать лучше не с ассемблера. Это наихудший вариант начала. GN>>Почему это? По-моему, вполне логичен переход к от абстракций низших порядков к высшим. Кё>Это совершенно неправильно и нелогично. Начинать следует с высокого уровня и углубляться в детали постепенно.
+1 И вообще это по-моему большая беда современного образования. Многим людям свойственнен дедуктивный стиль мышления, он более естественнен для человека и дает много плюсов по сравнению с индуктивным, прививание которого с школьной (универской) скамьи сравнимо с перевоспитанием левшей в правшей.
Здравствуйте, <Аноним>, Вы писали:
А>+1 И вообще это по-моему большая беда современного образования. Многим людям свойственнен дедуктивный стиль мышления, он более естественнен для человека и дает много плюсов по сравнению с индуктивным, прививание которого с школьной (универской) скамьи сравнимо с перевоспитанием левшей в правшей.
Перечислите, пожалуйста, плюсы. Людям с "недедуктивным стилем" сложно понять, что подразумевалось под пропущенным словом "очевидные"
Many readers are no doubt thinking, ``Why does Knuth replace MIX by another machine instead of just sticking to a high-level programming language? Hardly anybody uses assemblers these days.''
Such people are entitled to their opinions, and they need not bother reading the machine-language parts of my books. But the reasons for machine language that I gave in the preface to Volume 1, written in the early 1960s, remain valid today:
One of the principal goals of my books is to show how high-level constructions are actually implemented in machines, not simply to show how they are applied. I explain coroutine linkage, tree structures, random number generation, high-precision arithmetic, radix conversion, packing of data, combinatorial searching, recursion, etc., from the ground up.
The programs needed in my books are generally so short that their main points can be grasped easily.
People who are more than casually interested in computers should have at least some idea of what the underlying hardware is like. Otherwise the programs they write will be pretty weird.
Machine language is necessary in any case, as output of many of the software programs I describe.
Expressing basic methods like algorithms for sorting and searching in machine language makes it possible to carry out meaningful studies of the effects of cache and RAM size and other hardware characteristics (memory speed, pipelining, multiple issue, lookaside buffers, the size of cache blocks, etc.) when comparing different schemes.
Moreover, if I did use a high-level language, what language should it be? In the 1960s I would probably have chosen Algol W; in the 1970s, I would then have had to rewrite my books using Pascal; in the 1980s, I would surely have changed everything to C; in the 1990s, I would have had to switch to C++ and then probably to Java. In the 2000s, yet another language will no doubt be de rigueur. I cannot afford the time to rewrite my books as languages go in and out of fashion; languages aren't the point of my books, the point is rather what you can do in your favorite language. My books focus on timeless truths.
Therefore I will continue to use English as the high-level language in TAOCP, and I will continue to use a low-level language to indicate how machines actually compute. Readers who only want to see algorithms that are already packaged in a plug-in way, using a trendy language, should buy other people's books.
People who are more than casually interested in computers should have at least some idea of what the underlying hardware is like. Otherwise the programs they write will be pretty weird (c) D.Knuth
А>>+1 И вообще это по-моему большая беда современного образования. Многим людям свойственнен дедуктивный стиль мышления, он более естественнен для человека и дает много плюсов по сравнению с индуктивным, прививание которого с школьной (универской) скамьи сравнимо с перевоспитанием левшей в правшей. GN>Перечислите, пожалуйста, плюсы. Людям с "недедуктивным стилем" сложно понять, что подразумевалось под пропущенным словом "очевидные"
Это значит что когда человек решает проблему, он сперва видит проблему и анализирует ее общие черты. Затем постепенно углубляется в суть проблемы. Это естественный путь познания. А в современной системе образования приучают к другому пути — встретивись с системой которую надо изучить, разбить ее на множество возможно более мелких подсистем, изучить каждую из них и затем изучить подсистемы которые они составляют и далее по восходящей. Такой подход позволяет быстро и типово изучать сравнительно небольшие системы (решать несложные проблемы), но при столкновении с реально большой системой он требует ее досконального изучения, прежде чем станет ясен тот самый кусок который вас изначально интересовал.
Говоря языком программеров:
Индуктивный подход требует при каком либо некорректном поведении софта садиться за дебаггер и постепенно изучать строку за строкой прежде чем разобраться что какую роль играют конкретные строки, классы, модули etc в баге которую требуется пофиксить.
Дедуктивный предполагает изучение проблемного функционала сверху вниз, вначале нахождение ответственных логических путей в общей архитектуре, потом модули, потом классы и логические связи основываясь на анализе исходников и логов.. И потом если сразу станет неясно легкий дебаг. Для реально больших систем которые нужно быстро исправлять минимально затрагивая остальную архитектуру так обычно эффективнее.
Как много веселых ребят, и все делают велосипед...
Говоря языком программеров, вы сами-то, когда новый язык изучали, как поступали:
1. Читали reference, где объясняются синтаксические конструкции (в виде EBNF) и их семантика, затем, узнав все кирпичики, отобрали нужные и составили свою первую программу?
2. Или же, скопировали пример из getting started, запустили его (ничего не меняя), затем начали менять числа, добавлять вызовы и т.д., заглядывая в reference и читая только нужное исключительно только тогда, когда что-то не получается?
Re[8]: массивы на ассемблере
От:
Аноним
Дата:
09.10.08 07:20
Оценка:
Кё>Говоря языком программеров, вы сами-то, когда новый язык изучали, как поступали: Кё>1. Читали reference, где объясняются синтаксические конструкции (в виде EBNF) и их семантика, затем, узнав все кирпичики, отобрали нужные и составили свою первую программу? Кё>2. Или же, скопировали пример из getting started, запустили его (ничего не меняя), затем начали менять числа, добавлять вызовы и т.д., заглядывая в reference и читая только нужное исключительно только тогда, когда что-то не получается?
Я сразу брался решать конкретные проблемы (писал конкретные проги) и по ходу дела разбирался с нужными вещами (особенностями архитектуры, паттернами и синтаксисом). Я никогда не изучал язык ради изучения самого языка.
Здравствуйте, ononim, Вы писали:
А>>>прививание которого с школьной (универской) скамьи
После прочтения ответа только дошло. Хотя ясно написано прямым текстом Школа и университет — это вообще-то разные системы и учат там разным вещам и по-разному. Даже названия — начальная, средняя, высшая.. И яблоки учат считать, и теоремы доказывать индукцией, и ТРИЗ... И именно в таком порядок не спроста — без базовых знаний, что дерево горит, нельзя "изобрести из спички зубочистку", кроме как методом проб и ошибок (не путать с методом Тыка).
Поэтому мне и неясно, почему изучение программирования надо начинать не с битов... В чём выгода дедуктивного подхода для общего случая, когда решаемая проблема вообще "неизвестна" Опыт человечества говорит об обратном — по-моему все существенные открытия западной науки "приснились во сне".
— был хороший ответ. Пока у обучающегося не возникнут вопросы "а что же такое переменная на самом деле", или "почему моя старая прога на Perl рвёт написанную после прочтения С++ за 2 дня свежую версию.
А>>>сравнимо с перевоспитанием левшей в правшей.
Подавление врождённых способностей — первый признак дилетанства учителя. Но в школе готовят не Мастеров, а роботов, там подход "экономически оправдан". Я ожидал здесь несколько большего, против ответа "для кого-то, асм — наихудший вариант начала" не возражал бы.
O>Это значит что когда человек решает проблему, он сперва видит проблему и анализирует ее общие черты. Затем постепенно углубляется в суть проблемы. Это естественный путь познания. А в современной системе образования приучают к другому пути — встретивись с системой которую надо изучить, разбить ее на множество возможно более мелких подсистем, изучить каждую из них и затем изучить подсистемы которые они составляют и далее по восходящей. Такой подход позволяет быстро и типово изучать сравнительно небольшие системы (решать несложные проблемы), но при столкновении с реально большой системой он требует ее досконального изучения, прежде чем станет ясен тот самый кусок который вас изначально интересовал.
Гм. Как раз есть такие две (противоположные) модели разработки — Waterfall и Reverse Engineering. Вот первая как раз и способна решать только несложные проблемы — поскольку не всегда можно увидеть правильно даже проблему в целом, не говоря о более мелких деталях. Так что выходит, учат правильно. Другое дело, что знания нужно еще правильно применить. RE (например, самый примитивный — Bit-Hack) не требует досконального изучения системы, кроме случая, когда именно изучение является целью. Правильный RE требует применять прямое проектирование, где можно — это находит отражение и в альтернативных моделях — где нужно, применять обратное
O>Говоря языком программеров:
O>Индуктивный подход требует при каком либо некорректном поведении софта садиться за дебаггер и постепенно изучать строку за строкой прежде чем разобраться что какую роль играют конкретные строки, классы, модули etc в баге которую требуется пофиксить.
По-моему, это самый простой случай — когда баг можно найти и исправить "по аналогии". Ошибки классифицируются, изучаются общее между источниками, и... даже индуцируются правила по предотвращению.
O>Дедуктивный предполагает изучение проблемного функционала сверху вниз, вначале нахождение ответственных логических путей в общей архитектуре, потом модули, потом классы и логические связи основываясь на анализе исходников и логов.. И потом если сразу станет неясно легкий дебаг. Для реально больших систем которые нужно быстро исправлять минимально затрагивая остальную архитектуру так обычно эффективнее.
О, да это не ошибки даже Если надо лезть "вверх" функционала — это значит, что софт работает именно так, как сказали ему разработчики. Но они либо сказали плохо, либо вообще представляли проблему не полно. Waterfall, одним словом
People who are more than casually interested in computers should have at least some idea of what the underlying hardware is like. Otherwise the programs they write will be pretty weird (c) D.Knuth
Здравствуйте, Сергей Мухин, Вы писали:
СМ>начинать лучше не с ассемблера. Это наихудший вариант начала.
Соглашусь с gear nuke, что бездоказательные утверждения имеют нулевой вес. Только вот доказательств чувствую не будет, поскольку их просто нет
СМ>где абстракции, а где ассемблер? Это абсолютные антиподы.
Хм, так говорят все, кто не разбирается в современных ассемблерах, вернее может и знают мнемоники команд, но саму среду разработки — нет Не буду распинаться об ООП, высокоуровневых конструкциях циклов и условных переходов. Все это поддерживает даже старичок tasm. Но о макросах просто не могу не упомянуть. Это по сути отдельный и довольно мощный язык, причем легко расширяемый. И они позволяют создавать код на более высоком уровне абстракции, нежели многим кажется. Их возможности не ограничиваются созданием высокоуровневых конструкций (if, repeat и тд.). С помощью макросов можно создать даже новый язык, введя любые конструкции. Я реализовывал Форт, ничем не отличающийся от "настоящего" компилятора Форта, разве что в начале каждой строки стоял спецсимвол (для парсинга остальной части). Но можно создать и более высокоуровневые возможности, было бы желание и фантазия.
Впрочем, асм хорош еще и тем, что приучает находить несколько решений и выбирать наиболее подходящее. И именно поэтому он и подходит для начинающих, прививая им эти полезные навыки. За примером не буду далеко ходить, возьмем сабж.
Типичное решение:
array db 256 dup(?)
А можно так:
array label byte
rept 256
db ?
endm
Или так:
array label byte
I = 1
while I le 256
db ((I*2) shl 1) and 0ffh
I = I + 1
endm
Могу еще кучу вариантов привести, но для примера вполне хватит и этих. В общем выбор огромный, что и приучает тщательно взвешивать решения, поскольку возможности к откату, если решение окажется неудачным, нередко довольно ограничены. Этого очень не хватает в ЯВУ, где почти все насильно навязывается по заранее подготовленным шаблонам, превращая человека в "собачку Павлова".
Здравствуйте, AndNot, Вы писали:
СМ>>начинать лучше не с ассемблера. Это наихудший вариант начала. AN>Соглашусь с gear nuke, что бездоказательные утверждения имеют нулевой вес. Только вот доказательств чувствую не будет, поскольку их просто нет
Здравствуйте, AndNot, Вы писали:
AN>Впрочем, асм хорош еще и тем, что приучает находить несколько решений и выбирать наиболее подходящее. И именно поэтому он и подходит для начинающих, прививая им эти полезные навыки.
Это если только ты не ошибся в том, что это именно он тебе её привил. Если ошибся — то не подходит.
Ну так это не тянет на полноценный ответ, одни лишь утверждения, без доказательств Любой язык без исключения требует некоторых предварительных знаний и пояснений. И ни в одном не получится: "чтобы показать, как складывать числа, в его внимание вводится только синтаксис, и пара стандартных функций.", сначала придется выучить море правил и ограничений, связанных с идеологией языка, его конструкциями и особенностями. Возьмем "пару стандартных функций". В Сях сначала придется долго и подробно объяснять, откуда взять эти функции (инклюды и либы), полностью объяснить синтаксис, особенности написания программ (например функция main). Только после этого можно переходить к простым примерам. То же самое происходит и с ассемблером, только у него начинать принято с концепции памяти (а регистры — это тоже память), но вполне можно обойтись без инклюдов и либ (для начала). Ведь и асму можно обучать довольно быстро, по принципу Си, когда "вводится только синтаксис, и пара стандартных функций":
ideal
P386
model flat, stdcall
extrn printf : PROC
macro _printf frm: req, par: rest
local s
dataseg
s db frm,0
codeseg
ifnb <par>
call printf C, offset s, par
else
call printf C, offset s
endif
endm
CODESEG
Start:
_printf <"Hello World!",13,10>
ret
END Start
А что, пример смотрится ничуть не сложнее, нежели на Сях и знаний для него нужно не так уж и много. Только вот такой подход чреват тем, что вместо Программиста вырастит Обезьяна, наученная лишь пользоваться WinApi (взамен сишному RTL). Это надо? Нет конечно. Поэтому для изучения любого языка необходимо вначале освоить множество особенностей. Повторяю — для любого. И в этом отношении асм ничуть не хуже других языков. А отсутствие в нем строгой типизации данных, размытости между кодом и данными, и приводит к многообразию различных решений почти любой задачи, заставляя включать соображалку. Да и на асме как то лучше усваиваются особенности двоичной арифметики.
и показывают, что оно очень субъективно. Очень похоже на тороллирование.
СМ>а кто будет рассказывать, как подключать библиотеки от С?. Правила передачи параметров и тп.
Замечательная тактика — не отвечая, спрашивать, причём без смысла — в случае с С всё это тоже надо рассказывать.
People who are more than casually interested in computers should have at least some idea of what the underlying hardware is like. Otherwise the programs they write will be pretty weird (c) D.Knuth
Здравствуйте, gear nuke, Вы писали:
GN> и показывают, что оно очень субъективно.
объективно — количество проектов на ассемблере и на С/С++ или других языках? есть такая статистика? и лучше по годам.
GN> Очень похоже на тороллирование.
это что такое? google сказал: Возможно, вы имели в виду: паролирование
СМ>>а кто будет рассказывать, как подключать библиотеки от С?. Правила передачи параметров и тп.
GN>Замечательная тактика — не отвечая, спрашивать, причём без смысла — в случае с С всё это тоже надо рассказывать.
слева направо или как? снимается со стека или как? сколько байтов передается double? а структура? в С совершенно не обязательно.
Здравствуйте, AndNot, Вы писали:
AN>Ну так это не тянет на полноценный ответ, одни лишь утверждения, без доказательств
Доказательства находятся в тебе. Если ты наблюдал за собой во время обучения, как оно происходит, то доказательств не нужно — ты видел факты. Если нет, то тебе этого никак не показать. Чтобы стать хорошим програмистом, ты потратил годы, но чтобы разобраться, как происходит обучение, ты явно потратил максимум 5 минут. Зато авторитетные суждения, что лучше, а что хуже, уже делаешь.
AN>Любой язык без исключения требует некоторых предварительных знаний и пояснений. И ни в одном не получится: "чтобы показать, как складывать числа, в его внимание вводится только синтаксис, и пара стандартных функций.", сначала придется выучить море правил и ограничений, связанных с идеологией языка, его конструкциями и особенностями.
Да, я в курсе, что процентов 90% программистов считает, что сначала надо объяснить все кирпичики, и только затем показывать, как из них складывать программу. Это не работает и это наихудший способ обучения. Если б ты попробовал его хоть раз, знал бы.
А еще процентов 90% программистов имеет небольшие трудности с тем, чотбы делать понятные простым людям интерфейсы, понятные простым людям сайты, понятные простым людям объяснения. Странное совпадение.
AN>Возьмем "пару стандартных функций". В Сях сначала придется долго и подробно объяснять, откуда взять эти функции (инклюды и либы), полностью объяснить синтаксис, особенности написания программ (например функция main).
Не только не придется, но и нельзя с этого начинать. Студент мгновенно теряет интерес, если начать грузить его ненужным.
AN>CODESEG AN> Start: AN> _printf <"Hello World!",13,10> AN> ret AN>END Start AN>А что, пример смотрится ничуть не сложнее, нежели на Сях и знаний для него нужно не так уж и много.
Это не тоже самое, что программа на Си main(){printf("Hello, World!\n");}. Отношение нужных понятий к ненужным просто удручающее. И сравни с программой на Питоне:
print "Hello, World!"
Сколько времени придется потратить на ответы на вопросы «а это что за штука?» от обучаемого в том и в другом случае?
Здравствуйте, Сергей Мухин, Вы писали:
СМ>объективно — количество проектов на ассемблере и на С/С++ или других языках? есть такая статистика? и лучше по годам.
Не вижу связи между объективной оценкой количества проектов и языком, с которого следует начинать обучение.
Кстати, ещё в начале 90х мне такое рассказывали, сдуру поверил, а оказалось, что это полная лажа. Оценка однобока по-видимому из-за нечёткого определения "проект на ассемблере". Асм используется в довольно большом количестве тех же С++ проектов, пусть и неявно, в процессе отладки и некоторых оптимизаций. Никогда не сталкивались с багами в сторонней библиотеке, компиляторе? Подзравляю! Зато всякий популярный когда-то Паскаль давно попал в свою нишу, разве что без гроба. Вот именно старый Паскаль я считаю необходимо исключить из списка претендентов для начала обучения — учит мыслить с оттенком "versus C", а чрезмерный фанатизм препятствует переходу на тот же C#. И отступы в один пробел в книге — издевательство! (это я тороллирую уже ) Зато вспомнил хорошего кандидата BlackBox. Думаю, показательно — каким-то языкам приходится эволюционировать, а асм так и остаётся самим собой, появляются лишь новые более мощные трансляторы.
СМ>это что такое? google сказал: Возможно, вы имели в виду: паролирование
Опечатка. Троллинг
СМ>слева направо или как? снимается со стека или как? сколько байтов передается double? а структура? в С совершенно не обязательно.
Необязательно в той же мере, как и для асма. Пока все функции с одной конвенцией, достаточно директив/макросов типа PROC/INVOKE, даже такое может быть вполне легальный асм:
printf("Hello World!\n");
Да и не факт, что следует начинать именно с исполняемых файлов. Например, в качестве результата работы FASM можно получить картинку
People who are more than casually interested in computers should have at least some idea of what the underlying hardware is like. Otherwise the programs they write will be pretty weird (c) D.Knuth
Здравствуйте, gear nuke, Вы писали:
СМ>>объективно — количество проектов на ассемблере и на С/С++ или других языках? есть такая статистика? и лучше по годам.
GN>Не вижу связи между объективной оценкой количества проектов и языком, с которого следует начинать обучение.
прямой связи нет, конечно. Это означает, что на асме нельзя (или намного сложней) написать большой проект. Зачем нужен такой язык?
GN>Кстати, ещё в начале 90х мне такое рассказывали, сдуру поверил, а оказалось, что это полная лажа. Оценка однобока по-видимому из-за нечёткого определения "проект на ассемблере". Асм используется в довольно большом количестве тех же С++ проектов, пусть и неявно, в процессе отладки и некоторых оптимизаций. Никогда не сталкивались с багами в сторонней библиотеке, компиляторе? Подзравляю!
сам пишу и компилятор и библиотеку, не надо поздравлять
GN>Зато всякий популярный когда-то Паскаль давно попал в свою нишу, разве что без гроба. Вот именно старый Паскаль я считаю необходимо исключить из списка претендентов для начала обучения — учит мыслить с оттенком "versus C", а чрезмерный фанатизм препятствует переходу на тот же C#. И отступы в один пробел в книге — издевательство! (это я тороллирую уже ) Зато вспомнил хорошего кандидата BlackBox. Думаю, показательно — каким-то языкам приходится эволюционировать, а асм так и остаётся самим собой, появляются лишь новые более мощные трансляторы.
Оберон — хороший
СМ>>слева направо или как? снимается со стека или как? сколько байтов передается double? а структура? в С совершенно не обязательно.
GN>Необязательно в той же мере, как и для асма. Пока все функции с одной конвенцией, достаточно директив/макросов типа PROC/INVOKE, даже такое может быть вполне легальный асм:
хотелось бы знать, во всех ассемблерах есть PROC/INVOKE? одинаковые ли они? есть ли стандарт на них?
GN>Да и не факт, что следует начинать именно с исполняемых файлов. Например, в качестве результата работы FASM можно получить картинку
Здравствуйте, Кодёнок, Вы писали:
Кё>Да, я в курсе, что процентов 90% программистов считает, что сначала надо объяснить все кирпичики, и только затем показывать, как из них складывать программу. Это не работает и это наихудший способ обучения. Если б ты попробовал его хоть раз, знал бы.
Я пробовал, так что должно быть понятно, почему мне сложно признать это самым неэффективным путём Есть другой пример — учил однокласника спектрумному ассемблеру, позже, участь в универе он написал сначала симулятор для обучения студентов, потом еще какую-то систему учета фанарей на улицах. Специальность к CS отношения не имела, он просто взял книжку по Дельфи и читал... интересны были его коммантарии вроде "да и так кое-что уже знаю, вот то в Дельфи делается так-то, а для этого сразу готовая функия", "вот уроды, из-за того-то ГУЙ мерцает, но я сделал вот эдак!". Нет смысла судить, насколько там всё архитектурно правильно было — оба проекта успешны (коммерчески) и ему закрыли кучу сессий автоматом
Кё>А еще процентов 90% программистов имеет небольшие трудности с тем, чотбы делать понятные простым людям интерфейсы, понятные простым людям сайты, понятные простым людям объяснения. Странное совпадение.
Ничего странного — usability это совершенно отдельная наука, требующая привлечения в том числе и людей с 0ми знаниями в программировании.
Кё>Студент мгновенно теряет интерес, если начать грузить его ненужным.
ИМХО, студент — это уже слишком поздно для начала обучения.
Кё>Отношение нужных понятий к ненужным просто удручающее. И сравни с программой на Питоне:
Кё>print "Hello, World!"
Одна строка с INCLUDE — это насколько много деталей? А то "Питон" можно и ассемблировать будет
Кё>Сколько времени придется потратить на ответы на вопросы «а это что за штука?» от обучаемого в том и в другом случае?
На этот вопрос есть 2 ответа — короткий и доскональный. Чем более высокоуровнев язык, тем короче первый вариант, но меньше возможности дать второй. Понятно, что в ряде случаев последний может не потребоваться. И есть одна проблема — не зная о некоторых деталях, нельзя сказать, существенны ли они для данной проблемы, или нет.
People who are more than casually interested in computers should have at least some idea of what the underlying hardware is like. Otherwise the programs they write will be pretty weird (c) D.Knuth
Здравствуйте, Сергей Мухин, Вы писали:
СМ>на асме нельзя (или намного сложней) написать большой проект. Зачем нужен такой язык?
Для понимания сути вещей, в том числе того, что происходит в проектах на других языках.
СМ>Оберон — хороший
Вообще-то Component Pascal уже
СМ>хотелось бы знать, во всех ассемблерах есть PROC/INVOKE? одинаковые ли они? есть ли стандарт на них?
Нет. Нет. И нет. Но это не проблемы, выбор то есть. Вот, например, в FASM нет — реализуется через маросы.
Отсутствие стандарта на ассемблер — с одной стороны, сильный тормоз для его использования в реальных проектах, зато с другой — подготавливает пользователя проявлять лояльность в выборе транслятора, а следом и языка.
GN>>Да и не факт, что следует начинать именно с исполняемых файлов. Например, в качестве результата работы FASM можно получить картинку
СМ>не понял. лучше оценку
То есть .asm файл транслируется в какой-нибудь BMP, а там, например, фрактал.
People who are more than casually interested in computers should have at least some idea of what the underlying hardware is like. Otherwise the programs they write will be pretty weird (c) D.Knuth
Здравствуйте, gear nuke, Вы писали:
СМ>>на асме нельзя (или намного сложней) написать большой проект. Зачем нужен такой язык?
GN>Для понимания сути вещей, в том числе того, что происходит в проектах на других языках.
вот есть проект. в нем КУЧА логики заложено. Где тут ассемблер?
ты понимаешь как реализована та или иная конструкция — очень хорошо, но это никак не приблизит тебя к написанию правильной программы!
СМ>>хотелось бы знать, во всех ассемблерах есть PROC/INVOKE? одинаковые ли они? есть ли стандарт на них?
GN>Нет. Нет. И нет. Но это не проблемы, выбор то есть. Вот, например, в FASM нет — реализуется через маросы.
GN>Отсутствие стандарта на ассемблер — с одной стороны, сильный тормоз для его использования в реальных проектах, зато с другой — подготавливает пользователя проявлять лояльность в выборе транслятора, а следом и языка.
подгатавливать к плохой жизни программистов не надо, она у них и так не сахар
Здравствуйте, Сергей Мухин, Вы писали:
СМ>Здравствуйте, gear nuke, Вы писали:
GN>> и показывают, что оно очень субъективно.
СМ>объективно — количество проектов на ассемблере и на С/С++ или других языках? есть такая статистика? и лучше по годам.
Вообще то разговор не о написании софта, а о первом языке. Это совершенно разные вещи Да и не забывай, что программы для x86 сегодня составляют не самую большую долю на общем рынке, где все больше и больше распространяются микроконтроллеры. Впрочем и старенькие Z80, увеличив частоту, не уходят со сцены, являясь неплохим и дешевым процессором для промышленного оборудования. Только разочарую тебя, на плюсах под них никто не пишет, предпочитая чистый Си и Ассемблер, разве что под Symbian OS используется C++ (да и то пока еще ничтожно мало). Впрочем довольно неплохо смотрятся и Форт-процессоры, устойчиво заняв свою нишу. Или загляни в BIOS своего компа, сразу бросится в глаза, что значительная часть (если не весь) написан исключительно на асме. Возьми такой рынок, как мини ОС реального времени. Там тоже немалую долю занимает асм. А в писюках, в настоящее время, действительно проектов исключительно на асме довольно мало. Но в паре с тем же Си/C++ он еще используется.
Впрочем, я и не призываю писать исключительно на асме, сам пользуюсь Си, просто не вижу причин, по которым асм был бы непригоден для обучения.
Здравствуйте, gear nuke, Вы писали:
Кё>>Да, я в курсе, что процентов 90% программистов считает, что сначала надо объяснить все кирпичики, и только затем показывать, как из них складывать программу. Это не работает и это наихудший способ обучения. Если б ты попробовал его хоть раз, знал бы.
GN>Я пробовал, так что должно быть понятно, почему мне сложно признать это самым неэффективным путём Есть другой пример — учил однокласника спектрумному ассемблеру, позже, участь в универе он написал сначала симулятор для обучения студентов, потом еще какую-то систему учета фанарей на улицах. Специальность к CS отношения не имела, он просто взял книжку по Дельфи и читал... интересны были его коммантарии вроде "да и так кое-что уже знаю, вот то в Дельфи делается так-то, а для этого сразу готовая функия", "вот уроды, из-за того-то ГУЙ мерцает, но я сделал вот эдак!". Нет смысла судить, насколько там всё архитектурно правильно было — оба проекта успешны (коммерчески) и ему закрыли кучу сессий автоматом
на самом деле вопрос сложный и не однозначный. Пробема в высшем образовании. Я не уверен, что оно сильно изменилось за последние несколько десятков лет, но нас, например, не учили программировать вообще! Учили ассемблеру, Алголам, и другим языкам (еще грамматикам и тп, но это в сторону). А программировать — не учили. Да и понятно, язык препод может и по книге знать, а программировать — надо опыт, хотя сейчас и книги появились.
а сложность вопроса (как мне кажется) кроется в след вопросе:
для чего нам учить программирование?
1. что бы сдать зачет (диплом и тп)
2. что бы написать пару программ для себя
3. что бы работать в отрасли (абс большинство позиций)
4. что бы понимать как это работает
п 1 практически равен 2. для него все равно сколько времени будет потрачено.
для кого нужен ассемблер.
п1.2 — да все равно
п.3 — не нужен
п.4 — нужен.
GN>>> и показывают, что оно очень субъективно.
СМ>>объективно — количество проектов на ассемблере и на С/С++ или других языках? есть такая статистика? и лучше по годам.
AN>Вообще то разговор не о написании софта, а о первом языке. Это совершенно разные вещи Да и не забывай, что программы для x86 сегодня составляют не самую большую долю на общем рынке, где все больше и больше распространяются микроконтроллеры. Впрочем и старенькие Z80, увеличив частоту, не уходят со сцены, являясь неплохим и дешевым процессором для промышленного оборудования. Только разочарую тебя, на плюсах под них никто не пишет, предпочитая чистый Си и Ассемблер, разве что под Symbian OS используется C++ (да и то пока еще ничтожно мало). Впрочем довольно неплохо смотрятся и Форт-процессоры, устойчиво заняв свою нишу. Или загляни в BIOS своего компа, сразу бросится в глаза, что значительная часть (если не весь) написан исключительно на асме. Возьми такой рынок, как мини ОС реального времени. Там тоже немалую долю занимает асм. А в писюках, в настоящее время, действительно проектов исключительно на асме довольно мало. Но в паре с тем же Си/C++ он еще используется.
дык. мы путаем ассемблер как язык, и процессор как железо.
Учить ассемблер для IBM/370, PDP-11, x86, z80, MIX (это то что я знаю) это разные ассемблеры, хотя и называются одним словом. Тебе надо учить _несколько_, чтобы работать на всех этих машинах (MIX исключим), а мне только один С.
А Forth — вообще смешно. он был хоть как-то востребован в старые года (но я видел только игрушки), и я единственный выступил на какой-то отраслевой конференции в 80 г против него, т.к. знал его близко.
Наверно ниша есть, а найти работу в этой нише можно?
AN>Впрочем, я и не призываю писать исключительно на асме, сам пользуюсь Си, просто не вижу причин, по которым асм был бы непригоден для обучения.
вот два чела стали учить языки. один уже научился Hello word выводить на экран, другой матрицы перемножает.
Здравствуйте, Кодёнок, Вы писали:
Кё>Доказательства находятся в тебе. Если ты наблюдал за собой во время обучения, как оно происходит, то доказательств не нужно — ты видел факты. Если нет, то тебе этого никак не показать. Чтобы стать хорошим програмистом, ты потратил годы, но чтобы разобраться, как происходит обучение, ты явно потратил максимум 5 минут. Зато авторитетные суждения, что лучше, а что хуже, уже делаешь.
Я ни в коем случае не претендую на истину Начинал ведь с бейсика и маш. кодов. Затем был очень болезненный переход на x86 и изучение Борландовских Паскаля и Си. И только неудовлетворенность скоростью заставила вплотную заняться асмом, хотя, после 8080, это был шок, платформа казалась уродливой до невозможности :D Но, изучив асм только для оптимизации программ, я постепенно втянулся, все больше отдавая предпочтение асму, особенно нравилась возможность создавать любые структуры данных, плевать на разграничения кода и данных, не иметь никакой типизации данных, в общем полная свобода. а где свобода — там и выбор.
Кё>Да, я в курсе, что процентов 90% программистов считает, что сначала надо объяснить все кирпичики, и только затем показывать, как из них складывать программу. Это не работает и это наихудший способ обучения. Если б ты попробовал его хоть раз, знал бы.
Именно так я и начинал изучать Turbo Pascal. Но написав несколько утилит я понял, что у меня слишком много времени уходит на отладку, путаюсь в своем же коде. Возможно это были последствия бейсика, не знаю, но помню хорошо. Тогда и купил книженку, начал изучать по всем правилам, то есть от основ и дойдя до построения программ. После чего понял, что весь предыдущий код — лажа, написанная как бох на душу положит, без какой либо четкой логики, в обход правил "хорошего тона для Turbo Pascal". Си я уже сразу начал с основ, и первый код написал только после их досконального изучения, когда уже не нужно заглядывать в книжки и примеры. Получилось неплохо, даже очень. Отсюда и делаю вывод — надо начинать именно "с кирпичиков". Хотя опять же, не утверждаю, что именно я прав, может кому то такой подход и не подойдет.
Кё>А еще процентов 90% программистов имеет небольшие трудности с тем, чотбы делать понятные простым людям интерфейсы, понятные простым людям сайты, понятные простым людям объяснения. Странное совпадение.
Ага. И образцом такого приятного интерфейса является данный форум Лично мне не нравится сюда ходить по одной причине — неудобный и крайне тормозной интерфейс. И здесь я с тобой согласен — 90% рунета имеет антипользовательский интерфейс, не учитывающий, что не у всех быстрый и дешевый инет. И не только я так думаю
Кё>Не только не придется, но и нельзя с этого начинать. Студент мгновенно теряет интерес, если начать грузить его ненужным.
Значит ему не место в программировании. Ведь прежде чем сесть за руль, нужно выучить все правила дорожного движения
Кё>Это не тоже самое, что программа на Си main(){printf("Hello, World!\n");}. Отношение нужных понятий к ненужным просто удручающее.
Это то же самое, тем более там использован именно Сишный printf. Просто я мог бы обойтись и без макроса, сделав код еще проще и без "ненужных" понятий Это еще раз показывает, насколько асм разнообразен, даже на простейших задачах
Здравствуйте, AndNot, Вы писали:
AN>Значит ему не место в программировании. Ведь прежде чем сесть за руль, нужно выучить все правила дорожного движения
ну это не так. если по закону, то надо сдать теорию ПДД в школе (или в ГАИ если экстерном).
для этого достаточно знать 18 ответов на вопросы! (раньше было 9!). Т.е. надо знать ответы, а не ПДД!
Более того, через год реального вождения 90% ПДД из головы выветривается насовсем!
Кё>>Это не тоже самое, что программа на Си main(){printf("Hello, World!\n");}. Отношение нужных понятий к ненужным просто удручающее.
AN>Это то же самое, тем более там использован именно Сишный printf. Просто я мог бы обойтись и без макроса, сделав код еще проще и без "ненужных" понятий Это еще раз показывает, насколько асм разнообразен, даже на простейших задачах