Since the only thing a computer can do is modify its machine state, and you can always change from one state into another state (there exists such a program) and so each program is invertible; and if all the programs are deterministic, then associativity also makes sense. Two programs are considered equivalent iff they do the same thing to the machine's state, given any starting state.
So do I have the title right or not?
The short answer is that the set of all computer programs can reasonably be made into a monoid, but probably not a group, since not every program has an inverse.
Let's assume that $S$ is the set of all states of the computer, and $P$ is the set of all computer programs. Let's also assume that for every program $a$, that program has an interpretation, written $i[a]$, which is a function $S \to S$ which describes the effect that the program $a$ has when it's executed. Define $i[P]$ as the set of all program interpretations, which is to say, the set $\{ i[a] : a \in P \}$. Notice that $i[P]$ is a subset of the set of all functions $S \to S$.
Presumably, there is a trivial program $0$ which leaves the state of the computer unaffected; the interpretation function $i[0]$ is the identity function. Also, given two programs $a$ and $b$, there is presumably a "composite" program $b \cdot a$ which has the same effect as running $a$ and $b$ in sequence; the interpretation functions satisfy the equation $i[b \cdot a] = i[b] \circ i[a]$. These two facts mean that the set $i[P]$ is in fact a monoid; specifically, it's a submonoid of the monoid of all functions $S \to S$.
However, is $P$ itself a monoid? It depends.
Suppose that our programming language has the property that the empty string is the trivial program $0$, and that given two programs $a$ and $b$, we can simply concatenate them to obtain the composite program $b \cdot a$. In this case, $P$ is a monoid with the empty string as the identity element and string concatenation as the operation. Furthermore, the interpretation functional $i$ is an action of $P$—in other words, the monoid $P$ "works correctly" with respect to the meanings of programs.
However, with most real-world programming languages, such as C#, it's not possible to compose two programs by merely concatenating them. But it is usually possible to define some way of composing two programs. If we're not careful, we'll end up with a definition of program composition which is not associative—given programs $a$, $b$, and $c$, the composite programs $(c \cdot b) \cdot a$ and $c \cdot (b \cdot a)$ will be two different programs that do the same thing. In this case, $P$ fails to be a monoid.
But, by using care and creativity, it should be possible to define program composition in such a way that it is associative, in which case $P$ is once again a monoid.
In general, programs are not invertible, so there is no reasonable way to define $P$ as a group. For example, if the program
x = 0;sets the variablexto $0$, then there is no programpsuch that the programp; x = 0;causesxto remain unchanged, and so the programx = 0;has no inverse.However, if we consider the set $R$ of all reversible computer programs, we could define a group structure on $R$ in pretty much the same way we defined a monoid structure on $P$.