Dlaczego nie uczą tego w szkole? [Zamknięte]

118

Latem miałem szczęście dostać się do Google Summer of Code. Wiele się nauczyłem (prawdopodobnie więcej, niż nauczyłem się w sumie wszystkich zajęć na uniwersytecie). Naprawdę zastanawiam się, dlaczego nie uczą kilku rzeczy, których nauczyłem się wcześniej w szkole. Aby wymienić tylko kilka:

  • testów jednostkowych
  • kontrola wersji
  • zwinny rozwój

Wydaje mi się, że spędzają dużo czasu ucząc z góry innych rzeczy, takich jak struktury danych i algorytmy. Chociaż nadal uważam, że bardzo ważne jest, aby się ich uczyć wcześnie, dlaczego nie nauczą więcej z tych trzech wcześniej? A może to tylko moja szkoła nie uczy wiele z tych rzeczy?

Nie zrozum mnie źle, nie sądzę, by uczelnie zawsze nauczały najmodniejszych modów programowania, ale czy moi profesorowie nie powinni uczyć mnie czegoś innego niż „narysuj diagram, zanim zaczniesz programować”?

Jason Baker
źródło
47
Uważam, że większość nauczycieli przebywała poza prawdziwym światem na tyle długo, że nie są na bieżąco z najnowszymi trendami, takimi jak kontrola wersji i testy jednostkowe.
Ryu
14
Nie jestem pewien, czy można nazywać kontrolę wersji „najnowszym trendem”. SCCS został opracowany w 1972 roku - en.wikipedia.org/wiki/Source_Code_Control_System
JeffH,
2
Uczą tych rzeczy w RIT.
geowa4
6
Masz rację. Powinni uczyć tych rzeczy zamiast struktur danych, algorytmów, współbieżności, sieci i baz danych. To znaczy, kto kiedykolwiek musi się nauczyć tych .
Humphrey Bogart
1
Myślę, że to w dużej mierze zależy od uczelni, na którą się zapisałeś. Przynajmniej jeśli chodzi o uczelnię, którą odwiedzam, mogę powiedzieć, że testowanie jednostkowe jest wymogiem dla wszystkich naszych prac domowych z CS od samego początku (nawet jeśli nie stosują się do najlepszych praktyk, ale to początek), a także kontroli wersji. Poza tym zgadzam się z opinią, że uczelnia powinna uczyć uniwersalnych, abstrakcyjnych pojęć. Aby właściwie zrozumieć testowanie, kontrola wersji, a także programowanie zwinne, wymagają dużego doświadczenia z pierwszej ręki, którego i tak raczej nie pasujesz do pełnego programu nauczania, który masz.
Johannes Rudolph

Odpowiedzi:

188

Najprostszą odpowiedzią na twoje pytanie jest to, że dziedziny informatyki i tworzenia oprogramowania są bardzo nowe i niezbyt dobrze rozumiane. Chociaż w dzisiejszych czasach wszystkie dyscypliny naukowe i inżynieryjne rozwijają się szybciej, inne dziedziny mają dużo większe doświadczenie, z którego można czerpać i istnieje dużo szersze wspólne rozumienie ich działania.

Na przykład, pomimo ostatnich postępów w materiałoznawstwie, inżynierowie od około 2000 lat wiedzą, jak zbudować łuk, który się nie przewróci, a jest to coś, czego można się nauczać i czego można się nauczyć na uniwersytecie przy stosunkowo niewielkich kontrowersjach. Chociaż całkowicie zgadzam się z Tobą co do technik, których twórcy oprogramowania powinni się nauczyć, niniejsza umowa jest oparta na osobistych doświadczeniach i nieformalnym uzasadnieniu. Aby być społecznie akceptowaną „najlepszą praktyką”, potrzebujemy danych ilościowych, których zebranie może być bardzo kosztowne: na ile pomaga kontrola wersji? Jak to pomaga? Testów jednostkowych? Możemy wnioskować o skuteczności różnych technik, ale faktycznie udowadniając, że skuteczność byłaby ostatecznie bardzo kosztowna. Musielibyśmy przeprowadzić kompletny, realistyczny projekt oprogramowania od początku do końca, wiele razy, z grupami programistów, którzy mają równoważną wiedzę i używają różnych technik. Przynajmniej potrzebowalibyśmy wielu danych o istniejących projektach, których te projekty nie chciałyby opublikować.

