Wednesday, March 11, 2020

Bit-Rot: Computer Software Degrades over Time

Bit-Rot: Computer Software Degrades over Time


By: W.B. Langdon, Earl T. Barr, Justyna Petke
Associate Editor: Federica Sarro (@f_sarro)

At first sight it seems surprising that computer software should degrade. We are used to the idea that mechanical devices wear out with use and sooner or later they fail. Similarly, performance of electrical devices, particularly batteries, falls with time and they too eventually fail. But software? That’s just a pattern of bits. Sure the device holding the bits may fail, but we can restore from backup, we have error correcting codes. Surely as long as the bits are ok, the software will continue to be ok?
Wrong! Software too degrades over time. (Part of Figure 1 shows a fragment of a program which worked fine 20+ years ago, but which now does not even compile.) Like the fact that there are many reasons for hardware to fail, there are many reasons why untouched software may no longer work. It is so common for legacy software to fail [1], that the term software “bit rot” has been coined to cover, not just the problem of reading bits from old hardware [2], but also the general tendency for old programs to cease to perform their original task.

 Figure 1: Over time software fails
Today, and in the foreseeable future, the dominant cost of computing is software, i.e. people’s time, not hardware. Further the dominant cost of software is the cost of software maintenance. (Wiederhold [3, p66] says “Maintenance costs over time typically exceed the original software develop- ment cost by factors of 2 to 10.”) Bit rot increases the maintenance burden. We cannot simply leave software in the state it was in when it was first sold. Firstly we will need to bugfix. Arguably, if the defect was known in the original code, this is not bit rot. But even excluding this special case, bit rot can cover items such as the need to update for: new computer hardware, e.g. laptop, smartphone, new software libraries, new versions of computer programming languages and their support tools (the GNU C++ compiler has been through 113 releases since the code in Figure 1 was writ- ten), new computer operating systems, such as Microsoft Windows 10, and new versions of existing operating systems, etc.
In other words, if left untouched software suffers bit rot. Even in the absence of hostile actors and evolving computer viruses, we must keep soft- ware up-to-date, e.g. we cannot keep running windowsXP forever. This is a problem for everyone, not just major corporations with dedicated software maintenance teams. Unless hardware failure, fire or theft, comes first, even home computer uses, laptops, and phones will eventually suffer from bit rot.

You might also enjoy reading

References

[1] Andreas Zeller. Yesterday, my program worked. today, it does not. why? In Oscar Nierstrasz and Michel Lemoine, editors, ESEC/FSE ’99, vol-
ume 1687 of LNCS, pages 253–267, Toulouse, France, September 6–10 1999. Springer.
[2] Brian Hayes. Computing science: Bit rot. American Scientist, 86(5):410– 415, 1998.
[3] Gio Wiederhold. What is your software worth? Communications of the ACM, 49(9):65–75, September 2006.

Tuesday, March 10, 2020

What is your remedy to cognitive overload?

What is your remedy to cognitive overload?

By: Birgit Penzenstadler (@twinkleflip)
Associate Editor: Muneera Bano (@DrMuneeraBano)


Software engineers that I meet tell me about their hectic schedule, their back to back meetings, and that they constantly feel like there is too much on their to do list to ever get done. Research shows that computer workers are the second highest risk working group of developing depression and anxiety over time. We know a lot about productivity, time management, and efficient software development - the problem is not that software engineers are not good at what they are doing. So the question is whether maybe not everything that is going wrong is outside of us? Maybe we need to look internally, from a completely new perspective? 

Have you heard of the concept of mindfulness in the sense of “clear awareness”? Our minds are so full all the time... Clear awareness points towards being super present with what is happening in the current moment, without continuously getting distracted by what may or may not happen later on. Creativity theory talks about the whitespace necessary for being creative, and software engineering is certainly a job that requires creativity for problem solving, designing, etc. So clearing our awareness from distractions and focusing on what is happening in the moment helps us to get into a flow state, where effort meets ease and we feel like we are ‘in the zone’ of ‘deep work’.

Now it is easy to argue that people need to figure that out in their own free time because the job does not contain the regeneration from working. I disagree - if our current way of working relies on unhealthy practices, leading to cognitive overload and suppressed emotions, that leads to significantly increased health risks, more sick days, increased burnout rates, and low-quality software systems. Moreover, we propagate the values that we live by into the software systems we develop, reciprocal to how organisations tend to resemble the product that they are building (Conway’s law). Last but not least, if we are not satisfied by the status quo but don’t challenge it, we still endorse it.

Mark Zuckerberg and Larry Bryan, just as two well known examples in the IT domain, practice according to old Eastern philosophy - so what's behind that? Whether you choose walks in nature, meditation, Yoga poses, breathing exercises, Tai Chi, any practice that quiets the mind and brings body, mind, and spirit (in the widest sense, call it soul if you like that better - the part of you that is left when you take away all the labels, roles, and characteristics that you seem to possess) back into union or alignment. If you are curious on whether you might benefit from such interventions, you can for example use the Mindful Attention Awareness Scale by [Brown et al. 2003].

In my research, I investigate the use of healthy practices in the context of software engineering, and I am highly interested in learning whether you use any, whether you (would) consider this beneficial, or if you think this is distracting and irrelevant. 

What helps you deal with stress, or maintain your overall physical, mental, and emotional health?

I’d be most grateful to get your comments and feedback on these questions in this 5-item survey.

In more detail, my research is centered around exploring how the concept of mindfulness or clear awareness can support flow in software design. This means, I look into how regular practices like meditation, yoga poses and breathing exercises can support software engineers in counteracting cognitive overload and feel more in balance. I am interested both in how to teach this to future software engineers at university, to practitioners in industry, and how to offer this in the least invasive way to practitioners on a continuous basis. 

As software engineers are a quite diverse group, I am curious to find out which modes are most beneficial to which people - and in which situations. For example, if I am really stressed out before a meeting with a challenging client or manager, then the advice to sit down and meditate for ten minutes may freak me out instead of helping, because my mind would go even more crazy having to sit down quietly and try to not think about the upcoming meeting. Instead, in this situation, it is probably a better suggestion for me to do a round of box breathing (for instruction, see my YouTube video) to calm down, because this form of deep breathing will activate my vegetative nervous system and lower my blood pressure. 

I am collaborating with various researchers from different disciplines on this to get all perspective into the picture: There is a Professor from the Department of Yoga at the University of Patanjali in India, Dr. Rudra Bhandari; there is a Professor of Communication Studies who is also a yoga teacher, Dr. Ebony Utley; there is a Professor in Software Engineering who has already investigated the use of meditation in conceptual modeling, Dr. Bea Bernardez; and there are several candidates from medicine and psychology I am currently in conversation with to further investigate brain plasticity and other physiologically measurable impacts. 

Thank you for taking the time to read this post, and please consider donating two minutes more to reply to my survey.

REFERENCES:

[Newport 2016] Newport, Cal. Deep work: Rules for focused success in a distracted world. Hachette UK, 2016.
[Brown 2003] Brown, K.W. & Ryan, R.M. (2003). The benefits of being present: Mindfulness and its role in psychological well-being. Journal of Personality and Social Psychology, 84, 822-848.