Puoi migliorare le tue capacità di programmazione imparando altri paradigmi linguistici?


9

Se è così, puoi dirmi come l'apprendimento di un nuovo paradigma ha cambiato il tuo approccio per risolvere i problemi di programmazione anche se il problema è in un altro paradigma / linguaggio / tecnologia?

Apprezzerò molto Se puoi dirmi in un modo specifico, come le tue abilità di programmazione di X (cioè: JAVA / C # / C ++) sono migliorate imparando Y (cioè: Scheme / Prolog / Lisp).

Inoltre, quali paradigmi suggerisci aiuta di più a diventare un buon programmatore?

Le mie esperienze sono solo strutturate - OOP, imperative - procedurali e, in una certa misura, meta-programmazione modello, ma il mio obiettivo non è imparare un'altra lingua, ma piuttosto apprendere approcci diversi per risolvere i problemi.

Grazie!


1
Credo che le risposte a questo saranno una sorta di clamoroso .
R0MANARMY,

Risposte:


7

Cerco di imparare almeno 1-2 nuove lingue ogni anno. Il massimo che ho guadagnato è stato imparare un linguaggio funzionale (F #) che ha cambiato il modo in cui guardo alla risoluzione dei problemi - I = ora cerco di dire alla macchina cosa fare invece di come farlo, specialmente in C # dove uso fortemente Linq e oggetti immutabili ora che conosco i vantaggi del loro utilizzo. Uso parecchio anche le funzioni di ordine superiore (metodi come parametri) e di conseguenza il mio stile di codifica è cambiato (migliorato).


1
Idem per la mia programmazione Python. Avrei fallito miseramente nel scrivere tutto quel codice che sgranocchiava gli alberi e generava parser in un certo se non avessi appreso le tecniche che ho finito per usare (gli alberi praticamente implicano la ricorsione o una loro versione arrotolata a mano, il generatore di parser consiste di funzioni di ordine superiore ed è ispirato dai combinatori di parser, ecc.) imparando Haskell.

Grazie, hai ribadito quello che sospettavo ... Grazie ancora!
Armando,

2

Assolutamente. Ogni linguaggio di programmazione che impari avrà un modo diverso di fare certe cose. Alcune cose ti faranno impazzire, alcune cose che amerai e altre cose lentamente cresceranno su di te.

Non è mai una perdita di tempo imparare almeno le basi di una nuova lingua.


1

Ok, ecco un esempio che ho riscontrato.

Ho imparato un linguaggio relativamente vecchio (VB6) per un progetto su un vecchio codice che avevamo.
Il linguaggio è molto orientato a Windows ma non ci sono classi potenti di alto livello come nel framework .Net.

Ho dovuto fare alcune manipolazioni delle immagini e questo mi ha fatto conoscere le funzioni dell'API di Windows per le manipolazioni delle immagini.

Dopo aver appreso che mi ha permesso di comprendere meglio le classi GDI di .Net. E la comprensione che a volte l'utilizzo dell'API di Windows sarà molto più veloce (meno avvolgimento delle funzioni).

Questo significa che anche quando impari il vecchio codice, puoi ancora imparare e ottenere un'altra prospettiva.


1

Puoi migliorare le tue capacità di programmazione imparando altri paradigmi linguistici?

Nella mia esperienza, sicuramente sì. Avere diversi modi per attaccare un problema è come una tavolozza di strumenti. Un giorno tu (come ho fatto io) avrai a disposizione per questi altri strumenti. O forse no. Tutto dipende. Alcuni esempi:

Le lingue generalmente non sono sole, ma hanno un ambiente. Ho trascorso un po 'di tempo ad imparare una strana lingua conosciuta come awk . Si basa sulla corrispondenza del modello usando "espressioni regolari". Dal tentativo di apprendere il C ++ STL (non molto riuscito) ho imparato a conoscere le mappe. Combinando questi due concetti, ho potuto scrivere molto rapidamente alcune utilità di trasformazione del testo in Pearl (l'unica lingua disponibile sulla piattaforma).

Soprattutto per divertimento ho cercato di imparare Erlang (non molto riuscito). Ha una libreria di funzioni conosciute come OTP che implementa tra l'altro un modo di gestire gli errori, a volte noto come lasciarlo fallire e avere un monitor che riavvia le funzioni. Ho usato questa idea in alcune aree, a volte semplicemente lasciando che le cose fallissero invece di fare test infiniti.

Cercare di imparare Haskell (di nuovo non molto bene) mi ha davvero aperto gli occhi su altri modi per attaccare i problemi. Una sorta di programmazione funzionale (a mio avviso) inizia con la scrittura di codice che dice quale risultato vuoi, non con la scrittura dei passaggi necessari per arrivarci. Trovo che questo mi abbia davvero aiutato a scrivere un codice SQL migliore.

Ultimamente, ho provato un po 'di javascript. E ho trovato un ambiente noto come annegato. Nessun codice necessario per la creazione di un piccolo server di automazione domestica.

Per dirla in prospettiva, la maggior parte del mio dilettarmi in varie lingue era (ed è) su un livello piuttosto superficiale principalmente per avere un'idea di ciò di cui la gente parla. Ci sono pochissime lingue in cui posso effettivamente essere produttivo.


0

Ho anche imparato molto da dilettarmi in un linguaggio funzionale per qualche tempo. Tuttavia, ciò che ne ho tratto è stato meno sul fare le cose in modo diverso dalle lingue imperative tanto quanto su come facilitare la concorrenza. Può essere applicato altrettanto facilmente in un linguaggio imperativo che in un linguaggio funzionale, ma per qualche ragione, la maggior parte degli esempi che ho incontrato in linguaggi imperativi erano più complicati. (Altre cose si sono rivelate molto più complicate nei linguaggi funzionali.)

Un'altra cosa che ho imparato da un nuovo linguaggio sono stati ulteriori schemi di programmazione. Avevo letto di molti di loro, ma vederli e usarne diverse implementazioni davvero buone ha reso più facile la comprensione e ha portato a casa la loro utilità e quando sono appropriati.

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.