1. A method of transmitting data from a source to a destination over a communication channel wherein the data to be transmitted is arranged into an ordered set of input symbols, the method further comprising: designating input subsymbols of the data, wherein an input subsymbol is a portion or all of an input symbol and at least one input symbol is divided into two or more subsymbols and each input subsymbol is identifiable with an index unique within its input symbol; generating a plurality of output subsymbols from the input subsymbols, wherein an output subsymbol is generated from one or more input subsymbol using a value function and a set of associates, the set of associates identifying the input subsymbols to which the value function is applied, wherein at least one output subsymbol is a function of a plurality of input subsymbols each having distinct indices within their input symbols; generating a plurality of output symbols from the generated plurality of outputs of symbols, wherein the plurality of output symbols is such that, for at least one possible set of received output symbols of equal size to the encoded input symbols, additional received output symbols are required to completely decoding of received output symbols to regenerated the encoded input symbols; and transmitting the plurality of output symbols over the communication channel, such that a recipient can regenerate the ordered set of input symbols from some or all of the plurality of output symbols.