Jakiego języka powinienem się nauczyć w zakresie informatyki?

11

Jestem zupełnie nowy w nauce obliczeniowej i szukam dobrego punktu wyjścia.

Rozumiem, że nie ma obiektywnie najlepszego języka, ale chciałbym nauczyć się języka, który ma niewątpliwie silną i widoczną obecność w dziedzinie nauk obliczeniowych - taki, który uważa się za mający wyjątkowe możliwości i wydajność.

Na początek skłaniałem się ku modelowaniu związanemu z wiązaniem atomów i interakcjami, z wymogiem przedstawiania / symulacji graficznych.

Czy niektóre języki są lepsze dla niektórych dziedzin niż inne (tj. Fizyka vs. czysta matematyka)? A może wybór języka zależy od innych czynników?

Słyszałem, jak często rzucano imię Fortran.

Propozycje?

użytkownik1299028
źródło
1
C ++ i Fortran są dobrze znanymi językami w społeczności. Ostatnio widać wzrost wykorzystania dynamicznych języków. Często wybierasz swoją bibliotekę, a nie język.
vanCompute,
9
Przypomina mi się powiedzenie, że prawdziwi programiści mogą pisać Fortran w dowolnym języku.
hardmath
1
Oto bardzo podobne pytanie z dużą ilością odpowiedzi: scicomp.stackexchange.com/questions/304/c-vs-fortran-for-hpc
Ondřej Čertík
1
„Rozumiem, że nie ma obiektywnie najlepszego języka” - a więc dlaczego nie nauczyć się być niezależnym od języka, aby móc pisać w jakimkolwiek języku, który zostanie ci rzucony?
JM
2
Musisz opanować angielski. Bez niego nigdzie nie znajdziesz się w nauce obliczeniowej.
Johannes

Odpowiedzi:

15

Sprowadza się to głównie do dostępnych bibliotek numerycznych, które pomogą w realizacji zadania. C / C ++ ma zaimplementowaną dużą liczbę bibliotek numerycznych, ale bycie językami niskiego poziomu nie jest najlepszym rozwiązaniem do szybkiego prototypowania czegoś.

Myślę, że aby szybko przejść do rozwiązania, zaleciłbym użycie czegoś takiego jak Matlab lub Mathematica. Mają duży zestaw narzędzi i są na bardzo wysokim poziomie. Najprawdopodobniej twoja implementacja nie będzie skalowana do użytku produkcyjnego, ale może być dobrym placem zabaw dla wypróbowania różnych metod. Gdy znasz już ścieżkę, którą możesz obrać, zawsze możesz bardziej efektywnie zaimplementować coś w C / C ++.

akg
źródło
4
Wiele osób - zarówno ze środowisk akademickich, jak i zewnętrznych - tak naprawdę nie ufa kodowi, chyba że ma przynajmniej minimalny pakiet automatycznych testów. Nie wiem, jakie jest narzędzie dla takich rzeczy w matlab i matematyce, ale istnieje kilka fajnych pakietów dla bardziej popularnych języków, takich jak Python i C ++.
cjordan1
3
MATLAB ma MATLAB xUnit, ale Python i C ++ mają więcej (i, moim zdaniem, lepszych) pakietów testowych.
Geoff Oxberry
24

Pyton!

  1. Zacznij bezpośrednio od biblioteki numpy , małych skryptów i interaktywnej powłoki ipython .
  2. Zdobądź więcej umiejętności dzięki licznym darmowym książkom i samouczkom .
  3. Zwiększ wydajność dzięki scipy jako nakładce na wysoce wydajne procedury numeryczne i matplotlib do wizualizacji
  4. Skorzystaj z dobrze opracowanych i wydajnych modułów do obliczeń naukowych, takich jak Krypy , FeNiCS i wiele innych
  5. Zwróć uwagę, że płynne przejście między programowaniem płaskim i obiektowym oraz wrodzona modułowość Pythona ułatwiają obsługę większych projektów.
  6. Stwórz swój kod tak szybko, jak C lub Fortran, po prostu przepisując krytyczne części w cytonie . Można również z łatwością obejmują procedur napisanych w języku Fortran lub C .

Parafrazuje to, co moim zdaniem jest najlepszym sposobem podejścia do problemu w informatyce naukowej. Zacznij od rozwiązania problemu przez zabawkę z przykładami zabawek w małych skryptach. Stań się bardziej systematyczny i skonfiguruj zestaw kodu. Następnie uruchom kod! Na koniec, jeśli to konieczne, wykonaj optymalizację kodu. Nie wymyślaj koła na nowo i nie dokonuj przedwczesnej optymalizacji.