Inżynierowie budowlani mają do obejrzenia tysiące lat mostów i mają mnóstwo informacji. Z drugiej strony programiści mają tylko kilkadziesiąt lat informacji, z których większość jest utrzymywana w tajemnicy, ponieważ organizacje mają niewielką motywację do gromadzenia i publikowania informacji o skuteczności ich twórców, nawet jeśli je zbierają (a większość z nich nie ma 't).

Istnieje również zamieszanie pól. Tworzenie oprogramowania, czyli „inżynieria oprogramowania”, to naprawdę coś innego niż informatyka. Twórcy oprogramowania potrzebują praktycznej wiedzy z zakresu informatyki, ale praca na granicy złożoności algorytmicznej lub rozumowanie równoległości nie jest czymś, co pracujący programista będzie robił każdego dnia; podobnie, prawdziwy „informatyk” napisze tony wyrzuconego kodu, który po prostu nie działa lub nie robi nic interesującego i nie skorzysta tak bardzo z rygoru, jak w przypadku rzeczywistego oprogramowania.

Pojawienie się internetu i społeczności open source może dostarczyć wystarczających danych, aby zacząć odpowiadać na te pytania w sposób rozstrzygający, ale nawet gdyby odpowiedzi były dostępne jutro, prawdopodobnie zajmie im 100 lat, zanim przenikną one międzynarodowe społeczeństwo do punktu, w którym wszyscy zgodzą się co do tego, co powinno się uczyć w szkołach.

Wreszcie są pewne względy ekonomiczne. Minęło stosunkowo niewiele czasu, odkąd prawie wszyscy zaangażowani w tworzenie oprogramowania mieli tani i łatwy dostęp do dedykowanych maszyn do uruchamiania dowolnych narzędzi programistycznych. Kilkadziesiąt lat temu poświęcenie maszyny wyłącznie do wykonywania testów lub nawet przechowywanie nieskończonej historii kodu źródłowego wielu osobom wydawałoby się niepoważnie kosztowne.

Glif
źródło
44

Ponieważ nasi nauczyciele:

  1. Nigdy nie próbowałem testów jednostkowych,
  2. Nie wiem, jak używać kontroli wersji i
  3. Nawet nie słyszałem o „zwinnym rozwoju”.

Uczniowie powinni wziąć sprawy w swoje ręce. Zrobiliśmy to i wyszło dobrze, prawda?

mislav
źródło
3
- Zrobiliśmy to i wyszło dobrze, prawda? - NIEKTÓRZY z nas ... niektórzy zgubili się po drodze, ponieważ nauczyciele nie zrobili wszystkiego, co mogli.
Andrei Rînea
12
Cokolwiek zrobią nauczyciele, ludzie nadal będą narzekać. Ostry jest zawsze głodny wiedzy i będzie okazać się dobrze.
Jeffrey Jose
Nasi nauczyciele nie byli programistami i nie chcieliśmy uzyskać dyplomu z rozwoju oprogramowania; zdecydowaliśmy się w dużej mierze na informatykę, która jest inną bestią, bardziej skupioną na teorii niż praktyce.
Dziekan J.
1
@mislav: Kim byli twoi nauczyciele?
CesarGon
43

Leonardo da Vinci napisał:

Ci, którzy są zakochani w praktyce bez nauki, są jak pilot, który wchodzi na statek bez steru i kompasu i nigdy nie ma żadnej pewności, dokąd idzie. Praktyka powinna zawsze opierać się na solidnej wiedzy teoretycznej.

Dobre szkoły uczą zarówno teorii (struktury danych, algorytmy itp.), Jak i praktyki (testy jednostkowe, kontrola wersji itp.). Wymaga to odpowiedniego połączenia zdolności, aby można było odpowiednio uczyć obie strony tej monety. Wydział złożony wyłącznie z typów teoretycznych bez prawdziwego doświadczenia nie wystarczy. Podobnie, wydział złożony wyłącznie z praktyków nie będzie tego robić. Potrzebujesz mieszanki, a dobre szkoły to mają.

Alan
źródło
1
Zgadzam się z głównym założeniem tego, co mówisz, ale uważam, że problem jednoczesnego zarządzania wieloma wersjami jest kluczowym elementem teorii do zrozumienia. Z drugiej strony zgodziłbym się, że użycie narzędzi takich jak CVS i SVN do rozwiązania tego problemu należy do sfery „praktyki”.
Andrew Swan,
Jednak omawianie kontroli wersji na więcej niż kilku wykładach podczas ogólnych zajęć typu „Wprowadzenie do inżynierii oprogramowania” prawdopodobnie nie jest konieczne. Omów to, co robi, podstawowe zastosowanie, może trochę na temat rozgałęziania / łączenia.
Adam Jaskiewicz
Miałem taką klasę o nazwie „Team Software Project”. Nie obejmował kontroli wersji, ale obejmował UML, metodologie tworzenia oprogramowania, zbieranie wymagań, testy jednostkowe itp.
Adam Jaskiewicz
@Alan, o jakich szkołach mówisz?
lifebalance
40

Informatyka zawsze była w pewnym stopniu sprzeczna; Część dotycząca komputerów nie jest nauką, a część dotycząca nauki nie dotyczy komputerów.

Uniwersytety zwykle opierają się bardziej na „nauce” (algorytmy, struktury danych, kompilatory itp.), Ponieważ te rzeczy są znacznie bardziej „ponadczasowe” niż obecne najlepsze praktyki branżowe, które ewoluują i zmieniają się z roku na rok. Na przykład Kontrola wersji przeszła niesamowite zmiany w ciągu ostatnich 5 lub 10 lat, ale duże-O nadal jest duże-O, a haszowanie, btrees i rekurencja są nadal tak samo przydatne, jak 40 lat temu. Ich pomysł polega na tym, aby dać ci wystarczające podstawy, abyś mógł wybrać narzędzia takie jak git i zrozumieć, co to znaczy, gdy powiedziano ci, że podstawowa struktura danych jest acyklicznym ukierunkowanym wykresem skrótów SHA-1 i że programiści ciężko pracowali aby zoptymalizować liczbę wywołań systemowych, tak aby była ona związana z operacjami io.

Teraz zastanów się, skąd nauczyłeś się wszystkich rzeczy, które musiałeś wiedzieć, aby zrozumieć ostatnie zdanie - jeśli odpowiedź brzmi „uniwersytet”, to wykonują dobrą robotę.

pjz
źródło
13

Wszystko to przemijająca moda. Nauczysz się więcej na pierwszym roku studiów niż przez wszystkie lata na uczelni. Informatyka nie ma nic wspólnego z komputerami.

College zapewnia zestaw narzędzi pełen narzędzi. To jest śrubokręt, czyli klucz półksiężycowy. MOŻESZ użyć każdego narzędzia raz na studiach. Kiedy wchodzisz do prawdziwego świata, naprawdę dowiadujesz się, co masz. Od reszty odkładasz te przydatne, które na wszelki wypadek chcesz zostawić w domu na stole warsztatowym, a które na co dzień trzymasz w kieszeni.

Tqm, Iso, Cmm, Agile, itp. To wszystko mody, które nadejdą i odejdą, żadna z udanych nie jest czymś więcej niż tylko zdrowym rozsądkiem. Wszyscy odnoszący sukcesy inżynierowie i firmy używają pewnego posmaku zdrowego rozsądku, to właśnie sprawiło, że odnieśli sukces, niewielu potrzebowało na to nazwy. Problem w tym, że nie można sprzedawać zdrowego rozsądku, menedżer nie może udowodnić swojej wartości firmie, szkoląc się i kupując zdrowy rozsądek bez chwytliwej nazwy. Umieść na nim nazwisko, które ich przełożeni przeczytali w jakimś artykule prasowym lub czasopiśmie, a kierownik zachowa swoją pracę, a ty swoją. Bardzo niewiele firm, które twierdzą, że stosują się do tych praktyk, faktycznie to robi. Większość wypisuje czek do konsultanta i otrzymuje roczny lub dożywotni certyfikat do jakiegoś klubu, aby mógł umieścić grafikę na swojej stronie internetowej lub etykietę na pudełku, w którym znajduje się ich produkt. Wielu będzie argumentować, że to rzadkie ... Byłem tam, widziałem, zdarza się. To wszystko jest częścią biznesu, czasami trzeba iść na skróty, aby pozostać dochodowym i mieć otwarte drzwi i włączone światła. Zagorzali zwolennicy wszystkich tych praktyk wszyscy argumentowali, że ostatnia była modą, a ta nie, ostatnia była naprawdę zbyt droga, aby ją naśladować, ta nie jest. Ostatni był fałszywy, że właśnie zatrudniłeś konsultanta, ten jest prawdziwy. Podobnie jak języki programowania, one również będą ewoluować. Ostatni był fałszywy, że właśnie zatrudniłeś konsultanta, ten jest prawdziwy. Podobnie jak języki programowania, one również będą ewoluować. Ostatni był fałszywy, że właśnie zatrudniłeś konsultanta, ten jest prawdziwy. Podobnie jak języki programowania, one również będą ewoluować.

Twoja umiejętność zrozumienia realiów biznesu, systemu uniwersyteckiego i twojej w nim roli jest kluczowa. Jak wszystko w życiu, wybierz swoje bitwy. To nie jest uniwersytet, biznes, rząd ani praca kogokolwiek innego, aby uczyć, czego potrzebujesz lub chcesz wiedzieć. Twoim zadaniem jest szukać numeru jeden. Podobnie nie możesz winić nikogo innego za zapewnienie Ci czasu na to, musisz to zrobić. Spadniesz z konia, nie jesteś ofiarą, wstaniesz i wrócisz, żadnych wymówek, życie nie jest sprawiedliwe. Korzystaj z ulotek, nie udawaj niezależności. I na pewno spłacaj swoje długi, nie wysysaj z kompanii jałmużny, nie dając im w zamian czegoś (najlepszego w tamtym czasie?).

Dlaczego ludzie uważają, że cmm lub agile lub którykolwiek z pozostałych jest modą? Dlaczego myślą, że tak nie jest? Dlaczego profesor uczył cię w ten sposób programowania? Aby uniknąć gotos, uniknąć stałych lub uniknąć tego i tamtego? Czy to dlatego, że tworzy bardziej niezawodny kod? Lepiej działający kod? Zmniejsza błąd ludzki? A może dlatego, że łatwiej jest ocenić prace / programy, dając im więcej czasu na zbadanie sprawy? Czy to dlatego, że nie wiedzą, jak programować, a po prostu śledzą czyjąś książkę na ten temat? Czy nauczyli Cię, że nie możesz mieć łatwego w utrzymaniu, niezawodnego i wydajnego kodu? Nie możesz nawet „wybrać dowolnych dwóch”, które można konserwować, koliduje z niezawodnością i wysoką wydajnością? Czasami poświęcasz niezawodność dla wydajności. Czasami nie zależy Ci na niezawodności ani wydajności, po prostu chcesz pobrać wersję 117.34. 2 innego programu księgowego w wersji 118.0.0. Twój model biznesowy opiera się na sprzedaży aktualizacji wersji i pomocy technicznej, a jeśli chodzi o twórców oprogramowania, każdy stary robot może napisać ten sam kod w ten sam sposób. Wymień wypalony na nowy i sprzedawaj ulepszenia.

Nie ma uniwersalnych odpowiedzi na te pytania, musisz dowiedzieć się, jakie jest Twoje zdanie, żyć z nim i go bronić. Zmień zdanie, żyj z tym i broń go.

Kwestionuj wszystko ... czy naprawdę się spalę, jeśli dotknę gorącego garnka na kuchence? Czy psychologiczne skutki lęku spowodują więcej szkód niż zwykłe poparzenie? Czy istnieje bezpieczny sposób na sprawdzenie odpowiedzi bez zranienia?

Kiedy mogłem sobie na to pozwolić, kupowałem i ostatecznie topiłem tranzystory, kapsle, rezystory itp. W moim pokoju w akademiku, z których wszystkie mają charakterystyczny nieprzyjemny zapach. Zakup wzmacniacza do zestawu stereo jest znacznie tańszy i łatwiejszy niż próba zbudowania go dzień po pierwszej klasie tranzystorów. Linus jest wyjątkiem, oczywiście, że łatwiej jest po prostu kupić system operacyjny niż go napisać ... Możesz zrobić więcej, chociaż to, czego się wtedy nauczyłeś, jest inne niż to, czego nauczył się Linus.

Świat wewnątrz i na zewnątrz uniwersytetu przyjmie te formuły (cmm, agile, itp.) Do rozwiązywania problemów, a gdy pojawi się następny, porzuci je równie szybko. Nie musisz używać kontroli wersji, aby odnieść sukces, jest tyle samo sukcesów z i bez (właściwie ze względu na wiek branży jest o wiele więcej sukcesów bez kontroli wersji). Podobnie możesz odnieść sukces przy minimalnym testowaniu (spójrz na naprawdę wielkie nazwiska w branży komputerowej jako przykłady). Możesz odnieść sukces, testując swój własny kod, jak również odnieść sukces, przestrzegając zasady, że nigdy nie powinieneś testować własnego kodu. Możesz odnieść sukces używając emacsa i możesz odnieść sukces używając vi. Musisz zdecydować, która mieszanka Ci odpowiada i jeśli masz szczęście, znajdź miejsce do pracy, które Ci odpowiada.

Kiedy wychodzisz z college'u i wchodzisz do prawdziwego świata, słuchaj, pracuj i dyskutuj z „starymi zegarami”. Mają od dziesięcioleci do stuleci połączonego doświadczenia, pułapki, w które wpadli, których możesz uniknąć lub przetestować samodzielnie (być może zdajesz sobie sprawę, że nie musisz dotykać gorącego garnka, aby dowiedzieć się, że cię poparzy). Większość z nich widziała co najmniej jedną lub dwie z tych mód, które przychodziły i odchodziły, a zwłaszcza jak bardzo zostały spalone i co zrobili, aby po nich wyjść. Znają wiele różnych sposobów testowania rzeczy, a także nazwy stylów testowania, które pojawiły się i zniknęły. Co działa, a co nie. Gdzie jest ryzyko i jak uniknąć marnowania czasu na styczną. Gdy dojrzejesz i staniesz się starym timerem, przekaż to dalej. Płać za to, czego się nauczyłeś, próbując uczyć tych, którzy za tobą podążają. Pamiętaj, aby nauczyć ich JAK łowić, nie dawaj im po prostu ryby. Czasami trzeba pozwolić im ponieść porażkę, zanim odniosą sukces, nie dopuścić do zbytniego poparzenia.

To, co naprawdę chciałem tutaj powiedzieć, to to, że w tej chwili jesteśmy w rzadkiej sytuacji, w której możemy być świadkami ewolucji równoległego wszechświata (i być może wpływać na to). Tak, informatyka to młoda nauka w porównaniu do fizyki. Ale jednocześnie ewoluował wiele razy. W zależności od tego, gdzie pracujesz iz kim pracujesz, możesz obserwować inżynierów sprzętu. Języki programowania w świecie sprzętu z pewnością nie są nowe, ale nie ewoluowały tak szybko, jak świat oprogramowania. Oprogramowanie miało kilka dekad przewagi. Sprzęt zawsze uważał inżynierów oprogramowania za obywateli drugiej kategorii. Nasza praca jest łatwa, ich praca jest ciężka. (Uwaga: jestem inżynierem sprzętu i oprogramowania). Co ciekawe, w tej chwili nadal mają do czynienia z problemami, które moglibyśmy uznać za elementarne lub infantylne. Dlaczego miałbym używać kontroli wersji, tylko ja pracuję nad tym chipem. Twoje doświadczenia z gcc lub innymi tanimi kompilatorami lub darmowymi IDE nie mogą się równać z drogimi narzędziami, których używam, gdyby firma uważała, że ​​jesteś wystarczająco godny, aby go użyć lub nawet wiedziała, jak go używać, kupiłaby ci kopię. I długą listę innych wymówek. Miałem przyjemność nauczyć się zarówno vhdl, jak i verilog i stać się produktywnym w obu w ciągu tygodnia od tego, co było prawie wyzwaniem od takiego inżyniera sprzętu (pomimo mojego dyplomu informującego, że jestem inżynierem elektrykiem, jestem inżynierem oprogramowania). Chciałem się uczyć tych języków, kiedy narzędzia były dla mnie dostępne, siedziałem w biurze do nocy i uczyłem się. Od tego momentu ten inżynier w szczególności zdał sobie sprawę, że to, co mówiłem, było prawdą, języki to tylko składnia, podstawy programowania są takie same, wszystkie narzędzia robią to samo. To jabłka i jabłka, a nie jabłka i pomarańcze.

Ogólnie rzecz biorąc, nadal trudno jest przekazać wiadomość, że jedna z tych dwóch równoległych branż ma o wiele większe doświadczenie w językach, nawykach programowania, kontroli źródła, testowaniu, narzędziach, środowiskach programistycznych itp. Niż druga. Problem, który próbuję rozwiązać, polega na braniu projektów sprzętu w miarę ich opracowywania, tworzeniu niedrogich symulatorów funkcjonalnych, które możemy powiązać z symulacją (maszyną wirtualną) procesora, abyśmy mogli rozpocząć testowanie sprzętu i opracowywanie testu oraz dostarczane oprogramowanie na długo przed przejściem do krzemu. Nie, nie ma w tym nic „nowego”, ale nie mamy mechanizmu pobierania najnowszego kodu, śledzenia zmian w kodzie, aby zobaczyć, na czym musimy skoncentrować nasz czas. Brak mechanizmu śledzenia dokumentacji definiującej interfejs użytkownika (programistyczny) do sprzętu. Jedna złota kopia znajduje się w czyjejś skrzynce odbiorczej e-mail w formie binarnej i zmienia się tylko wtedy, gdy, cóż, nie musisz czytać Verilog, aby dowiedzieć się, co się dzieje. Czekaj, ten Verilog ma ile lat? Ten błąd, który spędziłem nad tobą cały tydzień, odkryłem trzy tygodnie temu i naprawiłem? Czy po prostu lecimy do jakiegoś wakacyjnego miejsca i bawimy się przez sześć miesięcy, czekając, aż ludzie zajmujący się sprzętem zakończą swoje zadanie i rzucą nam je przez ścianę, czy też wykorzystamy tę okazję, aby spróbować być cierpliwym i optymistycznym i nauczyć ich, że oni istnieją zdroworozsądkowe metody, które nie są tak nachalne, które pozwalają im zarówno wykonywać swoją pracę, tworzyć kopie zapasowe swojej pracy, jak i udostępniać swoje rzeczy do recenzji ... ten Verilog ma ile lat? Ten błąd, który spędziłem nad tobą cały tydzień, odkryłem trzy tygodnie temu i naprawiłem? Czy po prostu lecimy do jakiegoś wakacyjnego miejsca i bawimy się przez sześć miesięcy, czekając, aż ludzie zajmujący się sprzętem zakończą swoje zadanie i rzucą nam je przez ścianę, czy też wykorzystamy tę okazję, aby spróbować być cierpliwym i optymistycznym i nauczyć ich, że oni istnieją zdroworozsądkowe metody, które nie są tak nachalne, które pozwalają im zarówno wykonywać swoją pracę, tworzyć kopie zapasowe swojej pracy, jak i udostępniać swoje rzeczy do recenzji ... ten Verilog ma ile lat? Ten błąd, który spędziłem nad tobą cały tydzień, odkryłem trzy tygodnie temu i naprawiłem? Czy więc po prostu lecimy do jakiegoś wakacyjnego miejsca i bawimy się przez sześć miesięcy, czekając, aż ludzie od sprzętu zakończą swoje zadanie i rzucą nam je przez ścianę, czy też wykorzystamy tę okazję, aby spróbować być cierpliwym i optymistycznym i nauczyć ich, że oni istnieją zdroworozsądkowe metody, które nie są tak nachalne, które pozwalają im zarówno wykonywać swoją pracę, tworzyć kopie zapasowe swojej pracy, jak i udostępniać swoje rzeczy do recenzji ...

Pamiętaj, że inżynierowie sprzętu porzucili college z pudełkiem nowych, błyszczących narzędzi, tak jak Ty. Nauczyłeś się 17 różnych języków programowania, z których możesz używać tylko jednego, reszta języków, którymi będziesz się zajmować, zostanie wymyślona po ukończeniu studiów. Po ukończeniu college'u mogą powiedzieć ci, co wiedzą o rachunku różniczkowym i teorii względności, ile elektronów znajduje się w każdym z pierwiastków i obliczyć ładunek wokół powierzchni Gaussa. Ale większość ich kariery to jeden, zero i, albo i nie (hej, mamy je wspólne, wszystko, co naprawdę musisz wiedzieć o komputerach, jeden, zero i, lub, a nie inżynier sprzętu lub oprogramowania). Znając podstawowe prawa fizyki, rachunek różniczkowy, elektrony nie zmienią się tak szybko jak języki programowania. Ale podstawy programowania są takie same we wszystkich językach i będą obowiązywać w przyszłości. Czy skończyłeś college, wiedząc o tym, czy też odszedłeś, myśląc, że java jest inna i lepsza niż C ++, ponieważ to i tamto i tamto?

Jak każdy inny biznes, zadaniem uniwersytetów jest utrzymanie rentowności. Muszą zatrudniać odpowiednich pracowników akademickich, aby zapewnić zarówno odpowiednich studentów, jak i odpowiednie pieniądze na badania oraz odpowiednie rodzaje badań, aby uczynić uniwersytet opłacalnym. Muszą oferować odpowiednie zajęcia, aby przyciągnąć właściwych studentów i wytworzyć odpowiednich absolwentów, tak aby w miarę upływu dziesięcioleci pracodawcy zarówno w pobliżu uniwersytetu, jak i miejmy nadzieję, że daleko rozpoznali, że ta uczelnia wytwarza produktywnych i dochodowych pracowników. (tak, czasami trzeba przyciągnąć odpowiednich sportowców do odpowiedniego sportu, aby uzyskać odpowiednią ilość czasu telewizyjnego oraz odpowiednią ilość rozpoznawalności nazwiska i przychodów ze sportu). Niektóre uniwersytety będą uczyć C ++ i Javy, inne nigdy nie będą. Niektórzy wymyślą CMM, inni nauczą Agile, inni nie. Jeśli uniwersytet ma jakąkolwiek wartość, jest coś, czego możesz się nauczyć. Nie nauczą cię wszystkiego, czego możesz się nauczyć, ale będą mieli coś pożytecznego. Dowiedz się tego, gdy tam jesteś, zbierz rozsądną liczbę różnych form narzędzi w swojej skrzynce narzędziowej. Opuść uniwersytet i znajdź pracę. Jeśli Twój zestaw narzędzi jest do niczego, może znajdź inny uniwersytet i nigdy nie wspominaj o pierwszym. Jeśli skrzynka narzędziowa jest w porządku, użyj tych narzędzi i zbuduj nowe w swoim czasie. Jeśli to całkiem niezły zestaw narzędzi, powiedz dobre rzeczy o tym uniwersytecie i dobrych naukowcach, od których się tego i owego się nauczyłeś, i zapłać szkole za to, co ci dali. Nawet jeśli nie dostałeś każdego możliwego narzędzia w uniwersalnym katalogu narzędzi uniwersyteckich, odejdziesz z pewnym podzbiorem. Nawet jeśli nie ukończysz studiów ...

dwelch
źródło
12

Uczyłem tych rzeczy, kiedy byłem adiunktem w Oregon Institute of Technology. Są nauczani, tylko rzadko.

Scott Hanselman
źródło
Jaki był tytuł zajęć?
Dean J
11

Najprostsza odpowiedź jest taka, że ​​studiujesz informatykę, a rzeczy, które wymieniłeś, nie są tak naprawdę związane z akademicką dziedziną informatyki. Tworzenie oprogramowania może być czymś, co robisz z informatyką, czymś, co opiera się na blokach tego, czego się nauczyłeś ... ale informatyka i tworzenie oprogramowania to nie to samo.

Klasy, które nauczył cię kontroli wersji, czyli jak napisać skuteczne testy jednostkowe ... że byłoby nauczanie wam handel , a mianowicie (dobrze) rozwoju oprogramowania.

matowe b
źródło
10

o Boże, nie zaczynaj mnie

Kiedyś dziekan cs na renomowanym uniwersytecie powiedział mi, że programowanie obiektowe to tylko `` fanaberia '', więc nie oferowali żadnych zajęć z przechodzenia fantazji, takich jak C ++

dlaczego nie uczą tych rzeczy, cóż, szkoła jest po to, aby nauczyć Cię podstaw tej dyscypliny, niekoniecznie najlepszych praktyk w branży

Steven A. Lowe
źródło
2
Innymi słowy, uniwersytety postrzegają swoją rolę (słuszną lub niesłuszną) jako zapewnianie edukacji akademickiej, a nie szkolenia zawodowego. Dlatego wielu świeżo upieczonych absolwentów wie bardzo niewiele o sztuce programowania w świecie rzeczywistym (np. Pisanie kodu, który można konserwować).
Andrew Swan,
A teraz wszystko, czego uczą (przynajmniej przez kilka pierwszych lat) na wielu uniwersytetach, to Java. Ach, ironia.
Matthew Schinckel,
Kiedy powiedział ci, że OOP to moda? Aż do pojawienia się Java, OOP był bliżej mody niż wymagana wiedza.
Andrew Prock,
@ [drewster]: 1994, chociaż myślę, że zbyt dużo zasługujesz na Javę. OOP to logiczny postęp w ewolucji języka programowania; nazywanie tego „modą” na jakimkolwiek etapie jej historii (znacznie mniej w 1994 roku) wskazuje na poziom ignorancji wykraczający poza margines dla dziekana CS.
Steven A. Lowe
2
O co chodzi z fałszywą dychotomią między akademickim a światem rzeczywistym / praktycznym? Prawie każdy pomysł, którego używasz w swojej pracy w „prawdziwym świecie”, pochodzi od społeczności akademickiej lub został przez nią ulepszony. Jak myślisz, skąd się wziął brak GOTO? Przedmioty pochodziły od informatyków w 1967 roku. Wielu ludzi z CS nie miało jasności co do zalet OOP i nadal jest to kwestia niezdecydowana. Przemysł uważa, że ​​to pomaga, ale jest wiele nieudanych projektów, które dowodzą, że jest inaczej.
9

Cóż, z uniwersytetami jest to, że muszą uczyć rzeczy, które są naprawdę uniwersalne. Coś w rodzaju zwinnego rozwoju jest wciąż całkiem nowe i pomimo tego, jak wiele się o nim mówi w Internecie, nie jest używane wszędzie, więc nauczenie go całej klasy uczniów mogłoby przynieść korzyści tylko kilku osobom, które trafiły do ​​zwinnych sklepów.

Jednak kontrola wersji jest obecnie czymś niewybaczalnym. To jest coś, co każdy musi zrozumieć, że jest to narzędzie prawie tak samo przydatne jak kompilator, a CVS istnieje już od ponad 20 lat. Pojęcia te muszą być zrozumiane przynajmniej przez każdego programistę opuszczającego uniwersytet. Na szczęście, jeśli wykonujesz jakąkolwiek pracę grupową na uniwersytecie, możesz mieć szczęście, że wylądujesz z kimś, kto już wie o kontroli wersji i przekonuje twoją grupę do jej użycia. Wiem, że cieszę się, że ta osoba była w mojej grupie.

Testowanie jednostkowe jest równie niewybaczalne. Jedyne, co powiedziałbym, to to, że książka wciąż jest w fazie rozwoju opartego na testach i dążenie do 100% pokrycia kodu zawsze może być większym kłopotem niż jest tego warte. Ale testowanie jednostkowe jest niezwykle cenne i powinno być omówione na kursie inżynierii oprogramowania. Wyobrażam sobie, że niektóre z tych rzeczy trafiają na niektóre uniwersytety, ale po prostu nie dotarły jeszcze do wszystkich.

William
źródło
kontrola wersji nie jest konieczna na kursie uniwersyteckim. Równie dobrze mogliby uczyć „korzystania z Visual Studio”. Najlepiej zostaw to, kiedy znajdziesz pracę. Jeśli chodzi o testowanie - testowanie jednostkowe niekoniecznie jest najlepsze, ale powinno nauczyć przynajmniej trochę wszystkich form praktyk testowych.
gbjbaanb
@gbj zgodził się, nie miałem pojęcia, czym jest kontrola wersji, dopóki nie dostałem pracy, a korzyści od razu zobaczyłem i nauczyłem się tego w dzień. W szkole IMO można uczyć o wiele ważniejszych rzeczy.
temp2290
7

Dlaczego nie, rzeczywiście? Moje doświadczenie z uzyskaniem stopnia informatyka było prawie takie samo. Powodem jest to, że ludzie, którzy uczą programowania, nie programują, o ile wiem. Nie jest wymagane nauczanie tych rzeczy do akredytacji, nauczyciele nie są z tym zaznajomieni, a uczniowie nigdy nie opracowują projektów o jakimkolwiek znaczeniu w ramach swoich zajęć. Nie ma motywacji, aby faktycznie uczyć programowania, w przeciwieństwie do nauczania teorii CS lub składni Javy.

Allen
źródło
6

Informatycy uważają, że są matematykami, a nie inżynierami, dlatego wolą uczyć części matematyczne niż inżynierskie. Testowanie, kontrola wersji i dokumentacja nie przechodzą przez modę bardziej niż w jakiejkolwiek innej dyscyplinie inżynierskiej.

Martin Beckett
źródło
Więc powinniśmy zatrudniać tylko inżynierów oprogramowania, a nie informatyków? ;-)
Andrew Swan
Jeśli sądzisz, że którakolwiek z tych rzeczy spełnia definicję „inżynierii”, martwię się. Spełniają definicję umiejętności, a nie inżynierii.
Benjamin R
6

