Dlaczego wydaje się, że istnieje duży strach przy wyborze „niewłaściwego” języka do nauki? [Zamknięte]

28

Być może to tylko ja, ale jako obecny student CS-a natknąłem się już na wiele pytań na tej stronie i gdzie indziej, dotyczących nie tylko „Jakiego języka powinienem używać dla x?” ale także „Czy ktoś nadal używa języka Y?” Moja pierwsza klasa CS była nauczana w Scheme, który, jeśli się nie mylę, nie jest szeroko stosowany (przynajmniej w porównaniu do języków takich jak Java, PHP, Python itp.). Wielu moich kolegów z klasy niepokoiło się na myśl o nauce języka, którego nigdy więcej nie będą musieli używać, ale nie do końca rozumiem, skąd tyle lęku przed nauką języków mniej popularnych. Nie, nie mogę używać Schematu w żadnej pracy, którą dostaję, ale z pewnością nie żałuję, że nauczyłem się go używać (choć w bardzo początkujący, niezbyt dogłębny sposób w tym semestrze). W tym semestrze biorę klasę wyszukiwarek, co dzieje się w Perlu i znów widzę kolegów z klasy narzekających na wybór języka. Rozumiem, że mam ulubiony język i nie lubię innych, ale dlaczego niektórzy tak się zapracowali na naukę? Czy naprawdę potrafisz nauczyć się „złego” języka? Czy nauka czegoś takiego jak Scheme lub Haskell nie jest dobrym ćwiczeniem umysłowym, jeśli nic innego, i nie jest przydatna przynajmniej w kontaktach z różnymi sposobami rozwiązywania problemów?


źródło
Co ciekawe, moje pierwsze dwa lata edukacji w zakresie CS obejmowały wyłącznie C # i Javę, i zgadnij, czego ostatecznie użyłem w pierwszym miejscu współpracy? Czteroliterowe słowo zaczyna się od „P”.
Anon.
6
@Shewbox, masz rację, są w błędzie, dostaniesz przewagę uczenia się, nie będą. Koniec opowieści.
ocodo
7
Robią SEO (optymalizacja wyszukiwarek) z menedżerami ds. Rekrutacji.
rwong
1
@rwong: i niestety niektórzy z nas musieli nauczyć się, jak nie umieszczać „Użyłem XXX raz i nigdy więcej go nie dotknę”, ponieważ niektórzy recuiterzy spamują przy dopasowaniu słów kluczowych.
1
@JB: 99% ludzi sprawia, że ​​inni wyglądają, jakby się całowali.
Michael K

Odpowiedzi:

27

Celem stopnia CS nie jest nauczenie Cię języka C # i Java, możesz nauczyć się ich na własną rękę. Ma cię nauczyć o programowaniu i obliczeniach. Język to tylko szczegół. W trakcie kariery programistycznej będziesz używać wielu języków. Dzisiaj może to być Java lub C #, ale za 10 lub 15 lat może to być Erlang lub coś, co nawet jeszcze nie zostało wynalezione. Nauka różnych stylów programowania i różnych sposobów atakowania problemu jest o wiele ważniejsza niż nauka jednego języka.

Zachary K.
źródło
Dokładnie - mój stopień naukowy poprzedza C ++, a co dopiero Java lub C #. Chociaż uczono nas głównie w Pascalu, od samego początku mieliśmy problemy w różnych językach, a na drugim roku mieliśmy kurs, który był „językiem miesiąca”, simula (używana do wykonywania symulacji) pozostaje moją największą miłością - chociaż nie ma szans, żebym mógł teraz napisać dowolny kod simula - głównie ze względu na to, czego mnie nauczył (chociaż wtedy go nie znałem)
Murph
17

Ponieważ twój pierwszy język będzie kształtował twój sposób myślenia, dopóki nie nauczysz się inaczej.

Jeśli jesteś analfabetą obliczeniową (pierwszy programista), a pierwszy język, którego się uczysz, jest zbyt „podstawowy”, możesz nie znać pojęć wyższego rzędu, takich jak orientacja obiektowa, wielokrotne wysyłanie, dziedziczenie, funkcje pierwszej klasy, metaprogramowanie itp.

