[go: up one dir, main page]
More Web Proxy on the site http://driver.im/ skip to main content
Skip header Section
The practice of programmingFebruary 1999
Publisher:
  • Addison-Wesley Longman Publishing Co., Inc.
  • 75 Arlington Street, Suite 300 Boston, MA
  • United States
ISBN:978-0-201-61586-9
Published:02 February 1999
Pages:
267
Skip Bibliometrics Section
Reflects downloads up to 11 Dec 2024Bibliometrics
Abstract

No abstract available.

Cited By

  1. Foalem P, Khomh F and Li H (2024). Studying logging practice in machine learning-based applications, Information and Software Technology, 170:C, Online publication date: 1-Jun-2024.
  2. ACM
    Kelly T (2024). Programmer Job Interviews: The Hidden Agenda, Queue, 21:6, (16-26), Online publication date: 31-Dec-2024.
  3. de Almeida V and Geremia-Nievinski F (2023). Computation of specular reflections on a sphere, Computers & Geosciences, 176:C, Online publication date: 1-Jul-2023.
  4. ACM
    Kelly T and Pan Y (2023). Catch-23: The New C Standard Sets the World on Fire, Queue, 21:1, (12-30), Online publication date: 28-Feb-2023.
  5. Zhang H, Tang Y, Lamothe M, Li H and Shang W (2022). Studying logging practice in test code, Empirical Software Engineering, 27:4, Online publication date: 1-Jul-2022.
  6. Zhou C, Wang C, Sun Y, Yao W and Lin H (2022). Cluster output synchronization for memristive neural networks, Information Sciences: an International Journal, 589:C, (459-477), Online publication date: 1-Apr-2022.
  7. Aman H, Amasaki S, Yokogawa T and Kawahara M (2019). Empirical study of abnormality in local variables and its application to fault‐prone Java method analysis†, Journal of Software: Evolution and Process, 32:4, Online publication date: 1-Apr-2020.
  8. Yao K, de Pádua G, Shang W, Sporea C, Toma A and Sajedi S (2019). Log4Perf: suggesting and updating logging locations for web-based systems’ performance monitoring, Empirical Software Engineering, 25:1, (488-531), Online publication date: 1-Jan-2020.
  9. Medeiros F, Lima G, Amaral G, Apel S, Kästner C, Ribeiro M and Gheyi R (2019). An investigation of misunderstanding code patterns in C open-source software projects, Empirical Software Engineering, 24:4, (1693-1726), Online publication date: 1-Aug-2019.
  10. ACM
    Gopstein D, Iannacone J, Yan Y, DeLong L, Zhuang Y, Yeh M and Cappos J Understanding misunderstandings in source code Proceedings of the 2017 11th Joint Meeting on Foundations of Software Engineering, (129-139)
  11. Beniamini G, Gingichashvili S, Orbach A and Feitelson D Meaningful identifier names Proceedings of the 25th International Conference on Program Comprehension, (45-54)
  12. Dahse J and Holz T Static detection of second-order vulnerabilities in web applications Proceedings of the 23rd USENIX conference on Security Symposium, (989-1003)
  13. ACM
    Olukotun K, Hammond L and Willey M Improving the performance of speculatively parallel applications on the Hydra CMP ACM International Conference on Supercomputing 25th Anniversary Volume, (277-286)
  14. Yuan D, Park S and Zhou Y Characterizing logging practices in open-source software Proceedings of the 34th International Conference on Software Engineering, (102-112)
  15. ACM
    Yuan D, Zheng J, Park S, Zhou Y and Savage S (2012). Improving Software Diagnosability via Log Enhancement, ACM Transactions on Computer Systems, 30:1, (1-28), Online publication date: 1-Feb-2012.
  16. ACM
    Pappas V, Raykova M, Vo B, Bellovin S and Malkin T Private search in the real world Proceedings of the 27th Annual Computer Security Applications Conference, (83-92)
  17. ACM
    Meyer C, Heeren C, Shaffer E and Tedesco J CoMoTo Proceedings of the 16th annual joint conference on Innovation and technology in computer science education, (143-147)
  18. ACM
    Yuan D, Zheng J, Park S, Zhou Y and Savage S (2011). Improving software diagnosability via log enhancement, ACM SIGPLAN Notices, 46:3, (3-14), Online publication date: 17-Mar-2011.
  19. ACM
    Yuan D, Zheng J, Park S, Zhou Y and Savage S (2011). Improving software diagnosability via log enhancement, ACM SIGARCH Computer Architecture News, 39:1, (3-14), Online publication date: 17-Mar-2011.
  20. ACM
    Yuan D, Zheng J, Park S, Zhou Y and Savage S Improving software diagnosability via log enhancement Proceedings of the sixteenth international conference on Architectural support for programming languages and operating systems, (3-14)
  21. ACM
    Tremblay G, Malenfant B, Salah A and Zentilli P (2007). Introducing students to professional software construction, ACM SIGCSE Bulletin, 39:3, (176-180), Online publication date: 25-Jun-2007.
  22. ACM
    Tremblay G, Malenfant B, Salah A and Zentilli P Introducing students to professional software construction Proceedings of the 12th annual SIGCSE conference on Innovation and technology in computer science education, (176-180)
  23. ACM
    Srivastava S, Hicks M and Foster J Modular information hiding and type-safe linking for C Proceedings of the 2007 ACM SIGPLAN international workshop on Types in languages design and implementation, (3-14)
  24. ACM
    Shirley P Data structures for graphics ACM SIGGRAPH 2005 Courses, (3-es)
  25. ACM
    Ying A, Wright J and Abrams S (2005). Source code that talks, ACM SIGSOFT Software Engineering Notes, 30:4, (1-5), Online publication date: 1-Jul-2005.
  26. ACM
    Ying A, Wright J and Abrams S Source code that talks Proceedings of the 2005 international workshop on Mining software repositories, (1-5)
  27. Dolado J, Harman M, Otero M and Hu L (2003). An Empirical Investigation of the Influence of a Type of Side Effects on Program Comprehension, IEEE Transactions on Software Engineering, 29:7, (665-670), Online publication date: 1-Jul-2003.
  28. Reilly E Debugging Encyclopedia of Computer Science, (524-527)
  29. ACM
    Sun F, Ravi S, Raghunathan A and Jha N Synthesis of custom processors based on extensible platforms Proceedings of the 2002 IEEE/ACM international conference on Computer-aided design, (641-648)
  30. ACM
    Fekete A and Kummerfeld B (2002). Design of a major in software development, ACM SIGCSE Bulletin, 34:1, (73-77), Online publication date: 1-Mar-2002.
  31. ACM
    Fekete A and Kummerfeld B Design of a major in software development Proceedings of the 33rd SIGCSE technical symposium on Computer science education, (73-77)
  32. ACM
    Markus A (2001). Generic programming in Fortran 90, ACM SIGPLAN Fortran Forum, 20:3, (20-23), Online publication date: 1-Dec-2001.
  33. ACM
    Smith M (2000). Overcoming the challenges to feedback-directed optimization (Keynote Talk), ACM SIGPLAN Notices, 35:7, (1-11), Online publication date: 1-Jul-2000.
  34. ACM
    Levitin A Design and analysis of algorithms reconsidered Proceedings of the thirty-first SIGCSE technical symposium on Computer science education, (16-20)
  35. ACM
    Levitin A (2000). Design and analysis of algorithms reconsidered, ACM SIGCSE Bulletin, 32:1, (16-20), Online publication date: 1-Mar-2000.
  36. ACM
    Smith M Overcoming the challenges to feedback-directed optimization (Keynote Talk) Proceedings of the ACM SIGPLAN workshop on Dynamic and adaptive compilation and optimization, (1-11)
  37. ACM
    Olukotun K, Hammond L and Willey M Improving the performance of speculatively parallel applications on the Hydra CMP Proceedings of the 13th international conference on Supercomputing, (21-30)
