Tecnicamente, C # è più di un superset di Java (se si trascurano alcune differenze sintattiche).
C # ha una quantità impressionante di funzionalità che Java omette in base alla progettazione. I più importanti sarebbero:
- funzioni del primo ordine, in particolare espressioni lambda , ma anche delegati
- alberi di espressione
-
LINQ (uno strumento molto potente, se usato appropriatamente )
- gestione della covarianza e controvarianza dei parametri di tipo con in e out
Detto questo, pochissime di queste funzionalità sono sfruttate nel codice di tutti i giorni. Questo perché sono relativamente nuovi e relativamente difficili da capire. Di queste cose, l'unico che probabilmente utilizzi quotidianamente è LINQ e delegati, l'interrogazione dei dati e la programmazione basata sugli eventi sono rispettivamente l'applicazione più importante.
Francamente, in C # ci sono solo idiomi caratteristici per risolvere alcuni problemi. E ci sono dei motivi per cui quegli idiomi sono a posto. Vuoi un programmatore C # per scrivere codice C #, non codice Java in C #.
Non è improbabile che, se chiedi a un programmatore C # di mostrarti il suo capolavoro del codice, ti mostrerà un pezzo di codice, che ha queste nuove funzionalità che strisciano dappertutto. E avrai davvero difficoltà a capire il codice oa giudicare se l'uso di quelle funzioni fosse appropriato o in realtà offusca un semplice problema con costrutti convoluti.
Se vuoi davvero essere all'altezza di questa sfida, devi fare i compiti a casa.
Quello che vuoi fare è assumere persone brillanti e vuoi esprimere un giudizio sulle loro capacità. Dovresti quindi avere più informazioni possibili. Se non per trovare effettivamente il miglior candidato, allora come un segno di rispetto verso il loro lavoro e competenza.
L'assunzione è un processo critico. Se non riesci a fornire la necessaria competenza di C #, ti consiglio di assumere qualcuno di cui ti puoi fidare, ottenere una buona valutazione delle competenze specifiche di C # e concentrarti sull'esame di tutti gli aspetti non di programmazione dello sviluppo del software.