Pierwszy język, którego się uczysz, jest zwykle związany z pierwszą próbą myślenia komputerowego. Jeśli ktoś powie ci, Jimmy, że świat przed tobą składa się z symboli A, B i C, całe twoje myślenie będzie w kategoriach A, B i C. Aż pewnego dnia fantazyjny kujon wyśmiewa cię, że nie znasz X , Y i Z koncepcje. Nie ma mowy, żebyś to wiedział, znając tylko ABC.

Ludzie najbardziej zaniepokojeni czyimś pierwszym językiem to prawdopodobnie oświeceni programiści, którzy walczyli w ciemności. Och, teraz wiem, co to jest funkcja pierwszej klasy. Człowieku, chciałbym wiedzieć o zastrzyku spadkowym i uzależnieniu dwa lata temu!

Twój pierwszy język nie jest tak ważny, jak twoje podejście do kolejnych języków. Jeśli widzisz daleko przed sobą i wiesz, że istnieje świat poza BASIC / C / Perl / PHP / itp., To znacznie wyprzedzasz grę. To dlatego wielu ludzi jest fanatykami języków funkcjonalnych, ponieważ wiele aktywnie rozwiniętych języków zbliża się do nich.

Mark Canlas
źródło
1
Wszyscy jednak musimy zacząć od tych podstawowych pojęć. Gdy ktoś pozna nową koncepcję (weźmy wzorce projektowe jako przykład), przez pewien czas używa się jej wszędzie . Gdybym nie spędził pierwszych 5 lat, które zaprogramowałem w podstawowej strukturze programu nauczania i jak myśleć jak programista, to kiedy dotarłem do OO, byłbym tak zajęty nauką części proceduralnej, że nie mogłem skoncentrować się na Część OO. Biorąc to pod uwagę, +1 za „Twój pierwszy język nie jest tak ważny, jak twoje podejście do kolejnych języków” i pojęć .
Michael K
Myślałem o dodaniu tego. Nie mówiłem wcale, że podstawowe języki nie mają swojego miejsca. W rzeczywistości tak jest (na wczesnych etapach uczenia się). Po prostu o tym nie wspomniałem.
Mark Canlas
O, Michael, twoja edycja jest o wiele bardziej klasyczna, hahahaha.
Mark Canlas
Jeśli koledzy z OP są zaniepokojeni, schemat jest niewłaściwym językiem do nauki, prawdopodobnie nie jest aż tak oświecony. :)
David Moles,
Niektóre języki mają złożoną składnię, podczas gdy w rzeczywistości są proste (pochodne C), inne mają prostą składnię, podczas gdy w rzeczywistości są złożone (Groovy). Rozumiem przez to - w C / C ++ lub Objective-C - rzeczy są dość deklaratywne i proceduralne w każdym aktywnym zakresie kodu, podczas gdy coś takiego jak Groovy ma wiele rzeczy „dziejących się pod maską”, które są „ukryte” przez cukier składniowy. Moją sugestią dla początkujących jest generalnie stosowanie trudnych języków składniowych, które lepiej odzwierciedlają rzeczywisty sposób działania komputera - ponieważ ta wiedza upraszcza korzystanie z innych języków.
dcgregorya
11

Kiedy byłem na studiach, znałem wielu ludzi, którzy zdecydowali się na specjalizację ekonomiczną nie dlatego, że było to coś, czym byli szczególnie zainteresowani lub pasjonaci, ale ponieważ myśleli, że to zapewni im dobrą pracę.

Studiowałem na studiach wschodnioazjatyckich, ponieważ zafascynowały mnie zajęcia, które przyjąłem jako początkowy efekt mojego zainteresowania literaturą. Pojechałem do Niemiec, ponieważ chciałem zrobić program wymiany, w którym spędziłem większość czasu na programach z zakresu japonologii i sinologii. Studiowałem to, co mnie najbardziej interesowało. Zdecydowałem, że nie będę używać college'u do studiowania zagadnień związanych z komputerem, ponieważ w dzieciństwie włamałem się już całkiem sporo, ale spędziłem czas na programowaniu i zrozumieniu Internetu, a być może nieprawdopodobnie , Dostałem dobrą pracę, w której udało mi się połączyć wszystkie te zainteresowania.

