Come hai imparato l'arte di risolvere i problemi della vita reale? Puoi scorciatoia il processo? [chiuso]

2

Ho iniziato a codificare on e off su C e in una certa misura su C ++ dai tempi del college (2003), ma non ho mai avuto l'opportunità di lavorare con una responsabilità di programmazione fondamentale, che avrebbe potuto insegnarmi "livello industriale" codifica "meglio e ciò che è veramente necessario per risolvere i problemi della vita reale. Per me sembra che abbia codificato codici ingenui, come elenchi concatenati, alberi binari e Dijkstra e Kruskal's Algos in tutti questi anni.

Inoltre, sento che la mia esperienza accademica mi ha appena insegnato che il linguaggio non è come risolvere i problemi della vita reale.

Quindi la mia domanda è:

  • Quindi, come hai imparato l'arte di risolvere i problemi della vita reale?
  • Un modo per collegare il processo?
  • È solo la mia educazione o, in generale, tutti quelli che codificano l'educazione hanno succhiato alla grande?
  • Quanto spesso devi imparare "cose nuove" per risolvere un problema in un modo migliore.

    Ad esempio, sebbene io abbia usato delegati ed eventi per la semplice programmazione di Windows, ma il mio problema attuale richiederà una conoscenza molto più approfondita di esso, inoltre ho dimenticato la maggior parte di esso. Quindi è come nuovo per me. Dovrò imparare la programmazione a thread e la programmazione multicore. Quindi mi dà un'impressione - "diamine, allora, cosa ho imparato davvero in tutti questi anni?"

posta Soham 03.12.2011 - 10:59
fonte

6 risposte

5

Credo che partecipare ad un progetto di software libero C ++ con una comunità vivente aumenterà le tue capacità.

Penso anche che l'apprendimento di un linguaggio molto diverso (come Ocaml, Haskell, Common Lisp, Scheme, Clojure, Smalltalk) cambierà il tuo modo di pensare (anche su un semplice codice C ++).

E libri di prima classe o corsi come SICP potrebbero imparare molto.

