Эндрю Хант - Программист-прагматик. Путь от подмастерья к мастеру

Здесь есть возможность читать онлайн «Эндрю Хант - Программист-прагматик. Путь от подмастерья к мастеру» весь текст электронной книги совершенно бесплатно (целиком полную версию без сокращений). В некоторых случаях можно слушать аудио, скачать через торрент в формате fb2 и присутствует краткое содержание. Город: М., Год выпуска: 2004, ISBN: 2004, Издательство: Лори, Жанр: Программирование, на русском языке. Описание произведения, (предисловие) а так же отзывы посетителей доступны на портале библиотеки ЛибКат.

Программист-прагматик. Путь от подмастерья к мастеру: краткое содержание, описание и аннотация

Предлагаем к чтению аннотацию, описание, краткое содержание или предисловие (зависит от того, что написал сам автор книги «Программист-прагматик. Путь от подмастерья к мастеру»). Если вы не нашли необходимую информацию о книге — напишите в комментариях, мы постараемся отыскать её.

Находясь на переднем крае программирования, книга «Программист-прагматик. Путь от подмастерья к мастеру» абстрагируется от всевозрастающей специализации и технических тонкостей разработки программ на современном уровне, чтобы исследовать суть процесса – требования к работоспособной и поддерживаемой программе, приводящей пользователей в восторг. Книга охватывает различные темы – от личной ответственности и карьерного роста до архитектурных методик, придающих программам гибкость и простоту в адаптации и повторном использовании.
Прочитав эту книгу, вы научитесь:
Бороться с недостатками программного обеспечения;
Избегать ловушек, связанных с дублированием знания;
Создавать гибкие, динамичные и адаптируемые программы;
Избегать программирования в расчете на совпадение;
Защищать вашу программу при помощи контрактов, утверждений и исключений;
Собирать реальные требования;
Осуществлять безжалостное и эффективное тестирование;
Приводить в восторг ваших пользователей;
Формировать команды из программистов-прагматиков и с помощью автоматизации делать ваши разработки более точными.

Программист-прагматик. Путь от подмастерья к мастеру — читать онлайн бесплатно полную книгу (весь текст) целиком

Ниже представлен текст книги, разбитый по страницам. Система сохранения места последней прочитанной страницы, позволяет с удобством читать онлайн бесплатно книгу «Программист-прагматик. Путь от подмастерья к мастеру», без необходимости каждый раз заново искать на чём Вы остановились. Поставьте закладку, и сможете в любой момент перейти на страницу, на которой закончили чтение.

Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать
Упражнение 5 из раздела «Языки, отражающие специфику предметной области»

Ответ: Поскольку мы хотим, чтобы язык был расширяемым, сделаем таблицу синтаксического анализатора управляемой. Каждый элемент таблицы содержит символ команды, флаг, говорящий о необходимости аргумента, и имя подпрограммы, вызываемой для обработки этой конкретной команды.

typedef struct {

char cmd; /* the command letter */

int hasArg; /* does it take an argument */

void (*func)(int, int); /* routine to call */

} Command;

static Command cmds[] = {

{'P', ARG, doSelectPen},

('V', NO_ARG, doPenUp},

{'D', NO_ARG, doPenDown},

{'N,' ARG, doPenDir},

{'E', ARG, doPenDir},

{'S', ARG, doPenDir},

{'W', ARG, doPenDir}

};

Основная программа довольно проста: считать строку, отыскать команду, при необходимости принять аргумент, затем вызвать функцию обработчика.

