Чому використання абстракцій (таких як LINQ) настільки табу? [зачинено]


60

Я незалежний підрядник і, як такий, провожу інтерв'ю 3-4 рази на рік для нових концертів. Зараз я в самому розпалі цього циклу, і мені відмовилися за можливість, хоча я відчував, що інтерв'ю пройшло добре. Те саме трапилося зі мною пару разів цього року.

Зараз я не є ідеальним хлопцем, і не сподіваюся, що я добре підходить для кожної організації. Але це означає, що мій середній показник менший, ніж зазвичай, тому я ввічливо попросив мого останнього інтерв'ю про деякі конструктивні відгуки, і він виступив!

Головним, на думку інтерв'юера, було те, що я, здається, занадто схилявся до використання абстракцій (наприклад, LINQ), а не до алгоритмів, органічно вирощених на нижчому рівні.

На перший погляд, це має сенс - насправді, в інших відхиленнях є сенс і тому, що я також клопотався про LINQ в цих інтерв'ю, і не здавалося, що інтерв'юери знали багато про LINQ (хоча вони були .NET хлопці).

Тож тепер у мене залишається таке питання: Якщо ми повинні «стояти на плечах гігантів» і використовувати доступні нам абстракції (як LINQ), то чому деякі люди вважають це таким табу? Чи не має сенсу знімати код «з полиці», якщо він досягає тих же цілей без зайвих витрат?

Здавалося б мені , що LINQ, навіть якщо це абстракція, це просто абстракція всіх тих же алгоритмів , можна було б написати для виконання точно такий же кінець. Тільки тест на ефективність може сказати вам, чи був ваш індивідуальний підхід кращим, але якщо щось на зразок LINQ відповідало вимогам, навіщо взагалі турбуватися писати власні заняття?

Я не хочу тут зосереджуватися на LINQ. Я впевнений, що у світі JAVA є щось порівнянне, я просто хотів би знати, чому деяким людям стає так незручно з ідеєю використання абстракції, яку вони самі не написали.

ОНОВЛЕННЯ

Як зазначав Ейфорік, у світі Java немає нічого подібного до LINQ. Отже, якщо ви розробляєте стек .NET, чому б не завжди спробувати його використати? Чи можливо, люди просто не повністю розуміють, що це робить?


8
Я думаю, ви не знаєте, що таке "абстракція", тому що LINQ не має нічого спільного.
Ейфорія

8
"Я впевнений, що у світі JAVA є щось порівнянне" Насправді, LINQ - одна з небагатьох речей, у яких є .NET, а Java - ні.
Ейфорія

42
@ Euphoric - Чи LINQ не абстрагує роботу завдань нижчого рівня, таких як сортування та фільтрування, наприклад? Я впевнений, що позаду, objectCollection.Where(oc=>oc.price > 100)наприклад, буде якийсь додатковий код . Хіба це не буде використанням абстракції? Можливо, ви можете сказати мені, чого я тут пропускаю. . .
Метт Кашатт

37
Завжди є ймовірність, що вони просто не розуміють LINQ і не бачать значення в навчанні цьому. Функціональні аспекти його написання дуже сильно відрізняються від імперативного програмування. Як підрядник я нещодавно в 2009 році бачив "старших" розробників Java, які не розуміють SQL достатньо, щоб писати розширені запити, тому вони проводять тижні, оптимізуючи код, який приносить усі дані на сторону Java і фільтрує їх за допомогою Java-коду, а не мати база даних, що робить це. Невігластво поширюється у галузі розробки програмного забезпечення.

18
Якщо ви розумієте LINQ, але ваші інтерв'ю не знають, ви краще, ніж вони. Поставте приціл вище.
Джей Базузі

Відповіді:


74

Я не думаю, що використання абстракцій само по собі є незаперечним. Можливі два пояснення. Одне полягає в тому, що в той чи інший момент абстракції є протікаючими . Якщо ви створюєте враження, правильне чи ні, ви не розумієте основоположних основ, які можуть відображатися погано в інтерв'ю.

Інше можливе пояснення - ефект фанбоя. Якщо ви з захопленням говорите про LINQ і неодноразово піднімаєте це в інтерв'ю з компанією, яка не використовує його і не має поточних планів цього робити, це створює враження, що ви були б незадоволені або навіть незадоволені, працюючи зі старими технологіями. Це також може створити враження, що ваше захоплення одним продуктом засліпило вас альтернативою.

