W podcastie 73 Joel Spolsky i Jeff Atwood rozmawiają między innymi o „pięciu rzeczach, których każdy powinien nienawidzić w swoim ulubionym języku programowania”:
Jeśli jesteś zadowolony ze swojego obecnego łańcucha narzędzi, nie ma powodu, aby zmieniać. Jeśli jednak nie możesz wymienić pięciu rzeczy, których nienawidzisz w swoim ulubionym języku programowania, to twierdzę, że nie znasz go wystarczająco dobrze, aby go ocenić. Dobrze jest być świadomym alternatyw i mieć zdrowe oko krytyczne na to, czego używasz.
Z ciekawości zadałem to pytanie każdemu kandydatowi, z którym przeprowadziłem wywiad. Żaden z nich nie był w stanie zacytować przynajmniej jednej rzeczy, której nienawidzi w C # ¹.
Czemu? Co jest takiego trudnego w tym pytaniu? Czy ze względu na stresujący kontekst rozmowy respondenci nie mogą odpowiedzieć na to pytanie?
Czy jest coś w tym pytaniu, co czyni go złym do rozmowy kwalifikacyjnej?
Oczywiście nie oznacza to, że C # jest idealny. Mam listę pięciu rzeczy, których nienawidzę w C #:
Brak zmiennej liczby typów w nazwach ogólnych (podobnie jak w
params
przypadku argumentów).
Action<T>
,
Action<T1, T2>
,
Action<T1, T2, T3>
,
⁞ Poważnie ?!
Action<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16>
Brak wsparcia dla jednostek miary, jak w F #.
Brak właściwości tylko do odczytu. Pisanie
private readonly
pola zaplecza za każdym razem, gdy chcę właściwość tylko do odczytu, jest nudne.Brak właściwości o wartościach domyślnych. I tak, wiem, że mogę zainicjować je w konstruktorze bez parametrów i wywołać je ze wszystkich innych konstruktorów. Ale nie chcę.
Wielokrotne dziedziczenie. Tak, powoduje zamieszanie i nie potrzebujesz go w większości przypadków. Nadal jest użyteczny w niektórych (bardzo rzadkich) przypadkach, a zamieszanie dotyczy również (i zostało rozwiązane w języku C #) klasy, która dziedziczy kilka interfejsów zawierających metody o tej samej nazwie.
Jestem prawie pewien, że ta lista jest daleka od ukończenia, i jest o wiele więcej punktów do podkreślenia, a zwłaszcza o wiele lepsze niż moje.
¹ Kilka osób skrytykowało niektóre zestawy w .NET Framework lub brak niektórych bibliotek w frameworku lub skrytykowało CLR. To się nie liczy, ponieważ pytanie dotyczyło samego języka i chociaż potencjalnie mógłbym zaakceptować odpowiedź na coś negatywnego w rdzeniu .NET Framework (na przykład coś takiego jak fakt, że nie ma wspólnego interfejsu TryParse
, więc jeśli chcesz parsować ciąg do kilku typów, musisz powtórzyć się dla każdego typu), odpowiedź na temat JSON lub WCF jest całkowicie nie na temat.
Why the question “give five things you hate about C#” is so difficult to answer
Ponieważ jest to pytanie z listy, a zły mod