Seriously Good Software
Code that works, survives, and wins
Marco Faella
  • MEAP began March 2019
  • Publication in Fall 2019 (estimated)
  • ISBN 9781617296291
  • 275 pages (estimated)
  • printed in black & white

An amazing book on Java programming that combines Programming with Software Engineering, Data Structures, and Algorithm Analysis.

Irfan Ullah
Serious developers know that code can always be improved. With each iteration, you make optimizations—small and large—that can have a huge impact on your application’s speed, size, resilience, and maintainability. In Seriously Good Software: Code that Works, Survives, and Wins, author, teacher, and Java expert Marco Faella teaches you techniques for writing better code. You’ll start with a simple application and follow it through seven careful refactorings, each designed to explore another dimension of quality.
Table of Contents detailed table of contents

Part 1 Preliminaries

1 Software Qualities and Problem Statement

1.1 Mostly external software qualities

1.1.1 Correctness

1.1.2 Robustness

1.1.3 Usability

1.1.4 Efficiency

1.2 Mostly internal software qualities

1.2.1 Readability

1.2.2 Reusability

1.2.3 Testability

1.2.4 Maintainability

1.3 Interactions between software qualities

1.4 Special qualities

1.4.1 Thread safety

1.4.2 Succinctness

1.5 Structure of the book

1.6 Specifications for a system of water containers

1.6.1 The API

1.6.2 The use case

1.7 Data model and representations

1.7.1 Storing water amounts

1.7.2 Storing connections

1.8 Hello containers!

1.8.1 Fields and constructor

1.8.2 Methods getAmount and addWater

1.8.3 Method connectTo

1.9 Further reading


2 Reference Implementation

2.1 The code [reference]

2.1.1 Memory layout diagrams

2.1.2 UML Class Diagram

2.1.3 UML Object Diagram

2.1.4 The methods

2.2 Memory requirements

2.3 Time complexity

2.3.1 Time complexity of reference

2.4 Summary

2.5 Applying what you learned

2.5.1 Exercise 1

2.5.2 Exercise 2

2.5.3 Exercise 3 (mini-project)

2.6 Answers to quizzes and exercises

2.6.1 Pop quiz 1

2.6.2 Pop quiz 2

2.6.3 Pop quiz 3

2.6.4 Pop quiz 4

2.6.5 Exercise 1

2.6.6 Exercise 2

2.6.7 Exercise 3

2.8 Further reading


Part 2 Software qualities

3 Need for Speed: Time Efficiency

3.1 Adding water in constant time [speed 1]

3.1.1 Time complexity

3.2 Adding connections in constant time [speed 2]

3.2.1 Representing groups as circular lists

3.2.2 Delaying the updates

3.3 The best balance: union-find algorithms [speed 3]

3.3.1 Finding the group representative

3.3.2 Connecting trees of containers

3.3.3 Worst-case time complexity

3.3.4 Amortized time complexity

3.3.5 Amortized analysis of resizable arrays

3.4 Comparing implementations

3.4.1 Experiments

3.4.2 Theory vs practice

3.5 Summary

3.6 Applying what you learned

3.6.1 Exercise 1

3.6.2 Exercise 2

3.6.3 Exercise 3 (mini-project)

3.6.4 Exercise 4 (mini-project)

3.6.5 Exercise 5

3.7 Answers to quizzes and exercises

3.7.1 Pop quiz

3.7.2 Pop quiz

3.7.3 Pop quiz

3.7.4 Pop quiz

3.7.5 Exercise 1

3.7.6 Exercise 2

3.7.7 Exercise 3

3.7.8 Exercise 4

3.7.9 Exercise 5

3.8 Further reading


4 Precious Memory: Space Efficiency

4.1 Gently squeezing

4.1.1 Space and time complexity

4.2 Plain arrays [memoryb]

4.2.1 Space and time complexity

4.3 Forgoing objects

4.3.1 The object-less API

4.3.2 Fields and getAmount method

4.3.3 Creating containers with a factory method

4.3.4 Connecting containers by ID

4.3.5 Space and time complexity

4.4 The black hole

4.4.1 Space and time complexity

4.5 Space-time trade-offs

4.6 Summary

4.7 Applying what you learned

4.7.1 Exercise 1 (mini-project)

4.7.2 Exercise 2

4.7.3 Exercise 3

4.7.4 Exercise 4

4.7.5 Exercise 5 (mini-project)

4.8 Answers to quizzes and exercises

4.8.1 Pop quiz 1

4.8.2 Pop quiz 2

4.8.3 Pop quiz 3

4.8.4 Pop quiz 4

4.8.5 Pop quiz 5

4.8.6 Exercise 1

4.8.7 Exercise 2

4.8.8 Exercise 3

4.8.9 Exercise 4

4.8.10 Exercise 5

4.9 Further reading


5 Reliability via Monitoring

6 Reliability via Testing

7 Readability

8 Concurrency and Thread Safety

9 Reusability


Appendix A: Succinctness

About the Technology

Great code blends the skill of a programmer with the time-tested techniques and best practices embraced by the entire development community. Although each application has its own context and character, some dimensions of quality are always important. This book concentrates on eight pillars of seriously good software: speed, memory usage, reliability, readability, thread safety, generality, and elegance. The Java-based examples demonstrate techniques that apply to any OO language.

About the book

Seriously Good Software takes you on a journey through software development best practices as you develop a simple inefficient implementation into a robust, professional-quality application. The deceptively-simple problem—balancing water levels in multiple connected containers—presents some interesting complexities as you optimize the code for speed, efficiency, and durability. Author Marco Faella’s passion for teaching shines bright as you learn to assess performance and write thread-safe code that’s easily readable, testable, and maintainable. Along the way, you’ll gain a keen sense of the trade-offs inherent to every programming task, no matter how simple.

Each chapter contains hands-on exercises with complete, clear solutions that relate the techniques to real-world applications. Occasional pop quizzes ensure you’ve got a firm grasp on the concepts as you go along. When you’re done with this book, evaluating software qualities, considering tradeoffs and operational constraints, and asking all the right questions will be a reflex!

What's inside

  • Evaluating software qualities
  • Distinguishing between qualities that are internal, external, functional, and non-functional
  • Assessing tradeoffs and interactions between software qualities
  • Fulfilling different quality objectives for a single unifying task
  • Hands-on exercises and detailed solutions
  • Exercises covering the inner workings of the Java API

About the reader

For developers with basic object-oriented programming skills and intermediate Java skills.

About the author

Marco Faella has been teaching an advanced programming language course for twelve years as an associate professor at a major Italian university. As passionate about programming as he is about teaching, Marco has published many research articles in peer-reviewed journals, a Java certification manual, and a Java programming video course.

Manning Early Access Program (MEAP) Read chapters as they are written, get the finished eBook as soon as it’s ready, and receive the pBook long before it's in bookstores.
MEAP combo $39.99 pBook + eBook + liveBook
MEAP eBook $31.99 pdf + ePub + kindle + liveBook

placing your order...

Don't refresh or navigate away from the page.

FREE domestic shipping on three or more pBooks