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ć.
Odpowiedzi:
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 ++ ;-)
źródło
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.
źródło
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.
źródło
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ę ...
źródło
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 ++.
źródło
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:
Są szanse, że program oparty na Javie nie przygotuje cię znacznie lepiej niż program oparty na C ++ na taką listę.
źródło
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 ...
źródło
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.
źródło
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.
źródło
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ę.
źródło