Compact programming

About the project

If problems are not spoken about, this does not mean that they do not exist: this means only that they are not spoken about. If one speaks sincerely about one's problems, one usually receives not a help but some additional problems. So, people prefer to keep their problems hidden.

Directions of compactization effort:

The purpose of compact programming is not only to reduce costs of programs creation and support but also to reduce the negative impact of redundant programs on mentality.

What do we have:

1. Computers become even better (from the popular point of view, of course).
2. The world in general becomes even worse.

Is there any link between these two trends? Let's see:

1. Computing neutralizes a plenty of best minds with its internal problems of development, support, etc.

2. Computing neutralizes a plenty other minds with internet and games.

3. Computing does not provide the system of sufficient technologies to work with complexities of present-day world: it just provides some technologies. This is one of the reasons, why does the pressure of global problems (water, energy, etc.) become even greater.

How really effective is computing? Not only from economical point of view? Hard to say.

It seems that possibilities of, ex., IBM PC 486 (or even PC 286!) are sufficient for the majority of non-entertainment applications.

About internet. The simplicity and quickness of data putting into internet leads to decrease of quality of publications. The problem of proper data selection becomes more and more difficult. And one who does not make an effort to filter data, becomes victum of somebody's carelessness, incompetence, deception, etc.

It often happens that an addition of some facility leads to degradation of some human ability, so that the better are things, the worse are people.

Analogies are sometimes very useful. So, let's consider, for instance, the production of coffins... The greater amount of coffins is produced, the more effective is coffin industry and the more attractive for investments, but for majority of people it is clear that it is better when the demand for coffins is limited to some reasonable level.

In the same way every branch of of industry schould have its's limits which are defined not by it's internal possibilities of growth but by requirements of well-balanced mode of life, even when some people have a plenty of excellent ideas of how to make the product more desirable, more good for sale.

By the way, it is hard to get rid of suspicion, that coffin industry leaders at least sometimes do think of benefits they obtain from great catastrophes and of population uncontrolled growth.


Relevant ideas and opinions taken from internet

From computing-dictionary.thefreedictionary.com :

Software bloat

Software bloat - The result of adding new features to a program or system to the point where the benefit of the new features is outweighed by the extra resources consumed (RAM, disk space or performance) and complexity of use. Software bloat is an instance of Parkinson's Law: resource requirements expand to consume the resources available. Causes of software bloat include second-system effect and creeping featuritis.

From encyclopedia.thefreedictionary.com :

Software bloat is a derogatory term used to describe the tendency of newer computer programs to use larger amounts of system resources (mass storage space, processing power and/or RAM) than older programs. It is also used in a more general context to describe programs which appear to be using more system resources than necessary, or implementing extraneous features. Software exhibiting these tendencies is referred to as bloatware or, less commonly, fatware.

Some of the observed bloat is caused simply by the addition of new features and content, such as templates, or by the use of higher-level programming languages. However, at other times the cause may be a programmer's lack of attention to optimisation or design, often frowned upon by other programmers as a sign of carelessness or laziness.

Background

Software developers involved in the industry during the 1970s had severe limitations on disk space and memory. Every byte and clock cycle counted, and much work went into fitting the programs into available resources. The extra time spent by programmers translated directly into smaller, more efficient software products, and hence was seen to translate directly into sales revenue.

