Jakie koncepcje informatyki powinienem znać? [Zamknięte]

95

Jak myślisz, jakie koncepcje w informatyce uczyniły cię lepszym programistą?

Skończyłem z inżynierią mechaniczną, więc jako programista brakuje mi podstaw. Istnieje kilka standardowych koncepcji CS, których nauczyłem się ostatnio, a które dały mi znacznie głębsze zrozumienie tego, co robię, w szczególności:

Funkcje językowe

  • Wskaźniki i rekursja (Dzięki Joel!)

Struktury danych

  • Połączone listy
  • Hashtables

Algorytmy

  • Bubble Sorts

Oczywiście lista jest w tej chwili trochę krótka, więc liczyłem na sugestie dotyczące:

  1. Jakie pojęcia powinienem zrozumieć,
  2. Wszelkie dobre zasoby do ich prawidłowego zrozumienia (ponieważ Wikipedia może być czasami trochę gęsta i akademicka).
Jon Artus
źródło
5
Rodzaje bąbelków? Trzymaj się od nich jak najdalej! Raczej dowiedz się, jak działa quicksort / heapsort.
Carra
18
Tak, naucz się bubbleort. Dowiedz się, dlaczego jest to straszne. Naucz się szybkiego sortowania, łączenia i całej reszty, w tym ich indywidualnych słabości. Ale nie pisz ich w kodzie produkcyjnym: wywołaj funkcje sortowania dostępne na dowolnej platformie.
Brian Ensink,
@Roger Pate - +1 dla Ciebie, powinieneś wiedzieć, do czego służy algorytm lub struktura danych i do czego jest do niczego. Zarówno Quicksort, jak i Bubblesort mają taką samą wydajność w najgorszym przypadku [O (n ^ 2)], ale dla bardzo różnych rodzajów danych wejściowych, a Bubblesort ma najlepszą wydajność przypadku O (n), gdzie QS nadal wynosi O (n log n). Oczywiście, jeśli rozważasz Bubblesort, możesz zamiast tego wybrać sortowanie przez wstawianie.
Andre Artus

Odpowiedzi:

60

Spójrz na ten post na blogu autorstwa Steve'a Yegge (dawniej Amazon, teraz w Google):

Zawiera szczegółowe informacje na temat pięciu najważniejszych pojęć, które programiści powinni znać:

  1. Programowanie podstawowe (w tym rekurencja, we / wy pliku, sformatowane wyjście, pętle itp.)
  2. Projektowanie zorientowane obiektowo (w tym wzorce projektowe itp.). Powinieneś być w stanie stworzyć rozsądne projekty OO, a także zrozumieć koncepcje.
  3. Skrypty i wyrażenia regularne.
  4. Struktury danych - listy, zbiory, tabele skrótów, drzewa, wykresy itd. - a także notacja Big O i złożoność algorytmiczna.
  5. Bity, bajty i liczby binarne - jak liczby są reprezentowane w komputerze i jak nimi manipulować.
jammycakes
źródło
Niezły link. Trochę skoncentrowany na stronie unixowej (całkowicie brakuje .NET), ale nadal fajnie.
Toon Krijthe,
Świetny link - jest tam wiele rzeczy do przepracowania, chciałbym tylko, żeby zawierały linki do dobrych stron wyjaśniających te rzeczy.
Jon Artus,
Link będzie dla mnie bardzo przydatny, aby sprawdzić się i nadrobić zaległości. Dzięki ..
rpr
Zgoda, świetny link. Chociaż wiele ze zidentyfikowanych możliwych rozwiązań jest opartych na Uniksie, ogólne koncepcje są bardzo niezależne od języka / platformy. Dla większości programistów takie rzeczy jak rekurencja, pisanie ADT, na przykład drzewa i operacje bitowe, są dość rzadkie, ale są ważnym fundamentem.
Zach Burlingame,
4
Zgodziłbym się ze wszystkim oprócz wyrażeń regularnych. To miły bonus, ale większość rzeczy to podstawy na poziomie podstawowym, fundament, na którym wszystko jest zbudowane ... wyrażenia regularne są świetne, ale znam wielu świetnych programistów, którzy nigdy ich nie używają i nigdy nie muszą.
Beska
35

