Wybór języka programowania do uczenia się struktur danych i algorytmów [zamknięte]

79

Jaki język programowania można polecić , aby dowiedzieć się o strukturach danych i algorytmów w?

Biorąc pod uwagę następujące kwestie:

  • Osobiste doświadczenie
  • Funkcje językowe (wskaźniki, OO itp.)
  • Przydatność do nauki koncepcji DS & A.

Pytam, ponieważ istnieje kilka książek, które są niezależne od języka programowania (napisane z perspektywy matematycznej i używają pseudokodu). Jeśli nauczę się z jednego z nich, chciałbym wybrać język programowania do kodowania i uruchamiania algorytmów.

Są też inne książki, które wprowadzają koncepcje DS&A z przykładami napisanymi w określonym języku programowania - i chciałbym zakodować również te algorytmy - dlatego w pewnym stopniu język również wybiera książkę.

Tak czy inaczej, muszę wybrać język i wolałbym się go trzymać przez cały czas. Pomijając osobiste preferencje językowe, który z nich jest najlepszy do tego celu?

bguiz
źródło
Nie ma możliwości udzielenia odpowiedzi na to pytanie poza konkretnymi, a to wymaga więcej informacji.
David Thornley
@David Thornley: Rozumiem, że jest to trochę otwarte, ale otrzymało wiele naprawdę świetnych odpowiedzi!
bguiz
Jest wiele kłopotów z wydajnością energetyczną (kiedyś: czasu) algorytmów i struktur danych: jeśli i kiedy chcesz to zmierzyć, szukaj systemów, w których znaczące liczby można odtworzyć (i łatwo).
siwobrody

Odpowiedzi:

88

Odpowiedź na to pytanie zależy od tego, czego dokładnie chcesz się nauczyć.

Python i Ruby

Często sugerowane są języki wysokiego poziomu, takie jak Python i Ruby, ponieważ mają wysoki poziom, a składnia jest całkiem czytelna. Jednak wszystkie te języki mają abstrakcje dla wspólnych struktur danych. Nic nie stoi na przeszkodzie, aby wdrożyć własne wersje jako ćwiczenie edukacyjne, ale może się okazać, że budujesz struktury danych wysokiego poziomu na podstawie innych struktur danych wysokiego poziomu, co niekoniecznie jest przydatne.

Ponadto Ruby i Python są językami z typami dynamicznymi. Może to być dobre, ale może być również mylące dla początkujących i (początkowo) może być trudniejsze do wykrycia błędów, ponieważ zazwyczaj nie są one widoczne do czasu uruchomienia.

do

C jest na drugim biegunie. To dobrze, jeśli chcesz nauczyć się naprawdę niskopoziomowych szczegółów, takich jak sposób zarządzania pamięcią, ale zarządzanie pamięcią nagle staje się ważną kwestią, jak w przypadku prawidłowego użycia malloc () / free (). To może być rozpraszające. Ponadto C nie jest zorientowany obiektowo. To nie jest złe, ale po prostu warte odnotowania.

C ++

Wspomniano o C ++. Jak powiedziałem w komentarzu, uważam, że to okropny wybór. C ++ jest okropnie skomplikowany, nawet w prostym użyciu i zawiera absurdalną liczbę „pułapek”. Ponadto C ++ nie ma wspólnej klasy bazowej. Jest to ważne, ponieważ struktury danych, takie jak tabele skrótów, polegają na istnieniu wspólnej klasy bazowej. Możesz zaimplementować wersję dla nominalnej klasy bazowej, ale jest ona trochę mniej przydatna.

Jawa

Wspomniano również o Javie. Wiele osób lubi nienawidzić Javy i prawdą jest, że język jest niezwykle rozwlekły i brakuje mu niektórych nowocześniejszych funkcji językowych (np. Zamknięć), ale nic z tego nie ma znaczenia. Java jest wpisywana statycznie i ma czyszczenie pamięci. Oznacza to, że kompilator Javy wychwyci wiele błędów, których języki dynamicznie wpisywane nie będą (do czasu uruchomienia) i nie ma do czynienia z błędami segmentacji (co nie znaczy, że nie można przeciekać pamięci w Javie; oczywiście można). Myślę, że Java to dobry wybór.

