Czy deweloper powinien znać wewnętrzne działanie sprzętu komputerowego? [Zamknięte]

13

Nie mówię tylko o tym, jak przydzielana jest pamięć i zarządzanie pamięcią (rzeczy, których można nauczyć się na przykład z C), ale raczej aspekt sprzętowy i jak każdy element sprzętu komputerowego działa wewnętrznie i jak się ze sobą komunikują.

Ilu z was wie o tym wszystkim?

Adrian
źródło

Odpowiedzi:

31

To zależy od tego, co robisz.

Jeśli jesteś programistą osadzonym (i piszesz bardzo blisko metalu na bardzo małym urządzeniu), musisz znać każdy element systemu.

Jeśli jesteś programistą systemów (i piszesz systemy operacyjne lub sterowniki urządzeń, a może nawet bazy danych), musisz wiedzieć o wszystkim, co należy wiedzieć o interfejsach sprzętowych niskiego poziomu.

Jeśli jesteś programistą gier i spóźniasz się ze swoim projektem (gdzie optymalizujesz rzeczy), musisz poznać tajniki pamięci podręcznej procesora i architektur graficznych, których będziesz używać.

Jeśli jesteś programistą aplikacji, nie musisz nic o tym wiedzieć, z wyjątkiem utrzymywania zużycia pamięci na rozsądnym poziomie.

Jeśli jesteś programistą, dobrze jest znać protokoły internetowe, ale żadne z tych innych rzeczy nie jest konieczne, oprócz tego, jak radzić sobie z problemami z pamięcią.

greyfade
źródło
20
Wiedza o swoim komputerze zawsze sprawia, że ​​jesteś lepszym programistą, nawet jeśli wykonujesz tylko aplikacje biznesowe. Taka wiedza może nie być wymagana, ale z pewnością jest ważna.
Robert Harvey
@Robert Harvey: Poprawnie, dlatego mówię „nie trzeba wiedzieć”. Na pewno i tak nie zaszkodzi wiedzieć. :)
greyfade
2
+1, ale znam (więcej niż) kilku programistów internetowych, którzy nigdy nie rozważają użycia pamięci.
Tim Post
-1 dla „Jeśli jesteś programistą aplikacji, nie musisz nic o tym wiedzieć, z wyjątkiem utrzymywania zużycia pamięci na rozsądnym poziomie.” Niektóre z większych problemów w obecnych systemach są spowodowane tym, że projektanci aplikacji nie wiedzą, jak korzystać z baz danych, a następnie obwiniają dba, gdy „wszystko działa wolno, a to nie jest mój kod; patrz, tam jest profil”.
Andrew Hill,
@AndrewHill: Kiedy jest to kwestia sprzętowa, a nie algorytmiczna? Pytanie dotyczy zrozumienia zachowania sprzętowego niskiego poziomu, a nie algorytmów wysokiego poziomu.
greyfade
12

Nie, nie musisz , ale myślę, że to doskonały pomysł. Nauka ogólnego przeglądu tego, jak rzeczy działają na poziomie logicznym, naprawdę pomogła mi w rozwoju.

Michael K.
źródło
6

Myślę, że komentarze na temat twórców aplikacji i twórców stron są błędne.

Na przykład, jeśli ktoś opracowuje aplikację internetową, która wymaga wielu zabezpieczeń, takich jak ssh lub jakiś inny algorytm szyfrowania, bardzo ważne jest, aby wiedział, na jakim typie sprzętu działa, aby mógł ustalić, czy maszyna rzeczywiście może obsłużyć nakład pracy. Innym przykładem może być serwer, na którym znajdują się pobrane treści. Lepiej znasz możliwości napędu dyskowego i dowolnego rodzaju interfejsu magistrali, do którego jest on podłączony, jeśli oczekujesz stosunkowo dużej liczby żądań.

Z punktu widzenia aplikacji, jeśli tworzysz jakiś program CAD lub coś, co wykonuje renderowanie 3d, możesz oczekiwać, że te aplikacje będą intensywnie obliczać zarówno algorytmicznie, jak i graficznie. Rozsądnie byłoby zrozumieć sprzęt, aby upewnić się, że aplikacja jest responsywna i użyteczna.

Nie twierdzę, że musisz posunąć się do zrozumienia tajników czegoś takiego jak protokół PCI, ale lepiej rozumiesz, do czego zdolny jest interfejs i sprzęt.

Ostatecznie jest to ważne bez względu na to, jaki rodzaj rozwoju robisz. Poziom szczegółowości niezbędny do zrozumienia jest dyskusyjny.

