Если есть у кого время... История такая. Заинтересовался вакансией, сказали что рассмотрят меня как потенциального сотрудника только после выполненного задания. Вот текст задачи:
Задание: необходимо вывести введенное 10-тичное число словами на русском языке в 8-ми и 10-ной системах. Например.
Вводим: 131
Выводим:
сто тридцать один в десятичной системе;
двести три в восьмеричной системе.
При проектировании подумайте о том, как ваше решение можно было бы локализовать на английский язык (тут обратите внимание, например, на цифру "двести", которая на английском будет состоять из двух слов).
Суть не в том, что мне отказали, а что я потратил некоторое количество личного времени на написание кода, и очень хочу знать на чем "срубился". Заранее благодарен за любые комментарии.
Не знаю на чем вы срубились. Думаю, дело не в отрицательных, или слишком больших числах, кривом интерфейсе командной строки — все это мелочи.
Лично я бы не взял за использование С++ на пустом месте.
imho, проще надо быть, проще.
Детально не вчитывался в алгоритм, просмотрел практически по-диагонали. Сразу бросилось в глаза, что написано в сишном стиле. Возможно, люди хотели увидеть синглтон, абстрактную фабрику или что-то подобное, труЪ C++ и все такое. Структуры, содержащие const wchar_t* режут глаз. Где конструктор копирования, оператор присваивания? Понятно, что оно, м.б. и не надо в данном случае, но... И почему const wchar_t* вместо std::string? И почему вообще wchar_t вместо TCHAR (ну, это мой личный пунктик, м.б. не все согласятся)? Легко ли расширить твой алгоритм для двоичной системы?
Здравствуйте, YaTL, Вы писали:
YTL>Если есть у кого время... История такая. Заинтересовался вакансией, сказали что рассмотрят меня как потенциального сотрудника только после выполненного задания. Вот текст задачи: YTL>Суть не в том, что мне отказали, а что я потратил некоторое количество личного времени на написание кода, YTL>и очень хочу знать на чем "срубился". Заранее благодарен за любые комментарии.
бросилось в глаза отсутствие "нуля" (про отрицательные уже сказали), проверки на не-число, а так же несоответствие заданию. там несколько другой вывод просили сделать. на код и алгоритм не смотрел. а еще бросилось в глаза отсутствие комментариев. но имхо это не смертельно. я бы вас взял. коллеги и не такие ляпы допускают. дело ж не в ляпах, а чтобы пнули -> исправил, а не начинал оправдываться. может быть, вы не туда трудоустраиваетесь. может быть я не прав. не знаю...
americans fought a war for a freedom. another one to end slavery. so, what do some of them choose to do with their freedom? become slaves.
Здравствуйте, 0xC0DE, Вы писали:
CDE>Здравствуйте, DimaX, Вы писали:
DX>>Лично я бы не взял за использование С++ на пустом месте. CDE>Э-э-э, а если вакансия была программиста C++?
а что в этом коде от плюсов кроме расширения?
americans fought a war for a freedom. another one to end slavery. so, what do some of them choose to do with their freedom? become slaves.
Здравствуйте, мыщъх, Вы писали:
М>Здравствуйте, 0xC0DE, Вы писали:
CDE>>Здравствуйте, DimaX, Вы писали:
DX>>>Лично я бы не взял за использование С++ на пустом месте. CDE>>Э-э-э, а если вакансия была программиста C++? М>а что в этом коде от плюсов кроме расширения?
Посмотрел код еще раз и не понял в чем собственно вопрос? По вашему это С-шный код?
Здравствуйте, DimaX, Вы писали:
DX>Здравствуйте, мыщъх, Вы писали:
М>>Здравствуйте, 0xC0DE, Вы писали:
CDE>>>Здравствуйте, DimaX, Вы писали:
DX>>>>Лично я бы не взял за использование С++ на пустом месте. CDE>>>Э-э-э, а если вакансия была программиста C++? М>>а что в этом коде от плюсов кроме расширения?
DX>Посмотрел код еще раз и не понял в чем собственно вопрос? По вашему это С-шный код?
боюсь обидеть, но это даже ближе к бейскику, чем к процедурному. и это уж точно не ооп. декомпозиции нет. попробуйте записать эту программу в несколько строк так чтобы выразить алгоритм. в псеводокоде. если вам нужна какая-то функция, которой нет в си -- ну так дайте ей осмысленное имя и вызовите. сами функции потом напишите это будет классика процедурного программирования. а так это бейскик.
americans fought a war for a freedom. another one to end slavery. so, what do some of them choose to do with their freedom? become slaves.
CDE>Детально не вчитывался в алгоритм, просмотрел практически по-диагонали. Сразу бросилось в глаза, что написано в сишном стиле. Возможно, люди хотели увидеть синглтон, абстрактную фабрику или что-то подобное, труЪ C++ и все такое. Структуры, содержащие const wchar_t* режут глаз. Где конструктор копирования, оператор присваивания? Понятно, что оно, м.б. и не надо в данном случае, но... И почему const wchar_t* вместо std::string? И почему вообще wchar_t вместо TCHAR (ну, это мой личный пунктик, м.б. не все согласятся)? Легко ли расширить твой алгоритм для двоичной системы?
Наоборот, нормальные компании не хотят видеть ни синглтоны, ни абстрактные фабрики ни "труЪ С++ и все такое."
Здравствуйте, YaTL, Вы писали:
YTL>Суть не в том, что мне отказали, а что я потратил некоторое количество личного времени на написание кода, и очень хочу знать на чем "срубился". Заранее благодарен за любые комментарии.
Посмотрел очень мельком, и даже сравнительно неплохо все, без мата можно читать. За форматирование нормальное и следование code convention большой респект, очень мало народа на это обращает внимание.
Вот только CNumParser::ParseOneStep. Метод слишком большой, ИМХО надо разбивать на множество методов, сейчас разбираться как он работает нет ни малейшего желания в текущей реализации. Особенно magic number 10 там интересно смотрится, сходу я его бы не ожидал там встретить, у нас же переменное основание системы счисления, откуда оно там может взяться непонятно. Учитывая, что это единственная логика в задании, и все сделано одним методом, лично я бы расценил это как неумение декомпозировать задачу, и отсутствие навыков процедурного программирования (про ООП даже не говорю, но оно здесь и не нужно ИМХО).
Здравствуйте, Олег К., Вы писали:
CDE>>Детально не вчитывался в алгоритм, просмотрел практически по-диагонали. Сразу бросилось в глаза, что написано в сишном стиле. Возможно, люди хотели увидеть синглтон, абстрактную фабрику или что-то подобное, труЪ C++ и все такое. Структуры, содержащие const wchar_t* режут глаз. Где конструктор копирования, оператор присваивания? Понятно, что оно, м.б. и не надо в данном случае, но... И почему const wchar_t* вместо std::string? И почему вообще wchar_t вместо TCHAR (ну, это мой личный пунктик, м.б. не все согласятся)? Легко ли расширить твой алгоритм для двоичной системы? ОК>Наоборот, нормальные компании не хотят видеть ни синглтоны, ни абстрактные фабрики ни "труЪ С++ и все такое."
Здравствуйте, dilmah, Вы писали:
D>где нормальное форматирование?? D>там табы в середине строки стоят. Ты видел как этот код выглядит со стандартным размером таба 8?
Ну, у меня открылось нормально, я аж удивился . Сходу косяков не заметил.
Здравствуйте, Олег К., Вы писали:
CDE>>Детально не вчитывался в алгоритм, просмотрел практически по-диагонали. Сразу бросилось в глаза, что написано в сишном стиле. Возможно, люди хотели увидеть синглтон, абстрактную фабрику или что-то подобное, труЪ C++ и все такое. Структуры, содержащие const wchar_t* режут глаз. Где конструктор копирования, оператор присваивания? Понятно, что оно, м.б. и не надо в данном случае, но... И почему const wchar_t* вместо std::string? И почему вообще wchar_t вместо TCHAR (ну, это мой личный пунктик, м.б. не все согласятся)? Легко ли расширить твой алгоритм для двоичной системы? ОК>Наоборот, нормальные компании не хотят видеть ни синглтоны, ни абстрактные фабрики ни "труЪ С++ и все такое."
+1.
Но обычно они хотят видеть std::string std::wstring и vector вместо char[1024], wchar_t[1024], просто чтобы не было магических констант при превышении которых программа упадет.
Любая проблема дизайна может быть решена введением дополнительного абстрактного слоя, за исключением проблемы слишком большого количества дополнительных абстрактных слоев
Здравствуйте, мыщъх, Вы писали:
М>Здравствуйте, DimaX, Вы писали:
DX>>Здравствуйте, мыщъх, Вы писали:
М>>>Здравствуйте, 0xC0DE, Вы писали:
CDE>>>>Здравствуйте, DimaX, Вы писали:
DX>>>>>Лично я бы не взял за использование С++ на пустом месте. CDE>>>>Э-э-э, а если вакансия была программиста C++? М>>>а что в этом коде от плюсов кроме расширения?
DX>>Посмотрел код еще раз и не понял в чем собственно вопрос? По вашему это С-шный код? М>боюсь обидеть, но это даже ближе к бейскику, чем к процедурному. и это уж точно не ооп. декомпозиции нет. попробуйте записать эту программу в несколько строк так чтобы выразить алгоритм. в псеводокоде. если вам нужна какая-то функция, которой нет в си -- ну так дайте ей осмысленное имя и вызовите. сами функции потом напишите это будет классика процедурного программирования. а так это бейскик.
Я правильно понимаю, что задача не сложная и нужно было упор делать не на том чтобы выполнить ее "от и до", т.е. даже то чего не просили но намекали (с англ.яз.), а не думая над упрощением кода демонстрировать "а еще я знаю шаблоны, паттерны..."?
Здравствуйте, мыщъх, Вы писали:
М>Здравствуйте, YaTL, Вы писали:
YTL>>Если есть у кого время... История такая. Заинтересовался вакансией, сказали что рассмотрят меня как потенциального сотрудника только после выполненного задания. Вот текст задачи: YTL>>Суть не в том, что мне отказали, а что я потратил некоторое количество личного времени на написание кода, YTL>>и очень хочу знать на чем "срубился". Заранее благодарен за любые комментарии. М>бросилось в глаза отсутствие "нуля" (про отрицательные уже сказали), проверки на не-число, а так же несоответствие заданию. там несколько другой вывод просили сделать. на код и алгоритм не смотрел. а еще бросилось в глаза отсутствие комментариев. но имхо это не смертельно. я бы вас взял. коллеги и не такие ляпы допускают. дело ж не в ляпах, а чтобы пнули -> исправил, а не начинал оправдываться. может быть, вы не туда трудоустраиваетесь. может быть я не прав. не знаю...
Ноль там есть. Не закрывая консоли после завершения программы можно его увидеть
Здравствуйте, elmal, Вы писали:
E>Здравствуйте, YaTL, Вы писали:
YTL>>Суть не в том, что мне отказали, а что я потратил некоторое количество личного времени на написание кода, и очень хочу знать на чем "срубился". Заранее благодарен за любые комментарии. E>Посмотрел очень мельком, и даже сравнительно неплохо все, без мата можно читать. За форматирование нормальное и следование code convention большой респект, очень мало народа на это обращает внимание. E>Вот только CNumParser::ParseOneStep. Метод слишком большой, ИМХО надо разбивать на множество методов, сейчас разбираться как он работает нет ни малейшего желания в текущей реализации. Особенно magic number 10 там интересно смотрится, сходу я его бы не ожидал там встретить, у нас же переменное основание системы счисления, откуда оно там может взяться непонятно. Учитывая, что это единственная логика в задании, и все сделано одним методом, лично я бы расценил это как неумение декомпозировать задачу, и отсутствие навыков процедурного программирования (про ООП даже не говорю, но оно здесь и не нужно ИМХО).
10 не магическое число, а "человечья система счисления", а та которая требуется для вывода имеет место быть в качестве переменного параметра (10, 8) в конструкторе...
Здравствуйте, 0xC0DE, Вы писали:
CDE>Детально не вчитывался в алгоритм, просмотрел практически по-диагонали. Сразу бросилось в глаза, что написано в сишном стиле. Возможно, люди хотели увидеть синглтон, абстрактную фабрику или что-то подобное, труЪ C++ и все такое. Структуры, содержащие const wchar_t* режут глаз. Где конструктор копирования, оператор присваивания? Понятно, что оно, м.б. и не надо в данном случае, но... И почему const wchar_t* вместо std::string? И почему вообще wchar_t вместо TCHAR (ну, это мой личный пунктик, м.б. не все согласятся)? Легко ли расширить твой алгоритм для двоичной системы?
Насчет двоичной системы вопрос не совсем понятный, 8 и 10 задаются в конструкторе параметрами. А Вы не заметили что все эти const wchar_t* позволили выделить данные о языках в отдельные файлы с этими структурами, отделить их от функции/алгоритма? Других языков не знаю, но над переводом "я подумал", согласитесь.
Здравствуйте, YaTL, Вы писали:
YTL>Я правильно понимаю, что задача не сложная и нужно было упор делать не на том чтобы выполнить ее "от и до", т.е. даже то чего не просили но намекали (с англ.яз.), а не думая над упрощением кода демонстрировать "а еще я знаю шаблоны, паттерны..."?
Не надо ничего демонстрировать, упаси боже. Нужно писать так, чтобы:
1) Легко читалось, чтоб чужой человек сходу бы понял как сделано. Сходу — беглым взглядом. Если невозможно беглым из за хитрых алгоритмов — это должно быть откомментировано;
2) Не должно быть явных багов;
3) Нужно быть готовым к тому, что попросят что то дописать, нужно предугадать возможные изменения и должен был быть план как будем развивать.
Паттерны и все такое являются средством решения, а не самоцелью. На мелких задачах их применять редко когда есть смысл.
Основное — это пункт 1. После п.1 будут смотреть 2, и только потом 3 .