Якщо ви дійсно думаєте , що ви були б щасливі в магазині , НЕ LINQ, спробуйте запитати про те, що вони дійсно використовують, і адаптувати свої відповіді відповідно. Покажіть їм, що, віддаючи перевагу LINQ, ви грамотно використовуєте будь-які підручні засоби.


4
@MatthewPatrickCashatt Ви не можете редагувати та продовжувати роботу налагоджувача всередині методів, що містять оператори linq. Недостатньо обороту, щоб я не користувався ним; але це була основна причина, коли я вагався в цьому деякий час.
Ден Нілі

3
+1, особливо для другого абзацу. Це повністю стосується мене, оскільки я був би абсолютно незадоволений працювати над кодом C #, не маючи можливості використовувати LINQ.
Арсеній Муренко

5
Існує також той факт, що на додаток до непрохідної абстракції часто трапляється хіт виступу. Ви обмінюєтеся простотою використання на точність, і ця втрата точності часто включає деталі, які б зробили все швидше. І чим далі ви віддаляєтесь від джерела, тим більше деталей ви втрачаєте і більша ймовірність того, що ці деталі важливі для виконання.
jmoreno

6
+1, але це може працювати і іншим способом. Якщо хтось скаже мені, що не найняли мене, тому що я використовую Yacc для створення парсерів, а не прокатки власних, то це не десь я хочу працювати.
Спенсер Ратбун

5
@MatthewPatrickCashatt: ця відповідь (і мій коментар до неї) стосується не LINQ, а загальних тверджень. Але для LINQ, ось уривок із C # 4.0 / 5.0 у "Nutshell", який розповідає про проблеми з продуктивністю LINQ. Повернення до загальних положень: у багатьох випадках хіт на виставу буде вартим того, що 5% +/- не має значення. Але іноді він буде більшим, а іноді навіть .1% неприйнятним. Якщо ви не думаєте, що коли-небудь може виникнути проблема, або ця ефективність стосується лише таких компаній, як Google ....
jmoreno

29

Деякі програмісти .NET, особливо ті, що надходять або з класичного VB / ASP, або з C ++, не люблять нових матеріалів, таких як LINQ, MVC та Entity Framework.

Виходячи з того, що я спостерігав, колишні VB'ers цієї групи, ймовірно, все ще будуть використовувати шари доступу до даних та інший код, спочатку написаний 10+ років тому. Вони також використовуватимуть старі мовленнєві слова, такі як "n-level" і подібні, і насправді нічого не розуміють ні про що, крім .NET Framework 2.0, і не хочуть нічого дізнатися про це.

C ++ 'є тенденцією бути академічно орієнтованими програмістами, які люблять кодувати круті алгоритми, навіть якщо це означає переосмислити колесо. Вони ненавидять залежно від того, що вони самі не передавали. Деякі з цих людей також захоплені тим, що опитувані відчувають себе неповноцінними, особливо ті, хто має менш традиційний досвід.

Ви, ймовірно, натрапите на подібні організації під час співбесіди. Але ви також натрапите на тих, хто використовує новіші методи. Не дозволяйте кілька поганих інтерв'ю відкинути вас.


2
Дякую jfrankcarr. Я підозрював, що це може бути так - були питання щодо відкриття та закриття datareaders!
Метт Кашатт

2
+1 для виклику MVC "новинка". Змусив мене сміятися вголос. Це було приблизно з 70-х. Можливо, ви мали на увазі MVVM, який по суті є MVP (варіант MVC), який використовує прив'язки.

14
@ GlenH7 Я думаю, що з контексту було досить зрозуміло, що він мав на увазі продукт "ASP.NET MVC", а не основну концепцію Model-View-Controller.
Carson63000

4
@ GlenH7 - Я говорив цілком у контексті продуктової лінійки .NET і Visual Studio та мовних продуктів Google.
jfrankcarr

6
Боже, чи справді є магазини, які вважають Linq "новим"? Це вже більше 4 років. Я можу зрозуміти, що не натрапив на офіціантів завдань, або на використання dynamic/ ExpandoObject/ тощо, або не піклуючись про Azure та всі інші хмарні речі ... Я навіть можу зрозуміти, що продовжую використовувати перегляд WebForms старої школи двигуна в MVC або в самих веб-формах, або написання коду WPF / WinRT без MVVM ... але Linq? Якщо ви ще цього не зрозуміли, саме час вийти з роботи в якості розробника .NET.
Aaronaught