However, technological advances have since multiplied processing capacity and storage density by orders of magnitude, while reducing the relative costs by similar orders of magnitude (see Moore's Law). Additionally, the spread of computers through all levels of business and home life has produced a software industry many times larger than it was in the 1970s.

Possible causes

As a result, the emphasis in software design could be argued to have shifted away from tightness of design, algorithms and resource usage. Instead, time-to-market can have been seen to become the key.

The extra time needed to optimize software always delayed time-to-market, losing some revenue. But the improvement in quality due to optimization is thought to win this revenue back-however, it is now the case that the lost revenue due to delaying time-to-market far exceeds the increase in revenue that almost any optimization can produce.

The software industry has responded to this changing tradeoff by emphasized rapid code development by automating programming tasks that had previously been areas of fine craftsmanship, and re-automating on top of that. The result is multiple layers of software abstraction resting on top of each other, and the task of the modern software programmer often consists more of administering automatic code generators and pre-written components to their will than in the fine handling of software to be completely optimized-though, with the establishment of well-founded, stable, optimized and dependable software toolkits, this enables functional code to be created much faster and more powerful than coding up equivalents by hand, where development time would be significantly longer. A case in point is NeXT's OpenStep Foundation Kit and Application Kit-a set of reusable objects that enabled developers to create functional and usable code faster than conventional methods.

Since any single application is usually small enough to fit on any computer's hard disk or RAM, its developers are not even considering the size implications for a user, who has to install many bloated products.

Some hold that the result of modern rapid application development practices, forgoing the optimization practices of the past, is that modern software running on faster computers does not present a user impression that is significantly faster - this user impression, due to the consumption of underlying technical advances by layers of software abstraction in pursuit of time-to-market, is the essence of bloatware. Unfortunately the abolition of this software abstraction can hamper the underlying development of the program. Software structures that are well crafted in place to allow for easy extensibility and maintenance will assist software developers in that upgrading existing code will be simpler and faster.

However, the optimization at the machine-code level need not be done by hand. Modern compilers often take optimization of code into consideration, and this forgoes the need for hand-manipulation of assembly code. Naturally, this software optimization is never one-hundred percent perfect, but then the resulting effect from a programmer making the optimized code fully optimized is negligible.

Still, why bloatware?

The question remains, then, why is there so much bloatware around, even though the usability and commercial viability of bloatware seem lacking?

Joel Spolsky in his Strategy Letter IV: Bloatware and the 80/20 Myth, argues that while 80% of the users only use 20% of the features, each one uses different features. Thus, "lite" software editions turn out to be useless for most, as they miss that one or two special features that are present in the "bloated" version. Spolsky sums the article with a quote by Jamie Zawinski: "Convenient though it would be if it were true, Mozilla is not big because it's full of useless crap. Mozilla is big because your needs are big. Your needs are big because the Internet is big. There are lots of small, lean web browsers out there that, incidentally, do almost nothing useful. But being a shining jewel of perfection was not a goal when we wrote Mozilla."

Examples

A common example of software bloat is the evolution of word processing programs, which have for long been deemed especially resource-hungry in the range of typical productivity applications. It can be argued that the basic tasks - writing and simple type-setting - have been possible since the first such programs were introduced, and that more advanced features bring needless weight to those who rarely need them. On the other hand, several users have since grown used to modern convenience features, and less feature-packed applications are still available for those who prefer them.

The term bloatware in Linux circles tends to be used by advanced Linux users as a pejorative to refer to distros that contain what they perceive to be an excess of software. It can also be used to refer to Windows. It is perceived that when a beginner-friendly distribution such as Linspire, Mandrake or SuSE is installed, a considerable number of unnecessary programs are installed that have a negative effect on the OS's stability or speed.

This is not strictly true. Most distros, including those named above, offer a preset selection of packages that the developer perceives that the average user might need or want. While it is true that most Linux users will only use a small part of this selection, it is possible, even for a beginner, to modify this selection to better suit his or her needs. This software can also be removed or more added later during use.

The wide range of Linux distributions mean that they can be contained on anything from a single floppy disk (1.44MB) to several CDs or DVDs. Mandriva, a popular distribution, is traditionally delivered on 3 CDs, or a single DVD. The latest version of Debian is contained on a massive 14 CDs. Slackware, the apparent distro of choice for Linux users against bloatware, also comes on 4 CDs (only 2 of which are required for a full install).


From encyclopedia.thefreedictionary.com :

Computing minimalism

Computing minimalism refers to keeping the environment of a computer operating system as minimalist as possible (or as needed). Computing minimalism is usually endorsed by computer literates rather than beginners, since beginners appreciate the easy to use, feature rich environments that are presented to them (usually by default). Also, because minimalism goal is to offer a more productive environment to the user, stripping all the unnecessary features is a process that develops with usage. Beginners start with a very large system and customize it gradually to fit their changing needs as they begin to remember the shortcuts, use the menus a little more, etc.

It is important to note here that minimalism does not necessarily imply abandoning the GUI. However, since GUIs tend to use more resources and command line interface programs tend to be more modular in functionality, the link between CLI and minimalism is strong. Still, there are some programs that need GUI because of their nature like graphics editors.

Domains of application

Interface

One reason (and probably the most important nowadays) to seek software minimalism is to increase the performance of the user. This kind of minimalism is illustrated by the user removing desktop icons, window decorations, toolbars or by the user preferring software with minimal feature bloat. Even if some find it easier to have everything on the desktop (one click away), many find that using the keyboard (keyboard shortcuts or simply a terminal emulator, instead of a mouse) is a lot faster. Also, removing toolbars and other window decorations allows the user to use more of his screen space for content. Removing functionality (such as daemons that check email) may also increase the user's productivity by preventing interruptions and freeing up the CPU and RAM for more important tasks.

Resources

Some software comes with unnecessary features and use a large amount of resources (memory, CPU, etc). Minimalists try to replace these with lighter alternatives to improve performances (and start time in some cases). This tends to become less important with the continuing increase of computer performance, but still has a certain importance with operating systems that require more than 256 MB of RAM such as Microsoft Windows.

Programming Languages

In programming language design, it is considered good practice to attempt to express language features in function of already existing language features, which relates directly to minimalism. For instance, in the Scheme programming language, control structures like a while loop need not be defined at the language level, as they can be implemented using hygienic macros, thus making the language specification smaller (which is minimalist) and reusing existing features.


From encyclopedia.thefreedictionary.com :

Creeping featurism

Creeping featurism, or creeping featuritis, is a phrase used to describe software which over-emphasizes new features to the detriment of other design goals, such as simplicity, compactness, stability, or bug reduction.

Creeping featurism is often accompanied by the mistaken belief that "one small feature" will add zero incremental cost to a project, where cost can be money, time, effort, or energy. A related term, feature creep, describes the tendency for a software project's completion to be delayed by the temptation to keep adding new features, without a specific goal.

Creeping featurism is an example of an anti-pattern.

This phrase is sometimes rendered as the spoonerism "feeping creaturism", which brings up the image of each new feature being a small creature which runs around going "feep, feep". The term "creature feep" also appears.

Creeping featurism is usually associated with marketing, sales, or program managment roles. However, developers are not immune to letting features creep in to a software product; many people criticize Emacs as being a prime example of creeping featurism. Emacs proponents, however, tout Emacs' all-in-one nature as one of its primary benefits. Multi-paradigm languages such as C++ have also faced such criticism.


From encyclopedia.thefreedictionary.com :

Simplicity

Simplicity is the property, condition, or quality of being simple or un-combined. It often connotes beauty. Simple things are usually easier to explain and understand than complex ones.

Simplicity is freedom from difficulty or hardship or effort.

According to Occam's razor, all other things being equal, the simplest theory is the most likely to be true - hence the importance of the concept of simplicity in epistemology. According to Thomas Aquinas, God is infinitely simple.


From whatis.techtarget.com :

Lean programming

Lean programming is a concept that emphasizes optimizing efficiency and minimizing waste in the development of a computer program. The concept is that efficiencies can be applied and waste managed at all levels: each individual, every department, interdepartmental operations, the organization as a whole, and the relationships of the organization with customers and suppliers.

Lean programming is based on rules that were developed by several corporations in the 1980s. The rules have an upbeat and positive tenor. For example, waste and intermediate artifacts should be kept to a minimum. Documentation should be concise, and should cover generalities without getting lost in details. Individual workers, as well as customers, should be consulted frequently, and their views and opinions taken seriously. A primary goal is continuous improvement at all levels and in all phases of the operation.


Return to main page