Java czy C ++ dla uniwersyteckich kursów CS?

11

Mam ochotę zapisać się do szkoły, aby uzyskać tytuł CS. Szkoła, na którą patrzę, faktycznie oferuje zarówno kursy Java, jak i C ++ dla kursów wprowadzających do programowania (programowanie obiektowe, wzorce projektowe itp.). Wybór ścieżki do wyboru przez studenta, ale jest tylko czas, aby ją śledzić.

Wiedząc, co teraz wiesz, gdybyś miał wybór, czy położyłbyś swoje podstawy CS-owe w Javie lub C ++?

Moja obecna debata wygląda obecnie tak:

Dobry przyjaciel (który ma doktorat z AI) reklamuje Javę jako lepszy wybór bez względu na to, co robię, choćby po to, by otworzyć więcej możliwości pracy później, choć może być stronniczy, ponieważ cała jego praca była w Javie (on kocha to). Mieszkam w rejonie Bostonu, Massachusetts, USA i widzę tyle samo Java i C.

Z drugiej strony, chociaż nie zdecydowałem się jeszcze na to, co chcę zrobić ze stopniem, kiedy skończę, wolałbym rozwijać się dla Maca, co teraz robię, choć mam ograniczoną pojemność. W tym celu mam już ograniczony kontakt z C ++, ale ja nie mam żadnej z Javą, a patrząc na moje projekty w mojej codziennej pracy, nie widzę potrzeby używania go w najbliższym czasie, „wkrótce” przez co najmniej dwa lata.

Prawdopodobnie powinienem zauważyć, że jestem dorosłym wracającym do szkoły po 20 latach (obecnie nie mam żadnego stopnia), więc staram się maksymalnie wykorzystać szansę i czas spędzony jak najlepiej. Skłaniam się w kierunku C ++, ale nadal jestem ambiwalentny, a niektóre obiektywne porady z zewnątrz mogłyby tu pomóc.

Albo mógłbym po prostu zbyt intensywnie o tym myśleć.

AKTUALIZACJA: Okazuje się, że wybór języka nie był tak wyraźny, jak pierwotnie przypuszczałem. Podczas gdy kilka kursów podstawowych koncentrowało się na Javie, niektóre inne kursy podstawowe działają głównie w C i Javie, ale także kilka innych wrzuconych w miarę dobrze. W rzeczywistości moja reszta semestru będzie w Objective-C po spędzeniu czasu w Javie i JavaScript. Ostatni semestr to C, JavaScript i PHP, a także kilka innych wrzuconych jako wymagane zadania. Ponieważ ogólnie rzecz biorąc, sprawy były zasadniczo podzielone i wciąż otrzymuję odpowiedzi na to pytanie, teraz staram się tak opracować swój program nauczania, aby spełnić wszystkie wymagania dotyczące stopnia, ale przyswoić tyle języków, ile potrafię rozsądnie poradzić . Do tej pory moje oceny nie ucierpiały, próbując to zrobić.

Philip Regan
źródło
1
Wszyscy w środowisku badań akademickich reklamują teraz Javę. Ponadto, niezależnie od języka, musisz nauczyć się na uniwersytecie, jak uczyć się nowych języków. C ++ jest już dostępny, tak jak java, ale nie ma zapewnień, że będą za 5 lat. Zawsze pojawiają się nowe języki / technologie, więc musisz być przygotowany na ich zdobycie i szybkie opanowanie.
Chris
1
@Chris: Dlatego zalecam, aby nauczyć się czegoś, co ułatwia dalszą naukę, a nie czegoś, co jest teraz popularne. Polecam C ++ lub Python zamiast Java (oczywiście z różnych powodów).
David Thornley,
To nie ten język ma znaczenie. To abstrakcyjna koncepcja. Popraw tę koncepcję, aby studenci mogli łatwo nauczyć się czegokolwiek w późniejszym życiu.
J-16 SDiZ,
1
Jestem w (niesamowicie) podobnej sytuacji: wracam do szkoły po CS po 20 latach od szkoły. Moja szkoła ma również ścieżkę podziału Java / C ++. Po przeczytaniu wszystkiego tutaj, a nawet udzieleniu +1 do najważniejszej odpowiedzi, nadal będę korzystać z Javy, i oto dlaczego, jeśli jest to pomocne: Pochodzę z rozwoju stron internetowych (JavaScript, PHP, Python) , więc obsługa bibliotek Java jest zaletą. Zakładając, że poświęcę trochę czasu, aby naprawdę uchwycić zasady OOP, nie sądzę, aby przejście do C ++ (jeśli to konieczne) będzie takie trudne. Java jest pośrednikiem między skryptami a kompilacją.
be hollenbeck,
2
Myślę, że nie zgadzam się z każdą odpowiedzią. To naprawdę nie ma znaczenia . Nauczysz się podobnych pojęć w obu językach i nauczysz się innego języka, którego nie wybrałeś, a także innych podczas studiów i kariery.
Matsemann

