Почему надо хорошо знать свой инструмент
Каждый раз, когда я рассказываю в блоге как я провожу собеседование программистов, я получаю груду комментариев вида «я плохо знаю язык и считаю, что это нормально, а ты собеседуешь неправильно, нельзя требовать от людей хорошего знания языка». Я уж думал, что я последний человек на Земле, который считает, что инструмент надо знать хорошо (справедливости ради, некоторые комментаторы меня в этом поддерживали).
Ан нет, отличная презентация Олве Маудала и Джона Джаггера «Deep C (and C++)» даёт надежду, что я не последний и хорошо показывает различия между посредственным знанием и хорошим.
Комментарии 29
К сожалению, многие задачи собеседований скорее напоминают пример с молотком в азотной атмосфере, проверяя энциклопедические знания.
Что, конечно же, не отменяет необходимости знать свой инструмент достаточно хорошо, чтобы конечный результат получался с требуемым уровнем качества.
Если проводить аналогии с молотком, то знание всех существующих в мере ручек равно знанию всех языков программирования, а вовсе не знанию одного языка хорошо. Умение забить гвоздь в азотной атмосфере относится к опыту, а не знанию языка.
Александр говорил как
Второй пользовался только университетскими знаниями и не следил ни за блогами, ни за чем новым, считая что и так потратил временя на изучение инструмента, что подтвердили дипломом и собеседованием. Писал при этом очень академический ОО код.
Даже не знаю что лучше.
Я вот например, понятия не имею, хорошо я знаю PHP, или плохо, хорошо я знаю SQL или плохо. Что питон я знаю плохо, я знаю :)
Ну я это… слона то и не приметил ;)
Разговаривать нужно с людьми. И желательно, не вопросами «угадай, или я идиот, или я хочу узнать
Тут я полностью согласен. Нужно объяснить на что внимание обратить.
Я думаю, Илай говорил вот о чём: при прочих равных лучше тот программист, который обладает глубоким знанием языка. Но если, например, глубокое знание языка сочетается с провалами в других областях, и «глубокий» знаток пишет грязный код или не задумывается о проектировании, то достоинство сводится на нет.
Вероятно, читатели всякий раз негодуют, потому что опасаются, что вы, Евгений, ставите глубокое знание языка выше прочих достоинств соискателя.
Мне интересно как они этот вывод делают.
Мы не в сферическом офисе работаем. Рядом работают люди, которые пользуются своим набором знаний того, что у них есть. И люди прежде всего люди, они совершают ошибки, онигде-то чересчур усложняют. Важно уметь это читать, ошибки же трудно искать не зная языка хорошо.
Комментарий для Евгения Степанищева:
Я пока читал слайды, с ужасом представил человека, который всеми этими знаниями активно пользуется при написании кода. То есть активно полагается на все эти соглашения.
«Си» другой язык, язык другого поколения, он не «помогает» программировать. Когда он был придуман никто не приходил в ужас от этого. И даже много позже программисты ещё находили прелесть в знаниях такого рода. Думаю, что закат языка Перл произошёл
Например, Пайтон не позволит сделать присваивание в условии. «if a=b: pass» вызовет синтаксическую ошибку. «Гоу» не даст создать функцию без возвращаемого значения (все ветвления так же учтутся).
Тем не менее, любой язык надо знать в подробностях. Это просто выгодно. «Побеждает сильнейший», а хорошее знание языка позволит быстрее найти ошибку и даже, иногда, её «почувствовать», позволяет быстро разобраться в сложном коде, в чужом коде, в плохом коде. Я предпочту такого программиста.
Например, в приведённых слайдах, если бы программа в debug компилировалась, а в обычном режиме начала чудить, девочка из слайда, взглянув на код, сразу бы поняла, что речь идёт об неинициализированной переменной и даже знала бы почему в debug этого не происходила, мальчик же оттуда же, начал трассировать программу или занулять всё подряд, т.е. его скорость решения проблемы была бы ниже.
Комментарий для Евгения Степанищева:
Наверное, за этим будущее. Программная инженерия и так сложная штука, за исторически сложившиеся трудности держаться незачем.
Я надеюсь, что у вас молчаливо предполагается, что хорошее знание языка используется, чтобы понимать такой код, как в слайдах, а не писать его. Хотя job security, наверное, — это тоже неплохо.
Я с вами согласен, но если бы я захотел озвучить мысль о том, что глубокое знание языка важно, я бы десять раз оговорился, что оно важно при прочих равных.
Я тоже еще раз повторюсь, что
ролик про embedded программирование. а там:
1. может быть кастомный стартап, который ложил болт на стандарты, и производит инициализацию так, как удобнее.
2. может быть кастомный скрипт линковщика с аналогичным поведением.
3. глобальные и статические переменные могут быть запрещены. тут вообще далеко ходить не надо — в симбиан версий до 9 было именно так.
Комментарий для zg:
Что за ролик?
Если программист использовал другой инструмент, то он может не разбираться в исходном. Но тогда нечего позиционировать себя как C/C++ программист.
Комментарий для fulc.ru:
презентация, ссылка в посте.
какой, другой?
Комментарий для fulc.ru:
страница 4, первое предложение.
Всегда было любопытно кому он уступит свою современную нишу.