How to design functions so they can be part of other larger systems?

Hi Folks, I read this statement by Tim Berners-Lee [1]: It is not only necessary to make sure your own system is designed to be made of modular parts. It is also necessary to realize that your own system, no matter how big and wonderful it seems now, should always be designed to be a part of another larger system. Recently I have been working hard to learn how to better modularize. But now TBL says that I must do more - I must not only modularize well, but I must also build the modules so that they can be part of other larger systems. How do I design modules so that they may be part of other larger systems? Are there any articles that give guidelines on how to do this? What are your thoughts on how to do this? /Roger [1] http://www.w3.org/DesignIssues/Principles.html

On 03/24/2013 10:30 AM, Costello, Roger L. wrote:
Hi Folks,
I read this statement by Tim Berners-Lee [1]:
It is not only necessary to make sure your own system is designed to be made of modular parts. It is also necessary to realize that your own system, no matter how big and wonderful it seems now, should always be designed to be a part of another larger system.
Recently I have been working hard to learn how to better modularize. But now TBL says that I must do more - I must not only modularize well, but I must also build the modules so that they can be part of other larger systems.
How do I design modules so that they may be part of other larger systems? Are there any articles that give guidelines on how to do this? What are your thoughts on how to do this?
I recommend that you read the following post I wrote: http://www.haskellforall.com/2012/08/the-category-design-pattern.html It introduces category theory in the context of designing modular and resuable components. Category theory differentiates itself from other vague notions of modularity by providing an elegant and precise definition of what it means for something to be "modular".
/Roger
[1] http://www.w3.org/DesignIssues/Principles.html
_______________________________________________ Beginners mailing list Beginners@haskell.org http://www.haskell.org/mailman/listinfo/beginners

This is a great bridge article, thanks!
On 2013-03-24 10:45 AM, "Gabriel Gonzalez"
On 03/24/2013 10:30 AM, Costello, Roger L. wrote:
Hi Folks,
I read this statement by Tim Berners-Lee [1]:
It is not only necessary to make sure your own system is designed to be made of modular parts. It is also necessary to realize that your own system, no matter how big and wonderful it seems now, should always be designed to be a part of another larger system.
Recently I have been working hard to learn how to better modularize. But now TBL says that I must do more - I must not only modularize well, but I must also build the modules so that they can be part of other larger systems.
How do I design modules so that they may be part of other larger systems? Are there any articles that give guidelines on how to do this? What are your thoughts on how to do this?
I recommend that you read the following post I wrote:
http://www.haskellforall.com/**2012/08/the-category-design-**pattern.htmlhttp://www.haskellforall.com/2012/08/the-category-design-pattern.html
It introduces category theory in the context of designing modular and resuable components. Category theory differentiates itself from other vague notions of modularity by providing an elegant and precise definition of what it means for something to be "modular".
/Roger
[1] http://www.w3.org/**DesignIssues/Principles.htmlhttp://www.w3.org/DesignIssues/Principles.html
______________________________**_________________ Beginners mailing list Beginners@haskell.org http://www.haskell.org/**mailman/listinfo/beginnershttp://www.haskell.org/mailman/listinfo/beginners
______________________________**_________________ Beginners mailing list Beginners@haskell.org http://www.haskell.org/**mailman/listinfo/beginnershttp://www.haskell.org/mailman/listinfo/beginners

On Mon, Mar 25, 2013 at 12:30 AM, Costello, Roger L.
How do I design modules so that they may be part of other larger systems? Are there any articles that give guidelines on how to do this? What are your thoughts on how to do this?
For a rare piece of insight, you could start here: http://lukepalmer.wordpress.com/2010/11/23/encapsulation-considered-harmful/ There's also the following nugget here [1]: "A language “is reusable” (to abuse language a bit) if code written in that language can be easily reused. This “obvious” statement is hiding something very important; namely, reused how? For what? We are in an unfortunate situation in programming: code is designed to be reused in a particular way, and if you want to reuse it in a different way you are pretty much out of luck. An OO widget library is designed for the addition of new types of widgets, but if you want to reuse a program written in the library on a new platform you are in for a lot of work. A functional drawing library is designed so that you can transform and export your drawings in an open-ended variety of ways, composing new ways out of old ones; but if you need to draw a circle you have to build it out of lines, even if there is a much better way to draw a circle on your target. (This is essentially the expression problem)." Many Haskellers take after Knuth: "I also must confess to a strong bias against the fashion for reusable code. To me, “re-editable code” is much, much better than an untouchable black box or toolkit." Hence the proliferation of similar packages on Hackage. [1] http://lukepalmer.wordpress.com/2011/09/15/my-paradigm-is-better-than-your-p... -- Kim-Ee
participants (4)
-
Costello, Roger L.
-
Darren Grant
-
Gabriel Gonzalez
-
Kim-Ee Yeoh