To zależy od uczelni. Ukończyłem studia w 2003 roku na australijskim uniwersytecie. W tym czasie nauczyliśmy się UML, testów jednostkowych, XP (i innych metodologii Agile), a także wszystkich formalnych rzeczy, takich jak Z, algorytmy i struktury danych, systemy operacyjne itp.

Nie omawiali jednak zbyt szczegółowo testów jednostkowych, bardziej po prostu zapłacili za zaliczenie jednego wykładu. Byłoby wspaniale, gdybyśmy nauczyli się pisać efektywne testy jednostkowe, a nie tylko „Co to jest test jednostkowy”.

Jeśli chodzi o kontrolę wersji, używaliśmy go (CVS) w naszych projektach programistycznych od drugiego roku.

Zgadzam się również z tym, co powiedział Glyph. CS to tak niedojrzała dziedzina, tak naprawdę dopiero w ciągu ostatnich 50 lat, że nie wiemy, czego powinniśmy się uczyć, a co jest tylko przemijającą modą. Daj mu 150 lat, a wtedy sytuacja może się bardziej uspokoić. Liczba nieudanych projektów w świecie rzeczywistym pokazuje, że jest to niedojrzała branża. Wyobraź sobie, że 80% projektów budowlanych nie powiodło się!

Rob Grey
źródło
5

