ASM: Есть ли смысл изучать Ассемблер ?
От: Mr-Twister http://cosmozo.narod.ru/
Дата: 12.06.02 16:07
Оценка:
Изучая Си, кто то написал мне в одном из ответов: Учи ассемблер поможет.
Интересно поинтерисоваться, стоит ли учить этот язык (с виду не простой), или достаточно ограничиться Си и в будущем Си++ ?

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

Верно ?
дас ист нихьт фантастиш, дас ист руссиш Ванюшка
Re: Есть ли смысл изучать Ассемблер ?
От: Хитрик Денис Россия RSDN
Дата: 12.06.02 17:21
Оценка: 11 (1)
Здравствуйте Mr-Twister, Вы писали:

MT>Изучая Си, кто то написал мне в одном из ответов: Учи ассемблер поможет.

MT>Интересно поинтерисоваться, стоит ли учить этот язык (с виду не простой), или достаточно ограничиться Си и в будущем Си++ ?

Встречный вопрос: а можно ли научиться программировать на компьютере, не зная как он работает?
Ответ: Смотря как программировать

Моё мнение таково: знание ассемблера позволит тебе больше узнать о машине, позволит понять, какие процессы ею управляют, что такое на самом деле твоя программа и что на самом деле она делает. Мне кажется, что именно это знание, понимание происходящего внутри компьютера и есть умение программировать.

Вернусь к своим вопросу и ответу. Если человек сегодня рисует в Access формочки и конструирует в нём же запросы, то это требует от него определённых знаний и умений. И эти знания будут относиться в основном к умению работать с самой программой и к способности человека ориентироваться в моделируемой предметной области.
Получается, что в таком случае человек взаимодействует с машиной уже не напрямую (ударение на слове "уже"). Только посредством довольно значительной прослойки.

С другой стороны, если посмотреть на программиста, который хочет разобраться в языке С с нуля ( ), то можно сказать следующее:
1) Та самая прослойка сведена к минимуму. Чем: самим выбранным языком. На самом деле, С -- это достаточно тонкая оболочка для языка асемблера, который, в свою очередь, скрывает за собой машинные коды. И не зря разработчики языка оставили такие вещи, как работа с памятью (всякие там указатели)
2) что-то хотел написать -- забыл
В этом случае уже можно сказать о том, что классный специалист по С обязан разбираться в том, как работает его машина. А для этого он изучает специальный язык -- язык ассемблера -- который и помогает в достижении этой цели, потому что не содержит ничего лишнего. Компьютер ведь не знает о таких вещах как процедура, цикл (не пинайте, если не прав. моё знание ограничивается ассемблером процессора Z80 )... А ещё нужно разобраться как пользоваться такой драгоценной вещью (ресурсом, если угодно) как память... Узнать, для чего нужны прерывания (здесь мы уже спускаемся к аппаратному обеспечению), а потом попробовать разобраться, как же так получается, что в Windows много программ работают одновременно...

О сколько нам открытий чудных
Готовит просвященья дух...



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

MT>Мои мысли. Техника движется. Вроде как не стоит на месте. Значит и процессоры, тоже меняются, и возможно в скором необозримом будущем, схема работы процессора может поменять свою структуру . Тобишь будет не ассемблер , а что то другое , работающее по другим принципам и механизмам, отличающихся от процессоров Интел.

MT>А языки Си и С++ просто переедут на другую систему и не поменяют свой синтаксис.
MT>Верно ?

А почему нас в школе заставляют (ну, кого как ) учить историю? Да просто чтобы знать куда идти в будущем, нужно знать, что уже было в прошлом! Плох тот народ, который забывает свою историю.
Так и в мире программирования: всё новое -- это хорошо забытое старое.

А насчёт того, что переедут на другую систему... Знаешь, наверное они всё-таки хороши именно для той системы, на которой сейчас используются. а для совершенно новой системы будет совершенно новый язык, который, тем не менее будет учитывать и сегодняшний программистский опыт.
Правила нашего с вами форума.
Как правильно задавать вопросы. © 2001 by Eric S. Raymond; перевод: © 2002 Валерий Кравчук.
Re[2]: Есть ли смысл изучать Ассемблер ?
От: SergH Россия  
Дата: 12.06.02 19:24
Оценка: 12 (1)
Здравствуйте Хитрик Денис, Вы писали:

ХД>Встречный вопрос: а можно ли научиться программировать на компьютере, не зная как он работает?

ХД>Ответ: Смотря как программировать

ХД>Моё мнение таково: знание ассемблера позволит тебе больше узнать о машине, позволит понять, какие процессы ею управляют, что такое на самом деле твоя программа и что на самом деле она делает. Мне кажется, что именно это знание, понимание происходящего внутри компьютера и есть умение программировать.