Na pewno należy rozumieć Big-O notacji i Big-O szacunki algorytmów - co to jest, jak jest on stosowany, dlaczego ważne jest, w jaki sposób porównać dwa algorytmy oddali swoje szacunki Big-O, jak budować szacunków Big-O dla prostych algorytmów.

ostro
źródło
1
Możesz zacząć od artykułu w Wikipedii, do którego utworzyłem łącze - jest zarówno dość prosty, jak i matematycznie poprawny.
ostry,
3
Musisz mieć dość złą opinię o zaawansowanej matematyce. Zrozumiałem to na pierwszym roku studiów, kiedy byłem dopiero na półmetku rachunku różniczkowego.
GoatRider
1
Nie zapomnij o pojęciu NP, a kiedy zawarty jest w nim problem, programista, który próbuje zakodować TSP (Traveling Salesman) w każdej transakcji bazy danych w celu wyszukiwania lub innego takiego idiotyzmu jest głównym problemem =]
Ed James
2
Powinieneś także wiedzieć, że duże O nie mówi ci, który algorytm zajmuje mniej czasu. Coś, czego większość absolwentów CS nie rozumie
Martin Beckett
3
W pewnym sensie tak. Mówi ci, który z nich ma najlepszy najgorszy przypadek, niekoniecznie który jest „szybszy”, ponieważ zależy to od zestawu danych wejściowych.
Ed James,
30

To trochę zabawne, że szukasz przedmiotów informatycznych , ale wikipedia wydaje mi się zbyt akademicka: D

W każdym razie, oto idzie, w przypadkowej kolejności:

Rik
źródło
2
+1, ponieważ wspomniałeś o bazach danych, które są często pomijane w tego typu listach, ale jest to bardzo ważna koncepcja, którą powinien znać każdy wszechstronny absolwent CS.
Brian Ensink,
14

Kilka pojęć, które pomogły mi w rozwoju (intelekt i kod):

  • Lexing, Parsing, String matching, Regex
  • Zapamiętywanie
    • hermetyzacja / określanie zakresu / zamknięcia
    • buforowanie
  • Rekursja
  • Iteratory / generatory
  • Programowanie funkcjonalne - niesamowity artykuł Johna Hughesa powiedział mi „dlaczego”

To są całe dziedziny dyskretnej matematyki, ale CS wymaga poważnego wprowadzenia:

  • Macierz / Algebra liniowa
  • Teoria grafów

Chociaż wykłady i artykuły Marka Jasona-Dominusa są często kierowane do hakerów Perla, myślę, że każdy programista skorzystałby na jego przejrzystej prezentacji i prawdziwym kodzie, szczególnie w Perlu wyższego rzędu .

bubaker
źródło
10

Powiedziałbym, że w dzisiejszych czasach zrozumienie programowania obiektowego jest koniecznością, nawet jeśli nie musisz go używać na co dzień.

Na tej podstawie powiedziałbym również, że pomocne może być zrozumienie najbardziej powszechnych wzorców.

Jeremy French
źródło
10

Widzę kilka dobrych koncepcji CS, ale niewiele mówię o matematyce.

Proponuję przyjrzeć się matematyce dyskretnej . Ma szeroki wachlarz użytecznych problemów, zaczynając od dowodów logicznych, które pomagają w pisaniu warunków w kodzie. Teoria grafów i kombinatoryka również pomagają w rozwiązywaniu złożonych problemów i optymalizacji algorytmów.

Chociaż jesteśmy przy temacie matematyki, algebra liniowa jest zwykle warunkiem wstępnym zaawansowanych zajęć z grafiki komputerowej.

