Win a copy of Testing JavaScript Applications this week in the HTML Pages with CSS and JavaScript forum!
  • Post Reply Bookmark Topic Watch Topic
  • New Topic
programming forums Java Mobile Certification Databases Caching Books Engineering Micro Controllers OS Languages Paradigms IDEs Build Tools Frameworks Application Servers Open Source This Site Careers Other all forums
this forum made possible by our volunteer staff, including ...
Marshals:
  • Campbell Ritchie
  • Bear Bibeault
  • Ron McLeod
  • Jeanne Boyarsky
  • Paul Clapham
Sheriffs:
  • Tim Cooke
  • Liutauras Vilda
  • Junilu Lacar
Saloon Keepers:
  • Tim Moores
  • Stephan van Hulst
  • Tim Holloway
  • fred rosenberger
  • salvin francis
Bartenders:
  • Piet Souris
  • Frits Walraven
  • Carey Brown

Real-World Software Development: Good and bad system design?

 
Greenhorn
Posts: 16
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Hello Sir,

I am a Java developer and these days preparing for interview in FAANG companies. I would like to understand if this book helps me understand the the design aspects when we start to build an application. What needs to be considered before we actually start coding and using algorithms? The right and clean way to go about the complete solution to the problem.

Thanks in advance,
Rashmi
 
Sheriff
Posts: 15811
264
Mac Android IntelliJ IDE Eclipse IDE Spring Debian Java Ubuntu Linux
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
I've looked over the book's table of contents and most of the sample pages available for preview so I'll offer an opinion and let the author(s) chime in when they join.

First, a caveat. Your question is quite broad so you should expect a broad answer. My broad answer to you would be yes, you can expect some help from the book. In particular, the advice I think would be most useful if you're just starting out is KISS which, according to the book, stands for "Keep it Short and Simple" (the version I know is less polite and focuses on simplicity).

One set of "rules" related to simplicity that I live by which the book doesn't appear to specifically mention is Kent Beck's 4 Rules of Simple Design. I'd encourage you to learn and follow those rules as well. Many of the other rules that are discussed in the book can be derived from Beck's 4 rules.
 
Author
Posts: 26
12
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator

Rashmi varma wrote:Hello Sir,

I am a Java developer and these days preparing for interview in FAANG companies. I would like to understand if this book helps me understand the the design aspects when we start to build an application. What needs to be considered before we actually start coding and using algorithms? The right and clean way to go about the complete solution to the problem.

Thanks in advance,
Rashmi



Hello & thank you for your question. This books certainly will help you with the software design aspects when you start building a Java application. We do not cover interview-style algorithmic questions though.
There are broadly four themes in our book:

Java Features
Structuring code with classes and interfaces is discussed in Chapter 2. We move onto exceptions and packages in Chapter 3. You will also get a short overview of lambda expressions in Chapter 3. Then local variable type inferences and switch expressions are explained in Chapter 5, and finally lambda expressions and method references are covered in detail in Chapter 7. Java language features are important because so many software projects are written in Java, so it’s useful language to know the workings of it. Many of these language features are useful in other programming languages as well, such as C#, C++, Ruby, or Python. Even though those languages have differences, understanding the how to use a class and core OOP concepts will be valuable across different languages.

Software Design and Architecture
Throughout the book a series of design patterns are introduced that help provide you with common solutions to common problems that developers encounter. These are important to know because even though it may seem like every software project is different and comes with its own set of problems, in practice many of these have been encountered before. Understanding common problems and solutions that have been solved by developers keeps you from reinventing the wheel in a new software project and enables you to deliver software faster and more reliably.

The higher-level concepts of coupling and cohesion are introduced early on the book in Chapter 2. The Notification pattern is introduced in Chapter 3. How to design a user-friendly Fluent API and the Builder pattern are introduced in Chapter 5. We look at the big-picture concepts of event-driven and hexagonal architectures in Chapter 6 and the Repository pattern in Chapter 7. Finally, you’re also introduced to functional programming in Chapter 7.

SOLID
We cover all the SOLID principles throughout various chapters. These are a set of principles designed to help make software easier to maintain. While we like to think of writing software as the fun part, if the software that you write is successful it will need to evolve, grow, and be maintained. Trying to make the software as easy to maintain as possible helps this evolution, maintenance, and long-term addition of features. The SOLID principles and the chapters where we will discuss them are:

- Single Responsibility Principle (SRP), discussed in Chapter 2
- Open/Closed Principle (OCP), discussed in Chapter 3
- Liskov Substitution Principle (LSP), discussed in Chapter 4
- Interface Segregation Principle (ISP), discussed in Chapter 5
- Dependency Inversion Principle (DIP), discussed in Chapter 7

Testing
Writing reliable code that can be easily evolved over time is really important. Automated tests are key to this. As the software that you write scales in size it becomes increasingly hard to manually test different possible cases. You need to automate your testing processes to avoid the days of human effort it would take to test your software without it.

You learn about the basics of writing tests in Chapters 2 and 4. This is extended to test-driven development, or TDD, in Chapter 5. In Chapter 6 we cover the use of test doubles, including mocks and stubs.
 
You would be much easier to understand if you took that bucket off of your head. And that goes for the tiny ad too!
Building a Better World in your Backyard by Paul Wheaton and Shawn Klassen-Koop
https://coderanch.com/wiki/718759/books/Building-World-Backyard-Paul-Wheaton
    Bookmark Topic Watch Topic
  • New Topic