In podcast 73 , Joel Spolsky e Jeff Atwood discutono, tra gli altri argomenti, "cinque cose tutti dovrebbero odiare il loro linguaggio di programmazione preferito ":
If you’re happy with your current tool chain, then there’s no reason you need to switch. However, if you can’t list five things you hate about your favorite programming language, then I argue you don’t know it well enough yet to judge. It’s good to be aware of the alternatives, and have a healthy critical eye for whatever it is you’re using.
Essendo curioso, ho fatto questa domanda a qualsiasi candidato che ho intervistato. Nessuno di loro è stato in grado di citare almeno una cosa che odiano per C # ¹.
Perché? Cosa c'è di così difficile in questa domanda? È a causa del contesto stressante dell'intervista che questa domanda è impossibile rispondere dagli intervistati?
C'è qualcosa riguardo a questa domanda che lo rende dannoso per un colloquio?
Ovviamente, ciò non significa che C # sia perfetto. Ho una lista di cinque cose che odio di C #:
-
La mancanza di numero variabile di tipi in generici (simile a
params
per argomenti).
Action<T>
,
Action<T1, T2>
,
Action<T1, T2, T3>
,
⁞
Action<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16>
Sul serio?! -
La mancanza di supporto per le unità di misura, come in F #.
-
La mancanza di proprietà di sola lettura. Scrivere un campo di supporto
private readonly
ogni volta che voglio una proprietà di sola lettura è noioso. -
La mancanza di proprietà con valori predefiniti. E sì, so che posso inizializzarli nel costruttore senza parametri e chiamarlo da tutti gli altri costruttori. Ma io non voglio.
-
ereditarietà multipla. Sì, provoca confusione e non ne hai bisogno nella maggior parte dei casi. È ancora utile in alcuni casi (molto rari) e la confusione si applica anche (ed è stata risolta in C #) alla classe che eredita diverse interfacce che contengono metodi con lo stesso nome.
Sono abbastanza sicuro che questa lista è lungi dall'essere completa, e ci sono molti più punti da evidenziare, e specialmente molto più belli dei miei.
¹ Alcune persone hanno criticato alcuni assembly in .NET Framework o la mancanza di alcune librerie nel framework o hanno criticato il CLR. Questo non conta, dal momento che la domanda riguardava la lingua stessa, e mentre potevo potenzialmente accettare una risposta su qualcosa di negativo nel nucleo di .NET Framework (per esempio qualcosa come il fatto che ci sia nessuna interfaccia comune per TryParse
, quindi se vuoi analizzare una stringa in più tipi, devi ripetere te stesso per ogni tipo), una risposta su JSON o WCF è completamente fuori tema.