Philosophy

Mindset

An important mindset to have I think is that of an engineer: a problem solving mindset. We are humans, we make mistakes and sometimes these mistakes can bring an awful lot of suffering to the world. The response to making mistakes is often to get angry and blame the people responsible for those mistakes, even though most of the time it is not even possible to blame a single individual, as the world is complicated and problems arise as a result of many different factors combined and out of anyone's control. Furthermore, blaming people doesn't come without its own problem: it creates negative emotions in people to try to change their behavior. These are emotions such as shame, guilt and fear and can often be very effective at manipulating behavior. I think there is a better, healthier way to live life, and that is to live with a problem solving mindset. This means abandoning the outdated, primitive shame-based responses, which do more harm than good. So, rather than manipulating people with negative emotions, it is much better to focus on solving problems by using positive emotions and reason. In short, focus on problem solving and use positive experiences such as excitement, interest and curiosity as motivation, instead of negative emotions such as shame, guilt and fear.

It is important to note that when problems are caused by the behavior of other people, it should not be tabboo to point out the negative consequences of that behavior. Pointing out these consequences with the intention to help reduce suffering in the world is not the same thing as blaming, shunning or punishing people and is a crucial step of solving problems. If this is not allowed, then problems that are big enough can only grow and can never be solved.

I found this article from Wait But Why very resonating, when it comes to this mindset. It talks about two different kind of mentalities and how they form two different kinds of groups: idea labs and echo chambers. Via this site, I also found an incredible youtube channel, TheraminTrees, focusing on issues regarding psychology and mental health.

Understanding

Solving problems can be described as trying to understand the situation as best you can, and then to use your knowledge and ingenuity to come up with a solution that improves the situation. With regards to knowledge and ingenuity, it is useful to study the relevant subject matter deeply and create your own "toolbox" to solve problems with. In mathematics, these are tools such as the Pythagorean theorem and the dot product. When it comes to understanding the situation, it is of course useful to ask what the situation looks like, but I find it more useful to ask the question: why? This is because these questions lead to a deep understanding of the subject matter, which enables you to solve other related problems much more easily. It also gives you good reasons to do something a certain way and these reasons can be much more convincing.

One example of such a why question is the question Isaac Newton likely asked himself: why do objects fall?. Rather than stopping at just stating that objects fall to the earth at 9.8 meters per second per second, it is much more useful to seek a deeper explanation: mass attracts other mass, with a force following the law of gravitation: F=G*m₁*m₂/r². Together with Newton's laws of motion, we can predict not only how an apple falls from a tree, but also how the planets move around the sun. Using this deeper understanding we are able to do things that we would otherwise not been able to do, such as putting sattelites in orbit around earth and sending probes to other planets in our solar system. The deeper the understanding, the more useful it becomes. Even Newton's gravitational law is not deep enough to explain certain things such as gravitational lensing and Mercury's orbit. To explain this, we need Einstein's general relativity. With this understanding we now know that time flows at different rates, depending on motion and strength of the gravitational field, which is crucial to understand for GPS to work. The clocks on sattelites run at different rates, so to synchronise them with clocks on earth, this rate difference needs to be corrected for.

Another example is the question of why we get sick. Knowing the biology behind life can save many lives, and allow for better technology and quality of life in the future.

Goals

Having this mindset also means to resist giving up on goals that you think are too big or difficult. It is easy to sabotage your own goals and find reasons to not work on it and give up. But you do not need to do everything in one breath. With a little bit of progress every day you will succeed in the end. And besides, life isn't about achieving some big, arbitrary goal. It's about having a great time, which is a continuous and infinite goal.

Consciousness

The universe seems to obey certain simple mathematical laws. Physics studies these laws and with its knowledge is able to accurately predict many things, from the behavior of small particles to the movements of entire galaxies. In fact, these laws can be directly used to simulate a physical system, by calculating changes over small steps of time. This concept is used in video games, where Newton's laws of motion are applied to calculate trajectories of moving objects in the game. It is a deterministic theory: if you know the positions and velocities of all the objects at one instant in time, you can predict all positions and velocities of these objects in both the future and the past. It could not have been any other way, since that would require violating Newton's laws of motion.

