Czy jako programista powinienem znać języki programowania niskiego i wysokiego poziomu? [Zamknięte]


18

Skontaktowano się z nami w sprawie niektórych prac związanych ze zdalnym sterowaniem wyświetlaczy LED przez TCP / IP, ale moje doświadczenie i przygotowania dotyczą głównie języka programowania wysokiego poziomu. Powiedziałem to osobie, która skontaktowała się ze mną w sprawie pracy, a on powiedział mi, że:

„jeśli nazywasz siebie programistą, powinieneś znać wszystkie te rzeczy”

Czy programista powinien naprawdę znać szczegóły programowania niskiego poziomu? Czy też mogę potraktować to jako koncepcję czarnej skrzynki, jako wiedzę teoretyczną, ale niekoniecznie robienie tego lub wdrażanie rozwiązań językowych niskiego poziomu, mając na uwadze, że programowanie na niskim poziomie nie jest moją wiedzą?


8
Gdy programujesz na wysokim poziomie, musisz maskować niższe poziomy abstrakcji, inaczej nic nie da się zrobić. Przydaje się jednak możliwość pracy na niższych poziomach, tylko nie próbuj robić wszystkiego od wszystkich poziomów abstrakcji na raz. Nie musisz, ale jeśli nie, nie ubiegaj się o pracę na niskim poziomie.

1
@delnan: Podczas pracy na wysokim poziomie konieczne jest oczywiście zamaskowanie szczegółów niższego poziomu. Myślę jednak, że każdy programista powinien wiedzieć, w jaki sposób programowane maszyny działają również na niższym poziomie. Wiedza nie musi być zbyt szczegółowa - wystarczy sama wiedza o tym, jak zbudować podstawowy komputer.
Harmonogram

4
„jeśli nazywasz siebie programistą, powinieneś znać wszystkie te rzeczy”. Jeśli tak bardzo cię pragnęli, że przeklęli cię za brak tła, coś jest bardzo nie tak. Zignorowałbym ich komentarz jako zupełnie bez sensu. Albo chcą ciebie z twoim tłem, albo nie chcą ciebie i nie powinni cię przeklinać za tło, którego nie masz.
S.Lott

3
Kolejny przypadek: „Uff, cieszę się, że przegapiłem tę kulę!” Naprawdę nie chcesz pracować dla takiego snoba lub z takim snobem, prawda?
Edward Strange

2
@Schedler - a jeśli nie palą własnych desek, są nowymi.
Edward Strange

Odpowiedzi:


37

Twój kontakt nie wie, o czym mówią. Istnieje wiele języków, metodologii, technologii itd., Więc jedna osoba nie jest w stanie bardzo dobrze znać wszystkich niezbędnych szczegółów. Jako programista musisz wiedzieć, jak nauczyć się, jak wykonać zadanie, i podejść do rozwiązywania problemów, które możesz zastosować, aby znaleźć rozwiązanie, bez względu na to, jakiego języka programowania potrzebujesz.

Przyjmowanie tego, czego nie wiesz, jest w porządku, ale możesz także udowodnić, że jesteś w stanie nauczyć się wystarczająco dużo, aby osiągnąć pożądany rezultat, bez względu na to, z czym masz do czynienia. Dobrzy programiści są po prostu dobrymi rozwiązującymi problemy, które mogą wdrażać swoje rozwiązania w różnych językach programowania.

Nie pracowałbym dla kogoś, kto ma takie podejście, jak twój kontakt.


4
+1: komentarz nie ma sensu.
S.Lott

Chociaż założę się, że jest wielu deweloperów gromadzących tylko osoby, które chętnie go obciążą za godzinę.
Erik Reppen

22

„jeśli nazywasz siebie programistą, powinieneś znać wszystkie te rzeczy”

Zdecydowanie nie zgadzam się z tym stwierdzeniem. To tak, jakby poprosić szefa kuchni o gotowanie czegokolwiek, kierowcę obsługującego każdy pojazd mechaniczny lub lekarza, który znałby wszystkie choroby, co jest absurdalnym założeniem.

Aby zostać programistą, trzeba wiedzieć, jak dać oprogramowanie do pisania w pewnym języku, aby wykonać pewne zadanie w sposób zautomatyzowany. Języki i zadania będą się różnić od programisty do programisty, podobnie jak potrawy, które szef kuchni wie, jak zrobić, kierowca wie, jak obsługiwać, lub lekarz wie, jak diagnozować, będą się różnić w zależności od tego, jak specjalistyczny chce być w każdym zawodzie.


