Jakich języków sugerowałbyś programiście do nauki, nie dlatego, że będą oni często korzystać z języka (ale mogą go mieć), ale dlatego, że poprawi on ogólną umiejętność programowania i pozwoli myśleć inaczej (i być może lepiej) ) droga?
Jakich języków sugerowałbyś programiście do nauki, nie dlatego, że będą oni często korzystać z języka (ale mogą go mieć), ale dlatego, że poprawi on ogólną umiejętność programowania i pozwoli myśleć inaczej (i być może lepiej) ) droga?
Odpowiedzi:
dla „normalnego” programowania i algorytmów:
dla doświadczenia zmieniającego myśl:
za zniszczenie twojego umysłu i przekroczenie linii między padawanem a Mistrzem Jedi:
Nie zapomnij o Javascript .
Ma funkcje OO, które nie są zwykłymi funkcjami OO. Jest dobrze przystosowany do funkcji i zamknięć wyższego rzędu, z których rutynowo korzystasz. Pozwala na wiele funkcjonalnych sztuczek programistycznych. Jest niezwykle elastyczny.
I to jest praktyczne, ponieważ ma ją każda poważna przeglądarka.
(Oczywiście ma również wiele nieprzyjemnych dziwactw. Niewiele praktycznych języków tego nie robi)
C i montaż dla działania komputera
Haskell i LISP zarówno do programowania funkcjonalnego, jak i metaprogramowania
APL do programowania wektorowego i zwięzłego
bash lub tcsh za programowe administrowanie komputerem
Sugerowałbym Schemat.
Jest to funkcjonalny język programowania wywodzący się z Lisp (większość uważa, że jest to dialekt). Główną różnicą w przypadku Common Lisp jest to, że jego podejście jest bardzo minimalistyczne - niezwykle . Na przykład, w normalnej dystrybucji Schematu (dowolny schemat <R5 lub Mit / GNU / Scheme) nie znajdziesz implementacji pętli: będziesz musiał stworzyć własną za pomocą rekurencji ogona.
Jest bardzo ekspresyjny, a jego składnia jest świetna do nauczenia się czegoś nowego o programowaniu, ponieważ: po prostu patrząc na kod, masz pojęcie o tym, jak kompilator / interpreter będzie działał przez niego.
Ponadto zawiera najlepszą książkę programistyczną, strukturę i interpretację programów komputerowych , którą można bezpłatnie pobrać ze strony internetowej MIT.
Oto kilka lekcji wideo, które mam nadzieję natychmiast zainteresują Cię tym fascynującym językiem - mówcami są autorzy SICP: http://groups.csail.mit.edu/mac/classes/6.001/abelson-sussman- Wykłady/
LISP, najlepiej Schemat w połączeniu z „Strukturą i interpretacją programów komputerowych” Abelsona i Sussmana, nauczy Cię myślenia w kategoriach innych niż narzucone przez C / C ++.
FORTH, w szczególności FORTH zorientowany na blok, a nie na plik (taki jak D85) nauczy cię ograniczać swoją gadatliwość. Jeśli w żadnym wypadku nie możesz napisać procedury dłuższej niż 16 linii po 64 znaki, jesteś zmuszony do streszczenia i uwzględnienia.
Java jest jednym z języków, których uczy się najwięcej na uniwersytetach na całym świecie i jest ku temu powód. Chociaż często jest podobny do dinozaura, daje wszystkim bardzo dobry przegląd Koncepcji nowoczesnego programowania. NIE pokazuje ci, jak działa sam komputer, jak asembler, a nawet już i tak znacznie bardziej abstrakcyjny język C. Ale piloci muszą umieć latać i nie być w stanie samodzielnie zbudować samolotu - ucz się JAVA jako dobra podstawa dla każdego kodu, który napiszesz w najpopularniejszych obecnie językach (dla rezonansu): Java, c ++, php, c #, ruby (na szynach) python i tak dalej ...
max
Ręce w dół, powiedziałbym Haskell. I z dwóch powodów:
Sugerowałbym Scalę, jeśli pochodzi ze świata C / Java.
To nie jest wyłącznie funkcjonalny język programowania, ale używa OO do symulacji niektórych funkcji programowania funkcjonalnego (np. Używanie obiektu do symulacji funkcji pierwszej klasy i funkcji wyższego rzędu).
Więc jeśli znasz OO, Scala używa terminów, które już znasz, aby wyjaśnić funkcjonalny świat.
Odkryłem, że łatwiej jest mi zrozumieć programowanie funkcjonalne w Scali niż nurkować w bardziej funkcjonalnym programowaniu, takim jak Haskell, Lista ... itd.
Języki funkcjonalne pomogły mi dotrzeć tam, gdzie jestem dzisiaj. Pomimo tego, że zajmuję się tworzeniem aplikacji internetowych, pojęcia wyniesione z języków funkcjonalnych pomagają mi znaleźć rozwiązania problemów, których inaczej nie widziałbym. Oto języki, z którymi pracowałem na mojej uczelni:
Uczenie się tych języków pomoże ci zrozumieć świat abstrakcji i jak budować bloki kodu, które zawierają inne funkcje, ukrywając szczegóły niskiego poziomu, abyś mógł skupić się na wysokich celach biznesowych.
Istnieje wiele języków programowania, które będą wymagały nowego myślenia o problemie (w stosunku do tego, do czego jesteś przyzwyczajony). Najczęstsze języki do nauki po nauczeniu się języka imperatywnego, są funkcjonalne i język logiczny, na przykład prolog i seplenienie .
Niektóre języki są pod silnym wpływem teorii kategorii, jak ocaml i Haskell, a niektóre są językami krzyżowymi, takimi jak Curry (funkcjonalne i logiczne). Curry jest prawdopodobnie najbardziej oszałamiającym językiem, jaki znam, nie tylko dlatego, że dostarczył Haskellowi niesamowitej inteligencji dzięki programowaniu logicznemu, ale także z powodu integracji z programowaniem opartym na ograniczeniach.
Innym zabawnym językiem jest Occam-pi, ponieważ jest tak obciążony współbieżnością, ale także z powodu ostatniego portu arduino .
Dobrze zaokrąglony programista ma kilka torebek chwytających za rękaw, a są to:
Te wszystkie nauczy Cię nieco różne sposoby, aby myśleć o i podejście problemy.
nie nauczysz się poprawnie żadnego języka programowania bez wyraźnego celu. Wiedząc, co chcesz z tym zrobić, możesz zdecydować, który program odpowiada Twoim potrzebom.
Na przykład, powiedzmy o c #.
C # może wykonywać program internetowy, program konsoli, samodzielny plik wykonywalny, program do gier, program Silverlight i program mobilny. Chociaż składnia jest prawie taka sama w prawie każdym przypadku, ale działa inaczej w każdym scenariuszu. Na przykład samodzielny plik wykonywalny przechowuje swoje informacje, dopóki nie zostanie zwolniony lub program nie zostanie zakończony, podczas gdy program internetowy, informacje są niszczone za każdym razem, gdy ładujesz stronę, aw srebrnym świetle spędzasz większość czasu, walcząc z plik xml.
Po drugie, nie marnuj czasu na egzotyczne języki (na przykład Haskel), mówiąc korporacyjnie, jest bardzo mało programów wartych twojego wysiłku: java (król wzgórza), c # / vb.net, php i sql.
Istnieje bardzo prosty program do pisania apletów Java o nazwie Przetwarzanie
Ten język zapewni bardzo podstawowe zrozumienie zmiennych, pętli i tego rodzaju rzeczy, jeśli dopiero zaczynasz.
Kilka świetnych sugestii tutaj. Prawdopodobnie wybrałbym osobiście C lub C ++. Zmuszają cię do radzenia sobie z wieloma pojęciami, które mają ogromne znaczenie dla zrozumienia, jak działają rzeczy, ale które mają tendencję do zaciemniania w innych językach. Samo zrozumienie, jak rzeczy naprawdę działają, pomoże ci jako programistowi, nawet jeśli język, którego używasz później, ukrywa niektóre szczegóły.
Montaż jest fajny, jeśli chcesz zagłębić się nawet w nieco niższy poziom, ale nie oczekuj, że zrobisz z tym wiele. :)
Poleciłbym Ruby. Ruby nie wymaga zmiany paradygmatów, ale zachęca do pracy w wielu paradygmatach. Myślę, że zaletą tego jest to, że zamiast być sfrustrowanym niemożnością pracy tak, jak jesteś przyzwyczajony, używasz innego paradygmatu z frustracji z ograniczeniami robienia rzeczy tak, jak jesteś przyzwyczajony.