Physics has progressed quite a bit in its ability to explain and predict physical phenomena. Not only can we predict motions of objects, but we know what they are made of, how these constituent particles interact and form atoms. We also know that we are part of the universe as well, that we are made up of these same particles that follow simple laws of physics. In principle we could setup a simulation, where we copy the structure of our brain and body and make all the particles follow the laws of physics as we understand them. The result would be indistinguishable from a real human being, which would include something that is very precious to us: consciousness. We currently do not yet have the computational power necessary to do a simulation at this fundamental level, at the level of atoms. We can try to take a shortcut, and try to better understand how larger scale biological structures operate, such as neurons. Then, we need far less computational power, although even this we do not yet have, nor do we know enough about our brains at the neuron level to be able to accurately simulate it. But whether we are currently able or not, it is still possible in principle, which is an interesting thought.

You might think that simulating something does not make it real, meaning a simulated brain would not have consciousness, but a real biological one would. It depends on what exactly consciousness is and why we have it. It seems quite clear that it has something to do with the activity of our brain, since damaging our brains can affect our consciousness or cause us to lose it. Before I go into the possible reasons for why we might have consciousness and whether or not it can be artificially created by a simulation, I think we first need to make sure we are actually talking about the same thing. So, what do I mean by consciousness? It is often confused with some abstract cognitive ability of recognizing yourself and your thoughts, which is absolutely not what I am talking about. When I refer to me having consciousness as opposed to not having consciousness, I refer to a very simple and basic fact of my life that only I can know to be true: I experience things. I see colors, hear music, smell, taste, feel. This is in contrast to many internal processes that happen in my body that I am not conscious of, yet are still processed by my brain and affect my body, unconsciously. It is also in contrast to the times when I sleep, but not dream, which is when I am temporarily unconscious.

So, keeping in mind this idea of consciousness, it would be logically possible for the world to be devoid of consciousness and for life to still exist. This also means that humans would still exist and behave in exactly the same way, including claiming that they have consciousness, but in reality not actually have it. These kind of beings without consciousness, yet with identical processes happening in their brains, are also called philosophical zombies and I would be surprised if it is even possible for these kinds of beings to exist. Since consciousness does not affect any behavior, it would seem implausible that it was selected for in our evolution. In other words, it seems to be a byproduct of the workings of our brain, one that we would also get if we evolved a brain made of some other material. Of course, this does not rule out coincidence, as we would not experience this world if we did not have consciousness. For a more convincing argument, consider the following thought experiment. Suppose a simulated brain does not have consciousness, but a real biological brain does. Then, it would technically be possible to slowly replace real neurons by simulated ones, one by one. Since in the end your brain would be entirely simulated, meaning you would not have consciousness, you would lose consciousness in the process of replacing your neurons. Supposedly, replacing only parts of your brain would only affect your consciousness in a partial way, i.e. you would for instance have a different experience of color or even become blind. However, these kinds of partial changes in consciousness would be noticable for you, yet these simulated neurons behave in exactly the same way as the real ones, which would mean that you cannot possibly notice any change in your experience. The only way for this to work would be if you did not lose your consciousness slowly (as this would be noticable), but if you suddenly and abruptly became unconscious. But does this make any sense? When would you actually lose your consciousness? After replacing a single neuron? A hundred? Half your brain? Remember, just losing a single neuron out of billions hardly makes a difference to your conscious experience. So, I think it is reasonable to assume that when a person with a brain much like ours says he/she is conscious, that he/she is in fact conscious and that consciousness is therefore an emergent phenomenon, generated by the complex processes that happen inside a brain. It follows then, that when these exact same processes are simulated, the simulation also generates the same consciousness. This has a profound implication on our future, as it allows us to create any imaginable universe for us to live in, including a great number of utopian worlds, but many more dystopian universes. It means we have to be careful to not allow any person to privately run any simulation they like, as it could very well be a simulation of hell. On the other hand, there are also many imaginable universes without much suffering that would be of great value to many people, even when the majority of people in this universe disagree with that and find these simulated universes disturbing.

