Email the Author
You can use this page to email Marty Yoo about Multi-Paradigm Programming.
About the Book
Chapters 1–3 Are Available on GitHub
I have made the first three chapters of this book publicly available on GitHub at https://github.com/marpple/multi-paradigm-programming. Feel free to explore these chapters and get a preview of the concepts and style before diving into the full book. I hope you find them helpful and engaging.
--
Chapter 1 How Multi-Paradigm Thinking Extends Modern Languages
Traces the origins and convergence points that led modern languages to embrace multiple paradigms. Explores the concepts of object-oriented, functional, logic, and other paradigms, and shows how each broadens the expressive range of today’s languages.
Chapter 2 Functional Programming, Type Systems, and LISP
Introduces core FP concepts and the role of type systems. Reviews LISP’s history and traits, highlighting its strengths as a functional language. Covers type inference, function types, and generics, and discusses how functional type systems and metaprogramming empower multi-paradigm languages.
Chapter 3 Code : Object : Function = Generator : Iterator : LISP = IP : OOP : FP
Examines the relationship between code, objects, and functions in imperative (IP), object-oriented (OOP), and functional (FP) programming. Explores the “code is data” idea and the importance of logic-bearing lists. Uses Haskell to broaden modern-language perspectives, provides a concrete guide to lazy evaluation, and shows how generators, iterators, and LISP achieve laziness and composition.
Chapter 4 Asynchronous Programming
Explains why async programming matters and surveys common models. Demonstrates how to treat async results as values to improve readability and maintainability, and shows how lazy evaluation can optimize performance in asynchronous workflows.
Chapter 5 Functional Programming in Practice
Delivers practical FP code: solving algorithm problems, building backend schedulers, and patternizing list processing. Presents reusable techniques—especially for microservices architectures (MSA)—that frequently arise in real-world back-end development.
Chapter 6 Multi-Paradigm Programming
Goes hands-on with mixing paradigms. Provides clear guidance on when and how to combine object-oriented, functional, and imperative styles to solve real problems effectively.
Chapter 7 Object-Oriented Front-End Development and Multi-Paradigm Applications
Applies multi-paradigm patterns to front-end engineering, starting from solid OO design and extending it with functional and other paradigms for richer, more maintainable UI code.
--
How can we effectively leverage modern programming languages that support object-oriented, functional, and imperative paradigms all at once?
In the past, programming languages were largely divided into functional, object-oriented, and procedural languages. However, this trend has changed. With the rise of hybrid programming languages that incorporate both functional and object-oriented features, most major programming languages—such as Java, C#, Scala, TypeScript, JavaScript, Kotlin, and Swift—are now considered multiparadigm. This has become a common characteristic of languages widely used in the industry.
These languages support not only object-oriented features like classes, inheritance, and interfaces, but also a broad range of functional programming capabilities including first-class functions, list processing, lazy evaluation, and asynchronous/concurrent operations. Additionally, they offer flexible type systems, type inference, generics, and utility types, and can even mix static and dynamic typing.
Why have most modern programming languages become multiparadigm?
Some problems are better solved using a functional approach, while others are more suited to object-oriented programming. Developers no longer need to debate whether functional programming is inherently superior to object-oriented, or whether static typing is better than dynamic typing. Standard-setting bodies and corporations that design programming languages have evolved them to support multiple paradigms within a single language, and as a result, we can now combine various paradigms within a single project—or even a single function.
Back to basics—solid fundamentals undoubtedly lead to exceptional adaptability.
Perhaps we rely too heavily on specific libraries or frameworks, following their limited paradigms without fully exploring the range of features and paradigms available at the language level. Many techniques used in functional or object-oriented programming languages have a deep history and have been validated by solving countless real-world problems. Programmers skilled in a wide array of language-level features can solve more problems quickly, safely, and flexibly. Moreover, they can write code in a more fundamental way, free from the constraints of any particular library.
Paradigms are not limited to a single language, and multiparadigm programming is widely prevalent across modern programming languages.
Although this book primarily uses TypeScript, it covers techniques and concepts applicable to other languages like Java, C#, Scala, Kotlin, and Swift. It shows how to apply functional programming in real-world settings while maintaining your existing environment and language. By presenting code that combines both object-oriented and functional programming approaches, it helps you effectively utilize multiparadigm languages and broaden your problem-solving capabilities.
To advance to a mid- or senior-level developer, it’s essential to study more traditional techniques, programming languages, and paradigms in depth.
And this journey is both fascinating and enjoyable. Through this book, I hope you’ll experience the broad possibilities of multiparadigm languages, enhance your skills in advanced language features, and develop software design and implementation capabilities that blend functional, object-oriented, and LISP paradigms. Most importantly, I hope you’ll deepen your appreciation for the joy of computer programming and software engineering.
About the Author
He is the CTO of Mapple Corporation and has 22 years of experience as a software engineer. He worked as a developer at Kakao and at NCSoft’s OpenMaru team. He has provided technical training to developers at major Korean IT companies such as Nexon, Naver, and Kakao. Proficient in numerous languages and technologies—including TypeScript, Objective-C, Java, Node.js, PostgreSQL, Clojure, Kotlin, and Ruby on Rails—he continues to build extensive software development expertise.