DO#

C # język jest jak nowocześniejsza wersja Java. Podobnie jak Java, jest to zarządzany (zbierany bezużytecznie) pośredni język kompilowany, który działa na maszynie wirtualnej. Każdy inny język wymieniony tutaj oprócz C / C ++ również działa na maszynie wirtualnej, ale Python, Ruby itp. Są interpretowane bezpośrednio, a nie kompilowane do kodu bajtowego.

C # ma zasadniczo te same wady i zalety, co Java.

Haskell (itp.)

Na koniec masz języki funkcjonalne: Haskell, OCaml, Scheme / Lisp, Clojure, F #, itd. Myślą one o wszystkich problemach w zupełnie inny sposób i warto się ich nauczyć w pewnym momencie, ale znowu sprowadza się to do tego, czego chcesz się nauczyć: programowanie funkcjonalne czy struktury danych? Wolałabym uczyć się jednej rzeczy na raz, zamiast mieszać problem. Jeśli w pewnym momencie nauczysz się języka funkcjonalnego (co poleciłbym), Haskell jest bezpiecznym i dobrym wyborem.

Moja rada

Wybierz Javę lub C #. Oba mają bezpłatne, doskonałe środowiska IDE (Eclipse, Netbeans i IntelliJ Community Edition for Java, Visual Studio Express for C #, Visual Studio Community Edition), które ułatwiają pisanie i uruchamianie kodu. Jeśli nie używasz natywnej struktury danych bardziej złożonej niż tablica i dowolny obiekt, który sam napiszesz, nauczysz się w zasadzie tego samego, co w C / C ++, ale bez konieczności faktycznego zarządzania pamięcią.

Pozwólcie, że wyjaśnię: rozszerzalną tabelę skrótów należy zmienić, jeśli dodana zostanie wystarczająca liczba elementów. W każdej implementacji będzie to oznaczać wykonanie czegoś takiego jak podwojenie rozmiaru struktury danych bazowych (zazwyczaj tablicy) i skopiowanie istniejących elementów. Implementacja jest zasadniczo taka sama we wszystkich językach imperatywnych, ale w C / C ++ musisz radzić sobie z błędami segmentacji, gdy nie przydzielasz lub nie zwalniasz czegoś poprawnie.

Python lub Ruby (nie ma znaczenia, który) byłby moim następnym wyborem (i bardzo zbliżonym do pozostałych dwóch) tylko dlatego, że dynamiczne pisanie na początku może być problematyczne.

cletus
źródło
1
@cletus: Dzięki za dobrze uzasadnioną odpowiedź! Jaką książkę DS&A / inne materiały instruktażowe byś polecił (dla Javy lub Pythona)?
bguiz
3
@bguiz, możesz zadać osobne pytanie na ten temat. Istnieje kilka pytań na ten temat, które można znaleźć pod adresem stackoverflow.com/search?q=book+data+structures+algoritms. Możesz to uściślić, dodając [java] lub [python] do wyszukiwania.
cletus
2
NIE używałbym Javy i C # głównie ze względu na ścisłą orientację na obiekt obiektowy, która jest do tego niepotrzebna. Ponadto: kogo obchodzi pisanie kodu ogólnego, gdy chodzi o naukę struktury danych? Moim zdaniem albo wybierasz język skryptowy (Python) i skupiasz się na wysokim poziomie, albo wybierasz język niskiego poziomu C / C ++ i próbujesz zobaczyć, jak jest on zaimplementowany na poziomie maszyny. Zatrzymywanie się w międzyczasie nie wydaje się tego warte.
Matthieu M.
3
Python nie jest najpierw skompilowany do kodu bajtowego? Wiadomości dla mnie: docs.python.org/release/2.5.2/lib/bytecodes.html
Adam Crossland
To nie ma sensu: „Jest to ważne, ponieważ struktury danych, takie jak tabele skrótów, wymagają istnienia wspólnej klasy bazowej”. Tabele skrótu opierają się na elementach, które można mieszać, ale specyfika tego, jak można to zaimplementować w języku programowania, nie ma znaczenia w abstrakcyjnej definicji struktury danych.
pyon
45

