Java często znajduje się w środowisku akademickim. Jaki jest tego powód?
real
świecie, nie stanowi korzyści dla studentów lub firm, które chcą ich zatrudnić.
Java często znajduje się w środowisku akademickim. Jaki jest tego powód?
real
świecie, nie stanowi korzyści dla studentów lub firm, które chcą ich zatrudnić.
Odpowiedzi:
Na kilku uniwersytetach jest ktoś, kto jest wystarczająco dobrze znany, że wiele (jeśli nie większość) decyzji dotyczy upodobań, niechęci, opinii, gustu itp. Na przykład w Texas A&M Bjarne Stroustrup ma pracowników; prawdopodobnie nikogo nie dziwi fakt, że ich program nauczania kładzie nacisk na C ++.
Większość uniwersytetów jest jednak nieco inna. Po pierwsze, decyzje podejmowane są często o wiele bardziej na korzyść wykładowców niż studentów. Najważniejszym kryterium w wielu przypadkach jest „który język wymaga najmniejszego wysiłku z naszej strony?” Większość z nich jest również ostrożna w swoim lenistwie - chcą nie tylko języka z najmniejszą liczbą zaawansowanych pojęć, ale także takiego, który jest (na przykład) najwolniejszy do wprowadzania innowacji, aktualizacji lub wprowadzania czegokolwiek nowego.
Po drugie, większość decyzji podejmowana jest przez komisję. Oznacza to, że ostateczna decyzja rzadko (jeśli w ogóle) jest tym, czego ktoś naprawdę chciał - to jest właśnie to, co najmniej członków komitetu (szczególnie tych o największym wpływie) uznało za szczególnie niekorzystne. To jak wybieranie smaku lodów. Jeden naprawdę lubi truskawki, ale inny ma alergię na truskawki. Inny naprawdę uwielbia czekoladę, ale ktoś inny nie może tego znieść. Jeszcze inny uważa, że rodzynki rumowe są świetne, ale dwaj pozostali martwią się, że wymienienie „rumu” zostanie zinterpretowane jako zachęcające do nadużywania alkoholu - więc kończą się wanilią, chociaż tak naprawdę nikt tego nie chciał.
Wreszcie, mimo to zwykle działa bezpośrednio wbrew większości tego, co dwa poprzednie kryteria wytworzyłyby oddzielnie, na ogół muszą (lub przynajmniej chcą) być postrzegane jako reagujące na potrzeby przemysłu.
Java to skrzyżowanie tych trzech:
Zauważ, że tak naprawdę nie mówię (na przykład), że nie ma nic więcej do powiedzenia na temat Javy niż najbardziej podstawowe pojęcie o tym, czym jest OOP - tylko że to wszystko, co jest potrzebne do zrobienia tego, co przechodzi do zadowalającej pracy polegającej na nauczaniu go.
Studiowałem informatykę na początku lat dziewięćdziesiątych, tuż przed pojawieniem się Java. Podejście stosowane przez naszych profesorów było następujące.
Pierwszy rok: kurs wprowadzający na temat programowania i algorytmów w Pascal. Dlaczego Pascal? Ponieważ jest to czysty język przeznaczony do nauczania pojęć programowania bez możliwości hakowania. Oczywiście my, studenci, wiedzieliśmy, że najpopularniejszym językiem w tym czasie było C i że pojawił się nowy język o rosnącej popularności: C ++. Więc cały czas czytaliśmy i rozmawialiśmy o tych językach i sami realizowaliśmy małe projekty. Pomysł był następujący: na zajęciach uczymy się poważnej teorii (Pascal), podczas gdy w domu uczymy się hakowania (C). :-)
W drugim roku mieliśmy kurs systemu operacyjnego, w którym poproszono nas o wykonanie ćwiczeń w C i montażu. Profesor nie dał nam pełnego kursu na temat C (tylko kilka lekcji), ponieważ (1) mieliśmy już kurs programowania w pierwszym roku i (2) powiedział, że każdy informatyk, który zna pojęcia programowania, powinien być w stanie przeczytać książkę i nauczyć się nowego języka programowania. Kurs przebiegał dość sprawnie i wszyscy uważaliśmy za normalne, że C i montaż były praktycznymi tematami, których uczysz się sam lub omawiasz na korytarzu z innymi studentami, ale nie warto było kontynuować kursu.
W trzecim roku mieliśmy kurs języka programowania, w którym badaliśmy różne paradygmaty języków programowania (imperatywny, funkcjonalny, logiczny, obiektowy), poznawaliśmy ogólne koncepcje i techniki wdrażania oraz poprawiliśmy główne języki programowania (Pascal, C, Modula2, Simula, Lisp, C ++, Prolog). Nasz profesor powiedział nam na początku kursu: nie powinieneś oceniać tego kursu, myśląc o tym, ile języków programowania znasz na końcu kursu, a raczej o wszystkich ogólnych pojęciach, których się nauczyłeś, jakie są powiązane ze sobą, do czego są dobre, w jaki sposób są używane w jakich językach. Następnie nauka określonego języka to tylko czytanie książki, przeglądanie istniejącego kodu, próba użycia go w konkretnym projekcie i tak dalej.
Uważam to podejście za bardzo odpowiednie i skuteczne. Nie uważam, że uniwersytet powinien dążyć do przygotowania dobrych programistów, ale raczej do zapewnienia dobrej wiedzy, która pozwala zrozumieć języki programowania i programowania. Zostanie dobrym programistą stanie się efektem ubocznym tego. Rozważam teraz ubieganie się o pracę, w której wymagana jest Ada, i nie boję się jej, chociaż nigdy wcześniej nie robiłem poważnego programowania w Adzie.
Wracając do kwestii nauczania Java. Wydaje mi się, że Java jest często używana do nauczania, ponieważ jest wystarczająco neutralna i pozwala wyjaśnić zasady programowania przy użyciu języka zbliżonego do świata przemysłu.
Osobiście nadal używałbym Pascala lub podobnego języka na pierwszym kursie, ponieważ pozwoliłoby mi to odróżnić struktury kontrolne od struktur danych, które w językach Java / obiektowych są ściśle zintegrowane. Moim zdaniem Pascal umożliwiłby bardziej stopniowe wprowadzenie do podstawowych pojęć programowania.
Ponadto informatyk (i dobry programista) powinien wiedzieć o podstawowych mechanizmach / strukturach wykonawczych, takich jak stos, sterta, przekazywanie parametrów, alokacja pamięci, wskaźniki lub jak zaimplementować abstrakcyjne typy danych bez korzystania z wbudowanych funkcji język (listy, zestawy itp.). Java zabiera wiele z tego od programistów (to oczywiście dobre), ale początkujący powinien dowiedzieć się o tych rzeczach. Być może po pierwszym kursie programowania w Javie należy również wziąć bardziej ogólny kurs z zakresu pojęć języków programowania.
To tylko moje doświadczenie i opinie.
Byłem w szkole, kiedy wyszła Java. A mój uniwersytet prawie się zmienił z dnia na dzień. Ludzie byli wściekli na Jawie w środowisku akademickim. Byłem juniorem, kiedy to wyszło, i do czasu mojego ostatniego roku prawie wszystkie środowiska akademickie szybko zaczęły zmieniać swój program nauczania. Nie tylko na moim uniwersytecie, ale wszędzie. To było naprawdę tak szybkie. Naszym drugim kursem wprowadzającym był Pascal, który szybko przeszedł na Javę w niecały rok. Dlaczego przekonali się tak szybko? Dwa ważne powody.
Jeden naukowiec chce uczyć teorii i algorytmów. Najlepsze są języki, które ułatwiają naukę algorytmów, które nie wymagają dużego doświadczenia: Scheme, Python, Java, Smalltalk itp. Im bardziej język przeszkadza w uczeniu się prawdziwych algorytmów. W tym czasie języki skryptowe były traktowane przez pracodawców jako obywatele drugiej klasy, uważani za tanie lub szybkie i brudne. Naukowcy postrzegali ich jako więcej kopiujących kotów, ale to, czego chcą pracodawcy, ma również wpływ na naukowców.
To prowadzi nas do następnego powodu. Pracodawcy chcą mieć pewne doświadczenie językowe, a wtedy był to C / C ++. Ale C / C ++ wymaga dużo doświadczenia, aby się uczyć i ma wiele narożnych przypadków, a jeśli ands lub ale są rozpraszające. Nauczyliśmy się kursów w C / C ++, ale nie na niższych poziomach. W tym czasie pracodawcy byli wściekli na programy CS, ponieważ studenci nie wyszli z guru C / C ++.
Java przeczesywała przemysł zbyt szybko, tak jak środowisko akademickie. W końcu środowisko akademickie dostawało to, czego chcieli. Język wysokiego poziomu, który był łatwiejszy do nauczenia, a język, którego chcieli pracodawcy. To było zbyt idealne. Miałem przyjaciela, który wrócił na uczelnię, może 3 lata po moim odejściu, i powiedział, że możesz znaleźć książkę o Javie w każdym temacie CS. Tak szybko Java przejęła środowisko akademickie.
Osobiście uważam, że Java nie stępiła CS.Myślę, że to była dobra rzecz, ponieważ uczniowie mogą uczyć się CS, uczestniczyć w Open Source i znaleźć pracę, nawet gdy są w szkole. Nadal uważam, że powinieneś uczyć się wielu języków jako student CS, a to nie powinna być tylko Java. Ale gdyby wszyscy używali Pythona, Joel też nie znosiłby Pythona.
Jest kilka powodów, w tym:
Zauważ, że istnieje wiele szkół, które uczą języka C # z wielu tych samych powodów. Istnieje wiele innych powodów, z których niektóre są bardziej szczegółowe dla poszczególnych szkół. Zasadniczo Java stała się obiektową „BASIC” z przeszłości.
*
składni, ale korzystanie z niej bez podstawowej znajomości wskaźników byłoby bardzo trudne.
Lubię post Joela Spolsky'ego zatytułowany The Perils Of Java Schools . Myślę, że Berin Loristch ma rację, upraszczając cirriculum, a także ma zastosowanie w prawdziwym świecie.
Wielokrotnie słyszałem, co następuje: „stopień informatyki nie jest stopniem do nauki programowania, to do nauki teorii”. Język niekoniecznie musi mieć znaczenie (choć nie przeszkadza), dopóki teoria się uczy. Java jest stosunkowo łatwym do opanowania językiem, który pozwala poświęcić więcej czasu na naukę teorii stojącej za wszystkim. Jest to jeden z powodów, dla których MIT korzysta ze Schematu (tak słyszałem).
Wiele z powyższych odpowiedzi jest dobrych, ale coś pomijają.
Java jest językiem wieloplatformowym. Jeden uczeń może korzystać ze swojego Maca, inny z jej komputera, a inny z jej studenckiego konta Unix. Ten sam kod zrobi to samo. Pomyśl, o ile łatwiej jest wspierać zarówno nauczyciela, jak i szkolny dział IT.
To było prawdziwe znaczenie Java, kiedy się pojawiła. Żart brzmiał: „Kod raz, debuguj wszędzie”, ale tak naprawdę nie bierze się pod uwagę sprzętu i systemów operacyjnych.
Słyszałem, że profesorowie mówią, że używają java do nauczania, ponieważ:
Osobiście cieszę się, że wziąłem CS w Berkeley, kiedy używali Scheme do nauczania. Chociaż nie zdawałem sobie sprawy z tego, jak elegancki był ten język, dopiero kilka lat później.
Trochę tła
Wziąłem jedyną klasę Java oferowaną w naszej szkole. To był koniec lat 90. i początek 2000. Java rozwijała się, ale jeszcze nie wystartowała. Wychodząc z wielu prac rozwojowych w C, byłem trochę sfrustrowany całym kodem niezbędnym do uruchomienia Javy. Nie mogłem skupić się na swoim zadaniu. Nie mogłem po prostu otworzyć pliku za pomocą „open”. Musiałem zdefiniować klasę, a następnie import itp.
Byłem inżynierem komputerowym, więc najpierw wziąłem programowanie asemblera, potem C, a potem C ++, Scheme i ten kurs Java. Był to głównie program szkolny zorientowany na język C. Klasy algorytmów uczy się za pomocą C.
Kiedy wkroczyłem w przemysł, Java była wyraźnie dominującym graczem. Być może był to jedyny odtwarzacz podczas konwersji z wewnętrznych systemów COBOL na aplikacje biznesowe Java. Java poczyniła ogromne postępy w świecie biznesu na początku 2000 dni.
Jednocześnie nie znałem wszystkich frameworków Java, ale wiedziałem, jak kodować i dostosowywać się do środowiska Java. Gdybym wziął udział w szkoleniach dotyczących dobrych standardów kodowania Java, prawdopodobnie mógłbym zacząć od lepszego stylu Java lub znajomości ekosystemu Java.
Z perspektywy czasu nie sądzę, żeby to miało znaczenie.
Aby odpowiedzieć na twoje pytanie: Dlaczego uczymy się języka Java na uniwersytecie?
Języka Java należy uczyć, ale nie należy go stosować we wszystkich kursach:
Jeśli uczysz się informatyki, powinieneś uczyć się języka Java na pewnym etapie studiów. Jest popularny w świecie biznesu. Powinieneś nauczyć się Java i może C #. Absolutnie nie uczyłem Java jako wstępnego kursu programowania. A Java z pewnością nie powinna być podstawowym językiem używanym we wszystkich kursach.
W sprawie krytyki Java:
Java jest bardzo krytykowana i zawsze tak jest. Czytam czasopisma Java, które wspominają o Javie ze znakiem zapytania: „Czy Java jest gotowa na Enterprise?”. Platforma Java jest nadal szeroko stosowaną platformą. Ale w przypadku większości ogólnych zadań programistycznych Java działa dobrze. I nie ma żadnych większych problemów z używaniem Javy. Nie zaszkodzi twojemu zestawowi umiejętności. Może się zdarzyć, jeśli polegasz na bibliotekach Java, nie wiedząc, co dzieje się pod spodem. Ale Java nie powoduje żadnego uszkodzenia mózgu (niektórzy programiści naprawdę wierzą w to).
Ponadto, dlaczego programiści nie atakują C lub C ++? Lub przynajmniej C ++. Imperatywne paradygmaty programowania są bardzo podobne. I nigdy nie zastanawiałbym się nad napisaniem aplikacji internetowej w C ++, ale mógłbym to zrobić w Javie.
Oto jak skonfigurowałbym program nauczania:
Języki wymienione w moim programie nauczania są dość powszechne. Wiele szkół uczy wielu języków bez problemu. W przemyśle będziesz używać wielu różnych języków programowania. Będziesz używać języków, o których nawet nie słyszałeś.
Temat Java w szkołach nie stanowi problemu, chyba że chcą całkowicie chronić Cię przed Javą lub chcą uczyć TYLKO Javy. W obu przypadkach szkoły są nieuzasadnione.
(Przepraszam, Ruby Lang)
Przepraszam, tylko nudna odpowiedź:
(1) Czy chodziło Ci o:
„Dlaczego uczymy się języka Java na uniwersytecie jako pierwszego języka programowania?”
(2) Czy masz na myśli:
„Dlaczego w ogóle uczymy się języka Java na uniwersytecie, nawet jeśli uczymy się innych języków programowania przed Javą?”
Wygląda na to, że naprawdę masz na myśli oba pytania.
W przypadku (1):
Nie sądzę, że Java (lub .NET C # i Visual Basic) powinny być nauczane jako pierwsze języki programowania. Structured & Modular Pascal powinien być pierwszy, nawet jeśli wydaje się stary i przestarzały.
Wiele osób uważa, że powinniśmy od razu uczyć ludzi programowania obiektowego lub programowania funkcjonalnego tylko dlatego, że jest to „szum” lub „trend”.
Uczę się Structured Pascal jako małej wersji „Programowania obiektowego”, a nie jako czegoś podobnego. Widzę program strukturalny jako pojedynczy mały obiekt.
Następnie sugeruję kontynuację języków funkcjonalnych i Object Pascal.
A później C, C ++, C #, VB.Net, Java.
Głównymi powodami, dla których nie lubię Javy ani C # jako pierwszego języka programowania, jest to, że mają mieszane pojęcia „wskaźniki”, „wskaźniki do obiektów” i „same obiekty” („odniesienia”).
Uważam, że studenci powinni mieć na uwadze różnice i podobieństwa między tymi pojęciami. Porównanie obiektów Strings w Javie jest dobrym przykładem tego dziwactwa:
String A = "Mars";
String A = "Venus";
// pointer comparison or object comparison ???
if (A == B)
{
DoSomething();
}
W przypadku (2):
Myślę, że Java lub C # powinny być nauczane w szkole, ponieważ mają kilka zaktualizowanych dobrych funkcji, a jednocześnie mają rzeczywiste zastosowanie.
Jeśli uczysz się informatyki, powinieneś uczyć się języka Java na pewnym etapie studiów. Jest popularny w świecie biznesu. Powinieneś nauczyć się Java i może C #. Absolutnie nie uczyłem Java jako wstępnego kursu programowania. A Java z pewnością nie powinna być podstawowym językiem używanym we wszystkich kursach.
Nie mogę się nie zgodzić. Java była językiem w mojej szkole, który musiałeś wziąć, aby dostać się do programu CS&E w mojej szkole. Java jest wyjątkowo łatwa do nauczenia. Ponieważ możesz ograniczyć się do pewnych pojęć, których mogą nauczyć się „nieprogramiści”.
Nie umiem też powiedzieć, czy absolutnie uczyłbyś Javy jako wstępnego kursu programowania. Zasadniczo powiedziałeś, że NIE ABSOLUTNIE NIE CHCESZ tego uczyć ?
Prosty powód został już wyjaśniony. Java nie ma opłat licencyjnych. Możesz tego nauczyć za pomocą podstawowego edytora testów. Z pewnością jest używany z niewłaściwych powodów.
Nie zgadzam się z poprzednią odpowiedzią, że Java nie sprawiła, że uczniowie zdawali ją „głupszą”, to naprawdę pokazuje, kiedy mają problemy z naprawdę prostymi pojęciami, takimi jak tablice i listy w C ++.
Zmiana z C na Java nastąpiła w niewłaściwym czasie .
Gdzieś około 2000. Byłem w ostatniej klasie C na moim uniwersytecie.
C ++ miał zbyt wiele funkcji, aby nie mylić nowicjusza. (I nadal tak jest. I planuje dodać.)
NET nie był wystarczająco dojrzałe i była nawet bardziej kosztowne niż dzisiaj.
Cel C był stary, a użycie go przez Apple leciało poniżej radaru (w pobliżu nie było iPhone'a )
Czuję się zmuszony do dodania tutaj odpowiedzi, ponieważ tak naprawdę nie widzę żadnej z tych odpowiedzi, która faktycznie zakrywa moją perspektywę.
Jestem programistą hobbystycznym. Byłem daleko przed konkurencją, jeśli chodzi o „komputery” i „programowanie”. Ukończyłem studia licencjackie - licencjackie - w 2007 roku i magisterskie około dwa lata później - 2009. Pracowałem z wieloma językami, w tym Asembler, QuickBASIC, C, C ++, Java, PHP, Perl, Python, Skrypty BASH, JavaScript, COBOL itp. .
IMHO, język używany do nauczania programowania dla studentów, jest wskaźnikiem czasów, w których obecnie żyjemy. Na przykład w latach 80. Zgromadzenie było językiem niskiego poziomu, podczas gdy C był uważany za język wysokiego poziomu.
W latach 90. C ++, Java, Perl i takie języki zyskały na znaczeniu przede wszystkim dlatego, że znacznie wyższy poziom niż C i ucieleśniały zasady szybkiego rozwoju. Przestali więc trochę uczyć asemblera studentów CS i nauczali C jako sposobu wyrażania algorytmów. Powoli zmieniło się to w ciągu ostatniej dekady, gdy język C jest uważany za język niskiego poziomu, aby skutecznie uchwycić istotę algorytmów i bez zbytniej wiedzy na temat „systemów”. Jest to w rzeczywistości niezwykle ważne, ponieważ program nauczania CS powinien być bardziej „teoretyczny” niż praktyczny i za każdym razem, gdy ktoś chce napisać algorytm, jeśli zaplątają się alokacje pamięci i arytmetykę wskaźników, nie dostaniesz gdziekolwiek.
Nawet dzisiaj, jeśli uczestniczysz w programie Masters CS, musisz spełnić pewne wymagania dotyczące „Systemów” (przynajmniej w USA i nie powinno to być bardzo różne dla amerykańskich uniwersytetów), które wymagają od studentów umiejętności programowania aplikacji na poziomie systemów i w niektórych przypadkach tak głębokie jak hakowanie na poziomie jądra, aby faktycznie spełnić wymagania. Tak więc, chociaż C nie jest nauczanym językiem defacto w szkołach, ważne jest, jeśli chcesz specjalizować się w powiedzmy Systems lub High Performance Computing lub takich niszach.
Chciałbym również wspomnieć o innej kwestii, że C wymaga dużej dyscypliny, aby wszystko było w porządku, podczas gdy języki takie jak Java są nieco rozluźnione w odniesieniu do takich ograniczeń. Ułatwia to prowadzenie kursów bez wymagania od RA / TA uruchomienia GDB w celu debugowania programu studenckiego :)
Myślę, że duża część tego jest wykorzystywana w branży.
Mój program CS miał Przemysłową Radę Doradczą, składającą się z wyższego personelu z lokalnych firm technologicznych i kosmicznych, i mieli oni duży wkład w program nauczania. Wstępne klasy CS upuściły Pascala na korzyść C w roku, w którym zacząłem (1986), w dużej mierze na żądanie IAB. Podobnie, na niektórych kursach wyższego stopnia naciskano na nauczanie Ady, ponieważ lokalne firmy z branży lotniczej musiały używać go do pracy DoD.
Java jest teraz dość wszechobecna, szczególnie teraz, gdy startują urządzenia z Androidem. Jest do bani z perspektywy dydaktycznej, ale potem, podobnie jak C.
Ponieważ mają nadzieję, że mniej uczniów nie zaliczy kursu, który sam w sobie jest AWARIĄ, IMHO. Być może jest to jeden z powodów, dla których prawie nikt nie bierze poważnie dyplomów uniwersyteckich, przynajmniej tutaj.
Java jest zbyt prosta w języku i nie uczy, że komputer ma ograniczony paradygmat zasobów. Podczas gdy jednocześnie zmusza do myślenia „nie ma nic, czego nie można rozwiązać inną warstwą abstrakcji”.
Tak, jest dobry dla koncepcji OOP i problemów z zabawkami, ale uczy podejścia do problemów z niewłaściwego punktu widzenia. Użyj tutaj zgrabnej konstrukcji, a następnie wkręć resztę.
Ale środowisko akademickie znane jest z marzeń o AI, OWL i innych technologiach zabawek. Podczas gdy wciąż badają takie rzeczy, czasami ktoś wymyśla również coś niesamowitego, ale jeśli chcesz być dobrym programistą, musisz się tego nauczyć niezależnie.