16

Майкрософт має довгу історію виходу з новими гарячими технологіями, а потім забуває про них 5, 10 або 20 років вниз. LINQ для деяких людей може виглядати ще одним. Вони відзначать, що Microsoft не може застаріти SQL, але LINQ може слідувати Silverlight . Таким чином, ви можете бачити параноїю внаслідок важкого досвіду або просто людей, які залишилися позаду сучасних технологій і які обурюються.


12
Чесно кажучи, хоча я бачу основну точку, я не думаю, що Лінк скоро піде. Linq2SQL, так, вони застаріли на користь набагато потужнішого EF. Але сам Linq є основою для стільки іншої блискучої новизни в останніх 3 .NET-релізах, що якби вони застаріли, вони б відміняли половину своїх нових технологій постійного шару, таких як Azure та EF, нічого не сказати про калік практично кожного ORM Крім того, багато ЛОП-обробка списку в пам'яті.
KeithS

6
зачекайте ... "жахнувся відійти від старої, застарілої технології, бо це працює" ... WTF. Чи прийшли ми до того, що робочий матеріал, який випробуваний, перевірений, зрозумілий та підтримуваний та зрілий, НЕ хороший.
gbjbaanb

7
@ gbjbaanb - Ні. Але - як анекдот - чи хочете ви, щоб лікар діагностував ваші болі в грудях за допомогою рентгенографії грудної клітки, тому що цей метод "випробуваний, перевірений, зрозумілий", чи ви хочете, щоб фМР була новішою, але вона має більш високу роздільну здатність , кращий прогноз та більше інформації? Тут ніхто не каже, щоб відмовитися від класичних принципів; зовсім навпаки. Розумієте, LINQ (як приклад) будується на цих принципах. Я думаю, як уже згадували інші, саме вивчення частин є чинником LINQ і правильне його використання викликають моменти "WTF", такі як ваш.
Метт Кашатт

2
@MatthewPatrickCashatt: залежить, якби лікар не був навчений читати результати ФМР, я б взяв рентген, а не запропонував би йому вгадати діагноз. Якби я захворів у підводних водах, я вважаю за краще лікаря, який міг би поставити діагноз не що інше, як стетоскоп, ніж не міг би впоратися без найсучасніших інструментів.
gbjbaanb

2
@MatthewPatrickCashatt Я бачу вашу думку, але врівноважуючим фактором є те, що ви не хочете слідувати кожній тенденції лише тому, що вона новіша. Я із задоволенням слідкую за новою технологією, яка вписується в одну з двох категорій. 1. Це мене хвилює, і я готовий витрачати на це свій вільний час. 2. Він доводить себе справді кращим і, здається, він триватиме досить довго, щоб зробити його вартим інвестицій. Тенденції, які не входять до однієї з двох категорій - це азарт в кращому випадку.
TimothyAWiseman

15

Чи не має сенсу витягувати код «з полиці», якщо він виконує ті самі цілі без зайвих витрат?

Завжди є додаткові витрати.

Крива навчання для речей з полиці завжди є. Біль від отримання оновлень (і залежностей) завжди є. Неможливість накрутити кишки завжди є.

Для LINQ стосується лише першого. Багато людей вважають, що дивний код виглядає важко для читання і важче налагодити. Синтаксис, схожий на sql, є значною мірою персона-нон-гратою, кожен професійний концерт, з якого я працював з моменту його виходу. LINQ до SQL (та інших джерел даних) має ряд варіантів та обмежених варіантів оптимізації.

Це загальні аргументи проти сторонніх інструментів та конкретно LINQ. Все, що сказано, LINQ - це проклятий корисний інструмент, якому слід віддавати перевагу в більшості ситуацій. Тут плач не придумується, і абстракції не повинні віддавати перевагу когмативному дисонансу .

Вони не знають / не можуть вивчити LINQ, але вони "очевидно" хороші розробники, тому LINQ не повинен бути вартим. Це звичайна пастка.


1
Хороші бали. Погодьтеся на витрати, які ви згадуєте, і це хороше уточнення. Однак, ширше, розвиток доморощених класів, з якими не можуть бути знайомі нові працівники, оскільки вони не існують поза організацією, представляє ті самі проблеми, крім витрат на первинну розробку.
Метт Кашатт

