When I start a new semester recurrently ask myself: Which software engineering book to use? Yes, we need a book, as a reference point for students, a place where they can find the concepts, but classes actually diverge from it.
Classes where the teacher lists concepts, and there are a lot of concepts to learn in a introductory course on software engineering, are boring, they have the syndrome of slideware bullet driven presentations. Nevertheless, on the internet, we can find extensive information where professionals describe real problems and how they have dealt with them.
Therefore, teaching software engineering in the 21st century is both an easy and a challenging task; easy because there are so many great sources of information on software engineering written by professionals; challenging because these sources cannot be provided to students as is, they assume readers already master the basic concepts. Software engineers write descriptions of their professional experience that are full of, explicit and implicit, relations between concepts that a novice cannot fully grasp. The knowledge, the deep understanding of software engineering, is in these cross references. Learning is a process where the learner becomes aware of the relations between information. A software engineer is someone that creates software products by exercising these relations.
It is frustrating to teach a software engineering course based on a book, from which you pick the concepts, and we can find the same concepts presented in different books, using different formulations, but, basically, slightly variations of the same concepts, and ending up preventing me from providing to students real case descriptions because, either, they do not conform to the book formulation, or are “too rich” to be understandable by them.
To cope with this frustration is this companion for. A place where I can relate concepts, highlight their nuances, explore the professionals best practices by establishing a net of references, and, more importantly, do not restrain myself to add more sources, just because they do not follow a style of presentation, a conceptual formulation, or a perspective on software engineering. Contrarily to a book, the companion is an open entry point from where the student can deepen her understanding and become self-sufficient, become a software engineer.
This software engineering companion intends to provide a conceptual framework, that together with the links to the sources of information, enable students to smoothly advance in their learning process, going deeper in the concepts and the practices of software engineering, becoming progressively acquainted with the language software engineers use everyday in their work.