In my view, to create a single universe of maximal value, utopia, involves copying ours and removing as much suffering as possible, while simultaneously allowing as much diversity and choice as possible. Often, when people think of reducing suffering in our universe (the universe we live in), they inevitably tend to think of tradeoffs, because certain positive and negative consequences are bound together by the laws of physics. However, in a simulated universe almost anything is possible, as we are essentially in control of the laws of physics. Physical suffering can directly be eliminated. Think of natural disasters, disease and all other painful experiences and ways to die, which can easily be controlled to not happen. Similarly, many forms of mental suffering can also be eliminated by ensuring a much greater level of control of one's own life. Here you can think of eliminating the possibility for theft and kidnapping.

Free will

This also implies that we do not have something called libertarian free will, the idea that every time you make a choice at time t, you could have made a different choice at that exact same time t. This would imply you have a soul that exists separately from the physical world, a soul which would be able to make choices and violate the laws of physics. Since the laws of physics and a given state of the universe at time t imply all past and future states of the universe, only one thing could have happened at that time t, if the laws of physics hold. Even if the laws of physics turn out to be non-deterministic in the sense that certain consequences are based on pure randomness, the outcome would still not be attributable to an individual making a choice, since choices are not random. However, we can still say we have free will, in the sense that we can make choices. Making a choice in this case just refers to the internal process inside the brain that considers different possibilities and decides to do one of those options, based on previous experiences and preferences.

Reincarnation

People often view their lives as a short period of conscious time in a sea of unconsciousness, or nothingness. They picture themselves as being born once in a vast universe, live once and die once. Then, after they are dead that is it: a short chance to be conscious, never living for any more time whatsoever, no longer having good times but also never suffering ever again. This view makes sense when viewed from the perspective of the individual person, imagining yourself as being your own brain. But really, you can equivalently see 'yourself' as purely the conscious experiences, resulting from processes that happen in a brain. It completely changes how you might look at death, as death in this case only means you as a person cease to exist. The conscious experiences don't, as there will still be many people alive in both the past and the future, experiencing things. You may consider your lifetime as a particular story, not as the only one in a sea of unconsciousness, but as one out of many lifetimes. In effect, this suggests that the moment you die, you essentially reincarnate into another lifetime, but with all your memories completely wiped and most likely with a different personality. Also, since there is no sense in which different lives in terms of consciousness come before or after one another, it is impossible to say whether this is actually what happens, but at the same time this is irrelevant. For example, you could imagine being reborn into any random life, including one of the distant past, or imagine all these lives to be ordered chronologically based on time of birth, in which case your next life will be set in a similar time as your own. The insight that consciousness doesn't really end when you personally die, may give a different meaning to your actions to others, because even though it doesn't affect you personally, it still impacts another person who actually is just as conscious as you are. It might also be another reason to not commit suicide, even when you are suffering tremendously and without any hope of improvement, since the suffering has to additionally be worse than the average suffering in the entire universe, which I imagine is quite high. Although depending on the ordering of lifetimes, this amount might change over time, with no way of knowing what it is. Until we somehow figure out the secrets of consciousness, we may never know whether reincarnation in this purest form is real. Other forms of reincarnations found in religions can be more easily investigated, as these religions claim that memories are preserved (which would also rule out reincarnating into the past, as that would violate causality). Some even attribute birth defects to wounds acquired in a previous life. There is no good evidence for these kinds of reincarnations, however.

Branching

So, lets suppose we can simulate a human brain. Then, it is simple to copy that brain at a certain time, put it in a different environment and run that simulation alongside the original. What does this look like from the perspective of the person that is copied? One possibility is that you have a fifty percent chance to experience the switch to the copy, and a fifty percent chance that you will stay in the original environment. In other words, there are two lifetimes and which of the two you experience is completely random. For other possibilities, you may need to make additional assumptions that would distinguish the copy from the original by for example stating that only the lifetime with its brain processes happening in roughly the same place in space (and perhaps also the same place in time) is the one that is experienced in its entirety, while the copy is a newly created person with merely the same memories as the original, but who did not in fact experience them. However, it probably makes more sense to see copying a brain as being symmetrical, as we could move the original into a different environment in exactly the same way as the copy and we would still expect the person to experience one continuous life in both cases. However, it would also seem strange that the moment you create the copy, you would duplicate the past experience of the person, as that experience has only existed once, so it seems that the one timeline of the person really does split into two timelines, while simultaniously all three parts of the timelines existing only once and being continuous at all times. This is very confusing and paradoxical.

