Как стать автором
Поиск
Написать публикацию
Обновить

«Привет, мир!» как инструмент для оценки навыков программирования

Время на прочтение3 мин
Количество просмотров7K
Оценка уровня профессиональных навыков программиста очень сложная задача. Каждый решает её по-своему: кто-то предлагает кандидату пройти очень объемный тест, состоящий из тысячи вопросов, кто-то предлагает решить сразу очень сложную задачу, и т.п. Данные подходы имеют право на существование, но они как минимум требуют много времени. Обычно требуется быстро оценить уровень, тогда проще всего предложить решить очень простую задачу на интересуемом языке программирования. Я предлагаю в качестве такой задачи использовать программу, с которой начинается изучение любого языка – «Привет мир!».
С одной стороны, это очень простая задача, но с другой, как показывает практика, даже она является в то же время очень сложной. Рассмотрим подробно какие варианты решения такой задачи пишут реальные люди и что они показывают.
Вариант 1-ый – правильная программа, работающая с ошибкой.
#include <stdio.h>
void main()
    {
    printf( "Hello, world!" );
    }


Что тут неправильного? В консоль выводится текст, программа вроде работает… Но, вспоминаем, в контексте операционной системы, любая программа возвращает код завершения. Данный код (нужно вспомнить ассемблер) храниться в регистре eax (на 32-х разрядной платформе, чтобы быть полностью корректным). В примере выше мы ничего в данный регистр не помещаем, но операционная система не меняет логики своей работы. Поэтому, скорее всего какой-то мусор, находящийся там, будет интерпретирован как результат работы нашей программы. А так как это скорее всего (99.99%) не нулевое значение, то это означает, что наша программа завершилась ошибочно.
Вот «правильный» вариант с точки зрения операционной системы:
#include <stdio.h>
int main()
    {
    printf( "Hello, world!" );
    return 0;
    }

В предпоследней строке мы в качестве результата работы возвращаем 0 – все успешно.
Идём дальше, уже лучше, но все равно есть что улучшить. Смотрим на строку с выводом строки в консоль, там есть повод для замечания от компилятора – небезопасный вывод. Вот более безопасный вариант:
#include <stdio.h>
int main()
    {
    printf( "%s", "Hello, world!" );
    return 0;
    }

Думаю, этот вариант понятен без объяснения (для остальных не составит труда найти объяснение в гугле).
Вроде последний вариант нельзя улучшить, или нет? Какие есть предложения? Как известно, программа без комментариев ничего не стоит, поэтому возможно здесь не хватает именно них или нет? Я считаю (и не только я один), что комментарий здесь также нужен, но какой? Что комментировать и как, чтоб не получилось масло масленое. Писать программы, понятные компьютеру, учат в школе в 9-м классе (или ещё раньше), но писать программы, понятные человеку, иногда не учат даже в университете.
Вот пример программы с комментариями (то есть документированной) в стиле системы автодокументирования Doxygen.
///@file hello_world.cpp
///@brief Учебная программа, выводящая в консоль приветствие «Hello, world!».
///@author idimm 

#include <stdio.h>

///@brief Главная функция, непосредственно выводящая в консоль приветствие. 
int main()
    {
    printf( "%s", "Hello, world!" );
    return 0;
    }

Некоторые пояснения — данный код содержит минимальную информацию на уровне файла (кто автор, версию, общее описание) и на уровне функции (что функция делает). Данный пример показывает, что даже такая программа может содержать ценный комментарий.
Но и это не последний вариант. Пусть нам необходимо вывести приветствие на китайском языке, как это сделать? Во-первых, это можно реализовать различными способами, во-вторых, это потребует дополнительных знаний о работе с символьными данными (строками). Я не буду приводить пример решения данной задачи, но она не так проста, как кажется. Рекомендую самостоятельно это сделать.
Таким образом, даже простейшая задача может много рассказать о навыках программирования.
Теги:
Хабы:
Всего голосов 62: ↑4 и ↓58-54
Комментарии153

Публикации

Ближайшие события