(The title of the post must be changed to something more neutral because by answering the poster self declares that they are an expert, which not only seems unlikely of most people, but also makes ones such as yours truly withhold from answering due to the connotations, and requires prefaces of this kind to address their apprehensions.)<p><i></i>Software Engineering<i></i><p>About C++: <i>The Design and Evolution of C++</i> and <i>The C++ Programming Language</i>, both by Bjarne Stroustrup, the creator of C++. The first one is a snapshot of his philosophy during early years of C++ and is useful to understand the motivations etc. It provides insight. The second one, after the necessary introduction to the language, shows how he uses C++, or expects to be used, which is interesting in its own way.<p>About algorithms: <i>Algorithm Design</i> by Kleinberg and Tardos. This gives the much needed insight instead of maths equations, data structure implementations or a catalog of what to apply where, which are all good, but are useless without insight.<p><i></i>Mechanical Engineering<i></i> (ME is a large field, and I will limit to these two books.)<p>Stephen Timoshenko's two volume <i>Strength of Materials</i> is a seminal work, and still relevant, on a topic that is at the core of mechanical and civil engineering.<p>Shigley's <i>Mechanical Engineering Design</i> deals with designing machine parts, which is in a sense an applied strength of materials topic, and the book addresses that part quite effectively, though not as comprehensively as Timoshenko's. More importantly, the book gives enough motivation and insight for the design process, without which engineers would just be "design monkeys" that use latest CAE packages.