The universe we live in actually seems to constantly split itself, with small differences in positions and properties of subatomic particles. This is because according to the Schrödinger equation, particles become entangled when they interact with one another. When this is scaled up to the many particles our everyday world is made up of, there are certain quantum events that cause the universe to split into multiple universes, with a slightly different outcome in each. One example is measuring the spin of a particle in a superposition of two different spins: up and down. Then, when this superposition interacts with the detector, the detector itself becomes entangled with the particle and moves into a superposition. In effect, this superposition can be seen as two different worlds: one in which the detector measured the spin to be up and one in which it measured spin down. Similarly, you yourself are also part of the universe and interact with the detector by looking at the result, causing you to also be entangled with the detector and particle, therefore also being split into these two different worlds: one in which you see the detector measuring spin up and one in which a different version of you sees the detector measuring spin down. This interpretation of quantum mechanics is called the Many worlds interpretation and makes the least amount of assumptions of all the interpretations of quantum mechanics. In the Copenhagen interpretation for example, an additional assumption is made that the wave function Ψ collapses upon measurement to a random result, following a probability of Ψ squared. The problem is however that in the Copenhagen interpretation, what counts as a "measurement" is not well defined. Other interpretations make even more assumptions, with some specifying exactly when a collapse occurs. Some of these interpretations actually violate the Schrödinger equation in certain cases and are therefore testable.

Morality

The terms good and bad are often considered to be subjective, not objective. But really these terms are just relative: they refer implicitly to some value in some context. For instance, in the context of a game one can speak of good moves and bad moves. Good moves are good when they help the player win, bad if they result in the player losing. Similarly, the verb should implies a conditional statement, which in the context of a game would be something like if you do move X, then you will win. In general, the statement You should do X means If you do X, then value is gained. Often, when someone says you should do something, it sounds more like an imperative, a demand, rather than just a simple conditional statement, because there is an additional hidden assumption that you actually agree with the conditional statement and can see how value is gained from doing the action that is put forward.

When it comes to life, good and bad refer to the value of life itself, which has to do with conscious experience, which in turn is determined by the processes that happen inside a brain. This means moral questions, asking whether a certain action is good or bad do in fact have objective answers, since actions have consequences and are completely determined by the laws of physics. It is also a fact that certain experiences are valued more than others. These experiences may be valued differently by different people and depend on circumstance, but an experience still has a value in each individual case it happens. It is either true or false then that a certain action results in a world that is valued more. Generally speaking, happiness is positively valued, while pain has a negative value. But the value of life is not limited to a single number of happiness minus pain: it has many factors that interact with one another in complex ways. To see this, one can imagine a world without suffering, where everone is happy, but living a life devoid of all things in this world that we would consider valuable. These are things we do in our world that give us joy, satisfaction and meaning, such as literature, games, music, food and interests. Yet, the wide variety of experiences that we all know and love could be entirely absent in this imaginary world, while the simple number of happiness minus pain would be higher than in our world. This is essentially the dystopian future portrayed in the novel Brave New World by Aldous Huxley.

Delicious food

This brings me to a crazy idea that I came across, an idea that has to do with the food we eat. Namely, it is possible to replace all of our eating habits by one simple recipe: food powder. Then, you don't have to spend any more time cooking, nor do you need any more grocery stores. It's quick, cheap and simple. So the idea is to rid our lives of all these outdated ways to eat food and replace it with only the powder. Apart from some actual health problems that this currently might still have, which I'm sure you could resolve, this is a ridiculously bad idea. And this idea is bad for the same reason I sketched above with some sort of Brave New World, because with this, you completely lose some big values in life: delicious food, variety and cooking. The truth is that we do not just eat food to stay alive, but it is part of the valuable experience of life and should not be taken away for some arbitrary efficiency metric that makes no sense to pursue.