2
@MatthewPatrickCashatt - О, абсолютно. Таким чином, цей домашній код майже завжди повинен докладати більше зусиль для однієї виграші, але це не обов'язково. Як і багато інших речей, вартість / винагорода слід оцінювати, а найкращу практику віддати перевагу , а не сліпою слідувати.
Теластин

@Telastyn Домашній код також приємний, оскільки ви знаєте, що він робить, і можете виправити це за мить. Крім того, ви можете оптимізувати конкретні обставини на основі власного використання, а не в середньому для всіх.
Хоукен

13

Ще щось, що вам слід врахувати, - це те, що ваш ентузіазм щодо класної нової технології може просто змусити людей почувати себе некомфортно і не бажати вас поруч. Ви не «наділяєте їх» повноваженнями, бо саме ви знаєте цю технологію, а не вони. Навіть якщо вони самі цього не усвідомлюють, вони можуть шукати кандидатів, які підкріплять те, в що вже вклали стільки часу.

Ви хочете представити ставлення, яке говорить: "Що б ви не робили, я хочу допомогти вам досягти цього", а не давати підтекст, який говорить: "Ви можете робити щось погано, і те, що мене навколо, доведе, це ".


+1 - а також розкажіть їм, що ви знаєте, про те, що вони роблять і для чого вони спеціалізуються.
Кірк Бродхерст

12