Różnica polega między karierą a kimś, kto uczy się w celu uczenia się. Kariera obawia się, że przestudiują „Niewłaściwą rzecz” i że będą tego żałować, ponieważ to nie będzie „właściwa rzecz”. Osoba, która uczy się w celu uczenia się, zdaje sobie sprawę, że ma 4 lata, aby spędzić czas na eksploracji wszelkiego rodzaju dziedzin przy stosunkowo trudnej presji; kariera uważa, że ​​zadaniem szkoły jest nauczenie ich czegoś. Uczący się orientuje, kiedy trafi na nieznane terytorium i ma większą szansę na znalezienie dla niego odpowiedniej pracy. Kariera kończy na drugim stopniu księgowego w firmie trzeciego poziomu, płaci rachunki i jest oburzona na swojego szefa.

Tak, są to archetypy i każdy musi równoważyć pragmatyzm ze swoimi pasjami, ale to zasadnicza różnica. To prawda, że ​​ktoś z estetyką programisty może również zadać pytanie, ale bardziej w kontekście „który z nich będzie najmniej marnotrawnym wykorzystaniem mojego czasu”. Ale przypuszczam, że jest to impuls karierowy, by zadać to pytanie, ponieważ Karierowicz jest znacznie bardziej boi się popełnić błąd niż Uczeń, a Uczeń na ogół czyni lepszego programistę, ponieważ Uczeń nie boi się błędów. Uczeń, podobnie jak programista, przyjmuje porażkę w pogoni za umiejętnościami.

JasonTrue
źródło
9

Tak, nauka języków funkcjonalnych takich jak Scheme i Haskell jest dobra jako wprowadzenie do programowania funkcjonalnego. O ile twoi koledzy z klasy narzekają na Perla, podczas gdy Perl nie jest tak popularny jak kiedyś, z pewnością nadal jest powszechnie używanym językiem w biznesie.

Rozumiem, że twoi koledzy z klasy chcą uczyć się praktycznych języków używanych w prawdziwym świecie, ale myślę, że nie rozumieją tego, że kiedy jesteś doświadczonym programistą i zostałeś wystawiony na kilka paradygmatów programowania, nauka nowych języków jest w większości kwestią wybrania nowa składnia. Tak więc, dopóki masz kontakt z tymi pojęciami, możesz „specjalizować się” w jakimkolwiek języku, który preferuje Twój pracodawca, bez większych trudności.

Zeke
źródło
5

Być może dlatego, że ludzie byli pod wpływem takich stwierdzeń, jak klasyczny trolling Edsgera Dijkstry: „Praktycznie niemożliwe jest nauczanie dobrego programowania dla studentów, którzy wcześniej mieli kontakt z BASIC: jako potencjalni programiści są okaleczeni psychicznie poza nadzieją na regenerację”. ( link )

Prowadzi to do strachu przed trwałym uszkodzeniem mózgu, jeśli nauczysz się „złego” języka. Twój przykład w Perlu nie jest zaskakujący, ponieważ Perl jest jednym z tych języków, który często powołuje się na taką krytykę ze strony swoich krytyków.

Carson63000
źródło
5