2
Tak, dopóki abstrakcja się nie rozpadnie i nie mają pojęcia, dlaczego ich kod wykazuje problem z wydajnością, dlaczego niektóre biblioteki zewnętrzne powodują awarie / uszkodzenia danych itp. Z mojego doświadczenia wynika, że ​​programiści znający tylko języki wysokiego poziomu po prostu nie są tak dobrzy w swojej pracy jako ci, którzy potrafią robić obie rzeczy jednocześnie.
Ed S.

4
Twój brak punktu. Tak, programiści wysokiego poziomu powinni być w stanie zrozumieć aspekty niskiego poziomu, ale czy powinien wiedzieć, jak napisać aktualizację oprogramowania dla routera Linksys?
wałek klonowy

7
Myślę jednak, że powinni wiedzieć, jak się dowiedzieć. Dużą część współczesnego programowania stanowi wiedza o tym, co należy zapamiętać, a co złożyć jako odniesienie.
Michael K

8

Mówiony jak osoba, która nigdy nie napisała linii kodu w swoim życiu. Będzie to ta sama osoba, która poczuje, że powinieneś być w stanie to zrobić w połowie czasu, który podałeś. Nie kłóć się z idiotą.

Pokazałeś znacznie więcej wiedzy i charakteru, znając swoje ograniczenia. Ta osoba mówi o rzeczach, o których nic nie wie.

Chyba każdy cieśla powinien wiedzieć, jak wyrzeźbić ozdobny mebel. Jeśli pilot może latać jednym samolotem, może latać nimi wszystkimi.


Zgadzam się, bo to jak mówię, że ponieważ jesteś lekarzem, powinieneś wiedzieć, jak wykonać operację na otwartym sercu. Ale w rzeczywistości wiesz, że musi to być specjalista, aby to zrobić, ale w programowaniu różnicy trudno powiedzieć, kiedy patrzysz na to z zewnątrz jako „wszyscy potężni programiści”.
praca

6

Większość programów CS w szkole daje pewną wiedzę na temat programowania niskiego poziomu. Ja, na przykład, miałem klasy asemblera korzystające z procesora 8088 (OK ... to trochę mnie datuje). Myślę jednak, że w dzisiejszych czasach wiele szkół handlowych omija tę wiedzę - jeśli to nieprawda, poproś o komentarz.

Podsumowując, zawsze dobrze jest wiedzieć, co dzieje się na poziomie układu - poza tym języki wysokiego poziomu ostatecznie w końcu tam się znajdą, gdy zostanie uruchomione.

Jednak aby ktoś powiedział ci, że nie jesteś programistą, ponieważ obecnie nie wiesz, że programowanie na niskim poziomie jest ignoranckie. Jeśli potrzebujesz tych umiejętności do bieżącego projektu, powinieneś mieć wystarczająco dużo sprytu lub motywacji, aby nauczyć się umiejętności, których potrzebujesz, a następnie je zastosować.

Musiałbym poważnie rozważyć rezygnację z tego projektu, jeśli klient już z tobą rozmawia w ten sposób - nigdy nie wiesz, gdzie to może pójść.


6

Naprawdę nienawidzę tego, gdy ludzie mówią: „Musisz znać X, aby nazywać siebie programistą”. Naprawdę? Cóż, niektórzy ludzie pracują nad COBOL cały dzień i UWIELBIAM to. Mogli być w tym tak dobrzy i mieć problematyczną domenę, że obok nich wszyscy udajemy.

Poważnie, daj ludziom szacunek do rozwiązywania problemów, na jakie napotykają, w fajny i interesujący sposób. Zrozum, że świetne rozwiązywanie problemów pochodzi z różnych środowisk. Nie to, czy opanowali rzekomą „listę kontrolną” umiejętności, którą każdy powinien znać, aby wszyscy mogli myśleć w ten sam sposób. To jest DOKŁADNA przeciwieństwo tego, czego chcemy. „Lista kontrolna” wszystkich osób jest i powinna być inna. Im bardziej różne, tym lepiej. Programowanie jest rozwiązywaniem problemów w dzisiejszych czasach. Szanuj tych, którzy robią to dobrze i rozumiesz, że wszyscy przychodzą do stołu z różnymi mocami. To jedyny sposób, w jaki pomagamy sobie nawzajem skutecznie pracować jako zespół. To, że znajomość „C” lub czegoś takiego naprawdę pomaga temu jednemu facetowi, jest niesamowita, nie znaczy to, że nie


