Rozważmy dwa słowa: informatyka i nauka. Pierwsze z nich to ogromne dary dla świata, począwszy od ratującej życie wszechobecności elektronicznej dokumentacji medycznej, a skończywszy na możliwości wzięcia udziału w wirtualnej walce w barze o każdej porze dnia na Twitterze. Drugie słowo, nauka, reprezentuje ruch intelektualny, który dostarczył wielkich osiągnięć, takich jak szczepionka przeciw polio, kilka wycieczek na Księżyc i zbyt wiele innych, by je wymienić. Dlaczego więc łączenie tych dwóch słów w informatyce wychodzi tak słabo, zwłaszcza gdy szukamy pracowników do naszych zespołów programistycznych?
Nie chodzi o to, że pole nie zostało dostarczone. Istnieją petabajty plików LaTeX wypełnione błyskotliwymi pomysłami, takimi jak nowe języki programowania, sprytne algorytmy wyszukiwania, algorytmy widzenia maszynowego i wiele innych. Wiele z nich jest wspaniałych.
Problem w tym, że niewielu z nas naprawdę potrzebuje wielu z nich. Jeden z przyjaciół wyznał, że obserwował, jak zespół programistów rozkwitał, odchodząc od absolwentów CS i zatrudniając tylko fizyków, księgowych lub innego rodzaju osoby znające się na matematyce. Ci nowi pracownicy są bardziej praktyczni i koncentrują się na tym, aby maszyny dostarczały produkty, co jest całkiem sporo tego, co prawie wszystkie firmy chcą zrobić.
Nie chodzi o to, że stopnie CS są złe; to tylko to, że nie będą mówić do problemów, które większość z nas musi rozwiązać. Więc tutaj jest raczej niekompletna lista dlaczego możemy być lepiej ignorować je.
Teoria rozprasza i myli
Wielu informatyków jest matematykami w sercu i theorem-obsessed mentalność przenika dyscyplinę. Jeden z teoretyków powiedział mi, że wszystkie dowody matematyczne są tak naprawdę tylko programami i vice versa, przynajmniej w jego mniemaniu. Nie jest on tak naprawdę zainteresowany dostarczaniem kodu, który wykonuje pracę tak bardzo, jak udowodnienie, że jego kod jest poprawny. Okay.
Rzadko się zdarza, żeby absolwent kierunku CS ukończył studia bez otrzymania zdrowej dawki NP-zupełności i maszyn Turinga, dwóch pięknych obszarów teorii, które byłyby przyjemne, gdyby nie kończyły się tworzeniem złych instynktów. Jeden biolog poprosił mnie o rozwiązanie problemu z dopasowaniem sekwencji DNA i wróciłem do niego z twierdzeniem, że jest to NP-zupełność, klasa problemów, których rozwiązanie może zająć bardzo dużo czasu. Nie obchodziło go to. I tak musiał go rozwiązać. I okazuje się, że większość problemów NP-zupełnych jest dość łatwa do rozwiązania przez większość czasu. Jest tylko kilka patologicznych przypadków, które zapychają nasze algorytmy. Ale teoretycy mają obsesję na punkcie tego cienkiego zestawu, który gmatwa proste algorytmy, mimo że rzadko można je zaobserwować w życiu codziennym.
Ten sam problem występuje w przypadku maszyn Turinga. Obowiązkowi studenci CS uczą się nihilistycznych wyników, takich jak twierdzenie Rice’a, które pokazuje, że tak naprawdę nie możemy w ogóle analizować algorytmów komputerowych. Ale maszyny Turinga są dość złym modelem tego, jak działają nasze zwykłe maszyny i często bardzo łatwo jest stworzyć oprogramowanie, które robi mądre rzeczy z naszym kodem. Każdy major CS, który nie bierze tych teoretycznych wyników ze zdrową dawką soli, ryzykuje poddanie się, gdy doskonale użyteczna odpowiedź jest blisko pod ręką.
Języki akademickie są rzadko używane
Nie powinniśmy być zaskoczeni, że akademia rodzi snobizm i zamiłowanie do tajemniczych rozwiązań. Dzieje się tak w każdej dziedzinie. Kiedy zapytałem jednego z absolwentów MIT o jego ulubiony język, z dumą odpowiedział mi, że jest pewien, że nie mam pojęcia, co to jest. Dopiero gdy trochę naciskałem, ustąpił i powiedział mi, że to CLU. Miał rację.
Jest wiele świetnych pomysłów od tych, którzy mają obsesję na punkcie języków, ale czasami te pomysły kończą się tworzeniem bałaganu i zamieszania. Jeśli jeden członek zespołu uwielbia jakąś dziwną cechę i zaczyna ją włączać do bazy kodu, wszyscy inni będą musieli się jej nauczyć. Jeśli wszyscy zrobią to samo, to czas, w którym trzeba się tego nauczyć, jest brutalny.
To dlatego Google wybrało drogę na skróty, kiedy budowało Go. Twórcy nalegali, aby język miał niewiele konstruktów i był prosty do nauczenia się w jak najkrótszym czasie. Ta prostota pomogła wszystkim, ponieważ każdy znał ten rdzeń bardzo dobrze.
Wielu profesorów CS to matematycy, nie programiści
Jednym z brudnych sekretów większości wydziałów informatyki jest to, że większość profesorów nie potrafi programować komputerów. Ich prawdziwą pracą jest dawanie wykładów i załatwianie grantów. Rozumieją arkusze kalkulacyjne i wnioski o dotacje, a nie faktycznie robią badania. To dlatego Bóg dał im studentów. Ostatni raz wielu z nich faktycznie programowało komputer, kiedy sami byli w szkole dla absolwentów. Od tamtego czasu zgnilizna i pajęczyny już się wdarły, a kompilatory na ich maszynach prawdopodobnie się nie uruchomią.
Wiele wymaganych przedmiotów jest rzadko używanych
Struktury danych są często głównym tematem drugiego kursu, jaki studenci biorą w informatyce. Szkoda, że niewielu z nas korzysta już z wielu struktur danych. Albo umieszczamy rzeczy w tablicach haszujących obiektów, albo wpychamy je do bazy danych, która robi to za nas. Nadal jest to dość przydatne dla każdego, aby myśleć trochę o złożoności algorytmicznej, ale bardzo niewielu musi się martwić o B-drzewa lub nawet połączone listy. Nie tylko to, ale wielu z nas zdało sobie sprawę, że lepiej zaufać standardowej bibliotece niż samemu bawić się strukturami danych. Zbyt łatwo jest popełnić błąd. Wiele organizacji wyraźnie zabrania tworzenia własnych struktur danych, nie bez powodu.
Istnieje wiele innych przykładów tematów z klasycznego programu nauczania, które po prostu nie są już tak ważne. Kompilatory są złożone i niezbędne, ale jedynymi ludźmi, którzy je piszą, są studenci, którzy są zmuszeni do tworzenia wersji zabawek w semestralnym kursie. Nawet Apple użył narzędzi open source, gdy tworzył kompilator dla Swift.
Modele matematyczne prowadzą nas na złą drogę
Każdy, kto uczył się teorii baz danych, odkrył spryt Boyce-Codd Normal Form, sposób, w jaki rozbijamy skomplikowaną strukturę danych na małe tabele. Wszystko to jest bardzo eleganckie i wydajne – dopóki nie czekasz w nieskończoność na odpowiedź na zapytanie SQL wypełnione poleceniami JOIN.
Większość zespołów programistów szybko uczy się „denormalizować” swoje bazy danych, aby poprawić ich wydajność. Innymi słowy, pozbywają się wszystkich sprytnych rozwiązań i umieszczają dane w jednej wielkiej tabeli. Jest to trochę brzydkie i marnotrawne, ale często jest bardzo szybkie. Jeśli chodzi o rozdęcie, przestrzeń dyskowa jest tania.
Kiedy zaczynają stosować swoją edukację w praktyce, wielu programistów spędza kilka lat na oduczaniu się matematycznego sprytu z kursów CS.
Instytucje rodzą arogancję
Wszyscy myślimy, że mamy rację, ale sama natura stopni akademickich jest zaprojektowana tak, aby dać absolwentom możliwość argumentowania swojej wyższości autorytetem. To może być czasem prawdą, ale nawet w najlepszych dniach trudno jest wiedzieć, co jest naprawdę słuszne, zwłaszcza w szybko zmieniającej się dziedzinie.
Jedna osoba, z którą pracowałem, uwielbiała „standardy kodowania”, które przyniosła do działu i uwielbiała każdą okazję, aby powołać się na nie podczas przeglądu kodu. Standardy te sprowadzały się do zgryźliwych opinii na temat tego, gdzie należy umieszczać białe spacje, ale gdy tylko zaczął mówić o nich z akademicką precyzją, zaczął nimi władać jak pałkami podczas recenzji kodu. Naliczał kod z inną ilością białych spacji ze złowieszczym stwierdzeniem, że kod nie spełnia standardów. I tak wszyscy utknęliśmy w liczeniu spacji, aby wszystko pasowało do jakiegoś quasi-akademickiego standardu.
Wiele nowoczesnych umiejętności jest ignorowanych
Wiele z nowoczesnych umiejętności po prostu nie jest uwzględnionych w wielu działach. Jeśli chcesz zrozumieć Node.js, React, projektowanie gier lub obliczenia w chmurze, znajdziesz bardzo niewiele z nich w przeciętnym programie nauczania. Lista kursów przeciętnej szkoły koncentruje się na podstawach – czyli głębokich koncepcjach, takich jak warunki wyścigu, które będą częścią informatyki długo po tym, jak słowa takie jak Node.js lub React zostaną zapomniane. Jest to szlachetny cel, ale 99 procent tego, co większość programistów robi, to zmaganie się z idiosynkrazjami aktualnego buzzword du jour.
Jest to bardzo powszechne dla działów informatyki, aby produkować głębokich myślicieli, którzy rozumieją niektóre z podstawowych wyzwań bez płytkiej wiedzy o szczegółach, które dominują w dniu przeciętnego pracownika. To dlatego firmy uważają, że tak samo warto zatrudnić kogoś z laboratorium fizycznego, który właśnie użył Pythona do masażu niektórych strumieni danych z instrumentu. Mogą oni nauczyć się płytkich szczegółów równie łatwo, jak geniusz CS.
Akademicki cutting-edge długo nie nadchodzi
Maszynowe uczenie i sztuczna inteligencja są bardzo modne i wiele osób ściga się w eksperymentowaniu z nimi. Ale były one badane przez dziesięciolecia przez wydziały CS. Czy jest sens badać wszystkie pomysły emanujące dziś ze szkół – czy też cierpliwie czekać, aż w końcu będą gotowe do powszechnego użytku?
Tenure może rodzić samozadowolenie
Istnieje wiele wspaniałych powodów stojących za instytucją tenure i większość profesorów, którzy korzystają z jej ochrony, w pełni zasługuje na wszystkie korzyści płynące z ich wkładu w przeszłości. Problem polega na tym, że w szybko rozwijających się dziedzinach, dzisiejsi studenci mają niewielkie zapotrzebowanie na spostrzeżenia nawet sprzed dekady lub tak. Jednak kadencja gwarantuje, że wielu profesorów będzie dziesięć, dwadzieścia, a nawet trzydzieści lat po czasach, kiedy mieli największe spostrzeżenia.
I wtedy pojawiają się rozproszenia, które mogą oddalić profesorów. Jeden tenured geniusz wydaje się blogować bez końca o różnych turniejach pokerowych i złych bitach, które wysłały go do domu. Inny zainwestował w drugoligową drużynę baseballową i chwali się, że spędza czas z piłkarzami i gania za piłkami, podczas gdy oni ćwiczą uderzenia.
Intelektualizm rzadko przynosi rezultaty
Kiedy powiedziałem jednemu z wykładowców, że jeden z moich studentów dostał pracę dzięki kilku wykładom na temat Angulara i Reacta, uśmiechnął się i powiedział: „Ostatnią rzeczą, jaką chcę zrobić, to zmienić to w szkołę handlową.”
To dobrze, ale nie ma tak wielu, którzy mogą usprawiedliwić spędzenie blisko pół miliona dolarów na zastanawianiu się, czy wielomianowe lub wykładnicze anioły mogą tańczyć na główce szpilki. Tradycja sztuk wyzwolonych to wspaniała rzecz, ale zachęca do pogardy dla wiedzy praktycznej. Chodzi o jakieś głębokie, wieczne prawdy. Ale kiedy twoja firma musi wysłać coś w przyszłym tygodniu przed upływem terminu, nikt nie ma czasu na wpatrywanie się w pępek i zastanawianie się nad wiecznymi prawdami.