Wszystko to można łatwo (płytko) omówić w jednej klasie dotyczącej praktyk tworzenia oprogramowania. Nie jest to część większości programów nauczania CS, ponieważ nie o to chodzi w CS, chociaż myślę, że niektóre informacje na ten temat są przydatne. Moja szkoła miała taką klasę; nie obejmował kontroli wersji, ale obejmował UML, zbieranie wymagań, metodologie rozwoju (różne zwinne i kaskadowe), testy jednostkowe, testy integracyjne itp. i wymagał od nas pracy w zespołach 4-5 osobowych w celu opracowania projektu (raczej proste oszustwo Clue w Javie). Jeśli poczułeś potrzebę dalszych zajęć z inżynierii oprogramowania, były one dostępne jako fakultatywne.

Pomimo tego, że nigdy nie wspomniano o kontroli wersji na żadnych zajęciach, w których brałem udział, większość moich znajomych używała jej do osobistych projektów, zadań klasowych i tak dalej, więc nie jest tak, jakbyśmy nie byli na to narażeni. Osoby, które nie podniosły go samodzielnie, zostały zmuszone do jego użycia przez kolegę z klasy w trakcie zadania zespołowego.

Uniwersytet ma uczyć pojęć i teorii, ponieważ są to rzeczy, które są trudne do samodzielnego przyswojenia. Kontrola wersji to narzędzie, które jest dość łatwe do opanowania. Użyj go trochę, przeczytaj kilka samouczków w Internecie i gotowe. Jeśli potrzebujesz wykładów i zadań domowych, aby dowiedzieć się, jak sprawdzić coś z SVN, będziesz miał wiele problemów z rzeczami, które w rzeczywistości SĄ trudne.

