creativespirit.tech/content/index.md

68 lines
3.6 KiB
Markdown
Raw Permalink Normal View History

2022-06-02 09:29:14 +00:00
### Home
>If a system is to serve the creative spirit, it must be entirely comprehensible to a single individual. The point here is that the human potential manifests itself in individuals.
(**[Alan Kay](https://www.youtube.com/watch?v=NdSD07U5uBs&t=79s)**, 2001. Design Principles Behind [SmallTalk](https://en.wikipedia.org/wiki/Smalltalk).)
### What is "Creative Spirit Tech" about?
As many do, I also make some exploration of tech topics, that are of interest to me. I created this space to share this exploration.
### What is the question you are exploring now?
Here it is:
> How can a single individual develop, maintain and operate software in the long run, using the mainstream tech of the day?
#### Why bother with this question?
Being able to create and operate software in the long run, with minimal resources has many benefits (use your imagination).
#### What do you mean by a "single individual"?
It means that one person should be able to handle the cognitive complexity of all technical aspects of the software.
In oder words, it should be realistic for a single programmer to work with the whole tech stack. For e.g. a web app it could encompass e.g os - to web server - to app - to deployment - to evolving.
"Single individual" does not imply that it should really always be only one (and the same) person doing it.
#### You are a single individual exploring this. You can't possibly be playing with too many kinds of apps! So what do you have?
I'm currently exploring web apps.
#### What aspects of the web app should be comprehesible and doable by a single person?
The aspects include, among others, the following:
- architecture & design
- implementation, including the frontend and backend if such a distinction makes sense for the architecture at hand
- maintenance: extending, changing, bugfixing
- operation:
* setting up the operation system, web server, reverse proxy if necessary, etc, etc.
* deployment of the app and all related services, including e.g. relational database, etc, etc.
* Upgrading versions of the app, project dependencies, related services, operation system, etc, etc.
#### What architectural or design principles could be extracted from the constrains we set (e.g. comprehensible by a single person, running long term, etc, etc)?
I'd suggest these for a start:
* **Optimize for cognitive ease**.
* **Serve a purpose, not a paradigm**. E.g. no OOP for the sake of OOP, but only if it fits a specific case best.
* Use a multiparadigm language
* **Make heavy use of built in language features and standard library. Avoid dependencies as much as it makes sense**.
* **When using dependencies, prefer more simple and generic ones**. E.g. preferably compose your web app of a simple, generic routing library, login module, etc, etc instead of going for an all-in, heavy-weight web framework.
#### What tech stack options are you exploring?
- For static site generation, markdown + simple scripts to convert to HTML
- For dynamic sites, lightweight server like e.g. Flask + lightweight approach to js, e.g. HTMX. All that nicely served by e.g. Nginx/Ubuntu.
#### What is your method of exploration?
It's certainly includes some amount of reading and thinking.
But I envision it to also include a set of (FOSS) projects, that anyone interested could use as they wish:
- to explore the question
- to review the tech implementation
- or even use as a sort of template for own projects if they wish so.
#### Show me some code
A simple example could be the code for this very site.
Please check the [blog post](blog/site_generator.md) about it.