Getting rid of the food experience entirely is a very obvious and huge example. But to a certain degree, this kind of attitude towards the experience of food is definitely present when you look at why people are vegetarian or in a more extreme case, vegan. When you choose to be vegetarian, you are restricting yourself to experiences of food that do not include any meat, something with a taste that is valued extremely highly by almost anyone. Unfortunately, advocates for vegetarianism seem to exclusively focus on weighing the individual taste experiences against the overwhelmingly bad consequences for the well being of animals and for our environment. This is I think a mistake, just as it is a mistake to only look at the total amount of happiness minus pain when judging Brave New World. You should not forget the value of our current variety of experiences as a whole. So then, when faced with the problem of animal suffering, you do not "solve" it by killing or sacrificing yourself, but you try to eliminate the bad while keeping the good. In this case, a good solution would be to synthesize meat in a lab, growing it without needing to also create millions of suffering brains. Before we successfully do this, it is still good however to try eating less meat, as much as you feel comfortable with and as long as it does not result in us devaluing meat alltogether.

Cybermen

A similar situation occurs with the idea of upgrading our bodies to become stronger and immortal. Again, when putting yourself in steel you are doing this with the arbitrary idea that somehow making your body stronger and more able to survive in of itself is worth pursuing. It completely fails to see that having a human body made of flesh is necessary for so many good experiences in life and that doing this "upgrade" is not really an upgrade at all as it deletes these positive experiences. In case of a cyberman, a fictional enemy from the Doctor Who series, the upgrade even gets rid of all emotions, making life as a cyberman even more meaningless and devoid of value.

Another dangerous concept would be to "improve" our brains by making ourselves smarter, able to memorize things better and by connecting our brains directly to the internet. All of this could be possible by implanting a chip in our brains, or in the case of a brain simulation, by growing a bigger brain. The reason that I think it is even more dangerous to change your brain than it is to change your body, is the fact that it is a permanent change that you are not in control of. What I refer to here is the fact that in the case of a body upgrade, you may be able to discover that it actually wasn't as good as you thought it was and would want to undo that change. Changing your brain however changes how you think about it and it may very well be the case that you change into someone that the original you really would not have wanted, but the changed you is nonetheless happy with. In a sense, you just killed yourself, and everone is happy about it, just like everone is fine with the loss of value in Brave New World.

Programming

In general, I like to keep things simple, because most often the simplest solution is good enough for the problem at hand. By keeping it simple you save a lot of time while simultaniously creating code that is easy to understand.

Imperative programming

The imperative programming paradigm I think is one of the simplest and most useful methods of solving problems. It is easy to understand: your program consists of a sequence of statements that act on data and drives the hardware. It is the paradigm even the computer itself uses, through a sequence of instructions which make up the machine code. Examples of higher level imperative programming languages are C, C++ and Python. In particular, C is a simple imperative language, while C++ extends the language with features from other paradigms such as object oriented programming and functional programming. I think it is good when languages have features that a programmer can freely choose to use. The extended language then just becomes a bigger toolbox for solving a wide variety of problems. However, as we will see with other programming paradigms, they often do not entail more features, but instead enforce restrictions unto the programmer, preventing programmers to solve the problem in a certain way. This often results in overly convoluted solutions to fundamentally simple problems.

OOP(s)

One of the most popular programming paradigms is called Object Oriented Programming, with languages such as Java that try to enforce this style of programming onto the programmer. Advocates of this paradigm claim it is really good for building large, complex programs. You would think then, that programming these large complex programs with OOP should be effortless and fun, right? However, the reality is that this paradigm adds an enormous amount of unnecessary complexity to your program. To make things worse, so called "best practices" in OOP languages such as Java, create a gigantic minefield of all sorts of arbitrary ways to do things incorrectly and strongly emphasize the design of your program, rather than functionality. For instance, you need to predict all possible future extensions and design your program around them. The problem with this approach is that most often you do not know in advance what exactly you want with your program. This means any idea you might have of future extensions will probably be wrong, in which case you will have wasted a lot of time and effort coming up with an incorrect design. And when you use this as an argument against OOP, you are told that you're the problem, rather than the paradigm, as you obviously should have built the better design to begin with. So no, it's everything but effortless or fun, due to unnecessary complexity and constant bombardment of negative judgements.

Encapsulation