Я берусь на це (і я думаю, що ніхто з нас не може сказати, про що думали ці інтерв'юери) - це те, що часто ви йдете на співбесіду, щоб пояснити, чому вони повинні найняти вас, щоб вони відповідали їх команді та їхньому способу роботи .

Ви можете бути ідеальним розробником, богом рок-коду, але це не означає абсолютно нічого, якщо те, що ви хочете робити (підкреслюючи, що ви говорите надмірно і занадто захоплено про якісь круті технології губбіни), просто говорить їм про вас, і що ви не хочете відповідати тому, що вони хочуть. Якщо у них є система доступу до даних у старому стилі, її неможливо оновити з будь-якої причини, їм не потрібен той, хто забув, як її підтримувати. Якщо вони розробляють нові речі, і ви дійсно хочете поставити цей класний новий технологій скрізь, то очевидно, що у них виникне велика проблема з майбутнім обслуговуванням коду та / або навчанням персоналу.

Як фрілансер, це набагато більша проблема, що якби вони найняли пермі. З пермеєю, навчання та розробка нових способів роботи - це не погано, в рамках існуючого кодексу та практики - ви будете там довго, щоб покращити справи. З фрілансером вони насправді не дають прошукати те, що ви хочете, ви тільки там, щоб виконувати свою роботу так, як вони хочуть, і не ваша робота робити щось інше. (не згоден - стань постійним працівником)

Це, мабуть, не має нічого спільного з самим LINQ, я відхилив кандидата, який з’явився, і пояснив, наскільки краще все буде написано в Haskell. Ми не робимо Haskell. Те саме стосується будь-яких технологій, які не використовуються компанією, зазвичай це не є проблемою, якщо ви згадуєте її як щось хороше. Проблема виникає, коли ви занадто захоплені і захоплені цим.


2
Я погоджуюся з цим, але я помітив набагато більше людей, які використовують таке ставлення, щоб відкинути гарні ідеї, які вони просто не розуміють (наприклад, тестування, модель дизайну, ORM). Тож я погоджуюся з тим, що добре підходити до команди - це добре, важливо усвідомити, що ти можеш бути кращим за решту команди та маєш знайти однодумців, де непогано знати добре абстракції.
Уейн Моліна

1
@WayneM впевнений, але ОП є фрілансером, тому насправді не має значення, чи є він богом кодування, якщо тільки вони не готові його найняти постійно, щоб підтримувати код, решта команди не розуміє (хм), то йому потрібно робити те, що вони хочуть, а не те, що він хоче.
gbjbaanb

1
@WayneM так само багато людей використали б щось подібне до того, що ви сказали, щоб просувати свої ідеї над чужими (будучи впевненими, що хто їх розмовляє, просто не отримує цього). Зрештою, обидві сторони є упередженими, але ОП збирається прийняти на роботу, а не виграти грандіозну війну. У кожного буде своя думка, але хтось повинен її перебороти; Я здогадуюсь, що роботодавець у цьому випадку не буде. :(
Хоукен

10

Є одне дійсне занепокоєння, яке я почув від тих, хто не використовує Linq, і це одне, що я приймаю до душі: "Тільки тому, що ти не бачиш реалізації, це не означає, що це не дорого".

Візьміть такий фрагмент:

var resultList = inputList.Where(i=>otherInputList.Count(o=>o.Property == i.OtherProperty) > 0);

Тут ініціюється LINQ. Чому? Тому що тільки те, що цей код виглядає приємно і елегантно, не означає, що він не жахливо неефективний. Count () за допомогою присудка оцінює кожен елемент його батьківського перелічувального числа і підсумовує кількість разів, коли присудок повернувся істинним. Отже, не тільки це N ^ 2 (коли inputList та otherInputList мають приблизно рівну кардинальність N), це абсолютно гірший випадок N ^ 2; КОЖНИЙ елемент otherInputList проходить для ВСЕГО елемента введення. Натомість, перший крок - використовувати Any () замість Count, адже це дійсно те, що ви хочете знати, і воно припиниться, як тільки відповідь буде відома "так". Налаштування HashSet, який зберігає різні значення, otherInputListObject.OtherPropertyможе також допомогти вам; доступ стає O (1) замість O (N),найгірша складність, а не квадратична найкраща складність.

Таким чином, ми бачимо, що ці приємні елегантні методи мають за собою серйозні витрати, і якщо ви не знаєте, що це за витрати, ви можете дуже легко кодувати алгоритм складності O (мій GD) у високоефективний центральний сервер файлів вашого потенційного роботодавця або головна сторінка цільового порталу наступного разу, коли їм може знадобитися налаштування. Звільнення вас після того, як ви це зробите, не скасує те, що ви зробили, але не найме вас, якщо вони думають, що ви це зробите, заважатиме. Отже, щоб уникнути цього, ви повинні довести їх неправильно; обговоріть, що ці методи роблять (маючи на увазі, що ви повинні знати себе) та їх складність, і як дійти відповіді в ефективний (NlogN або кращий) час.

Ще одна стурбованість - це добрий старий аргумент "Коли єдиним інструментом є молот". Поставте себе на місце, коли інтерв'юер взяв інтерв'ю у цього фаната Linq. Кандидату подобається Linq, хоче використовувати її, вважає, що це найкраще. Можливо, може здатися, що кандидат не міг кодувати без нього, оскільки кожна задана програма програмування вирішувалась з Linq. Ну що станеться, коли його не можна використовувати? Існує ще багато .NET 2.0 коду, що якби оновлення потребувало болісних оновлень до серверів, робочих станцій користувачів тощо, і т. Д., Все, щоб ви могли використовувати свої фантазійні методи розширення. Як інтерв'юер, я б спробував змусити вас показати, що ви можете кодувати ефективний сортування або використовувати методи сортування 2.0, якщо вам доведеться, як би я не погодився з вами, що бібліотеки Linq та подібні методи розширення досить гарні солодкий. Інтерв'юер, який не бачить сенсу, може навіть не турбуватися, намагаючись змусити вас проявити здібності до чогось іншого; вони припускають, що у вас цього немає, і рухаються далі.


Чому б ти просто не написав запит як var resultList = inputList.Select(i=>i.Property).Intersect(otherInputList.Select(o=>o.Property));? Я міг би це зробити, але мій погляд на те, що LINQ має кращі способи виконання запиту, про який ви згадували вище (.Join () - інший спосіб). Я усвідомлюю, що існують способи використання LINQ, які не є настільки кваліфікованими, як інші способи, але це не означає, що вам доведеться покладатися на ці погані реалізації.
Метт Кашатт

4
@MatthewPatrickCashatt Я не думаю, що його суть полягає в тому, щоб стверджувати, що LINQ завжди неефективний - хоча ви завжди можете перемогти заданий LINQ-запит, деякі використання дають кращу ефективність на годину розробника, ніж багато підходів, що не стосуються LINQ. Скоріше, можна написати відносно запит LINQ, який є неефективним, і не усвідомлювати його, тому що неефективність не настільки очевидна.
Джон Ханна

3
@JonHanna: Мабуть, до речі, значення абстракції значно зменшується, якщо треба вивчити, який код "справді робиться", щоб визначити, які незвичайні, але правдоподібні сценарії можуть призвести до того, що продуктивність буде на багато порядків гіршою, ніж очікувалося. Якщо перехід від однієї структури даних до іншої призведе до того, що код запускатиметься в 10000 разів повільніше, можливість внесення таких змін без зміни будь-якого іншого коду може не завжди бути корисною справою.
supercat

1
@supercat: так і ні. Тільки тому, що знання того, як щось робиться в сторонній реалізації, має вирішальне значення для розуміння наслідків для продуктивності та уникнення неефективності, не означає, що бібліотеки, які інкапсулюють ці інструменти, мають меншу цінність. Це дві сторони однієї і тієї ж монети; знайте природу реалізації, і ви можете використовувати її за допомогою декількох натискань клавіш замість того, щоб прокрутити годину самостійно. Але, ви повинні знати обидві сторони, і стереотипний фанат Linq, який вважає, що це ідеально, нічого поганого, використовувати його для всього, що, ймовірно, не може.
KeithS

@KeithS: Одне, на мою думку, дуже не вистачає як у Java, так і в .net - це стандартний засіб запитувати предмети чи колекції різних речей про себе. Наприклад, код, який отримує численну колекцію, може отримати користь від того, чи дізнається, чи може кількість предметів та / або послідовність існуючих предметів колись змінюватися, чи відомо, що кількість предметів є кінцевим чи нескінченним (або невідомим жодним чином), і чи по суті колекція знає, скільки предметів у ній. Такі технології, як LINQ, часто мають робити припущення про такі речі, які можуть бути, а можуть і не бути правильними, і ...
supercat

10

Цей трохи довгий, але це може бути корисним комусь, тому я дозволю.

Я фактично зіткнувся з чимось подібним, пройшовши трохи більше 20 інтерв'ю минулого місяця (поєднання телефону та віч-на-віч). Напевно відбувалося щось несподіване, на що я не міг цілком покласти пальця.

Однією з речей, яку я помітив, було те, що речі, які зазвичай були центром циклів інтерв'ю протягом останніх п’яти-шести років, було вирішено не обговорюватись і не давати їм короткого скорочення. Такі речі, як основи аналізу / дизайну ООП, зразки (дизайнерські та архітектурні), деякі більш розвинені / орієнтовані на абстракцію особливості .net (включаючи лямбда або LINQ, зокрема, загальну інформацію, серіалізацію / прив'язку даних тощо) і навіть Зазвичай гаряча тема прихильної методології (здавалося, ніхто не переймається спритним проти водоспаду чи ароматом спритного) та інструментами чи вибором ORM чи бажаних засобів співпраці чи управління джерелами. У деяких випадках, які взагалі не згадуються, майже у всіх випадках, очевидно, це не викликає занепокоєння.

Що було приділено увазі в декількох інтерв'ю та різних непов'язаних фірмах у споріднених галузях, було таким чином:

  • Дивна фіксація застарілих / застарілих конвенцій та обмежень "назад до кам'яних віків". Як розробляючи примітивний веб-додаток у VS2003 зі списком абсурдних обмежень, що додатково забороняє використання явних функцій в межах тієї епохи .net ... ніби це справжній показник здатності сучасних розробників ... можливість запам'ятати парадигма та обмеження 9 років тому ще більше покалічені нереальними / довільними обмеженнями. Ще одне місце було дуже зайняте темою колекцій на замовлення, навколо догенеральних колекцій. Ще одне місце викреслило зразок коду моделі класу, який я викреслив, оскільки не використовував каскадні конструктори (вони, здавалося, не знають про підтримку ініціалізації властивостей при декларуванні, що було достатньо для потреби).

  • Надзвичайний фокус на конкретних деталях реалізації в настройках мікрокосму та / або конфігурації, навіть якщо це стосується технологій, орієнтованих на те, що вони є платформою або протоколом агностиком (тобто. Вся справа в тому, щоб НЕ фіксуватись на конкретній реалізації чи конкретному використанні, а навпаки про повторне використання / повторне призначення / розширення / за необхідності інтеграції).

  • Готовність до розгляду / нагляду / огляду коду / та іншим способом відключення роботи від команди та від берега, а також навичок кодування, пов'язаних із цим.

  • Використання конкретних версій продуктів / платформ / модулів / тощо. Іноді безглуздо; "Отже ... ви використовували версії 1, 2 і 4? Але не 3, е? Хммм ... {коментує ваше резюме з" без v3 !!!} ". Ступінь використання, здається, не має значення; тільки те , що у вас є або не використали що - то взагалі , а конкретна річ , яку вони просять також ... немає замін , здавалося порахувати, навіть більш широко використовується і повнофункціональний конкуруючого продукту.

  • Набагато більше уваги на те, "наскільки добре ви будете вписуватися в нашу команду" більше ", чи ви насправді будь-який товар як розробник програмного забезпечення" або "чи маєте ви навички та досвід, щоб додати вартість компанії та допомогти нам забезпечити якість продукт "або навіть" ти небезпечний ідіот, який зайдеш і в крамниці крах ". У деяких випадках моє резюме просто сприймалося як дане, і навіть так званий "екран екрану" або технічне інтерв'ю було оцінкою особистості набагато більше, ніж оцінка вмінь. Навіть на відносно короткострокових контрактних посадах, де ви були б там і знову пішли до того, як змінилися два сезони.

  • Компанії цього разу, здавалося, не зосередилися на вирішенні конкретних технічних проблем, запусканні нових проектів розвитку зеленого поля або великих 2.0, або отримання конкретного продукту на ринок, щоб скористатися новою тенденцією чи можливістю, або звичайними великими невдачами . Повторною темою, яку я помітив принаймні в 15 місцях, було те, що невелика група з 3-5 розробників, в основному тих, хто вижив після аварії на ринку в 08 році, змогла розмелювати продукт протягом останніх 3 років або близько того і вони знайшли певний успіх, або їхня компанія в цілому процвітає, і вони наймають нових людей, щоб не відставати від зростаючих вимог до функцій, або вирішити / подолати недоліки дизайну, вбудовані в ці системи, або взяти вищезазначені платформи безкоштовно створити основну команду, яка побудувала його для виконання "інших проектів".