Odpowiedzi:

51

Osobiście wybrałbym C ++, ponieważ da ci on wgląd w to, jak niektóre elementy Java działają pod maską (na przykład Wskaźniki). Przejście do Javy z C ++ jest dość trywialne, natomiast przejście na drugą stronę jest prawdopodobnie trudniejsze.

Naprawdę trudną rzeczą w ekosystemie Java jest ogromna liczba frameworków, bibliotek itp. - raczej nie są w stanie objąć tego wszystkiego na uniwersytecie.

Pod koniec dnia nie będzie miało znaczenia , jaki język wybierzesz, dopóki nauczysz się zasad.

Mój JUG mnie zabije za poparcie C ++ ;-)

Martijn Verburg
źródło
1
+1 za doskonały punkt dotyczący wielkości ekologicznego systemu Java i wyjaśnienie przejścia.
Jas
1
Problem z nauką dużego ekosystemu na uniwersytecie polega na tym, że nie będzie to przydatne w całej karierze zawodowej. Lepiej poznaj mniej bibliotek i pojęć do nauki lub zapoznaj się z rzeczywistymi funkcjami językowymi.
David Thornley,
2
Kolejnym wyzwaniem dla C ++ jest to, że możesz wtedy zarządzać C ++ w .NET Framework, dając ci wstęp do nauki C #, F # i dowolnego innego języka w tym środowisku uruchomieniowym. Java ma również świetne wprowadzenie do JVM i języków takich jak Scala, ale nie znam JVM C ++, o którym wiem.
CodexArcanum
Jako ktoś, kto lubi myśleć, że jest całkiem przyzwoity w C ++ (i Javie), nie sądzę, aby jakikolwiek nowoczesny kurs programowania wstępnego powinien być w C ++. To po prostu zbyt trudne. Jeśli uniwersytet w ogóle nie uczy C ++, przejdź, jasne, ale na wstępie wybrałbym coś prostszego i ładniejszego, jak Java. Może gdybym nie sądził, że wszystkie są złe, mógłbym nawet polecić dynamicznie pisany język.
Dukeling
Kiedyś w czasach przed Javą nie mieliśmy takiego wyboru i wszyscy nauczyliśmy się C ++, więc nie widzę żadnych problemów z ludźmi, którzy najpierw uczą się C ++. Wydaje mi się, że intro w Javie jest lepsze niż intro w Turbo Pascal.
Bratch
18

Muszę się nie zgadzać z większością osób opowiadających się tutaj za Javą. Nauka języka C ++, nawet jeśli nie studiowałeś architektury komputerów i mikroprocesorów, daje tak wiele bezcennych informacji na temat działania i działania programów komputerowych.