One example of unnecessary complexity can be found in the concept of encapsulation, seen as one of four pillars of object oriented programming. Here, the idea is to hide internal state of an object and only use public member functions (called methods in OOP languages) to change its state. The benefit would be that users of an object can't put the object in an invalid state, reducing bugs. It is also said to reduce complexity, since interactions between objects are limited, and that it is easier to change the implementation of private parts of the object without needing to change code globally.

However, this results in insanity such as this Date class, where most of the code is just unnecessary typing for no good reason:

public class Date
{
  private int day;
  private int month;
  private int year;

  public void setDay(int day)
  {
    this.day = day;
  }

  public int getDay()
  {
    return day;
  }

  public void setMonth(int month)
  {
    this.month = month;
  }

  public int getMonth()
  {
    return month;
  }

  public void setYear(int year)
  {
    this.year = year;
  }

  public int getYear()
  {
    return year;
  }
}

This class really could just have been a struct of three public integers, in which case the usage is simpler and easier to understand, especially when doing mathematical operations (eg. date.day++). In my opinion, this added complexity is simply not worth the (hypothetical) ease of changing the behavior of these setter/getter functions later on. In fact, I think it is good for code that looks like a simple operation on a variable to not suddenly change into something arbitrarily complex, such as connecting to a database, allocating memory or some other time consuming task. Also, just because all member variables were made private does not automatically mean the object can't be put into an invalid state. In this case, someone could call setMonth(13), which probably is not considered a valid state, as many calendars only have 12 months. Of course you could "solve" this problem by adding checks to the setter functions, to make sure the date will always be changed to a valid date, but this adds complexity and makes it more difficult for users to understand how this class works. When users were already using this class, their code might even break because of the changed behavior.

Abstraction

This brings me to the second pillar of OOP, abstraction, the idea that users of a system shouldn't have to think about implementation details and so that abstraction will simplify code. As we have seen, abstraction does not automatically make code simpler. It only looks that way when you look at it from a very surface level perspective of some user that just wants to think in terms of this higher level concept. But as soon as you want to understand what the computer is actually doing, you do need to know about some or all implementation details. Without understanding what the computer is doing, you end up piling abstractions on top of abstractions on top of abstractions, resulting in a giant code base that is hard to understand and most likely not very efficient. This is because each layer adds some overhead and complexity that is then ignored, while only solving a slightly different problem than the one you are after, such that you end up using additional layers of complexity to solve the actual problem. One example of such overhead can be found in C++'s string class, which automatically allocates and copies memory when passing a string by value to some function or data structure, which means you have to be careful to not accidentally incur performance penalties. And instead of solving this problem by removing the hidden overhead, an additional abstraction was added in C++ called move semantics, with additional constructs such as rvalue references and move constructors, which along with many other C++ features are way more complicated than the problems they solve.

I do think there is a place for abstraction, just not in the way that is advocated for in OOP. While in OOP, abstraction is about hiding implementation details, a more ideal view of abstraction would be that of carefully describing a complex system in a useful manner. For instance, rather than multiplying and adding a bunch of numbers together in many places in the code, it is useful to have abstractions of matrices, vectors and matrix multiplication. This way, code that uses these abstractions can be thought of as transforming points in 3d space geometrically, but is also entirely transparent, meaning the inner workings and properties are not ignored or forgotten.

Inheritance and polymorphism

Keeping in mind the incredible amounts of abstraction in the form of encapsulation, we arrive at yet another form of abstraction and pillar of OOP: inheritance. This one often creates huge and deep hierarchies of abstract concepts, such that it becomes almost impossible to find the one class that actually does something amidst all the tiny classes and interfaces with only one or two member functions that do absolutely nothing. Actually, it's worse than that, since the fourth pillar called polymorphism disperses all the functionality over many different classes, meaning you need to constantly switch between different classes to understand what is essentially a simple switch statement in an imperative language such as C.

Functional programming

Another paradigm arises from the idea that side effects are bad: functional programming, or FP. A purely functional language such as Haskell will restrict the programmer to only use pure functions, which are functions whose result only depends on their inputs and do not change the state of the program, just like functions in mathematics. This means it becomes much more convoluted to do simple sequences of operations and I feel the code in general becomes cryptic and hard to understand. There are some interesting ideas in functional programming languages, but this is no reason to sacrifice your own ability to successfully solve problems. I think too often people get dogmatic about what is the best way to program, causing a lot of pain and suffering.

