Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
skip to main content
Skip header Section
Predicate calculus and program semanticsJanuary 1990
Publisher:
  • Springer-Verlag
  • Berlin, Heidelberg
ISBN:978-0-387-96957-2
Published:03 January 1990
Pages:
220
Skip Bibliometrics Section
Bibliometrics
Abstract

No abstract available.

Cited By

  1. Cornejo C, Regis G, Aguirre N and Frias M (2023). A Study of the Electrum and DynAlloy Dynamic Behavior Notations, IEEE Transactions on Software Engineering, 49:11, (4946-4963), Online publication date: 1-Nov-2023.
  2. ACM
    Hirsch R and Šemrl J Demonic lattices and semilattices in relational semigroups with ordinary composition Proceedings of the 36th Annual ACM/IEEE Symposium on Logic in Computer Science, (1-10)
  3. ACM
    Warford J, Vega D and Staley S (2020). A Calculational Deductive System for Linear Temporal Logic, ACM Computing Surveys, 53:3, (1-38), Online publication date: 31-May-2021.
  4. ACM
    Liu Y, Li Y, Lin S and Zhao R Towards automated verification of smart contract fairness Proceedings of the 28th ACM Joint Meeting on European Software Engineering Conference and Symposium on the Foundations of Software Engineering, (666-677)
  5. Jacobs B (2019). The mathematics of changing one's mind, via Jeffrey's or via Pearl's update rule, Journal of Artificial Intelligence Research, 65:1, (783-806), Online publication date: 1-May-2019.
  6. Lin S, Sun J, Xiao H, Liu Y, Sanán D and Hansen H FiB: squeezing loop invariants by interpolation between Forward/Backward predicate transformers Proceedings of the 32nd IEEE/ACM International Conference on Automated Software Engineering, (793-803)
  7. ACM
    Regis G, Cornejo C, Gutiérrez Brida S, Politano M, Raverta F, Ponzio P, Aguirre N, Galeotti J and Frias M DynAlloy analyzer: a tool for the specification and analysis of alloy models with dynamic behaviour Proceedings of the 2017 11th Joint Meeting on Foundations of Software Engineering, (969-973)
  8. Chaudhari D and Damani O (2017). Assumption propagation through annotated programs, Formal Aspects of Computing, 29:3, (495-530), Online publication date: 1-May-2017.
  9. Khedri R, Jones O and Alabbad M Defense in Depth Formulation and Usage in Dynamic Access Control Proceedings of the 6th International Conference on Principles of Security and Trust - Volume 10204, (253-274)
  10. ACM
    Mastroeni I and Zanardini D (2017). Abstract Program Slicing, ACM Transactions on Computational Logic, 18:1, (1-58), Online publication date: 31-Jan-2017.
  11. You Z, Xue J and Zuo Z (2016). Unified formal derivation and automatic verification of three binary-tree traversal non-recursive algorithms, Cluster Computing, 19:4, (2145-2156), Online publication date: 1-Dec-2016.
  12. Hudon S, Hoang T and Ostroff J (2016). The Unit-B method, Software and Systems Modeling (SoSyM), 15:4, (1091-1116), Online publication date: 1-Oct-2016.
  13. (2016). A formalization of programs in first-order logic with a discrete linear order, Artificial Intelligence, 235:C, (1-25), Online publication date: 1-Jun-2016.
  14. Belo Lourenço C, Frade M and Sousa Pinto J Formalizing Single-Assignment Program Verification Proceedings of the 25th European Symposium on Programming Languages and Systems - Volume 9632, (41-67)
  15. Namjoshi K and Trefler R Parameterized Compositional Model Checking Proceedings of the 22nd International Conference on Tools and Algorithms for the Construction and Analysis of Systems - Volume 9636, (589-606)
  16. Namjoshi K and Trefler R Analysis of Dynamic Process Networks Proceedings of the 21st International Conference on Tools and Algorithms for the Construction and Analysis of Systems - Volume 9035, (164-178)
  17. Cousot P Abstracting Induction by Extrapolation and Interpolation Proceedings of the 16th International Conference on Verification, Model Checking, and Abstract Interpretation - Volume 8931, (19-42)
  18. Aichernig B, Jöbstl E and Tiran S (2015). Model-based mutation testing via symbolic refinement checking, Science of Computer Programming, 97:P4, (383-404), Online publication date: 1-Jan-2015.
  19. ACM
    Mendes A, Backhouse R and Ferreira J Structure Editing of Handwritten Mathematics Proceedings of the Ninth ACM International Conference on Interactive Tabletops and Surfaces, (139-148)
  20. Hawkins R, Miyazawa A, Cavalcanti A, Kelly T and Rowlands J Assurance Cases for Block-Configurable Software Proceedings of the 33rd International Conference on Computer Safety, Reliability, and Security - Volume 8666, (155-169)
  21. Lin F A formalization of programs in first-order logic with a discrete linear order Proceedings of the Fourteenth International Conference on Principles of Knowledge Representation and Reasoning, (338-347)
  22. Hallerstede S Quasi-Lexicographic Convergence Proceedings of the 4th International Conference on Abstract State Machines, Alloy, B, TLA, VDM, and Z - Volume 8477, (86-100)
  23. Dong R, Faber J, Ke W and Liu Z rCOS Unifying Theories of Programming and Formal Engineering Methods, (1-66)
  24. Leino K and Polikarpova N Verified Calculations Revised Selected Papers of the 5th International Conference on Verified Software: Theories, Tools, Experiments - Volume 8164, (170-190)
  25. ACM
    Mosbahi O (2013). Combining Formal Methods for the Development of Reactive Systems, ACM Transactions on Embedded Computing Systems, 12:1, (1-29), Online publication date: 1-Jan-2013.
  26. ACM
    Kanig J, Schonberg E and Dross C Hi-Lite Proceedings of the 2012 ACM conference on High integrity language technology, (27-34)
  27. ACM
    Kanig J, Schonberg E and Dross C (2012). Hi-Lite, ACM SIGAda Ada Letters, 32:3, (27-34), Online publication date: 29-Nov-2012.
  28. Barbosa L and Martinho M Mathematical Literacy as a Condition for Sustainable Development Revised Selected Papers of the SEFM 2012 Satellite Events on Information Technology and Open Source: Applications for Education, Innovation, and Sustainability - Volume 7991, (64-77)
  29. Morgan C Elementary probability theory in the eindhoven style Proceedings of the 11th international conference on Mathematics of Program Construction, (48-73)
  30. Namjoshi K and Trefler R Local symmetry and compositional verification Proceedings of the 13th international conference on Verification, Model Checking, and Abstract Interpretation, (348-362)
  31. Fahrenberg U, Legay A and Wasowski A Vision paper Proceedings of the 14th international conference on Model driven engineering languages and systems, (490-500)
  32. Ferreira J, Mendes A, Cunha A, Baquero C, Silva P, Barbosa L and Oliveira J Logic training through algorithmic problem solving Proceedings of the Third international congress conference on Tools for teaching logic, (62-69)
  33. Zheng Y, Shi H and Xue J A knowledge-driven approach to web-based learning for formal algorithm development Proceedings of the 2010 international conference on New horizons in web-based learning, (237-245)
  34. Čaušević A, Seceleanu C and Pettersson P Modeling and reasoning about service behaviors and their compositions Proceedings of the 4th international conference on Leveraging applications of formal methods, verification, and validation - Volume Part II, (82-96)
  35. Cohen A, Namjoshi K, Sa'ar Y, Zuck L and Kisyova K Parallelizing a symbolic compositional model-checking algorithm Proceedings of the 6th international conference on Hardware and software: verification and testing, (46-59)
  36. Dell'Aquila C, Di Tria F, Lefons E and Tangorra F Logic programming for data warehouse conceptual schema validation Proceedings of the 12th international conference on Data warehousing and knowledge discovery, (1-12)
  37. Cohen A, Namjoshi K and Sa'ar Y A dash of fairness for compositional reasoning Proceedings of the 22nd international conference on Computer Aided Verification, (543-557)
  38. Hayes I, Dunne S and Meinicke L Unifying theories of programming that distinguish nontermination and abort Proceedings of the 10th international conference on Mathematics of program construction, (178-194)
  39. ACM
    Srivastava S, Gulwani S and Foster J From program verification to program synthesis Proceedings of the 37th annual ACM SIGPLAN-SIGACT symposium on Principles of programming languages, (313-326)
  40. ACM
    Srivastava S, Gulwani S and Foster J (2010). From program verification to program synthesis, ACM SIGPLAN Notices, 45:1, (313-326), Online publication date: 2-Jan-2010.
  41. Dunne S (2009). Of wlp and CSP, Electronic Notes in Theoretical Computer Science (ENTCS), 259, (35-45), Online publication date: 1-Dec-2009.
  42. Cook B, Podelski A and Rybalchenko A (2009). Summarization for termination, Formal Methods in System Design, 35:3, (369-387), Online publication date: 1-Dec-2009.
  43. Krenn W and Aichernig B (2009). Test Case Generation by Contract Mutation in Spec#, Electronic Notes in Theoretical Computer Science (ENTCS), 253:2, (71-86), Online publication date: 1-Oct-2009.
  44. ACM
    Blanco J, Losano L, Aguirre N, Novaira M, Permigiani S and Scilingo G (2009). An introductory course on programming based on formal specification and program calculation, ACM SIGCSE Bulletin, 41:2, (31-37), Online publication date: 25-Jun-2009.
  45. ACM
    Morris J, Bunkenburg A and Tyrrell M (2009). Term transformers, ACM Transactions on Programming Languages and Systems, 31:4, (1-42), Online publication date: 1-May-2009.
  46. Cohen A and Namjoshi K (2009). Local proofs for global safety properties, Formal Methods in System Design, 34:2, (104-125), Online publication date: 1-Apr-2009.
  47. Hughes J and Jones C (2008). Reasoning about programs via operational semantics, Automated Software Engineering, 15:3-4, (299-312), Online publication date: 1-Dec-2008.
  48. Demirbas M and Arora A An Application of Specification-Based Design of Self-stabilization to Tracking in Wireless Sensor Networks Proceedings of the 10th International Symposium on Stabilization, Safety, and Security of Distributed Systems, (203-217)
  49. Samanta R, Deshmukh J and Emerson E Automatic generation of local repairs for Boolean programs Proceedings of the 2008 International Conference on Formal Methods in Computer-Aided Design, (1-10)
  50. Dunne S, Hayes I and Galloway A Reasoning about loops in total and general correctness Proceedings of the 2nd international conference on Unifying theories of programming, (62-81)
  51. Meinicke L and Hayes I Probabilistic Choice in Refinement Algebra Proceedings of the 9th international conference on Mathematics of Program Construction, (243-267)
  52. Cook B, Gulwani S, Lev-Ami T, Rybalchenko A and Sagiv M Proving Conditional Termination Proceedings of the 20th international conference on Computer Aided Verification, (328-340)
  53. Cohen A and Namjoshi K Local Proofs for Linear-Time Properties of Concurrent Programs Proceedings of the 20th international conference on Computer Aided Verification, (149-161)
  54. ACM
    Babic D and Hu A Calysto Proceedings of the 30th international conference on Software engineering, (211-220)
  55. Rocha C and Meseguer J Theorem proving modulo based on Boolean equational procedures Proceedings of the 10th international conference on Relational and kleene algebra methods in computer science, and 5th international conference on Applications of kleene algebra, (337-351)
  56. ACM
    Frias M, Lopez Pombo C, Galeotti J and Aguirre N (2007). Efficient Analysis of DynAlloy Specifications, ACM Transactions on Software Engineering and Methodology, 17:1, (1-34), Online publication date: 1-Dec-2007.
  57. Back R, Mannila L, Peltomäki M and Salakoski T Improving mathematics and programming education Proceedings of the Seventh Baltic Sea Conference on Computing Education Research - Volume 88, (167-170)
  58. Babić D and Hu A Exploiting shared structure in software verification conditions Proceedings of the 3rd international Haifa verification conference on Hardware and software: verification and testing, (169-184)
  59. van Leeuwen A (2007). Building Verification Condition Generators by Compositional Extension, Electronic Notes in Theoretical Computer Science (ENTCS), 191, (73-83), Online publication date: 1-Oct-2007.
  60. Barsotti D and Blanco J Automatic refinement of split binary semaphore Proceedings of the 4th international conference on Theoretical aspects of computing, (64-78)
  61. Babic D and Hu A Structural abstraction of software verification conditions Proceedings of the 19th international conference on Computer aided verification, (366-378)
  62. Cohen A and Namjoshi K Local proofs for global safety properties Proceedings of the 19th international conference on Computer aided verification, (55-67)
  63. Dunne S and Galloway A Lifting general correctness into partial correctness is ok Proceedings of the 6th international conference on Integrated formal methods, (215-232)
  64. ACM
    Sivilotti P and Pike S (2007). A collection of kinesthetic learning activities for a course on distributed computing, ACM SIGACT News, 38:2, (56-74), Online publication date: 1-Jun-2007.
  65. Namjoshi K Symmetry and completeness in the analysis of parameterized systems Proceedings of the 8th international conference on Verification, model checking, and abstract interpretation, (299-313)
  66. Habel A, Pennemann K and Rensink A Weakest preconditions for high-level programs Proceedings of the Third international conference on Graph Transformations, (445-460)
  67. Fidge C (2006). Formal change impact analyses for emulated control software, International Journal on Software Tools for Technology Transfer (STTT), 8:4-5, (321-335), Online publication date: 1-Aug-2006.
  68. Martin C and Curtis S Nondeterministic folds Proceedings of the 8th international conference on Mathematics of Program Construction, (274-298)
  69. Nesterenko M and Tixeuil S Discovering network topology in the presence of byzantine faults Proceedings of the 13th international conference on Structural Information and Communication Complexity, (212-226)
  70. ACM
    Boute R (2006). Calculational semantics, ACM Transactions on Programming Languages and Systems, 28:4, (747-793), Online publication date: 1-Jul-2006.
  71. Charpentier M (2006). Composing invariants, Science of Computer Programming, 60:3, (221-243), Online publication date: 1-May-2006.
  72. Arora A, Kulkarni S and Demirbas M (2006). Resettable vector clocks, Journal of Parallel and Distributed Computing, 66:2, (221-237), Online publication date: 1-Feb-2006.
  73. Lermer K, Fidge C and Hayes I (2005). A theory for execution-time derivation in real-time programs, Theoretical Computer Science, 346:1, (3-27), Online publication date: 23-Nov-2005.
  74. ACM
    Frias M, López Pombo C, Baum G, Aguirre N and Maibaum T (2005). Reasoning about static and dynamic properties in alloy, ACM Transactions on Software Engineering and Methodology, 14:4, (478-526), Online publication date: 1-Oct-2005.
  75. Prasetya I, Azurat A, Vos T and Van Leeuwen A Building Verification Condition Generators by Compositional Extensions Proceedings of the Third IEEE International Conference on Software Engineering and Formal Methods, (220-230)
  76. ACM
    Frias M, Galeotti J, López Pombo C and Aguirre N DynAlloy Proceedings of the 27th international conference on Software engineering, (442-451)
  77. Leavens G, Cheon Y, Clifton C, Ruby C and Cok D (2005). How the design of JML accommodates both runtime assertion checking and formal verification, Science of Computer Programming, 55:1-3, (185-208), Online publication date: 1-Mar-2005.
  78. ACM
    Zhang Y and Xu B (2004). A survey of semantic description frameworks for programming languages, ACM SIGPLAN Notices, 39:3, (14-30), Online publication date: 1-Mar-2004.
  79. Powell D Automatic derivation of loop termination conditions to support verification Proceedings of the 27th Australasian conference on Computer science - Volume 26, (89-97)
  80. Teng G and Liu X Support software evolution with abstration rules and programming knowledge patterns Focus on computational neurobiology, (177-189)
  81. ACM
    Bozga M, Iosif R and Laknech Y (2003). Storeless semantics and alias logic, ACM SIGPLAN Notices, 38:10, (55-65), Online publication date: 1-Oct-2003.
  82. ACM
    Bozga M, Iosif R and Laknech Y Storeless semantics and alias logic Proceedings of the 2003 ACM SIGPLAN workshop on Partial evaluation and semantics-based program manipulation, (55-65)
  83. Dunne S Introducing backward refinement into B Proceedings of the 3rd international conference on Formal specification and development in Z and B, (178-196)
  84. Leino K A SAT characterization of boolean-program correctness Proceedings of the 10th international conference on Model checking software, (104-120)
  85. Jones C (2003). The Early Search for Tractable Ways of Reasoning about Programs, IEEE Annals of the History of Computing, 25:2, (26-49), Online publication date: 1-Apr-2003.
  86. Smith S and Talcott C (2002). Specification Diagrams for Actor Systems, Higher-Order and Symbolic Computation, 15:4, (301-348), Online publication date: 1-Dec-2002.
  87. Sobel A and Clarkson M (2002). Formal Methods Application, IEEE Transactions on Software Engineering, 28:3, (308-320), Online publication date: 1-Mar-2002.
  88. von Karger B Temporal algebra Algebraic and coalgebraic methods in the mathematics of program construction, (309-385)
  89. Backhouse R Galois connections and fixed point calculus Algebraic and coalgebraic methods in the mathematics of program construction, (89-148)
  90. Arora A, Demirbas M and Kulkarniy S Graybox Stabilization Proceedings of the 2001 International Conference on Dependable Systems and Networks (formerly: FTCS), (389-400)
  91. Doherty P, Łukaszewicz W and Madalińska-Bugaj E (2000). The PMA and Relativizing Minimal Change for Action Update, Fundamenta Informaticae, 44:1-2, (95-131), Online publication date: 15-Aug-2000.
  92. ACM
    Arora A, Kulkarni S and Demirbas M Resettable vector clocks Proceedings of the nineteenth annual ACM symposium on Principles of distributed computing, (269-278)
  93. Boute R (2000). Supertotal Function Definition in Mathematics and Software Engineering, IEEE Transactions on Software Engineering, 26:7, (662-672), Online publication date: 1-Jul-2000.
  94. ACM
    Stevenson D Exploring an information-based approach to computation and computational complexity Proceedings of the 38th annual ACM Southeast Conference, (42-50)
  95. Doherty P, Łukaszewicz W and Madalińska-Bugaj E (2000). The PMA and Relativizing Minimal Change for Action Update, Fundamenta Informaticae, 44:1-2, (95-131), Online publication date: 1-Jan-2000.
  96. Mahony B (1999). The Least Conjunctive Refinement and Promotion in the Refinement Calculus, Formal Aspects of Computing, 11:1, (75-105), Online publication date: 1-Sep-1999.
  97. ACM
    Gannod G and Cheng B A specification matching based approach to reverse engineering Proceedings of the 21st international conference on Software engineering, (389-398)
  98. Mallon W, Udding J and Verhoeff T Analysis and Applications of the XDI model Proceedings of the 5th International Symposium on Advanced Research in Asynchronous Circuits and Systems
  99. Gries D Monotonicity in Calculational Proofs Correct System Design, Recent Insight and Advances, (to Hans Langmaack on the occasion of his retirement from his professorship at the University of Kiel), (79-85)
  100. Sivilotti P A class of synchronization systems that permit the use of large atomic blocks Proceedings of the 1998 conference of the Centre for Advanced Studies on Collaborative research
  101. Arora A and Kulkarni S (1998). Designing Masking Fault-Tolerance via Nonmasking Fault-Tolerance, IEEE Transactions on Software Engineering, 24:6, (435-450), Online publication date: 1-Jun-1998.
  102. Chetali B (1998). Formal Verification of Concurrent Programs Using the Larch Prover, IEEE Transactions on Software Engineering, 24:1, (46-62), Online publication date: 1-Jan-1998.
  103. Lengauer C, Gorlatch S and Herrmann C (1997). The Static Parallelization of Loops and Recursions, The Journal of Supercomputing, 11:4, (333-353), Online publication date: 1-Dec-1997.
  104. Bjareland M and Karlsson L Reasoning by regression Proceedings of the Fifteenth international joint conference on Artifical intelligence - Volume 2, (1420-1425)
  105. Lukaszewicz W and Madalinska-Bugaj E Reasoning about plans Proceedings of the Fifteenth international joint conference on Artifical intelligence - Volume 2, (1215-1220)
  106. Liu X, Yang H and Zedan H Formal Methods for the Re-Engineering of Computing Systems Proceedings of the 21st International Computer Software and Applications Conference
  107. Pan S and Dromey R Beyond structured programming Proceedings of the 18th international conference on Software engineering, (268-277)
  108. Manohar R, Rustan K and Leino M (1995). Conditional composition, Formal Aspects of Computing, 7:6, (683-703), Online publication date: 1-Nov-1995.
  109. Gorlatch S and Lengauer C (1995). Parallelization of divide-and-conquer in the Bird-Meertens formalism, Formal Aspects of Computing, 7:6, (663-682), Online publication date: 1-Nov-1995.
  110. Lukaszewicz W and Madaliriska-Bugaj E Reasoning about action and change using Dijkstra's semantics for programming languages Proceedings of the 14th international joint conference on Artificial intelligence - Volume 2, (1950-1955)
  111. Dromey R (1995). A Model for Software Product Quality, IEEE Transactions on Software Engineering, 21:2, (146-162), Online publication date: 1-Feb-1995.
  112. van de Snepscheut J (1995). The sliding-window protocol revisited, Formal Aspects of Computing, 7:1, (3-17), Online publication date: 1-Jan-1995.
  113. Arora A and Gouda M (1993). Closure and Convergence, IEEE Transactions on Software Engineering, 19:11, (1015-1027), Online publication date: 1-Nov-1993.
  114. Fokkinga M (1992). Calculate categorically!, Formal Aspects of Computing, 4:Suppl 1, (673-692), Online publication date: 1-Nov-1992.
  115. Lukkien J and van de Snepscheut J (1992). Weakest preconditions for progress, Formal Aspects of Computing, 4:2, (195-236), Online publication date: 1-Mar-1992.
  116. Broy M Declarative specification and declarative programming Proceedings of the 6th international workshop on Software specification and design, (2-11)
  117. ACM
    Ashenhurst R (1991). ACM Forum, Communications of the ACM, 34:9, (16-ff.), Online publication date: 1-Sep-1991.
  118. ACM
    Soloway E (1991). How the Nintendo generation learns, Communications of the ACM, 34:9, (23-ff.), Online publication date: 1-Sep-1991.
  119. ACM
    Sanders B A predicate transformer approach to knowledge and knowledge-based protocols (extended abstract) Proceedings of the tenth annual ACM symposium on Principles of distributed computing, (217-230)
  120. Sanders B (1991). Eliminating the substitution axiom from UNITY logic, Formal Aspects of Computing, 3:2, (189-205), Online publication date: 1-Jun-1991.
  121. ACM
    Gries D (1991). Teaching calculation and discrimination, Communications of the ACM, 34:3, (44-55), Online publication date: 1-Mar-1991.
  122. ACM
    Rao J Reasoning about probabilistic algorithms Proceedings of the ninth annual ACM symposium on Principles of distributed computing, (247-264)
