Co powinienem zrobić, aby być niezależnym od języka?

52

Do tej pory pracuję z asp.net i C #. Zrobiłem też przyzwoitą pracę w Javie. Planuję swoją karierę w taki sposób, że pewnego dnia powinienem być obojętny na język. Czego muszę się nauczyć?

Najpierw paradygmaty OOP, gdy mówi o projekcie klasy. Czy są jeszcze jakieś?

Gopi
źródło
2
Czy starasz się: unikać etykietowania, elastyczności w pracy lub jakiejś misji wizji?
JeffO
2
@Jeff Tak! aby nie zostać oznaczonym i nie walczyć, że mój język jest NAJLEPSZY;)
Gopi
Bardziej prawdopodobne byłoby zatrudnienie faceta o silnej opinii, który nie zgadzałby się z moim. Ponieważ wtedy mógłby napisać Javę.
Erik Reppen
Gdybyś to zrobił, rekruterzy pominęliby twoje CV.
gonzobrains

Odpowiedzi:

67

Aby być niezależnym od języka, musisz mieć doświadczenie we wszystkich popularnych stylach i typach języków.

  • Imperatyw język (Powiesz jej, co zrobić, krok po kroku Np. - C)
  • Deklaratywny język (można powiedzieć, że swój cel, że domyśla się, co zrobić Np. - SQL / HTML / Prolog)