Berkshire
źródło
1
Gdybym miał wybrać tylko jedną, byłaby to matematyka dyskretna. To prawie CS 101. Trudno mi wymyślić obszar lub paradygmat w ogólnym programowaniu, który nie jest w żaden sposób dotknięty przez DM.
Andre Artus
7

Macierz kompetencji programistów omówiła to szczegółowo, ale wyróżnię kilka:

  • Struktury danych
    • Zaawansowane struktury danych, takie jak drzewa B, sterty dwumianowe i Fibonacciego, drzewa AVL / Red Black, Splay Trees, Skip Lists, Try itp.
  • Algorytmy
    • Drzewo, wykres, proste algorytmy chciwości i dzielenia i zwyciężania, są w stanie zrozumieć znaczenie poziomów tej macierzy.
  • Programowanie systemów
    • Rozumie cały stos programowania, sprzęt (procesor + pamięć + pamięć podręczna + przerwań + mikrokod), kod binarny, montaż, łączenie statyczne i dynamiczne, kompilację, interpretację, kompilację JIT, usuwanie elementów bezużytecznych, stertę, stos, adresowanie pamięci…
  • Kontrola wersji kodu źródłowego
    • Znajomość rozproszonych systemów VCS. Wypróbował Bzr / Mercurial / Darcs / Git
  • Buduj automatyzację
    • Potrafi skonfigurować skrypt, aby zbudować system, a także dokumentację, instalatory, wygenerować informacje o wersji i oznaczyć kod w kontroli źródła
  • Testowanie automatyczne
    • Rozumie i potrafi skonfigurować automatyczne testy funkcjonalne, testy obciążenia / wydajności i UI
  • Rozkład problemu
    • Stosowanie odpowiednich struktur danych i algorytmów oraz generowanie kodu ogólnego / obiektowego, który zawiera aspekty problemu, które podlegają zmianom.
  • Rozkład systemów
    • Potrafi wizualizować i projektować złożone systemy z wieloma liniami produktów i integracjami z systemami zewnętrznymi. Powinien także być w stanie zaprojektować systemy wspierające operacje, takie jak monitorowanie, raportowanie, awarie itp.
cgp
źródło
5

Uważam, że wykresy i niektóre zastosowane algorytmy, takie jak najpierw głębokość, wyszukiwanie oddechu, najkrótsze ścieżki itp. Są bardzo przydatne. Orientacja obiektowa jest również bardzo powszechną koncepcją.

Mork0075
źródło
4

Zasada 1: Oprogramowanie to przechwytywanie wiedzy . Oprogramowanie coś znaczy. Jeśli nie masz jasności co do znaczenia, poświęć więcej czasu na rozmowę z użytkownikami, aby zrozumieć, co robią.

Algorytmy i struktury danych to dwie strony tego samego medalu. Algorytm zależy od struktury danych, struktura danych zależy od algorytmu.

Oducz się sortowania bąbelkowego tak szybko, jak to możliwe. Poważnie. Wszystkie współczesne języki (Java, Python itp.) Mają klasy kolekcji, które implementują lepsze sortowanie niż sortowanie bąbelkowe. Nie ma absolutnie żadnych okoliczności, w których kiedykolwiek powinieneś używać sortowania bąbelkowego do czegokolwiek. Powinieneś szukać klasy kolekcji, która zawiera metodę sortowania. Lepiej poszukać algorytmu, który całkowicie unika sortowania.

Musisz nauczyć się kilku języków.

  • Język programowania (Java, Python itp.)

  • Język powłoki.

  • Język bazy danych (SQL)

  • Języki prezentacji (HTML i CSS)

  • Inne języki reprezentacji danych (XML, JSON)

