Oczywiste jest, że znajomość rzeczy niskiego poziomu jest bardzo ważna w naszej pracy.
Ale w sytuacji, gdy już tworzysz komercyjne oprogramowanie na wysokim poziomie, a kiedy już wybierasz kierunek, ale nie masz umiejętności montażowych, czy nie jest rozsądniej skoncentrować się na studiowaniu rzeczy związanych z twoim kierunkiem? Czy jest powód, dla którego powinieneś poświęcić trochę czasu na naukę podstaw niskiego poziomu?
Kiedy jest za późno, a kiedy nie? A jeśli to nie zbyt późno, to w jaki sposób można by pójść o nauce optymalnie (w sensie nie wydając nadmiernego czasu dostać jakąś głębię i zrozumienia)?
Odpowiedzi:
Nie mogę uwierzyć, że nikt nie wspominał o debugowaniu ...
Od wielu lat nie napisałem linii kodu asemblera. Ale czytam to dość często. Debugowanie na wysokim poziomie jest świetne, gdy masz informacje o źródle i symbolach, ale gdy Twoja wymyślna biblioteka zgłasza nieobsługiwany wyjątek na komputerach klientów, jest już za późno, aby wymagać włączenia go do licencji ...
Ale nadal mogę otworzyć dezasembler i zobaczyć, co logika wysokiego poziomu ostatecznie skończyło się robi , ślad złe dane z powrotem do jego pochodzenia, dowiedzieć się, kto zmienił rejestr sterujący FPU ...
To uratowało mi boczek częściej niż o tym myślę. I nigdy nie jest za późno na naukę - w sieci jest mnóstwo świetnych referencji i samouczków , a prawie każdy program uruchomiony na twoim komputerze może zapewnić praktyczne środowisko.
źródło
Nie musisz uczyć się języka asemblera, musisz tylko zrozumieć, jak to działa. Musisz wiedzieć, czym jest XOR i liczyć binarnie podczas snu itp. Ale nigdy w mojej pracy nie potrzebowałem kodu asemblera.
Jak więc mówisz, znajomość rzeczy niskiego poziomu jest ważna, ale praktyczna wiedza w zakresie montażu nie jest.
źródło
Jeśli naprawdę nie masz umiejętności programowania na niskim poziomie, zdecydowanie zaleciłbym naukę w wolnym czasie. Nie musisz być w tym ekspertem; po prostu osiągnij pewien poziom biegłości. Musisz samodzielnie wykonać wiele zadań matematycznych, zamiast polegać na kompilatorze lub bibliotekach. Pomoże ci to zrozumieć czytelność w programowaniu, ponieważ większość instrukcji montażu odpowiada jednej instrukcji procesora. Musisz samodzielnie zarządzać złożonością w nieco większych programach, bez korzyści takich jak
if...else
. Pomoże ci to pisać prostsze programy wysokiego poziomu, ponieważ doświadczenie w montażu nauczyło cię, o ile łatwiej jest czytać.Pamiętaj też, że to zgromadzenie nie jest językiem! Jest to ogólny termin, który w zasadzie oznacza zestaw instrukcji procesora, który został wyodrębniony do języka symbolicznego. Różne procesory mają różne zestawy instrukcji, a zatem różne języki asemblera. Kiedy uczysz się „montażu”, uczysz się procesu, a nie języka.
źródło
Zawsze będziesz czerpać korzyści z zaglądania pod kołdrę i lepszego zrozumienia tego, co kryje się pod abstrakcją, na której stoisz. Jak powiedział kiedyś mój profesor college'u: „Wszyscy dobrzy programiści rozumieją sprzęt” - nie musisz być w stanie tworzyć obwodów i manipulować nimi, ale powinieneś mieć pojęcie o tym, co się tam dzieje - to tylko sprawi, że ty lepiej.
Spróbuj organizacji i projektowania komputera
źródło
Tak - ciągłe uczenie się przez całe życie jest niezbędnym elementem kariery w tworzeniu oprogramowania. Jeśli jesteś zainteresowany dalszą nauką programowania i ulepszania swojego rzemiosła, to tak, w pewnym momencie powinieneś nauczyć się asemblera, ponieważ wystawi cię to na zupełnie nowy język i sposób pisania kodu. Z tego samego powodu zalecam eksperymentowanie z wieloma językami / stylami programowania, w tym Ruby / Python (język dynamiczny), Haskell / F # (czysty język funkcjonalny), Lisp / Scheme (język funkcjonalny) itp.
Powiedziałbym, że jest już za późno, jeśli nie jesteś już zainteresowany zdobywaniem wiedzy na temat programowania. Na przykład, jeśli osiągnąłeś punkt w swojej karierze, w którym możesz wkrótce przejść od programowania do innego obszaru, takiego jak zarządzanie, inżynieria systemów, sprzedaż / marketing itp. Jeśli uważasz, że możesz chcieć przenieść się do nowego obszaru w przez kilka następnych lat skupię się bardziej na umiejętnościach niezbędnych do rozwoju w tej dziedzinie, zamiast na programowaniu.
źródło
Powinieneś wiedzieć, co to jest i co robi komputer. Nauka czegoś takiego jak Knuth's MIX pomoże ci. Przeważnie jest w stanie ocenić wydajność twojego kodu. Zdobądź sztukę programowania komputerowego i przeczytaj ją. To sprawi, że będziesz mądrzejszym programistą.
źródło
Odpowiedź:
źródło
Myślę, że wraz z rozwojem kariery osiągasz punkt malejących zysków. Oznacza to, że powinieneś nauczyć się języka asemblera wcześnie, ponieważ prowadzi to do lepszego zrozumienia wszystkiego, co nastąpi później. Jeśli jednak jesteś już zatrudniony i masz kilkuletnie doświadczenie, już wiesz, jak to działa, więc poznanie faktycznych szczegółów może nie dać ci tyle wglądu .
źródło
Nie wiem, ile przydałoby się studiowanie asemblera. Ale przynajmniej wykonanie programowania w języku takim jak C byłoby korzystne. Ostatnio musiałem programować w C i przekonałem się, że jest to raczej pouczające. C usuwa większość abstrakcji, która jest obecna w językach wyższego poziomu. Te abstrakcje nie przychodzą bez kosztów. Musisz zarządzać większą ilością szczegółów niższego poziomu w C, gdzie podobnie jak w języku wyższego poziomu, te dane są dla ciebie zarządzane. Wykonując programowanie w C, będziesz musiał poznać te szczegóły. Więc kiedy wrócisz do swojego codziennego języka, nadal będziesz miał tę świadomość i lepiej docenisz to, co się faktycznie dzieje. To powinno pomóc ci stać się lepszym programistą.
źródło
W zawodzie nauczyciela, przynajmniej tu, w Wielkiej Brytanii, nauczyciele muszą mieć kwalifikacje znacznie przekraczające to, czego nauczają. Oczekuje się, że nauczyciel w szkole średniej (liceum) będzie miał stopień naukowy z przedmiotu, którego nauczał, a nauczyciele szkoły podstawowej (podstawowej) również mają stopnie naukowe i muszą być biegli we wszystkich głównych przedmiotach do poziomu dobrej klasy GCSE (liceum) egzaminy końcowe ?, brak rzeczywistego odpowiednika w całej USA).
Czemu? Ponieważ aby czegoś dobrze uczyć, a nawet dobrze wykorzystywać, musisz to zrozumieć. Wymaga to zrozumienia podstawowej struktury, łańcucha decyzji przed tą, z którą pracujesz, która do tego doprowadziła. Aby poprawnie zrozumieć kod wysokiego poziomu, musisz zrozumieć warstwę, na której jest zbudowany, jak działa, gdzie leżą jego mocne i słabe strony. Jest to rekurencyjne, aby zrozumieć warstwę poniżej, musisz także zrozumieć warstwę poniżej.
W końcu właśnie dlatego przyzwoite kursy uniwersyteckie w informatyce wymagają dobrych umiejętności matematycznych przed wszystkim innym, ponieważ jest to faktycznie najniższy szczebel.
Jeśli brakuje ci wiedzy w tych obszarach, twoje zrozumienie jest zagrożone. Im bliżej poziomu, na którym operujesz inną warstwą, tym ważniejsze jest, aby mieć w niej uziemienie.
Więc: Czy musisz znać asemblera jako koder wysokiego poziomu? To pomoże.
źródło
Było to bardzo ważne w moim poprzednim życiu jako superkomputerowego guru. Wtedy czułem, że nie rozumiesz maszyny, dopóki nie napisałeś co najmniej kilkuset wierszy asemblera i majstrował przy niej, próbując wycisnąć wydajność. Ponieważ bardzo niewielu programistów chciało zajść tak głęboko, uczyniło mnie to naprawdę niezbędnym. Nadal mam wspólny język, rozmawiając z projektantami HW.
Ale tak naprawdę potrzeba / korzyść z tego wynika już kilkadziesiąt lat temu. Pomiędzy postępami kompilatora a zaawansowanym wykonywaniem poza kolejnością HW jest bardzo mało możliwości grania w bohatera poprzez pisanie asemblera. Chociaż uważam, że warto zrozumieć, jak to działa. Planuję uczyć moje dzieci (studentów pierwszego roku kierunków CS) programowania w bardzo uproszczonym asemblerze na prostej maszynie wirtualnej, aby mieli wyczucie tego, co się dzieje. Mamy nadzieję, że będziemy mogli bawić się takimi rzeczami, jak rozwijanie, tworzenie potoków oprogramowania, buforowanie i pobieranie wstępne, ładowanie od dołu itp. Więc przynajmniej będą wiedzieli, że na pewnym poziomie to się dzieje.
źródło