Идеальный программист. Как стать профессионалом разработки ПО [заметки]

Шрифт
Интервал

1

Без паники!

2

Технический термин неизвестного происхождения.

3

Ассемблер для компьютера Honeywell H200, аналог Autocoder для компьютера IBM 1401.

4

Если, конечно, он правильно понимает профессиональную ответственность.

5

Robert C. Martin, Principles, Patterns, and Practices of Agile Software Development, Upper Saddle River, NJ: Prentice Hall, 2002.

6

Также называемой «бережливой». – Примеч. перев.

7

Американский профсоюзный лидер, исчезнувший при загадочных обстоятельствах. – Примеч. пер.

8

http://raptureinvenice.com/?p=63

9

День массовых распродаж в США; приходится на период с 22 по 29 ноября. – Примеч. перев.

10

Возможно, за исключением непосредственного работодателя Джона, хотя я готов поспорить, что он тоже оказался в проигрыше.

11

Правда, никаких денег я на этом не потерял. Я продал свой патент Teradyne за 1 доллар согласно условиям контракта (хотя и этот доллар я не получил).

12

Мартин Р. Чистый код. Создание, анализ и рефакторинг. СПб.: Питер, 2010.

13

Robert C. Martin, Agile Software Development: Principles, Patterns, and Practices, Upper Saddle River, NJ: Prentice Hall, 2003.

14

Я не знаю ни одной методологии, которая бы сравнилась по эффективности с TDD, – но вдруг она известна вам?

15

Эта тема гораздо подробнее рассматривается в главе 10.

16

См. главу 7.

17

К мужчинам это относится в гораздо большей степени, чем к женщинам. У меня была замечательная беседа с @desi (Дези Макадам, основательница DevChix) о мотивации женщин-программистов. Я сказал ей, что для меня заставить программу работать – примерно то же самое, что на охоте убить огромного зверя. Она сказала, что для нее и для других женщин, с которыми она общалась, написание кода является созидательным актом.

18

С высоты своего возраста я считаю ребенком всех, кому меньше 35 лет. Когда мне было за 20, я тратил довольно много времени на написание глупых игр на интерпретируемых языках. Я программировал космические «стрелялки», приключенческие игры, имитаторы скачек, «змейки», азартные игры… и т. п.

19

http://fitnesse.org

20

90 % – минимальная оценка. На самом деле значение намного выше. Точную величину покрытия трудно рассчитать, потому что программные инструменты «не видят» код, выполняемый во внешних процессах или блоках catch.

21

http://www.objectmentor.com/omSolutions/agile_customers.html

22

E. Michael Maximilien, Laurie Williams, “Assessing Test-Driven Development at IBM,“ http://collaboration.csc.ncsu.edu/laurie/Papers/MAXIMILIEN_WILLIAMS.PDF

23

Brian W. Kernighan and Dennis M. Ritchie, The C Programming Language, Upper Saddle River, NJ: Prentice Hall, 1975.

24

А если некоторые программисты и ждут, то это трагическая случайность, которая свидетельствует об их неаккуратности. В современном мире время сборки должно измеряться секундами, а не минутами – и уж конечно, не часами.

25

Рик Хики называет этот метод «разработкой через лежание в гамаке».

26

Эта ката стала очень популярной; Google выдает информацию о многих ее разновидностях. Описание оригинала находится по адресу http://butunclebob.com/ArticleS.UncleBob.TheBowlingGameKata

27

Robert C. Martin, Agile Software Development: Principles, Patterns, and Practices, Upper Saddle River, NJ: Prentice Hall, 2003.

28

http://codekata.pragprog.com

29

Мы используем префикс «Прагматик», чтобы отличить его от «Большого» Дэйва Томаса из OTI.

30

http://codingdojo.org/

31

http://katas.softwarecraftsmanship.org/?p=71

32

http://c2.com/cgi/wiki?PairProgrammingPingPongPattern

33

XP Immersion 3, May, 2000. http://c2.com/cgi/wiki?TomsTalkAtXpImmersionThree

34

Исходное условие: команда LogFileDirectoryStartupCommand

