Совершенный код. Совершенный код. Мастер-класс. Стив Макконнелл. Руководство по стилю программирования и конструированию по
Скачать 5.88 Mb.
|
ГЛАВА 35 Где искать дополнительную информацию 837 И, наконец, превосходный обзор проблем разработки ПО сделан в «Software Crea# tivity» (Glass, 1995). Эту книгу следовало бы считать прорывом в отношении к программированию как к творчеству. Такую же роль сыграла книга «PeopleWare» в вопросах коллективной разработки. Гласс сопоставляет творчество и дисцип# лину, теорию и практику, эвристику и методологию, процесс и результат, а также многие другие противоположные и в то же время взаимосвязанные понятия из области ПО. Спустя годы после обсуждения этой книги со своими коллегами я понял, в чем ее противоречие. Дело в том, что Гласс — редактор, а не автор очер# ков, вошедших в книгу, и поэтому у некоторых читателей возникает ощущение незавершенности. Тем не менее я до сих пор требую от каждого разработчика моей компании прочесть ее. Книга не переиздается, ее трудно найти, но затраченные на поиск усилия не окажутся напрасными. Общие вопросы разработки ПО Каждый практикующий программист должен иметь руководства высокого уров# ня по вопросам разработки ПО. Такие книги скорее очерчивают общую картину методологии, а не отдельные, характерные детали этой картины. Они знакомят с эффективными методиками разработки и предлагают сжатые описания специаль# ных технических приемов. Сокращенные описания недостаточно подробны, чтобы обучаться этим приемам, но, с другой стороны, для этого понадобилась бы кни# га, содержащая несколько тысяч страниц. И все же полученная информация по# зволяет выбрать необходимые для дальнейшей работы технологии и научиться применять их в комплексе. Роджер С. Прэссман в книге «Software Engineering: A Practitioner’s Approach», 6#е изд. (Pressman, 2004) дает стройное толкование таким терминам, как требования, проектирование, качественная проверка данных и управление. На 900 страницах этой книги уделено мало внимания практике программирования, но это не явля# ется существенным недостатком, особенно если у вас есть книга по конструиро# ванию, подобная той, что вы читаете сейчас. Шестое издание книги Иэна Соммервилла «Software Engineering» (Sommerville, 2000) сопоставимо с книгой Прэссмана и также содержит прекрасный обзор процесса разработки ПО. Другие аннотированные библиографии Хорошие библиографии по вычислительной технике — ред# кость. Далее рассматриваются те, что заслуживают внимания. «ACM Computing Reviews» — специализированное издание Ассоциации по вычислительной технике (ACM), представляющие собой обзор книг, охватывающих все аспекты знаний о компьютерах и программировании. Разветв# ленная схема размещении материалов в этом издании позволяет без труда найти книги по интересующим темам. Для получения информации об этой публикации и о членстве в ACM пишите по адресу: ACM, PO Box 12114, Church Street Station, New York, NY 10257. Информация компании Construx Software о технологиях обу# чения и повышения профессионального уровня содержит# http://cc2e.com/3502 http://cc2e.com/3509 838 ЧАСТЬ VII Мастерство программирования ся на сайте www.construx.com/ladder/. Здесь представлены списки источников, ре# комендованные для разработчиков, тестировщиков и руководителей в области ПО. 35.3. Периодические издания Журналы для начинающих программистов Журналы этого уровня часто продаются в газетных киосках. «Software Development», www.sdmagazine.com. Этот журнал освещает общие вопросы программирования, а не пробле# мы использования конкретных сред. Статьи довольно хо# рошо написаны; журнал содержит обзор новых продуктов. «Dr. Dobb’s Journal», www.ddj.com. Этот журнал ориентиро# ван на активных программистов. Его статьи тяготеют к де# тализации материала и содержат огромное количество кода. Если не удается найти эти журналы в киоске, издатели могут прислать вам поощ# рительный экземпляр, а большинство статей доступно в сети. Журналы для продвинутых программистов Как правило, в киосках этих изданий не найти. Вам нужно обратиться в крупную университетскую библиотеку или подписаться на них. «IEEE Software», www.computer.org/software/. В этом журнале, выходящем раз в два месяца, обсуждаются вопросы кон# струирования и проектирования ПО, выработки требований и управления, а также другие темы передовых технологий создания ПО. Его цель — «создать организацию, объединяющую ведущих специалистов в области ПО». В 1993 году я писал, что это «самый полезный журнал, на который может подпи# саться программист». Позже мне довелось занимать в нем пост главного редакто# ра, и я по#прежнему убежден, что это лучшее периодическое издание, предназна# ченное для серьезной практической деятельности. «IEEE Computer», www.computer.org/computer/. Этот ежемесяч# ный журнал является лидером публикаций компьютерной ассоциации IEEE (Института инженеров по электротехни# ке и электронике). Он охватывает широкий круг вопросов по вычислительной технике, использует жесткие критерии при отборе статей, обеспечивая высокое качество публикуемых материалов. Так как интересы издания довольно обшир# ны, в нем вы, пожалуй, найдете меньше полезных статей, чем в «IEEE Software». «Communications of the ACM», www.acm.org/cacm/. Это одно из старейших и наиболее уважаемых компьютерных изда# ний имеет огромные полномочия, позволяющие расширять границы такого предмета, как компьютерология, который сегодня включает в себя значительно больше терминов и определений, чем несколько лет назад. Как и в случае с «IEEE Computer», диапазон вопросов издания довольно широк, и темы многих статей, возможно, не отвечают вашим интересам. Журнал отличает дух академизма, что имеет как хорошую, так и плохую стороны. К плохой следует http://cc2e.com/3516 http://cc2e.com/3523 http://cc2e.com/3530 http://cc2e.com/3537 http://cc2e.com/3544 ГЛАВА 35 Где искать дополнительную информацию 839 отнести путаный, сложный для восприятия стиль некоторых авторов. Хорошая проявляется в том, что он содержит наиболее передовую информацию, которая не попадет с годами в низкопробные издания. Специализированные публикации Часть периодики более глубоко рассматривает специальные темы. Профессиональные издания Компьютерная ассоциация IEEE выпускает специализирован# ные журналы по следующим вопросам: проектирование ПО, безопасность и защита информации, компьютерная графи# ка и анимация, Интернет#технологии, мультимедиа, интеллектуальные системы, история вычислительной техники и др. Подробнее см. по адресу www.computer.org. ACM также публикует специальные выпуски по таким раз# делам, как искусственный интеллект, взаимодействие чело# века и компьютера, базы данных, встроенные системы, гра# фика, языки программирования, ПО для математических задач, построение сетей, проектирование ПО и др. Подробнее см. по адресу www.acm.org. Популярные коммерческие издания Темы следующих журналов следуют из названий. «The C/C++ Users Journal», www.cuj.com. «Java Developer’s Journal», www.sys%con.com/java/. «Embedded Systems Programming», www.embedded.com. «Linux Journal», www.linuxjournal.com. «Unix Review», www.unixreview.com. «Windows Developer’s Network», www.wd%mag.com. 35.4. Список литературы для разработчика ПО В этом разделе предлагается план чтения, позволяющий разработчику ПО стать полноценным специалистом в моей компании, Construx Software. Этот план является предмет# ным базовым курсом и рассчитан на тех, кто уже работает в области ПО и желает уделить особое внимание теме разработки. Наше методическое пособие дает воз# можность перестраивать базовую программу с учетом индивидуальных интере# сов. В рамках программы Construx предусматривается также повышение квали# фикации и обмен опытом работы по конкретным вопросам. Вводный курс Чтобы пройти «начальный» уровень по методике Construx, необходимо прочесть следующие книги. Adams, James L. Conceptual Blockbusting: A Guide to Better Ideas, 4th ed. Cambridge, MA: Perseus Publishing, 2001. http://cc2e.com/3551 http://cc2e.com/3558 http://cc2e.com/3565 http://cc2e.com/3507 840 ЧАСТЬ VII Мастерство программирования Bentley, Jon. Programming Pearls, 2d ed. Reading, MA: Addison#Wesley, 2000. Glass, Robert L. Facts and Fallacies of Software Engineering. Boston, MA: Addison#Wesley, 2003. McConnell, Steve. Software Project Survival Guide. Redmond, WA: Microsoft Press, 1998. McConnell, Steve. Code Complete, 2d ed. Redmond, WA: Microsoft Press, 2004. Курс практической подготовки Далее предлагаются дополнительные источники, которые должен освоить програм# мист, чтобы соответствовать «промежуточному» уровню в Construx. Berczuk, Stephen P. and Brad Appleton. Software Configuration Management Patterns: Effective Teamwork, Practical Integration. Boston, MA: Addison#Wesley, 2003. Fowler, Martin. UML Distilled: A Brief Guide to the Standard Object Modeling Language, 3d ed. Boston, MA: Addison#Wesley, 2003. Glass, Robert L. Software Creativity. Reading, MA: Addison#Wesley, 1995. Kaner, Cem, Jack Falk, Hung Q. Nguyen Testing Computer Software, 2d ed. New York, NY: John Wiley & Sons, 1999. Larman, Craig. Applying UML and Patterns: An Introduction to Object%Oriented Analysis and Design and the Unified Process, 2d ed. Englewood Cliffs, NJ: Prentice Hall, 2001. McConnell, Steve. Rapid Development. Redmond, WA: Microsoft Press, 1996. Wiegers, Karl. Software Requirements, 2d ed. Redmond, WA: Microsoft Press, 2003. Manager’s Handbook for Software Development, NASA Goddard Space Flight Center. Получить информацию можно по адре# су sel.gsfc.nasa.gov/website/documents/online%doc.htm. Курс профессиональной подготовки Изучив следующую литературу, разработчик ПО добьется полного профессиональ# ного соответствия в Construx («уровень лидера»). К каждому разработчику предъяв# ляются отдельные дополнительные требования, здесь перечислены лишь общие для всех требования. Bass, Len, Paul Clements, and Rick Kazman. Software Architecture in Practice, 2d ed. Boston, MA: Addison#Wesley, 2003. Fowler, Martin. Refactoring: Improving the Design of Existing Code. Reading, MA: Add# ison#Wesley, 1999. Gamma, Erich, et al. Design Patterns. Reading, MA: Addison#Wesley, 1995. Gilb, Tom. Principles of Software Engineering Management. Wokingham, England: Add# ison#Wesley, 1988. Maguire, Steve. Writing Solid Code. Redmond, WA: Microsoft Press, 1993. Meyer, Bertrand. Object%Oriented Software Construction, 2d ed. New York, NY: Prentice Hall PTR, 1997. Software Measurement Guidebook, NASA Goddard Space Flight Center. Информация доступна по адресу: sel.gsfc.nasa.gov/ website/documents/online%doc.htm. http://cc2e.com/3514 http://cc2e.com/3521 ГЛАВА 35 Где искать дополнительную информацию 841 Наш сайт www.construx.com/professionaldev/ подробно зна# комит с программой повышения профессионального уровня и содержит обновленный список литературы. 35.5. Профессиональные ассоциации Общение с другими программистами, работающими в той же области, что и вы, — один из лучших способов узнать о программировании больше. Региональные группы пользо# вателей конкретных аппаратных средств и языков программирования — один из видов сообществ. К другим относятся национальные и международные организа# ции. Компьютерная ассоциация IEEE — наиболее профессионально#ориентиро# ванная организация, выпускающая журналы «IEEE Computer» и «IEEE Software». Ин# формацию о членстве в IEEE смотрите на сайте www.computer.org. ACM была первой профессиональной организацией. Она издает журнал «Communications of the ACM», многие другие специализированные журналы и в сравнении с IEEE боль# ше внимания уделяет теории. Информацию о членстве в ACM см. на сайте www.acm.org. http://cc2e.com/3528 http://cc2e.com/3535 http://cc2e.com/3542 842 Библиография Библиография «A C Coding Standard.» 1991. Unix Review 9, no. 9 (September): 42–43. Abdel#Hamid, Tarek K. 1989. «The Dynamics of Software Project Staffing: A System Dynamics Based Simulation Approach.» IEEE Transactions on Software Engineering SE#15, no. 2 (February): 109–19. Abran, Alain, et al. 2001. Swebok: Guide to the Software Engineering Body of Knowledge: Trial Version 1.00#May 2001. Los Alamitos, CA: IEEE Computer Society Press. Abrash, Michael. 1992. «Flooring It: The Optimization Challenge.» PC Techniques 2, no. 6 (February/ March): 82–88. Ackerman, A. Frank, Lynne S. Buchwald, and Frank H. Lewski. 1989. «Software Inspections: An Effective Verification Process.» IEEE Software, May/June 1989, 31–36. Adams, James L. 2001. Conceptual Blockbusting: A Guide to Better Ideas, 4th ed. Cambridge, MA: Perseus Publishing. Aho, Alfred V., Brian W. Kernighan, and Peter J. Weinberg. 1977. The AWK Programming Language. Reading, MA: Addison#Wesley. Aho, Alfred V., John E. Hopcroft, and Jeffrey D. Ullman. 1983. Data Structures and Algorithms. Reading, MA: Addison#Wesley. Albrecht, Allan J. 1979. «Measuring Application Development Productivity.» Proceedings of the Joint SHARE/GUIDE/IBM Application Development Symposium, October 1979: 83–92. Ambler, Scott. 2003. Agile Database Techniques. New York, NY: John Wiley & Sons. Anand, N. 1988. «Clarify Function!» ACM Sigplan Notices 23, no. 6 (June): 69–79. Aristotle. The Ethics of Aristotle: The Nicomachean Ethics. Trans. by J.A.K. Thomson. Rev. by Hugh Tredennick. Harmondsworth, Middlesex, England: Penguin, 1976. Armenise, Pasquale. 1989. «A Structured Approach to Program Optimization.» IEEE Transactions on Software Engineering SE#15, no. 2 (February): 101–8. Arnold, Ken, James Gosling, and David Holmes. 2000. The Java Programming Language, 3d ed. Boston, MA: Addison#Wesley. Arthur, Lowell J. 1988. Software Evolution: The Software Maintenance Challenge. New York, NY: John Wiley & Sons. Augustine, N. R. 1979. «Augustine’s Laws and Major System Development Programs.» Defense Systems Management Review: 50–76. Babich, W. 1986. Software Configuration Management. Reading, MA: Addison#Wesley. Bachman, Charles W. 1973. «The Programmer as Navigator.» Turing Award Lecture. Communications of the ACM 16, no. 11 (November): 653. Baecker, Ronald M., and Aaron Marcus. 1990. Human Factors and Typography for More Readable Programs. Reading, MA: Addison#Wesley. Bairdain, E. F. 1964. «Research Studies of Programmers and Programming.» Unpublished studies reported in Boehm 1981. Библиография 843 Baker, F. Terry, and Harlan D. Mills. 1973. «Chief Programmer Teams.» Datamation 19, no. 12 (December): 58–61. Barbour, Ian G. 1966. Issues in Science and Religion. New York, NY: Harper & Row. Barbour, Ian G. 1974. Myths, Models, and Paradigms: A Comparative Study in Science and Religion. New York, NY: Harper & Row. Barwell, Fred, et al. 2002. Professional VB.NET, 2d ed. Birmingham, UK: Wrox. Basili, V. R., and B. T. Perricone. 1984. «Software Errors and Complexity: An Empirical Investigation.» Communications of the ACM 27, no. 1 (January): 42–52. Basili, Victor R., and Albert J. Turner. 1975. «Iterative Enhancement: A Practical Technique for Software Development.» IEEE Transactions on Software Engineering SE#1, no. 4 (December): 390–96. Basili, Victor R., and David M. Weiss. 1984. «A Methodology for Collecting Valid Software Engi# neering Data.» IEEE Transactions on Software Engineering SE#10, no. 6 (November): 728–38. Basili, Victor R., and Richard W. Selby. 1987. «Comparing the Effectiveness of Software Testing Strategies.» IEEE Transactions on Software Engineering SE#13, no. 12 (December): 1278–96. Basili, Victor R., et al. 2002. «Lessons learned from 25 years of process improvement: The Rise and Fall of the NASA Software Engineering Laboratory,» Proceedings of the 24th International Conference on Software Engineering, Orlando, FL. Basili, Victor R., Richard W. Selby, and David H. Hutchens. 1986. «Experimentation in Software Engineering.» IEEE Transactions on Software Engineering SE#12, no. 7 (July): 733–43. Basili, Victor, L. Briand, and W.L. Melo. 1996. «A Validation of Object#Oriented Design Metrics as Quality Indicators,» IEEE Transactions on Software Engineering, October 1996, 751–761. Bass, Len, Paul Clements, and Rick Kazman. 2003. Software Architecture in Practice, 2d ed. Boston, MA: Addison#Wesley. Bastani, Farokh, and Sitharama Iyengar. 1987. «The Effect of Data Structures on the Logical Complexity of Programs.» Communications of the ACM 30, no. 3 (March): 250–59. Bays, Michael. 1999. Software Release Methodology. Englewood Cliffs, NJ: Prentice Hall. Beck, Kent. 2000. Extreme Programming Explained: Embrace Change. Reading, MA: Addison#Wesley. Beck, Kent. 2003. Test%Driven Development: By Example. Boston, MA: Addison#Wesley. Beck, Kent. 1991. «Think Like An Object.» Unix Review 9, no. 10 (October): 39–43. Beck, Leland L., and Thomas E. Perkins. 1983. «A Survey of Software Engineering Practice: Tools, Methods, and Results.» IEEE Transactions on Software Engineering SE#9, no. 5 (September): 541–61. Beizer, Boris. 1990. Software Testing Techniques, 2d ed. New York, NY: Van Nostrand Reinhold. Bentley, Jon, and Donald Knuth. 1986. «Literate Programming.» Communications of the ACM 29, no. 5 (May): 364–69. Bentley, Jon, Donald Knuth, and Doug McIlroy. 1986. «A Literate Program.» Communications of the ACM 29, no. 5 (May): 471–83. Bentley, Jon. 1982. Writing Efficient Programs. Englewood Cliffs, NJ: Prentice Hall. Bentley, Jon. 1988. More Programming Pearls: Confessions of a Coder. Reading, MA: Addison#Wesley. Bentley, Jon. 1991. «Software Exploratorium: Writing Efficient C Programs.» Unix Review 9, no. 8 (August): 62–73. Bentley, Jon. 2000. Programming Pearls, 2d ed. Reading, MA: Addison#Wesley. Berczuk, Stephen P. and Brad Appleton. 2003. Software Configuration Management Patterns: Effective Teamwork, Practical Integration. Boston, MA: Addison#Wesley. Berry, R. E., and B. A. E. Meekings. 1985. «A Style Analysis of C Programs.» Communications of the ACM 28, no. 1 (January): 80–88. |