Спорить с тем, что знать ассемблер полезно я не могу. Я его сам плохо знаю (интерестное у нас обсуждение.. я — плохо, ты — только Z80, Mr-Twister — никак), но постоянно собираюсь подучить. Однако, постоянно нет времени. Но для того, что бы понимать, как работает компьютер, знание ассемблера несколько избыточно. Поэтому я особо не напрягаюсь на эту тему.

ХД>В этом случае уже можно сказать о том, что классный специалист по С обязан разбираться в том, как работает его машина. А для этого он изучает специальный язык -- язык ассемблера -- который и помогает в достижении этой цели, потому что не содержит ничего лишнего. Компьютер ведь не знает о таких вещах как процедура, цикл (не пинайте, если не прав. моё знание ограничивается ассемблером процессора Z80 )...


Знает. Немного не так, как в С, конечно, но знает.

ХД>А ещё нужно разобраться как пользоваться такой драгоценной вещью (ресурсом, если угодно) как память... Узнать, для чего нужны прерывания (здесь мы уже спускаемся к аппаратному обеспечению), а потом попробовать разобраться, как же так получается, что в Windows много программ работают одновременно...


Это не сильно связано с ассемблером.

ХД>Кстати, мысль вслух, "учи ассемблер" не означает, что тебе нужно именно выучить язык ассемблера (ассемблер -- это программа к тому же). Это означает, что советуют разобраться с принципами функционирования работы компьютера. Т.е. это выражение не нужно понимать буквально


Воот. Полностью согласен.

MT>>Мои мысли. Техника движется. Вроде как не стоит на месте. Значит и процессоры, тоже меняются, и возможно в скором необозримом будущем, схема работы процессора может поменять свою структуру . Тобишь будет не ассемблер , а что то другое , работающее по другим принципам и механизмам, отличающихся от процессоров Интел.

MT>>А языки Си и С++ просто переедут на другую систему и не поменяют свой синтаксис.
MT>>Верно ?

ХД>А почему нас в школе заставляют (ну, кого как ) учить историю? Да просто чтобы знать куда идти в будущем, нужно знать, что уже было в прошлом! Плох тот народ, который забывает свою историю.

ХД>Так и в мире программирования: всё новое -- это хорошо забытое старое.

Кроме того, почти всегда имеется обратная совместимость..

ХД>А насчёт того, что переедут на другую систему... Знаешь, наверное они всё-таки хороши именно для той системы, на которой сейчас используются. а для совершенно новой системы будет совершенно новый язык, который, тем не менее будет учитывать и сегодняшний программистский опыт.


В абсолютно новой системе изменится понятие ПО. Наверное...
Делай что должно, и будь что будет
Re: Есть ли смысл изучать Ассемблер ?
От: Bell Россия  
Дата: 12.06.02 19:30
Оценка: 12 (1)
Здравствуйте Mr-Twister, Вы писали:

Согласен с Хитриком Денисом по большинству пунктов. :up: Главное — знать принципы, а уже на основе этих знаний принимать те или иные решения в процессе написания программы (то бишь собственно в процессе программирования). А то встречались мне товарищи, которые считали, что такие вот записи эквивалентны:
int nVar;
//Использование...

и
int* pVar = new int;
//Использование...
delete pVar;

А ведь если бы знали о том, как выделяется память в том и в другом случае, не думали бы так...
Это конкчно случай клинический, но для примера пойдет ;)
Или вот есть у сеня знакомый — в железках шарит по полной программе (контроллер там какой-нибудь запрограммировать или еще что подобное), а что такое виртуальные функции — не знает, и узнавать не хочет. Потому что для того класса задач, с которыми он работает, С++ ему просто не нужен.

Короче главное — это некий баланс знаний вокруг предметной области, на которую ты ориентируешься. А то ведь и на асме можно супер оптимизированную функцию пузырьковой сортировки написать, и пользоваться ею всю жизнь...
Любите книгу — источник знаний (с) М.Горький
Re[2]: Есть ли смысл изучать Ассемблер ?
От: Eugene  
Дата: 12.06.02 20:11
Оценка: 14 (2) -1
Трудно согласиться с этой одой ассемблеру. Я в свое время много писал на ассемблерах — были и такие времена. Конечно, иногда этот опыт незаменим. Но я бы не стал советовать всем, пишущим на С++ "изучать ассемблер" (разумеется, кроме тех, кто имеет дело с железом, драйверами и т.д.). Более того, я знаю людей, кому этот опыт просто мешал начать мыслить другими категориями. Может я слишком буквально понимаю слово "изучать"? Одно дело — бегло ознакомиться с архитектурой процессора и системой команд, другое дело "изучать".

