W ilu językach programowania oczekuje się, że programista będzie ekspertem? [Zamknięte]

21

Czy większość programistów specjalizuje się w jednym stosie, pozostawiając inne rzeczy, czy też są ekspertami w wielu językach jednocześnie? Jeśli jest więcej niż jeden, ile jest standardowych?

Przez eksperta rozumiem nie tylko znajomość składni języka - ekspert zna wystarczająco dużo standardowych bibliotek, narzędzi, środowisk i składni, aby móc pisać niebanalne programy bez konieczności ciągłego przeszukiwania lub czytania książek / samouczków.

Blueberryfields
źródło
2
Nie sądzę, aby na to pytanie była obiektywna (lub nawet subiektywna) odpowiedź. Im bardziej jesteś ekspertem, tym lepiej dla Ciebie - tym szersza perspektywa masz. Czy miałeś na myśli „W ilu paradygmatach języka programowania programista powinien być ekspertem?”
talonx,
6
Nie zgadzam się z twoją definicją eksperta. Dla mnie to, czy musisz wyszukiwać funkcje biblioteki, jest o wiele mniej ważne niż to, czy możesz pisać idiomatyczny kod w tym języku. Jeśli potrafisz myśleć w języku, jesteś co najmniej bliski bycia ekspertem.
Chinmay Kanchi,
1
Jak myślisz w języku, jeśli musisz wyszukać większość słów w słowniku, aby wiedzieć, co one oznaczają?
blueberryfields,
1
@blueberryfields: Biegła znajomość języka to znacznie więcej niż tylko słownictwo, a poza podstawami słownictwo jest jego niewielką częścią. Nie jest dobrze wiedzieć, że funkcja istnieje, jeśli nie możesz zrobić czegoś inteligentnego z tą wiedzą. O wiele łatwiej jest po prostu wyszukać funkcję niż dowiedzieć się, jak zrobić z nią coś inteligentnego. Powiedziałbym, że znajomość dokumentów wystarczająco dobrze, aby szybko wiedzieć, gdzie szukać danej funkcji, jeśli istnieje, to wystarczająca wiedza z biblioteki. Następnie zapamiętasz dokładnie te, których używasz, i niejasno zapamiętasz te, których nie używasz.
aaronasterling,
2
@blueberryfields: W zależności od języka / platformy , trochę wiedzy może być rzeczą niebezpieczną . Mam na myśli: jeśli ktoś twierdzi, że zna wiele funkcji bibliotecznych na pamięć i nie musi czytać dokumentacji, oczekiwałbym, że ta osoba również zna wszystkie zwracane wartości, warunki wyjątków oraz pułapki / zastrzeżenia, à la Raymond Chen na pamięć i móc napisać książkę i wygłosić wykład dla Microsoft / Google itp. Krótko mówiąc, osoba ta popełnia wiele zabawnych drobnych błędów.
rwong,

Odpowiedzi:

33

Główną zaletą znajomości wielu języków nie jest ich bezpośrednie pisanie. Wszystkie inne rzeczy są jednakowe, wolę pracować z programistą C #, który zna również C, Python i Lisp (na przykład), niż tym, który kiedykolwiek hakował tylko w C #. Nie jest tak, że znajomość większej liczby języków jest lepsza, ale możliwość myślenia o problemach na wielu poziomach i z wielu perspektyw jest naprawdę pomocna.

Język programowania, który nie zmienia sposobu myślenia o programowaniu, nie jest wart poznania. -Alan Perlis

Nie chodzi o sprawdzanie jeszcze jednego języka lub umieszczanie go w CV; musisz po prostu zrozumieć jego podstawowe pojęcia na tyle dobrze, aby zaprogramować je, aby uzyskać pełne korzyści. Nie uzyskasz tego dzięki podstawowej znajomości składni.

Bardziej bezpośrednią odpowiedzią jest „to zależy”.

W większych firmach oczekuje się / możesz się specjalizować, ale jak powiedziałem powyżej, uważam, że zrozumienie rzeczy wykraczających poza twoje ulubione narzędzie jest nadal korzystne.