Але ... якщо є одне, що я знаю про цю справу, це те, що це циклічно. Наступного разу, коли я шукаю новий концерт, я не здивуюся, якщо гра змінилася ще раз. Вам просто потрібно залишатись розумово гнучкими, робити активне слухання, уникати абсолютних заяв, якщо вони непотрібні, але також не будьте нікчемними, і не виходьте як одновимірні (ви як ідіот або завзяття, не бажаного) або як занадто хороший (це може загрожувати і коштувати вам концерту).

Просто налаштуйте свій підхід і спробуйте дати більш зважну відповідь наступного разу ... згадайте кілька різних способів, як ви можете підійти до проблеми ... але навіть якщо це знання про вас, ви поводитесь так, ніби ви насправді думаєте про це і міркуючи це на місці. Це здається більш скромним і менш залякуючим або зневажливим таким чином.

Звичайно, закон Мерфі, який він є, саме наступне інтерв'ю після того, як ти перестанеш бути "захопленим моїм улюбленим моїм улюбленим хлопцем з технологій" і приймеш більш врівноважену / погладжує бороду позицію, - це те почуття, яке б ти отримав, якби ти був божевільним ревний хлопець. ;)


6

Я думаю, ви робите помилковий висновок, оскільки ваш набір зразків занадто обмежений. Хоча я бачив неабияку частку ІТ-магазинів із сильною відразою до чого-небудь "не винайденого там" 1 , жоден із них не дискваліфікував кандидатів, виходячи зі своїх переваг у стеку технологій: вони були справедливо переконані, що можуть навчити правильного кандидата використовувати їхні домашні бібліотеки.

