This site is work in progress. Expect incomplete content, etc, etc.
_ _ _ _ _ _ _
___ _ __ ___ __ _| |_(_)_ _____ ___ _ __ (_)_ __(_) |_ | |_ ___ ___ | |__
/ __| '__/ _ \/ _` | __| \ \ / / _ \/ __| '_ \| | '__| | __|| __/ _ \/ __|| '_ \
| (__| | | __/ (_| | |_| |\ V / __/\__ \ |_) | | | | | |_ | || __/ (__ | | | |
\___|_| \___|\__,_|\__|_| \_/ \___||___/ .__/|_|_| |_|\__(_)__\___|\___||_| |_|
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, 2001. Design Principles Behind 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
- 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 about it.