Come programmatore, dovrei conoscere linguaggi di programmazione di basso e alto livello? [chiuso]


18

Sono stato contattato per svolgere alcune operazioni di controllo remoto dei display a LED su TCP / IP, ma la mia esperienza e preparazione riguarda principalmente un linguaggio di programmazione di alto livello. L'ho detto alla persona che mi ha contattato per il lavoro e mi ha detto che:

"se ti definisci programmatore dovresti conoscere tutte queste cose"

Un programmatore dovrebbe davvero conoscere i dettagli della programmazione di basso livello? O posso trattarlo come un concetto di scatola nera, come conoscenza teorica ma non necessariamente farlo o implementare soluzioni linguistiche di basso livello, tenendo presente che la programmazione di basso livello non è la mia competenza?


8
Quando si programma ad alto livello, è necessario mascherare i livelli più bassi di astrazione, altrimenti non si otterrà nulla. È abbastanza utile essere in grado di lavorare a livelli inferiori, ma non provare a fare tutto da tutti i livelli di astrazione contemporaneamente. Non è necessario, ma in caso contrario, non applicare per lavori di basso livello.

1
@delnan: quando si lavora ad alto livello, ovviamente è necessario mascherare i dettagli di livello inferiore. Tuttavia, penso che ogni programmatore dovrebbe sapere come funzionano anche le macchine che stanno programmando al livello inferiore. Non è necessario che le conoscenze siano troppo dettagliate: è sufficiente sapere come costruire da zero un computer di base.
Schedler

4
"Se ti definisci un programmatore dovresti conoscere tutte queste cose" Se ti volessero così tanto da imprecare per la tua mancanza di background, qualcosa non va. Ignorerei il loro commento perché non ha alcun senso. O ti vogliono con il tuo background, o non ti vogliono e non dovrebbero maledirti per lo sfondo che non hai.
S.Lott

3
Un altro caso di "Accidenti, felice di aver perso quel proiettile!" Non vuoi davvero lavorare per o con un tale snob, vero?
Edward Strange,

2
@Schedler - e se non stanno bruciando le proprie schede, sono dei newb totali.
Edward Strange,

Risposte:


37

Il tuo contatto non sa di cosa sta parlando. Esistono molte lingue, metodologie, tecnologie e così via che una sola persona non può conoscere molto bene tutti i dettagli necessari. Quello che devi sapere come programmatore è come imparare ciò di cui hai bisogno per svolgere il lavoro e avere un approccio di risoluzione dei problemi che puoi applicare per arrivare a una soluzione, indipendentemente dal linguaggio di programmazione che devi usare.

Ammettere ciò che non sai va bene, ma puoi anche dimostrare di essere in grado di imparare abbastanza per ottenere il risultato desiderato, indipendentemente da ciò che devi affrontare. I buoni programmatori sono semplicemente buoni risolutori di problemi che possono implementare le loro soluzioni in vari linguaggi di programmazione.

Non lavorerei per qualcuno che ha l'atteggiamento del tuo contatto.


4
+1: il commento non ha senso in primo luogo.
S.Lott

Anche se scommetto che ci sono molti sviluppatori solo dell'assemblaggio che sarebbero felici di caricarlo di ora in ora.
Erik Reppen,

22

"se ti definisci programmatore dovresti conoscere tutte queste cose"

Non sono assolutamente d'accordo con questa affermazione. Sarebbe come chiedere a uno chef di cucinare qualsiasi cosa, a un conducente di guidare qualsiasi tipo di veicolo a motore o a un medico per conoscere tutte le malattie, il che è un presupposto ridicolo.

Per essere un programmatore, si deve sapere come fornire software di scrittura in qualche lingua per eseguire alcune attività in modo automatizzato. Le lingue e le attività varieranno da programmatore a programmatore proprio come i piatti che uno chef sa come preparare, un autista sa come operare, o un medico che sa come diagnosticare varierà a seconda di quanto specializzato si vuole essere in ogni professione.


2
Sì, fino a quando un'astrazione non si rompe e non hanno idea del perché il loro codice mostri un problema di prestazioni, perché alcune librerie esterne stiano bloccando / corrompendo i dati, ecc. Nella mia esperienza i programmatori che conoscono solo linguaggi di alto livello non sono semplicemente buoni nel loro lavoro come quelli che possono fare entrambe le cose.
Ed S.

4
Ti manca il punto. Sì, i programmatori di alto livello dovrebbero essere in grado di comprendere gli aspetti di basso livello, ma dovrebbero sapere come scrivere un aggiornamento del firmware per un router Linksys?
maple_shaft

7
Penso che dovrebbero sapere come scoprire come, però. Una grande parte della programmazione moderna è sapere cosa ricordare e cosa archiviare come riferimento.
Michael K,

8

Parlato come una persona che non ha mai scritto una riga di codice in vita sua. Questa sarà la stessa persona che sentirà che dovresti essere in grado di farlo nella metà delle volte che citerai. Non discutere con un idiota.

Hai mostrato molta più conoscenza e carattere conoscendo i tuoi limiti. Questa persona parla di cose che non sa nulla.

Immagino che ogni falegname debba sapere come scolpire un mobile decorato. Se un pilota può pilotare un aereo, può farli volare tutti.


Sono d'accordo, per il mio è come dire che, poiché sei un medico, dovresti sapere come eseguire un intervento a cuore aperto. Ma nella vita reale sai che deve essere uno specialista per farlo, ma nel programmare la differenza in difficile da dire quando lo guardi dall'esterno come "tutti i potenti programmatori".
lavoro

6