Pemda
źródło
2

Dla profesjonalnego programisty traktuję to jako całościowe podejście do zrozumienia całego systemu , a nie tylko znajomość składni danego języka programowania du Jour . Uważam, że pomaga to programistom (i analitykom) podejmować trafne decyzje projektowe oraz dokonywać bardziej świadomych wyborów algorytmów i struktury danych.

Z własnego doświadczenia wynika, że ​​najlepsi programiści w różnym stopniu wiedzą o wewnętrznym działaniu, niezależnie od tego, czy rozumie natywny zestaw instrukcji montażu dla platformy docelowej, wprowadzający kurs organizacji komputera w szkole, podstawową elektronikę cyfrową, czy potrafi zrozumieć szczegółowo opisy rdzeni CPU i GPU w najnowszych modelach, najlepsze mają bardziej kompletną wiedzę niż ich mniej gwiezdni koledzy.

Mctylr
źródło
1

Nie jestem pewien, czy to pomaga, ale czuję się bardziej komfortowo, gdy wiem więcej o systemie, nad którym pracuję, niż naprawdę muszę. Kiedy byłem młodszy, nie lubiłem nie znać języka asemblera systemu, nad którym pracowałem; albo się zmieniłem, albo nauczyłem się wystarczająco wielu, że jeden jeszcze nie zwiększy mojego odczucia w stosunku do systemu. Nigdy nie byłem facetem od sprzętu, ale mogę rozłożyć komputer na części i wymienić różne podsystemy oraz sposób ich interakcji.

David Thornley
źródło
0

Czego niewiele wiem nauczyłem się na zajęciach z architektury komputerowej prawie 25 lat temu, a także o architekturze nierealnej.

Zajmuję się głównie programowaniem aplikacji na różnych platformach. Był okres, w którym rozwijałem kod do działania nie tylko na zwykłym sprzęcie x86, ale także na Sparc, PA-RISC i innych architekturach serwerów. Wiedza na tym poziomie po prostu nie jest wymagana do mojej pracy.

John Bode
źródło
0

Uczę programowania Java jako klasy liceum AP. Przekonałem się, że gdy uczniowie wiedzą coś o wewnętrznym działaniu komputera, pomaga im to zrozumieć pojęcia programowania.

Nie przesadzam - tylko proste pojęcia, takie jak sposób przechowywania rzeczy w pamięci, wydają się pomagać uczniom.

bestattendance
źródło
0

Odpowiem na to pytanie w tytule:

Tak, programista powinien znać wewnętrzne działanie sprzętu. Ile zależy od rodzaju programisty i jego celów, dostępnego czasu i osobistych zainteresowań. Priorytetem powinny być oczywiście bezpośrednie narzędzia, techniki itp., Które stosują w swojej dziedzinie. Ta opinia jest dobrze zaokrąglona. Im więcej wiesz o rzeczach poza swoim rzemiosłem, bez poświęcania swojego rzemiosła, tym lepiej.

To nie znaczy, że musisz zwariować z Cheese Whiz. Miej dobry wgląd w sprzęt, sposób interakcji elementów i sposób ich wykorzystania przez systemy operacyjne. W związku z tym sugeruję przeczytanie podręcznika pojęć systemów operacyjnych dla wszystkich programistów.

Czy ja to wszystko wiem? Heck no. Zapomniałem tak wiele bezużytecznych informacji o SCSI, że nawet nie jest to śmieszne. Jednak poznanie tego było nieocenionym doświadczeniem. Zapomniałem również wiele innych szczegółów związanych ze sprzętem, ale przypominam sobie ważne pojęcia, których nauczyłem się z tej wiedzy.

Z pewnością sugeruję zapoznanie się ze sprzętem. Rób to w rozsądnym tempie, w zależności od potrzeb. Poznaj jak najwięcej szczegółów, ale skup się na pojęciach.

George Marian
źródło
0

Każdy programista powinien znać podstawowe pojęcia związane z inżynierią komputerową: arytmetyka binarna, konwersja bazy, algebra boolowska, bramki logiczne, skład procesora (i tego, co robią komponenty), pamięć podręczna, pamięć wirtualna, kompresja, wykrywanie błędów i korekta ...

Zakres, w jakim powinny one być znane, zależy od pracy programisty. Jak inni powiedzieli, twórca systemów wbudowanych musiałby być bardziej obeznany z możliwościami sprzętowymi i tym, jak pisać oprogramowanie, które najlepiej wykorzystuje sprzęt niż, powiedzmy, twórca stron internetowych.

Thomas Owens
źródło