W którym momencie mogę powiedzieć, że „nauczyłem się” języka?

67

W ciągu kilku lat programowania bawiłem się wszystkim, od Ruby po C ++. Zrobiłem wszystko, od nauki podstawowej składni (Ruby) po ukończenie kilku dużych (dla mnie) projektów, które poszerzyły moje umiejętności językowe. Biorąc pod uwagę tę różnorodność (i fakt, że prawdziwa nauka języka nigdy się nie kończy), kiedy mogę powiedzieć, że znam (lub nauczyłem się) język?

SomeKittens
źródło
12
Myślę, że słowo, którego szukasz, to „opanowanie” języka, „nauczony” w tym kontekście jest nieco dziwny.
Pieter B
7
„Słowa mają znaczenie: kiedy masz znaczenie, możesz je zapomnieć”. - Zhuangzi
jfrankcarr
9
kiedy nie musisz zadawać tego pytania, dowiesz się, co musisz wiedzieć ...
1
@JarrodRoberson Czy to Zhuangzi też to powiedział?
jadkik94
2
Według LinkedIn jest bardzo niski pasek do umieszczenia języka programowania na twoich życiorysach. Według mojego LinkedIn, ludzie, którzy widzieli kod Java, najwyraźniej czują się dobrze, umieszczając go w dziale umiejętności.
Chris Dale,

Odpowiedzi:

70

W którym momencie możesz powiedzieć, że „nauczyłeś się” języka takiego jak angielski lub francuski? Myślę, że większość ludzi zaakceptuje fakt, że nauczyłeś się języka, kiedy możesz go używać do komunikacji. Nie musisz znać każdego słowa ani rozumieć każdego idiomu, ale powinieneś znać większość (raczej małego) podzbioru języka, którego ludzie używają w codziennej rozmowie. Po „nauczeniu się” języka do tego stopnia możesz dalej uczyć się, gdy używasz języka codziennie i narażać się na coraz więcej. Zanim umrzesz, nadal nie będziesz wiedział wszystkiego, co można wiedzieć o języku, ale nikt nie powie, że nigdy nie nauczyłeś się tego języka.

Myślę, że tak jest z językami komputerowymi. Możesz powiedzieć, że „znasz” język taki jak C ++ lub Ruby, kiedy możesz pisać w nim użyteczne programy. Jeśli chcesz obliczyć stopień znajomości języka, użyj tych samych terminów, których używasz dla języka ludzkiego. Powiedz „Wiem trochę C ++” lub „Wiem konwersacyjny C ++” lub „Mówię biegle w C ++”, co oznacza, że ​​wiesz wystarczająco dużo, by się do tego przyczepić, wystarczająco dużo, aby zrobić użyteczne rzeczy lub że jesteś ekspertem, odpowiednio, kolejno.

Caleb
źródło
15
Pojęcia konwersacyjne i płynne są raczej subiektywne i chociaż są odpowiednie dla języka naturalnego, trudno jest zrozumieć, co one oznaczają, gdy są stosowane w języku komputerowym. Chociaż nadal subiektywne, funkcjonalne i idomatyczne mogą działać lepiej. Funkcjonalność oznacza, że ​​znasz składnię wystarczająco dobrze, aby pisać użyteczne konstrukcje, a posiadanie wiedzy idiomatycznej oznacza, że ​​nie tylko wiesz, jak pisać w języku, ale także znasz go wystarczająco dobrze, aby używać idiomów języka, takich jak używanie usingw języku C # lub b, a = a, bi generatory w pythonie. W przeciwnym razie +1.
Mark Booth
13
@MarkBooth Wszelkie opisy poniżej wyniku na egzaminie będą nieco subiektywne. Chodzi o to, aby wykorzystać znajomość większości języków ludzkich jako przybliżonego przewodnika po znajomości języka komputerowego i zrobić to w przyjazny sposób, który zachęca do dalszych badań. Konwersacyjny C ++ jest skrótem od „Znam podstawy, ale być może będziesz potrzebować pomocy z zaawansowanym, niejasnym lub trudnym kodem”.
Caleb
3
Chociaż myślę, że w większości masz rację, myślę, że wiele osób błędnie zakłada, że ​​nauczyły się języka naturalnego, kiedy wciąż mają nędzny poziom. Dotyczy to również osób, które twierdzą, że nauczyły się języków programowania.
haylem
Myślę, że twoja odpowiedź jest idealna, pokazuje nawet, jak bardzo niemożliwe jest policzenie znajomości języka. Rzeczywiście, chociaż biegła oznacza, że ​​możesz rozmawiać o prawie wszystkim, z taką ilością wyjaśnień, jakiej wymagałby native speaker, nie odnosi się to do faktu, że większość native speakerów nie posiada jednej dziesiątej znajomości języka, którą posiadają dobrzy pradawni pisarze (nie , nie harry potter czy dan brown, prawdziwy stary styl trudny do odczytania). Jak byś sobie z tym poradził, skoro nikt tak naprawdę nie zadał sobie trudu, by zająć się językami? a kiedy w rzeczywistości ma to duży wpływ na wydajność programowania?
Morg.
1
@Morg. Co za śmieci. Programowanie dotyczy zarówno komunikowania się z przyszłymi programistami (w tym sobą), jak i informowania komputera, co ma robić. Pewnie, proste napisanie jednego kodu może nie wymagać dobrej komunikacji, ale w prawdziwym świecie wyjaśnienie twoich intencji przyszłym opiekunom kodu jest o wiele ważniejsze niż nakłonienie komputera do właściwego działania. W każdym razie, te komentarze nie służą już poprawie tej odpowiedzi, więc sugeruję, abyśmy zabrali ją na Czat Inżynierii Oprogramowania, jeśli chcesz omówić ją dalej.
Mark Booth,
25