Polecam Javagłównie dlatego, że:

  • zbieranie śmieci
  • Bibliografia
  • bogate kolekcje

EDYCJA: Głosujących w dół proszę o wyjaśnienie.

codaddict
źródło
3
dlaczego wszyscy głosują przeciwko temu?
Mantas Vidutis
19
Myślę, że odrzucanie tego, ponieważ nie lubisz Javy (co wydaje się mieć miejsce) jest nieodpowiedzialne. Może nie lubisz Javy, ale jest wystarczająco prosta w użyciu jako język do nauki. Więc +1 ode mnie.
cletus
7
+1. Nie mój wybór, ale naprawdę nie jest straszny. Wynik głosowania jest taki, jak sugerowałeś COBOL.
Rob Lachlan
4
+1, ponieważ dla początkującego: 1. Dokładnie, nie musisz martwić się o przydzielanie / cofanie alokacji pamięci (przynajmniej w przypadku małych programów). Zamiast tego możesz skupić się na tym, czego musisz się teraz nauczyć. 2. Tak, żadnych podstępnych wskazówek ani wskazówek do wskazówek. Nie zrozum mnie źle, uwielbiam C ++. 3. Kolekcje w Javie są prawdopodobnie najbardziej wyrafinowanymi zestawami datastruktur, jakie widziałem. Naprawdę powinny znaleźć się w słowniku pod strukturami danych. :)
crunchdog
9
Jeśli nie rozumiesz, jak zarządzać własnymi zasobami, nie nauczyłeś się zbyt wiele o strukturach danych.
Alan
30

