1. our company doesn't have a good culture and discipline to write good document. too many things are passed down from mouth to ear, if you are lucky to find someone to teach you.
more often, you have to debug to understand code. and I'm talking about millions of lines of device driver code.<p>2. we still use very old c99 and pre c++11 standard. on the surface, the reason is because we want to support very old linux distros which don't have new c runtime. but I think the real reason is because the team is in control of old stubborn engineers who have great nostalgia feeling for the c language.<p>3. I don't think my daily experience is very rewarding as I spend most of my hours digging other people's code, as there is no document. and in the end of the day, the knowledge I gained was simply some old rules/designs set by previous engineers. I don't think this is real domain knowledge and certainly not very useful outside the company. just because someone joined the company few years before me, his decisions have become things I have to learn and follow.<p>4. most of my work is maintenance work, making sure others don't introduce bugs and fixing bugs. not too much new ideas or projects, as this is a very established and stabilized area.