Pamiętaj, że istnieje wiele sposobów uczenia się rzeczy na studiach poza zajęciami; skorzystaj z tego. Dużo płacisz za udział w zajęciach i korzystanie z udogodnień, więc dojesz wszystko, co warto i chodź na spotkania LUG i ACM, uczestnicz w zespołach projektowych (zawsze jest kilku ME budujących robota, który potrzebuje programisty) lub zdobądź praca zarządzająca serwerem działu humanistycznego. Wybierz komputer ze stacji ładującej budynku inżynierii materiałowej, pobierz plik ISO systemu Linux z szybkim połączeniem internetowym w akademiku i pobaw się.

Adam Jaskiewicz
źródło
3

Myślę, że problem polega na tym, że uniwersytety nie czują, że muszą uczyć Cię profesjonalizmu, ale zamiast tego skupiają się na akademickiej stronie programowania. Pomyślałbym, że powinno być przynajmniej odniesienie do najnowszych metod i technik stosowanych w przemyśle, ponieważ te rzeczy są również przedmiotem zainteresowania akademickiego.

Na naszym kursie uczono nas procesu tworzenia oprogramowania osobistego, który obejmował takie rzeczy, jak nagrywanie czasu poświęconego na projekty, dobre komentarze itp., Ale nie wspominano o profesjonalnych podstawach, takich jak kontrola wersji.