Contributors
  • The University of Texas at Austin
  • Eindhoven University of Technology

Reviews

Edward A. Schneider

The authors present the predicate calculus and its use in defining and reasoning about predicate transformers. They use the predicate transformers weakest liberal precondition (wlp) and weakest precondition (wp), which will be familiar to readers of Dijkstra's previous work [1], to define the semantics of programming languages and to reason about programs written in those languages. The first four chapters form a prelude to the material; they cover notation and conventions. Chapter 5 provides extensive coverage of the predicate calculus over Boolean structures. The fundamental operators introduced are equivalence, disjunction, and negation; even true and false are defined in terms of these operators. Chapter 6 extends the theory to functions on predicates, called predicate transformers. Chapter 7 uses the predicate transformers wlp and wp to define a noniterative subset of Dijkstra's guarded command language [1]. Chapter 8 extends the theory of predicate transformers to cover fixpoints, which are used in chapter 9 for the iterative statement. The book concludes with a discussion of operational considerations and of strongest postcondition, the converse of wl p. I enjoyed the coverage of the predicate calculus. The style of the proofs is clear, and I recommend it for other books and papers on similar topics. The use of equivalence as the basis of the theory yields some unexpected results, and the “junctivity” theory in chapter 6 is interesting. The book is unsuitable as a text because it lacks exercises other than a few proofs left to the reader. This lack is unfortunate, since all readers would benefit by working out some of the proofs for themselves. Another shortcoming is the lack of motivation and examples—while the theory presented is fun in itself, its usefulness is not at all clear. Familiarity with a previous work of Dijkstra's [1] would be helpful. The book includes no references. This book is clear and easy to read. It is designed especially for “mathematically inclined computing scientists and mathematicians with methodological and formal interests.” An added plus is several sections of “remarks,” which readers of Dijkstra's works have come to look forward to even if they do not agree with everything that is said. I recommend this book highly.

Access critical reviews of Computing literature here

Become a reviewer for Computing Reviews.

Recommendations