Musisz nauczyć się kilku struktur danych.

  • Sekwencje (listy, krotki, pliki)

  • Hierarchiczne (jak dokumenty XML i HTML, a także podstawowy system plików)

  • Relacyjne (takie jak bazy danych i system plików z wrzuconymi twardymi i miękkimi linkami)

  • Mapy (lub indeksy lub tablice asocjacyjne), w tym mapy z skrótami i mapy drzew

  • Zestawy

Plus trochę algorytmicznej analizy złożoności. Czasami nazywany „Wielkim O”. Dlaczego sortowanie bąbelkowe jest złe, to fakt, że jest to O ( n ^ 2), gdzie szybkie sortowanie to O ( n log n ).

S.Lott
źródło
Dla przypomnienia, nigdy bym nie używał sortowania bąbelkowego! Właśnie dowiedziałem się, jak to działa, jest ciekawym doświadczeniem i doszedłem do wniosku, że istnieje kilka innych takich algorytmów, które ludzie powinni rozumieć na tyle dobrze, aby pisać w wybranym przez siebie języku.
Jon Artus,
Istnieją niezliczone algorytmy. Większość z nich jest zła. Niektóre z nich dobre. Sortowanie bąbelkowe jest po prostu złe. Kup KAŻDĄ książkę o algorytmach i idź dalej.
S.Lott,
Zwykłe wybieranie, ale Quicksort to najgorszy przypadek O (n ^ 2). Zwracam na to uwagę tylko dlatego, że myślę, że zrozumienie, dlaczego tak jest, jest cennym ćwiczeniem edukacyjnym podczas studiowania podstawowych algorytmów.
Brian Ensink,
W przypadku szybkiego sortowania tak - ważne ćwiczenie. W przypadku sortowania bąbelkowego jedyną rzeczą jest sprawdzenie, jak bardzo zły jest to algorytm. Zrozumienie typowego i najgorszego przypadku jest ogólnie ważne.
S.Lott,
4

Cóż, puszka robaków jest już otwarta! :)
Zacząłem w elektrotechnice.

Projektowanie relacyjnych baz danych: Śledzenie danych jest jak Arnold w „Kindergarden Cop”.
To może być totalny chaos. To musi być kontrolowane.
Jak przechowywać dane w jak najmniejszej liczbie lokalizacji przy jak najmniejszej liczbie duplikatów informacji. Jak sprawić, by Twoje dane były lekkie i łatwo dostępne. Jak kontrolować wzrost i integralność danych.

Projekt interfejsu użytkownika (UI): w ten sposób użytkownik musi uzyskać dostęp do danych, które śledzimy.
Większość interfejsów użytkownika została zaprojektowana przez programistów. Dlatego większość interfejsów użytkownika niestety działa równolegle z projektem bazy danych. Użytkownicy w ogóle nie przejmują się projektowaniem danych. Po prostu chcą tego, czego chcą. Chcą to łatwo zdobyć. Zwykle wymaga to dużej separacji od projektu danych i interfejsu użytkownika. Naucz się oddzielać „inżynierię” siebie od „południowej gościnności”.

Programowanie obiektowe: wiele języków sprowadza się do tego formatu.

Przetwarzanie równoległe - wielowątkowość: wiele procesorów przyspiesza pracę!
Komputery równoległe istnieją od dziesięcioleci. Od jakiegoś czasu są na naszych komputerach stacjonarnych. W przypadku „przetwarzania w chmurze” masowe przetwarzanie równoległe jest nie tylko obowiązkowe, ale także preferowane. Jest niesamowicie potężny! Programiści równolegli mają duży potencjał zatrudnienia.

Zrozumienie reguł biznesowych: Pomaga to w tworzeniu dużej części logiki w oparciu o tabelę.
Wiele warunków IFblock może znajdować się w tabelach reguł biznesowych. Aby zmienić logikę, po prostu zmień informacje w tabeli. Małe / brak przekodowywania. Mała / brak ponownej kompilacji.