Deeksy
źródło
3

Podałeś 3, z których niektóre nie są moim zdaniem tak ważne dla zrozumienia systemów komputerowych (np. Kontrola wersji). Te rzeczy są częścią pracy i możesz zostać dobrym programistą / informatykiem, nie wiedząc o tym.

podobnie w przypadku testów jednostkowych - po co wybierać testy jednostkowe? Z pewnością ważniejsze są testy użyteczności, testy systemu, testy akceptacji użytkownika i testy akceptacji fabrycznej? Cóż, są, chyba że uznasz, że twoja praca jest zakończona, gdy kod zostanie wysłany do działu konserwacji :)

Pomyśl o innych koncepcjach, których używam na co dzień, a które byłyby mało przydatne dla ucznia, który radziłby sobie z podstawami oprogramowania i systemów komputerowych:

  • dobre praktyki komentowania
  • zgodność ze standardami (nie tylko międzynarodowymi, ale także standardami kodowania zespołowego)
  • dokumentacja
  • kontrola zmian (niekoniecznie taka sama jak kontrola wersji, która polega na przechowywaniu różnic, chodzi bardziej o to, co i dlaczego coś zmieniłeś)
  • rozwój użyteczności

Powyższe to wszystkie „umiejętności miękkie”, których nie trzeba pisać dobrego kodu.

Jeśli jednak brakuje Ci „twardych” umiejętności, takich jak struktury danych i algorytmy, szansa na napisanie dobrego kodu jest prawie niemożliwa.

gbjbaanb
źródło
2

Tego wszystkiego nauczyłem się na uniwersytecie. Być może zależy to od wybranych przez Ciebie kursów? Moje kursy były bardzo zróżnicowane (projektowanie oprogramowania, projektowanie interfejsu użytkownika, eCommerce, sztuczna inteligencja, programowanie funkcjonalne itp.). Projektowanie oprogramowania miało kontakt z wzorcami projektowymi i testami jednostkowymi (jeden duży projekt, który obejmował różne rzeczy). UI Design ... byliśmy trzyosobową grupą pracującą nad projektem. Nie mogliśmy nic zrobić bez kontroli wersji, więc mamy to. A zwinny rozwój był czymś, o czym nasi profesorowie ciągle nam mówili, ale pozostawili to każdej grupie, aby z niego korzystała.

Zauważyłem, że wielu studentów uniwersytetu brało udział w „łatwych” kursach lub kursach, które dawałyby im wysoki GPA. Inni koncentrują się na tym, czego chcą się nauczyć i w dużej mierze badają, jaka dziedzina ich zainteresuje. Są też tacy, którzy dokładnie wiedzą, czym się interesują ... co jest dobre, z wyjątkiem tego, że nie urozmaicają swoich kursów.

Swati
źródło
Rzecz w tym, że te zajęcia są na wyższym poziomie, przynajmniej w mojej szkole. Uważam, że powinny to być jedne z pierwszych rzeczy, których należy nauczać lub przynajmniej powinno się ich uczyć na poziomie średniozaawansowanym.
Jason Baker,
2

Aby odpowiedzieć, dlaczego te rzeczy nie są pierwszą rzeczą, której się uczy: programy licencjackie zazwyczaj przygotowują Cię do uzyskania tytułu magistra. Dopiero gdy zaczniesz wybierać własne kursy (co zwykle ma miejsce w późniejszych latach), możesz zdecydować się uczyć o rzeczach używanych poza środowiskiem akademickim. Dlatego skupiają się na algorytmach, strukturach danych, przedstawianiu nierozwiązanych problemów itp.

Osobiście uważam, że to dobrze, że to robią. Programowanie nie jest tak łatwe, jak wielu z nas się wydaje; wiele osób boryka się z tym. Wolałbym, żeby ci ludzie najpierw zrozumieli, jak działa pętla for, zanim zorientują się, jakim potworem jest Perforce.

Swati
źródło
2

