A Taxonomic Analysis of Typographic Programming Style
Total Page:16
File Type:pdf, Size:1020Kb
AN ABSTRACT OF THE THESIS OF Paul W. Oman. Jr, for the degree of Doctor of Philosophy in ComputerScience presented on December 12. 1988. Title: A Taxonomic Analysis of Typographic Programming Style Redacted for Privacy Abstract approved: Curtis R. Cook Program comprehension is important in program testing, debugging, andmaintenance. Programming style impacts program understanding. However, there has not been any systematic identification of individual style factors and their contribution to program comprehension. In this thesis we present a programming style taxonomy composed of threeclasses: typographic (program layout and commenting), control structures, and information structures. Each class is further subdivided into macro (whole program orsystem) and micro (module or statement) subclasses. The taxonomy reveals many conflicting and unsubstantiated rules in collections of style rules from various publications on programming style. Further, it provides plausible explanations for some of the inconsistent results in programming style research. This thesis concentrates on the isolation of typographic style factors andanalysis of their affects on programmer comprehension. General principles of good macro- andmicro- typographic style are identified and the "book paradigm," a mechanism for implementing the principles, is presented. Four experiments, involving both student andprofessional programmers, demonstrate that the macro- andmicro-typographic principles incorporated into the book paradigm significantly improved program comprehensionand maintenance. These results have direct application to programming language designand programming tools such as pretty-printers, language directed editors, style analyzers,and source code control systems. A Taxonomic Analysis of Typographic ProgrammingStyle by Paul W. Oman, Jr. A THESIS submitted to Oregon State University in partial fulfillment of the requirements for the degree of Doctor of Philosophy Completed December 1988 Commencement June 1989 APPROVED: Redacted for Privacy Professor ofComputer Science in Charge ofMajor Redact 6d for Privacy Headof Department of Computer Science Redacted for Privacy Dean of GraduVchool Q Date thesis is presented December 12. 1988 Typed by Paul Oman ACKNOWLEDGEMENTS I would like to express my appreciation to each member of my committee for their time and patience. To Curt Cook, my major advisor, thanks for sticking with me when I got off track. Your insistence on excellence is responsible for the quality and thoroughness of this thesis. To Ted Lewis, Editor-in-Chief ofSoftware,your criticism of my proposal is responsible for the (re)organization of this thesis. Also, thank you for giving me the opportunity to get involved withSoftware.To Toshi Minoura, your probing questions are responsible for most of Chapter 3, which is the glue that holds this thesis together, thank you. To Walter Loveland, my graduate representative, thank you for your positive support and assistance. And last, to Donna Cruse, who has guided me without knowing it since 1970, thank you for giving me a strong foundation in science. Your influence can be seen throughout this thesis. I would also like to express my appreciation to the people who have aided and supported this research. From the University of Idaho I have received much support from William Saul, Dean of the College of Engineering, Richard Jacobsen, Associate Dean, and John Dickinson, Chair of the Computer Science Department. At O.S.U., thanks are due to Lyle Calvin, Dean of the Graduate School, and Walter Rudd, Chair of the Computer Science Department. Thank you all. Finally, I would also like to express my thanks to my family for their patience and support. You have made it a joy to "come home." My success is founded in your love and encouragement. Thank you. Table of Contents page 1. Introduction 1 1.1. What is "programming style" ? 1 1.2. The problems in programming style research. 2 1.3.Rationale for a taxonomic analysis of style. 3 1.4.Scope of this thesis. 4 1.5.Organization of this thesis. 5 2. An Overview of Programming Style Research 7 2.1.Studies on programming style. 7 2.2.Style guidelines. 7 2.3. Automated style analyzers. 9 2.4. Code formatters. 11 2.5. Programmer comprehension studies. 12 2.6.Conclusions. 14 3. A Programming Style Taxonomy 15 3.1.Building a style taxonomy. 15 3.2.Verifying the taxonomy. 19 3.3. A taxonomic look at programming style rules. 19 3.3.1. Widely held but unsubstantiated rules. 20 3.3.2. Incompatible style rules. 23 3.3.3. Tacit misconceptions on programming style. 25 3.4.Conclusions. 25 4. Analyzing Typographic Style 27 4.1. The benefits of taxonomic analysis. 27 4.2.Indices of style. 27 4.2.1. An early attempt to "capture" style. 28 4.2.2. Typographic style analysis. 29 4.3. The affects of style on programmer comprehension. 34 4.3.1. First nested IF experiment. 34 4.3.2. Second nested IF experiment. 38 4.4. Conclusions. 41 5. Towards Better TypographicStyle 42 5.1. The problems with today'stypographic style. 42 5.2. An overview of programmercomprehension theory. 42 5.3. An overview of program maintenanceactivity. 44 5.4. A generic comprehension andmaintenance model. 45 46 5.5.Principles of typographic style. 6. The Book Paradigm forTypographic Style 49 49 6.1.Introduction. 6.2. The book paradigm. 49 6.3. Macro-typographic book paradigmformatting. 51 6.4. Micro-typographic book paradigmformatting. 52 6.5. An example "book" program listing. 53 6.6.Conclusions. 58 7. Testing the Book ProgramListing 59 7.1. Introduction. 59 7.2. Testing macro-typographic principles. 59 7.2.1. Experiment 1: A macro-typographiccomparison. 59 7.2.2. Conclusions from Experiment 1. 64 7.3.Testing micro-typographic principles. 64 7.3.1. Experiment 2: Micro-typographic Pascalformatting. 64 7.3.2. Experiment 3: Micro-typographic Cformatting. 68 7.3.3. Conclusions from Experiments 2 &3. 72 7.4. Testing the complete book formatlisting. 72 7.4.1. Experiment 4: Empirical studieswith "real" programmers. 73 7.4.2. Studying with "Think aloud" protocols. 75 7.4.3. The oral comprehension test. 78 7.4.4. Creating a call graph. 81 7.4.5. Responses to open-ended questions. 84 7.4.6. Conclusions from Experiment 4. 85 7.5. Conclusions from Experiments 1 through 4. 85 8. Conclusions 86 8.1. Review of results. 86 8.2. Future work. 87 Bibliography 90 Appendices A. Composite Listing of Style Rules 98 B. Nested IF Experiments Sample Test Packet 105 C. Experiment 1: Macro-typographic Experiment Instructions 107 D. Experiment 2: Pascal Micro-typographic Experiment Sample Test Packet 108 E. Experiment 3: C Micro-typographic Experiment Sample Test Packet 112 F. Experiment 4: Empirical Studies Experiment Sample Test Packet 116 List of Figures Figures Page 3.1. A Style Taxonomy 16 3.2. Style Taxonomy Definition 17 3.3. Widely Held Style Guidelines 22 3.4. Incompatible Style Rules 24 3.5. Tacit Misconceptions About Programming Style 26 4.1. Cluster Analysis of Textbook Authors 32 4.2. Cluster Analysis of Industrial Code 33 4.3. IF Statements for First Nested IF Experiment 35 4.4. Scores and Times from First Nested IF Experiment 37 4.5. IF Statements for Second Nested IF Experiment 38 4.6. Scores and Times from Second Nested IF Experiment 40 6.1. An Example Book Format Listing 54 7.1. Experiment 1: Skip_Blanks Procedure 60 7.2. Experiment 1: Editor Table of Contents 61 7.3. Experiment 2: Pascal Code Excerpts 65 7.4. Scores and Times from Experiment 2 67 7.5. Experiment 3: C Code Excerpts 69 7.6. Scores and Times from Experiment 3 71 7.7. Scores and Times from Experiment 4 Comprehension Test 80 7.8. Scores and Times from Experiment 4 Call Graph Exercise 83 List of Tables Table Page 4.1. Typographic Style Vectors for TextbookData 31 4.2. Results from First Nested IF Experiment 37 4.3. Results from Second Nested IFExperiment 40 7.1. Experiment 1: Ability to WriteSkip_Blanks 62 7.2. Experiment 1: Identifying Skip_BlanksCalls 63 7.3. Experiment 2: Results from PascalCode Comparison 67 7.4. Experiment 3: Results from C CodeComparison 71 7.5. Experiment 4: Professional Programmers'Experience 75 7.6. Experiment 4: Results fromComprehension Test 80 7.7. Experiment 4: Results from CallGraph Exercise 83 A Taxonomic Analysis of TypographicProgramming Style Chapter 1 Introduction 1.1. What is "programming style"? Programming style is an intuitive and elusive concept.It is highly individualistic and easily recognized, yet difficult to define or quantify.The goal of programming style is to make a program clear, easy to understand andthereby easy to work with. The following illustrate the diversity in attempts to defineprogramming style. "The 'elegance' or 'style' of a program is sometimesconsidered a nebulous attribute that is somehow unquantifiable; a programmerhas an instinctive feel for a 'good' or 'bad' program ..." [Berr85,p.80] Programming style ... "refers to the entire set ofconventions, guidelines, aids and rules that make computer programs easier forpeople to read, work with and understand." -- [Schn81,p.52] "Programming style brings to mind the ways that acreative programmer brings clarity, maintainability, testability, reliability,and efficiency to the coding of a module." -- [Arth85,p.173] These definitions reflect different views ofprogramming style and, although diverse, they are not at odds with dictionary definitionsof style: "1. a way of speaking or writing, one characteristicof an individual, period, school, or nation; 2. the custom or plan followedin spelling, capitalization, punctuation, and typographic arrangement and display;3. the manner or method of acting or performing as sanctioned by somestandard; 4. a distinctive or characteristic manner." -- [Merr74] Programming style shares many similarities withliterary writing style. For example, in his book on technical writing Chael Markellists word choice, sentence construction, and paragraph structure as elements ofliterary style [Mark84,p.89]. However, effective writing is more than observing establishedconventions for spelling, grammar, or sentence structure.