Nadzór nad zdarzeniami ... Metody wykonują pracę:
oddzielaj elementy w kodzie. Ułatwia innym dokonywanie aktualizacji w przyszłości. Jest to również w pewnym stopniu analogiczne do struktury Model / Widok / Kontroler (MVC).

PJ

PJ
źródło
3

Dla mnie bardzo dużo dostałem z poniższego kursu na uniwersytecie

  • Zarządzanie projektami
  • Interakcja człowiek - komputer (pomaga maniakom tworzyć bardziej przyjazne dla użytkownika ekrany)
  • Projekt bazy danych (w tym sposób działania baz danych, dzienniki transakcji, blokowanie itp.)
  • Magazyn danych
  • Grafika (OpenGL)
  • Zaawansowane algorytmy
  • Struktury danych

Rzeczy, których żałuję, że nie zrobiłem na uniwersytecie

  • Budowa kompilatora
  • Wzorce projektowe
  • Teoria automatów
uriDium
źródło
3

LOGIKA - po prostu przeceniam znaczenie logiki w programowaniu. Powiedziałeś, że zajmowałeś się inżynierią mechaniczną, więc musisz wiedzieć, jak bardzo matematyka może ułatwić ci życie.

Rachunek zdań , First-Order Logic , Second-Order Logic : są bardzo potężne narzędzia. Prawdopodobnie najważniejsza (i jedyna) rzecz, której nauczyłem się na uniwersytecie. Logika jest jak ciężka artyleria programisty - wiele bardzo złożonych problemów (a także tych mniej złożonych) staje się znacznie prostszych, gdy nadasz im uporządkowaną, logiczną formę. To tak, jak algebra liniowa dla inżynierów mechaników.

Tamas Czinege
źródło
3

Myślę, że dobrze wiedzieć, jak działa kompilator. Aho ma klasyczną książkę o koncepcjach używanych podczas tworzenia kompilatora. Tytuł to Kompilatory: zasady, techniki i narzędzia. Nazywa się Dragon Book. Aby naprawdę zrozumieć tę książkę, powinieneś rozumieć języki formalne. Hopcroft ma dobrą książkę na ten temat - Wprowadzenie do teorii automatów, języków i obliczeń.

zooropa
źródło
2

Wspomniano już tutaj o wielu dobrych odpowiedziach, ale chciałem dodać podzbiór tego, co jest ważne, ale jak dotąd nie zostało to omówione.

Po 15 latach studiów podyplomowych w zakresie profesjonalnego tworzenia oprogramowania, stwierdzam, że regularnie używam niektórych z następujących pojęć zaczerpniętych w szkole:

  • Ogólne koncepcje obiektów obiektowych i funkcje nowoczesnego języka programowania (klasy, ukrywanie danych itp.).
  • Metryki wydajności algorytmu (notacja Big O). Projektując algorytm, wykonując analizę Big O w celu określenia kosztu algorytmu i szukając bardziej wydajnych alternatyw w obszarach wąskich gardeł.
  • Połączone listy i inne złożone struktury danych.
  • Szybkie sortowanie i różne koncepcje sortowania.
  • Drzewa i szybka manipulacja drzewami.

Jeśli twój język / platforma nie obsługuje Garbage Collection, alokacja pamięci i czyszczenie są krytyczne i zostaną dodane do listy.

pearcewg
źródło
2

Głosuję za dyskretną matematyką. Informatyka to abstrakcja. nauka myślenia jak matematyk jest bardzo pomocna.

Chciałem też dodać do tego, co S.Lott powiedział o językach. Ważna jest również nauka kilku RODZAJÓW języków. Nie tylko kompilacja a skrypty. Ale funkcjonalne (ML, Lisp, Haskell) logiczne (Prolog) zorientowane obiektowo (C ++, Java, Smalltalk) imperatywne (nawet C, Pascal, FORTRAN).

Im więcej znasz paradygmatów programowania, tym łatwiej jest przyswoić sobie nowe języki, gdy pojawia się nowy, gorący!

