It is very difficult to realize what you objectively work on sometimes. Every organization internally tries to justify the product they build as "good". People don't want to openly admit they work on a product that is bad for society but generates money, so they lie to themselves.
Yes. This is so true. This is something we need to teach young software engineers - to try and identify the true business model from the model that the company is claiming to incoming employees. To question what you've been told at face value, and to be brave enough to walk away or put your foot down when you find out you've been had.
I've been there. I often wonder how many others in the industry have.
The truth of this matter is that most people really don't care. On top of this, schools generally communicate with the business world to figure out what their curriculum is going to be (after all, that's where you're expected to go when you finish studying). To my mind, it is then not a huge leap to figure out that a strong foundation in ethics is not a desirable quality. After all, what big company these days doesn't want something that's at least a dark gray?
That's what I'm hoping we can change. When I think of Engineering, I think of trades that tend to have a firm grasp on ethics and take the consequences of what they build very seriously. I know that organizations like the ACM and IEEE espouse those same virtues, and I think they are not only worthy virtues but also important. Something worth being uncomfortable - or even discarded by less ethical companies - in order to defend.
Ethics not being a desirable quality to some (many? That seems too bold to assert) businesses is ironically part of the reason why ethics is so important to hold onto as an engineer. Some businesses would be elated to find software engineers that have discarded their sense of ethics entirely, to the profit of themselves and the harm of our society.