Twój pierwszy język powinien koncentrować się na pojęciach, a nie na składni i idiomach. Wykorzystując to jako wskazówkę:

  • Perl oznacza dużo wyszukiwania specjalnych zmiennych i tajemnej składni
  • PHP oznacza mieszanie pojęć ze względu na organiczny rozwój
  • Java oznacza małe zamieszanie, ponieważ nie wszystko jest naprawdę jest przedmiotem
  • Asembler / C / C ++ oznacza masę rzeczy niskiego poziomu, co jest świetne, jeśli chcesz tworzyć systemy wbudowane, ale szkodzi koncepcjom wyższego poziomu
  • SQL jest przydatny, aby zobaczyć, w jaki sposób język naturalny może (i nie może) być odwzorowany na kod i struktury danych
  • Visual Basic for Applications koncentruje się na specjalnych zadaniach polegających na wyrzucaniu i dlatego zbyt łatwo można pominąć ważne pojęcia, takie jak poprawna obsługa błędów i refaktoryzacja
  • SEPLENIENIE wygląda jak prosta składnia, ale ma też zbyt wiele skrótów, które są szczerze mówiąc pozbawione znaczenia bez szczegółowej znajomości ich pełnych nazw
  • Haskell często bardzo przypomina matematykę, ale może szybko przerodzić się w zupę składniową
  • Python ... W rzeczywistości Python jest jedynym językiem, na który nie mogę znaleźć poważnych zastrzeżeń dla początkujących. Może po prostu dlatego, że jest to ostatni język, którego się nauczyłem, a następny język nauczy mnie błędów na moich drogach.
10b0
źródło
Zauważyłem, że nie napisałeś nic o C # ani VB.Net.
HK1
4

Zapytaj kolegów z klasy, skąd wiedzą, że język jest „zły”, jeśli go nie używał. Możesz dowiedzieć się, co lubisz, korzystając z szerokiej gamy języków.

Wielu moich kolegów z klasy niepokoiło się na myśl o nauce języka, którego nigdy więcej nie będą musieli używać, ale nie do końca rozumiem, skąd tyle lęku przed nauką języków mniej popularnych.

Nie znając ich, nie mogę z całą pewnością powiedzieć, dlaczego tak by się czuli. Może są leniwi. Może wcześniej używali tego języka i go nie lubili. Być może boją się wypróbować inny język. Kto wie. Wiem tylko, że jako student CS, badacz i pracujący w przemyśle, znajomość różnych języków, cóż, jest ogromnym atutem i nigdy nie wiesz, czego będziesz używać, czy nie. Przykład: Kiedy uczyłem się po raz pierwszy C, mój nauczyciel zapoznał nas ze skryptami powłoki i narzędziami wiersza poleceń, takimi jak grepi awk. Moi przyjaciele nie zadali sobie trudu, aby nauczyć się ich do poziomu kompetencji. Teraz używam ich w pracy codziennie.

W tym semestrze biorę zajęcia z wyszukiwarek, które odbywają się w Perlu i znów widzę kolegów z klasy narzekających na wybór języka.

Perl jest bardzo potężny i jeśli wiesz, jak go używać, może znacznie ułatwić Ci życie. Jest również podobny do Pythona, a Python jest intensywnie używany przez jednego z najlepszych rekruterów studentów CS: Google. Twoi koledzy z klasy powinni to zjeść. FWIW, znam perla i pytona na poziomie pośrednim (nie początkującym, ale nie ekspertem).

Rozumiem, że mam ulubiony język i nie lubię innych, ale dlaczego niektórzy tak się zapracowali na naukę?

Młody i próżny? Też tak byłem. Ale moja „irytacja” bardziej dotyczyła matematyki. Z tego doświadczenia postawiłbym więc na to, że są na to przygotowani, ponieważ nie lubią uczyć się nowych rzeczy lub że trudno jest im się nauczyć nowych języków. (Ale wtedy wszystko, co warto wiedzieć, nie spadnie ci na kolana, mówię)

Czy naprawdę potrafisz nauczyć się „złego” języka? Czy nauka czegoś takiego jak Scheme lub Haskell nie jest dobrym ćwiczeniem umysłowym, jeśli nic innego, i nie jest przydatna przynajmniej w kontaktach z różnymi sposobami rozwiązywania problemów?

Do pierwszego zdania: Nie, ale zdecydowanie możesz nauczyć się języków, których wolałbyś nie mieć + kaszel + Lisp + kaszel + =)