Contributors
  • Princeton University
  • Google LLC

Reviews

Jacques Jean Arsac

The purpose of this book is to help programmers improve their efficiency; it is not a programming course. The first chapter is dedicated to programming style. Programs are written to be read by humans, not by machines. Very often, programs are difficult to read because the algorithms they express are not obvious. You do not have to add poor programming style to this intrinsic difficulty. Kernighan and Pike first consider the proper use of names: short names for local variables to keep the program reasonably short, and significant names for global variables. A coherent system of naming must be maintained throughout the program. Expressions must not be too long; parentheses help make the precedence of operators obvious. Side effects are dangerous. Embedded conditional statements may rapidly make the program unreadable, and must be written carefully and emphasized by indentation. Comments must be used only when the meaning of the code is not obvious, and must be kept consistent with the code when it is changed. Some standard algorithms for searching and sorting are described, with indications of their efficiency. Classical data structures are presented: growing arrays, lists, trees, and hash tables. The design of an easy-to-read program that generates random English texts is given as an example of the importance of data structures. If data structures are properly chosen, the program is easily written. The result is not a toy example. The authors show the influence of a programming language by examining the implementation in C, Java, C++, awk, and Perl. Execution time is given for those languages, with impressive results. The next chapter discusses the design of functions, which can be used in a variety of programs. The authors show how to specify the data and the results given by such functions. Some good programming rules are proposed, including ways to handle functions. Debugging is a difficult task for which no general schemes exist. This may be why a chapter deals with localizing and fixing bugs. Although there are no general techniques for debugging, valuable debugging techniques are given. Testing is one way to make bugs appear. Program performance remains important, even with very powerful and cheap computers. Strategies for program optimization are presented and applied in examples. Portability is an important issue. Finally, a chapter on notation shows how to implement a special-purpose language for problems that are too difficult to solve with classical general-purpose languages. As a programmer, I greatly appreciated this book. Every programmer should read it carefully and try to remember all the advice collected at the end of the book. When you write a program, you are not performing a given task or solving a given problem, you are trying to have it performed or solved by the computer. Everyone can sort a set of cards: it is of no use to have it sorted by a computer. Programming requires creativity to invent an algorithm, exactness to be sure you have invented a good algorithm, and clarity to make the program readable. Very often, simplicity does not result from the first attempt: you start with complex ideas, then look for simpler approaches. The book helps you write clear programs. The authors advise against creating algorithms when they exist in standard libraries. Using properly chosen data structures may avoid the creation of new algorithms. I thought that by now every programmer was aware of programming proverbs such as those stated by Henry Ledgard in the 1970s. It now appears that we have been poor teachers; programming proverbs are not yet current programming rules. This is why this book is so valuable. As quoted by the authors, Edsger Dijkstra said that testing a program may show that it contains bugs, but never that it is valid. A program should be made valid by construction, and assertions are a good way to enforce program validity. The authors use quicksort as an example. A more systematic use of assertions could have reinforced the idea that they are a powerful tool for avoiding errors of logic in algorithms. They do not prevent bugs: bugs generally appear in sections of programs that are so obvious that they have been written directly, without great care. Nevertheless, when a bug is detected, we look for it in the sections of programs that were difficult to design, but these sections have been carefully designed. Each programming teacher has her or his own set of programming rules or proverbs. They always include programming style. The authors quote Rene Descartes' Discours de la methode. They could also have quoted Nicolas Boileau, who wrote L'art poetique in the seventeenth century, and whose advice is well suited for programmers. Every teacher knows that advice: do not assume that everybody knows the rules; state them again. The advice given by Kernighan and Pike is helpful. R ead it and use it.

Access critical reviews of Computing literature here

Become a reviewer for Computing Reviews.

Please enable JavaScript to view thecomments powered by Disqus.

Recommendations