I was reading through slashdot.org, and I found a post that asks members of the slashdot community how they “reverse engineer” large software. Numerous replies did not agree with the original poster’s use of the term, “reverse engineering.” Many people held the incorrect notion that reverse engineering is an illegal or unethical practice. I have always believed that “reverse engineering” is the best phrase that describes the practice of taking a given solution and discovering the design decisions that influenced the given solution’s implementation to better understand the solution’s structure. There is a negative perception on reverse engineering, because it has been popularized as the central activity in certain kinds of software theft: algorithm theft and software piracy. Among the uninformative posts, I was able to find a response that had a better understanding of what is reverse engineering and provided reading material that may interest software engineers who join a major software project after a significant portion of the project has been implemented.
Code Reading: The Open Source Perspective
Object-Oriented Reengineering Patterns
Reading Computer Programs: Instructor’s Guide and Exercise
Tips for Reading Code