А теперь конкретные возражения.

ХД>Моё мнение таково: знание ассемблера позволит тебе больше узнать о машине, позволит понять, какие процессы ею управляют, что такое на самом деле твоя программа и что на самом деле она делает. Мне кажется, что именно это знание, понимание происходящего внутри компьютера и есть умение программировать.

Очень спорное определение умения программировать.

ХД>На самом деле, С -- это достаточно тонкая оболочка для языка асемблера, который, в свою очередь, скрывает за собой машинные коды.

Думаю, Керниган и Риччи обиделись бы, не говоря уже о Страуструпе — пыхтели, пыхтели и ...

ХД>В этом случае уже можно сказать о том, что классный специалист по С обязан разбираться в том, как работает его машина. А для этого он изучает специальный язык -- язык ассемблера -- который и помогает в достижении этой цели, потому что не содержит ничего лишнего.

Хорошее знание ассемблера — это как раз очень много лишнего, к примеру, с точки зрения ООП. Ассемблер, к примеру, сильно привязан к конкретной платформе и ее нюансам, а это очень специфические знания.

ХД>А ещё нужно разобраться как пользоваться такой драгоценной вещью (ресурсом, если угодно) как память... Узнать, для чего нужны прерывания (здесь мы уже спускаемся к аппаратному обеспечению), а потом попробовать разобраться, как же так получается, что в Windows много программ работают одновременно...

Ассемблер тут не очень-то поможет.

ХД>..."учи ассемблер" не означает, что тебе нужно именно выучить язык ассемблера (ассемблер -- это программа к тому же). Это означает, что советуют разобраться с принципами функционирования работы компьютера.

Очень произвольное обращение с терминологией

ХД>А насчёт того, что переедут на другую систему... Знаешь, наверное они всё-таки хороши именно для той системы, на которой сейчас используются. а для совершенно новой системы будет совершенно новый язык, который, тем не менее будет учитывать и сегодняшний программистский опыт.

Так они уже сейчас используются на куче платформ, так что теперь все ассемблеры человеку учить?


Вывод: IMHO если собираешься стать системным программистом, или просто иметь дело с железом — конечно да. Если профиль — прикладное программирование, то неплохо почитать что-нибудь обзорное. Иногда это полезно при тонкой отладке, но позволю себе тоже "сильное" утверждение: если при отладке прикладной программы, написанной на С/С++ приходится лезть в ассемблерный код, — это плохой признак. IMHO — одно из качеств того самого умения программировать, о котором говорилось выше, и есть умение быстро находить ошибки том уровне, где они сделаны. Можно и с осциллографом на шину полезть, чтобы в конце концов убедиться, что "ларчик просто открывался" — надо было MSDN (или RSDN повнимательнее почитать. Хотя... всякое бывает, конечно
Don't trouble trouble until trouble troubles you
Re[3]: Есть ли смысл изучать Ассемблер ?
От: VladD2 Российская Империя www.nemerle.org
Дата: 12.06.02 20:23
Оценка: 25 (2)
Здравствуйте SergH, Вы писали:

SH>интерестное у нас обсуждение.. я — плохо, ты — только Z80, Mr-Twister — никак


Дык, если у вас не стоит задача стать крякером, то знание асм-а не обязательно должно быть на 5. Достаточно, чтобы ты мог понять, что создает компилятор. Но хоть на начальном уровне его должен знать каждый программист. И не только для общего развития. От его знатия зависит оптимальность создаваемого кода. Да и многие вопросы снимаются автоматом.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[2]: Есть ли смысл изучать Ассемблер ?
От: George_Seryakov Россия  
Дата: 12.06.02 20:25
Оценка:
Здравствуйте Хитрик Денис, Вы писали:

ХД>2) что-то хотел написать -- забыл


Что знать язык (С/С++, например) — это понимать, как он компилируется в ассемблер/машинный код? Видеть машинный код под исходным текстом.

Мне, например, сравнительно часто приходится залезать в disassembly, чтобы посмотреть — соответствует исходник бинарику или нет.
GS
Re[3]: Есть ли смысл изучать Ассемблер ?
От: VladD2 Российская Империя www.nemerle.org
Дата: 12.06.02 20:35
Оценка: 12 (1)
Здравствуйте Eugene, Вы писали:

E>Более того, я знаю людей, кому этот опыт просто мешал начать мыслить другими категориями.


Скорее всего эти люди или начинали с асм-а, или слишком много на нем проработали.

E>Может я слишком буквально понимаю слово "изучать"? Одно дело — бегло ознакомиться с архитектурой процессора и системой команд, другое дело "изучать".


