art-of-engineering
art-of-engineering copied to clipboard
A polemic on software design
Engineering Polemic: The art of
portions taken from: https://github.com/charlax/professional-programming/tree/master/antipatterns
Table of Contents
-
Engineering Polemic: The art of
-
Table of Contents
- Antipatterns
-
Table of Contents
Principles
-
Prototyping
-
Separation of Concerns
-
Services Oriented Architectures (see Yegge)
Antipatterns
This is a list of antipatterns.
- Code antipatterns
- Python antipatterns
- SQLAlchemy antipatterns
- Error handling antipatterns
- Tests antipatterns
Map of Repo
Omnibus/
├── ART_OF_COLD_SHOWERS.md
├── Antipatterns
│ ├── code-antipatterns.md
│ ├── database-antipatterns.md
│ ├── error-handling-antipatterns.md
│ ├── mvcs-antipatterns.md
│ ├── scalability-antipatterns.md
│ ├── sqlalchemy-antipatterns.md
│ ├── sqlalchemy-examples
│ │ └── exists.py
│ └── tests-antipatterns.md
├── Art_of
│ ├── ENGINEERING_ART_OF.md
│ ├── ENGINEERING_ART_OF_APL.md
│ ├── ENGINEERING_ART_OF_DEBUGGING.md
│ ├── ENGINEERING_ART_OF_IDEs.md
│ └── ENGINEERING_ART_OF_software_project_management.md
├── DISTRIBUTED_SYSTEMS.md
├── Design
│ └── On_Weaponised_Design.md
├── MISC_redux_is_a_half_pattern.md
└── MISC_thoughts.md
Polemic of Engineering
💊 🌲 📚
-
Polemic of Engineering
-
Table of Contents
- Engineering Compendium
- Programming Language Theory
-
Type Theory
- Books
- Papers
- Videos
- Subtopics
-
Programming Languages
- Books
- Papers
-
Compiler Construction
- Books
- Papers
- Videos
-
Runtime systems
- Books
- Papers
-
Functional Programming
-
Books
- Papers
- Videos
-
Category Theory
- Books
- Journals
- Subtopics
-
Mathematics
- Mathematical Literacy/Thinking
- Algebra
-
Other collections
- Certification is useless
- Motivated teams:
- Happiness Metric.
- A Role-Based Empirical Process Modeling Environment.
- Organizational Patterns of Agile Software
- SIMULA 67 Common Base Language. Norwegian
- Borland Software Craftsmanship: A New Look at Process,
- Agile Software Development with Scrum. Pearson,
- Software in 30 Days: How Agile Managers Beat the Odds, Delight
- A Development Process Generative Pattern Language. In James O.
- A Laboratory for Teaching Object-Oriented Thinking. Proceedings of
- Architecture and the Child Within. Games versus Play,
- Objects as mental models.
- The Humane Interface: New Directions for Designing Interactive
- A Laboratory for Teaching Object-Oriented Thinking. Proceedings of
- Comparative Case Study on the Effect of Test-Driven
- Does Test-Driven Development Improve the Program Code? Alarming results from a Comparative Case Study.
- Segue.
- Toyota automation:
- Research on DCI by Héctor Valdecantos.
- Study on Code Comprehension: Data Context Interaction Compared to Classical Object Oriented.
- Long deliberation.
- Last Responsible Moment. Glenn Ballard. Positive versus negative iteration in
- The Quality without a Name. Christopher Alexander. The Timeless Way of Building.
- Mob Programming.
- Organizational Learning. Joop Swieringa and Andre Wierdsma. Becoming a Learning
- Organization: Beyond the Learning Curve. Addison-Wesley, 1992.
- Stable Teams:
- The Ten Bulls.
- The Design Movement:
-
Books
- About the efficient reduction of lambda terms
- The optimal implementation of functional programming languages
-
Table of Contents
Polemic: Lotus Eaters
Chapter 5 - Lotus Eaters, Blue Route, Ulysses
-
Lotus Eaters
- Engineering Compendium
- Certification is useless
- Motivated teams:
- Happiness Metric.
- A Role-Based Empirical Process Modeling Environment.
- Organizational Patterns of Agile Software
- SIMULA 67 Common Base Language. Norwegian
- Borland Software Craftsmanship: A New Look at Process,
- Agile Software Development with Scrum. Pearson,
- Software in 30 Days: How Agile Managers Beat the Odds, Delight
- A Development Process Generative Pattern Language. In James O.
- A Laboratory for Teaching Object-Oriented Thinking. Proceedings of
- Architecture and the Child Within. Games versus Play,
- Objects as mental models.
- The Humane Interface: New Directions for Designing Interactive
- A Laboratory for Teaching Object-Oriented Thinking. Proceedings of
- Comparative Case Study on the Effect of Test-Driven
- Does Test-Driven Development Improve the Program Code? Alarming results from a Comparative Case Study.
- Segue.
- Toyota automation:
- Research on DCI by Héctor Valdecantos.
- Study on Code Comprehension: Data Context Interaction Compared to Classical Object Oriented.
- Long deliberation.
- Last Responsible Moment. Glenn Ballard. Positive versus negative iteration in
- The Quality without a Name. Christopher Alexander. The Timeless Way of Building.
- Mob Programming.
- Organizational Learning. Joop Swieringa and Andre Wierdsma. Becoming a Learning
- Organization: Beyond the Learning Curve. Addison-Wesley, 1992.
- Stable Teams:
- The Ten Bulls.
- The Design Movement:
Engineering Compendium
- Engineering Compendium
- Certification is useless
- Motivated teams:
- Happiness Metric.
- A Role-Based Empirical Process Modeling Environment.
- Organizational Patterns of Agile Software
- SIMULA 67 Common Base Language. Norwegian
- Borland Software Craftsmanship: A New Look at Process,
- Agile Software Development with Scrum. Pearson,
- Software in 30 Days: How Agile Managers Beat the Odds, Delight
- A Development Process Generative Pattern Language. In James O.
- A Laboratory for Teaching Object-Oriented Thinking. Proceedings of
- Architecture and the Child Within. Games versus Play,
- Objects as mental models.
- The Humane Interface: New Directions for Designing Interactive
- A Laboratory for Teaching Object-Oriented Thinking. Proceedings of
- Comparative Case Study on the Effect of Test-Driven
- Does Test-Driven Development Improve the Program Code? Alarming results from a Comparative Case Study.
- Segue.
- Toyota automation:
- Research on DCI by Héctor Valdecantos.
- Study on Code Comprehension: Data Context Interaction Compared to Classical Object Oriented.
- Long deliberation.
- Last Responsible Moment. Glenn Ballard. Positive versus negative iteration in
- The Quality without a Name. Christopher Alexander. The Timeless Way of Building.
- Mob Programming.
- Organizational Learning. Joop Swieringa and Andre Wierdsma. Becoming a Learning
- Organization: Beyond the Learning Curve. Addison-Wesley, 1992.
- Stable Teams:
- The Ten Bulls.
- The Design Movement:
- Differential Testing For Software
Programming Language Theory
Learning about Programming Language Theory can be a tough journey, particularly for programming practitioners who haven’t studied it formally. This resource is here to help. Please feel free to get in touch if you have ideas for improvement.
💡 Top Tips
For a quick course in Type Theory, Philip Wadler recommends: Types and Programming Languages, Proofs and Types, followed by Advanced Topics in Types and Programming Languages.
See also Daniel Gratzer’s Learn Type Theory and Darryl McAdams’s So you want to learn type theory.
Type Theory
Books
- PLFA - Programming Language Foundations in Agda - Philip Wadler, Wen Kokke
- SF - Software Foundations - Benjamin C. Pierce et al.
- TAPL - Types and Programming Languages - Benjamin C. Pierce
- PROT Proofs and Types - Jean-Yves Girard, Yves Lafont and Paul Taylor - 1987-90 pdf
- PFPL - Practical Foundations for Programming Languages (Second Edition) - Robert Harper Online preview edition
- ATTAPL - Advanced Topics in Types and Programming Languages - Edited by Benjamin C. Pierce
- CPDT - Certified Programming with Dependent Types - Adam Chlipala
- SEwPR - Semantics Engineering with PLT Redex - Matthias Felleisen, Robby Findler, and Matthew Flatt. Redex
- HoTT - Homotopy Type Theory, Univalent Foundations of Mathematics
- Coq’Art Interactive Theorem Proving and Program Development, Coq’Art: The Calculus of Inductive Constructions - Yves Bertot, Pierre Castéran.
- TTFP - Type Theory and Functional Programming - Simon Thompson, 1991
- PiMLTT - Programming in Martin-Löf’s Type Theory, An Introduction - Bengt Nordström, Kent Petersson, Jan M. Smith
- Using, Understanding, and Unravelling The OCaml Language — An introduction pdf
- Polymorphic typing of an algorithmic language (PhD Thesis) - Xavier Leroy pdf
- ATP - Handbook of Practical Logic and Automated Reasoning - John Harrison
- Basic Simple Type Theory - J. Roger Hindley pdf paperback@booko
- Lambda Calculus and Combinators pdf — J. Roger Hindley and Jonathan P. Seldin
- Semantics with Applications: An Appetizer — Hanne Riis Nielson, Flemming Nielson
- An Introduction to Lambda Calculi for Computer Scientists - Chris Hankin
- The Definition of Standard ML (Revised) - Milner, Fofte, Harper, and MacQueen
- The Definition of Standard ML (1990) and Commentary on Standard ML (1991) definition (pdf) commentary (pdf)
- Programs and Proofs — Ilya Sergey pdf
- Type Theory and Formal Proof: An Introduction — Rob Nederpelt, Herman Geuvers
- Lectures on the Curry-Howard Isomorphism (pdf)
Papers
- A Tutorial Implementation of a Dependently Typed Lambda Calculus — Andres Löh, Conor McBride and Wouter Swierstra pdf. Previously published as Simply Easy.
- ΠΣ: Dependent Types without the Sugar - Thorsten Altenkirch, Nils Anders Danielsson, Andres Löh, and Nicolas Oury
- Lambda Calculi with Types — Henk Barendregt
- Intuitionistic Type Theory
Videos
-
OPLSS — Oregon Programming Language Summer School
- OPLSS 2019 — Foundations of Probabilistic Programming and Security
- OPLSS 2018 — Parallelism and Concurrency
- OPLSS 2017 — A Spectrum of Types
- OPLSS 2016 — Types, Logic, Semantics, and Verification
- OPLSS 2015 — Types, Logic, Semantics, and Verification
- OPLSS 2014 — Types, Logic, Semantics, and Verification
- OPLSS 2013 — Types, Logic, and Verification
- OPLSS 2012 — Logic, Languages, Compilation, and Verification
- OPLSS 2011 — Types, Semantics and Verification
- OPLSS 2010 — Logic, Languages, Compilation, and Verification
- Archives 2002-2018
- ICFP 2012 Monday keynote. Conor McBride: Agda-curious?
Subtopics
Programming Languages
Books
- DCPL - Design Concepts in Programming Languages – Franklyn Turbak and David Gifford, 2008
- CTM - Concepts, Techniques and Models of Computer Programming, Peter Van Roy and Seif Haridi
- EOPL - Essentials of Programming Languages, 3rd Edition - Daniel P. Friedman
- PLAI-2nd - Programming Languages: Application and Interpretation - Shriram Krishnamurthi course with videos PLAI-1st
- PAIP Paradigms of Artificial Intelligence Programming: Case Studies in Common Lisp - Peter Norvig, 1992
- PLP Programming Language Pragmatics - Michael L. Scott
- FSPL The Formal Semantics of Programming Languages - Glynn Winskel
Papers
- An argument against call/cc — Oleg Kiselyov
Compiler Construction
Books
- MinCaml - A Crash Course for the MinCaml Compiler
- MCIiML Modern Compiler Implementation in ML - Andrew W. Appel
- pj-lester-book Implementing functional languages: a tutorial - Simon Peyton Jones and David Lester, 1992
- slpj-book-1987 - The Implementation of Functional Programming Languages - Simon Peyton Jones - 1987
- MCD-2e Modern Compiler Design, Second Edition — Dick Grune et al.
- EaC-2e Engineering a Compiler, 2nd Edition, Cooper and Torczon
- Compiler Construction, Niklaus Wirth
- DragonBook - “The Dragon Book” Compilers: Principles, Techniques, and Tools
- LiSP - Lisp in Small Pieces - Christian Queinnec
- CwC Compiling with Continuations - Andrew W. Appel
- Static Program Analysis, Anders Møller and Michael I. Schwartzbach
- List of compiler books at the GCC Wiki
Papers
- An Incremental Approach to Compiler Construction, Abdulaziz Ghuloum
- A Nanopass Framework for Compiler Education, Dipanwita Sarkar, Oscar Waddell, R. Kent Dybvig
- A Nanopass Framework for Commercial Compiler Development, Andrew W. Keep
- ZINC - The ZINC experiment, an economical implementation of the ML language - Xavier Leroy (Technical Report) more OCaml papers
Videos
- Stanford - Compilers - Alex Aiken
Runtime systems
Books
- The Garbage Collection Handbook, The Art of Automatic Memory Management — Richard Jones, Antony Hosking, Eliot Moss, 2011.
Papers
- Debunking the ‘Expensive Procedure Call’ Myth, or, Procedure Call Implementations Considered Harmful, or, Lambda: The Ultimate GOTO — Guy Lewis Steele, Jr. (1977) pdf
Functional Programming
Books
- Bird and Wadler - Introduction to Functional Programming, 1st Edition - Bird and Wadler
- AoP - The Algebra of Programming - Richard Bird, Oege de Moor
- Programming in Haskell — Graham Hutton (2007)
- RWH - Real World Haskell - Bryan O’Sullivan, Don Stewart, and John Goerzen
- FPiS - Functional Programming in Scala - Paul Chiusano and Rúnar Bjarnason
- SICP, Structure and Interpretation of Computer Programs, by Abelson, Sussman, and Sussman
- PCPH - Parallel and Concurrent Programming in Haskell - Simon Marlow
- RWOC - Real World OCaml - Jason Hickey, Anil Madhavapeddy, and Yaron Minsky
- Developing Applications With OCaml — Emmanuel Chailloux, Pascal Manoury and Bruno Pagano (2000)
- BTLS - The Little Schemer - Daniel P. Friedman, Matthias Felleisen
- BTSS - The Seasoned Schemer - Daniel P. Friedman, Matthias Felleisen
- BTML - The Little MLer - Matthias Felleisen, Daniel P. Friedman
- The Reasoned Schemer and miniKanren
- HTDP - How to Design Programs - Matthias Felleisen, Robert Findler, Matthew Flatt, Shriram Krishnamurthi
- HR - The Haskell Road to Logic, Maths and Programming - 2nd Ed. - Kees Doets, Jan van Eijck pdf
- A Book of Abstract Algebra - 2nd Ed. - Charles C. Pinter booko
- Purely Functional Data Structures - Chris Okasaki phd-thesis in pdf paperback@booko More purely functional data structures
Papers
- Lambda Papers - Lambda: The Ultimate Imperative/Declarative/GOTO - Guy Steele and Gerald Sussman
- Exploring Generic Haskell (PhD thesis) - Andres Löh. This an epic, accessible, book-length PhD on datatype generic programming.
- ICFP accepted papers
Videos
- C9 Lectures: Dr. Erik Meijer - Functional Programming Fundamentals
- C9 Lectures: Dr. Ralf Lämmel - Going Bananas + Advanced Functional Programming
- Datatype-Generic Programming in Haskell - Andres Löh - slides in pdf
Category Theory
Philip Wadler’s advice here is “read Pierce for motivation, Mac Lane for the presentation of the maths”.
Books
- Cakes, Custard and Category Theory: Easy recipes for understanding complex maths — Eugenia Cheng
- Category Theory, Steve Awodey. notes
- Basic Category Theory for Computer Scientists - Benjamin C. Pierce. Previously available in a draft entitled A taste of category theory for computer scientists
- Categories for the Working Mathematician — Saunders Mac Lane
- Conceptual Mathematics A First Introduction to Categories, 2nd Edition - F. William Lawere and Stephen H. Schanuel
- Category Theory for the Sciences — David I. Spivak. Previously available in a draft entitled Category Theory for Scientists
- CTCS-2nd Category Theory for Computing Science - Michael Barr and Charles Wells CTCS-1st
- Categories, Types, and Structures: An Introduction to Category Theory for the Working Computer Scientist pdf
- Topoi, The Categorical Analysis of Logic, Robert Goldblatt Amazon
- TTT - Toposes, Triples and Theories - Michael Barr and Charles Wells
- Category Theory Lectures Notes for ESSLLI - Michael Barr and Charles Wells pdf
- Seven Sketches in Compositionality: An Invitation to Applied Category Theory - Brendan Fong, David I Spivak
- Applied Category Theory Course - online course conducted by John Baez forum
- CTFP - Category Theory for Programmers - Bartosz Milewski, created by Igal Tabachnik from series of blog posts; video lectures based on this material: part 1, part 2, part 3; pdf
Journals
- TAC - Theory and Applications of Categories
Subtopics
Mathematics
Some related maths resources.
Mathematical Literacy/Thinking
It can be useful to have some background in mathematical thinking.
- Introduction to Mathematical Thinking — Keith Devlin
- How to prove it — Daniel J. Velleman
Algebra
- A Computational Introduction to Number Theory and Algebra — Victor Shoup
- Advanced Modern Algebra — Joseph J. Rotman pdf
- A Survey of Modern Algebra — Birkhoff and MacLane Scribd
Other collections
- Great Works in Programming Languages — Benjamin Piece
- Classic Papers in Programming Languages and Logic — Karl Crary
- The collected works of Per Martin-Löf — Michael Thompson and others
- PLT Texts Online — Frank Atanassow
- Functional programming books overview — Alex (Alexey) Ott
- TypeFunc — William Demeo
- Lambda the Ultimate — Ehud Lamm et al.
- Archives of Lambda the Ultimate (stale but includes “classic”) — Chris Rathman
- Programming Language People — Chris Rathman
- PL Summer Schools forall — Aggelos Biboudis
- Summer Schools Interesting Conferences — Bengt Jonsson
- The Programming Language Zoo — Andrej Bauer
We. Sell. UseCases.
The Interface IS the Product
Certification is useless
Donald P. Hoyt, “The Relationship Between College Grades and Adult
Achievement.” Project Management Certification does not correlate with
performance:
http://network.projectmanagers.net/profiles/blog/show?id=1606472%3ABlogPost%3A244660
Motivated teams:
Daniel Pink. Drive: The amazing truth about what motivates us. New York: Riverhead Books, 2011.
Happiness Metric.
Hirotaka Takeuchi and Ikujiro Nonaka. The New New Product Development Game. Harvard Business Review. https://hbr.org/1986/01/the-new-new-product-development-game
Jeff Sutherland. Origins of Scrum. https://www.scruminc.com/origins-of-scrum/
Bell Labs research Brendan G. Cain and James O. Coplien.
A Role-Based Empirical Process Modeling Environment.
In Proceedings of Second International Conference on the Software Process (ICSP-2), pages 125-133, February 1993. Los Alamitos, California, IEEE Computer Press.
Neil B. Harrison and James O. Coplien. Patterns of productive software organizations. Bell Labs Technical Journal, 1(1):138- 145, Summer (September) 1996.
Organizational Patterns of Agile Software
Development. Upper Saddle River, NJ: Prentice- Hall/Pearson, July 2004. James Coplien and Neil Harrison.
SIMULA 67 Common Base Language. Norwegian
Computing Center, 1968. O.-J. Dahl, B. Myhrhaug, K. Nygaard:
Borland Software Craftsmanship: A New Look at Process,
Quality and Productivity. In Proceedings of the Fifth Borland International Conference, Orlando, Florida, June 1994. James O. Coplien.
Agile Software Development with Scrum. Pearson,
October, 2001. Mike Beedle and Ken Schwaber.
Software in 30 Days: How Agile Managers Beat the Odds, Delight
Their Customers, and Leave Competitors in the Dust. Wiley, 2012. Ken Schwaber.
Ikujiro Nonaka. The Knowledge Creating Company. Oxford University Press, 1995.
Ikujiro Nonaka and R. Toyama. Managing Flow: A Process Theory of the Knowledge-Based Firm. Palgrave Macmillan, 2008.
A Development Process Generative Pattern Language. In James O.
Coplien and Douglas C. Schmidt, editors, Pattern Languages of Program Design, chapter 13, 183-237. Addison-Wesley, Reading, MA, 1995. James O. Coplien.
A Laboratory for Teaching Object-Oriented Thinking. Proceedings of
OOPSLA ’89, SIGPLAN Notices 24(10), October, 1989. Kent Beck.
Architecture and the Child Within. Games versus Play,
gamification considered harmful, etc. James Coplien. https://www.slideshare.net/Avisi_ASAS/keynote-asas-2014-jim-coplien-the-child-within
Objects as mental models.
Alan C. Kay. A Personal Computer for Children of All Ages. Original between 1968 and 1982. New York: ACM Press, Proceedings of the ACM Annual Conference - Volume 1, 1972, http://doi.acm.org/10.1145/800193.1971922.
The Humane Interface: New Directions for Designing Interactive
Systems. Addison-Wesley: 2000. Jef Raskin.
A Laboratory for Teaching Object-Oriented Thinking. Proceedings of
OOPSLA ’89, SIGPLAN Notices 24(10), October, 1989. Kent Beck.
Comparative Case Study on the Effect of Test-Driven
Development on Program Design and Test Coverage, ESEM 2007 Siniaalto and Abrahamsson,
Does Test-Driven Development Improve the Program Code? Alarming results from a Comparative Case Study.
Siniaalto and Abrahamsson, Proceedings of Cee-Set 2007, 10 - 12 October, 2007, Poznan, Poland.
On unit testing: Why Most Unit Testing is Waste. https://rbcs-us.com/documents/Why-Most-Unit-Testing-is-Waste.pdf
Segue.
https://rbcs-us.com/documents/Segue.pdf
Toyota automation:
https://qz.com/196200/toyota-is-becoming-more-efficient-by-replacing-robots-with-humans/,
https://www.fastcompany.com/40461624/how-toyota-is-putting-humans-first-in-an-era-of-increasing-automation
Research on DCI by Héctor Valdecantos.
Héctor Valdecantos, Katy Tarrit, Mehdi Mirakhorli , and James O. Coplien. An Empirical
Study on Code Comprehension: Data Context Interaction Compared to Classical Object Oriented.
Proceedings of ICPC 2017, IEEE Press, May 2017.
Long deliberation.
Jeffrey K. Liker. The Toyota Way. McGraw-Hill, 2004, Chapter 19.
Last Responsible Moment. Glenn Ballard. Positive versus negative iteration in
design. In Proceedings of the 8th Annual Conference on the International Group for Lean Construction (IGLC-8). 2000, June.
The Quality without a Name. Christopher Alexander. The Timeless Way of Building.
Oxford University Press, 1979.
Mob Programming.
https://en.wikipedia.org/wiki/Mob_programming
Organizational Learning. Joop Swieringa and Andre Wierdsma. Becoming a Learning
Organization: Beyond the Learning Curve. Addison-Wesley, 1992.
Stable Teams:
https://sites.google.com/a/scrumplop.org/published-patterns/product-organization-pattern-language/development-team/stable-teams
The Ten Bulls.
https://sites.google.com/a/scrumplop.org/published-patterns/book-outline/preface
The Design Movement:
John Thackara. Design After Modernism: Beyond the Object. New York: Thames and Hudson, Inc., 1988. Nigel Cross, ed. Developments in design methodology. Chichester, UK: Wiley, 1984.
Jeff Sutherland. The Scrum Handbook. https://www.researchgate.net/publication/301685699_Jeff_Sutherland%27s_Scrum_Handbook
Daniel Pink. Drive: The amazing truth about what motivates us. New York: Riverhead Books, 2011.
Differential comparison of two compilers, or of a compiler with its own output when optimizations are turned off, usually requires a much more restricted form of the program, which limits the bugs you find, since programs must be compiled and executed to compare results. reference from trailofbits, https://blog.trailofbits.com/2021/03/23/a-year-in-the-life-of-a-compiler-fuzzing-campaign/
About the efficient reduction of lambda terms
https://arxiv.org/pdf/1701.04240
The optimal implementation of functional programming languages
-
January 1998
-
Publisher: Cambridge University Press
-
ISBN: 0 521 62112 7