Understanding a piece of software is an important activity of software development, and one with a big social emphasis. An average software project requires several people to work together in collaboration. When trying to understand programs, to maintain or evolve them, developers turn first to the code and, when that fails, to their social network, i.e., the development team. Nevertheless, it is not easy to go for the team, mainly due to the lack of expertise awareness (who to ask), wasteful interruptions of the wrong people (unclear expertise localisation) and unavailability (either due to intrusion or time constraints).Frameworks proved to be a powerful technique for large-scale reuse, but developers have to invest considerable effort to understand them. Their design is often very complex and hard to communicate, turning good quality documentation a crucial part. Producing such documentation can be costly as it needs to be easy to use, to cover different audiences, and to present different types of documents using different notations. But even if the documentation is produced with quality standards, the learners need to acquire knowledge from it and their cognitive needs must be attended. If the documentation doesn't help, or partially helps, how and where does the learner look for the knowledge needed to understand the framework and solve the task at hand?In this dissertation, the author pursues solutions to tackle these issues concerning framework understanding, aiming to answer how can framework understanding be improved and how can learners help each other without too much effort? The solutions proposed in this dissertation combine two approaches: best practices and collaborative learning.Observation and historical analysis show that understanding frameworks typically encompass a recurrent set of problems. If learners are aware of these obstacles and how to proceed to overcome them, they will surely accelerate their learning process. Therefore, a set of proven good solutions to those recurrent problems is presented in the form of patterns. These best practices aim at answering questions regarding where to start learning, at what level of abstraction should one go, how to cope with one's cognitive needs, and how to keep the knowledge produced. They provide a process of going through the documentation and, if it proves insufficient, alternative ways to gather information about the framework. To introduce collaboration into this learning experience, a collaborative environment was ii abstract developed -the DRIVER platform.The DRIVER platform is a collaborative learning environment where framework users can, in a non-intrusive way, store and share their learning knowledge while following the best practices of framework understanding (patterns). It provides a framework documentation repository, mounted on a wiki, where the learning paths (how did one learn) of the community of learners can be captured, shared, rated, and recommended. Combining these social activities, the DRIVER platform promotes coll...