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?
28
Odpowiedzi:
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.
źródło
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.
źródło
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.
źródło
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.
źródło
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.
źródło
Twój pierwszy język powinien koncentrować się na pojęciach, a nie na składni i idiomach. Wykorzystując to jako wskazówkę:
źródło
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.
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
grep
iawk
. Moi przyjaciele nie zadali sobie trudu, aby nauczyć się ich do poziomu kompetencji. Teraz używam ich w pracy codziennie.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).
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ę)
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ę.
źródło
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:
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.
źródło
Myślę, że strach przed wyborem „niewłaściwego” języka do nauki wynika głównie z braku informacji i wskazówek , takich jak:
źródło
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.
źródło
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.
źródło
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)
źródło
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 ...
źródło