3

Sugeruję przeczytanie tego:

http://www.joelonsoftware.com/articles/LeakyAbstractions.html

Jak wyjaśniono, podczas korzystania z abstrakcji, niższy poziom zawsze ma wpływ na to, co robisz. Może to być związane z wydajnością, przyczyną awarii, względami bezpieczeństwa i tak dalej.

Tak więc zdecydowanie powinieneś teraz o tych rzeczach. Nie jest to szczególnie specjalista od architektury asm lub procesora. Ale wiedza wystarczająca do udokumentowania samego siebie, kiedy trzeba wiedzieć więcej, jest rzeczywiście koniecznością.


Może muszę wyjaśnić, że wiem, jak działa protokół TCP / IP =). Chodzi mi o to, że implementacja czegoś takiego jak gniazda nad TPC / IP jest poza moją wiedzą, czy mogę się tego nauczyć w locie? oczywiście, czy chcę się tego nauczyć? nie do końca, głównie dlatego, że nie mam pewności, że końcowy wynik zostanie w pełni udowodniony w środowisku produkcyjnym lub spełni wszystkie wymagania w danym czasie. Po prostu myślę, że w tym czasie zajęło mi osiągnięcie poziomu specjalistycznej znajomości języka wysokiego poziomu i nie sądzę, że podany czas wystarczy na poznanie wszystkich błędów, które dają mi ryzykowne wrażenie.
praca

O to chodzi: nie musisz być ekspertem. Ale musisz znać podstawy. Będziesz więc wiedział, jakie są granice abstrakcji, których używasz - to minimum i umiesz dokumentować się, kiedy limit zostanie osiągnięty.
deadalnix

2

Jego argument jest dobrym przykładem logicznego błędu No True Scotsman .

Różnica między programowaniem niskiego i wysokiego poziomu nie jest jednak językiem, to dziedzina wiedzy o aplikacjach. Przypisanie wartości true może oznaczać włączenie diody LED lub włączenie zdarzeń kliknięcia myszy w widżecie. Język nie obchodzi.

Na przykład spójrz na tę bibliotekę do pracy z matrycą LED na arduino. To nie jest nauka o rakietach i naprawdę każdy programista byłby w stanie ją zrozumieć przy odrobinie wysiłku, gdyby nie postawił „niskiego poziomu, och nie!” blok mentalny.


1

Każdy język programowania ma swoje zalety i wady. Nauczenie się kilku, dałoby ci świetne wyobrażenie o tym, czego używać i jak efektywnie z niego korzystać po otrzymaniu projektu.

Jako programista możesz specjalizować się w konkretnej PL, wykorzystując ją jako jedyne narzędzie do rozwiązania dowolnego problemu, możesz także znać dużo PL, ale specjalizować się w niczym i wiele więcej pomiędzy tymi skrajnościami.

Może osoba, która powiedziała ci, że „Fraza” jest sfrustrowana, być może nie byłaś jedyną osobą kontaktową, z którą rozmawiał.

znajomość problemu i wiedza, jaki zestaw umiejętności jest potrzebny do skutecznego rozwiązania problemu, jest jedną z dobrych cech programisty. Niestety w twojej sprawie, ponieważ nie masz wymaganego zestawu umiejętności, być może możesz skierować swoją osobę kontaktową do innego programisty z niezbędnym zestawem umiejętności.

Twoje zdrowie,

nieszczęśliwy


1

Posiadanie wiedzy teoretycznej jest dobre. Bardzo ważna jest umiejętność nauki języka niskiego poziomu w razie potrzeby .

Ale jeśli chodzi o „jeśli nazywasz się programistą, powinieneś wiedzieć te wszystkie rzeczy”, kto może wiedzieć wszystko o wszystkim? Zanim jeszcze to zrobią?


-2

Przepiszę

„jeśli nazywasz siebie programistą, powinieneś znać wszystkie te rzeczy”

DO

„jeśli nazywasz się programistą, powinieneś wiedzieć wystarczająco dużo, aby szybko nauczyć się tych wszystkich rzeczy”

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.