Здесь скорее речь идет об ознакомлении.

ХД>>На самом деле, С -- это достаточно тонкая оболочка для языка асемблера, который, в свою очередь, скрывает за собой машинные коды.

E>Думаю, Керниган и Риччи обиделись бы, не говоря уже о Страуструпе — пыхтели, пыхтели и ...

Не... В его словах очень большая доля правды. Ричи создавал С именно как замену ассемблеру для написания системного кода (тодгда ОС). И он воспринимал с как оптимальный кодогенератор (уж он то точно какой код знал превратится в какие инструкции). Так что такая метафора имеет право на жизнь.

E>...если при отладке прикладной программы, написанной на С/С++ приходится лезть в ассемблерный код, — это плохой признак. IMHO — одно из качеств того самого умения программировать, о котором говорилось выше, и есть умение быстро находить ошибки том уровне, где они сделаны.


А кто тебе сказал, что все ошибки делает сам программист? Иногда встречаются наложения абстоятельств, иногда чужие проходы по памяти, а иногда глюки коппилятора или ОС. Вот тогда знание асм-а (пусть даже и поверхностное) очень пригодится. Но перегибать и лезть в дизасемблер при первом подозрении конечно не стоит.

E>Можно и с осциллографом на шину полезть, чтобы в конце концов убедиться, что "ларчик просто открывался" — надо было MSDN (или RSDN повнимательнее почитать.


Главное научится понимать когда нужно лезть в MSDN/RSDN, а когда в дизасемблер.

E>Хотя... всякое бывает, конечно


Во-во!
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[3]: Есть ли смысл изучать Ассемблер ?
От: Хитрик Денис Россия RSDN
Дата: 12.06.02 20:53
Оценка: 12 (1)
Хочу сразу сказать, что высказывал своё личное мнение и в предыдущем сообщении и собираюсь его пояснить в этом :)

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

E>... Более того, я знаю людей, кому этот опыт просто мешал начать мыслить другими категориями.


Это уже не наша забота. Новое всегда даётся с трудом. Другое дело, что изначально мы знаем (изучаем) по крайней мере процедурное программирование (см. постинги Mr.Twister'a), и хотим разобраться, что же лежит у него в основе. Чуть ли не в каждом вопросе, ему предлагали "учить ассемблер", поскольку были видны трудности с приятием информации о ходе работы программы вообще, о том, как представляется информация в машине, что такое переменная, указатели и проч.
То есть исходная посылка была такой: что-то непонятно из высокоуровнего программирования на С (какие-то неочевидные места, становящиеся простыми при наборе критического количества информации об устройстве машины), человек задаёт вопрос, ему отвечают, но при этом советуют "выучить ассемблер". Вот теперь он интересуется, а так ли это надо, ведь есть такие замечательные языки как С, С++...

E>Может я слишком буквально понимаю слово "изучать"? Одно дело — бегло ознакомиться с архитектурой процессора и системой команд, другое дело "изучать".


Да, здесь его стоит понимать всё-же так, как я написал ниже:

ХД>>..."учи ассемблер" не означает, что тебе нужно именно выучить язык ассемблера (ассемблер -- это программа к тому же). Это означает, что советуют разобраться с принципами функционирования работы компьютера.

E>Очень произвольное обращение с терминологией:)

... поэтому здесь следует искать не игру слов, а толкование устоявшегося выражения. :)

ХД>>...понимание происходящего внутри компьютера и есть умение программировать.

E>Очень спорное определение умения программировать.

Ваша правда. Определение спорное, но основа заложена верная. Чтобы управлять системой, необходимо некоторое знание о том, как она устроена. На этом основывается наша наука. Если мы знаем, какие процессы происходят в чайнике на печке, значит мы сможем вскипятить воду. Если мы знаем чего ожидать от компьютера, мы сможем так организовать своё управление (программу), что он будет делать именно то, что нам нужно (программа будет работать).

ХД>>На самом деле, С -- это достаточно тонкая оболочка для языка асемблера, который, в свою очередь, скрывает за собой машинные коды.

E>Думаю, Керниган и Риччи обиделись бы, не говоря уже о Страуструпе:) — пыхтели, пыхтели и ...:)

Думаю, что я не очень далёк от истины. (VladD2 уже высказался :user: )

ХД>>А для этого он изучает специальный язык -- язык ассемблера -- который и помогает в достижении этой цели, потому что не содержит ничего лишнего

E>Хорошее знание ассемблера — это как раз очень много лишнего, к примеру, с точки зрения ООП. Ассемблер, к примеру, сильно привязан к конкретной платформе и ее нюансам, а это очень специфические знания.