W mniejszych miejscach naprawdę nie można tego uciec. Jeśli nic więcej, zwykle musisz utrzymywać swoją aplikację, a także ją budować, i prawdopodobnie nie powinieneś używać tych samych języków do uruchamiania dzienników / mungingu, tak jak robisz to podczas tworzenia aplikacji. Wydaje mi się, że technicznie można uciec od znajomości jednego języka, ale korzyść z posiadania dobrze działającego, silnie napisanego (lub przynajmniej zdolnego do asercji), prawdopodobnie skompilowanego języka jest bardzo ważna, i języka skryptowego do obsługi / Zadania konfiguracji / skryptowania wydają się dość duże. Na pewno nie chciałbym się bez tego obejść.

Inaimathi
źródło
3
tak, to także poszerza mój horyzont - myślenie w wielu językach, aby rozwiązać problem
maz3tt
3
+1 do wszystkich powiedzianych Inaimathi. Pomyśl o języku programowania jako narzędziu. Tak, musimy bardzo dobrze znać nasze narzędzie, ale jeśli wiesz tylko, jak używać młotka, wszystko może wyglądać jak gwóźdź
Liviu T.
14

Masz bardzo interesujące pytanie:

Nie sądzę, że każdy programista powinien być „ekspertem” w konkretnym języku. Wierzę, że jako programiści mamy być ekspertami w programowaniu, projektowaniu algorytmów, myśleniu jasnymi krokami, ale język programowania jest czymś, czego się po prostu uczysz.

„Dobry” programista, mam na myśli to, że obsługuje projekty programistyczne bez obawy o klasyczne „Nigdy wcześniej z tym nie pracowałem”, powinien nauczyć się języka w mniej niż 5 dni roboczych. Uczysz się najlepszych praktyk, narzędzi i bibliotek głównie na 2 sposoby, 1: czytanie i 2: praca. Albo odbijesz głowę od kodu, albo przeczytasz kilka książek.

W ciągu kilku lat po założeniu, że „dobrzy programiści piszą tylko kod” bez kodu C #, kodu C ++ lub kodu Java, zdasz sobie sprawę, że po nauczeniu się programowania, język i technologie nie są już tak ważne. Jasne, będziesz wiedział, jak poruszać się po C # lepiej niż PHP, ale jeśli dobrze się nauczyłeś, znajdziesz drogę do Pythona, jeśli będziesz musiał.

Mam nadzieję, że moje pomysły jak ty!

David Conde
źródło
+1 „dobrzy programiści piszą tylko kod ... język i technologie nie są aż tak ważne” - to prawda, ale do dojścia do takiego wniosku potrzeba sporo uwagi.
Orbling
Dzięki, masz rację: 11 lat i wciąż się liczy ... :)
David Conde
3

Jeden, ale to nie znaczy, że możesz zaniedbać inne. Musisz wiedzieć wystarczająco dużo, aby uzasadnić, dlaczego ich nie używasz lub znać swoje ograniczenia, aby w razie potrzeby poprosić o pomoc.

JeffO
źródło
3

Myślę, że to prawdopodobnie zależy od twojej osobowości, są ludzie, którzy lubią kopać w zakamarkach tematu, i są inni, którzy lubią mieć szeroki wgląd w rzeczy. Prawdopodobnie będziesz musiał dowiedzieć się, jakim typem osobowości jesteś. Nie stawiam jednego nad drugim, każdy ma swoje zastosowanie.

Jako pierwszy będziesz ekspertem, guru, specjalistą. Jako ten ostatni będziesz miał bardziej ogólne zastosowanie i może być używany w różnych sytuacjach, ale być może nie zagłębisz się zbyt długo w temat.

Harald Scheirich
źródło
2

Jeden. Ale lepiej bądź w tym cholernie dobry.

Satanicpuppy
źródło
2

Jeden

Ten przed tobą.

Steven A. Lowe
źródło
1
+1 Liczba języków, w których musisz być ekspertem, to minimalna liczba, z której musisz korzystać. ;-)
Orbling
1

