A program is (a) the expression of an idea (b) such that a machine can run it and produce a change (c) compatible with that idea. (b is what makes software unique)

difficulty(a) >> difficulty(b) > difficulty(c)

Not only software is not physical, but any program is like many alphabets (coding languages/environments) + many dictionaries (names for blocks/data) + craftsmanship (using information flows and domain knowledge for conveying the idea into the program).

 

http://news.ycombinator.com/item?id=3795513