Boat anchor (metaphor)

In amateur radio and computing, a boat anchor or boatanchor is something obsolete, useless, and cumbersome – so-called because metaphorically its only productive use is to be thrown into the water as a boat mooring. Terms such as brick, doorstop, and paperweight are similar.

Amateur radio
In amateur radio, a boat anchor or boatanchor is an old piece of radio equipment. It is usually used in reference to large, heavy radio equipment of earlier decades that used tubes. In this context boat anchors are often prized by their owners and their strengths (e.g. immunity to EMP) emphasised, even if newer equipment is more capable.

An early use of the term appeared in a 1956 issue of CQ Amateur Radio Magazine. The magazine published a letter from a reader seeking "schematics or conversion data" for a war surplus Wireless Set No. 19 MK II transceiver in order to modify it for use on the amateur bands. The editor added this reply: "The only conversion we seem to have on the files here at CQ calls for 100 feet of 1 inch Manila line, one end of which is to be tied securely around the MK II Transceiver. This then converts the unit into a fine anchor for a small boat. If any readers have better conversions we will be glad to hear about them. — Ed." The editor's use of the term generated some reader interest, and in February 1957, CQ published a follow-up story that included photos.

Computers
The metaphor transfers directly from old radios to old computers. It also has been extended to refer to relic software.

Hardware
Early computers were physically large and heavy devices. As computers became more compact, the term boat anchor became popular among users to signify that the earlier, larger computer gear was obsolete and no longer useful.

Software
The term boat anchor has been extended to software code that is left in a system's codebase, typically in case it is needed later. This is an example of an anti-pattern and therefore can cause many problems for people attempting to maintain the program that contains the obsolete code. The key problem comes from the fact that programmers will have a hard time differentiating between obsolete code which doesn't do anything and working code which does. For example, a programmer may be looking into a bug with the program's input handling system, so they search through the code looking for code that links into the input handling API. Obviously if the programmer comes across obsolete input handling code they may well start editing and debugging it, wasting valuable time before they realise that the code that they're working with is never executed and therefore not part of the problem they're trying to solve. Other problems include longer compile times and the risk that programmers may accidentally link working code into the defunct code, inadvertently resurrecting it. A recommended solution for dealing with boat anchors in source code is to remove them from the code base and to place them in a separate location so that they can be referred to if necessary, but will not be compiled or be mistaken as "working" code. (For example, deleting them, knowing they are stored in the project's source control)