Do reszty: Tak! Powinieneś nauczyć się jak największej liczby języków, aby dowiedzieć się, co lubisz i poszerzyć swoje horyzonty. Nie ma wymogu opanowania ich wszystkich, ale posiadanie praktycznej wiedzy jest zawsze pomocne. Nigdy nie wiadomo, kiedy przydatny jest język, który Twoim zdaniem byłby stratą czasu na naukę.

wodny
źródło
1
Co jest nie tak z Lisp?!?! :)
Michael K
1
+1 za „ucz się jak największej liczby języków”. Jeśli znasz różne języki, wybór jednego do danego zadania staje się banalny.
Michael K
1
@Michael: Co więcej, łatwiej jest nauczyć się nowego, ponieważ znasz już większość koncepcji.
David Thornley,
@Michael: Nic złego w Lisp =). Po prostu nie jestem facetem w języku programowania funkcjonalnego. Plus, tyle nawiasów !! Widziałem jednak bardzo BARDZO eleganckie rozwiązania zaimplementowane w Lisp. Szacunek dla guru Scheme i Lisp.
aqua
3

Ponieważ zatrudnianie programistów jest tak arbitralnym, kapryśnym procesem, prosty fakt jest taki, że jeśli wybierzesz niewłaściwą technologię, możesz znaleźć drogę do dodo

Na pierwszej stronie w dowolnym momencie zobaczysz zapał religijny w takich przekonaniach, jak:

  1. Wykształcenie informatyczne jest niezbędne, aby być dobrym programistą.
  2. Magister informatyki sprawia, że ​​ludzie są złymi programistami.
  3. Certyfikaty są absolutnie niezbędne do rozwoju kariery.
  4. Certyfikaty są czerwoną flagą wskazującą zły programator.
  5. Dyplom ukończenia studiów w dziedzinie innej niż informatyka zwykle prowadzi do najlepszych programistów.
  6. Nie jesteś dobrym programistą, chyba że programujesz także wieczorami i weekendami.
  7. i idzie dalej.

Jedna stała w tym wszystkim jest to, że 99% firm tam chcą, aby mieć X -letnie doświadczenie z Y technologii ... A ponieważ człowiek ma tylko tyle cykli dostępne, co wydają te cykle w sprawach dużo.

czerwony brud
źródło
2

Myślę, że strach przed wyborem „niewłaściwego” języka do nauki wynika głównie z braku informacji i wskazówek , takich jak:

  • Błąd srebrnej kuli . Błędne przekonanie, że istnieje odpowiedni język dla pracy, środowiska lub projektu. A jeśli wybierzesz niewłaściwy, toast.
  • Nie rozumiem, że programowanie wykracza poza języki . Język to tylko narzędzie, takie jak maszyna do pisania lub komputer do pisania. Nie chodzi o uczenie się niuansów narzędzia (składnia), ale o to, co narzędzie umożliwia (koncepcje, abstrakcje itp.) Do tworzenia.
Maglob
źródło
Dlatego na przykład Scheme jest tak świetnym językiem nauczania. Programowanie dotyczy dwóch rzeczy: abstrakcji i ponownego użycia. Schemat ma dokładnie dwie cechy: abstrakcję funkcji i wywołanie funkcji (tj. Ponowne użycie). Cholera, nawet nie ma składni!
Jörg W Mittag
2

Jesteśmy narażeni na więcej opinii.

W porównaniu do tego, jak rzeczy mogły być zrobione w przeszłości, istnieje więcej domysłów, dotyczących tego, jak spędzamy czas, ponieważ jesteśmy narażeni na więcej opinii - każdy ma przemyślenia na temat tego, jaki powinien być pierwszy język programowania i ponieważ jest to tak wybredny temat, każdy może uzasadnić wszystko .

Ze względu na nasz szybko zmieniający się styl życia każdy ma wrodzony strach przed marnowaniem czasu. Podkreślony lęk przed nauką niewłaściwego języka jest po prostu wynikiem łatwego narażenia ludzi na wiele opinii.

Jonathan Khoo
źródło
1

