Jakich języków (lub klas (jak w paradygmatach) języków programowania oraz zalecanego języka tej klasy) powinien uczyć każdy student informatyki na studiach według ciebie? Motywuj swoje odpowiedzi; dlaczego ten język Jakie będzie z tego zastosowanie? Jakie pojęcia uczy (lepiej niż język X)?
Uwaga / objaśnienie : To pytanie dotyczy informatyki z naciskiem na inżynierię oprogramowania, a nie czysto informatyki. Nadal skupia się na edukacji informatycznej, a nie na inżynierii oprogramowania.
Odpowiedzi:
Przedstawię listę:
Studenci powinni być narażeni co najmniej na wszystkie te paradygmaty . Nie tylko jeden czy dwa.
Podejrzewam, że wiele osób sugeruje Pythonowi pokrycie stylu proceduralnego, stylu OOP i może innych, ale nie mam wystarczającego osobistego doświadczenia z Pythonem, aby móc go pewnie polecić.
źródło
Osobiście wydaje mi się trochę smutne, że języków funkcjonalnych nie uczy się tak często, jak kiedyś. Uważam, że przynajmniej studenci nauk ścisłych powinni być narażeni na język ze wszystkich głównych paradygmatów: proceduralnego, obiektowego, funkcjonalnego i dynamicznego.
źródło
Myślę, że dobrze wyważony student CS powinien nauczyć się języka w każdym z 4 typów języków programowania:
Funkcjonalny - Lisp / Haskell / PostScript. Nie mam dużego doświadczenia z Haskellem, ale słyszałem innych programistów, którzy się tym zachwycają. Zrozumienie konstrukcji programowania funkcjonalnego i tego, dlaczego są przydatne w wielu sytuacjach, pomoże programiście lepiej organizować algorytmy również w innych językach.
Zorientowany obiektowo - wybierz coś dla siebie. C # / Java / Python / Ruby / yadda yadda yadda. Tego typu należy nauczyć tylko dlatego, że tego właśnie chce współczesny biznes.
Tryb rozkazujący - C / Fortran / Pascal. Są one obecnie mniej powszechne, ale nadal należy się ich uczyć z praktycznej / historycznej perspektywy. Stosowane przez nich metody są nadal praktyczne, ponieważ w każdym języku wszystko sprowadza się do instrukcji. Języki rozkazujące są bardzo dobre w sporządzaniu list i przestrzeganiu instrukcji.
Logiczne - ProLog. Nigdy nie znalazłem dobrego praktycznego zastosowania dla żadnego z tych języków, ale znalazłem kilka koncepcji kryjących się za językami logicznymi, gdy próbowałem wymyślić, jak napisać niektóre z moich metod w językach bardziej zorientowanych obiektowo. Podczas studiów nie byłem w stanie skupić się zbyt długo na logicznych językach i myślę, że silniejsze skupienie się na tym mogło mi w tym pomóc.
źródło
Najważniejszym językiem, który powinien znać każdy absolwent CS-dur, jest ten, który maksymalizuje potencjał do znalezienia świetnej pracy. Z czasem to się zmieni, zmieni się na podstawie indywidualnej definicji świetnej pracy i będzie się różnić w zależności od regionu geograficznego.
Na razie powiem, że angielski jest językiem nr 1, który powinien znać każdy kierowca CS (to oczywiście zależy od regionu).
źródło
Myślę, że to zmienia się z czasem, ale idealnie - 3 języki z 3 bardzo różnych perspektyw. Za moich czasów było to proceduralne, OO i funkcjonalne - Pascal, C ++ i LISP. Nie jestem aż tak sprzedany, szczególnie tym trzem. Ale kiedy przeprowadzam wywiad, szukam:
Jako kolejna branża - myślę, że programy CS muszą szkolić studentów w zakresie znanych języków na rynku. Myślę, że w każdym momencie 2-3 języki mają poważne znaczenie dla większości miejsc pracy. Myślę, że szkoła jest winna uczniom zapewnienie możliwości uczenia się 2 z 3 tych języków wraz z dogłębnym szkoleniem w co najmniej jednym.
źródło
Dla studentów CS poszukaj języków programowania, które są ściśle odwzorowane na omawiane koncepcje CS. Sugerowałbym:
Lista może trwać w ten sposób, ale podstawowa idea jest dość prosta: Naucz uczniów języka programowania, który będzie najlepiej pasował do sposobu, w jaki chcesz uczyć pojęć.
źródło
Yacc
aby dowiedzieć się, co dzieje się za kulisami, niezależnie od używanego języka programowania. pomaga uchwycić podstawowe pojęcia, takie jak martwy kod i różne rodzaje optymalizacji, które (dobry) kompilator będzie w stanie dla Ciebie zrobić.
źródło
Lisp (z CLOS dla OOP) i Haskell. To pytanie nie jest ograniczone do studentów. Nowe fantazyjne języki programowania pożyczyły (skopiowane, skradzione? ... nie, nieźle) wiele funkcji z tych dwóch. Możesz przygotować się na przyszłość. Programowanie funkcjonalne (styl) jest dziś ważniejsze i jest wprowadzane w imperatywnych językach programowania, takich jak C # (LINQ) lub C ++ (lambda) i wiele innych. Szkoda, że niektórzy studenci uczą się tylko języka Java.
źródło
Myślę, że język nie jest tak ważny, jak ludzie wierzą.
Tak, musisz wiedzieć, jak programować itp., Ale wielu wspaniałych programistów uczy się na własnych doświadczeniach, które pomagają im w rozwoju.
Uczniowie mogliby skorzystać z lekcji na temat programowania w świecie rzeczywistym, a nie tylko metod książkowych, dzięki czemu byliby bardziej „zaokrągleni”, a moim zdaniem lepsi programiści / absolwenci.
Dowiedziałem się więcej o programowaniu i tworzeniu oprogramowania po ukończeniu studiów i rozpoczęciu pracy!
źródło
CZY TO NAPRAWDĘ MA ZNACZENIE ?
Zwykle świąd kryjący się za tym pytaniem brzmi: „Jakie modne słowa mogę umieścić w moim życiorysie, które zapewnią mi najbardziej intratne / interesujące / wymagające / łatwe prace?”. Chociaż pytanie ma sens, ponieważ większość CV jest najpierw sprawdzana przez ludzi HR, którzy nie rozumieją, czego szukają. ale jest bardzo płytka, ponieważ po minięciu bram trzeba dostarczyć towary.
Nie to, jakie znasz języki, które czynią cię dobrym lub złym programistą, to sposób, w jaki możesz go używać. W tym celu są zasadniczo dwie kategorie programistów:
Te, które koncentrują się na nauce języka do jego rdzenia. Najważniejszy jest język i jak go używać. W skrajnych sytuacjach mają tendencję do superoptymalizowania każdego drobnego fragmentu kodu i często używają niejasnych funkcji tylko dlatego, że mogą.
Są też tacy, którzy chcą poznać techniki i paradygmaty. Język, którego używają, nie ma tak naprawdę znaczenia, o ile może elegancko wyrazić swój obraz mentalny. W skrajnych przypadkach będą one zwykle używać UML lub innych takich systemów, mając nadzieję, że inni zrobią cholerną robotę, aby go kodować.
Moim zdaniem potrzebujesz obu. # 1 zapewni umiejętności krótkoterminowe, a gdy zostanie mądrze wybrany, pomoże ci przejść przez bramki HR, ale # 2 pozostanie z tobą przez całą karierę i określi cię jako programistę.
# 2 zapewni wskazówki i zorganizuje swój tok myślenia w kierunku skutecznego rozwiązania problemu, ale bez 1 pozostaje pomysłem, na zawsze unoszącym się w limbosach nieba vaporware (lub piekła, w zależności od tego, z którego na niego spojrzysz).
# 1 da ci środki do wdrożenia pomysłów w prawdziwe działające systemy, ale bez 2 twoje systemy będą miały tendencję do rakowych bezkształtnych potworów.
źródło
Wierzę, że częściowo odpowiedziałeś na swoje pytanie.
Prawdziwe znaczenie ma umożliwienie uczniom kontaktu z kilkoma paradygmatami, faktyczne języki nie powinny mieć znaczenia.
Oczywiście ważne jest, aby przede wszystkim uczyć tych paradygmatów, które dają najwięcej możliwości pracy (prawdopodobnie w tej chwili OOP). W związku z tym lepiej jest uczyć szeroko używanego języka dla tego paradygmatu, ponieważ jest to bardziej przydatne niż uczenie się czegoś, czego prawdopodobnie nigdy nie będziesz używać. Dlatego też nienawidziłem pisania pseudo kodu na egzaminach. Pseudokod jest w porządku, o ile nie ma „poprawionej” składni. Powinieneś po prostu być w stanie przenieść koncepcje.
Konkretnie:
OOP: .NET lub Java
Co najmniej 1 dodatkowy paradygmat programowania, aby uświadomić uczniowi inne podejścia.
Funkcjonalne: Lisp?
źródło
Język asemblera i mikrokodu. Student CS powinien zrozumieć wszystkie podstawowe warstwy abstrakcji między maszynami stanu logicznego a najnowszym funkcjonalnym / OOP / etc wysokiego poziomu. paradygmat języka programowania.
Basic, Logo lub Squeak (i in.), Jeśli kiedykolwiek chcą zrozumieć, jak uczyć małe dzieci umiejętności obsługi komputera.
Fortran, Cobol i Lisp, jeśli chcą zrozumieć historię języków programowania i jakie rzeczywiste problemy rozwiązują współczesne praktyki.
źródło
Wybór 3 lub więcej języków z różnych paradygmatów nie jest trudny, podano wiele dobrych odpowiedzi. Ale gdybym musiał wybrać tylko jeden język, wybrałbym Scalę, ponieważ jest on zarówno funkcjonalny, jak i obiektowy. Możesz wyjaśnić i porównać różne podejścia w tym samym języku.
źródło
Nie zapomnij o językach zorientowanych na stos / konkatenatywnych! Mogą być prawdziwymi zagorzałymi umysłami. Podkreślają złożoność budynków przy użyciu małych, łatwych do zrozumienia prymitywów. Możesz ich użyć do napisania bezcelowego (lub milczącego) kodu, który wydaje się cholernie czysty.
Klasycznym językiem jest Forth , ale obecnie chodzę do Factor . Warto również sprawdzić Radość i Kot . Nie przegap wiki w języku konkatenatywnym . To więcej zabawy niż worek pełen młotków!
źródło
Coś funkcjonalnego, Haskell lub Lisp byłoby moim pierwszym wyborem, ale może Erlang. Języki funkcjonalne naprawdę uczą, jak budować abstrakcje w bardzo potężny sposób.
źródło
Pomimo braku głównego nurtu uważam, że D, a konkretnie wersja 2, zapewnia kilka interesujących lekcji, których nie można łatwo nauczyć się gdzie indziej. Podejmuje bardziej poważną próbę niż jakikolwiek inny język, jaki mogę wymyślić, aby uzyskać imperatywne / proceduralne, obiektowe i funkcjonalne programowanie, aby dobrze ze sobą grać i umożliwić programowanie na bardzo niskim poziomie (wskaźniki, ręczne zarządzanie pamięcią, wbudowane język asemblera) i bardzo wysoki poziom (programowanie generyczne i generatywne) w tym samym języku.
Jest to cenne, ponieważ zamiast widzieć paradygmaty w izolacji, jakby istniały w różnych wszechświatach, można zobaczyć las przez drzewa. Zobaczysz mocne i słabe strony każdego paradygmatu na drobnoziarnistym poziomie, łącząc je z programami. Zobaczysz, jak główne aspekty paradygmatów mogą być zaimplementowane w bibliotekach pod względem kodu niższego poziomu. Standardowy moduł biblioteki std. Algorytm implementuje ważne funkcjonalne prymitywy programowania, ale jest prostym, prostym kodem D bez magii. Podobnie, zasięg standardowyimplementuje leniwą ocenę, ale znowu jest to dość prosty kod D. Zrozumiesz koszty związane z prymitywami każdego paradygmatu, ponieważ zbliżone do metalu cechy D sprawiają, że to, co naprawdę dzieje się pod maską, jest stosunkowo przejrzyste. Możesz nawet napisać coś niskiego poziomu, który wygląda jak C, a następnie stworzyć ładny interfejs wysokiego poziomu, w tym samym języku, bez przeszkadzania magicznym warstwom kleju.
źródło
Pseudo kod.
Ludzie w tej dziedzinie powinni być w stanie wyjaśnić swoje pomysły w spójny, uporządkowany sposób bez żargonu specyficznego dla ram lub składni. Nie powinienem znać różnicy między nawiasami kwadratowymi a nawiasami klamrowymi, aby zrozumieć twój algorytm. Nie powinienem wiedzieć, co to
??
znaczy ani jakiegrep
są przełączniki.Pisz prostym językiem, ale ułóż go i sformatuj jak kod. Każdy może następnie wdrożyć go w dowolnym języku, który mu się podoba.
edycja: Ta odpowiedź jest częściowo uzasadniona niezdolnością niektórych programistów do napisania pseudokodu.
Zaletą pseudokodu jest to, że interesariusze niebędący programistami mogą go zrozumieć. Nie sugeruję, że chcesz licencjobiorców i użytkowników sprawdzających twój kod, jednak może to pomóc, gdy nieprogramiści rozumieją wymagany algorytm. Psuedocode eliminuje potrzebę wyjaśniania
for (int i = 0; i < j; i++)
i, co jest w istocie żargonem na płycie.źródło
DO.
Oczywiście należy znać więcej niż jeden język, a nie tylko stary język proceduralny. Ale gdybym musiał iść na bezludną wyspę z tylko jednym kompilatorem, wybrałbym mój stary dobry gcc. Możesz zrozumieć programowanie na wysokim poziomie, jeśli wiesz o programowaniu na niskim poziomie. Myślę, że to nieprawda na odwrót.
źródło
Niektóre języki programowania stosowane do zdobywania ogólnych umiejętności rozwiązywania problemów, a koncepcje programowania to Logo i Karel, należy ich uczyć przed C / C ++ / Java / Lisp / PERL / Assembly / cokolwiek paradygmatem programowania.
Studenci otrzymują bardzo praktyczne wprowadzenie do programowania.
źródło
Wszystko z przedmiotami. Upewnij się tylko, że dobrze się uczą.
W każdej chwili wynająłbym świetnego programistę Java dla c #, ale miałbym wiele wątpliwości, zatrudniając kogoś, kto nigdy nie napisał prawdziwego kodu
źródło