Moim zdaniem C byłby najlepszym językiem do nauki struktur danych i algorytmów, ponieważ zmusi cię do napisania własnego. Zmusi Cię to do zrozumienia wskaźników, dynamicznej alokacji pamięci i implementacji popularnych struktur danych, takich jak listy połączone, tabele skrótów itp. Wiele z nich można uznać za oczywiste w językach wyższego poziomu (Java, C # itp. ).

Taylor Leese
źródło
11
Wskaźniki i dynamiczna alokacja pamięci nie uczą niczego o strukturach danych i algorytmach, ale poważnie utrudniają to, co możesz osiągnąć.
JD
1
Zgadzam się. Po zajęciu się dziesiątkami różnych języków i nauczeniu się najpierw wyższego poziomu, wysoce abstrakcyjnego, było to uciążliwe, kiedy zdecydowałem się nauczyć C / C ++ i nagle musiałem poradzić sobie z wieloma rzeczami, których nigdy mi nie wyjaśniono. przed. Nauka najpierw języka C (nie C ++) to świetny wybór, ponieważ pokazuje, jak faktycznie działa maszyna, i masz wszystkie ograniczenia, które wymuszały tworzenie struktur danych. Cały język daje ci funkcje (dla algorytmów) i struktury (dla struktur danych). Luka między teorią a językiem jest naprawdę niewielka.
Rafael Beckel
17

Pythonjest świetny. Czytelny, w pełni funkcjonalny. Jeśli zamierzasz pracować z pseudokodem, Python będzie wyglądał dość znajomo.

Python jest już językiem algorytmów wybieranym w UC Irvine , gdzie jest opisany następująco:
Python reprezentuje język zorientowany na algorytm, który był bardzo potrzebny w edukacji. Zalety Pythona obejmują jego podręcznikową składnię i interaktywność, która zachęca do eksperymentowania.

Python działa również w przyjazny dla początkujących sposób z Gato , narzędziem do tworzenia wykresów. Uczenie się algorytmów i struktur danych jest jednym z najlepszych rozwiązań, które mogą pomóc poprzez wizualizację, co Gato ułatwia (bez uczenia się skomplikowanych bibliotek graficznych)

Mantas Vidutis
źródło
@mvid: Czy poleciłbyś książkę DS & A opartą na Pythonie?
bguiz
1
@bguiz: Chociaż nie czytałem jej osobiście, istnieje ta bezpłatna książka elektroniczna, która koncentruje się na algorytmach i strukturach danych korzystających z OO w Pythonie: brpreiss.com/books/opus7
Mantas Vidutis
Python jest świetny tylko wtedy, gdy uważasz, że kodowanie z
odstępami jako separatorem
Biała spacja jako separator JEST niesamowita!
Marcel Valdez Orozco
Osobiście nie lubię Pythona ze względu na jego składniowe użycie wcięć. Uważam, że trudniej jest znaleźć głupie błędy spowodowane niewspółosiowością niż w przypadku składni opartej na nawiasach klamrowych i tym podobnych, obsługiwanych przez dodatkowe wyrównanie podobne do nroff.
Michael
13

Jeśli celem jest tylko poznanie struktur danych i algorytmów , powiedziałbym, że JavaScript. Możesz uruchomić swój kod w przeglądarce. Masz bardzo elastyczną obsługę obiektów i możesz skupić się całkowicie na strukturach danych i algorytmach, a nie na zarządzaniu pamięcią, konstrukcjach językowych lub innych rzeczach, które odciągną uwagę od faktycznej informatyki, której się uczysz.

Dodatkową zaletą jest również to, że możesz łatwo wizualizować różne struktury danych, używając przeglądarki do renderowania wykresów i drzew przy użyciu DOM i Canvas.

Kursy CS na przestrzeni lat zmieniają język, w którym nauczany jest przedmiot, po prostu dlatego, że pojawiły się nowsze i lepsze implementacje języków, które ułatwiają naukę, co ułatwia skupienie się na rzeczywistym problemie.

Ernelli
źródło
+1, ponieważ JavaScript pozwala łatwo nauczyć się programowania funkcjonalnego i ma szerokie zastosowanie, ponieważ umożliwia tworzenie aplikacji internetowych za jego pomocą.
Dan Dascalescu
Bardzo prawdziwe. Testuję swój kod w fragmencie narzędzi deweloperskich. Mogę również w podobny sposób zapisać w nim własne struktury danych. Nie ma listy połączonej ani żadnej innej wbudowanej struktury. Wszystko jest tylko przedmiotem. O ile nie zajmuję się programowaniem konkurencyjnym, działa ono, aby nauczyć się wyszukiwania binarnego, prób i wszystkich innych koncepcji. Nie?
HalfWebDev
całkowicie się zgadzam, skupmy się na logice bez większej ceremonii i prostej składni.
jtroconisa
8

Jeśli chcesz podążać ścieżką najmniejszego oporu, to Python. Będzie miał minimalną ilość niepotrzebnej płyty kotła i tym podobnych.

Idealnie, chciałbym nauczyć się algorytmów w C, żebyś mógł dowiedzieć się, co się dzieje na poziomie pamięci; Chciałbym również nauczyć się algorytmów w języku funkcjonalnym, abyś mógł zobaczyć, jak podobne algorytmy działają z trwałymi strukturami danych.

Słynne książki Knutha zawierają duże ilości kodu asemblera (wymyślonej platformy). Jest to zalecane, jeśli chcesz być super hardcore. Jednak osobiście pracowałem w C, kiedy pracowałem nad moją klasą algorytmów (ujawnienie: to było zaledwie kilka lat temu). Czasami pracuję nad niektórymi problemami w Knuthu, ale nie wiem, czy wybrałbym MMIX całkowicie jako mój język do nauki algorytmów. Czuję, że to trochę przesada.

EDYCJA : Zależy to również od tego, co znasz. Jeśli chcesz teraz rozpocząć pracę nad tekstem algorytmów, a nigdy nie pracowałeś zbyt wiele z C, to Python jest zdecydowanie poprawną odpowiedzią. Chcesz, aby język nie był wielką przeszkodą do pokonania, ponieważ chcesz się tym cieszyć. Wiem, że tak.

Ostatnia uwaga: przynajmniej kiedy uczyłem się algorytmów, spędziłem mnóstwo czasu pracując na papierze. Myślę, że to ważne - chodzi mi o to, że chcesz się uczyć o asymptotyce itp. Spędzanie całego czasu na implementowaniu algorytmów w jakimkolwiek języku nie jest rzeczą do zrobienia.

Rob Lachlan
źródło
@Rob Lachlan: Czy jest jakaś książka DS & A w Pythonie, którą byś polecił?
bguiz
@bguiz: większość przyzwoitych książek o algorytmach, które lubię, to agnostycy językowi - Cormen i wsp., Kleinberg i Tardos. Naprawdę nie wybrałbym jednego na podstawie języka.
Rob Lachlan
8

Proponuję Adę. Posiada funkcje dla konstrukcji danych, których nie ma w innych językach, takie jak sprawdzanie zakresu type Day is range 1 .. 31;. Ma również bardzo ścisłe sprawdzanie czasu kompilacji i wykonywania (chyba że zdecydujesz się je wyłączyć), co ułatwia znajdowanie błędów w implementacji.

Daniel Rose
źródło
8

Oberon-2 lub Component Pascal . Ostatnia jest nadzbiorem pierwszego.

Einstein powiedział kiedyś: „Uczyń to tak prostym, jak to tylko możliwe, ale nie prostszym”. Fraza ta została wybrana przez prof. Niklausa Wirtha jako epigraf do oryginalnego raportu językowego Oberona. Dotyczy to również wspomnianych wyżej potomków Oberona.

Jeśli chodzi o doskonałość języka programowania, cytuję Antoine de Saint-Exupéry: „Projektant wie, że osiągnął doskonałość nie wtedy, gdy nie ma już nic do dodania, ale kiedy nie ma już nic do zabrania”. . Wirth, nawet jeśli tego nie osiągnął, jest na właściwej drodze. W "linii języków programowania Wirtha" (Algol -> Pascal -> Modula-2 -> Oberon -> Oberon-2) każdy kolejny język jest prostszy i jednocześnie potężniejszy niż poprzedni.

Potężne, ale proste języki na zasadzie najmniejszego zaskoczenia. Silne pisanie statyczne, łatwe obiekty zorientowane obiektowo, zbieranie śmieci. Lista funkcji nie jest duża, ale wystarczy, aby być produktywnym i nie komplikować rzeczy, zwłaszcza na początkowych etapach.

Kiedy chcesz nauczyć się algorytmów i struktur danych, masz to na myśli. Ale jeśli twój język jest „potężny” (ma wiele funkcji, takich jak C ++, C #, Java, Python, ...), stracisz dużo czasu na naukę języka, a nie algorytmów i struktur danych. Nie zobaczysz lasu dla drzew. =) Możesz myśleć o drzewach jako o elementach składni (i wszelkich innych cechach) oraz o lesie jako o ważnym pojęciu (dowolny algorytm, struktura danych, może być OOP, cokolwiek). Im więcej cech (drzew) masz w swoim języku, tym trudniejsze staje się cofnięcie się i zrozumienie pojęć (zobaczenie lasu).

Ale jeśli język jest naprawdę potężny (ma mały zestaw dobrze sprawdzonych funkcji), sam język zajmuje drugie miejsce. Nie ma zbyt wielu drzew, więc możesz zrobić kilka kroków do tyłu i ... Myślę, że to wystarczy analogii. =)

Również wiele książek o algorytmach i strukturach danych używa pseudokodu podobnego do Algol / Pascal i będzie łatwo konwertować przykłady w tym języku. Możesz też bezpośrednio skorzystać z przykładów z książki „Algorytmy i struktury danych” Wirtha. Edycja Oberon (2004), PDF (1,2 MB).

Dodatkowe linki:

Żbik
źródło
@kemiisto: dzięki za uniuue i powieść, odpowiedź - i analogie! Przyjrzę się też Oberon-2.
bguiz
2
Angielska wersja przysłowia to „Nie widzę lasu z powodu drzew”.
Daniel Rose
6

„Jeśli jedynym narzędziem jest młotek, wszystkie problemy będą wyglądać jak gwoździe”

Naucz się przynajmniej kilku języków.

Twój wybór zależy również od celu.

Hobby? Praca w świecie Windows? Rodzina Linux / UNIX?

Rodzaje zastosowań: biznesowe a naukowe; sterowniki sprzętu lub aplikacje?

Aplikacje desktopowe czy aplikacje internetowe?

Mam dla Ciebie kilka sugestii.

(a) zdecydowanie naucz się trochę J (za darmo z jsoftware.com; następca APL; zarówno J, jak i APL są dziełami Kena Iversona, zwycięzcy Turinga ... Nagroda Turinga jest jak nagroda Nobla w informatyce).

(b) jeśli jesteś w świecie Windows, zacznij od C #, ponieważ tak wiele w .NET działa na C #. Jeśli możesz, zdobądź kopię książki „Inside c #” Toma Archera z wydawnictwa Microsoft Press. Możesz uzyskać bezpłatny system programowania C #, pobierając wersję Express firmy Microsoft.

(c) nauczyć się używać TDD / BDD… niezależnie od języka, najpierw napiszesz mały test zwany testem jednostkowym; następnie piszesz kod produkcyjny, aby przejść test jednostkowy; jeden mały krok na raz ... to nie tylko język, którego używasz, to także metodologia.

(d) naucz się języka asemblera ... asembler jest językiem niskiego poziomu, prawie maszynowym, da ci dobre zrozumienie tego, co dzieje się za kulisami.

(e) poza światem Windows, polecam C ++.

Nie ma najlepszego języka.

Gdyby chodziło tylko o język, programowanie byłoby łatwiejsze.

Nie tylko chcesz nauczyć się algorytmów, które są bardzo specyficzne, ale także chcesz poznać schematy, które są bardziej ogólne i mogą pomóc w wyborze podejścia do rozwiązania danego problemu.

Jedno jest pewne: jeśli zamierzasz zostać programistą, prawdopodobnie nigdy nie zabraknie Ci rzeczy do nauki.

gerryLowry
źródło
Struktury danych @bguiz mogą być całkowicie niezależne od języka; to jeden z powodów uczenia się różnych języków. Napotkasz także subtelne różnice, które mogą powodować frustrację, a nawet żal; na przykład nazewnictwo typów danych: bit dla SQL Server to bool dla języka C # i Boolean dla vb. rozmiar typu danych również się zmienia; na przykład int w c # jest ustalona na 32-bitowym, gdzie w c ++ jego rozmiar, a zatem jego pojemność zależy od platformy. Zestawy znaków mają również wpływ na rozmiar struktury danych; przykłady, 7-bitowy ASCII, 8-bitowy ASCII, Unicode. Następnie jest stały rozmiar vs. zmienny itd.
gerryLowry
„Struktury danych mogą być całkowicie niezależne od języka”. Aby zaimplementować najbardziej czysto funkcjonalne struktury danych w języku, który nie zapewnia czyszczenia pamięci, w zasadzie będziesz musiał napisać garbage collector. To poważna przeszkoda.
JD
Gdy będziesz biegły w OO, spróbuj objąć programowanie deklaratywne.
siwobrody
4

Możesz docenić język z algebraicznymi typami danych i dopasowywaniem wzorców, taki jak Standard ML, OCaml, F # lub Haskell. Na przykład tutaj jest funkcja równoważąca czerwono-czarne drzewo wyszukiwania binarnego napisane w OCaml / F #:

let balance = function
  | R(R(a, x, b), y, c), z, d | R(a, x, R(b, y, c)), z, d
  | a, x, R(R(b, y, c), z, d) | a, x, R(b, y, R(c, z, d)) ->
      R(B(a, x, b), y, B(c, z, d))
  | a, x, b -> B(a, x, b)
JD
źródło
10
Doceniam twój sarkazm, sir.
ergosys
4

Myślę, że Lisp jest wart uwagi.

Mój pierwszy kurs programowania uniwersyteckiego odbył się w Lisp. Wcześniej przez 10 lat pisałem programy w kilku językach. Myślałem, że pierwszy kurs programowania będzie nudny, ale się myliłem.

Lisp jest bardzo interesującym językiem, ponieważ ma bardzo prostą składnię. Fokus przenosi się ze składni na funkcjonalność. Niezwykle cenną rzeczą do nauczenia jest również funkcjonalny styl programowania. Po moim kursie Lispa zacząłem pisać programy w C ++ w zupełnie nowy, lepszy sposób, dzięki nowym koncepcjom, których nauczył mnie Lisp.

Lisp używa również tej samej reprezentacji dla kodu i danych, co otwiera przed interesującym projektowaniem algorytmów z kodem generowanym w locie, a następnie wykonywanym.

Anders Abel
źródło
2

Może się mylę, ale czy struktury danych i algorytmy nie są niezależne od języków programowania?

Ostatecznie struktury danych są tylko sposobem organizacji danych; każdy język wysokiego poziomu to obsługuje. Jasne, niektóre języki będą miały mechanizmy implementujące podstawowe struktury danych (takie jak Collection Framework w Javie lub C ++ STL), ale nie powstrzymuje Cię to przed programowaniem struktury danych w wybranym przez Ciebie języku programowania. Ponadto algorytmy są napisane w pseudokodzie, dzięki czemu są niezależne od języka.

Zdaję sobie sprawę, że to nie jest odpowiedź na Twoje pytanie, ale mam problem ze zrozumieniem tego, czego szukasz; uczenie się struktur danych / algorytmów lub nauka nowego języka.

Pran
źródło
1
@Pran: Wiem, że algorytmy są w pseudokodzie - ale pseudokod się nie skompiluje. Jestem praktycznym uczniem typu, więc aby naprawdę zrozumieć koncepcje, musiałbym zakodować to w języku, który można kompilować i uruchamiać. Dlatego tak naprawdę moje pytanie brzmi, jaki język najlepiej się do tego nadaje, w tym sensie, że każdy język powinien mieć swoje wady i zalety, dzięki czemu niektóre z nich lepiej nadają się do nauki DS&A niż inne.
bguiz
@Pran: „Mogę się mylić, ale czy struktury danych i algorytmy nie są niezależne od języków programowania?”. Jeśli język nie zapewnia GC, być może będziesz musiał go napisać.
JD
2

Każdy język z wyjątkiem okrutnego C ++ powinien działać dobrze.

Jeremy Jose
źródło
0

Wolę C ++ :)

Prasoon Saurav
źródło
19
-1 C ++ jest okropnym językiem do nauki (i prawdopodobnie można usunąć kwalifikator „nauka” z tego stwierdzenia).
cletus
4
Nie musi uczyć się ciemnych zakamarków C ++, aby kodować swoje algorytmy w C ++. C ++ jest w porządku.
Prasoon Saurav
9
więc myślisz, że dobrym pomysłem jest wypróbowanie kodu klasy dla DS w C ++ i złapanie się różnic między konstruktorem kopiującym a przesłonięciem operatora równości, referencjami i wskaźnikami wykraczającymi poza zakres, wyciekiem pamięci z powodu nieprawidłowego nowego / usunięcia użycie itp.? Wszystko to jest dość fundamentalne dla C ++.
cletus
5
ale chodzi o to, że NIE MUSISZ uczyć się tych rzeczy w Pythonie lub Javie. C ++ wymaga znacznie większej początkowej inwestycji i nie jest w żaden sposób bardziej wartościowy dla żądanej funkcji OP
Mantas Vidutis
2
Czy jest jakiś ważny powód, dla którego Javascript nie jest zalecany do nauki @cletus?
HalfWebDev