{"id":23029642,"url":"https://github.com/antononcube/softwaredesignmethodswithwl-book","last_synced_at":"2026-01-16T00:30:03.805Z","repository":{"id":71383966,"uuid":"199208751","full_name":"antononcube/SoftwareDesignMethodsWithWL-book","owner":"antononcube","description":"Chapters, code, and organizational materials for the book \"Software Design Methods with Wolfram Language\".","archived":false,"fork":false,"pushed_at":"2024-10-16T20:09:15.000Z","size":2377,"stargazers_count":8,"open_issues_count":0,"forks_count":1,"subscribers_count":4,"default_branch":"master","last_synced_at":"2025-04-02T20:32:56.740Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Mathematica","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/antononcube.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2019-07-27T20:05:27.000Z","updated_at":"2024-10-16T20:09:19.000Z","dependencies_parsed_at":null,"dependency_job_id":"501c4e8e-aced-41ec-95d6-5efcd49db99b","html_url":"https://github.com/antononcube/SoftwareDesignMethodsWithWL-book","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/antononcube/SoftwareDesignMethodsWithWL-book","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/antononcube%2FSoftwareDesignMethodsWithWL-book","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/antononcube%2FSoftwareDesignMethodsWithWL-book/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/antononcube%2FSoftwareDesignMethodsWithWL-book/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/antononcube%2FSoftwareDesignMethodsWithWL-book/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/antononcube","download_url":"https://codeload.github.com/antononcube/SoftwareDesignMethodsWithWL-book/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/antononcube%2FSoftwareDesignMethodsWithWL-book/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28474504,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-16T00:15:39.755Z","status":"ssl_error","status_checked_at":"2026-01-16T00:15:32.174Z","response_time":62,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-12-15T14:16:29.689Z","updated_at":"2026-01-16T00:30:03.782Z","avatar_url":"https://github.com/antononcube.png","language":"Mathematica","funding_links":[],"categories":[],"sub_categories":[],"readme":"# \"Software Design Methods with Wolfram Language\" book\n\nThis repository has chapters, code, and organizational materials for the book \n\"Software Design Methods with Wolfram Language\".\n\n***The book is not finished yet -- it is a work in progress...***   \n\n## In brief\n\nThe goal of this book is to show how to apply several popular methodologies for software design with Wolfram Language (WL).\n\nWL is a general, multi-paradigm programming language. WL is mostly a functional programming language, but \nit also can be used in a procedural and Object-Oriented Programming (OOP) manner. \nOf course, since WL is functional it can be also easily used for the creation of Domain Specific Languages (DSL's). \n\nThis book gives concrete directions how to do OOP, Monadic Programming, and DSL designs with WL. \nConcrete examples are presented and discussed.\n\nThe creation of call graphs and Universal Modeling Language (UML) diagrams is also discussed.\n\n## Mission statement\n\nThis book primary goal is to give concrete technical guidance for the application and utilization in \n[WL](https://en.wikipedia.org/wiki/Wolfram_Language) \nof \n[OOP Design Patterns](https://en.wikipedia.org/wiki/Design_Patterns) and\n[Monadic Programming](https://en.wikipedia.org/wiki/Monad_(functional_programming).\nAdditional goals are to give directions for making\n[DSL's](https://en.wikipedia.org/wiki/Domain-specific_language)\nand analyze code with code derived dependency graphs and UML diagrams.\n\n## What to read?\n\nGenerally speaking, this book assumes a certain level of programming and mathematical maturity of the readers\nand (post-beginner to) intermediate level mastery of WL.\n\nPart 1, \"Overview and general directions\", overviews and discusses the relationships between the different\ntopics and material of this book. (This README file is the same as the \"Overview\" chapter. )\n\nPart 2, \"Object Oriented Programming Design Patterns\", should be of interest to readers who know and have applied\nOOP Design Patterns. For readers not familiar with OOP and Design Patterns it is better to skip Part 2.\nThe rest of the book -- Monadic Programming, DSL's, call graphs -- is largely independent of Part 2.\n\nPart 3, \"Monadic Programming\", gives all theoretical knowledge and practical know-how to design and use software monads.\nA good preliminary read for Part 3 is \\[PW1\\].\n\nPart 4, \"Domain Specific Languages\", has a DSL making overview chapter that is an easy read. \nThe rest of the Part 4 chapters are more technical.\n\nPart 5, \"Additional topics\", has chapters that might be of general interest and although related\nto the rest of the book largely independent from it.\n\nPart 6, \"Example applications\", discusses non-trivial examples of utilizing OOP Design Patterns and Monadic Programming. \n\nExcept Part 6 all other book parts can be read independently.\n\n## Comparisons with other programming languages\n\nThe main parts of the book have (brief) comparisons with other programming languages.\n\n[R](https://www.r-project.org) is the language used in most comparisons. \nIn general, it is natural to compare R with WL over both OOP and Monadic Programming. \n\n## Code\n\n### OOP Design patterns\n\nThe application and utilization of OOP Design Patterns in WL is given as a discipline to follow using the built-in\nWL functionalities. I.e. without the support or facilitation of any additional code. \n(Other efforts to use OOP in WL do tend to use supporting code.)  \n\nThe application of OOP Design Patterns is exemplified with:\n \n - elements of [`NIntegrate`'s implementation](https://reference.wolfram.com/language/tutorial/NIntegrateOverview.html), and\n   \n - the package [\"GitHubDataObjects.m\"](https://github.com/antononcube/MathematicaForPrediction/blob/master/Misc/GitHubDataObjects.m), [AAp2], (that should be compared with [AAp1].)\n\n### Monadic Programming\n\nThe proposed style of Monadic Programming in WL is supported with the package \n[\"StateMonadCodeGenerator.m\"](https://github.com/antononcube/MathematicaForPrediction/blob/master/MonadicProgramming/StateMonadCodeGenerator.m),\n\\[AAp3\\], that allows monad code generation.\n\nThe package \n[\"MonadicTracing.m\"](https://github.com/antononcube/MathematicaForPrediction/blob/master/MonadicProgramming/MonadicTracing.m),\n\\[AAp4\\], demonstrates:\n \n - how to trace the execution of monad pipelines, and \n \n - how to delegate the functionalities of a monad to another \"decorating\" monad. \n\n### DSL's\n\nThe making of DSL's is facilitated (to a point) with the package \n[\"FunctionalParsers.m\"](https://github.com/antononcube/MathematicaForPrediction/blob/master/FunctionalParsers.m), \n\\[AAp5\\], that gives the ability to program or generate parsers for a wide variety of grammars. \n \n### Dependency graphs\n\nWL's [reflection](https://en.wikipedia.org/wiki/Reflection_(computer_programming))\ncapabilities are utilized to facilitate the examination and analysis of WL code with:\n \n- a package to make [Universal Modeling Language (UML)](https://en.wikipedia.org/wiki/Unified_Modeling_Language) \ndiagrams, \\[AAp6\\], and   \n\n- a package to make dependency call graphs, \\[AAp7\\].\n\n## Videos\n\nBelow are given links to several videos with presentations that discuss the central topics in this book. \n\n- [\"Object-Oriented Design Patterns\"](https://www.youtube.com/watch?v=4Q6hOx63b08).\n\n- [\"Monadic Programming: With Application to Data Analysis, Machine Learning and Language Processing\"](https://www.youtube.com/watch?v=_cIFA5GHF58).\n\n- [\"Voice-Grammar-Compute-Communicate: Take Control of Your Health Data\"](https://www.youtube.com/watch?v=_rI1RxkeAcA).\n\n## Additional comments\n\n- More adequate titles for the book might be:\n\n  - \"Popular Software Design Methods with Wolfram Language\", or\n\n  - \"Elements of Software Design using Wolfram Language\".\n \n- The current title can be used if book's contents is extended. (I have no plans for that though.)\n\n- At this point I do not use OOP Design Patterns that often when programming in WL. \nThis is largely because:\n \n  - the \"data science industry\" increasingly relies more on the functional programming paradigm;\n  \n  - I program most of the time in R (and R has a nice OOP system);\n  \n  - the use of monadic programming provides a lot of the benefits of OOP Design Patterns.\n   \n- The first versions of most of the chapters were written as blog posts to \n[MathematicaForPrediction at WordPress](https://mathematicaforprediction.wordpress.com) or \n[MathematcaStackExchange](https://mathematica.stackexchange.com). \n\n## References\n\n### OOP Design patterns related\n\n[CA1] Christopher Alexander et al., The Oregon Experiment, Oxford University Press, 1975.\n\n[CA2] Christopher Alexander et al., A Pattern Language - Towns, Buildings, Construction, Oxford University Press, 1977.\n\n[CA3] Christopher Alexander, The Timeless Way of Building, Oxford University Press, 1979.\n\n[GoF] Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides, Design Patterns: Elements of Reusable Object-Oriented Software, Addison-Wesley, 1994.\n\n[AAp1] Anton Antonov, \n[GitHubPlots Mathematica package](https://github.com/antononcube/MathematicaForPrediction/blob/master/Misc/GitHubPlots.m),\n(2015), \n[MathematicaForPrediction at GitHub](https://github.com/antononcube/MathematicaForPrediction).\n\n[AAp2] Anton Antonov, \n[GitHubObjects Mathematica package](https://github.com/antononcube/MathematicaForPrediction/blob/master/Misc/GitHubDataObjects.m),\n(2015), \n[MathematicaForPrediction at GitHub](https://github.com/antononcube/MathematicaForPrediction).\n\n### Monadic Programming related\n\n[PW1] Philip Wadler, \"The essence of functional programming\", (1992), \n19'th Annual Symposium on Principles of Programming Languages, Albuquerque, New Mexico, January 1992.\n\n[AAp3] Anton Antonov,\n[State monad code generator Mathematica package](https://github.com/antononcube/MathematicaForPrediction/blob/master/MonadicProgramming/StateMonadCodeGenerator.m),\n(2017),\n[MathematicaForPrediction at GitHub](https://github.com/antononcube/MathematicaForPrediction).\n\n[AAp4] Anton Antonov,\n[Monadic tracing Mathematica package](https://github.com/antononcube/MathematicaForPrediction/blob/master/MonadicProgramming/MonadicTracing.m),\n(2017),\n[MathematicaForPrediction at GitHub](https://github.com/antononcube/MathematicaForPrediction).\n\n### DSL making related\n\n[AAp5] Anton Antonov,\n[Functional parsers Mathematica package](https://github.com/antononcube/MathematicaForPrediction/blob/master/FunctionalParsers.m),\n(2014),\n[MathematicaForPrediction at GitHub](https://github.com/antononcube/MathematicaForPrediction).\n\n### Code analysis related\n\n[AAp6] Anton Antonov, \n[UML Diagram Generation Mathematica package](https://github.com/antononcube/MathematicaForPrediction/blob/master/Misc/UMLDiagramGeneration.m),\n(2016),\n[MathematicaForPrediction at GitHub](https://github.com/antononcube/MathematicaForPrediction).\n\n[AAp7] Anton Antonov,\n[Call graph generation for context functions Mathematica package](https://github.com/antononcube/MathematicaForPrediction/blob/master/Misc/CallGraph.m),\n(2018),\n[MathematicaForPrediction at GitHub](https://github.com/antononcube/MathematicaForPrediction).\n\n \n-----\nAnton Antonov   \nWindermere, Florida, USA   \n2019-07-27\n\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fantononcube%2Fsoftwaredesignmethodswithwl-book","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fantononcube%2Fsoftwaredesignmethodswithwl-book","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fantononcube%2Fsoftwaredesignmethodswithwl-book/lists"}