To zależy od tego, kto pyta

Osoba, która pyta, prawdopodobnie ma pewne pojęcie, jakiego poziomu umiejętności oczekuje się od kogoś, kto mówi, że „nauczył się języka”.

Zasadniczo natknąłem się na dwie archetypowe skale, według których ludzie oceniają odpowiedź na pytanie „czy nauczyłeś się X?”

Dla większości frajerów jest to podchwytliwe pytanie, aby wyeliminować pozerów. Jest to już widoczne w innych odpowiedziach na twoje pytanie;). Jeśli powiesz, że się nauczyłeś, nie widzisz zakresu zadania, które jest domyślnie „doskonałością”, a co gorsza: nie masz pokory.

W przypadku większości bossów „nauczyłeś się”, jeśli potrafisz rozwiązać ich problemy , kryterium czasu jest już spełnione, jeśli Twój kod się skompiluje. Odpowiedź na jego pytanie w skromny sposób doprowadzi go do przypisania tego zadania pozerowi, który może być również krewnym.

Więc jaka jest twoja publiczność?

keppla
źródło
4
W wywiadach znasz to, jeśli wiesz. W miejscu pracy wiesz, jeśli Google to wie.
asfallows
3
W wywiadach jest to „wiem”, jeśli ankieter nosi krawat, i „proszę zdefiniować„ wiedzieć ”, jeśli nie;). Mówiąc szczerze, większość ankieterów pyta, czy ktoś ma „doświadczenie”, na co łatwiej mi odpowiedzieć „tak”
keppla,
18

Myślę, że ludzie skupiają się na tym, aby słowo „wyuczony” było idealnie napięte, co oznacza, że ​​skończyłeś się uczyć. I jak wszyscy zauważyli, języki programowania są żywymi istotami, podobnie jak języki mówione. Na przykład ktoś, kto opanował C # 2, spojrzałby na C # 3 za pomocą LINQ, Lambdas, varsłów kluczowych, inicjalizatorów obiektów / kolekcji i metod rozszerzenia i stwierdziłby, że wiele się zmieniło od tego, czego nauczył się w poprzedniej wersji. To samo dzieje się z C # 4 z await, asyncsłowami kluczowymi i innymi konstrukcjami nowego języka.

Mówimy tutaj o składni. Zapominamy, że większość języków jest połączona z frameworkiem . C # ma platformę .NET, Java ma własną platformę, podobnie jak Ruby, C ++, PHP i PERL. Pomyśl o strukturze języka jako słownictwie, a sam język to tylko składnia. Znajomość języka oznacza, że ​​wiesz, jak zrobić zdanie w tym języku. Znajomość ram oznacza, że ​​możesz dobrze wyrażać się w języku. Na koniec, kiedy poznasz składnię i słownictwo, musisz nauczyć się idiomów , aby pisać kod jako „native speaker”.

Powiedziałbym, że jest kilka poziomów uczenia się.

  1. Hello World (możesz pisać najbardziej podstawowe programy).
  2. Biegły (możesz pisać podstawowe programy, ale musisz regularnie konsultować się z pomocą online)
  3. Biegła (możesz pisać zaawansowane programy z pewnymi potrzebnymi odniesieniami).
  4. Język ojczysty (możesz pisać zaawansowane programy przy minimalnej pomocy online, twój kod jest nie do odróżnienia od kodu innego języka ojczystego).
Michael Brown
źródło
3
Nitpick: awaitpochodzi z C # 5, główną nowością w C # 4 była dynamic.
sick
Masz rację ... Ciągle gubię, która wersja C # pasuje do której wersji .NET
Michael Brown
7

Rzadko można powiedzieć, że nauczyłeś się języka. To oznacza, że ​​skończyłeś się o tym uczyć, co jest ... głupie.

Mówienie, że wiesz, że język jest w porządku, kiedy możesz pisać kod, który nie rażąco łamie idiomy w tym języku (może po tygodniu odrdzewienia wiedzy) bez odwoływania się do odwołania do składni.

Telastyn
źródło
2
Idiomy się zmieniają, style różnią się w zależności od miejsca, a nawet same języki zmieniają się z czasem. Jeśli nie możesz powiedzieć, że „znasz” lub „nauczyłeś się” języka takiego jak C ++, dopóki nie skończysz się go uczyć, to bardzo niewiele osób może twierdzić, że nauczyło się C ++.
Caleb
1
@Caleb dokładnie.
Michael Brown,
3
Jeśli uczysz się w ten sposób, nie znasz nawet swojego języka ojczystego, co również jest głupie (przynajmniej dla większości ludzi)
superM
@Caleb, co gorsza, wiele części c ++ jest lepszych, gdy się je zignoruje, jak zauważyli zarówno Carmack, jak i Torvalds - więc .. poznanie całego cpp nie jest do końca korzystne.
Morg.
3

