Real-World Software Development - A Project-Driven Guide to Fundamentals in Java.

This document was uploaded by one of our users. The uploader already confirmed that they had the permission to publish it. If you are author/publisher or own the copyright of this documents, please report to us by using this DMCA report form.

Simply click on the Download Book button.

Yes, Book downloads on Ebookily are 100% Free.

Sometimes the book is free on Amazon As well, so go ahead and hit "Search on Amazon"

Explore the latest Java-based software development techniques and methodologies through the project-based approach in this practical guide. Unlike books that use abstract examples and lots of theory, Real-World Software Development shows you how to develop several relevant projects while learning best practices along the way. With this engaging approach, junior developers capable of writing basic Java code will learn about state-of-the-art software development practices for building modern, robust and maintainable Java software. You’ll work with many different software development topics that are often excluded from software develop how-to references. Featuring real-world examples, this book teaches you techniques and methodologies for functional programming, automated testing, security, architecture, and distributed systems. Mastering software development involves learning a disparate set of concepts. If you’re starting out as a junior software developer, or even if you’re more experienced, it can seem like an insurmountable hurdle. Should you be spending time learning about established topics in the object-oriented world such as SOLID principles, design patterns, or test-driven development? Should you be trying out things that are becoming increasingly popular such as functional programming? Even once you’ve picked some topics to learn it’s often hard to identify how they fit together. When you should go down the route of applying functional programming ideas in your project? When do you worry about testing? How do you know at what point to introduce or refine these techniques? Do you need to read a book on each of these topics and then another set of blog posts or videos to explain how to put things together? Where do you even start? Don’t worry, this book is here to help you. You will be helped through an integrated, project-driven approach to learning. You’ll learn the core topics that you need to know in order to become a productive developer. Not only that, but we show how these things fit together into bigger projects. Each chapter is structured around a software project. At the end of a chapter, if you’ve been following along, you should be able to write that project. The projects start off as simple command-line batch programs but grow in complexity to fully fledged applications. You’ll benefit from a project-driven structure in a variety of ways. First, you get to see how different programming techniques work together in an integrated setting. When we look at functional programming toward the end of the book, it isn’t just abstract collection-processing operations—they’re presented in order to calculate actual results used by the project in question. This solves the problem of educational material showing good ideas or approaches, but developers often use them inappropriately or out of context. Second, a project-driven approach helps ensure that at each stage you see realistic examples. Educational materials are often full of example classes called Foo and methods called bar. Our examples are relevant to the projects in question and show how to apply the ideas to real problems, similar to the ones that you may encounter in your career. Finally, it’s more fun and engaging to learn this way. Each chapter is a fresh project and a fresh opportunity to learn new things. We want you to read through to the end and really enjoy turning the pages as you’re reading. The chapters start with a challenge that will be solved, walk you through the solution, and then end by evaluating what you learned and how the challenge was solved. We specifically call out the challenge at the beginning and end of every chapter to ensure that its goals are clear to you. Supplemental material (code examples, exercises, etc.) is available for download at https://github.com/Iteratr-Learning/Real-World-Software-Development Raoul-Gabriel Urma is a PhD student in Computer Science at the University of Cambridge. His research centers on programming languages and software engineering. He is an author of the upcoming book Java 8 in Action: Lambdas, Streams, and functional-style programming published by Manning. Richard Warburton is an empirical technologist and solver of deep-dive technical problems. Recently he has worked on data analytics for high performance computing and authored Java 8 Lambdas for O'Reilly. He is a leader in the London Java Community and organized the Adopt-a-JSR programs for Lambdas and Date and Time in Java 8. Richard also frequently speaks at conferences, and has presented at JavaOne, DevoxxUK, Geecon, Jfokus and JAX London. He obtained a PhD in Computer Science from The University of Warwick, where his research focused on compiler theory.

Author(s): Raoul-Gabriel Urma, Richard Warburton.
Edition: 1
Publisher: O’Reilly
Year: 2020

Language: English
Pages: 202
Tags: java

Chapter 1. Starting the Journey
In this chapter, we’ll give you an introduction to the concepts and principles of this book. A good way of summarizing the overall approach is Practices and Principles over Technology. There are already many books about specific technologies, and we aren’t seeking to add to that enormous pile. That isn’t to say that the detailed knowledge that is specific to a given language, framework, or library isn’t useful. It’s just that it has a shorter shelf-life than general practices and principles that apply over longer periods of time and across different languages and frameworks. That’s where this book can help you.

Chapter 2, The Bank Statements Analyzer
You’ll write a program to analyze bank statements in order to help people understand their finances better. This will help you to learn more about core object-oriented design techniques such as Single Responsibility Principle (SRP), coupling, and cohesion.

Chapter 3, Extending the Bank Statements Analyzer
In this chapter you learn how to extend the code from Chapter 2, adding more features, using the Strategy Design pattern, the Open/Closed Principle, and how to model failures using exceptions.

Chapter 4, The Document Management System
In this chapter we help a successful doctor manage her patient records better. This introduces concepts such as inheritance within software design, the Liskov Substitution Principle, and tradeoffs between composition and inheritance. You will also learn how to write more reliable software with automated test code.

Chapter 5, The Business Rules Engine
You’ll learn about building a core business rules engine—a way of defining business logic that is flexible and easy to maintain. This chapter introduces the topics of test-driven development, developing a Fluent API, and the Interface Segregation Principle.

Chapter 6, Twootr
Twootr is a messaging platform that enables people to broadcast short messages to other users who follow them. This chapter builds out the core of a simple Twootr system. You’ll learn how to think outside-in—to go from requirements through to the core of your application. You’ll also learn how to use test doubles to isolate and test interactions from different components within your codebase.

Chapter 7, Extending Twootr
The final project-based chapter in the book extends the Twootr implementation from the previous chapter. It explains the Dependency Inversion Principle and introduces bigger picture architectural choices such as event-driven and hexagonal architectures. This chapter can help you extend your knowledge of automated testing by covering test doubles, such as stubs and mocks, and also functional programming techniques.

Chapter 8, Conclusion
This final concluding chapter revisits the major themes and concepts of the book and offers additional resources as you continue in your programming career.