Jak powiedział Joel w podcastu SO, lepiej poznać wiele języków i wiedzieć, jak / kiedy używać właściwego języka do zadania. Są rzeczy, które możesz zrobić znacznie szybciej w jednym języku niż w innym. Myślę, że dobrze byłoby na przykład znać język imperatywny i funkcjonalny. Wiele razy nauka trudniejszego lub bardziej ezoterycznego języka uczy twojego mózgu, aby być ogólnie lepszym programistą.

chiurox
źródło
1

Brak, ponieważ prawdopodobnie są programiści, którzy nie będą ekspertami w żadnym języku, ale lubią różnorodne środowisko i używają różnych języków w zależności od okoliczności, ponieważ niektórzy mogą znać kilka technologii po stronie serwera, takich jak PHP, ASP.Net w C # .Net lub VB.Net lub Java, kilka języków skryptowych po stronie klienta, takich jak JavaScript lub Flash, i nie wymaga to żadnego sprzętu używanego do umieszczania tutaj treści internetowych.

Jednocześnie mogą istnieć programiści, którzy są ekspertami w kilkunastu językach lub więcej, ponieważ przez większość czasu uczą się raczej wiernie, aby nadążyć za każdym krokiem w każdym języku.

JB King
źródło
1

Jedna, ale musi umieć czytać nietrywialne programy z prawdziwego świata, które od czasu do czasu są pisane w kilku innych językach. W pewnym sensie ten, w którym programista jest ekspertem, przypomina ich język ojczysty, myślą w nim, ale nauka i mówienie innymi językami jest bardzo dobra, ponieważ pokazuje, że programista może docenić inne sposoby myślenia. Jeśli potrafią myśleć w więcej niż jednym języku tak płynnym jak język ojczysty, to jest niesamowite.

vpit3833
źródło
1

To dobre pytanie, ale nie sądzę, żeby istniał standard. Zwykle dzięki temu, co widziałem, ludzie są pełnymi ekspertami w jednym języku wysokiego poziomu (C ++, Java itp.) W jednym środowisku (Windows / Linux, Mac, Solaris). Znają z grubsza jakiś inny język wysokiego poziomu, ale nie do końca go rozumieją. (np. C ++, ludzie Java znają się z grubsza). Z grubsza mam na myśli, że mogą porównać wydajność jednego zadania w języku, w którym są ekspertami, oraz w drugim języku. A potem są umiarkowani w niektórych językach skryptowych. (np. ludzie Linuksa znają bash, ludzie Windows znają VBA, ludzie WWW znają PHP).
Dla mnie liczy się podstawowa znajomość algorytmu niż język. Jeśli twoje podstawy są dobre, masz mniejsze szanse na bałagan w dowolnym języku.
Ale tak, czasem warto wiedzieć, który język może być lepszy do danego zadania. np. poniższy kod jest znacznie szybszy w pascal niż w C.

strcat (A, „Hello”); strcat (A, „WOrld”); strcat (A, „I say hi!”);

Wynika to z tego, że Pascal zapisuje długość łańcucha w pierwszej lokalizacji, a zatem łatwo jest przeskoczyć do ostatniej lokalizacji. W C zakończeniem łańcucha jest „\ 0”, a zatem będziesz musiał przejść cały łańcuch w celu wykonania operacji strcat.

Manoj R.
źródło
0

To zależy od środowiska, w którym programujesz. W poprzedniej pracy większość mojej pracy była w Perlu; w tamtym czasie byłem w tym dość biegły. Teraz pracuję w miejscu, które ma starsze programy w trzech językach, które ledwo znam składni; Oczekuję, że będę je utrzymywał oprócz pracy nad nowymi projektami. Teraz jestem mniej mistrzem jakiegokolwiek języka, ale myślę, że lepiej się programowałem . Nauczyłem się myśleć bardziej abstrakcyjnie, najpierw zobaczyć duży obraz, a następnie wyszukać składnię i biblioteki, aby uzupełnić szczegóły.

Bruce Alderman
źródło