Brian Postow
źródło
2

Niektóre koncepcje systemu operacyjnego

 ( memory, IO, Scheduling, process\Threads, multithreading )

[dobra książka „ Modern Operating Systems , 2nd Edition, Andrew S. Tanenbaum”]

Podstawowa znajomość sieci komputerowych

[dobra książka Tanenbauma

Pojęcia OOPS

Finite autometa

Język programowania (najpierw nauczyłem się C, a potem C ++)

Algorytmy (złożoność czasu \ przestrzeni, sortowanie, wyszukiwanie, drzewa, lista połączona, stos, kolejka)

[dobra książka Wprowadzenie do algorytmów ]

aJ.
źródło
auto meta? - na pewno "automaty" jak przy pierwszej edycji.
Tom Duckering,
Ups! chyba ugrzęznąłem, żeby sprawdzić pisownię. Poprawię to. Dzięki.
aJ.
1

Spróbuj zrozumieć wszystkie poziomy programowania. Od najniższego poziomu (montaż) do najwyższego poziomu.

Weźmy na przykład rekursję, która jest łatwą funkcją :) Spróbuj nauczyć się asemblera i stwórz program, który będzie używał rekursji w asemblerze.

Chrys
źródło
1

Algorytmy.

Nauka posługiwania się językiem programowania w sposób zstępujący jest czymś, czego można się nauczyć na bieżąco, ale praktycznie niemożliwe jest samodzielne wymyślenie wszystkich powszechnie używanych algorytmów. z pewnymi problemami.

Na przykład nie można po prostu napisać niektórych programów z sortowaniem bąbelkowym i oczekiwać, że zostanie on uznany za dobry, bez względu na to, jak dobry jest kod.

Podsumowując - zobacz Wprowadzenie do algorytmów

Nie musisz tego opanowywać, po prostu wiedz, co się dzieje ...

Liran Orevi
źródło
1

Jest to oczywiście dobre zrozumienie programowania obiektowego, dobre zasady przewodnie, takie jak SOLID Principles, oraz przestrzeganie ustalonych wzorców i praktyk.

Jeśli spojrzysz na SOA lub DDD, ostatecznie wszystkie one wracają do jakiejś formy koncepcji OOP.

Poleciłbym ci zdobyć kilka dobrych książek OOP i na początek wybrać bogaty język, taki jak C # lub Java

OOP użytkownika Grady Booch

(PHP, chłopaki z rubinami, proszę, nie głosujcie na mnie, podam mu tylko kilka przykładów na początek, tutaj możecie podać własne odpowiedzi i sugestie)

Srikar Doddi
źródło
1

Nie zamierzam ci mówić żadnych konkretnych pojęć do przestudiowania, ale zamiast tego zalecam dużo lekkiego czytania z szerokiego zakresu tematów. Nie martw się o dogłębne zrozumienie każdego tematu, o którym czytasz - w tym momencie ważniejsze jest, abyś był w stanie rozpoznać, jakiego rodzaju problemu, na który patrzysz, abyś mógł po prostu ... studiowanie w czasie, kiedy faktycznie się z tym mierzysz. Innymi słowy, jest w porządku, jeśli nie wiesz, jak rozwiązać problem kombinatoryki, o ile wiesz wystarczająco dużo, aby wyszukać „kombinatorykę”, kiedy chcesz zobaczyć, na ile sposobów możesz uporządkować zestaw obiektów lub wybrać podzbiór .

Wikipedia jest całkiem dobrym źródłem do tego rodzaju szerokiego przeglądania, zwłaszcza jeśli zaczynasz tylko przeglądać. Jeszcze lepszą, zwłaszcza jeśli uważasz, że Wikipedia jest zbyt akademicka lub niedostępna, jest wiki C2 . (Co ciekawe, jest to oryginalna wiki wymyślona przez Warda Cunninghama).

John Hyland
źródło
0

