Externally indexed torrent
If you are the original uploader, contact staff to have it moved to your account
Textbook in PDF format
Did you learn what a class is but nobody told you how to use it exactly? This book explains it to you. Among with 49 other things.
"Any fool can write code a computer can understand. Good programmers write code humans can understand" - Martin Fowler
There is an infinite amount of possibilities how you can write code with a certain output. But which is the best one? The one you understand most easily. This book covers everything that I could think of. From naming to classes, comments, and even some small chapters on software architecture or requirements engineering.
Currently the book is about version 0.8. It is very well readable and has been mostly corrected using an AI tool, but it still has a few comments about things left to do. I would be very pleased with any feedback you could send to me.
This book contains relatively few code examples. It’s more about general concepts of software engineering, rather than concrete code examples. Still, some concepts are easier to understand with a few lines of code. Therefore, I tried to create some code examples. Even though it’s quite challenging to find concise examples that are still expressive enough to fit into a book. As for the programming languages I chose, mostly Python and some C . Not because these languages would be better than, for example, JavaScript, but rather because these are the languages I know. I chose two programming languages because there are some concepts that I can only explain using one or the other. Though there are only a few things that depend on the programming language. Most of the explanations provided here consist of general recommendations that are applicable to almost any programming language.
1. Introduction to Software Engineering
2. Getting started
3. One sentence summary
4. The short story behind this book
5. Preface
6. Software Engineering
7. Good code: a list of rules
8. Understandable code
9. Single Responsibility Principle
10. Levels of abstraction
11. Interfaces
12. Naming
13. Functions
14. Classes
15. Inheritance
16. Data Types
17. Properties of Variables
18. Introduction to Testing
19. Types of Tests
20. Writing Better Code with Tests
21. SOLID principles
22. Software Engineering Principles
23. Programming Paradigms
24. Programming Languages Java and C
25. Physical Laws of Code
26. Bugs, Errors, Exceptions
27. Complexity
28. Dependencies
29. Decoupling
30. Software Architecture
31. Design Patterns
32. Domain Driven Design
33. 3rd party software
34. Refactoring Fundamentals
35. Refactoring Techniques
36. Refactoring Legacy Code
37. Performance Optimization
38. Comments
39. Logging
40. Data files
41. Setting up a project
42. Tools
43. Working in teams
44. Code review
45. Agile
46. Requirements Engineering
47. Planning
48. DevOps
49. Mental health
50. Hiring and getting hired
51. Examples
52. About Copilot
53. Further reading
54. Outlook
55. Frequently used Abbreviations