Nota bene, NIE zalecam, abyś nie uczył się języka Java (jeszcze lepiej, C #), ponieważ są to nowoczesne, szybkie języki programowania aplikacji i zbudowano wokół nich ogromne ramy zapewniające dostęp do wielu „bezpłatnych” funkcji, takich jak abstrakcyjny dostęp do plików i tym podobne, jednak prawdziwy inżynier oprogramowania powinien znać przynajmniej trochę C ++, C lub przynajmniej asemblera, ponieważ to właśnie odróżnia cię od typów skryptu-kiddie.

Gdy będziesz już dość biegły w C ++, pewny zarządzania pamięcią i STL, wybranie Java / C # powinno być dziecinnie proste.

Jas
źródło
Zgadzam się, jestem przekonany, że nauka języka Java, jeśli jesteś już biegły w C ++, będzie o wiele łatwiejsza niż nauka języka C ++, jeśli jesteś już biegły w języku Java.
Carson63000,
Problem z „dostateczną biegłością w C ++” polega na tym, że zajmie to lata, a ty nadal nauczysz się tylko niewielkiej części OOP.
Henry
Java nie jest językiem szybkiego programowania aplikacji. Może być nieco wyższy niż C ++, ale nie jest zbliżony do poziomu abstrakcji w Pythonie, Ruby, Perlu lub Visual Basic.
Evan Kroske,
@Evan - Tak, Java jest „szybkim” językiem programistycznym, jeśli nic więcej nie ma w swoich rozległych bibliotekach (powszechnie mówi się, że każdy programista Java ma otwarte dokumenty API Java podczas pracy), a także nie musi ręcznie zarządzać pamięcią. A człowiek, który zaprojektował Javę, zaprojektował ją, ponieważ nigdzie nie korzystał z C ++. Plus sama liczba wdrożonych aplikacji Java (niższa bariera wejścia) jest kolejnym argumentem przemawiającym za „szybkością”.
Jas
9

Szkoły i uczeni, którzy opowiadają się za Javą jako pierwszym wyborem, powinni zbadać swoje głowy (lub po prostu znaleźć tam prawdziwą pracę). Mówię to jako osoba, która przez 12 lat zajmowała się zarówno tworzeniem aplikacji, jak i tworzeniem systemu. Java jest okropnym językiem nauczania.

Powód jest następujący: z wyjątkiem utalentowanych, większość uczniów może (i najprawdopodobniej nigdy) nie zrozumie orientacji obiektowej bez zrozumienia programowania modułowego. I nie mogą zrozumieć programowania modułowego bez uprzedniego zrozumienia programowania strukturalnego w języku proceduralnym. Prosty i prosty. Świadczy o tym (między innymi) to, że chociaż znamy OO już od 3-4 dekad, ludzie nadal piszą hiper-spaghetti w praktyce.

Ponadto osoba polegająca wyłącznie na języku opartym na gc (Java lub .NET) nigdy nie może naprawdę zbliżyć się do sprzętu. Chyba że cała twoja ambicja polega na tworzeniu dynamicznych stron internetowych, zgadnij co? Musisz być wygodny w zbliżaniu się do języka.

Idziesz do szkoły CS, aby zostać wszechstronnym informatykiem i programistą (mam nadzieję, że z kilkoma godzinami praktycznej praktyki programowania w wielu językach programowania). Jeśli znasz tylko Javę (lub .NET lub C lub Python cokolwiek) to jesteś „programistą Java” (nie programistą, który może pracować na Javie, ale „programistą Java”). I to ma tyle sensu, co stwierdzenie, że jesteś „stolarzem młoteczkowym” lub „mechanikiem śrubokręta Phillipa”, prawda?

Dobra szkoła wystawi cię na C (lub inny język proceduralny, taki jak Pascal lub Ada), a następnie na C ++ i asembler, pozostawiając ci samodzielną naukę języka Java, gdy będziesz uczestniczyć w kursach z projektów kapitalistycznych w roku młodszym / starszym. Powinien również zapewniać dostęp do funkcjonalnych języków, dzięki czemu rozumiesz koncepcję przekazywania bloków obliczeniowych jako argumentów, obliczeń wolnych od skutków ubocznych, przejrzystości lokalizacji i tym podobnych (które mają prawdziwe praktyczne zastosowania, nawet w Internecie).

Musisz wiedzieć, co to jest segfault. Musisz wiedzieć, co oznacza stronicowanie, pamięć wirtualna i wszystkie te bzdury. Musisz wiedzieć, jak rozkładać problemy w modułach (proceduralnych i opartych na OO). Musisz wiedzieć, w jaki sposób systemy OO są naprawdę wdrażane pod maską (aby poznać koszty). Musisz wiedzieć, gdzie pęka abstrakcja OO (i robią to, ponieważ świat i złożone problemy niekoniecznie są zorientowane obiektowo).

Musisz znać wszystkie te rzeczy, aby stać się wszechstronnym informatykiem zdolnym do pracy zarówno w przedsiębiorstwie, jak i na bardzo niskim poziomie wdrażania rzeczy systemowych, zarówno w sektorze komercyjnym, jak i publicznym, zarówno na dużą, jak i małą skalę. skala.

Naukowcy, którzy naciskają na Javę jako jedyny język, by rządzić nimi wszystkimi, nie mają pojęcia, czego naprawdę potrzebuje branża. Bezradny. Niewybaczalne bladego pojęcia. Tak się dzieje, gdy pracują na wieżach z kości słoniowej, patrząc na przemysł z dystansu.

Przekształciły oni dział informatyki w drogie 4-letnie szkoły zawodowe, w których kucały sztuczki w jednym języku programowania. I byłoby to wybaczalne, gdyby mogli przynajmniej nauczyć studentów podstawowych umiejętności biznesowych / biznesowych / organizacyjnych (to znaczy porzucić fasadę CS i przyjąć program nauczania MIS). Ale nawet tego nie robią, co uważam za wielką niedogodność dla przemysłu, gospodarki i ostatecznie studentów.

Proponuję przeczytać artykuł Joela Spolsky'ego na temat „Java Schools”.

http://www.joelonsoftware.com/articles/ThePerilsofJavaSchools.html

Podsumowując, jeśli nie uczą języka programowania proceduralnego (czy to przemysłowego, takiego jak C lub Ada, czy wystarczająco dobrego do nauczania, takiego jak Pascal) i dają ci, jeśli C ++ (jeśli masz szczęście) lub Java / C # (jeśli masz pecha), szukałbym innej szkoły. Prosty i prosty, od faceta, który od dłuższego czasu używa Javy do życia w prawdziwym świecie.

luis.espinal
źródło
Od kogoś, kto zna język Java, C i C ++ całkiem dobrze i który nie ukończył studiów zbyt dawno temu, będę musiał się nie zgodzić. C (lub C ++) VS Java - Java jest znacznie łatwiejsza. Może gdybym zaczął od C ++ (co moim zdaniem jest całkiem niesamowite (ale niełatwe) btw) (zamiast (Delphi (eww) +) Java) jest całkiem możliwe, że zostałbym zdemotywowany, zrezygnowany i nie zostałem programistą (chociaż może mieliśmy po prostu złego nauczyciela C ++). Ale tak, nauka języka C ++ w celu zrozumienia wewnętrznych elementów Javy była absolutnie bezcenna. Sądzę, że obecnie około 95% programistów „nigdy tak naprawdę nie zbliża się do sprzętu”.
Dukeling
C (lub C ++) VS Java - Java jest o wiele łatwiejsza ” - to dobrze znane. Nie jestem jednak pewien, co to ma wspólnego z moim postem (?????)
luis.espinal
Łatwiejsze do zrozumienia, łatwiejsze do nauczenia, łatwiejsze do nauczenia, dlatego nie zgadzam się z tym, że „Java jest okropnym językiem do nauczania” i że najpierw powinieneś nauczyć się języka C (może łatwiejszy jest język proceduralny). Mówię również, że C lub C ++ warto wiedzieć, ale nie na początek, ponieważ w tym przypadku prawdopodobnie odstraszysz wszystkich oprócz najbardziej hardkorowych programistów, ponieważ jestem pewien, że to wszystko, co przetrwa wstęp do programowanie przez C ++. Nie chodzi mi o świat hardkorowych programistów, ale inni ludzie mogą. Tak, mówisz, że jesteś dobrze zaokrąglony, ale mówię ołowiu w Javie lub podobnym.
Dukeling
Łatwiejsze zrozumienie i nauczanie niekoniecznie przekłada się na odpowiedni język do celów pedagogicznych. Po 12 latach pracy z Javą jestem o tym przekonany. O wiele lepszym językiem pedagogicznym, który jest łatwiejszy niż C lub C ++, byłby na przykład Python ... lub dowolny język, który nie zmusza każdej metody do zaliczenia się do klasy, to znaczy języka, który jest naprawdę wieloparadygmatyczny w przeciwieństwie do Java, w której wszystko jest „rzekomo” obiektem, w którym nie ma dobrych alternatyw dla wykraczania poza klasy i pakiety itd. I tak dalej. Ogranicza to umiejętność uczenia właściwego modelowania.
luis.espinal
Java, zmuszając cię do nauki programowania w trybie rzeczownika, wszystko jako obiekt, zapewnia słabe metafory modelowania dla innych paradygmatów, które są bardziej odpowiednie dla rzeczywistego modelowania świata. Profesjonalny programista z okopów może obejść to ograniczenie. Studenci nie i wybaczają mi, ale bardzo niewielu profesorów uniwersyteckich ma doświadczenie z okopów, aby poznać to rozróżnienie. Wybrałbym Python lub Ruby (a właściwie Lisp lub BASIC) zamiast Javy, jeśli C / C ++ jest zbyt hardkorowy.
luis.espinal
4

Myślę, że wiele zależy od twojej osobowości. Przynajmniej z mojej perspektywy, Java i C ++ mają radykalnie różne orientacje, które przemawiają do zasadniczo różnych rodzajów ludzi.

Kiedy się do tego zabierasz, Java jest tak naprawdę głównie biblioteką dużej klasy, z wystarczającą ilością języka, aby móc tworzyć instancje obiektów i wywoływać metody z tej biblioteki. „Uczenie się Java” polega w dużej mierze na zapamiętywaniu (a przynajmniej uświadamianiu) tego, co znajduje się w bibliotece i jak jest zorganizowana, abyś mógł znaleźć to, czego chcesz, kiedy chcesz.

C ++ kładzie znacznie mniejszy nacisk na dostarczanie gotowego kodu. Chociaż zawiera bibliotekę (STL 1 ), w bibliotece tej mniej chodzi o dołączony kod, niż o styl i zestaw zasad. Całkowicie możliwe jest pisanie kodu, który jest wyraźnie i łatwo rozpoznawalny jako kod „STL”, nawet jeśli nie używa on wcale lub wcale nie ma wcześniej napisanego kodu.

Istnieje również dość istotna różnica w sposobie używania języków. Java położyła duży nacisk na prostotę języka. Ułatwia to tworzenie narzędzi, które manipulują kodem Java na różne sposoby (np. W celu refaktoryzacji). Oznacza to również, że zwykle potrzebujesz narzędzi, które mogą to zrobić, ponieważ refaktoryzacja często wymaga dość znacznych zmian w dużych ilościach kodu.

C ++ jest znacznie bardziej złożonym językiem, co oznacza (między innymi), że budowanie narzędzi do manipulowania kodem źródłowym C ++ jest znacznie trudniejsze niż dla Javy. Równowaga polega na tym, że jest to o wiele mniej konieczne - zadanie refaktoryzacji, które może wymagać setek zmian w dziesiątkach plików w Javie, można osiągnąć (na przykład) zmieniając pojedynczy parametr szablonu w C ++.

Java kładzie większy nacisk na łatwość nauki. C ++ kładzie większy nacisk na łatwość obsługi - ale (niestety) tylko wtedy, gdy naprawdę wiesz, co robisz.

Nie zamierzam popierać jednego lub drugiego. Moja opinia na temat języków jest o wiele mniej istotna niż posiadanie pewnego pojęcia, czego można się spodziewać po każdym z nich, i rzetelne spojrzenie na siebie, aby dowiedzieć się, co może bardziej Ci odpowiadać.

1 Tak, wiem, że to nie jest zbyt dokładne, ale staram się, aby to nie zmieniło się w książkę ...

Jerry Coffin
źródło
3

Nie mogę uwierzyć, że ludzie zalecają C ++ jako pierwszy język! Spędzisz większość czasu pisząc płytę kotła i próbując ominąć ograniczenia i haczyki rybne w języku, niż faktycznie ucząc się programowania.

Java jest znacznie prostszym językiem i nie przeszkadza w nauce.

Jeśli musisz nauczyć się C ++, naucz się pojęć z Javą, a następnie przejdź do C ++, lub jeszcze lepiej, OBJ-C, jeśli chcesz pisać oprogramowanie Mac. Java i OBJ-C nie są zbyt różne.

Do Twojej wiadomości Spędziłem 10 lat jako komercyjny programista C ++.

Henz
źródło
To nie będzie mój pierwszy język. Jestem programistą, teraz wracającym do szkoły, żeby dostać dyplom. Moje doświadczenie z C ++ i Javą jest ograniczone, ale mam doświadczenie z C i Objective-C. Ale dzięki za poświęcenie czasu na odpowiedź.
Philip Regan,
3
Java będzie przeszkadzać w nauce. Nauczy Cię całkowitych nieprawd o koncepcjach niezależnych od języka.
DeadMG,
2

Poleciłbym C ++. Miałem kilka zajęć z języka Java, a niektóre z C ++ na studiach, a umiejętności specyficzne dla języka, których nauczyłem się z C ++, pomogły mi bardziej, kiedy później uczę się dodatkowych języków. Dodatkowo, chociaż widzę dużo więcej ofert pracy w Javie niż C ++, większość szuka pełnego stosu Java, na przykład:

  • EJB 1.x / 2.0, JNDI, JMS, JTA / JTS, RMI, JDBC, Servlets, JSP, SAX / DOM, Web Services, SOAP, WSDL, UDDI, JAXB, JavaMail, WAP, WML, HTML
  • Tomcat, Apache Xalan, Apache Xerces, Jserv, JRun, JBuilder, TogetherJ, Web Logic 5.x / 6.x, Websphere 3.5 / 4

Są szanse, że program oparty na Javie nie przygotuje cię znacznie lepiej niż program oparty na C ++ na taką listę.

Chris
źródło
1
Dodałbym, że (przynajmniej w moim obszarze) zadania C ++ również płacą nieco lepiej niż zadania Java (obiektywne) i są ogólnie bardziej interesujące (subiektywne).
Cercerilla,
2

Jest to trudne, ponieważ Java jest niezaprzeczalnie łatwiejsza do nauczenia się. Z Javą będziesz robić więcej.

C ++ jest znacznie trudniejszym językiem do pracy. Wskaźniki i zarządzanie pamięcią są koncepcyjnie i praktycznie trudne w obsłudze. C ++ nie oferuje żadnych sieci bezpieczeństwa.

W dłuższej perspektywie dobrze byłoby zrozumieć wszystkie rzeczy, których uczy C ++. Również przejście z C ++ na Javę jest znacznie łatwiejsze niż w innym kierunku.

Zastanawiam się jednak, czy kiedy zaczynam i podczas wielu projektów dyplomowych, dodatkowe koszty ogólne i debugowanie, które musisz zrobić, aby uzyskać coś działającego w C ++, faktycznie utrudnią twoje projekty, trudniej dotrzymać terminów i znacznie bardziej frustruje twoje życie . Aby osiągnąć to samo w C ++ i Javie, powiedziałbym, że w prawie każdym przypadku zadanie to wykonano by szybciej w Javie i napotkano by mniej irytujących problemów. To może być naprawdę wielka sprawa, gdy jesteś pod koniec semestru i masz pięć kursów wymagających projektu na koniec kursu tego samego dnia.

Z drugiej strony, jeśli próby te nie spowodują, że wrzucisz ręcznik, uczynią cię lepszym programistą, jeśli opanujesz C ++. A jeśli twoją karierą jest C #, Java lub Python i nigdy nie musisz dotykać innego wskaźnika w swoim życiu, docenisz to o wiele bardziej ...

glenatron
źródło
2

C ++ jest bardziej elastyczny i oferuje głębsze zrozumienie. Bez wątpienia zyskasz więcej dzięki C ++ niż w Javie. C ++ jest również trudniejszy, ponieważ jest bardziej złożony.

To powiedziawszy, zadania C ++ nie są tak powszechne jak zadania Java.

Java i jej potomek, C #, są standardowymi rozwiązaniami dla korporacyjnej / korporacyjnej przestrzeni kodowania typu big iron. Zdecydowanie polecam naukę jednego z dwóch na drugim roku i czuję się bardzo komfortowo, zanim skończysz studia. Pozwoli ci to znacznie łatwiej znaleźć pracę. Nie oznacza to, że uważam, że te prace mają średni interes intelektualny. Ostatnio przeszedłem przez zadania programistyczne craigslist w Górach Skalistych i większość z nich to C # / Java i związane z tak zwanym oprogramowaniem „ CRUD ”; IMO to bardzo nudne.

Paul Nathan
źródło
1

Będąc nauczycielem zarówno C ++, jak i Java na poziomie uczelni, zdecydowanie polecam Javę .

Java pomaga w procesie uczenia się i zachęca do dobrych zachowań programistycznych. Wbudowane biblioteki Java są przydatne i łatwo dostępne przy każdej instalacji. Możliwość stworzenia aplikacji GUI w jednym zdaniu, przy użyciu wbudowanych bibliotek dostępnych w każdej instalacji Java i pasujących do wszystkich samouczków, które uczniowie znajdują w wyszukiwaniu w Google, jest niezbędna, aby pomóc uczniom wyjść poza język i zacząć rozumieć koncepcje programowania .

IDE dla Java zapewniają wsparcie zarówno dla początkujących, jak i kontynuujących studentów. Wczesne wprowadzenie do konwersacji potężnych narzędzi do refaktoryzacji (na przykład podczas omawiania OOP) pomoże uczniom nauczyć się pisać kod, który można utrzymać.

Chociaż C ++ jest przydatnym językiem do poznania, dodatkowe pojęcia wyuczone w C ++ nie są tak naprawdę warte dodatkowego wysiłku dla całego języka. Istnieje duży dodatkowy zestaw „gotchas”, których należy nauczyć, które można wprowadzić później (problemy z zarządzaniem pamięcią i przepełnieniem bufora, żeby wymienić tylko kilka). Wymaganie od uczniów zrozumienia ich przed przejściem do takich pojęć, jak złożoność algorytmiczna i dziedziczenie spowalnia cię, sposób, w jaki kierowca musi zrozumieć ciśnienie w oponach przed jazdą, spowolniłby edycję kierowcy. Jasne, musisz to wiedzieć. Ale musisz to wiedzieć tylko jako coś, co pewnego dnia się pomylisz , a nie jako element większej koncepcji.

Alex Feinman
źródło
2
Jeśli napotkasz poważne problemy z przepełnieniem bufora i zarządzaniem pamięcią, źle uczysz języka C ++. Który ze standardowych pojemników może przepełnić się jak bufor?
David Thornley,
Tablice? W rzeczywistości mogłem źle uczyć C ++; to było dobrze ponad dziesięć lat temu.
Alex Feinman,
0

Myślę, że większym pytaniem, jakie należy sobie zadać, jest to, czy chcesz być dobrym programistą czy skupić się na informatyce. Jeśli Twoim celem jest CS i chcesz być na drodze doktoranckiej, być może Java jest dobrym rozwiązaniem. Java zapewnia klasy kolekcji Java, które mają wiele gotowych struktur danych i algorytmów. Zaleta tego jest dwojaka: po pierwsze, możesz bawić się strukturami danych i algorytmami, aby zobaczyć, co robią, zanim zaczniesz się martwić, jak zostały zbudowane. Po drugie, daje to profesorom więcej okazji do nauczania zasad CS, które wykorzystują struktury danych, bez konieczności martwienia się o drobiazgi. Później mogą wrócić i poprosić swoich uczniów o stworzenie struktur od zera.

Z drugiej strony C ++ jest językiem niższego poziomu. Zmusza do rozważenia wskaźników i wyrzucania elementów bezużytecznych. Krzywa uczenia się jest nieco bardziej stroma, ale w końcu, gdy znajdziesz się na drodze programowania z zewnętrznymi ramami, poczujesz się mniej, jakbyś polegał tylko na ukrytej magii. Co więcej, wiele większych firm nadal używa C ++. Trudniej jest przejść z Javy na C ++ niż z C ++ na Javę.

Kavet Kerek
źródło
W tej chwili moim celem jest po prostu zająć się tworzeniem oprogramowania, więc zostań lepszym programistą. W tym momencie nie interesuje mnie daleko idąca działalność naukowa.
Philip Regan,