An off-the-cuff stream of Functional Programming ideas, skills, patterns, and news from Functional Programming expert Eric Normand of LispCast.
In this episode, I introduce the architecture lens, its questions, and its goal of modeling architectural domains to manage complexity.
In this episode, I introduce the executable specification lens, its questions, and its goal of getting to runnable, testable code as quickly as possible.
In this episode, I introduce the composition lens, its questions, and its goal of figuring what's true when you perform multiple operations in a row.
In this episode, I introduce the operation lens, its questions, and its goal of capturing the use cases of your software.
In this episode, I introduce the data lens, its questions, and its goals of capturing relationships among data values in data.
I answer a listener's questions about whether domain modeling is a skill that can be taught.
In this episode, I talk about the three-part model of domain modeling and what it means about how they are used.
In a domain model, when should we refer to things by name, and when should we nest a subcomponent?
When do we use collections in domain models, and how do we think about the states they represent?
In this episode, I talk about the three parts of my book, which mirror the three levels of domain modeling.
In this episode, I continue the exploration of the definition of domain model to serve as a base layer of understanding to write my next book.
We've all heard the term _high-level language_. Initially, it referred to the step from assembly languages to compiled languages. But it has another definition, which has to do with how well the language lets you think.
I explore a new perspective about what abstraction means and how it can cause problems.
Why does some design advice work for some people, but not for others? And why do some agile practices work for some people, but not for others? I call that The Christopher Alexander Effect and explain how it works.
In this episode, I excerpt from and comment on Allen Newell's and Herbert Simon's 1975 ACM Turing Award Lecture.
Technical debt is a metaphor used to explain the tradeoff we all face when we have a deadline. How much is it worth to rush the code out the door? It's a good metaphor, but the term is often used these days to mean 'code I don't like'. In this episode, I examine the parts of the metaphor and ways in which technical debt differs from financial debt.
I explore why clean code is a lagging indicator and how the domain model is a leading indicator of maintenance cost.
We read from and comment on Edsger Dijkstra's 1972 Turing Award Lecture called The Humble Programmer. Is the problem with programming that we don't recognize our own limitations? We'll explore that and more.
Do abstract and general mean the same thing? I don't think so. I've actually stopped using the term 'abstraction' because it's so laden with semantic baggage. We explore what they do mean in different contexts, and why abstract is not a relative term.
In this episode, we explore why Clojure's stance of not wrapping data much is so powerful in the world we live in.
In this episode, I read from and discuss a comment thread between Rich Hickey and Alan Kay.
In this episode, I explore the notion of fit and how it is missing from the Stratified Design paper.
In this episode, I read and comment on excerpts from John McCarthy's 1971 Turing Award Lecture.
In this episode, I read and comment on an excerpt from the 1970 Turing Award Lecture by James Wilkinson.
When using the onion architecture, you need to consider the dependencies (actions depend on calculations), but also you need to consider the semantic dependencies (the domain should not know about the database).
Functional programming is a mindset that distinguishes actions, calculations, and data. That's where it derives its power. Simply applying the discipline of 'only pure functions' lets you programming using a procedural mindset and still think you're doing functional programming.
Force is an important concept in Newtonian mechanics. But do forces really exist? In fact, it is an abstraction invented by Newton. The insight revolutionized physics and universalized his model. What can we learn from it?
One of the greatest domain models ever built was Newtonian mechanics. Why did it take physics, as a field, thousands of years to figure it out? What can we learn from Newtonian mechanics to help us model our own domains?
We discuss two phases of domain modeling, one easy and one difficult.
https://lispcast.com/how-is-domain-modeling-related-to-starbucks/
For audio, video, and text transcripts: https://lispcast.com/is-design-a-noun-or-a-verb/
For audio, video, and text transcripts: https://lispcast.com/has-software-design-taken-a-wrong-turn/
For audio, video, and text transcripts: https://lispcast.com/form-and-content-in-computer-science/
For audio, video, and text transcripts: https://lispcast.com/one-mans-view-of-computer-science/
For audio, video, and text transcripts: https://lispcast.com/the-synthesis-of-algorithmic-systems/
For audio, video, and text transcripts: https://lispcast.com/is-clojure-a-language-for-hipsters/
For audio, video, and text transcripts: https://lispcast.com/can-programming-be-liberated-from-the-von-neumann-style/
For audio, video, and text transcripts: https://lispcast.com/do-we-use-metacircular-evaluators-in-real-life/
For audio, video, and text transcripts: https://lispcast.com/the-next-700-programming-languages/
For audio, video, and text transcripts: https://lispcast.com/what-makes-some-apis-become-dsls/
For audio, video, and text transcripts: https://lispcast.com/what-is-software-design-definition/
For audio, video, and text transcripts: https://lispcast.com/why-functional-programming-matters/
For audio, video, and text transcripts: https://lispcast.com/my-response-to-out-of-the-tar-pit/
For audio, video, and text transcripts: https://lispcast.com/what-is-software-architecture/
For audio, video, and text transcripts: https://lispcast.com/the-early-history-of-smalltalk/
For audio, video, and text transcripts: https://lispcast.com/lisp-a-language-for-stratified-design/
Show notes:
For audio, video, and text transcripts: https://lispcast.com/year-end-update-2019/
For audio, video, and text transcripts: https://lispcast.com/where-does-structural-similarity-come-from/
For audio, video, and text transcripts: https://lispcast.com/do-you-need-immutability-for-functional-programming/
For audio, video, and text transcripts: https://lispcast.com/algebra-is-about-composition/
For audio, video, and text transcripts: https://lispcast.com/what-do-product-and-sum-types-have-to-do-with-data-modeling/
For audio, video, and text transcripts: https://lispcast.com/can-you-have-a-clean-domain-model/
For audio, video, and text transcripts: https://lispcast.com/why-does-stratified-design-work/
For audio, video, and text transcripts: https://lispcast.com/why-are-algebraic-properties-important/
For audio, video, and text transcripts: https://lispcast.com/functional-programming-is-a-set-of-skills/
For audio, video, and text transcripts: https://lispcast.com/the-commercialization-of-computers/
For audio, video, and text transcripts: https://lispcast.com/two-kinds-of-data-modeling/
For audio, video, and text transcripts: https://lispcast.com/what-are-product-and-sum-types/
For audio, video, and text transcripts: https://lispcast.com/why-do-i-prefer-clojure-to-haskell/
For audio, video, and text transcripts: https://lispcast.com/why-do-i-like-denotational-design/
For audio, video, and text transcripts: https://lispcast.com/what-is-the-difference-between-a-domain-model-and-business-rules/
For audio, video, and text transcripts: https://lispcast.com/what-is-the-curse-of-lisp/
For audio, video, and text transcripts: https://lispcast.com/what-is-an-abstraction-barrier/
For audio, video, and text transcripts: https://lispcast.com/in-the-onion-architecture-how-do-you-make-business-decisions-that-rely-on-information-from-actions/
For audio, video, and text transcripts: https://lispcast.com/can-you-use-types-with-data-orientation/
For audio, video, and text transcripts: https://lispcast.com/what-is-the-benefit-of-data-orientation/
For audio, video, and text transcripts: https://lispcast.com/what-kind-of-software-is-functional-programming-not-suited-for/
For audio, video, and text transcripts: https://lispcast.com/grokking-simplicity-launch/
For audio, video, and text transcripts: https://lispcast.com/what-is-the-difference-between-parallelism-and-concurrency/
For audio, video, and text transcripts: https://lispcast.com/how-do-you-develop-algebraic-thinking/
For audio, video, and text transcripts: https://lispcast.com/what-is-so-great-about-object-oriented-programming/
For audio, video, and text transcripts: https://lispcast.com/why-should-you-throw-away-all-of-your-code/
For audio, video, and text transcripts: https://lispcast.com/how-does-making-something-first-class-give-you-power/
For audio, video, and text transcripts: https://lispcast.com/is-there-a-silver-bullet-for-software-part-2/
For audio, video, and text transcripts: https://lispcast.com/is-there-a-silver-bullet-for-software-development-part-1/
For audio, video, and text transcripts: https://lispcast.com/why-getters-and-setters-are-terrible/
For audio, video, and text transcripts: https://lispcast.com/why-taming-complex-software/
For audio, video, and text transcripts: https://lispcast.com/3-examples-of-algebraic-thinking/
For audio, video, and text transcripts: https://lispcast.com/what-is-a-higher-order-function/
For audio, video, and text transcripts: https://lispcast.com/the-3-levels-of-functional-thinking/
For audio, video, and text transcripts: https://lispcast.com/what-is-functional-thinking/
For audio, video, and text transcripts: https://lispcast.com/we-make-information-systems/
For audio, video, and text transcripts: https://lispcast.com/how-to-distinguish-between-commutativity-and-associativity/
For audio, video, and text transcripts: https://lispcast.com/why-side-effecting-is-not-all-bad/
For audio, video, and text transcripts: https://lispcast.com/what-is-an-inverse-and-why-is-it-useful/
For audio, video, and text transcripts: https://lispcast.com/how-is-haskell-faster-than-c/
For audio, video, and text transcripts: https://lispcast.com/why-am-i-podcasting-about-functional-programming/
For audio, video, and text transcripts: https://lispcast.com/is-your-layer-of-indirection-actually-useful/
For audio, video, and text transcripts: https://lispcast.com/what-a-monoid-is-and-why-monoids-kick-monads-butt/
For audio, video, and text transcripts: https://lispcast.com/how-do-you-implement-lazy-evaluation/
For audio, video, and text transcripts: https://lispcast.com/how-is-recursion-like-a-for-loop/
For audio, video, and text transcripts: https://lispcast.com/why-do-programmers-put-up-with-so-much-pain/
For audio, video, and text transcripts: https://lispcast.com/can-you-always-find-a-layer-of-meaning-in-which-your-problem-is-easier/
For audio, video, and text transcripts: https://lispcast.com/what-is-referential-transparency/
For audio, video, and text transcripts: https://lispcast.com/why-you-shouldnt-hide-your-data/
For audio, video, and text transcripts: https://lispcast.com/what-are-higher-order-functions/
For audio, video, and text transcripts: https://lispcast.com/what-is-function-composition/
For audio, video, and text transcripts: https://lispcast.com/what-does-it-mean-for-a-function-to-have-a-zero/
For audio, video, and text transcripts: https://lispcast.com/what-is-a-functions-identity/
For audio, video, and text transcripts: https://lispcast.com/why-do-promises-make-async-javascript-better-than-callbacks/
For audio, video, and text transcripts: https://lispcast.com/what-are-first-class-functions/
For audio, video, and text transcripts: https://lispcast.com/where-to-find-time-to-learn-functional-programming/
For audio, video, and text transcripts: https://lispcast.com/do-locks-slow-down-your-code/
For audio, video, and text transcripts: https://lispcast.com/what-is-commutativity-and-why-is-it-so-useful-in-distributed-systems/
For audio, video, and text transcripts: https://lispcast.com/what-is-associativity-and-why-is-it-useful-in-parallel-programming/
For audio, video, and text transcripts: https://lispcast.com/what-are-timelines-and-what-do-they-have-to-do-with-functional-programming/
For audio, video, and text transcripts: https://lispcast.com/cheap-or-free-functional-programming-for-your-team/
For audio, video, and text transcripts: https://lispcast.com/what-is-recursion-and-when-should-i-use-it/
For audio, video, and text transcripts: https://lispcast.com/what-are-concurrency-and-parallelism/
For audio, video, and text transcripts: https://lispcast.com/how-to-apply-the-onion-architecture/
For audio, video, and text transcripts: https://lispcast.com/how-do-you-create-a-semantic-base-layer/
For audio, video, and text transcripts: https://lispcast.com/tension-between-data-and-entity/
For audio, video, and text transcripts: https://lispcast.com/is-react-functional-programming/
For audio, video, and text transcripts: https://lispcast.com/is-there-always-a-way-to-implement-an-algorithm-without-mutable-state/
For audio, video, and text transcripts: https://lispcast.com/what-is-the-universal-process-pattern/
For audio, video, and text transcripts: https://lispcast.com/what-is-the-onion-architecture/
For audio, video, and text transcripts: https://lispcast.com/more-about-stratified-design/
For audio, video, and text transcripts: https://lispcast.com/why-is-functional-programming-gaining-traction-why-now/
For audio, video, and text transcripts: https://lispcast.com/some-thoughts-on-map-filter-and-reduce/
For audio, video, and text transcripts: https://lispcast.com/what-do-functional-programmers-think-of-the-class-inheritance-hierarchy/
For audio, video, and text transcripts: https://lispcast.com/why-do-functional-programmers-focus-on-time/
For audio, video, and text transcripts: https://lispcast.com/what-is-to-reify-in-software/
For audio, video, and text transcripts: https://lispcast.com/why-do-functional-programmers-model-things-as-data/
For audio, video, and text transcripts: https://lispcast.com/sources-of-complexity-in-software/
For audio, video, and text transcripts: https://lispcast.com/how-do-we-represent-relationships-in-functional-programming/
For audio, video, and text transcripts: https://lispcast.com/single-responsibility-principle-for-functional-programming/
For audio, video, and text transcripts: https://lispcast.com/layered-design-in-functional-programming/
For audio, video, and text transcripts: https://lispcast.com/keeping-functional-code-organized/
For audio, video, and text transcripts: https://lispcast.com/how-to-create-a-habit-of-reuse/
For audio, video, and text transcripts: https://lispcast.com/the-easiest-way-to-make-your-existing-code-more-functional/
For audio, video, and text transcripts: https://lispcast.com/how-does-fp-achieve-reuse/
For audio, video, and text transcripts: https://lispcast.com/why-are-actions-hard-to-test-by-definition/
For audio, video, and text transcripts: https://lispcast.com/how-do-things-compose-across-domains/
For audio, video, and text transcripts: https://lispcast.com/is-functional-programming-declarative/
For audio, video, and text transcripts: https://lispcast.com/how-can-you-work-with-a-json-value-if-you-know-nothing-about-it/
For audio, video, and text transcripts: https://lispcast.com/is-the-little-typer-the-static-typing-book-ive-been-waiting-for/
For audio, video, and text transcripts: https://lispcast.com/something-i-missed-in-rich-hickeys-last-keynote-clojure-conj-2017/
For audio, video, and text transcripts: https://lispcast.com/are-categories-design-patterns/
For audio, video, and text transcripts: https://lispcast.com/why-is-making-something-first-class-the-key-to-expressivity/
For audio, video, and text transcripts: https://lispcast.com/how-can-pure-functions-represent-state-change/
For audio, video, and text transcripts: https://lispcast.com/how-is-a-cook-like-functional-programming/
For audio, video, and text transcripts: https://lispcast.com/what-is-the-primary-superpower-of-functional-programmers/
For audio, video, and text transcripts: https://lispcast.com/does-functional-programming-have-an-answer-for-everything/
For audio, video, and text transcripts: https://lispcast.com/what-does-it-mean-to-compose-in-functional-programming/
For audio, video, and text transcripts: https://lispcast.com/reduce-complexity-at-every-step/
For audio, video, and text transcripts: https://lispcast.com/why-is-functional-programming-more-expressive/
For audio, video, and text transcripts: https://lispcast.com/what-does-it-mean-for-programs-to-be-built-using-whole-values/
For audio, video, and text transcripts: https://lispcast.com/how-is-functional-programming-like-grocery-shopping/
For audio, video, and text transcripts: https://lispcast.com/divide-and-conquer-algorithms/
For audio, video, and text transcripts: https://lispcast.com/the-3-most-important-idea-in-computer-science/
For audio, video, and text transcripts: https://lispcast.com/the-2-most-important-idea-in-computer-science/
For audio, video, and text transcripts: https://lispcast.com/what-is-the-business-value-of-clojure/
For audio, video, and text transcripts: https://lispcast.com/the-1-most-important-idea-in-computer-science/
For audio, video, and text transcripts: https://lispcast.com/is-smalltalk-a-functional-language-is-lisp-object-oriented/
For audio, video, and text transcripts: https://lispcast.com/why-do-we-need-a-theory-of-functional-programming/
For audio, video, and text transcripts: https://lispcast.com/my-big-beef-with-refactoring/
For audio, video, and text transcripts: https://lispcast.com/build-your-core-abstraction/
For audio, video, and text transcripts: https://lispcast.com/focus-on-composition-first/
For audio, video, and text transcripts: https://lispcast.com/build-an-interface-around-data/
For audio, video, and text transcripts: https://lispcast.com/how-variants-can-reduce-complexity/
For audio, video, and text transcripts: https://lispcast.com/why-are-corner-cases-the-devil-%f0%9f%98%88/
For audio, video, and text transcripts: https://lispcast.com/what-will-increase-your-programming-productivity-the-most/
For audio, video, and text transcripts: https://lispcast.com/a-cool-functional-programming-pattern-do-you-know-what-to-call-it/
For audio, video, and text transcripts: https://lispcast.com/can-you-do-functional-programming-in-any-language/
For audio, video, and text transcripts: https://lispcast.com/what-does-it-mean-for-actions-to-be-first-class/
For audio, video, and text transcripts: https://lispcast.com/is-fp-just-programming-with-pure-functions/
For audio, video, and text transcripts: https://lispcast.com/algebraic-properties-composition/
For audio, video, and text transcripts: https://lispcast.com/algebraic-properties-composition/
For audio, video, and text transcripts: https://lispcast.com/bottom-vs-top-programming/
For audio, video, and text transcripts: https://lispcast.com/clojure-web-framework-might-look-like/
For audio, video, and text transcripts: https://lispcast.com/theory-functional-programming-0006/
For audio, video, and text transcripts: https://lispcast.com/clojure-needs-grow-boring-web-framework-boring-data-science/
For audio, video, and text transcripts: https://lispcast.com/theory-functional-programming-0005/
For audio, video, and text transcripts: https://lispcast.com/theory-functional-programming-0004/
For audio, video, and text transcripts: https://lispcast.com/theory-functional-programming-0003/
For audio, video, and text transcripts: https://lispcast.com/theory-functional-programming-0002/
For audio, video, and text transcripts: https://lispcast.com/theory-functional-programming-0001/