Jest to bardziej czynnik oparty na opiniach. We wszystkich terminach technicznych „Uczony” oznaczałby pełną znajomość języka, tak jak można się spodziewać WSZYSTKIEGO języka.

Uważam jednak, że w świecie programowania chodzi bardziej o to, czy umiesz płynnie programować w języku, aby zrealizować cel / zadanie. Prawdopodobnie oznacza to również, że nie znosisz języka. Pewnie, że możesz tam iść i uzyskać dyplom po latach studiów, ale to tylko po to, aby zostać zauważonym? Ty decydujesz, kiedy możesz powiedzieć, że nauczyłeś się języka.

Alec
źródło
2

Kiedy zaczniesz zauważać jego wady. Kiedy zaczniesz uczyć się języka, zwykle nadal jesteś zajęty uczeniem się, jak robić rzeczy lub jesteś bardzo zaangażowany w to, aby zauważyć, gdzie się nie udaje (oczywiście, chyba że zaczniesz uczyć się go z negatywnego punktu widzenia, aby zobaczyć, jak gorzej jest jak do tej pory ulubionym językiem). Powiedziałbym, że tak naprawdę nie znasz języka, dopóki nie będziesz w pełni świadomy obszarów, w których on się nie powiedzie.

Ivan Voras
źródło
Nie mogę się z tym zgodzić. Może tak być w przypadku pierwszego lub dwóch języków, których się uczysz - możesz po prostu nie wiedzieć, czego szukać, więc nawet najbardziej wyraźne niepowodzenia projektowe są nie do odróżnienia od właściwego sposobu robienia rzeczy. Kiedy nauczysz się kilku języków, powinieneś zacząć widzieć wady językowe wkrótce po rozpoczęciu nauki nowego. Ale przez jakiś czas w swoim rozwoju błędnie zrównasz „inne” z „złym”. Dopóki nie nauczysz się kilku języków każdego z głównych typów (proceduralnych, OO, funkcjonalnych, deklaratywnych ...), twoje natychmiastowe wyroki będą podejrzane.
Warren Young,
2

Moja osobista odpowiedź na to pytanie brzmi:

  1. Znam podstawy pisania prostego programu na poziomie produkcyjnym.
  2. Spędziłem co najmniej 3 godziny z rzędu, rozwiązując problem, który wydawał się prosty, ale nie był.

Odtąd nie nazwałbym tego nauką, ale opanowaniem.

dukeofgaming
źródło
1

W momencie, w którym Twoja aplikacja lub komponent może czytać pocztę, tj . Prawo Zawińskiego , które stanowi:

„Każdy program próbuje się rozwinąć, dopóki nie będzie w stanie odczytać poczty. Te programy, które nie mogą się tak rozszerzyć, zostaną zastąpione tymi, które mogą. mailer, mówi, to tylko efekt uboczny tego).

Zostało to zaktualizowane, gdy RSS stał się popularny jako „... może czytać kanały RSS” i prawdopodobnie można go teraz zaktualizować do „... może czytać kanały na Twitterze”. ;-)

dodgy_coder
źródło
0

Myślę, że nauczyłeś się języka, gdy go nie widzisz. Nie widzisz cykli i dostępu do danych, ale przepływ pracy algorytmu.

Nie grasz sztuczkami z przekazywaniem parametrów i przetwarzaniem tablic, magicznymi makrami. Nie myślisz o swoim kodzie jako o materiale marketingowym, który możesz pokazać znajomym i nauczycielom, ale aby wyrazić zrozumienie problemu i wolę komputera w najbardziej czytelny sposób.

Masz przyzwyczajenia, które pomagają unikać wielu błędów po prostu przez ich przestrzeganie, na przykład: używaj {} bloków kodu i () w wyrażeniach, nawet jeśli masz absolutną pewność, że „będzie tylko jedna linia” lub „Nie jestem głupcem i wiem kolejność pierwszeństwa operatora ".

Przestajesz liczyć, ile klas, wzorców i interfejsów API znasz. Do tego właśnie służy inteligencja, referencje i samouczki, a także Google. Ale kiedy spojrzysz na problem, od razu wiesz, jakie części można podzielić, a przy pomocy jakich narzędzi i algorytmów je rozwiążesz.

To, co robisz, działa , jest eleganckie i małe . Lubisz kodować i łatwo znajdziesz swoje błędy. Tak, mistrzowie również robią błędy, ponieważ są ludźmi - ale szybko je znajdują, ponieważ ich struktura kodu prowadzi ich we właściwe miejsce.

I wreszcie uświadom sobie: nauczyłeś się myśleć, analizować i rozwiązywać problemy; w porównaniu do nich, rzeczywisty język jest drugorzędny, tylko obecne pudełko reguł i narzędzi.

Lorand Kedves
źródło