Исходное условие: до выполнения команды каталог old_inactive_logs существует

И содержит файл с именем x

После выполнения команды каталог old_inactive_logs должен существовать и должен содержать файл с именем x. – Примеч. пер.

35

Выполнить 15 операций отправки данных и просуммировать время. Убедиться в том, что z-показатель для двух секунд не менее 2,57. – Примеч. пер.

36

Выполнить 15 операций отправки данных и просуммировать время. Убедиться, что вероятность того, что операция займет не более двух секунд, составляет не менее 99,5 %. – Примеч. пер.

37

http://www.satisfice.com/articles/what_is_et.shtml

38

Mike Cohn, Succeeding with Agile, Boston, MA: Addison-Wesley, 2009.

39

Мана – стандартный ресурс в фэнтезийных и ролевых играх типа «Dungeons &Dragons». Каждый игрок обладает определенным количеством маны – магической субстанции, которая расходуется на применение магических заклинаний. Чем мощнее заклинание, тем больше на него расходуется маны. Восстановление маны происходит медленно, с фиксированным ежедневным приращением. Неопытные игроки способны легко израсходовать всю ману за несколько применений.

40

http://www.pomodorotechnique.com/

41

Закон Мерфи гласит, что если какая-нибудь неприятность может случиться, то она обязательно произойдет.

42

Точное значение для нормального распределения равно 1:769, или 0,13. Вероятно, можно безопасно говорить о вероятности 1:1000.

43

Предполагается, что модель PERT используется для аппроксимации бета-распределения. Это разумное предположение, потому что минимальная длительность выполнения задачи обычно определяется намного точнее, чем максимальная [Макконелл С. Сколько стоит программный проект. СПб.: Питер; М.: Русская Редакция, 2007. Рис. 1.3].

44

Если вы не знаете, что это такое, – найдите хороший учебник по теории вероятностей и математической статистике. Понять эту концепцию нетрудно, но она вам очень пригодится.

45

Barry W. Boehm, Software Engineering Economics, Upper Saddle River, NJ: Prentice Hall, 1981.

46

James Grenning, «Planning Poker or How to Avoid Analysis Paralysis while Release Planning,» April 2002, http://renaissancesoftware.net/papers/14-papers/44-planing-poker.html

47

http://store.mountaingoatsoftware.com/products/planning-poker-cards

48

http://en.wikipedia.org/wiki/Law_of_large_numbers

49

Деревянная игрушка; см. http://en.wikipedia.org/wiki/Jacob%27s_ladder_%28toy%29. – Примеч. перев.

50

Robert C. Martin, Agile Software Development: Principles, Patterns, and Practices, Up per Saddle River, NJ: Prentice Hall, 2003, pp. 20–22; Mike Cohn, Agile Estimating and Planning, Upper Saddle River, NJ: Prentice Hall, 2006.

51

В Интернете есть много сайтов, моделирующих этот забавный маленький компьютер.

52

У меня до сих пор сохранилось это руководство. Оно занимает почетное место на одной из моих книжных полок.

53

Персонаж сериала «Звездный путь». – Примеч. перев.

54

Ленты можно было перематывать только в одном направлении. Если происходила ошибка чтения, ленту нельзя было перемотать назад и прочитать сбойный участок заново. Приходилось прекращать то, что вы делаете, перематывать ленту к точке загрузки и начинать все с начала. Это происходило два-три раза в день. Ошибки записи тоже происходили достаточно часто, и накопитель не мог их обнаружить. По этой причине мы всегда записывали ленты парами, а затем проверяли пары после завершения. Если одна из лент была записана с ошибкой, мы немедленно делали копию. Если испорчены были обе ленты (что бывало очень редко), то вся операция повторялась. Такая была жизнь в 1970-е годы.

55

http://en.wikipedia.org/wiki/ASR-33_Teletype

56

