You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: source/10-background.rst
+17-1Lines changed: 17 additions & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -179,4 +179,20 @@ Before drawing any conclusions from these indices, it is important to understand
179
179
180
180
.. note::
181
181
182
-
When consulting any popularity or performance index, ask: *What is the data source?* (search queries, job postings, GitHub commits, or benchmark runs each capture different things.) *What counts as "a language"?* (Some indices conflate dialects or treat Jupyter notebooks as Python.) *Does the index weight by project size or contributor count?* Understanding methodology prevents over-interpreting rankings. The PYPL and TIOBE indices publish their methodology; always read it before drawing conclusions.
182
+
When consulting any popularity or performance index, ask: *What is the data source?* (search queries, job postings, GitHub commits, or benchmark runs each capture different things.) *What counts as "a language"?* (Some indices conflate dialects or treat Jupyter notebooks as Python.) *Does the index weight by project size or contributor count?* Understanding methodology prevents over-interpreting rankings. The PYPL and TIOBE indices publish their methodology; always read it before drawing conclusions.
183
+
184
+
185
+
Summary and further reading
186
+
~~~~~~~~~~~~~~~~~~~~~~~~~~~
187
+
188
+
This chapter establishes the conceptual and practical context for the rest of the book. Software requirements — both functional and nonfunctional — motivate language and paradigm choices throughout the course: testability drives separation of concerns, performance motivates complexity analysis, and maintainability favors clean, modular designs. Lightweight development practices (automated testing, refactoring, continuous integration) and SOLID design principles and patterns recur in every paradigm chapter as the standards against which code quality is measured.
189
+
190
+
The programming language history and paradigms section shows that no single paradigm is universal: imperative, object-oriented, functional, logic, and concurrent programming each reflect a distinct model of computation, and real systems routinely combine them. Because all Turing-complete languages share the same fundamental expressive power, the interesting questions are about expressiveness of *style*, safety guarantees, and fit to the problem domain — themes developed in depth throughout the book.
191
+
192
+
Further reading:
193
+
194
+
- Robert W. Sebesta, *Concepts of Programming Languages* (12th ed., Pearson) — accessible survey of language design, paradigms, and implementation.
195
+
- Peter Van Roy and Seif Haridi, *Concepts, Techniques, and Models of Computer Programming* (MIT Press, 2004) — systematic treatment of paradigms organised around the concept diagram linked in this chapter.
196
+
- Martin Fowler, *Refactoring: Improving the Design of Existing Code* (2nd ed., Addison-Wesley, 2018) — the standard reference on refactoring and code smells.
197
+
- Robert C. Martin, *Clean Code* (Prentice Hall, 2008) — practical guidance on writing maintainable code aligned with the NFRs discussed here.
198
+
- `ThoughtWorks Technology Radar <https://www.thoughtworks.com/radar>`_ — regularly updated survey of languages, frameworks, and tools, useful for understanding current industry practice.
0 commit comments