Potresti anche prendere in considerazione la scrittura di alcune estensioni GCC in MELT che troveresti utili. (MELT è un linguaggio di dominio di alto livello, con un aspetto Lispy, per estendere il compilatore GCC, io sono l'autore principale di MELT)

    
risposta data 03.12.2011 - 15:56
fonte
4

Il mio consiglio: mantieni la semplicità. Avvicinati a ogni compito dividendolo in pezzi e combinando questi pezzi in un modo progettato. (cioè progetta i pezzi sapendo che lavoreranno insieme).

Per il lavoro quotidiano, i problemi della vita reale sono sempre un misto di tutti i tipi di cose. Hai problemi a far funzionare la tua app, forse è il codice ... ma forse è il sistema operativo, o il database o la rete. Comprendere le basi di tutte queste cose significa che avrai una possibilità molto migliore di trovare e risolvere il problema piuttosto che se fossi totalmente all'oscuro di come funzionano queste parti. Questo non significa che devi essere un esperto, solo che hai una certa comprensione. Con il passare del tempo questi piccoli pezzi diventeranno una risorsa molto più grande di quanto ti aspetti.

(ad esempio, un problema di vita reale che ha colpito un grande gruppo di aziende precedenti. Le prestazioni erano sbagliate, non c'era nulla di sbagliato nel codice, ma tutti gli sviluppatori che lavoravano su di esso presumevano che ci fosse, alla fine il problema si rivelò essere una mancanza di indici corretti sul DB. Un'altra azienda ha avuto problemi di prestazioni, abbiamo implementato cache, cancellato il codice e determinato alla fine che si trattava di MTS. Sostituita quella sezione con una connessione DCOM a configurazione fissa e il problema era stato risolto).

Educazione v vita reale. Sì, è così per tutti. Ero solita vedere i laureati uscire e iniziare a lavorare con un atteggiamento che sapevano tutto perché avevano scritto 10.000 progetti di linea nel loro ultimo anno e sapevano tutto quello che c'era da sapere. Scaricalo di fronte al nostro progetto di linea da 10.000.000 e improvvisamente hanno capito che l'istruzione era semplicemente un trampolino di lancio per raggiungere il gradino più basso del lavoro di una vita reale. Non stressarti, impara ciò di cui hai bisogno mentre vai avanti. FSM sa che tutto ciò che conosci oggi sarà presto reso obsoleto dagli idioti della nostra industria "amata".

    
risposta data 03.12.2011 - 17:28
fonte
1

C ++ è più vecchio di Java e C #, ma è ancora abbastanza buono per le app serie, specialmente per le app desktop. Se posso solo passare un po 'della mia esperienza (non limitata a C ++):

  • Ci sono molti pacchetti di terze parti, controlli, ecc. Questi sono spade a doppio taglio. Possono darti molte funzionalità e standardizzazione. Il lato negativo è che possono aggiornarti nei guai (sulla teoria che puoi facilmente ricodificare la tua app), o il venditore può andare in fumo.

  • OOP è anche un'arma a doppio taglio. Quando ne hai bisogno, è fantastico. OTOH se segui semplicemente la "religione", puoi ritrovarti con un mostro albatros al collo. Le persone sono incoraggiate a creare sempre più classi, intrecciate con notifiche, delegati e ogni parola d'ordine calda nella comunità. Per qualsiasi scopo di applicazione dato, ci sono infinitamente molte basi di codice possibili che lo serviranno. Alcuni di essi sono ottimali in termini di manutenibilità, dimensioni del codice, prestazioni, qualsiasi dimensione di importanza. Molti altri sono selvaggiamente non ottimali, e la "migliore pratica" dell'OOP, secondo la mia esperienza, conduce le persone strongmente verso quest'ultima.

Le persone che costruiscono questi strumenti sono giustamente orgogliosi del loro "potere" e si aspettano che gli utenti degli strumenti condividano tale rispetto e li usino al meglio, cioè con parsimonia . Sfortunatamente, la mentalità di uno strumento utente può essere esattamente l'opposto. Potrebbero pensare "Questa cosa è così grande, posso usarla qui, lì e dappertutto, quindi sarò veramente produttivo". Vedi la disconnessione? È così che vengono create le mostruosità.

(Come esempio estremo e divertente, ho sentito una storia di un programmatore Cobol che ha scritto un SORT (di un set di dati) all'interno di un loop interno, perché era "solo una singola riga di codice, quindi deve sii veloce ".)

    
risposta data 03.12.2011 - 18:17
fonte
1

Se vuoi davvero massimizzare la potenza potenziale del C ++, concentrati solo sulle sue applicazioni principali. Decidi tu stesso se vuoi utilizzare le tue competenze in ambito IT o come svolgere un serio lavoro di informatica. Ricorda che qualsiasi cosa tu abbia studiato e imparato a programmare non andrebbe mai sprecata! Decidi anche se stai scrivendo software di basso livello o di sistema o mirando al software applicativo. Programmazione di microcontrollori e dispositivi incorporati in un'altra area in cui è anche possibile esaminare.

Visita il sito web dell'inventore e controllalo tu stesso, quali applicazioni potrebbero interessarti per ulteriori approfondimenti o critiche. Ecco il link che potrebbe interessarti e può beneficiare ulteriormente delle tue attuali competenze: link

Guarda anche i potenziali vantaggi di altri linguaggi come Java, ad esempio, e cerca di trovare un'idea o un prodotto che possa essere di beneficio per te e per gli altri.

    
risposta data 03.12.2011 - 16:18
fonte
0

Ciò che senti è abbastanza comune e ci sono diverse domande come questa con buone risposte se vuoi cercare, ma per rispondere alle tue domande:

So how did you pick up the art of solving real life problems?

Esperienza: ciò che hai imparato non è inutile, sai già come scrivere un programma per risolvere un problema specifico. Quando vieni da un ambiente educativo spesso hai le basi del problema che ti è stato insegnato prima di applicare quella conoscenza. Ora devi iniziare a cercare e insegnarti il problema prima di provare a risolverlo. Questo diventa più facile man mano che sviluppi le tue conoscenze e puoi diventare una seconda natura se risolvi problemi in un dominio simile per tutto il tempo.

Any way to shortcut the process?

YES! Un mentore di qualche tipo può davvero ridurre la curva di apprendimento, uno veramente bravo può insegnarti non solo buoni modi per risolvere gli attuali tipi di problemi che stai affrontando, ma anche buone abitudini e risorse per risolvere qualsiasi tipo di problema che sei di fronte.

Is it only my education or in general everyone coding education sucked big time?

Penso che la maggior parte dei datori di lavoro si aspettino di fare una formazione extra per le persone che ottengono il loro primo lavoro di programmazione a tempo pieno, penso che la maggior parte dei programmatori faccia il loro primo lavoro di programmazione a mettere in discussione le proprie competenze e si chieda che diamine abbiano speso tutto quel denaro. :-) Verrai a capire quanto è stato prezioso in tempo.

How often do you have to learn "new things" to solve a problem in a better way.

Imparerai strumenti e trucchi che ti manterranno e ti serviranno bene, ma dovresti sempre tenere d'occhio e ascoltare un modo migliore per fare qualcosa - leggi il codice di altre persone e le risposte di altre persone sullo Stack Exchange siti. I programmatori che rispetto di più continuano a crescere e continuano a cercare modi migliori per fare cose.

Che cosa hai imparato in tutti questi anni? Hai imparato come imparare, come pensare, come affrontare un problema e alcune buone capacità di base.

    
risposta data 04.12.2011 - 07:42
fonte
0

il mio consiglio è di salire un po 'sulla scala della carriera. Ho iniziato come sviluppatore C ++ nel settore dei giochi. All'inizio è stato un ottimo lavoro che mi ha permesso di iniziare nella lingua, ma ben presto mi sono reso conto di essere capace del 200% di ciò che le persone intorno a me erano. Così mi sono spostato, mi sono trasferito fuori dallo stato, ho trovato un nuovo settore e sono arrivato alla velocità. Lì ho preso C ++ ad un nuovo livello. Sono rimbalzato un po 'da allora, ma ho sempre affrontato nuove sfide. In compenso, la mia paga è più che raddoppiata da quando ho iniziato nel 2006. Ma sinceramente non l'ho fatto per i soldi, l'ho fatto perché desideravo ardentemente la sfida e ci ho lavorato sodo.

    
risposta data 07.12.2011 - 00:40
fonte

Leggi altre domande sui tag