I develop a programmable operating system with beginner-friendly building blocks. I develop a game to teach programming of the operating system and to get acquainted with programming in general.
It does not matter, what you plan to do for a living, you will encounter the computer.
Computers are inevitable, but they are not as useful as they could be. The usability of computers is limited by the hardware and by the software running on the hardware.
There are less and less hardware limitations. The most notable hardware improvements recently were the addition of wireless network interfaces, better screen resolution and more colors, touchscreen, camera, more computing power and memory, faster storage, shrinking size and less power consumption.
The real limitation is the software which is running on the hardware.
Current software has notable shortcomings:
Users have little feedback about what is happening when they use the computer. For example, most users don’t know why their computer is slow when they feel so. Users who are brave enough to look into their computers find too many details which is above the complexity level which they can handle.
Even if users know what the software does, they cannot restrict or alter its behaviour.
Users are not able to collect and visualize public data themselves to make decisions; they consume data processed by agents with conflicting interests.
Everyday tasks cannot be done by default, without involving an unrelated third party.
Some examples are the following:
Involving an unrelated third party in an everyday task is a problem, because:
Regular mass data breaches became the new norm. User data accumulated by a third party is an attractive target in the cyber-space.
Although privacy of individuals is promised to be respected by anonymization of users, this is not true for communities. Community privacy is not protected by anonymization. For example, people in a specific state and/or with a distinct political orientation can be targeted. Collecting data about communities without anonymizing the community is legal and it can be used for manipulating the community.
Profit-oriented companies are counter-interested in making transparent software for users. They are interested in user lock-in and monetizing user data. But users can lift software limitations themselves if they have programming literacy.
Current software systems are so complex that it’s hard to change them even for professional programmers. How users could lift software limitations themselves?
I believe that software complexity can be greatly reduced by using the right structures. For example, multiplication is much easier with decimal numbers instead of Roman numerals.
This animated gif is just an illustration of a 5 orders of magnitudes difference (x 100000) between the size of an algorithm and its extension. The size of the gif file is 1595925 byte but it was produced by a 16 byte long dos program.
Asking the right questions helps to find the right structures for programming.
I believe the right questions are the following:
I take the challenge to find practical answers to these questions such that everyone could be a programmer.
I am a mathematician and a computer scientist who taught programming for lots of students and who also has programming experience in large-scale industrial projects (look at my CV).
Besides finding the right structures I take attention on the following aspects which are equally important for programming literacy:
With predefined building blocks beginners can experience success and get into flow. Building blocks can be replaced by smaller ones as users level-up in programming knowledge.
Exercises with the right level of difficulty is the key for teaching. I develop a mobile game for teaching programming for children.
I don’t want to lift software limitations myself.
My goal is to make programming common knowledge.
I am not against profit-oriented software companies and professional programmers.
They are vital in making software for healthcare, transportation, scientific computations, administration, household devices, games etc.
It is a good motivation to learn programming for a living.
I don’t want everyone to be a programmer.
I want to give the possibility to gradually get acquainted with programming along the following dimensions:
automation | no automation (no programming) is the default from which one can make steps towards full automation |
optimization | more optimal solutions with more effort |
depth | go down to the grounds within the same language |
Here I answer the question: What is an algorithm?
Reduce code complexity by restructuring (case study)
As a case study, I reduce the code complexity of the one-line text editor with categorical combinators.
If you are interested about the project history, read the monthly summary.