Również:

  • Funkcjonalny język (Funkcje są kluczem, unikając państwowe i skutki uboczne są cele Np. - Haskell / OCaml / Lisp / F #)
  • Obiektowego języka (Architecture, gdzie obiekty hermetyzacji danych związanych oraz metody, które działają na nich). Np. - Java / C #)

Niektóre style pisania:

  • Statycznie wpisane języka (typy danych są określone i sprawdzane w czasie kompilacji Np. - C #)
  • Język z dynamicznym pisaniem (typy danych są sprawdzane w czasie wykonywania. Np. - Python / JavaScript) Przydatne jest także pisanie
    z mocnym i słabym pisaniem.

Niektóre różne style środowiska wykonawczego:

Niższe rzeczy:

  • Coś dość niskiego poziomu (np. - C)
  • Niektóre dialekty montażu (np. NASM)

Co więcej, powiedziałbym, że potrzebujesz doświadczenia w programowaniu równoległym i czymś sterowanym zdarzeniami . Prawdopodobnie powinieneś również upewnić się, że wiesz coś o różnych domenach, takich jak programowanie internetowe (klient i serwer), rozbudowane oprogramowanie do rozwoju / pulpitu, gry. Możesz także dowiedzieć się o programowaniu wbudowanym lub dedykowanym sprzęcie (np. Konsolach do gier), a tworzenie aplikacji mobilnych staje się coraz ważniejszą domeną.

Inni wspominali również, że warto zdobyć trochę doświadczenia w programowaniu ogólnym i programowaniu Meta .

Kiedy uczysz się tych paradygmatów, unikaj uczenia się składni i pisania w starym stylu. Widziałem, jak wielu programistów C # pisze JavaScript tak, jakby był wpisany statycznie. Nie rób tego, spróbuj nauczyć się paradygmatów językowych i je zaakceptuj.

Jeśli to wszystko zrobisz, różnice między językami staną się w dużej mierze składniowe, więc przełączanie stanie się dość prostym ćwiczeniem uczenia się nowej składni.

Nie zapominaj jednak, że współczesne programowanie prawie zawsze zależy od frameworka, więc bardzo ważne jest również zapoznanie się ze wspólnymi i popularnymi frameworkami dla każdego języka, którego się uczysz. Znajomość C # nie ma znaczenia bez .net.

Simon P. Stevens
źródło
9
Jak HTML jest deklaratywny w danym znaczeniu? „Cel -> Działanie”? Tak naprawdę to nic nie robi .
Felix Dombek
3
Świetnym deklaratywnym językiem, który mogę jedynie polecić, jest Prolog. Różni się od wszystkiego innego - żadnych funkcji (ale relacje, które działają w drugą stronę), żadnego jawnego przepływu kontroli (interpreter rozwiązuje wszystko za Ciebie), tylko jedna świetna struktura danych (warunki, nic więcej nie jest potrzebne). Jest niesamowicie szybki co robi, robiąc miliony unifikacji i wnioskowania na sekundę - a czas potrzebny na opracowanie czegoś jest tak krótki jak w Pythonie w porównaniu do C / C ++.
Felix Dombek
3
@ Felix: HTML, goal = "Chcę etykiety i pola tekstowego". Działanie = Mechanizmy układu i grafiki wymyślają, jak je narysować. Szczegóły zależą od poszczególnych przeglądarek. Ty definiujesz tylko to, czego nie chcesz, jak to zrobić. Zobacz tutaj . Zgadzam się jednak, że tak naprawdę nie jest to „język”. Prolog jest lepszym przykładem, zaktualizuję.
Simon P Stevens,
1
+1 Aby uzyskać dobrą listę typów, wybór języka jest nieco oddalony od paradygmatu w niektórych miejscach, ale ogólnie jest doskonały.
Orbling
2
Nawiasem mówiąc, powinieneś dodać „Różne domeny / poziomy abstrakcji”: sieć, interaktywna sieć, narzędzia komputerowe, gry komputerowe, gry trwałe nie są budowane w ten sam sposób, ponieważ ograniczenia i odległość od sprzętu są różne, co powoduje wybór języków ( a nawet istnienie) bardziej oczywiste dla tego, kto chce zrozumieć, co to znaczy być agnostykiem.
Klaim
4

Nie sądzę, żebyś mógł stać się naprawdę niezależny od języka. Uważam, że „myślę” w moim obecnym języku (w tej chwili C #).

Jednak powiedziawszy to, myślę, że możesz oddzielić projekt od kodu, próbując myśleć w pseudo-kodzie, a nie w określonym języku, i faktycznie zapisać go w tym formacie. Może to pomóc Ci skoncentrować się na decyzjach dotyczących projektu i architektury, a nie na implementacji w Twoim obecnym języku. Wadą tego - jak zauważa Simon - jest to, że język i struktura, której ostatecznie używasz, nieuchronnie wpłynie na projekt. W miarę rozwoju projektu będzie on coraz bardziej związany z językiem i strukturą.

ChrisF
źródło
+1 za „Nie możesz być naprawdę niezależny od języka”. Ale nie do końca zgadzam się z twoim drugim akapitem. Myślę, że ważne jest zaprojektowanie języka i frameworka, którego będziesz używać.
Simon P Stevens,
@ Simon - masz rację na temat projektowania frameworka. Zaktualizuję odpowiedź.
ChrisF
3

Czytając swoje pytanie i niektóre odpowiedzi, można odnieść wrażenie, że utożsamiacie „agnostycyzm językowy” z „znajomością każdego paradygmatu na ziemi”.

Nie jestem pewien, czy znajomość każdego istniejącego paradygmatu, czy znajomość różnorodnych języków, obejmujących kilka paradygmatów i typów języków sprawia, że ​​jesteś „agnostyczny”.

To tak, jakby powiedzieć, że praktykowanie wszystkich religii powoduje, że stajesz się religijnie agnostyczny.

Myślę, że osoba znająca język w zakresie programowania języków powinna być kimś, kto w ogóle nie umie programować w dowolnym języku lub nie obchodzi go, w jakim języku ma się programować.

To powiedziawszy, niektórzy twierdzą, że prawdziwy programista może programować w dowolnym języku, mając dostęp do dokumentacji tego języka.

Jeśli to rozumiesz przez „język agnostyczny”, prawie każdy doświadczony programista może programować w dowolnym języku, z którym jest zmuszony do pracy, pod warunkiem dostępu do dokumentacji językowej.

Może chcesz być „politeistą języka”.

Ja sam jestem kompetentny w kilku paradygmatach językowych, ale wolę OOP, gdy ma zastosowanie. Więc chyba nie jestem agnostykiem.

Prawie nie znajdziesz nikogo, kto nie preferuje określonego paradygmatu lub języka, mając swobodę wyboru.

Tulains Córdova
źródło
0

To nie tylko języki, sama Java ma tak wiele różnych trybów, że można spędzić lata, ucząc się ich wszystkich. Możesz nauczyć się:

  • Funkcje J2EE, takie jak Messaging and Persistence oraz różne serwery
  • jsp i Apache zorientowane zestawy narzędzi
  • mrówki, maven i inne systemy kompilacji (same języki).
  • Cały świat Groovy / Grails
  • wszystkie wspólne API apache
  • systemy testujące (Mocking, JUnit)
  • Konstruktorzy GUI jak Swing, GWT ...

I sto rzeczy, za którymi tęsknię - TYLKO w java.

Jeśli spędzisz lata obejmując całą szerokość (ucząc się każdego języka), będziesz miał trudności z uzyskaniem głębi, aby skutecznie pracować w jednym z nich.

Nie twierdzę, że uczenie się nowego języka jest ZAWSZE problemem, powinieneś to robić aktywnie! Staram się wybrać następną pracę na podstawie tego, czego mogę się nauczyć (czego jeszcze nie zrobiłem), ale często nie wybieram przypadkowego języka i nie uczę się go więcej - ostatnim razem, gdy próbowałem, było ze Scalą i ja nieco upokorzony ...

Bill K.
źródło
Do „całego świata Groovy / Grails” można dodać „cały świat Scala / Play! 2, cały świat JRuby / Rails i cały świat Clojure / Noir”.
Vorg van Geir
1
Zgadzam się, napisałem to jakiś czas temu i po prostu ściągałem rzeczy z głowy - chociaż prawdopodobnie wybrałbym jedną z frameworków internetowych i korzystałem z niej.
Bill K