Разберете, че аз съм разработчик, а не компилатор
Наскоро организирах телефонно изявление, на което ми бяха заложени разнообразни въпроси за Java. Това е общоприетоо изявление и множеството от въпросите също бяха много общоприети:
Какво е полиморфизмът? Каква е разликата сред List и Set? Кога би трябвало да употребявате първото и по кое време второто? Къде можете да срещнете взаимно блокиране (deadlock)? Каква е разликата сред прецизното и слабото типизиране?В общи линии въпросите бяха напълно естествени. Лично на мен не ми хареса въпросът за полиморфизма, тъй като той е толкоз тясно обвързван с множеството обектно-ориентирани езици и наследяването, че множеството хора, които го употребяват (например при пренаписване или претоварване на даден метод), даже не се замислят, че: „ О! Това е полиморфизъм в деяние!„. Вместо това бих задал въпроса „ Какво е наследяването и къде се употребява? “, тъй като множеството обектно-ориентирани езици имат основна дума или образец за него. Но това към този момент е мое персонално желание и аз изцяло разбирам логиката на интервюиращата компания.
Въпросът за прецизното и слабото типизиране бе малко необикновен, тъй като моят интервюиращ в действителност имаше поради контрола на видовете, а не прецизното типизиране, тъй че беше малко сюрпризиран, когато споделих, че C има едва статично типизиране, Java има прецизно статично типизиране, а Python има прецизно динамично типизиране (мисля, че JavaScript употребява едва динамично типизиране, само че не го споменах).
Тези въпроси обаче бяха последвани от „ нано-въпроси “:
В кой пакет се намира List? В кой пакет се намира File? Коя основна дума се употребява за осъществяване на унаследяването?(Имаше и „ общоприети въпроси за изявленията като „ къде се виждате след пет години “ и т.н.)
Ръс Олсен споделя, че „ нановъпросите “ водят до две последици:
Освен че не ви споделят съвсем нищо за претендента, тези дребни въпроси имат два действителни минуса: първо, те лишават времето, което бихте могли да отделите за по-добро опознаване на индивида и да разберете дали е задоволително интелигентен, дали има нужния опит и дали ще се впише в екипа ви. Второ, сходни въпроси отблъскват тъкмо този вид умни и гъвкави хора, които желаете да наемете.
Аз вярно отговорих на тези нано-въпроси, само че мога да ви кажа, че те имат трети минус: нано-въпросите могат да доведат до подправено негативни отговори за тези, които другояче са идеални за вашата организация.
Добрият инженер мисли нереално, на езика на проектирането и построяването на системи, на езика на логаритмите, съставените елементи и техническия дизайн. Не е наложително той да знае всички елементи на синтаксиса на даден език, изключително в случай че е привикнал с първокласен IDE, който му оказва помощ в това (аз употребявам Eclipse: набирам List и по-късно натискам control-space, с цел да зареди java.util.List). По-важно е да схвана кой пакет би трябвало да употребявам, в сравнение с да запомня името му.
По същия метод е по-важно да мога да схвана къде би трябвало да употребявам заместничество и къде полиморфизъм, в сравнение с да дефинирам техните дефиниции.
По принцип всеки въпрос, на който може да се отговори за пет секунди благодарение на Google/ChatGPT, е неприятен въпрос. Любимият ми въпрос от телефонно изявление: „ Кой е обичаният ви програмен език? Какви са слабостите му? “
Въпреки това доста изявленията и доста изпити всъщност ви ревизират до каква степен добре можете да замените един компилатор. Дори сертификационните изпити за Java са склонни да натъртват на въпроси за синтаксиса и компилацията вместо на въпроси за това какъв брой добре можете да програмирате и проектирате системи.
Аз съм един добър инженер, а не добър компилатор. Не мога да погледна част от кода и незабавно да кажа какъв е казусът му и дали ще докара до ClassNotFoundException, компилаторът прави това вместо мен. Ако не незабавно, то най-малко когато се опитам да съставям кода. Означава ли това взаимозависимост от IDE? Вероятно, само че това не е безусловно нещо неприятно, тъй като IDE е един от инструментите, които използваме в ежедневната си работа.