|Think about Loose Coupling|
As someone whose degree is in Civil Engineering (UVA 1993) but programs Perl for a large part of my living, My opinion is in line with Zaxo's: The differences between CS and a 'more mature' disipline like CE are more instructive than the similarities. A fundamental difference is that to be a 'real' civil engineer, one must be licensed. Almost all work done by the profession must be certified by a licensed professional. That certification or 'stamp' carries with it extreme liability (google "joint and serveral")that is mitigated through (expensive) insurance. Also, licensing itself entails 3 year of progressive experience under the direction of a licensed engineer. Licensing is done by the state but is none the less controlled by the profession itself, much as it is with doctors or lawyers.
Having said all that, I don't think that the concrete and iron aspect of CE is what produces the diffences. In fact CE (like all engineering) is more about information. Deliverables are plans, specs, and designs.
There is a school of thought that espouses the idea that some fields are professions. These include: Doctors, Lawyers, Teachers, Engineers. Professions have in common a duty to the public and the ability to self-manage due to the unique set of skills that are required.
Whether or not this pre-20th century idea of a profession can or should embody software development is an interesting question that I have pondered without coming to a firm conclusion. I am certainly not of the belief that all SW developers need be licensed like doctors.
"That is the best engineering, not which makes the most splendid, or even the most perfect, work, but that which makes a work that answers the purpose well, at the least cost"
--Ashbel Welch, President American Society of Civil Engineers, 1882