Because you don't have enough of the correct information already in the genetic code for a fish to develop into a bird.
First, let's not confuse modern fish with the "fish" that tetrapods initially evolved from.
A modern salmon for example, has been evolving and specializing further for hundreds of millions of years since the migration to land occurred. The common ancestor would have been quite different.
Having said that, what is DNA, really? It's a string of molecules. Simplistically put, it's 4 different molecules commonly noted as C, T, G and A.
At bottom, the only difference between two species, is the arrangement of those 4 molecules over a DNA string.
Now, what does evolution actually do at the genetic level?
It mutates such a string in a variety of ways. It changes "letters", so it might turn a T into a G.
It can duplicate letters or entire sequences of letters.
It can remove letters.
It can move letters around.
In other words, it can all operations required to turn it into something very different overtime.
There is one important limitation though. It uses inheritance.
Meaning that this process will produce nested hierarchies.
So if a population evolves genes to build feathers, all their off spring will have that genetic sequence. It might mutate further in sub-lineages, but the core of the sequence will be there regardless. While in peer populations, those genes will not be present. This is why finding a mammal with feathers will disprove evolution.
So, to conclude....
The ancestor of modern fish and humans, had DNA. The "information" for building humans and salmon did not exist at that time, correct. But the alfabet that codes for such information, did. The basic common template of both human and samon DNA existed also, in that ancestral population.
Over hundreds of millions of years, one lineage's DNA was tinkered with through mutation every generation and ended up in the DNA of humans. The other ended up in the DNA of salmon.
Consider the analogy of language.
There is a language Latin. It uses an alfabet. Latin does not contain the "information" for Italian and French.
Over time however, latin disappeared and split into several lineages. One lineage's phonetics was tinkered with through "mutation" (=basically the process by which dialects form) and turned out to become Italian. The other became French.
yet no latin speaking mother ever raised an italian speaking child...
You would need to design a completely different code.
It is absolutely not "completely different code".
It's the exact same code. Strings of molecules, only 4 different ones, arranged a bit differently.
That's why you can get from a wolf to a Weiner dog but not from a canine to a giraffe.
If a canine would produce a giraffe, evolution theory would be disproven.