Эти символы были чрезвычайно полезны для редактирования перфолент. По правилам символы «забой» игнорировались при вводе. Их код 0xFF означал, что на ленте были пробиты отверстия во всех позициях. Таким образом, любой символ можно было преобразовать в «забой» – для этого было достаточно пробить «забой» поверх старого символа. Итак, если вы допускали ошибку во время ввода программы, можно было вернуться к предыдущему символу, нажать клавишу «забой», а потом продолжить ввод.


Еще от автора Роберт Сесил Мартин
Чистый код. Создание, анализ и рефакторинг

Даже плохой программный код может работать. Однако если код не является «чистым», это всегда будет мешать развитию проекта и компании-разработчика, отнимая значительные ресурсы на его поддержку и «укрощение». Эта книга посвящена хорошему программированию. Она полна реальных примеров кода. Мы будем рассматривать код с различных направлений: сверху вниз, снизу вверх и даже изнутри. Прочитав книгу, вы узнаете много нового о коде. Более того, вы научитесь отличать хороший код от плохого. Вы узнаете, как писать хороший код и как преобразовать плохой код в хороший. Книга состоит из трех частей.


Чистая архитектура. Искусство разработки программного обеспечения

«Идеальный программист» и «Чистый код» – легендарные бестселлеры Роберта Мартина – рассказывают, как достичь высот профессионализма. «Чистая архитектура» продолжает эту тему, но не предлагает несколько вариантов в стиле «решай сам», а объясняет, что именно следует делать, по какой причине и почему именно такое решение станет принципиально важным для вашего успеха. Роберт Мартин дает прямые и лаконичные ответы на ключевые вопросы архитектуры и дизайна. «Чистую архитектуру» обязаны прочитать разработчики всех уровней, системные аналитики, архитекторы и каждый программист, который желает подняться по карьерной лестнице или хотя бы повлиять на людей, которые занимаются данной работой.


Чистый Agile. Основы гибкости

Прошло почти двадцать лет с тех пор как появился Манифест Agile. Легендарный Роберт Мартин (Дядя Боб) понял, что пора стряхнуть пыль с принципов Agile, и заново рассказать о гибком подходе не только новому поколению программистов, но и специалистам из других отраслей. Автор полюбившихся айтишникам книг «Чистый код», «Идеальный программист», «Чистая архитектура» стоял у истоков Agile. «Чистый Agile» устраняет недопонимание и путаницу, которые за годы существования Agile усложнили его применение по сравнению с изначальным замыслом. По сути Agile — это всего лишь небольшая подборка методов и инструментов, помогающая небольшим командам программистов управлять небольшими проектами,… но приводящая к большим результатам, потому что каждый крупный проект состоит из огромного количества кирпичиков.


Рекомендуем почитать
Pro Git

Разработчику часто требуется много сторонних инструментов, чтобы создавать и поддерживать проект. Система Git — один из таких инструментов и используется для контроля промежуточных версий вашего приложения, позволяя вам исправлять ошибки, откатывать к старой версии, разрабатывать проект в команде и сливать его потом. В книге вы узнаете об основах работы с Git: установка, ключевые команды, gitHub и многое другое.В книге рассматриваются следующие темы:основы Git;ветвление в Git;Git на сервере;распределённый Git;GitHub;инструменты Git;настройка Git;Git и другие системы контроля версий.


Java 7

Рассмотрено все необходимое для разработки, компиляции, отладки и запуска приложений Java. Изложены практические приемы использования как традиционных, так и новейших конструкций объектно-ориентированного языка Java, графической библиотеки классов Swing, расширенной библиотеки Java 2D, работа со звуком, печать, способы русификации программ. Приведено полное описание нововведений Java SE 7: двоичная запись чисел, строковые варианты разветвлений, "ромбовидный оператор", NIO2, новые средства многопоточности и др.


MFC и OpenGL

В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.


Симуляция частичной специализации

В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.


Обработка событий в С++

В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.


Питон — модули, пакеты, классы, экземпляры

Python - объектно-ориентированный язык сверхвысокого уровня. Python, в отличии от Java, не требует исключительно объектной ориентированности, но классы в Python так просто изучить и так удобно использовать, что даже новые и неискушенные пользователи быстро переходят на ОО-подход.