(Dodatkowe plusy: Python jest dostępny za darmo - bez problemów z licencją, duża społeczność np. Na przepływie stosów, moduły do ​​dobrego programowania jako testowanie jednostkowe lub logowanie ...)

Jan
źródło
5

Fortran: podobny do Matlaba, łatwy do nauczenia się i używany oraz szybko produktywny, ale dobry tylko do obliczeń numerycznych

C ++: Trudny do opanowania (zajmie ci lata), ale dużo używał poza obliczeniami numerycznymi (bezpieczeństwo pracy)

Python: W dzisiejszych czasach jest bardzo polecany, ale zbyt wolny, by można go było łatwo wykonać. Będziesz musiał napisać wszystkie swoje jądra kosztownie obliczone w języku C, a następnie wywołać je z języka Python, co oznacza, że ​​będziesz musiał nauczyć się (co najmniej) dwóch języków

użytkownik4245
źródło
1
Twierdziłbym, że krzywa uczenia się dla Fortran i C ++ jest nieco podobna. Podniosłem wystarczające umiejętności w obu przypadkach, aby rozwiązać prostszy koniec problemów w ciągu kilku miesięcy, każde z tła java, matlab i c #. W zależności od języków, które ktoś zna, widziałem, że c ++ jest znacznie łatwiejszy do nauki niż fortran, ponieważ większość dużych kodów jest napisana w przestarzałych wersjach.
Godric Seer
@Godric: Na ~ 600 stronach standard Fortran 2008 to mniej niż połowa C ++ 11 (~ 1300 stron)
stali
1
@stali, tak, ale na przykład pracuję z około ćwierć miliona wierszy starszego kodu napisanego w Fortran77. Musiałem więc nauczyć się stylu 77, aby móc z nim pracować, 90-95, aby wprowadzić w nim możliwe do utrzymania zmiany (ponieważ typowe bloki są attrokalne), a następnie '08, aby nie utknąć w ciągu dekady w przeszłości. Fortran, choć stary język, przeszedł ogromne zmiany w ciągu ostatnich dziesięcioleci i jeśli nie zaczynasz od zera, nauka jego dziedzictwa nie jest trywialna.
Godric Seer
2
Nie zgodziłbym się ze stwierdzeniem, że Python jest „zbyt wolny, by nietrudna praca”. Rzeczywiście, jeśli piszesz swoje mnożenia macierz-wektor (i tym podobne) wyłącznie w języku Python, będziesz miał zły czas. Abstrakty do niektórych bardziej wydajnych języków zostały już dla Ciebie zrobione: NumPy, Scipy prawdopodobnie mają wszystko, czego kiedykolwiek potrzebujesz. Lub jeden z pozostałych 50 000 pakietów.
Nico Schlömer,
1
@ NicoSchlömer Zgodziłbym się z „zbyt wolnym dla nietrywialnej pracy”. Moja symulacja w Pythonie (Numpy / Scipy) wolniej niż ten sam kod w wersji Fortran90 około 10x. Polecam Fortran90 lub C ++.
fronthem
4

Krótka odpowiedź
Dowiedz się o podstawach kodu zorientowanego obiektowo poprzez python i poznaj podstawy informatyki przez C. Kiedy przynajmniej dobrze sobie radzisz z tymi dwoma innymi językami, naucz się C ++, ponieważ w C ++ możesz zrobić prawie wszystko i spraw, by działał szybko (choć pisanie trwa wieczność).

Dłuższa odpowiedź
Tak, oto rzecz: dla pierwszego projektu będziesz w czyimś laboratorium, pracując nad kodem innej osoby. W takim przypadku to oni wybiorą język programowania. Co osobiście uważam za świetne!

Mam na myśli, że jako początkujący przez jakiś czas tak naprawdę nie poznasz swojego łokcia od łokcia, a zwłaszcza, gdy nie wiesz, co robisz, nauka programowania może być bardzo zaciągająca. Dlatego dobrze jest mieć strukturę i ograniczenia, które wynikają z pracy nad kodem innej osoby, i dobrze jest mieć motywację i emocje, które mogą pochodzić tylko z pracy nad prawdziwym projektem.

Mimo to, niezależnie od tego, jakiego języka używa twoje laboratorium (szczególnie jeśli jest to Matlab), powinieneś prawdopodobnie nauczyć się python, C i C ++. W szczególności, jeśli nie pochodzisz z informatyki, MUSISZ przeczytać „The C Programming Language” Kernighana i Ritchiego. Ma 35 lat i daje wyraźne wrażenie, że jego autorzy programowali na kartach perforowanych, ale jest to najrzadszy z ptaków: ponadczasowa książka o informatyce. Sprawi, że wiele rzeczy będzie znacznie wyraźniejszych.

tel
źródło