To ogólna niechęć do uczenia się czegoś, co ma wątpliwą przydatność. Widzę, że żądło jest jeszcze gorsze, ponieważ jest to klasa, którą ludzie chcą wziąć i wciąż uczą się czegoś, co ich zdaniem jest bezużyteczne. Wiem, że gdybym miał kolaż, chciałbym nauczyć się czegoś, co mogę wykorzystać w prawdziwym świecie.

Jedyną częścią, w której mógłbym się nie zgodzić z innymi ludźmi, jest to, że język jest intensywnie używany, a oni po prostu nie chcą wyjść poza bańkę, aby się go nauczyć. Dopiero wtedy narzekanie nie ma sensu.

TheLQ
źródło
1

Dlaczego to „strach”. Nazwałbym to animozją zmuszania do karmienia siłą czegoś, czego nie chcesz lub nie czujesz, że jest to ważne. Żaden język nie jest zły, ale mamy ograniczony czas na skupienie się na rzeczach. Musiałem robić moje zajęcia CS z Javą i nie byłem z tego powodu zadowolony. Nie dlatego, że obawiałem się, że Java jest niewłaściwym językiem, ale nie na tym polegała moja kariera.

Teraz Java jest przydatna, prawda? LOL Każdy uczy się Java. Właśnie w tym nie chcesz brać udziału. Twoje CV będzie w stosie 1000 z nagłówkiem Ostatni CS Graduate, który zna Javę. Prawdopodobnie lepiej rozumiesz schemat uczenia się, ponieważ jest to tajny znak, że poszedłeś na elitarny uniwersytet, a nie do jakiegoś głupiego college'u.

Powiedziałbym również, że tego rodzaju animozja jest znacznie szersza niż CS w ogóle, ale wskazuje na wyższe wykształcenie w ogóle. Jestem pewien, że instruktor wybrał Perla, ponieważ zna Perla i może go łatwo ocenić, i obawia się nauki nowych języków, których uczniowie wolą się uczyć. Myślę, że to twoja własna edukacja i powinieneś być w stanie określić technologie, które Twoim zdaniem są niezbędne dla twojego sukcesu.

(PS MIT zrezygnował ze schematu i przeszedł na Python)

Nate C
źródło
Trochę smutne z powodu rezygnacji z programu, SICP jest czymś, co powinien przeczytać każdy programista. Mam tendencję do promowania go przy każdej okazji.
Zachary K
To przypomina mi moje dni uniwersyteckie. Kilka lat po tym, jak zacząłem, dział CS przeszedł z C ++ na Java jako główny język nauczania. Kilka lat później (kiedy próbowałem uczyć samouczków dotyczących struktury danych) stało się jasne, że żaden z uczniów nie rozumiał nic na temat alokacji pamięci (np. Całkowicie stracili na stosie vs. stercie). W związku z tym nie zrozumieli podstawowych operacji na strukturach danych, których próbowaliśmy ich nauczyć. Niedługo potem C ++ znów stał się ulubionym językiem.
smithco
W praktyce - nauka nowych języków jest łatwa, gdy rozumiesz programowanie. Ludzie polecają języki takie jak C, ponieważ wymaga to deklarowania wskaźników i przydzielania pamięci oraz ochrony dostępu do zapisu do wskaźników ... kiedy myślisz w tych kategoriach, wszystko inne jest dość łatwe, ponieważ już rozważasz wszystkie te rzeczy. Trudniej jest zrobić na odwrót - zaczynając od bardziej abstrakcyjnego języka, a następnie budując doświadczenie, aby zrozumieć wszystkie podstawowe rzeczy, które się dzieją.
dcgregorya
1

Czas jest najrzadszym towarem ze wszystkich, gdy tylko wydostaniesz się do prawdziwego świata - i nikt nie chce tracić czasu na umiejętności, które nie przyniosą mu żadnej realnej korzyści.

Biorąc to pod uwagę, nie sądzę, aby można było nauczyć się „złego” języka - ale szkoda, że ​​nie odkryłem Ruby wiele lat temu zamiast zajmować się zaawansowanymi rzeczami w PHP ...

sevenseacat
źródło