Нет, вы неверно трактуете мои слова.
"Ничего лишнего": здесь -- отсутствие для компьютера таких понятий как процедур, объектов, циклов. А наличие лишь ячейки с адресом, линейного выполнения, ветвления и интструкции перехода. (Может я слишком узко представляю себе современный ассемблер, но в отношении Z80 всё именно так и обстоит).

ХД>>А ещё нужно разобраться как пользоваться такой драгоценной вещью (ресурсом, если угодно) как память... Узнать, для чего нужны прерывания (здесь мы уже спускаемся к аппаратному обеспечению), а потом попробовать разобраться, как же так получается, что в Windows много программ работают одновременно...

E>Ассемблер тут не очень-то поможет.

Имеется в виду, что эти вещи могут подразумеваться под словами "учить ассемблер".

ХД>>А насчёт того, что переедут на другую систему... Знаешь, наверное они всё-таки хороши именно для той системы, на которой сейчас используются. а для совершенно новой системы будет совершенно новый язык, который, тем не менее будет учитывать и сегодняшний программистский опыт.

E>Так они уже сейчас используются на куче платформ, так что теперь все ассемблеры человеку учить?

Во-первых, уточню на всякий случай, что речь шла о языках С и С++.
Во-вторых, я говорил как раз об ознакомлениями с принципами работы компьютеров. Если есть компьютеры, которые разительно отличаются от того, что мы имеем сегодня в виде PC и для них ещё и реализован компилятор С, то пожалуйста расскажите немного об этом. Или ссылкой поделитесь :)
Я не знаю таких, честно говоря :shuffle:

E>Вывод: IMHO если собираешься стать системным программистом, или просто иметь дело с железом — конечно да. Если профиль — прикладное программирование, то неплохо почитать что-нибудь обзорное.


Полностью с вами согласен. :)
И речь идёт как раз о том, стоит ли заниматься тем, что выделено жирным. Нам с вами ответ очевиден и мы как раз хотим донести основания этого ответа до спрашивающего.
Правила нашего с вами форума.
Как правильно задавать вопросы. © 2001 by Eric S. Raymond; перевод: © 2002 Валерий Кравчук.
Re[3]: Есть ли смысл изучать Ассемблер ?
От: Владимир Гренадеров Россия  
Дата: 12.06.02 21:23
Оценка: 12 (1)
Здравствуйте Eugene, Вы писали:

<skip>

E>Вывод: IMHO если собираешься стать системным программистом, или просто иметь дело с железом — конечно да. Если профиль — прикладное программирование, то неплохо почитать что-нибудь обзорное.


Обязан ли водитель автомобиля знать устройство двигателя, представлять процессы, проходящие в нем?
Нет, не обязан — вот руль, педали, коробка передач (может даже автомат) — вперёд...
Только назвать такого водителя словом "профессионал" язык ни у кого не повернется !


E>Иногда это полезно при тонкой отладке, но позволю себе тоже "сильное" утверждение: если при отладке прикладной программы, написанной на С/С++ приходится лезть в ассемблерный код, — это плохой признак. IMHO — одно из качеств того самого умения программировать, о котором говорилось выше, и есть умение быстро находить ошибки том уровне, где они сделаны. Можно и с осциллографом на шину полезть, чтобы в конце концов убедиться, что "ларчик просто открывался" — надо было MSDN (или RSDN повнимательнее почитать. Хотя... всякое бывает, конечно


Поиск ошибки в своем коде имеет смысл только в том случае, если она там есть
А если это чужая DLL, или Билл постарался, что тогда?
OK
Re: Есть ли смысл изучать Ассемблер ?
От: WolfHound  
Дата: 12.06.02 21:47
Оценка: 12 (1)
to all:
Ну вот опять флейм пошол.
asm предложил учить я тк Mr-Twister задает вопросы которые снимутся поле прочтения первых 5-10 страниц книжки по asm'у(не считая предисловия).
Человеку который пишит офисные приложения asm не нужен но не знание его в принципе ведет к клиническим случаям(см ответ Bell'а)
А еще для тренировки можно порешать олимпиадные задачи, учат бытро находить хорошие решения.
http://acm.timus.ru/
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re: Есть ли смысл изучать Ассемблер ?
От: Dr_Sh0ck Беларусь  
Дата: 13.06.02 03:54
Оценка: 41 (4)
Здравствуйте Mr-Twister, Вы писали:

[skipped]

MT>Верно ?


Раз пошел такой флейм то скажу и я свое ИМХО . Ассемблер был моим третьим языком (после Васика и Паскаля). Так вот, не программируй я на ассемблере больше года до момента изучения С, он бы (С) мне дался гораздо сложнее (мне так кажется).

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

При изучении ассемблера также придется освоить базовые принципы работы компьютера. Думай сам надо это тебе или нет. Кстати, Владимир Гренадеров очень хорошую аналогию привел про водителя.
Do not fake yourself ;)
ICQ#: 198114726
Re[4]: Есть ли смысл изучать Ассемблер ?
От: Eugene  
Дата: 13.06.02 04:28
Оценка:
Здравствуйте Хитрик Денис, Вы писали:

ХД>И речь идёт как раз о том, стоит ли заниматься тем, что выделено жирным. Нам с вами ответ очевиден и мы как раз хотим донести основания этого ответа до спрашивающего.


Денис, sorry, но со стороны этот совет выглядел примерно так: «я, вообще-то, ассемблера не знаю..., но ты учи обязательно (а то чайник не вскипит! ). Здесь очевидное противоречие — если это только тонкая обертка, и это столь необходимо — кто мешает? И тогда совет будет более весомым (и менее развернутым).
Don't trouble trouble until trouble troubles you
Re[4]: Есть ли смысл изучать Ассемблер ?
От: Andir Россия
Дата: 13.06.02 05:54
Оценка: 40 (3)
Здравствуйте Владимир Гренадеров, Вы писали:

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


А можно я скажусь ? :-)