while (fgetsfbuff, sizeof(buff), stdin)) {

Command *cmd = findCommand(*buff);

if (cmd) {

int arg = 0;

if (cmd->hasAr&& !getArg(buff+1, &arg)) {

fprintf(stderr,"'%с' needs an argument\n», *buff);

continue;

}

cmd->func(*buff, arg);

}

}

Функция, которая ищет команду, исполняет последовательный перебор таблицы, возвращая либо совпадающий элемент, либо NULL.

Command *findCommand(int cmd) {

int i;

for (i = 0; i

if (cmds[i].cmd==cmd)

return cmds + i;

}

fprintf(stderr, «Unknown command %c'\n», cmd);

return 0;

}

И наконец, считывание числового аргумента довольно просто, если использовать подпрограмму sscanf.

int getArg(const char *buff, int 'result) {

return sscanf(buff, «%d», result) == 1;

}

Упражнение 6 из раздела «Языки, отражающие специфику предметной области»

Ответ 6: При использовании BNF спецификация времени могла бы выглядеть следующим образом:

::= |

: |

:

::= am|pm

::= |

::=

::=

::= 0|1|2|3|4|5|6|7|8|9

Упражнение 7 из раздела «Языки, отражающие специфику предметной области»

Ответ: В нашем примере мы составили программу, используя генератор bison, который представляет собой GNU-версию генератора уасс. Для ясности здесь показано только тело программы синтаксического анализатора. Полная версия есть на сайте www.pragmaticprogrammmer.com.

time: spec EOF

{ if ($1>= 24*60) yyerror("Time is too large»);

printf("%d minutes past midnight\n», $1);

exit(0);

}

;

spec: hour ':' minute

{ $$ = $1 + $3;

}

| hour ':' minute ampm

{ if ($1>11*60) yyerrorf «Hour out of range»);

$$ = $1 + $3 + $4;

}

| hour ampm

{if ($1>11*60) yyerror("Hour out of range»);

$$ = $1 + $2;

}

;

hour: hour_num

{if ($1>23) yyerror("Hour out of range»);

$$ = $1 * 60;

};

minute: DIGIT DIGIT

{$$ = $1*10 + $2;

if ($$> 59) yyerrorf «minute out of range») ,

};

ampm: AM {$$ = AM_MINS;}

| PM {$$ = PM_MINS;)

;

hour num: DIGIT {$$ = $1;)

| DIGIT DIGIT {$$ = $1*10 + $2;}

;

Упражнение 8 из раздела «Языки, отражающие специфику предметной области»

Ответ:

$_ = shift;

/"(\d\d?)(am|pm)$/ && doTime($1, 0, $2, 12);

/"(\d\d?):(\d\d)(am|pm)$/ && doTime($1, $2, $3, 12);

/"(\d\d?):(\d\d)$/ && doTime($1, $2, 0, 24);

die «Invalid time $_\n";

#

# doTime(hour, min, ampm, maxHour)

#

sub doTime($$$$) {

my ($hour, $min, $offset, $maxHour) = @_;

die «Invalid hour: $hour» if ($hour>= $maxHour);

$hour += 12 if ($offset eq «pm»)

print $hour*60 + $min, « minutes past midnight\n";

exit(0);

}

Упражнение 9: из раздела «Оценка»

Ответ: Ответ должен быть изложен, исходя из нескольких допущений:

• Лента содержит информацию, которую необходимо передать.

• Известна скорость ходьбы человека.

• Известно расстояние между компьютерами.

• Временем, необходимым для переноса информации на ленту и с ленты, можно пренебречь.

• Потери данных при хранении на ленте примерно равны их потерям при передаче по каналу связи.

Упражнение 10 из раздела «Оценка»

Ответ: Учитывая допущения ответа 9: Объем информации, содержащейся на стриммерной кассете (4 Гбайт), составляет 32 х 10^9 бит, так что передача эквивалентного объема по каналу со скоростью 1 Мбайт/с заняла бы около 32000 сек. (примерно 9 ч). Если человек движется с постоянной скоростью 3,5 мили в час, то, для того чтобы канал связи превзошел курьера, два компьютера должны располагаться друг от друга на расстоянии не менее 31 мили. Если это расстояние меньше, то победа остается за человеком.

Упражнение 11 из раздела «Обработка текста»

Ответ: Ответ к данному упражнению составлен на языке Perl.

my @consts;

my $name = <>;

die «Invalid format – missing name» unless defined($name);

chomp $name;

# Read in the rest of the file

while (<>) {

chomp;

s/"\s*//; s/\s*$//;

die «Invalid line: $_» unless /"(\w+)$/;

push @consts, $_;

}

# Now generate the file

open(HDR, «>$name.h») or die «Can't open $name.h: $!";

open(SRC, «>$name.c») or die «Can't open $name.c: $!";

my $uc_name = uc($name);

print HDR «/* File generated automatically – do not edit */\n";

print HDR «extern const char *$ {ucjiame)_name[];";

print HDR «typedef enum {\n"; print HDR join»,\n», @consts;

print HDR «\n) $uc_name;\n\n";

print SRC «* File generated automatically – do not edit */\n";

print SRC «const char *$ {uc name}_name[] = {\n \"";

print SRC join «\»,\n \"», @consts;

print SRC «\"\n};\n";

close(SRC);

close(HDR);

Используя принцип DRY, мы не будет вырезать и вклеивать этот вновь написанный файл в нашу программу. Вместо этого мы «включим» его – данный плоский файл является главным источником этих констант. Поэтому нам понадобится файл сборки для восстановления заголовка при изменении файла. Следующий фрагмент содержится в системе отладки в исходном дереве (имеется на web-сайте).

Читать дальше
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

Похожие книги на «Программист-прагматик. Путь от подмастерья к мастеру»

Представляем Вашему вниманию похожие книги на «Программист-прагматик. Путь от подмастерья к мастеру» списком для выбора. Мы отобрали схожую по названию и смыслу литературу в надежде предоставить читателям больше вариантов отыскать новые, интересные, ещё непрочитанные произведения.


Отзывы о книге «Программист-прагматик. Путь от подмастерья к мастеру»

Обсуждение, отзывы о книге «Программист-прагматик. Путь от подмастерья к мастеру» и просто собственные мнения читателей. Оставьте ваши комментарии, напишите, что Вы думаете о произведении, его смысле или главных героях. Укажите что конкретно понравилось, а что нет, и почему Вы так считаете.