La maggior parte dei programmi CS a scuola ti fornirà alcune conoscenze nella programmazione di basso livello. Ad esempio, avevo classi di assemblatori che utilizzavano il processore 8088 (OK ... quindi mi risale un po '). Penso, tuttavia, che molte scuole di commercio in questi giorni ignorino tale conoscenza - convoglia con un commento se ciò non è vero.

In conclusione, è sempre bene sapere cosa succede a livello di chip - inoltre, le tue lingue di alto livello finiranno per esserci quando vengono eseguite.

Tuttavia, avere qualcuno che ti dica che non sei un programmatore perché al momento non sai che la programmazione a basso livello è ignorante. Se hai bisogno di avere quelle abilità per il progetto attuale, allora dovresti avere abbastanza intelligenza o motivazione per apprendere le abilità che ti servono e quindi applicarle.

Dovrei seriamente considerare di non prendere quel progetto se il cliente ti sta già parlando in quel modo - non sai mai dove potrebbe andare.


6

Lo disprezzo davvero quando la gente dice "Devi conoscere X per definirti un programmatore". Veramente? Beh, alcune persone lavorano su COBOL tutto il giorno e ADORO. Potrebbero essere diventati così bravi in ​​questo e nel loro dominio problematico che accanto a loro siamo tutti pretendenti.

Seriamente, dai alle persone il rispetto per risolvere i problemi che devono affrontare in modi interessanti e interessanti. Comprendi che la risoluzione di grandi problemi deriva da una varietà di sfondi. Non se hanno imparato una presunta "lista di controllo" di abilità che tutti dovrebbero sapere in modo che tutti possano pensare allo stesso modo. Questo è l'OPPOSITO ESATTO di ciò che vogliamo. La "lista di controllo" di tutti è e dovrebbe essere diversa. Più è diverso, meglio è. La programmazione è problem solving in questi giorni. Rispetta quelli che lo fanno bene e capisci che tutti vengono al tavolo con diversi punti di forza. Questo è l'unico modo in cui ci aiuteremo a vicenda a lavorare efficacemente come una squadra. Solo perché conoscere "C" o qualcosa aiuta davvero questo ragazzo a essere fantastico, non significa che perché non


3

Ti suggerisco di leggere questo:

http://www.joelonsoftware.com/articles/LeakyAbstractions.html

Come spiegato, quando usi un'astrazione, ciò che è di livello inferiore ha sempre un'influenza su ciò che stai facendo. Ciò può essere prestazionale, causa di errore, motivi di sicurezza e così via.

Quindi, definitivamente, ora dovresti parlare di queste cose. Non essendo in particolare uno specialista di architettura asm o CPU. Ma sapere abbastanza per documentarti quando hai bisogno di saperne di più è, in effetti, un must.


Forse devo chiarire che so come funziona TCP / IP =), il mio punto è implementare qualcosa come socket su TPC / IP è al di là delle mie conoscenze, posso impararlo al volo? certo, voglio impararlo? non proprio, principalmente perché non mi sento sicuro che il risultato finale sarà pienamente dimostrato per un ambiente di produzione o soddisferà tutti i requisiti in un determinato momento. Penso solo al tempo che mi ci è voluto per raggiungere il livello di competenza in un linguaggio di alto livello, e non credo che il tempo concesso sarà sufficiente per conoscere tutti i gotcha, che mi danno una sensazione rischiosa.
lavoro

Questo è il punto: non devi essere un esperto. Ma devi conoscere le basi. Quindi saprai quali sono i limiti dell'astrazione che stai usando - questo è il minimo e saprai come documentarti quando viene raggiunto il limite.
deadalnix,

2

La sua argomentazione è un buon esempio dell'errore logico di No True Scotsman .

Tuttavia, la differenza tra programmazione di basso e alto livello non è il linguaggio, è il dominio di conoscenza dell'applicazione. Assegnare un valore a vero potrebbe significare accendere un LED o abilitare eventi di clic del mouse su un widget. Alla lingua non importa.

Ad esempio, dai un'occhiata a questa libreria per lavorare con una matrice LED su un arduino. Non è scienza missilistica qui, e davvero qualsiasi programmatore sarebbe in grado di capirlo con un piccolo sforzo se non mettessero su un "basso livello oh no!" blocco mentale.


1

Ogni linguaggio di programmazione ha i suoi pro e contro. Imparare alcuni, ti darebbe una grande percezione su cosa usare e come usarlo efficacemente quando viene dato un progetto.

Come programmatore, puoi specializzarti su un PL specifico, utilizzandolo come unico strumento per risolvere qualsiasi problema, puoi anche conoscere un sacco di PL ma specializzarti in nulla e molto di più tra questi due estremi.

Forse la persona che ti ha detto che "Frase" è frustrata, forse non eri l'unica persona di contatto con cui ha parlato.

conoscere il problema e sapere quali competenze sono necessarie per essere in grado di risolvere il problema in modo efficace è una buona caratteristica di un programmatore. Purtroppo sul tuo caso, dal momento che non hai il set di abilità richiesto, potresti forse indirizzare la persona di contatto a un altro programmatore con il set di abilità necessario.

Saluti,

Wardy


1

Avere le conoscenze teoriche è buono. Essere in grado di imparare la lingua di basso livello quando necessario è molto importante.

Ma per quanto riguarda "se ti definisci un programmatore dovresti conoscere tutte queste cose", chi può sapere tutto di tutto? Prima ancora di farli?


-2

Ri-fraseggerò

"se ti definisci programmatore dovresti conoscere tutte queste cose"

PER

"se ti definisci programmatore dovresti sapere abbastanza da poter imparare rapidamente tutte queste cose"

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.