E>>Вывод: IMHO если собираешься стать системным программистом, или просто иметь дело с железом — конечно да. Если профиль — прикладное программирование, то неплохо почитать что-нибудь обзорное.

На самом деле даже здесь Ассемблер не причём, просто ничего удобнее и ближе к железу нет ... А знать что и как исполняется можно и без знания ассемблера ... Каждый может представлять это по-своеиу и проводить свои аналогии ...
У нас был препод, который это всё (функционирование, работа с железом) без ассемблера складно объяснял, а потом, когда я узнавал как это реализовывается на ассемблере, всё казалось таким очевидным ..

ВГ>Обязан ли водитель автомобиля знать устройство двигателя, представлять процессы, проходящие в нем?

ВГ>Нет, не обязан — вот руль, педали, коробка передач (может даже автомат) — вперёд...
ВГ>Только назвать такого водителя словом "профессионал" язык ни у кого не повернется !
Спорно, очень спорно ... Это что же получается, что гонщики профессионалы обязаны знать термодинамические законы и как они работают :))) вплоть до квантовой теории ... А всё таки я позволю себе назвать их профессионалами :shuffle:
Узкая специализация и есть как раз термин для выражения такого типа предпочтений, человек знает профессионально свою область, а в смежную и не пытается влезть. IMHO в скором будущем так и будет построена научная система, зачем человеку который изучает биологию знать квантовые процессы в атомах клеток :-)). Специализированные знания других областей ему не нужны.

E>>Иногда это полезно при тонкой отладке, но позволю себе тоже "сильное" утверждение: если при отладке прикладной программы, написанной на С/С++ приходится лезть в ассемблерный код, — это плохой признак. IMHO — одно из качеств того самого умения программировать, о котором говорилось выше, и есть умение быстро находить ошибки том уровне, где они сделаны. Можно и с осциллографом на шину полезть, чтобы в конце концов убедиться, что "ларчик просто открывался" — надо было MSDN (или RSDN:)) повнимательнее почитать. Хотя... всякое бывает, конечно:)

Да, да и ещё раз да ! Именно, из-за своей ошибки не стоит проклинать изобретателя отвёртки и шурупа ... Сейчас системы не совершенны во многом, поэтому знание ассемблера зачастую просто необходимо (иногда даже до уровня кракерства :)) ) ... , но это надо искоренять, иначе знание будет только для избранных ...
Хочется привести пример из физики ... (сам из оных) У меня на факультете только человек пять из всех(около 200) смогли освоить базовый курс (физфак), а остальные либо не хотели, либо просто не успевали ... (с гордостью сообщу что я из тех что освоили не напрягаясь) ... Так теперь на 4 курсе — народу просто не хватает знаний для изучения специализированных областей, и они заново пытаются достучаться до истины (IMHO процентов 50 достучится) ... А я целыми днями балду пинаю и не знаю куда себя деть, потому что ничего нового не изучаем, у мя даже разочарование от универа появилось ... И самое обидное для преподов что я не собираюсь быть физиком, ИБО программирование более, более и более для меня привлекательней ... :super:

Итоги(IMHO опять же):
1.Сейчас изучать ассемблер нужно! Но лучше это делать абстрактно от железа, от самого языка ассемблера, а потом уже и к ассемблеру переходить. А ещё лучше если тебе кто-нить из профи ;) сможет это всё рассказать и объяснить (есть люди которым просто от бога дано быть преподавателями!), потом проблем с изучением железа и его программирования будет меньше, если вдруг вздумаешь.
2. Но лучше всё таки вначале заниматься абстрактным программированием, даже без С/C++, алгоритмы, структуры и конечно математику и так далее ибо они основа всего программирования, а не синтаксис различных языков !!!
Даже ещё раз повторюсь, Программирование это прежде всего способ перевода математических абстракций на язык структур данных и алгоритмов! А только потом на какой-то язык программирования (будь хоть он трижды ассемблером).


ВГ>Поиск ошибки в своем коде имеет смысл только в том случае, если она там есть :)

ВГ>А если это чужая DLL, или Билл постарался, что тогда?
За искоренение своих и чужих ошибок !!! :crash:

С Уважением Andir!
Re[5]: Да, все таки машину внутри знать надо.
От: Mr-Twister http://cosmozo.narod.ru/
Дата: 13.06.02 05:59
Оценка:
В общем все сводится к тому , что знания ассемблера даст в будущем понимание происходящего внутри компьютера процесса.
А главное упростит мое понимание, что где распределяется и ,что там за Си делается.
Действительно, когда я задавал вопросы, к примеру о volatile и register переменных, то когда речь заходит о процессорах, и распределении памяти, то мне не все ясно. Видать при вопросе о стеке Dr_Sh0ck и SergH заметили как меня в штопор занесло. Но в конце вынесло.
В принципе, то на , что я нацелен, как сказал Евгений , так же заставляет меня учить ассемблер.
Ну в принципе и крякнуть пару ваших программ тоже не откажусь.( Шутка)

Но, опять возникает вопрос с книгой, которая была бы легка для восприятия, с примерами, картинками. В общем для начинающего, какую посоветуете книгу по ассемблеру ?
дас ист нихьт фантастиш, дас ист руссиш Ванюшка
Re[6]: Да, все таки машину внутри знать надо.
От: SergH Россия  
Дата: 13.06.02 06:37
Оценка: 10 (1)
Здравствуйте Mr-Twister, Вы писали:


MT>В общем все сводится к тому , что знания ассемблера даст в будущем понимание происходящего внутри компьютера процесса.

MT>А главное упростит мое понимание, что где распределяется и ,что там за Си делается.
MT>Действительно, когда я задавал вопросы, к примеру о volatile и register переменных, то когда речь заходит о процессорах, и распределении памяти, то мне не все ясно. Видать при вопросе о стеке Dr_Sh0ck и SergH заметили как меня в штопор занесло. Но в конце вынесло.
MT>В принципе, то на , что я нацелен, как сказал Евгений , так же заставляет меня учить ассемблер.
MT>Ну в принципе и крякнуть пару ваших программ тоже не откажусь.( Шутка)

С vcolatile и register ассемблер тебе поможет после первых пяти страниц. А вот с остальным сложнее. В нормальных книжках описывается ассемблер для DOS'а, который имеет мало общего с Windows, поэтому мало объяснит. Кроме того, некоторые конструкции, поддерживаемые языками высокого уровня в асме отсутствуют, поэтому тоже не сильно проясняться. malloc\free, например. А Windows слишком толстая оболочка над железом, её нужно изучать отдельно. Почитай Рихтера "Windows для профессионалов". Только это будет сложно. И по-моему, лучше третье издание (я его читал в библиотеке, так как поздно спохватился), оно менее навороченное и легче для понимания.

MT>Но, опять возникает вопрос с книгой, которая была бы легка для восприятия, с примерами, картинками. В общем для начинающего, какую посоветуете книгу по ассемблеру?


Хорошие люди рекомендовали мне Зубкова. У меня до него руки так и не дошли, ничего сказать не могу.

А есть ещё одна классная книга, но не совсем по ассемблеру. Чарльз Петзольд "Код". Про компьютер на уровне транзисторов, причём написано для американцев, не знающих что такое электричество, так что никаких начальных знаний не требует. Прочитал с большим удовольствием, хотя и проходил большую часть того что там написано.
Делай что должно, и будь что будет
Re: Есть ли смысл изучать Ассемблер ?
От: Vi2 Удмуртия http://www.adem.ru
Дата: 13.06.02 06:38
Оценка: 12 (1) -1
Здравствуйте Mr-Twister, Вы писали:

MT>Изучая Си, кто то написал мне в одном из ответов: Учи ассемблер поможет.


Ещё бы Тех.Документацию на Интел процессор посоветовали почитать!

PS
ИМХО, хорошая тема для "Философии программирования", не правда ли?
Vita
Выше головы не прыгнешь, ниже земли не упадешь, дальше границы не убежишь! © КВН НГУ
Re[6]: Да, все таки машину внутри знать надо.
От: Mishka<T> Норвегия  
Дата: 13.06.02 07:36
Оценка: 10 (2)
Здравствуйте Mr-Twister,