Я серйозно сумніваюся, що компанія заборонила використовувати LINQ прямо. Швидше за все, вони хотіли, щоб ви продемонстрували їм свої навички на більш глибокому рівні.

Наприклад, один із способів з'ясувати, чи знаєте ви свої хеш-таблиці, - це попросити запровадити примітивну на дошці. Ця проста вправа розглядає рецензента дивовижну кількість даних про ваші знання: він миттєво дізнається, чи знаєте ви хеш-код / ​​рівність і що ви знаєте про хеш-зіткнення. У той же час, важко уявити, щоб хтось із розуму повторно реалізував хеш-таблицю, тому що Microsoft зробив цю роботу дуже добре. Те ж саме стосується багатьох алгоритмів, таких як сортування та пошук: інтерв'юерам часто хотілося б дізнатися, чи достатньо твого досвіду для розуміння взаємодій на низькому рівні, а не перевіряти, чи володіє ти знаннями бібліотек .NET.

Це майже впевненість, що вони будуть наполягати на використанні бібліотечних реалізацій, а не власних, коли вас найнять працювати у їхній компанії. Але під час інтерв'ю вони підштовхнуть вас до коду низького рівня, щоб краще зрозуміти свої справжні здібності.


1 один магазин пішов аж до створення власного досить примітивного інструменту побудови!