Nie uczą takich tematów, ponieważ większość szkół ma charakter akademicki, a nie branżowy. Oznacza to, że mają na celu nauczanie pomysłów i teorii, a nie szkolenie zawodowe. Cała koncepcja QA nie ma nic wspólnego z informatyką poza przekazaniem dowodu matematycznego. Poza tym praktyki zapewniania jakości i przepływy pracy rozwojowej różnią się znacznie w zależności od domu programistycznego, więc nauczanie ich w szkole jest stratą czasu i pieniędzy.

Nathan Strong
źródło
2

Nauczyłem się tego wszystkiego na pierwszym roku, z wyjątkiem zwinnego rozwoju.

Chodzi o wybór odpowiedniej szkoły, IMHO. Jeśli znajdziesz się w pierwszej dziesiątce, szybko się tego wszystkiego nauczysz.

Jeśli chodzi o ogólną edukację CS, w zasadzie prosimy profesorów, aby nauczali tak dużo (języków każdego rodzaju, struktur danych, wydajności czasu wykonywania, jak rzeczy faktycznie działają na poziomie bitowym). Chciałbym zadać pytanie, dlaczego dzieci nie wezmą na siebie, aby dowiedzieć się więcej o inżynierii oprogramowania?

Alex Gartrell
źródło
2

Podobnie jak studenci, każda uczelnia jest inna. Niektóre uczelnie, a dokładniej, niektórzy profesorowie są oporni na zmiany lub są leniwi. Na szczęście większość nie. Teorie, koncepcje, historia itp. Są ważne i kluczowe dla każdego programu nauczania CS. Ale tak samo jest z przygotowaniem ucznia do pracy. Nic dziwnego, że uczelnie lokalne w mojej okolicy oferują bardzo aktualne i odpowiednie kursy CS. Nie tak bardzo z dużą, renomowaną i prestiżową uczelnią.

Matthew Sposato
źródło
2

Dzieje się tak po prostu dlatego, że struktury danych i algorytmy stanowią rdzeń obliczeń, a tym samym są znacznie ważniejsze. Testowanie jednostkowe, kontrola wersji i zwinna metodologia to tylko narzędzia handlu (i jeśli to konieczne, oczekuje się, że można je wykorzystać w pracy).

Kapitanie Hastings
źródło
1

Myślę, że dobre programy CS powinny uczyć podstaw, które posłużą za podstawę całej przyszłej edukacji programistycznej. Metodologie programistyczne, takie jak Agile, i narzędzia do kontroli wersji są jak mody; przychodzą i odchodzą. Ponadto są one zwykle używane w środowiskach branżowych, a nie akademickich, więc myślę, że uniwersytety rzadko zajmują się takimi rzeczami, jak te, których prawdopodobnie nauczysz się w pracy. Nie mówię, że to prawda, ale taka jest prawdopodobnie mentalność akademicka.

Bullines
źródło
Przepraszam, ale nie uważam Agile i kontroli wersji za modę, podobnie jak linia montażowa lub wynalezienie rachunku różniczkowego nie było modą. W prawdziwym świecie projektujemy rzeczy, które zasadniczo zmieniają programowanie, ale uniwersytety były tak bardzo oderwane od rzeczywistości na swoich małych stanowiskach wykładowych, że nie zdają sobie sprawy, że posunęliśmy się do przodu.
Austin
1

Zgadzam się z tym, co mówisz. Niedawno zacząłem pracować w świecie tworzenia oprogramowania i już zacząłem uczyć się o zwinnym programowaniu, czymś, czego nigdy nie uczono mnie na uniwersytecie.

Faktem może być, że profesorowie uniwersytetów nie nadążają za nowszymi technikami rozwoju tak bardzo, jak powinni. Mogą też czuć, że w ich programie nauczania są inne, ważniejsze rzeczy.

Dave
źródło
1

Wykładowcy uniwersyteccy nie wiedzą, jak pisać oprogramowanie, po prostu je badają, uczą i od czasu do czasu rozbijają kod, który musi działać tylko do momentu publikacji artykułu.

Tylko dzięki ludziom takim jak Titus mamy naukowców, którzy naprawdę grokują programowanie - przeczytaj jego komentarze na ten temat tutaj

Kiedy byłem studentem, czytałem w bibliotece książki o programowaniu ekstremalnym i omawialiśmy je krótko na zajęciach - tych samych zajęciach, które wymagały dostosowania się do „modelu wodospadu” tworzenia oprogramowania, gdzie „kompilacja” jest krokiem jego posiadać.

Życzę wszystkiego najlepszego w Twojej karierze, mam nadzieję, że ukończyłeś studia, fajnie jest mieć litery po nazwisku. :)

Jerub
źródło
1

Wszystkie trzy rzeczy, o których wspomniałeś (testowanie jednostkowe, kontrola wersji, programowanie zwinne) są w pewnym stopniu nauczane w programie informatyki na Uniwersytecie w Groningen. Czy to dobra rzecz, zostawię otwarte pytanie; ale nie jest prawdą, że żaden uniwersytet nie uczy cię „praktycznych rzeczy”.

Tomasz
źródło
1

Są one oparte na moich ograniczonych doświadczeniach w programie CS, zanim zmieniłem kierunek, oraz na moim doświadczeniu jako stażysta w dużej firmie programistycznej. Testowanie jednostkowe nie jest nauczane, ponieważ większość programów, które musisz stworzyć, nie jest wystarczająco duża, aby wymagać automatycznego testowania, gwarantujesz określony zestaw danych wejściowych, więc możesz przetestować wszystko ręcznie. Nauczenie cię, jak zautomatyzować testowanie, może również przeszkadzać w ocenie twojego projektu, ponieważ większość projektów jest oceniana za pomocą skryptów, które uruchamiają testy automatyczne, z szybkim spojrzeniem na kod, aby upewnić się, że nie masz int foo1; int foo2; i stosujesz odpowiednie wcięcia.

Nie wiem, dlaczego kontrola wersji nie byłaby nauczana, ale część tego jest prawdopodobnie związana z wielkością projektów. Nigdy nie miałem projektu, który byłby wystarczająco duży do kontroli wersji, a ogólnie mam na myśli ponad 1000 linii kodu, a napisanie zajęło cały semestr. Sądzę, że pomyślą, że jeśli będziesz tego potrzebować, nauczysz się tego. Wszelkie projekty grupowe, które miałem, miały być projektami programistycznymi w parach i po co używać kontroli wersji, skoro oba są na tym samym komputerze?

Nie wiem, dlaczego programowanie zwinne nie byłoby nauczane, ale prawdopodobnie wraca do tego samego z rozmiarem programu. Chociaż programowanie adgile jest powszechne w przypadku nowego oprogramowania, które działa na komputerach osobistych i małych serwerach, nie jest ono generalnie używane w systemach takich jak komputery mainframe IBM lub w problematycznych domenach, takich jak bankowość lub medycyna, gdzie dokumentacja jest najważniejsza. Prawdopodobnie ma to również związek z faktem, że rozwój adgile nie był około 20 lat temu, kiedy przeszkolono wielu profesorów.

