Skip to content

sambacha/art-of-engineering

Repository files navigation

Engineering Polemic: The art of

portions taken from: https://github.com/charlax/professional-programming/tree/master/antipatterns

Table of Contents

Principles

Antipatterns

This is a list of 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: Lotus Eaters

Chapter 5 - Lotus Eaters, Blue Route, Ulysses

Engineering Compendium

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

Papers

Videos

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

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

Videos

Runtime systems

Books

Papers

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

Videos

Category Theory

Philip Wadler’s advice here is “read Pierce for motivation, Mac Lane for the presentation of the maths”.

Books

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.

Algebra

Other collections

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.

https://sites.google.com/a/scrumplop.org/published-patterns/retrospective-pattern-language/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

Andrea Asperti

https://arxiv.org/pdf/1701.04240

The optimal implementation of functional programming languages

  • January 1998

  • Publisher: Cambridge University Press

  • ISBN: 0 521 62112 7