Cosa devo fare per essere indipendente dalla lingua?


52

Ormai lavoro con asp.net e C #. Ho svolto un lavoro decente anche in Java. Sto pianificando la mia carriera in modo tale che un giorno dovrei essere indipendente dalla lingua. Quali sono le cose che devo imparare?

In primo luogo sarebbe paradigmi OOP mentre parla del design di classe. Ce ne sono altri?


2
Stai cercando di: evitare di essere etichettato, avere flessibilità di lavoro o in qualche missione di visione?
JeffO,

2
@Jeff Sì! per evitare di essere etichettato e non combattere che la mia lingua sia LA MIGLIORE;)
Gopi

Avrei più probabilità di assumere un ragazzo con una forte opinione che non era d'accordo con il mio. Perché allora potrebbe scrivere Java.
Erik Reppen,

Se lo facessi, i recruiter salteranno il tuo curriculum.
gonzobrains,

Risposte:


67

Per essere indipendente dalla lingua devi avere esperienza in tutti gli stili e tipi di lingue comuni.

  • Un linguaggio imperativo (Digli cosa fare, passo dopo passo. Es. - C)
  • Un linguaggio dichiarativo (gli dici il tuo obiettivo, capisce cosa fare. Ad es. - SQL / HTML / Prolog)

Anche:

  • Un linguaggio funzionale (le funzioni sono fondamentali, evitando lo stato e gli effetti collaterali sono gli obiettivi. Ad esempio - Haskell / OCaml / Lisp / F #)
  • Un linguaggio orientato agli oggetti (architettura in cui gli oggetti incapsulano i dati correlati e i metodi che agiscono su di essi). Ad esempio - Java / C #)

Alcuni stili di battitura:

  • Un linguaggio tipicamente statico (i tipi di dati sono definiti e controllati in fase di compilazione. Ad es. - C #)
  • Un linguaggio tipizzato in modo dinamico (i tipi di dati sono controllati in fase di esecuzione. Ad esempio - Python / Javascript) È utile anche l'
    esperienza di digitazione forte vs. debole .

Alcuni stili di runtime diversi:

Roba di livello inferiore:

  • Qualcosa di livello abbastanza basso (es. C)
  • Qualche dialetto dell'assemblea (es. NASM)

Inoltre, direi che hai bisogno dell'esperienza di una programmazione concorrente e di qualcosa guidato dagli eventi . Probabilmente dovresti anche assicurarti di sapere qualcosa sui vari domini come la programmazione web (client e server), lo sviluppo / desktop rich client, i giochi. Potresti anche voler conoscere la programmazione integrata o l'hardware dedicato (come le console di gioco) e lo sviluppo mobile sta diventando un dominio sempre più rilevante.

Altri hanno anche detto che vale la pena fare esperienza con la programmazione generica e gli approcci di programmazione Meta .

Quando impari questi paradigmi evita semplicemente di imparare la sintassi e scrivere nel tuo vecchio stile. Ho visto molti sviluppatori C # scrivere JavaScript come se fosse tipizzato staticamente. Non farlo, cerca di imparare i paradigmi linguistici e di abbracciarli.

Se hai fatto tutto ciò, le differenze tra le lingue diventeranno in gran parte sintattiche, quindi il passaggio diventerà un esercizio abbastanza semplice di apprendimento di una nuova sintassi.

Non dimenticare, tuttavia, che la programmazione moderna dipende quasi sempre da un framework, quindi è fondamentale acquisire familiarità con i framework comuni e popolari per ogni lingua che impari. Conoscere C # è irrilevante senza .net.


9
In che modo l'HTML è dichiarativo in questo senso? "Obiettivo -> Azione"? In realtà non fa nulla.
Felix Dombek,

3
Un grande linguaggio dichiarativo che posso solo consigliare di esaminare è Prolog. È diverso da qualsiasi altra cosa - nessuna funzione (ma relazioni che funzionano in entrambi i modi), nessun flusso di controllo esplicito (l'interprete risolve tutto per te), solo una grande struttura di dati (termini, non è necessario nient'altro.) È incredibilmente veloce in quello che fa, facendo milioni di unificazioni e inferenze al secondo - e il tempo necessario per sviluppare qualcosa è breve quanto in Python rispetto a C / C ++.
Felix Dombek,

3
@Felix: HTML, goal = "Voglio un'etichetta e una casella di testo". Azione = I motori di layout e grafica scoprono come disegnarli. I dettagli dipendono dai singoli browser. Definisci solo ciò che vuoi, non come farlo. Vedi qui . Sono d'accordo però, non è proprio un "linguaggio" in quanto tale. Prolog è un esempio migliore, lo aggiorno.
Simon P Stevens,

1
+1 Per un buon elenco di tipi, le scelte linguistiche sono un po 'lontane dal paradigma in alcuni punti, ma nel complesso eccellenti.
Orbling

2
A proposito, dovresti aggiungere "Diversi domini / livelli di astrazione": il web, il web interattivo, gli strumenti desktop, i giochi desktop, i giochi persistenti non sono costruiti nello stesso modo in cui i vincoli e la distanza dall'hardware sono diversi, rendendo la scelta delle lingue ( o addirittura l'esistenza) più ovvio per chi vuole capire che cosa è agnostico.
Klaim,

4

Non penso che tu possa diventare veramente agnostico del linguaggio. Trovo che "penso" nella mia lingua attuale (al momento C #).

Tuttavia, detto ciò, penso che potresti essere in grado di separare il design dal codice cercando di pensare in pseudo codice piuttosto che in un linguaggio specifico, e di scriverlo in questo formato. Ciò potrebbe aiutarti a concentrarti sulle decisioni di progettazione e architettura piuttosto che sull'implementazione nella tua lingua corrente. Lo svantaggio di ciò - come sottolinea Simon - è che il linguaggio e il framework che utilizzerai alla fine influenzeranno inevitabilmente il design. Man mano che il tuo design si sviluppa, diventerà sempre più legato al linguaggio e alla struttura.


+1 per "Non puoi essere veramente indipendente dalla lingua". Ma non sono del tutto d'accordo con il tuo secondo paragrafo. Penso che sia importante progettare per il linguaggio e il framework che intendi utilizzare.
Simon P Stevens,

@Simon - hai un buon punto sulla progettazione per il framework. Aggiornerò la risposta.
ChrisF

3

Leggendo la tua domanda e alcune delle risposte, puoi avere l'impressione che tu eguagli l'agnosticismo linguistico con "conoscere ogni paradigma sulla terra".

Non sono sicuro che conoscere ogni paradigma esistente o conoscere una gamma assortita di lingue, che abbraccia diversi paradigmi e tipi di lingue, ti renda "lingua agnostica".

È come dire che aver praticato tutte le religioni ti rende religiosamente agnostico.

Penso che una persona agnostica riguardo ai linguaggi di programmazione dovrebbe essere qualcuno che non sa come programmare in nessuna lingua o che non gli interessa con quale lingua gli viene chiesto di programmare.

Detto questo, alcune persone affermano che un vero programmatore può programmare in qualsiasi lingua a cui si abbia accesso alla documentazione di quella lingua.

Se questo è ciò che intendi per "linguaggio indipendente", quasi tutti i programmatori esperti possono programmare in qualsiasi lingua con cui sono costretti a lavorare, dato l'accesso alla documentazione linguistica.

Forse vuoi essere "politeista del linguaggio".

Io stesso sono competente in diversi paradigmi linguistici ma preferirei OOP quando si applica. Quindi immagino di non essere agnostico.

Difficilmente troverai nessuno che non preferisce un determinato paradigma o linguaggio, data la libertà di scegliere.


0

Non sono solo le lingue, Java stesso ha così tante diverse modalità che potresti passare anni solo imparandole tutte. Potresti imparare:

  • Funzionalità J2EE come Messaggi e Persistenza e i vari server
  • jsp e toolkit orientati ad Apache
  • formica, maven e altri sistemi di costruzione (le lingue stesse).
  • Tutto il mondo Groovy / Grails
  • tutte le API comuni di Apache
  • sistemi di test (Mocking, JUnit)
  • Costruttori di GUI come Swing, GWT ...

E un centinaio di cose che mi mancano - SOLO all'interno di Java.

Se passi anni a coprire l'ampiezza (imparando ogni lingua) avrai difficoltà ad acquisire la profondità per lavorare efficacemente in ognuna di esse.

Non sto dicendo che imparare una nuova lingua sia MAI un problema, lo farai attivamente! Cerco di scegliere il mio prossimo lavoro in base a ciò che posso imparare (ciò che non ho ancora fatto), ma spesso non scelgo una lingua casuale e non la imparo più - L'ultima volta che ho provato che era con Scala e io lasciato un po 'umiliato ...


A "tutto il mondo Groovy / Grails" potresti aggiungere ", l'intero mondo Scala / Play! 2, l'intero mondo JRuby / Rails e l'intero mondo Clojure / Noir".
Vorg van Geir,

1
Sono d'accordo, l'ho scritto qualche tempo fa e mi stavo solo togliendo la testa, anche se probabilmente avrei semplicemente scelto uno dei framework web e ci sarei andato.
Bill K,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.