Software quality

I think that partly because of a dogmatic mindset in programming and a refusal to deeply understand problems and work towards solving them, we are currently in an era of degrading software quality, which can be seen best by looking at the history of computer hardware, as modern computers have become ridiculously fast, yet software has only gotten slower and worse over time. A typical desktop computer has 4 cpu cores, each with a clock speed of around 3 GHz, with 8 GB of RAM and with an SSD of 250 GB. Programs take multiple seconds to start up, are not very responsive a lot of the time and are often riddled with bugs.

I personally remember a time, not too long ago as I am still relatively young, when computers ran Windows XP, had like 512 MB of RAM and a single core processor. And I had great fun with the old microsoft programs Paint, Excel and Word, which were quite simple to use and allowed for a lot of creativity. These same programs are completely unusable now, because they do all sorts of things behind your back that you did not want them to do, such as changing colors, shapes or sizes of already drawn things in the modern version of Paint. Also, certain artistic features were simply removed, such as the 3d objects, materials and art you could create with the old Excel, or the modernized WordArt in Word, and in general the loss of customizability of everything. Where are the days in which you could specify all the colors and gradients of the window borders and other ui elements? Why did we lose the nice appearance of classic windows, then Windows XP, and then lose the glassy look of windows 7? Losing beautiful things has always been one of the worst things to experience for me.

There were also many amazing games you could buy from a physical store, such as The Sims, Rollercoaster Tycoon, Lego Racers and many more. Now, games are downloaded from the internet instead of bought on a CD-ROM and it has become almost impossible for me to find a good game out of thousands of mostly unappealing games out there. During my time in secondary school I have enjoyed playing minecraft and large technical modpacks of minecraft with friends, but minecraft has completely changed since then, so nobody plays that old version anymore. In fact, last time I tried playing the old version I got a Java exception, so I don't even know if it is still possible to play this version. I am referring to the time when the mod Red Power 2 existed and when minecraft was still mostly about creativity and exploration, rather than combat and conquest.

You can watch others, who are much older than me, also point out a loss of quality in the software world, such as Jonathan Blow and Casey Muratori.

Education

Since the start of secondary school, I have become very afraid of failure in school. And this is not because I care too much about doing things perfectly, as I really could not care less about being able to do things that don't interest me. Instead, I think this is because parts of education are going horribly wrong and claiming "you should not be afraid of failure, as you learn from your mistakes" is not helping. Overall, I enjoyed primary school, although the same problems did sometimes appear there as well. It was a time where we could interact with one another as friends, based on our interest. Whether you performed well at a certain task/subject in school did not matter too much.

Contrast this to secondary school, where everyone started to care about each other's grade, about performance in school. And when you were performing badly, it was assumed you were not trying hard enough. Certain topics such as mathematics, physics and chemistry were wonderful, as we were taught exactly how to solve the problems we were given. Tests consists of the same kind of problems we had to do as our homework, so as long as you paid attention in class and successfully completed your homework, you had a guaranteed 10/10 grade or higher on your test (yes, with these topics there were often bonus questions, so it was possible to get higher than a 10). Well, almost, as making small mistakes is very human. But the point is that not all topics had this amazing learning experience. There were certain graded assignments, mostly for modern languages, history and geography, which required skills that were not explained in detail. Often, only the result that had to be achieved was described and we had at most one gradeless try, before we had to do the actual graded assignment. Now, the ineffectiveness of this teaching method would be very apparent if teachers actually graded the assignment according to their pronounced expectations, which would mean a lot of insufficient grades for people like me who don't naturally possess these skills. However, we instead get a passing grade, sometimes as high as an 8/10, while being punished for our failure, not knowing how to do better and unjustly being blamed for not trying hard enough.

When teaching a skill successfully, it means that when testing before teaching and then a second time after teaching, the grade increases. You should only test the skills or knowledge that you are teaching, and not also another skill or even worse, a completely different skill. Most of the insanity also stems from a judgmental mindset, which is encouraged when students are tasked to judge each other's work, instead of leaving that to the teacher, and when grades are openly disclosed.