Да, прикольный ход. Но опасность в том, что если на собеседовании давать такие задачки - есть риск набрать программистов, которые именно такую абракадабру и будут писать.
1. Я уж и думать забыл про 16-битные машины. 9. Правильный ответ должен начинаться с вопроса "как в вашей компании традиционно нумеруются биты, с младшего или со старшего, и с нуля или с единицы?" :) 10. Товарищ не понимает, что r-values всегда константного типа, но делает вид, что он умнее, чем он есть.
Интересно, в каком году эти вопросы были написаны.
1. 32 бита точно также легко переполнить, достаточно посчитать количество миллисекунд. 2. #define MIN — никто уже так не делает, gcc поддерживает анонимные statement-блоки в выражениях с незапамятных времён 8. Я удивлен что про volatile почти правильно, хотя я бы предпочёл чтобы ответ был сформулирован в терминах сайд-эффектов. 8c. А вот тут строго нет, для этого есть atomic. Volatile тут прокатывает только в очень простых контроллерах.
В общем да, навскидку где-то год 2006 или даже раньше.
Вот есть люди, которые хорошо готовятся, проходят подобные тесты на отлично, мнят себя экспертами, а потом пишут код на 10 klocs в одном файле с тучей глобальных переменных и еще и с рекурсией (если они особенно крутые). А потом на этот код приходит пара change requests и стопицот bug reports. А разработчик/консультант, который все это нахерачил уже давно ушел в другой проект. И что прикажете с этим делать, кроме как переписывать все нахрен?
У тоёты с тормозами такой же примерно специалист код писал, наверняка все эти тесты на ура прошел :(
К сожалению успех в тестах не является даже необходимым условием. Есть люди, которые тесты проходят плохо, а код пишут хорошо. Ergo -- тесты на знание языка бесполезны, а на собеседовании надо смотреть чтоб человек был адекватный и вписывался в коллектив, а не то головная боль потом гарантирована. А если он какие-то детали языка Си не знает на зубок -- этому научить и научиться в разы проще, чем другим, менее техническим умениям.
Это верно. Поэтому собеседование это неформальный процесс. Вовсе не экзамен на знание языка. Но я часто сталкивался, когда собеседник отлично рассуждает на темы, касающиеся проектирования, архитектуры, тестирования, организации разработки, но тушуется, когда его просят написать функцию, переставляющую байты в слове. Программист должен писать код не менее свободно, чем говорить. А детали языка всегда можно нагуглить.
> Программист должен писать код не менее свободно, чем говорить.
Это очень специфический тип программиста, так называемый кодер. Дали задание -- он закодировал (предположим правильно). Дали задание с ошибкой -- он закодировал как задали и ошибку не нашел. Ошибку найдут потом через 2 года и она будет стоить много. Нет, спасибо, не люблю работать с кодерами.
Я, например (ха-ха, себя милого конечно в пример), давно уже не могу писать код свободно (примерно после окончания уни разучился) -- да и редко я много кода пишу. Мне гораздо важнее умение организовать процесс разработки и выбор правильного дизайна в котором ошибки будут находить быстро. В 100 раз пример важнее, чем умение свободно писать код.
Одна строчка критичного кода стоит >100 евро. Мне абсолютно пофигу будет ли разработчик писать ее 1 минуту или 10 минут вспоминая синтакс и через SO, если она будет работать без ошибок и ее не придется потом переписывать еще 10 раз.
Это конечно все не значит, что разработчик не должен уметь программировать, но вот тестов на определение этого умения я еще пока нигде не видел. И конечно же умение рассуждения на тему организации разработки не равносильно умению организовать процесс. Это трудно понять на собеседовании, тут вы правы.
Умеющих организовать процесс у нас имеется. Я имею в виду компанию, где работаю. Нам нужны люди, которые любят и умеют писать код. Не любите работать с кодерами - не приходите к нам. Мы любим работать с кодерами.
no subject
Date: 2020-07-22 20:35 (UTC)Напечатать числа 1..100 без использования условий (в том числа тернарного оператора) и циклов.
no subject
Date: 2020-07-22 20:52 (UTC)printf("1\n2\n3\n");
no subject
Date: 2020-07-22 22:11 (UTC)#include <stdio.h> void p(int i) { printf("%d ", i); int stopit = 1 / (100-i); p(i+1); } int main(int argc, char *argv[]) { p(1); }no subject
Date: 2020-07-22 22:35 (UTC)no subject
Date: 2020-07-22 23:24 (UTC)no subject
Date: 2020-07-22 23:20 (UTC)no subject
Date: 2020-07-23 01:35 (UTC)#include <stdio.h> boolean p(int i) { printf("%d ", i); i < 100 && p(i+1); } int main(int argc, char *argv[]) { p(1); }no subject
Date: 2020-07-23 04:20 (UTC)если в кратчайшем виде:
#include
если в кратчайшем виде:
#include <stdio.h>
int main(int argc) {
printf("%d ", argc);
return argc < 100 && main(argc+1);
}
no subject
Date: 2020-07-23 04:23 (UTC)no subject
Date: 2020-07-24 19:37 (UTC)no subject
Date: 2020-07-24 19:37 (UTC)#include <stdio.h> #include <stdlib.h> void p(int i) { printf("%d ", i); (*(void(*)(int))(i/100*(unsigned long)exit + (1-i/100)*(unsigned long)p))(i+1); } int main(int argc, char *argv[]) { p(1); }no subject
Date: 2020-07-24 19:58 (UTC)no subject
Date: 2020-07-24 21:09 (UTC)Единственная поправка: вместо unsigned long надо uintptr_t
иначе на VC x64 не работает
no subject
Date: 2020-07-24 22:18 (UTC)no subject
Date: 2020-07-22 22:46 (UTC)no subject
Date: 2020-07-22 21:14 (UTC)9. Правильный ответ должен начинаться с вопроса "как в вашей компании традиционно нумеруются биты, с младшего или со старшего, и с нуля или с единицы?" :)
10. Товарищ не понимает, что r-values всегда константного типа, но делает вид, что он умнее, чем он есть.
Интересно, в каком году эти вопросы были написаны.
no subject
Date: 2020-07-23 03:10 (UTC)Позволяет подготовиться к интервью подобного типа, освежает. Еще полезно всегда подглядывать что там компилятор на компилил.
no subject
Date: 2020-07-24 19:38 (UTC)Это всю жизнь было моим любимым занятием. :)
no subject
Date: 2020-07-23 09:44 (UTC)2. #define MIN — никто уже так не делает, gcc поддерживает анонимные statement-блоки в выражениях с незапамятных времён
8. Я удивлен что про volatile почти правильно, хотя я бы предпочёл чтобы ответ был сформулирован в терминах сайд-эффектов.
8c. А вот тут строго нет, для этого есть atomic. Volatile тут прокатывает только в очень простых контроллерах.
В общем да, навскидку где-то год 2006 или даже раньше.
no subject
Date: 2020-07-24 19:40 (UTC)no subject
Date: 2020-07-26 10:57 (UTC)мнят себя экспертами, а потом пишут код на 10 klocs в одном файле с тучей
глобальных переменных и еще и с рекурсией (если они особенно крутые).
А потом на этот код приходит пара change requests и стопицот bug reports.
А разработчик/консультант, который все это нахерачил уже давно ушел в другой проект.
И что прикажете с этим делать, кроме как переписывать все нахрен?
У тоёты с тормозами такой же примерно специалист код писал,
наверняка все эти тесты на ура прошел :(
no subject
Date: 2020-07-29 06:52 (UTC)no subject
Date: 2020-07-29 18:03 (UTC)Есть люди, которые тесты проходят плохо, а код пишут хорошо.
Ergo -- тесты на знание языка бесполезны, а на собеседовании надо смотреть чтоб человек был адекватный и вписывался в коллектив, а не то головная боль потом гарантирована.
А если он какие-то детали языка Си не знает на зубок --
этому научить и научиться в разы проще, чем другим, менее техническим умениям.
no subject
Date: 2020-07-29 18:46 (UTC)no subject
Date: 2020-07-29 19:41 (UTC)Это очень специфический тип программиста, так называемый кодер.
Дали задание -- он закодировал (предположим правильно).
Дали задание с ошибкой -- он закодировал как задали и ошибку не нашел.
Ошибку найдут потом через 2 года и она будет стоить много.
Нет, спасибо, не люблю работать с кодерами.
Я, например (ха-ха, себя милого конечно в пример),
давно уже не могу писать код свободно
(примерно после окончания уни разучился) --
да и редко я много кода пишу.
Мне гораздо важнее умение организовать процесс разработки и
выбор правильного дизайна в котором ошибки будут находить быстро.
В 100 раз пример важнее, чем умение свободно писать код.
Одна строчка критичного кода стоит >100 евро.
Мне абсолютно пофигу будет ли разработчик писать ее 1 минуту или
10 минут вспоминая синтакс и через SO, если она будет работать без ошибок
и ее не придется потом переписывать еще 10 раз.
Это конечно все не значит, что разработчик не должен уметь программировать,
но вот тестов на определение этого умения я еще пока нигде не видел.
И конечно же умение рассуждения на тему организации разработки не равносильно умению организовать процесс.
Это трудно понять на собеседовании, тут вы правы.
no subject
Date: 2020-07-30 04:58 (UTC)