Over the last decades the development of computer science has been tumbling along with unbelievable speed, unrivaled by other fields of engineering or science. New fields popping up every few weeks, a break though in complexity published every month, new paradigms and methodologies that are sometimes outdated faster than they spread…
Some of the constant drivers of that process of changes are unexpected at first glance: bionic and intelligence understanding, natural language research, medicine, … Unexpected in the sense that people working in a field as dominated by technology as computer science surprisingly often look at fields being tied to natural systems and their observance. But is that really surprising? Not at all: a good engineer will always keep an open eye for solutions found elsewhere. Proven strategies which might be worth to adapt or mimic. And natural processes, nature itself, certainly is a never ending source of unbelievable genius, precision and perfection. So actually not borrowing from there would be a highly unexpected behavior.
However intriguing and fascinating such influences for computer science are, today I want to introduce a thought about something similar but altogether different…
Even considering the mentioned speed of developments in computing, humans almost certainly will never make up the advantage of natural systems based on the incomprehensible dimensions of trial and error implemented in nature. We can mimic, but not really create solution approaches ourselves. We can optimize, but not really identify the goals. We can get inspired by alternatives but fail to break from our own heritage. I for myself think that humans probably won’t break that limitation and may it only be because of the limited life span of the human race.
I certainly will not start a discussion about reasons behind that, creation myths, religious doctrines. People who know me also know my standpoint in that area. I absolutely appreciate philosophical debates and understand the value of alternate approaches to tackle questions. But still there are times when it makes much more sense to simply look at what you have at hand and actually work with that. Which is what engineering does. Especially in today’s agile dominated world.
Instead I want to raise a thought I recently came upon: the idea of reversing the above.
Why not use findings in engineering and computer science and apply them to nature?
Now don’t get me wrong. Neither do I claim that nature is somehow broken and needs to be fixed (an absurd idea…), nor am I an advocate of eugenics or similar topics. I hold a somewhat neutral view to such things, since I simply do not have a good enough understanding to have a reasoned opinion. And I dare say that no one actually has…
My idea is smaller, more practical, less ambitious: accepting nature as it is, as the best example of a balanced and working system that perfectly takes care of itself. I want to look at individual details. Such details that are relevant to us, so from a purely subjective point of view. Small imperfections that do not really matter in the grand scale. But which bother us. For example because we ourselves or our kin are affected by them. There are many examples for this: prosthetic, pacemakers, artificially grown organs, education, … Those certainly only target individuals, not directly populations. But I want to go a step beyond, narrow down my scope even further. From offering a solution to an analysis. Experiments and observation are sensitive aspects when it comes to humans for good reason. We understand that this is a very delicate area. Again not because of its general effects but for privacy reasons. Analyzing ourselves leads to digging things up. Exposes things. Offers a base for judgement. But while all that is important and sometimes hesitation is a good thing still there is reason to proceed. Without asking there are no answers. Without research there is no development. Without experiments there are no solutions.
There is one field humans always invested an unbelievable effort to analyze themselves or their peers. Where numerous alternatives or even contradictory approaches are common practice. And where yet so little serious progress is made:
the workings of the human brain, our mind, our psyche.
Why is that? Why can’t we fix conditions considered wrong or harmful or destructive, when we clearly see that the person affected suffers? The answer is simple: because we actually still have no idea how that stuff works. And without understanding there is no fixing. You will only break things instead for obvious reasons. And human minds are a delicate thing to break. So we are cautious in this, hesitate for very good reasons, which explains the slow pace of progress and the diverging findings.
Probably it is (far) too early to think about understanding the complexity of a brain. Maybe it is impossible to actually reason why a mind reacts in this or that manner depending on things we hardly even consider relevant in a given situation. But maybe that is the wrong or at least not the only approach we can take.
Actually computer science observes a somewhat similar challenge: with the ever increasing complexity of code and solutions the tasks of analyzing, debugging, securing has actually exploded in need and difficulty. Engineers found solutions for this though, just as in nature there is only progress to be made when things fit in, when all components of a system work together. Without efficient quality management there is no robustness, ultimately no usable solution. Companies actively invest into setting up strategies and teams for this for very good reasons.
Actually the same is done in medicine. Psychology analyzes, checks, actually reprograms. But there is one difference to engineering: the object that is analyzed, checked, reprogrammed. Psychology focuses on the mind. On the effect our brain creates or represents. As a whole.
Engineering does that too, obviously, system and integration tests are essential to quality management in programming. But in engineering we do more. We also use different levels of tackle different types of issues. This allows to reach a more better picture of actual issues by concentrating on certain layers of a complex system. This makes each methodology in itself less complex, thus more robust and easier to handle. Software companies simultaneously implement UI tests, UX interview sessions, we do database integration testing, static code analysis, functional testing and … we implement unit test!
Unit tests are the test strategy closest related to the actual implementation of the logic, most directly bound to the actual program code, which gets written down in an explicit manner. Only design patterns are a still more integral part of programming. Usually unit tests are developed by the same team of programmers creating the logic to be tested. Writing unit tests is actually considered an integral part of programming. Test driven development is a standard procedure. Code test coverage is insisted upon. Why? Because programmers learn from their mistakes. Unit tests have well proven themselves as a very valuable tool for quality management.
Remember what I wrote about adapting well proven strategies above? Why it makes sense to look at those? And use them? So let’s do that: let us start unit testing the human mind as a complementary means in psychology!
Unit tests have a completely different goal than other test strategies. They focus strictly on the small building blocks every complex system is made out of. They check separate units of a system one by one on a very low, functional level. You could say they test an atoms behavior independent from the molecule it is part of. That strategy cannot make any statement about the state and usability of the whole system, certainly not, but that is not the idea here. Unit tests help getting two central aspects right: first that a separate unit actually does what it is meant to do and thought to be doing and second that it continues to do so when the containing system changes over time. So they detect regressions, a hidden danger in all systems that develop over time. Also in natural systems, in human minds.
Few of the deficiencies psychology tries to handle are constant. Sure, there are cases where people are born with abnormalities that cause issues. Problematic behavior, distress, suffering, malfunction. But the overwhelming majority of cases have developed. Typically by changes to or happenings in the environment. So it is not the affected system itself that is somehow wrong or broken in the first place, but the functioning of that system in relation to its dynamic environment. So a change on a much higher level. This change can be detected, typically by the person affected itself. But very often it is not immediately possible to identify the actual cause or nature of the change. Simply because the system is far too complex to be able to separate the uncountable layers and cross influences of the human mind. But fixing something without being able to identify the cause? I mentioned that above…
Some psychological deficits can successfully be handled by behavioral therapy: instead of understanding the actual cause of the issue the whole system is simply trained to behave different. Since most behavior is the result of training this certainly is successful in certain situations, with certain deficits. It directly resembles the training of an artificial intelligence system, actually, little difference. But most, especially the more severe or fundamental problems in the human mind, cannot be handled that way. In comes the voodoo of psychology: depth psychology, psychoanalysis. These are empiric areas. Studies mostly concentrate on practical experiments to collect experience. There certainly are rules, at least in official practice, but those target methodologies and, guess why, the question which practical attempt is considered worth being payed for by health insurances. The question about the success and strategy of some approach is rarely raised. Also because answers would only be claims. Definit statements can only be made about actual function. But the mind as such is far too complex to be understood in such manner. No functional units are even considered in a separate manner to get a better picture.
Wait, functional units? As in our unit tests above? As said: let us start to implement unit tests on functional units of the human mind. I cannot say how that can be done, don’t expect me too, I am not a psychologist or neurologist! But, as said initially, it sometimes makes a lot of sense to step away from the big picture and concentrate on details. Unit testing allows for such a focused view. We need to find ways to evaluate the output generated by a single or a few conglomerated units in our mind as the result of the combination of a given situation and a given set of inputs. Reads exactly like a recipe about how to implement unit tests. That done we can reach a clear judgement about the quality and robustness of the function of that specific unit. Looking at such statements for the whole set of units contributing to the higher layer features of the mind indicates where the actual problem is routed. Exactly that insight we identified as missing further above. Just what is required to really trying to solve the issue instead of tap dancing around complex behavior.
Unit tests have another aspect that differentiates them from other testing strategies: they examine more mechanical entities of a whole solution, not so much the solution itself. People typically develop what is usually referred to as a personal relationship to a solution or product they helped or even pushed to created. They care for that artefact and thus typically phenomena like pride and getting hurt come into play when dealing with defects in a product or solution. Aspects that require an additional level of care and respect, obviously. Ethics get relevant too. But unit tests are hardly subject to such aspects because of their low level, mechanical being. Just like nobody will seriously consider the straightening of a broken bone as an ethical questionable act. So unit tests are a strategy that allow for precise and valuable judgement, that offer a base of understanding people can agree upon without too much subjectivity and psychology getting into the way.
Mankind may not yet have the means to reliably read output from brain units. To connect natural tissue to electronic logic is still a hard challenge today. And certainly the spatial structure of a brain adds difficulties here. But all that certainly can be solved, promising progress already exists. So the next logical step is to implement neutral unit tests focusing on functional units of the brain. To finally enhance our ability to actually help with sever malfunctions of a mind. To actually cure people.
Tags: Computer science, English, Idea, Psychology, Software, TechTalk, Testing