Jak myślisz, jak dobrym pomysłem byłoby nauczenie ludzi asemblera (jakiegoś wariantu) jako pierwszego języka programowania? Wymagałoby to o wiele więcej wysiłku niż nauka na przykład Java lub Python, ale można by dobrze zrozumieć maszynę mniej więcej od „pierwszego dnia programowania” (przynajmniej w porównaniu z wieloma językami wyższego poziomu). Co myślisz? Czy to realistyczny pomysł, przynajmniej dla tych, którzy są gotowi podjąć dodatkowy wysiłek? Zalety i wady?
Uwaga: nie jestem nauczycielem, jestem tylko ciekawy
Odpowiedzi:
Trudno byłoby zainspirować nowego programistę kodem asemblera. Dynamiczne przywitanie, witryna użytkownika jest znacznie fajniejsza przy mniejszym wysiłku. Nie twierdzę, że podstawowe lekcje są takie same, ale kurs wprowadzający będzie miał dużą inspirującą treść, w przeciwnym razie nie będzie drugiego kursu.
Pamiętam, że moje wczesne kursy programowania były prowadzone w Schemacie i byłem głównie sfrustrowany, że nie mogłem łatwo po prostu skompilować do pliku .exe i „uruchomić” mój program (myślałem, że MS Visual Basic to koniec programowania). Dopiero po latach naprawdę zrozumiałem, jak potężnym narzędziem się bawiłem. Myślę, że bardziej doceniłbym to i lepiej skorzystałbym z tych lekcji, gdybym początkowo miał jakieś wczesne doświadczenie w czymś bardziej pragmatycznym.
źródło
Myślę, że to okropny pomysł zarówno dla studentów inżynierii oprogramowania, jak i studentów CS i ogólnie bardziej zainteresowanych programowaniem niż elektroniką.
To może być zrobione, ale to nie znaczy, że powinno być zrobione. W tamtych czasach sposobem na naprawdę fajne rzeczy z komputerami domowymi było nauczenie się montażu. Stało się tak z powodu wczesnych ograniczeń sprzętowych - języki wyższego poziomu po prostu nie były wystarczająco mocne i szybkie. W dzisiejszych czasach możesz robić dużo fajniejsze rzeczy w krótszym czasie, używając języka wyższego poziomu.
Co brzmi ciekawiej, pisząc szybki prototyp dla prostej gry i bawiąc się wariacjami na temat algorytmu, lub walcząc z rejestrami i rzeczami niskiego poziomu?
źródło
Nie sądzę, że to okropny pomysł, ale jak skomplikowany program zamierzasz zapewnić tym studentom? Montaż zajmuje dużo więcej pracy. Może być w porządku, aby zacząć od bardzo podstawowych rzeczy, a następnie przenieść je do czegoś, w którym łatwiej jest pracować, gdy już docenią pracę na niższym poziomie. Po raz pierwszy uczniowie czasami wpadają na pomysł, że zakodują następną grę Halo, MS Office, AutoCAD lub coś w tym stylu, a kiedy zobaczą, ile pracy zajmuje prosty język asemblera, można się ich wystraszyć, więc wyjaśnij to że są lepsze rzeczy niż montaż, a następnie przenieś je do tego, gdy zobaczą koncepcje. Możesz także spróbować uczyć asemlby równolegle z czymś innym jak C.
Ponadto, który język asemblera? Nieco przypominam sobie, że MIPS był stosunkowo łatwy w obsłudze i myślę, że działa w emulatorze, więc nie ma niebezpieczeństwa powodowania problemów na prawdziwej maszynie, chociaż mogą być lepsze narzędzia niż teraz.
Może to działać dobrze, jeśli zostanie to wykonane poprawnie. Tylko bądź ostrożny...
źródło
Montaż był pierwszym językiem, którego nauczyliśmy się w szkole elektronicznej (w latach 1900) i wydawało się, że to naturalny wybór. Przeszliśmy przez nasze kursy od elementów dyskretnych, przez logikę rezystor-tranzystor, bramki logiczne, układy scalone, procesory i programowanie w montażu. Wielu uczniów na tych zajęciach nigdy wcześniej nie programowało w żadnym języku i dobrze to zrozumieli.
Tak więc montaż może być dobrym wyborem dla pierwszego języka, jeśli uczeń ma odpowiednie podstawy. Uważam jednak, że dla każdego, kto chce być aplikacją lub programistą WWW, montaż jest prawdopodobnie zbyt niskim poziomem początkowym.
źródło
Jedno jest pewne, jeśli ludzie, najpierw ucząc się Zgromadzenia, zdążą, będą niesamowitymi programistami.
To przypomina mi, kiedy nauczyłem się prowadzić. Moja mama nalegała
Powodem jest to, że nie chciała, abym był rozproszony bardziej niż powinienem, naraz.
Zastosuj to do nauki programowania, czy konieczne jest rzucenie wszystkiego na ucznia naraz? Uczą się, czym jest zmienna, jednocześnie uczą się, ile danych mogą przechowywać w jakim rejestrze?
Ponad połowa mojej klasy zawiodła naszą klasę montażu, a była to grupa ludzi, którzy w tym czasie uważali się za znających się na programowaniu od ponad 2 lat.
Moją osobistą preferencją, gdybym musiał nauczyć się wszystkiego od nowa, byłoby zacząć od języka, który robi dla mnie jak najwięcej. Następnie, gdy się uczę, przejdź do języków niższego poziomu.
źródło
Nie
Dlaczego to jest korzystne? Czy możesz podać przykład lub podpowiedź, w jaki sposób może to mieć jakąkolwiek wartość?
Zalety: brak.
Niedogodności:
Zbiór losowych ciekawostek na temat flag i stanów i rejestrów oraz złożonych schematów adresowania pamięci i urządzeń I / O oraz DMA oraz przerwań i cykli zegara i tym podobnych. Żaden z nich nie pomaga zrozumieć współczesnych języków opartych na maszynach wirtualnych i komputerów.
Odłączanie od faktycznego rozwiązywania problemów, do których faktycznie stosowane są komputery.
Rozwód od użytkowników końcowych oraz praktyczne problemy z danymi i przetwarzaniem, które muszą rozwiązać.
Niepotrzebna seria wyjaśnień maszyny i maszyny wirtualnej oraz kompilatora i interpretera oraz całego stosu żółwi trzymających świat.
Wiele szczegółowych „jest to fizyczna implementacja„ obiektu ”w języku wyższego poziomu, do którego ostatecznie dochodzą.
Wiele szczegółowych „w ten sposób wysyłane są funkcje metod” w języku wyższego poziomu, do którego w końcu dochodzą.
Wiele „nie dotyczy to 80386, ale dotyczy wyjaśnień mikroukładu 80586”.
Wiele niskopoziomowych wywołań API systemu operacyjnego, aby program ASM zrobił wszystko, co wydaje się być przydatne dla kogoś.
Celem pierwszego języka programowania nie jest opanowanie mikroukładu.
Celem pierwszego języka programowania jest
Dowiedz się, jak myśleć o informatyce.
Dowiedz się, jak wykonać przydatne przetwarzanie danych.
Dowiedz się, jak coś zrobić. Projekt - kod - test.
źródło
Gdybym miał za zadanie zaprojektować program nauczania, miałbym dwa kursy prowadzone jednocześnie w pierwszym semestrze: asm + podstawowa organizacja / architektura komputerów oraz kurs oparty na SICP założony w Scheme. Drugi semestr byłby zorientowany na struktury danych i podstawowe algorytmy w schemacie.
Drugi rok byłby całorocznym projektem wykorzystującym jeden z Delphi, C ++ lub C #, skupiającym się na nowoczesnym projektowaniu oprogramowania (projektowanie OO, niektóre projekty funkcjonalne, inżynieria oprogramowania, kontrola wersji itp.).
Efektem powinno być intensywne ugruntowanie zarówno w formie abstrakcyjnej, jak i praktycznej, prowadząc do szczegółowych kursów w trzecim i czwartym roku.
źródło
Kiedyś chodziłam na wstępne zajęcia z informatyki i myślę, że to zły pomysł.
Powiedziawszy to, uważam, że sprzęt montażowy / komputerowy powinien być bardzo wcześnie - najlepiej w pierwszym kwartale. Poproś uczniów, aby umieścili jeden język wysokiego poziomu za pasami, a następnie wskocz do sprzętu niskiego poziomu od razu przed przejściem do struktur danych - najlepiej w języku, który wymaga zarządzania pamięcią.
źródło
Zgromadzenie było moim drugim językiem, zaraz po języku BASIC. Jednak kiedy się uczyłem, był inny czas. W moim Commodore 64 dostępne były inne języki, ale jeśli chcesz, aby coś wydawało się szybkie lub chcesz robić więcej niż jedną rzecz na raz, musisz nauczyć się języka asemblera i obsługi przerwań. System operacyjny środowiska graficznego (GEOS), który nadał Commodore system okienkowy, również został złożony. Był to ogólnie najlepszy interfejs API do montażu, jaki kiedykolwiek widziałem. Była to również jedyna platforma, z której korzystałem, w której można stylizować kod. Zgadza się, możesz użyć kursywy i różnych rozmiarów czcionek - coś, co okazało się przydatne do czytania komentarzy.
Wiele się nauczyłem o działaniu Commodore, ale układ Motorolla miał bardzo prosty zestaw kodów operacyjnych. Nietrudno jest oddzielić od siebie mniej niż 255 kodów. Byłem nie stanie przekształcić moje doświadczenie na Motorolla 6510 chipem do programowania dla Intel 8086. Chipsy i architektur systemowych są zbyt różne. Wyobrażam sobie, że miałbym takie same problemy z przejściem do układu Amolla Motorolla 68000.
Krótko mówiąc, muszę całym sercem nie zgodzić się z każdym, kto twierdzi, że Zgromadzenie powinno być dobrym pierwszym językiem. Dlatego:
Obecnie język asemblera jest używany do przyspieszenia niektórych skończonych akcji, w których ręcznie wykonany zestaw byłby szybszy niż zestaw generowany przez kompilator. Główna struktura aplikacji jest wykonywana w języku wyższego poziomu, takim jak C, C ++ itp. Oczywiście, programowanie asemblacyjne stałoby się bardzo ważne, jeśli zaczniesz pisać kompilatory. Ilu z nas to robi?
źródło
Wziąłem montaż w moim starszym roku liceum. Brałem już zajęcia w Javie, Pascalu, C i C ++, i nie byłem biegły w żadnym z nich, i naprawdę byłem do niczego przy Zgromadzeniu - byłem jedyną osobą, która brała udział w programie nauczania na odległość w college'u społecznościowym, zabrała mnie miesiąc czy dwa, zanim ktokolwiek zdoła uruchomić kompilator dla mnie.
Nie wydaje mi się, aby najpierw trzeba było się uczyć języka asemblera, ale mądrze jest nauczyć się tego, czego uczą się w pierwszych tygodniach montażu, o tym, jak działa procesor i niektórych sztuczkach debugowania. Te rzeczy uważałem za bardzo interesujące i pouczające jako neofita.
źródło
Nie rozumiem, dlaczego nie można tego zrobić, chociaż to, jak dobry jest ten pomysł, zależy od tłumu, którego byś go nauczył. Ktoś, kogo celem jest bycie programistą, prawdopodobnie się nudzi i może zrezygnuje, ponieważ nie dałoby im to natychmiastowej satysfakcji z tworzenia czegoś takiego, jak Python, Ruby itp. Jeśli chcą w końcu pracować na sprzęcie lub innych projektach niskiego poziomu, myślę, że byłby to dobry początek (pod warunkiem, że podasz wystarczającą ilość architektury komputera, aby miało to sens). Myślę, że może to pomóc ludziom w pisaniu lepszego kodu w przyszłości, chociaż myślę, że byłoby to trudniejsze niż nauka innych języków na początku.
źródło
Myślę, że język asemblera będzie miał sens tylko wtedy, gdy skupisz się na takich rzeczach jak:
Bez skupienia się na tym obszarze, jest to po prostu uproszczony język, który będzie uczył złych nawyków organizacyjnych. Kodowanie na poziomie maszyny dobrze jest mieć w zestawie narzędzi, aby wiedzieć, jak to działa, ale nie jest to dobry pierwszy język.
Zainteresowałbym kogoś językiem wyższego poziomu. Następnie naucz C ++; następnie asembler z naciskiem na to, jak kompilatory C ++ generują kod asemblera. Zrozumienie tabel v-v i innych funkcji językowych na wyższym poziomie znacznie pomoże deweloperowi pomyśleć o tym, jak naprawdę działają języki, niż po prostu zapisując informacje w „magii”.
źródło