Я б советовал ерундой не заниматься, а тихо мирно переходить на IL из .NET. Мы всё равно все там будем, а это и есть тот самый ассемблер, но новый. Ассемблер — простой язык, а вот то, как работает компьютер, к ассемблеру мало относится, поэтому тот же ассемблер на разных платформах сильно отличается. Если Microsoft всё таки правы со своей идеей .NET-a, то IL — это хороший выбор, поскольку он будет переносим на разные платформы и плюс к тому же он стандартизован.
Всё, что я написал выше, не имеет смысла, если ты собираешься работать с железом напрямую, но вряд ли тебе этого хочется.
Re: Есть ли смысл изучать Ассемблер ?
От: Aquila http://www.wasm.ru
Дата: 13.06.02 07:45
Оценка: 10 (1)
Здравствуйте Mr-Twister, Вы писали:

MT>Изучая Си, кто то написал мне в одном из ответов: Учи ассемблер поможет.

MT>Интересно поинтерисоваться, стоит ли учить этот язык (с виду не простой), или достаточно ограничиться Си и в будущем Си++ ?

Отвечу одной ссылкой Windows Assembly Site.
Re[5]: Есть ли смысл изучать Ассемблер ?
От: Владимир Гренадеров Россия  
Дата: 13.06.02 07:56
Оценка: 12 (1)
Здравствуйте Andir, Вы писали:

[skip]

ВГ>>Обязан ли водитель автомобиля знать устройство двигателя, представлять процессы, проходящие в нем?

ВГ>>Нет, не обязан — вот руль, педали, коробка передач (может даже автомат) — вперёд...
ВГ>>Только назвать такого водителя словом "профессионал" язык ни у кого не повернется !
A>Спорно, очень спорно ... Это что же получается, что гонщики профессионалы обязаны знать термодинамические законы и как они работают :))) вплоть до квантовой теории ... А всё таки я позволю себе назвать их профессионалами :shuffle:
Квантовая теория — это для разработчиков камней :) А если серьезно, то как тот же Шумахер может настроит свой болид, НЕ ЗНАЯ, как работают тормоза, подвеска, и т.д. ?

A>Узкая специализация и есть как раз термин для выражения такого типа предпочтений, человек знает профессионально свою область, а в смежную и не пытается влезть. IMHO в скором будущем так и будет построена научная система, зачем человеку который изучает биологию знать квантовые процессы в атомах клеток :-)). Специализированные знания других областей ему не нужны.

А разве ассемблер для программиста — это другая область? И зачем, спрашивается инженеру изучать в универе историю или философию ???


A>Итоги(IMHO опять же):

A>1.Сейчас изучать ассемблер нужно! Но лучше это делать абстрактно от железа, от самого языка ассемблера, а потом уже и к ассемблеру переходить. А ещё лучше если тебе кто-нить из профи ;) сможет это всё рассказать и объяснить (есть люди которым просто от бога дано быть преподавателями!), потом проблем с изучением железа и его программирования будет меньше, если вдруг вздумаешь.
Изучать асм абстракто от железа — это то же самое, что учить С++, абстрагируясь от компютера :)
Ещё лучше бы совсем ничего не учить, пусть профи все объяснит и покажет...

A>2. Но лучше всё таки вначале заниматься абстрактным программированием, даже без С/C++, алгоритмы, структуры и конечно математику и так далее ибо они основа всего программирования, а не синтаксис различных языков !!!

A>Даже ещё раз повторюсь, Программирование это прежде всего способ перевода математических абстракций на язык структур данных и алгоритмов! А только потом на какой-то язык программирования (будь хоть он трижды ассемблером).
С этим ни кто не спорит. Но! После изучения абстрактных моделей и алгоритмов (вспомним Кнута), необходимо будет
сесть за КОНКРЕТНЫЙ компьютер, и писат программы под него. А если человек плохо представляет, что такое стек и как это в него параметры попадают, чем stdcall отличестся от cdecl — сможет ли он грамотно спроектировать ту же DLL ? А многпоточность? Как понять опасность одновременного досупа к глобальной переменной? Есть еще большая куча примеров на подобную тему.

ВГ>>Поиск ошибки в своем коде имеет смысл только в том случае, если она там есть :)

ВГ>>А если это чужая DLL, или Билл постарался, что тогда?
A>За искоренение своих и чужих ошибок !!! :crash:
Правилно — посмотрим в отладчике, как мелкомягкие напортачили, и сделаем лучше :super:
OK
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.