Здравствуйте Aquila, Вы писали:
A>Здравствуйте Mr-Twister, Вы писали:
MT>>Изучая Си, кто то написал мне в одном из ответов: Учи ассемблер поможет. MT>>Интересно поинтерисоваться, стоит ли учить этот язык (с виду не простой), или достаточно ограничиться Си и в будущем Си++ ?
A>Отвечу одной ссылкой — Windows Assembly Site.
Надо было подкинуть ссылку на ООП в асме — вот смеху было-бы
Кстати, сам Страуструп ассемблер знает — написал бы он без него С++ !
Здравствуйте Владимир Гренадеров, Вы писали:
ВГ>Квантовая теория — это для разработчиков камней А если серьезно, то как тот же Шумахер может настроит свой болид, НЕ ЗНАЯ, как работают тормоза, подвеска, и т.д. ?
Не думаю, что Шумахеру позволяют руками лезть в мотор, там без него есть профи по настройке болидов.
ВГ>А разве ассемблер для программиста — это другая область? И зачем, спрашивается инженеру изучать в универе историю или философию ???
Мы ещё и медицыну изучали
Так вот на этот вопрос есть один ответ — университет — это универсальное образование, так что и история и философия нужны только, так сказать, для общего образования.
ВГ>сесть за КОНКРЕТНЫЙ компьютер, и писат программы под него. А если человек плохо представляет, что такое стек и как это в него параметры попадают, чем stdcall отличестся от cdecl — сможет ли он грамотно спроектировать ту же DLL ? А многпоточность? Как понять опасность одновременного досупа к глобальной переменной? Есть еще большая куча примеров на подобную тему.
Ну не знаю я чем они там отличаются (точнее знаю, но если б не знал, было б то же самое ) И мне это не мешает. Просто у меня задачи другие. Кому надо — тот изучит, но прогресс движется вперёд, и скоро такие знания обычному программеру будут не нужны, как не нужны они сейчас тем, кто пишет на Java или С#.
ВГ>>>Поиск ошибки в своем коде имеет смысл только в том случае, если она там есть
Не правда. Поиск ошибок имеет смысл, если они мешают пользователю выполнять его функции.
Здравствуйте Mishka<T>, Вы писали:
MT>Здравствуйте Mr-Twister,
MT>Я б советовал ерундой не заниматься, а тихо мирно переходить на IL из .NET. Мы всё равно все там будем.
Это точно.
Хотя если человек всерез собирается заниматься С,С++ то assembler ему очень пригодится
(Цитата из вопроса : "...или достаточно ограничиться Си и в будущем Си++ ?")
ИХМО, в ближайшие годы C++, и assembler очень сблизятся. С и C++ закнчат тем с чего начали — написание эффективных полу-ассемблерных программ. Даже глючевое слово "register" ведь в C++ когда-то было. В последние годы C++ потянуло на компоненто ориентированное программирование для чего он мягко говоря не подходит, но от туда его уже выпихнули. ( При всем уважении к ATL, это полный изврат писать какой-нибудь транзакционный COM+ бизнес объект на С++,ATL)
Так что Assembler для С++, ИХМО, станет более актуальным.
[skip] ВГ>Квантовая теория — это для разработчиков камней :) А если серьезно, то как тот же Шумахер может настроит свой болид, НЕ ЗНАЯ, как работают тормоза, подвеска, и т.д. ?
Не должен он его настраивать, не должен. Это не его профессиональная область.
A>>Узкая специализация и есть как раз термин для выражения такого типа предпочтений, человек знает профессионально свою область, а в смежную и не пытается влезть. IMHO в скором будущем так и будет построена научная система, зачем человеку который изучает биологию знать квантовые процессы в атомах клеток :-)). Специализированные знания других областей ему не нужны. ВГ>А разве ассемблер для программиста — это другая область? И зачем, спрашивается инженеру изучать в универе историю или философию ???
Да. Ссылка на моё IMHO пункт 2. Ты представь ещё что для того чтобы понять как работает программа, ты бы распаивал процессор и следил за потоками данных с помощью осциллографа :))) (было дело, когда процессор собирали ручками на радиоэлектронике :) ).
А зачем знать историю и философию — а затем чтобы уметь мыслить не только техническими терминами, но и в другой области и другими категориями. Это просто полезно знать, а иначе какой-ты нафиг человек, если думаешь только о том как запроектировать что-нить ...
A>>Итоги(IMHO опять же): A>>1.Сейчас изучать ассемблер нужно! Но лучше это делать абстрактно от железа, от самого языка ассемблера, а потом уже и к ассемблеру переходить. А ещё лучше если тебе кто-нить из профи ;) сможет это всё рассказать и объяснить (есть люди которым просто от бога дано быть преподавателями!), потом проблем с изучением железа и его программирования будет меньше, если вдруг вздумаешь. ВГ>Изучать асм абстракто от железа — это то же самое, что учить С++, абстрагируясь от компютера :) ВГ>Ещё лучше бы совсем ничего не учить, пусть профи все объяснит и покажет...
Нифига подобного не только можно, но и нужно. Умение мыслить в нужной области (в смысле не главной по профилю) важнее практических навыков, хотя без практики это конечно не то немного, именно поэтому даже в самых практических науках есть учёные-теоретики.
Особенно если ты не собираешься реально заниматься самим асмом, то и железо изучать не надо, а вот как работают отдельные структуры реализованные в железячках (типа стека, регистров) знать сейчас необходимо, а вот если глянуть в сторону IL то там уже нужно немного другое знание, и подчас и асм не нужен. ;)
A>>2. Но лучше всё таки вначале заниматься абстрактным программированием, даже без С/C++, алгоритмы, структуры и конечно математику и так далее ибо они основа всего программирования, а не синтаксис различных языков !!! A>>Даже ещё раз повторюсь, Программирование это прежде всего способ перевода математических абстракций на язык структур данных и алгоритмов! А только потом на какой-то язык программирования (будь хоть он трижды ассемблером). ВГ>С этим ни кто не спорит. Но! После изучения абстрактных моделей и алгоритмов (вспомним Кнута), необходимо будет ВГ>сесть за КОНКРЕТНЫЙ компьютер, и писат программы под него. А если человек плохо представляет, что такое стек и как это в него параметры попадают, чем stdcall отличестся от cdecl — сможет ли он грамотно спроектировать ту же DLL ? А многпоточность? Как понять опасность одновременного досупа к глобальной переменной? Есть еще большая куча примеров на подобную тему.
Типичный пример сугубого практика, для которого программирование имеет только практический смысл (извини, не хочу никого обидеть). Если человек программист с большой буквы, то прежде чем программировать за Конкретным компьютером, под Конкретную платформу, с Конкретным компилятором, то он IMHO изучит особенности этих Конкретностей, а не начнёт сразу тупо набивать код и думать почему он не работает. :crash:
ВГ>>>Поиск ошибки в своем коде имеет смысл только в том случае, если она там есть :) ВГ>>>А если это чужая DLL, или Билл постарался, что тогда? A>>За искоренение своих и чужих ошибок !!! :crash: ВГ>Правилно — посмотрим в отладчике, как мелкомягкие напортачили, и сделаем лучше :super:
:maniac: Догоним и расскажем об их багах ...
Здравствуйте Andir, Вы писали:
ВГ>>Квантовая теория — это для разработчиков камней :) А если серьезно, то как тот же Шумахер может настроит свой болид, НЕ ЗНАЯ, как работают тормоза, подвеска, и т.д. ? A>Не должен он его настраивать, не должен. Это не его профессиональная область.
Ну так настраивает же. Вместе с механиками, естественно. И парашютисты сами свои парашюты укладывают :) И программисту (С++нутому, по крайней мере) не мешает иметь представление о том, что за его спиной компилятор вытворяет.
A>>>Узкая специализация и есть как раз термин для выражения такого типа предпочтений, человек знает профессионально свою область, а в смежную и не пытается влезть. IMHO в скором будущем так и будет построена научная система, зачем человеку который изучает биологию знать квантовые процессы в атомах клеток :-)). Специализированные знания других областей ему не нужны. ВГ>>А разве ассемблер для программиста — это другая область? И зачем, спрашивается инженеру изучать в универе историю или философию ??? A>Да. Ссылка на моё IMHO пункт 2. Ты представь ещё что для того чтобы понять как работает программа, ты бы распаивал процессор и следил за потоками данных с помощью осциллографа :))) (было дело, когда процессор собирали ручками на радиоэлектронике :) ).
Очень поучительно, между прочим. Раз и навсегда снимает некоторые вопросы. Помнится, у нас в институте лаба такая была — за i8080 в пошаговом режиме осциллографом подглядывали — я не думаю, что время было потрачено зря.
A>>>Итоги(IMHO опять же): A>>>1.Сейчас изучать ассемблер нужно! Но лучше это делать абстрактно от железа, от самого языка ассемблера, а потом уже и к ассемблеру переходить. А ещё лучше если тебе кто-нить из профи ;) сможет это всё рассказать и объяснить (есть люди которым просто от бога дано быть преподавателями!), потом проблем с изучением железа и его программирования будет меньше, если вдруг вздумаешь. ВГ>>Изучать асм абстракто от железа — это то же самое, что учить С++, абстрагируясь от компютера :) ВГ>>Ещё лучше бы совсем ничего не учить, пусть профи все объяснит и покажет... A>Нифига подобного не только можно, но и нужно. Умение мыслить в нужной области (в смысле не главной по профилю) важнее практических навыков, хотя без практики это конечно не то немного, именно поэтому даже в самых практических науках есть учёные-теоретики. A>Особенно если ты не собираешься реально заниматься самим асмом, то и железо изучать не надо, а вот как работают отдельные структуры реализованные в железячках (типа стека, регистров) знать сейчас необходимо, а вот если глянуть в сторону IL то там уже нужно немного другое знание, и подчас и асм не нужен. ;)
Кстати, некто Дональд Кнут в своих книгах любит примеры приводить на некоем вымышленном ассеблере — MIX. И вроде в настоящее время разработал (разрабатывает?) улучшенную версию этого ассемблера — MMIX :) Точно так же и васиковский p-code, и MSIL можно считать в какой-то мере ассемблером — пусть и для виртуальной машины. И, между прочим, отладка написанной на C++ программы зачастую осуществляется на порядок быстрее, если не боишься в дизасм заглянуть и хоть сколько-нибудь понимаешь, для чего какой код компилятор генерирует. С этой точки зрения нужна именно конкретика — как выглядит фрейм стека, как — фрейм для обработки исключений, как передаются параметры при различных соглашениях о вызовах, где компилятор держит this. А иногда при отладке (достаточно редко, впрочем) без знания ассемблера просто никак не обойтись.
A>>>2. Но лучше всё таки вначале заниматься абстрактным программированием, даже без С/C++, алгоритмы, структуры и конечно математику и так далее ибо они основа всего программирования, а не синтаксис различных языков !!! A>>>Даже ещё раз повторюсь, Программирование это прежде всего способ перевода математических абстракций на язык структур данных и алгоритмов! А только потом на какой-то язык программирования (будь хоть он трижды ассемблером). ВГ>>С этим ни кто не спорит. Но! После изучения абстрактных моделей и алгоритмов (вспомним Кнута), необходимо будет ВГ>>сесть за КОНКРЕТНЫЙ компьютер, и писат программы под него. А если человек плохо представляет, что такое стек и как это в него параметры попадают, чем stdcall отличестся от cdecl — сможет ли он грамотно спроектировать ту же DLL ? А многпоточность? Как понять опасность одновременного досупа к глобальной переменной? Есть еще большая куча примеров на подобную тему. A>Типичный пример сугубого практика, для которого программирование имеет только практический смысл (извини, не хочу никого обидеть). Если человек программист с большой буквы, то прежде чем программировать за Конкретным компьютером, под Конкретную платформу, с Конкретным компилятором, то он IMHO изучит особенности этих Конкретностей, а не начнёт сразу тупо набивать код и думать почему он не работает. :crash:
Очень спорное мнение :) Как минимум, при таком подходе подразумевается, что для каждой новой платформы весь код, от начала до конца, переписывается.
ВГ>>>>Поиск ошибки в своем коде имеет смысл только в том случае, если она там есть :) ВГ>>>>А если это чужая DLL, или Билл постарался, что тогда? A>>>За искоренение своих и чужих ошибок !!! :crash: ВГ>>Правилно — посмотрим в отладчике, как мелкомягкие напортачили, и сделаем лучше :super: A>:maniac: Догоним и расскажем об их багах ...
Они про свои баги и сами знают, только исправлять не спешат :down:
Одним из 33 полных кавалеров ордена "За заслуги перед Отечеством" является Геннадий Хазанов.
Здравствуйте Mishka<T>, Вы писали:
ВГ>>Квантовая теория — это для разработчиков камней А если серьезно, то как тот же Шумахер может настроит свой болид, НЕ ЗНАЯ, как работают тормоза, подвеска, и т.д. ?
MT>Не думаю, что Шумахеру позволяют руками лезть в мотор, там без него есть профи по настройке болидов.
Аналогия такая:
1. мотор — камень
2. принцип работы мотора, его харки — это асм
3. руль + педали — С++, Дельфи, Барсик, etc.
И в (1) ни Шумахер, ни асм-программер руками не лезет
ВГ>>А разве ассемблер для программиста — это другая область? И зачем, спрашивается инженеру изучать в универе историю или философию ???
MT>Мы ещё и медицыну изучали MT>Так вот на этот вопрос есть один ответ — университет — это универсальное образование, так что и история и философия нужны только, так сказать, для общего образования.
А для чего нужно это самое общее образование — что бы шире смотреть на проблему, и видеть разные пути её решения !
ВГ>>сесть за КОНКРЕТНЫЙ компьютер, и писат программы под него. А если человек плохо представляет, что такое стек и как это в него параметры попадают, чем stdcall отличестся от cdecl — сможет ли он грамотно спроектировать ту же DLL ? А многпоточность? Как понять опасность одновременного досупа к глобальной переменной? Есть еще большая куча примеров на подобную тему.
MT>Ну не знаю я чем они там отличаются (точнее знаю, но если б не знал, было б то же самое ) И мне это не мешает. Просто у меня задачи другие. Кому надо — тот изучит, но прогресс движется вперёд, и скоро такие знания обычному программеру будут не нужны, как не нужны они сейчас тем, кто пишет на Java или С#.
Ты знаешь, что к .NET идет дизассемблер ?
И нэтовский асм подозрительно похож на x86...
ВГ>>>>Поиск ошибки в своем коде имеет смысл только в том случае, если она там есть MT>Не правда. Поиск ошибок имеет смысл, если они мешают пользователю выполнять его функции.
Точно — "Это не баг, это фича"
Здравствуйте Mr-Twister, Вы писали:
MT>Не покажусь ли я эгоистом , но может на RSDN сделать ветку по ассемблеру ?
Скорее надо сделать этакий FAQ — ведь профессионально писать на асме сейчас будут немногие
А так начинающий С++ программист сможет наконец понять, что же такое этот таинственный стэк, и как его переполнить
Здравствуйте Владимир Гренадеров, Вы писали:
ВГ>Ты знаешь, что к .NET идет дизассемблер ? ВГ>И нэтовский асм подозрительно похож на x86...
Какой же еще может быть asm на одной и той же аппаратной платформе, если система команд одна и та же?
Ассемблер — прежде всего система команд используемого процессора. Возможные вариации в пределах семейства процессоров задаются опциями генерации кода комилятора: все что можно получить на том же ПК — чуть более оптимизированный код за счет использования расширенного набора команд более поздней модели процессора (например i386/486/Pentium/...). И Net тут не причем. Ну а все, чем различаются собственно программы-ассемблеры разных производителей для одного семейства, типа макроассемблера MASM — так это синтаксис директив, макросов и т.п.
Ну а гнуть пальцы на БГ по поводу ошибок MS — это, как правило, проходит, если самому делать что-нибудь крупное и серьезное. Очень хочется, конечно, найти крайнего и виноватого на стороне, но это бывает так редко
PS для ХД:
Уверен, что вопрос уже прояснился , и все же: вот далеко не полный перечень платформ, для которых только MS(!) разрабатывает версии своих ОС (взят из MSDN, см. например статью "From One Code Base to Many Platforms Using Visual C++”):
DEC Alpha,MIPS R4400, PowerPC,NEC VR4111 MIPS,Hitachi SH3,PR 3912,ARM SA1100.
Здравствуйте WolfHound, Вы писали:
WH>А еще для тренировки можно порешать олимпиадные задачи, учат бытро находить хорошие решения. WH>http://acm.timus.ru/
Здравствуйте Eugene, Вы писали:
E>PS для ХД: E>Уверен, что вопрос уже прояснился , и все же: вот далеко не полный перечень платформ, для которых только MS(!) разрабатывает версии своих ОС (взят из MSDN, см. например статью "From One Code Base to Many Platforms Using Visual C++”): E>DEC Alpha,MIPS R4400, PowerPC,NEC VR4111 MIPS,Hitachi SH3,PR 3912,ARM SA1100.
Но архитектура-то все равно фон Неймановская, и ничем не отличается, ни от x86, ни от того же z80.
Здравствуйте Владимир Гренадеров, Вы писали:
A>>Отвечу одной ссылкой — Windows Assembly Site. ВГ>Надо было подкинуть ссылку на ООП в асме — вот смеху было-бы ВГ>Кстати, сам Страуструп ассемблер знает — написал бы он без него С++ !
Владимир, а вот интересно, за что же вы поставили ноль Vi2? хотя сами, по моему мнению, высказываетесь в той же маненре?
Постинг Vi2 как раз достаточно показателен, потому что понимание вопроса в нём свелось к буквальной трактовке выражения "учить ассемблер".
Здравствуйте Eugene, Вы писали:
DG>>Но архитектура-то все равно фон Неймановская, и ничем не отличается, ни от x86, ни от того же z80. E>Ну, если оценивать по такому принципу — тут априори все уже полиглоты. И изучать уже нечего...
Да в том-то всё и дело, что человек задавший вопрос не полиглот! А только намеревается им стать И он ищет способ получить нужные знания. А область этих знаний выясняет у нас с вами (у всех посетителей форума, если хотите), потому как считает нас несколько более опытными в этом вопросе.
Всё ОК. На ассемблере я и правда не пишу, но считаю, тем не менее, что к поставленному вопросу это не относится.
E>...но со стороны этот совет выглядел примерно так: «я, вообще-то, ассемблера не знаю..., но ты учи обязательно (а то чайник не вскипит! ). Здесь очевидное противоречие — если это только тонкая обертка, и это столь необходимо — кто мешает? И тогда совет будет более весомым (и менее развернутым).
Гм, может я неточно выражаюсь (есть грех), но всё же целью моего ответа Mr.Twister'у было дать ему понять, что ему лично "изучение ассемблера" в вашем понимании не нужно. А нужно лишь понять некоторую основу, принципы функционирования компьютера, платформы (программной и аппаратной), если хотите. Как вы заметили ниже, действительно, программирование как написание конечных программ не входит в сферу интересов спрашивающего. И поэтому ему достаточно будет ознакомления (это ваше слово и подходит оно сбда на все 100) с принципами, вместо изучения языка ассемблера и процессора как такового.
Надеюсь, что наполненный таким смыслом совет достаточно весом, чтобы быть опубликованным здесь и в полном объёме
Насчёт ознакомления и ликбеза согласен. Это именно то, что нужно нашему товарищу, который задал вопрос.
E>А вот если на ассемблере реально надо писать проекты, например, для управляющих встраиваемых контроллеров и т.п. — тут уже надо изучать! И потратить на это немало времени — совсем не факт, что это будет что-нибудь, похожее на x86. И мыслить надо другими категориями, не совместимыми ни с ООП, ни (порой) даже просто со структурным программированием. И тут уж невозможно без GOTO, вот вам и новые герои комиксов, которых недавно так безжалостно "перестреляли" И если потом надо писать на чем-нибудь "высоком" — надо будет как можно быстрее забыть 99% приобретенного опыта! Так что "советую советовать" не так категорично
Да, вы опять же правы. Но, по моему мнению, вы отклоняетесь от темы исходного топика. Человек просто изучает Си, и, так как он (язык С) недалёк от языка ассемблера (в том смысле, о котором писали VladD2 и я), то ему не совсем понятны некоторые вещи, которые окажутся очевидными людям, знакомым с тем, how it works.
E>PS для ХД: E>Уверен, что вопрос уже прояснился , и все же: вот далеко не полный перечень платформ, для которых только MS(!) разрабатывает версии своих ОС (взят из MSDN, см. например статью "From One Code Base to Many Platforms Using Visual C++”): E>DEC Alpha,MIPS R4400, PowerPC,NEC VR4111 MIPS,Hitachi SH3,PR 3912,ARM SA1100.
Собственно, мы с вами описываем свои разные точки зрения, каждый со своей колокольни. Это нормально, пожалуй. И мне интересно поговорить с человеком, который знает об ассемблере не по наслышке как я, а сам пишет настоящие (в смысле не учебные) проекты для разных МП. Спасибо за дискуссию. Надеюсь, вам тоже было небезынтересно читать всё это
Здравствуйте Vi2, Вы писали:
Vi2>Здравствуйте Mr-Twister, Вы писали:
MT>>Изучая Си, кто то написал мне в одном из ответов: Учи ассемблер поможет.
Vi2>Ещё бы Тех.Документацию на Интел процессор посоветовали почитать!
Vi2>PS Vi2>ИМХО, хорошая тема для "Философии программирования", не правда ли? Хитрик Денис модератор, все-таки эта тема подходит для философии программирования.
А ведь действительно. Знать, что первично, что вторично , относится и к "философии программирования" и к ассемблеру. Что раньше курица или яйцо, как раз подходит . Так, что объеденять эти темы судя по всему можно, и они все же однородны.
Ну можно еще в философию программирования включить рассмотрение понятий, и английский язык с уклоном программирования.
Да сюда можно и технологические тенденции, и развитие языков( К примеру Nvidia сделала новый язык Cg).
Ну мужики, ну давайте сделаем "Философию программирования", ведь эта тема актуальна.
Здравствуйте Mr-Twister, Вы писали:
Vi2>>PS Vi2>>ИМХО, хорошая тема для "Философии программирования", не правда ли? MT>Хитрик Денис модератор, все-таки эта тема подходит для философии программирования.
Все вопросы к администраторам Я не создаю новые форумы. Я только перекидываю сообщения между существующими.
Да, я либо Хитрик Денис как человек-посетитель, либо модератор, как "служащий" на этом сайте. Необязательно перечислять все титулы, можно даже просто по имени: Денис.
MT>Ну можно еще в философию программирования включить рассмотрение понятий, и английский язык с уклоном программирования.
Это в прочее. Не надо путать божий дар с яичницей. Здесь сайт по программированию, а не по лингво курсам
MT>Да сюда можно и технологические тенденции, и развитие языков( К примеру Nvidia сделала новый язык Cg).
Это тоже в Прочее. Или Разное, если хочется
MT>Ну мужики, ну давайте сделаем "Философию программирования", ведь эта тема актуальна.
Вот засада какая! А не лучше это пока оставить в Прочем, а периодически выпускать бЮллетень (или дайджест) по форумам: "Самые интересные топики"? В такой концепции можно при небольшом количестве слабо наполненных форумов хорошо выделять и структурировать топики по интересности и тематике. Автоматом появятся и Q&A и темы для статей (не только по философии).
Здравствуйте Хитрик Денис, Вы писали:
ХД>Владимир, а вот интересно, за что же вы поставили ноль Vi2? хотя сами, по моему мнению, высказываетесь в той же маненре?
ХД>Постинг Vi2 как раз достаточно показателен, потому что понимание вопроса в нём свелось к буквальной трактовке выражения "учить ассемблер".
"Ещё бы Тех.Документацию на Интел процессор посоветовали почитать! " (c) Vi2
Вообще-то, 0 — "я так не думаю". Я был не согласен с высказыванием Vi2 — что значит "ещё бы"?
То есть и предложение поучить асм это уже слишком? А тех. документацию без приличной подготовки не осилить...
Оценка <НОЛЬ> — ипользовать её или нет? Если ответ нравится, то ясно. А если нет?
Воздержаться? Или долго и нудно доказывать кому-то, что он не прав? (и засорять ветку)
Хотелось бы узнать ваше личное отношение к этому, Денис.