Как вы думаете, насколько хороша идея научить людей ассемблеру (какой-то вариант) в качестве первого языка программирования? Это потребовало бы гораздо больше усилий, чем изучение, например, Java или Python, но можно было бы лучше понять машину более или менее с «первого дня программирования» (по крайней мере, по сравнению со многими языками более высокого уровня). Как вы думаете? Это реалистичная идея, по крайней мере, для тех, кто готов приложить дополнительные усилия? Преимущества и недостатки?
Примечание: я не учитель, просто любопытно
Ответы:
Было бы трудно вдохновить нового программиста ассемблерным кодом. Динамичный привет, пользовательский сайт намного круче с меньшими усилиями. Я не говорю, что фундаментальные уроки одинаковы, но вводный курс будет иметь большое вдохновляющее содержание, иначе второго курса не будет.
Я помню, что мои ранние курсы по программированию преподавались на Scheme, и я был в основном разочарован тем, что не мог просто скомпилировать в .exe и «запустить» мою программу (я думал, что MS Visual Basic - это конец программирования). Лишь спустя годы я действительно осознал, каким мощным инструментом я играл. Я думаю, что я оценил бы это больше и усвоил бы эти уроки лучше, если бы у меня был некоторый ранний опыт в чем-то немного более прагматичном вначале.
источник
Я думаю, что это ужасная идея как для программистов, так и для студентов CS, и вообще для всех, кто больше интересуется программированием, чем электроникой.
Это может быть сделано, но это не значит, что это должно быть сделано. В свое время с домашними компьютерами можно было делать действительно классные вещи - сначала изучать ассемблер. Это было из-за ранних аппаратных ограничений - языки более высокого уровня просто не были достаточно мощными и быстрыми. В настоящее время вы можете делать гораздо более крутые вещи за более короткое время на языке более высокого уровня.
Что звучит интереснее: написание быстрого прототипа для простой игры и игра с вариациями алгоритма, или борьба с регистрами и вещами низкого уровня?
источник
Я не думаю, что это ужасная идея, но насколько сложную программу вы собираетесь дать этим студентам? Сборка требует гораздо больше работы. Возможно, было бы неплохо начать их с самых простых вещей, а затем перевести их на что-то, с чем легче работать, как только они получат признание за работу на более низком уровне. Ученики-новички иногда приходят в голову, они пишут код следующего Halo, MS Office, AutoCAD или чего-то еще, и когда они видят, сколько работы уходит на простой язык ассемблера, их можно напугать, поэтому дайте понять что есть вещи лучше, чем сборка, а затем перенести их к этому, как только они увидят концепции. Вы также можете попробовать обучить ассемблеру одновременно с чем-то вроде C.
Кроме того, какой язык ассемблера? Я немного напоминаю, что в MIPS было относительно легко работать, и я думаю, что он работает в эмуляторе, поэтому нет опасности создать проблемы для реальной машины, хотя инструменты могут быть лучше, чем сейчас.
Это может хорошо работать, если все сделано правильно. Просто будь осторожен...
источник
Сборка была первым языком, который мы изучали в школе электроники (еще в 1900-х годах), и это казалось естественным выбором. Мы прошли через наши курсы от дискретных компонентов к резисторно-транзисторной логике, логическим элементам, интегральным схемам, процессорам и программированию в сборке. Многие ученики в этих классах никогда не программировали на каком-либо языке раньше, и они правильно его поняли.
Таким образом, сборка может быть хорошим выбором для первого языка, если для ученика заложена правильная основа. Тем не менее, для любого, чья цель - стать приложением или веб-разработчиком, я думаю, что сборка, вероятно, слишком низкоуровневая отправная точка.
источник
Одно можно сказать наверняка, если люди, изучающие ассемблер в первую очередь, сделают это, они будут замечательными программистами.
Это напоминает мне о том, когда я научился водить. Моя мама настояла
Причина в том, что она не хотела, чтобы я отвлекался на большее, чем мне нужно, все сразу.
Примените это к обучению, как программировать, нужно ли бросать все на ученика сразу? Они узнают, что такое переменная, в то же время узнают, сколько данных они могут хранить в каком виде регистра?
Более половины моего класса провалили наш урок ассемблера, и это была группа людей, которые в то время считали себя знакомыми с программированием в течение 2+ лет.
Мое личное предпочтение, если бы мне пришлось изучать все заново, было бы начать с языка, который делает для меня как можно больше. Затем, когда я учусь, двигайтесь назад к языкам более низкого уровня.
источник
нет
Почему это выгодно? Можете ли вы привести пример или подсказку о том, как это может иметь какое-либо значение?
Преимущества: нет.
Недостатки:
Беспорядок случайных пустяков о флагах и состояниях и регистрах и сложных схемах адресации памяти и устройствах ввода-вывода и DMA и прерываниях и тактовых циклах и прочем. Ни один из них не помогает понять современные языки и вычисления на основе виртуальных машин.
Отключение от фактического решения проблем, к которым фактически применяются компьютеры.
Развод с конечными пользователями и практические проблемы с данными и обработкой, которые они должны решить.
Бесполезный поток объяснений о машине, виртуальной машине, компиляторе и интерпретаторе, а также о всей совокупности черепах, удерживающих мир.
Много подробного «это физическая реализация« объекта »» на языке более высокого уровня, к которому они в итоге приходят.
Много подробного «это то, как функции метода отправляются» на языке более высокого уровня, к которому они в конечном итоге приходят.
Многочисленные объяснения «это не относится к 80386, но применимо к чипсету 80586».
Многие низкоуровневые API-вызовы ОС заставляют программу ASM делать все, что кажется кому-то полезным.
Смысл первого языка программирования не в том, чтобы овладеть чипсетом.
Смысл первого языка программирования заключается в
Понять, как думать о компьютерах.
Понять, как сделать полезную обработку данных.
Понять, как сделать что-то. Дизайн - код - тест.
источник
Если бы мне было поручено разработать учебный план, в первом семестре у меня было бы одновременно два курса: asm + базовая компьютерная организация / архитектура и курс на основе SICP, основанный в Scheme. Второй семестр будет ориентирован на структуры данных и элементарные алгоритмы в схеме.
Второй год - это годовой проект с использованием Delphi, C ++ или C #, ориентированный на современный дизайн программного обеспечения (дизайн ОО, некоторый функциональный дизайн, разработка программного обеспечения, контроль версий и т. Д.).
Эффект должен дать интенсивное обоснование как абстрактного, так и практического, что приведет к углубленным курсам в третий и четвертый годы.
источник
Я привык к вводным курсам ТА по информатике, и я думаю, что это плохая идея.
Сказав это, я думаю, что сборка / компьютерное оборудование должно быть очень ранним классом - в идеале, первый квартал в мажоре. Предложите учащимся получить один язык высокого уровня, а затем сразу же перейти к аппаратным средствам низкого уровня, прежде чем переходить к структурам данных - в идеале на языке, который требует управления памятью.
источник
Сборка была моим вторым языком, сразу после Бейсика. Однако, когда я учился, было другое время. В моем Commodore 64 были доступны другие языки, но если вы хотели, чтобы что-то казалось быстрым, или хотели делать больше, чем одно за раз, вам нужно было изучать ассемблер и как работать с прерываниями. Операционная система графической среды (GEOS), которая дала Commodore систему управления окнами, также была в сборе. По большому счету это был лучший сборочный API, который я когда-либо видел. Это была также единственная платформа, которую я использовал, где вы могли стилизовать свой код. Правильно, вы можете использовать курсив и разные размеры шрифта - что оказалось полезным для чтения комментариев.
Я многое узнал о том, как работает Commodore, но у чипа Motorolla был очень простой набор кодов операций. Не так сложно хранить менее 255 кодов операций отдельно друг от друга. Я не смог передать свой опыт использования чипа Motorolla 6510 программированию для Intel 8086. Чипы и архитектура систем были слишком разными. Думаю, у меня были бы те же проблемы с переходом на чип Amiga Motorolla 68000.
Короче говоря, я должен искренне не соглашаться со всеми, кто говорит, что Ассамблея должна быть хорошим родным языком. Вот почему:
В наши дни язык ассемблера используется для ускорения определенных конечных действий, когда сборка, созданная вручную, будет быстрее, чем сборка, созданная компилятором. Основная структура приложения выполняется на языке более высокого уровня, таком как C, C ++ и т. Д. Конечно, программирование на ассемблере станет очень важным, если вы начнете писать компиляторы. Сколько из нас это делает?
источник
Я взял собрание в моем старшем году средней школы. Я уже брал уроки по Java, Pascal, C и C ++, и не был опытным ни в одном из них, и я действительно сосал ассемблер - я был единственным, кто брал уроки в программе дистанционного обучения в местном колледже, взял меня месяц или два, прежде чем кто-то мог заставить компилятор работать на меня.
Я не думаю, что нужно или мудро сначала изучать язык ассемблера, но разумно выучить материал, которому вас учат в первые несколько недель сборки, о том, как работает процессор, и некоторые приемы отладки. Этот материал мне показался очень интересным и поучительным, как неофит.
источник
Я не понимаю, почему этого нельзя было сделать, хотя насколько хороша идея, это полностью зависит от толпы, которой бы вы ее тоже научили. Кто-то, чья конечная цель - стать веб-разработчиком, вероятно, надоест и может уйти, потому что это не даст им немедленного удовлетворения от создания чего-то, что сделали бы Python, Ruby и т. Д. Если они захотят со временем поработать над аппаратным обеспечением или другими низкоуровневыми проектами, то я думаю, что это будет хорошим началом (при условии, что вы достаточно разберетесь в архитектуре компьютера, чтобы это имело смысл). Я думаю, что это могло бы помочь людям писать лучший код в будущем, хотя я думаю, что это будет более трудным, чем изучение других языков для начала.
источник
Я думаю, что язык ассемблера будет иметь смысл, только если вы сосредоточитесь на таких вещах, как:
Без акцента в этой области, это просто упрощенный язык, который, как правило, учит плохим организационным привычкам. Кодирование машинного уровня полезно иметь в наборе инструментов, чтобы знать, как все работает, но это не очень хороший родной язык.
Я бы заинтересовал кого-то языком более высокого уровня. Тогда учите C ++; затем сборка с акцентом на то, как компиляторы C ++ генерируют код сборки. Понимание виртуальных таблиц и других языковых функций более высокого уровня поможет разработчику задуматься о том, как на самом деле работают языки, чем просто подать информацию под «магией».
источник