Jared
źródło
> po co używać kontroli wersji, skoro oba są na tym samym komputerze? Używam kontroli wersji, nawet gdy jestem jedyny przy komputerze! W przeciwnym razie, jak zarządzałbyś gałęziami i wydaniami łatek, a nawet przeglądał poprzednią wersję pliku (zanim ostatnia zmiana go zepsuła)?
Andrew Swan,
Jak wyżej od Andrew. Często korzystam z narzędzi SCM, mimo że cała moja praca jest wykonywana na moim laptopie, a większość z nich jest wykonywana solo. Tworzenie kopii zapasowych, kontrola wersji, rozgałęzianie i łączenie, łatanie starego kodu. Są to powody, dla których warto używać go nie tylko do kodu źródłowego, ale do wszelkich produkowanych treści.
Matthew Schinckel,
Nie ma powodu, dla którego nie oceniasz tego, czy Twój kod przejdzie testy jednostkowe / akceptacyjne.
1

Głównym powodem jest to, że wiele (większość?) Uniwersytetów uważa, że ​​ma inny cel niż szkoła zawodowa. W związku z tym chcą uczyć studentów, jak się uczyć i podstawowych zasad tej dyscypliny. Ponadto algorytmy i struktury danych będą miały zastosowanie do każdego języka programowania i nie są zależne od konkretnych narzędzi (które mogą, ale nie muszą być nadal używane do ukończenia studiów).

W informatyce oznacza to algorytmy, struktury danych, teorię komputerów, teorię kompilatorów itp. To, co wymieniasz, nie dotyczy zrozumienia, jak programować, jak rozwiązywać problemy itp. Chodzi o praktykę programowania (która, nawiasem mówiąc, to niesamowita książka dla każdego studenta, który chce pracować jako programista). Teraz wiele z tego nie będzie używanych w pozycji małpy kodu poziomu początkowego, co prowadzi niektórych ludzi do myślenia, że ​​nie jest to przydatne. Nie zgadzam się. Myślę, że może to być niezwykle przydatne. Nie oznacza to jednak, że po uzyskaniu tytułu informatyka wiesz wszystko, czego będziesz potrzebować do pracy jako programista.

Co również nie oznacza, że ​​rzeczy, o których wspominasz, nie są przydatne. Oni są. Będziesz miał problemy z pracą jako programista, jeśli ich nie nauczysz, i myślę, że powinno się ich uczyć na studiach, przynajmniej do pewnego stopnia. Spojrzałbym na nauczanie kontroli wersji, testów jednostkowych itp. W taki sam sposób, jak spojrzałbym na programowanie na poziomie licencjackim w sztuce oraz nauczanie, czym są pędzle malarskie i które powinny być używane w różnych przypadkach.

Christophera Cashella
źródło
1

Myślę, że zależy to od rodzaju programu informatycznego, w którym się znajdujesz. Są takie, które są skierowane w stronę badań i nauki, a są takie, które kierują się w stronę strony wdrażania. W szczególności sprzeciwiłem się niektórym szkołom, które miały tylko profesorów pozostających w świecie akademickim. Jeśli nie masz profesorów, którzy „nie używali” tego, czego nauczają, to wszystko jest w ich głowie, dosłownie.

Wtyczka: Po ukończeniu BS w Comp Sci i MS in Soft Eng na Uniwersytecie DePaul uczyłem się głównie przez instruktorów / profesorów, którzy nauczali w niepełnym wymiarze godzin, co było w porządku, ponieważ wolałbym, aby przyszli z anegdotą z poprzedniego dnia i odnieś to do klasy. Ponieważ jest to szkoła głównie dojeżdżająca do pracy / w niepełnym wymiarze godzin, większość uczniów ma pracę polegającą na wykorzystywaniu tego, czego się uczą.

Proces uczenia się wciąż zaczyna się od całej teorii, ale potem zwykle jesteśmy pytani „ilu z was faktycznie używa tego w swojej pracy?” a typowa odpowiedź brzmi: „używamy go, ale w uproszczony lub prostszy sposób”, a następnie przechodzimy do praktycznych scenariuszy z rzeczywistego świata.

Podczas mojej nauki testy jednostkowe były zawsze obecne. Mimo że rozpoczęli cię w Javie, zmusili nas do używania ANT i JUnit we wszystkich projektach. Co było dobrym początkiem konfiguracji kompilacji i testów jednostkowych.

A programowanie ekstremalne było zawarte w około 3 lub 4 zajęciach, w których brałem udział. Pamiętam, że wszyscy zaczynali od 12 różnych aspektów, od programowania w parach po testy jednostkowe (patrz wyżej). A teraz wydaje się, że nacisk kładziony jest na Agile.

Szybka odpowiedź brzmi: tak, są szkoły, które mają bardziej pragmatyczne podejście niż inne.

Glennular
źródło
1

Testowanie jednostkowe i kontrola wersji były przedmiotem zajęć na drugim roku informatyki, na których studiowałem. Testy jednostkowe należały do ​​tej części testów, która obejmowała również różnice między białą i czarną skrzynką, a spora część ocen z zadań programistycznych na trzecim roku wymagała dobrej obsługi błędów, które mogą łatwo pochodzić z testów jednostkowych.

Myślę, że rozwój zwinny może być trudny do nauczenia w środowisku akademickim. Chociaż teoretycznie nauczyłem się metody Waterfall, nie zobaczyłem jej w terenie, dopóki nie ukończyłem studiów i nie przeniosłem się do prawdziwego świata, który może być zupełnie inny niż w środowisku akademickim, np. Na trzecim roku popełniam wszystkie dziwne błędy przypadków i prawie zdałem zadanie, w którym nigdy nie dotknąłem sedna tego, czego zadanie próbowało nauczyć mnie o Semaforach.

Ponadto, jak długo istnieje agile i jaką formę zwinności masz na myśli? Jest wiele różnych implementacji tego, co widziałem.

JB King
źródło
1

Nie sądzę, aby zwinne programowanie było modą, ale jednocześnie trudno byłoby mi wymyślić sposób, w jaki nauczyciel mógłby dać Ci projekty, które pozwolą Ci się go nauczyć. Chyba że dali Ci projekt A build a, projekt B rozwiń na. Problemem jest czas i zakres. W 4-miesięcznym kursie byłoby to trudne.

Kontrola wersji i metody testowania jednostkowego ciągle się zmieniają i zależą od języka lub osoby, która je definiuje.

Struktury danych i algo to coś, nad czym można pracować w środowisku klasowym. Szczerze mówiąc, zrozumienie testów jednostkowych i wersjonowania wymaga nieco więcej wysiłku. Postaraj się pamiętać, że część uniwersytetu polega na nauce samouczenia się. Kolaż nie ma tego samego zadania. A przynajmniej nie w tym samym stopniu. MOIM ZDANIEM.

baash05
źródło
Hmm, myślałem, że college i uniwersytet oznaczają to samo… chociaż nie jest to język ojczysty.
W zależności od tego, gdzie jesteś (jeśli chodzi o kraj) w USA, są one takie same, w Kanadzie są różne. Myślę, że w stanach to, co nazywam kolażem, w rzeczywistości nazywa się kolażem Junior. W Australii nazywa się to Taff (wybacz pisownię). Nie bycie native speakerem sprawia, że ​​takie rzeczy są bardzo „zabawne”
baash05