2
Усі ваші моменти добре зроблені, але я повинен надати вам трохи забарвлення в останньому інтерв'ю: інтерв'юер наполягав на тому, що LINQ "застаріла". Я запитав: "чи не ви маєте на увазі, що MS більше не буде інвестувати в Linq-to-SQL, але що Linq-до-Entities буде навколо", і його відповідь, що він мав на увазі те, що він сказав: LINQ "застаріло" так, ні, я не думаю, що він знав занадто багато про LINQ або наполягав би на його використанні.
Метт Кашатт

1
@MatthewPatrickCashatt Якщо хтось плутав LINQ за LINQ2SQL з точки зору застарілої технології, я створив би дурне виправдання, щоб залишити інтерв'ю достроково, і ніколи не закликав цю компанію назад. Якщо це було дійсно так, ви повинні бути щасливими, коли вони вас не наймають :)
dasblinkenlight

1
На 100% впевнений, що це було так. Насправді я не міг протистояти надсиланню йому декількох посилань, щоб встановити його на правильний шлях по темі, не як джеб, оскільки я не отримав концерт, а тому, що я насправді збентежився за нього і сподівався, що зможу допоможіть йому не помилитися двічі;).
Метт Кашатт

4
Тоді це, мабуть, менше стосується стека технологій і більше стосується того, що ви його виправили. Люди не люблять, щоб їх виправляли. Це просто людська природа. Коли люди приймуть такі рішення, як наймання людей, 99% піде зі своєю інтуїцією. Вони йдуть повз того, чи ти викликав у них позитивні чи негативні емоції. Виправлення його, можливо, викликало у нього негативні емоції. Потім він пов'язує той негатив із ситуацією.
кодер

1
Я не знаю, як працюють хештелі всередині. Глибокі технічні випробування, як це, викидають людей з практично налаштованою підготовкою, які, тим не менше, є хорошими кандидатами. Вимагати від людей низьких знань, які вони ніколи не використовуватимуть, мені здається непотрібним. Принципи дизайну стали набагато важливішими!
Тярт

4

Я думаю, ви робите там кілька шалених узагальнень типу "Я побачив чорну корову в Шотландії, тому всі шотландські корови чорні".

Якби я взяв інтерв'ю з вами, я був би розчарований, якби ви не змогли відповісти на мої linq питання.

Хоча Linq є хитрою, але багато людей сприймають це як вуду, що несправедливо, оскільки насправді це дуже просто і тим більше розумно.


3

Для того, щоб грати в захисника диявола, причина в тому, що багато розробників просто не переймаються новими речами і вважають, що все має бути вирішено за допомогою домашніх (зазвичай неповноцінних) інструментів. У використанні абстракцій немає нічого поганого. Чорт, зазвичай немає вагомих причин не використовувати ці абстракції.

Це здається, що ви щойно взяли інтерв'ю у бідного розробника, який не в курсі речей і застосовує молот і цвяхи до всього. Це типи розробників, які нічого не знають про корисні інструменти з відкритим кодом, такі як NUnit, NHibernate чи різні контейнери IoC; ті, хто намагається вирішити кожну проблему з масовим зберігається процесом у базі даних; ті, хто абсолютно нічого не знає про MVC, незважаючи на те, що він вже кілька років.


Ви можете кинути LINQ у пул словника, що містить Nhibernate тощо. Я б цього не робив. Власне, я думаю, що модники є прикладом нашої нездатності пояснити абстракції в правильних виразах.
AndreasScheinert

Ви добре говорите про "в курсі", я думаю, що обернене було б набагато доречнішим. У минулому було виявлено та використано багато корисних понять, наприклад DSL. Нам належить покращити наше спілкування та зрозуміти такі поняття, як, що нам не потрібно вигадувати нові слова-кайф для старих понять.
AndreasScheinert
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.