Myślę, że ważne jest, aby zrozumieć podstawową teorię związaną z wielowątkowością, bez tego może być trudno nawet dostrzec, że może istnieć problem, dopóki nie debugujesz na serwerze na żywo o godzinie 4 w niedzielny poranek.

Semafory, sekcje krytyczne i wydarzenia.

Jim T.
źródło
0

Nie, nie sortowanie bąbelkowe, sortowanie szybkie. To jest duże-O - sortowanie bąbelkowe uśrednia O (n ^ 2), szybkie sortowanie to O (n * log (n)).

GoatRider
źródło
0

Powiedziałbym, że poniżej są najważniejsze rzeczy

  • Programowanie obiektowe
  • Pojęcia dotyczące systemu operacyjnego
    • Proces i wątek
    • Algorytmy planowania
  • Struktura danych
    • Rodzaj przechowywania i gromadzenia danych, typy (lista połączona, hash, tablica itp.)
    • Algorytmy sortowania
    • Złożoność algorytmów

Następnie przejdź do rzeczy związanych z konkretnym językiem. Mam nadzieję, że to jest pomocne!

Mutant
źródło
0

Zacząłbym od cytatu:

„jeśli jedynym narzędziem, jakie masz, jest młotek, traktujesz wszystko jak gwóźdź”. (Abraham Maslow)

Najważniejszą zasadą, IMO, jest poznanie wielu różnych paradygmatów programowania, języków i dokładne poznanie dostępnych narzędzi. Każdy problem można rozwiązać w prawie każdym wybranym języku, niezależnie od tego, czy jest to pełny język głównego nurtu z ogromną biblioteką domyślną, czy mały język specjalistyczny, taki jak AutoHotKey. Pierwszym zadaniem programisty jest określenie, czego użyć zgodnie ze specyfikacją problemu. Niektóre koncepcje zapewniają lepsze podejście do tematu, niezależnie od tego, jaki jest Twój główny cel - wyrafinowanie, zaciemnianie, wydajność, przenośność, konserwacja, mały rozmiar kodu ...

W przeciwnym razie skończysz jak niektórzy programiści, którzy desperacko próbują zrobić coś w jednym specjalizowanym przez siebie języku, podczas gdy problem może być trywialny do rozwiązania w innym kontekście programowania.

Ta rada jest zgodna z dzisiejszą tendencją do projektów wielojęzycznych (weźmy na przykład aplikacje internetowe, które mogą obejmować kilka języków w jednej aplikacji, takie jak C #, JS, CSS, XPath, SQL, XML, HMTL, RegExp ... a nawet różne paradygmaty programowania (na przykład C # wprowadził ostatnio pewne koncepcje z paradygmatów programowania funkcjonalnego, lambd).

Więc podstawową rzeczą jest ciągła nauka, na zawsze :)

majkinetor
źródło
0

Myślę, że grafika 3D to coś, czego każdy powinien się nauczyć. Albo przynajmniej jak prawidłowo używać jednorodnych wektorów i transformat macierzowych.

Może być pomocny nie tylko przy tworzeniu aplikacji 3D, ale także w dziedzinie mechaniki takich jak kinematyka odwrotna w robotach, obliczanie momentów i wiele innych rzeczy.

Nie rozumiałem w pełni algebry liniowej, dopóki nie przeczytałem grafiki 3D, jednego z najlepszych kursów, jakie kiedykolwiek ukończyłem, mimo że nasz nauczyciel był zły.

Koleś
źródło
0

Ponieważ maszyny z wieloma rdzeniami (zarówno CPU, jak i GPU) stają się standardem, powiedziałbym, że obejmują one algorytmy rozproszone (od wielu wątków do wielu maszyn). Niezwykle ważne jest zrozumienie wielowątkowości i przetwarzania rozproszonego. Przepraszam, że link nie zapewnia dużej pomocy.

Erich Mirabal
źródło