У подкасті 73 Джоел Спольський та Джефф Етвуд обговорюють, серед інших тем, "п'ять речей, які кожен повинен ненавидіти про свою улюблену мову програмування":
Якщо ви задоволені вашим поточним ланцюжком інструментів, то немає ніяких причин вам не потрібно перемикатися. Однак, якщо ви не можете перерахувати п’ять речей, які ви ненавидите, про вашу улюблену мову програмування, то я стверджую, що ви цього ще недостатньо добре знаєте, щоб судити. Добре бути в курсі альтернатив і мати здоровий критичний погляд на все, що ви використовуєте.
Будучи цікавим, я задав це питання будь-якому кандидату, з яким я брав інтерв'ю. Жоден з них не зміг процитувати хоча б одну річ, яку ненавидять про C # ¹.
Чому? Що так важко в цьому питанні? Саме через напружений контекст інтерв'ю на це питання неможливо відповісти респондентами?
Чи є щось у цьому питанні, що робить його поганим для інтерв'ю?
Очевидно, це не означає, що C # є ідеальним. У мене є список з п'яти речей, які я ненавиджу щодо C #:
Відсутність змінної кількості типів у дженериках (аналогічно
params
аргументам).
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>
Відсутність підтримки одиниць вимірювання, як у F #.
Відсутність властивостей лише для читання. Писати
private readonly
поле резервного копіювання кожен раз, коли мені хочеться властивість лише для читання - це нудно.Відсутність властивостей із значеннями за замовчуванням. І так, я знаю, що можу ініціалізувати їх у безпараметричному конструкторі та викликати його від усіх інших конструкторів. Але я цього не хочу.
Багатократне успадкування. Так, це викликає плутанину, і це вам не потрібно в більшості випадків. Він все ще корисний у деяких (дуже рідкісних) випадках, і плутанина застосовується також (і була вирішена в C #) до класу, який успадковує кілька інтерфейсів, що містять методи з однаковою назвою.
Я майже впевнений, що цей список ще далеко не повний, і тут можна виділити набагато більше моментів, і особливо набагато кращих, ніж мій.
¹ Кілька людей критикували деякі збори в .NET Framework або відсутність деяких бібліотек у рамках або критикували CLR. Це не рахується, оскільки питання стосувалося самої мови , і хоча я потенційно міг би прийняти відповідь про щось негативне в ядрі .NET Framework (наприклад, щось на зразок того, що для загального інтерфейсу немає TryParse
, тож якщо ви хочете проаналізувати рядок на кілька типів, вам потрібно повторити для кожного типу), відповідь про JSON або WCF абсолютно не є темою.
Why the question “give five things you hate about C#” is so difficult to answer
Тому що це питання списку, і злий мод закрив би його як "