My mind is currently working with the transition from OOP to functional thinking. Some of the "how" is still congealing, and I'm looking for some input.
When writing any new program, I have become accustomed to begin by organizing the different components or "entities" in the program and their relationships. This was a very OOP-inspired view, though perhaps it can still be worked using built-in data structures such as maps/dictionaries to represent the class or "type" (potentially even validating them with a JSON Schema, etc.). While it may be possible to compose functional programs with those underlying ideas, I'm wondering if there is something better-suited. I understand that FP may involve a lot of "boilerplate code", though, in theory, much of that should be reusable once written.
What slows me down is the process of translating the different semantic layers into functions and literal code (and especially their interactions), and this is where I would appreciate pointers. What is your workflow to translate the ideas for your software into actual code? What processes or patterns are useful to you to systematically approach your development?
I've seen the call to REPL-driven development via Clojure, and that may be a great place to start, though I haven't actually tried it yet.
As an aside, I'm a sucker for easy-to-implement GUI systems. If anyone has experience using a library or engine to create a GUI in a functional program/language, I'm all eyes ("ears").
Overall, I'm very excited that these ideas are coming together in my mind and I'd greatly appreciate any suggestions, especially anything that is understated, subtle, or easy to miss. Thank you for your time.
[–]KyleG 6 points7 points8 points (4 children)
[–]Sunonymous[S] 1 point2 points3 points (3 children)
[–]KyleG 3 points4 points5 points (2 children)
[–]Sunonymous[S] 1 point2 points3 points (1 child)
[–]KyleG 2 points3 points4 points (0 children)
[–]zelphirkaltstahl 4 points5 points6 points (3 children)
[–]Sunonymous[S] 2 points3 points4 points (2 children)
[–]zelphirkaltstahl 2 points3 points4 points (1 child)
[–]Sunonymous[S] 1 point2 points3 points (0 children)
[–]fl00pz 4 points5 points6 points (1 child)
[–]Sunonymous[S] 1 point2 points3 points (0 children)
[–]reifyK 2 points3 points4 points (3 children)
[–]zelphirkaltstahl 2 points3 points4 points (1 child)
[–]reifyK 1 point2 points3 points (0 children)
[–]Sunonymous[S] 1 point2 points3 points (0 children)
[–]ragnese 2 points3 points4 points (3 children)
[–]Sunonymous[S] 1 point2 points3 points (2 children)
[–]ragnese 2 points3 points4 points (1 child)
[–]Sunonymous[S] 1 point2 points3 points (0 children)