Skip to content

Commit b8bb568

Browse files
Ranga Rao KaranamRanga Rao Karanam
Ranga Rao Karanam
authored and
Ranga Rao Karanam
committed
Reorganizing - 2
1 parent 6b1687d commit b8bb568

File tree

1 file changed

+35
-49
lines changed

1 file changed

+35
-49
lines changed

README.md

+35-49
Original file line numberDiff line numberDiff line change
@@ -22,42 +22,31 @@ I've been Programming, Designing and Architecting Java applications for 15 years
2222
## Coding
2323

2424
### Java Tips
25-
### Why should you have minimum scope for variables?
26-
27-
### Why should you understand performance of String Concatenation?
28-
29-
### What are the best practices with Exception Handling?
30-
31-
### When is it recommended to prefer Unchecked Exceptions?
25+
#### Why should you have minimum scope for variables?
26+
#### Why should you understand performance of String Concatenation?
27+
#### What are the best practices with Exception Handling?
28+
#### When is it recommended to prefer Unchecked Exceptions?
3229
- Spring Framework
33-
34-
### When do you use a Marker Interface?
35-
36-
### Why are ENUMS important for Readable Code?
37-
38-
### Why should you minimize mutability?
39-
40-
### What is functional programming?
41-
42-
### Why should you prefer Builder Pattern to build complex objects?
43-
44-
### Why should you avoid floats for Calculations?
45-
46-
### Why should you build the riskiest high priority features first?
47-
30+
#### When do you use a Marker Interface?
31+
#### Why are ENUMS important for Readable Code?
32+
#### Why should you minimize mutability?
33+
#### What is functional programming?
34+
#### Why should you prefer Builder Pattern to build complex objects?
35+
#### Why should you avoid floats for Calculations?
36+
#### Why should you build the riskiest high priority features first?
4837

4938
### Code Quality
50-
###Code Quality Overview
39+
#### Code Quality Overview
5140
![Code Quality Overview](images/CodeQuality.png)
52-
41+
https://github.com/in28minutes/java-best-practices/blob/master/pdf/CodeQuality.pdf
5342
- More than everything else, code quality is an attitude. Either, the team has it or not. The attitude to refactor when something is wrong. The attitude to be a boy scout. As an architect, it is important to create an environment where such an attitude is appreciated. (There are always bad sheep, who take the code quality to such depth that it is not fun anymore, but I like them more than developers who keep churning out bad code).
5443
- Have a good static analysis tool(and is part of Continuous Integration). Sonar is the best bet today. Understand the limits of Static Analysis. Static Analysis is not a magic wand. For me, results from Static Analysis are a signal: It helps me decide where I should look during peer or architect reviews?
5544
- Have good peer review practices in place. Every user story has to be peer reviewed. Put more focus on peer reviews when there is a new developer or there is a new technical change being done. Make best use of Pair Programming. The debate is ongoing : Is pair programming more productive or not? I would rather stay out of it. You make your choice. However, these two scenarios are bare minimum:
5645
- Onboarding a new programmer. Makes him comfortable with all the new things he has to encounter.
5746
- Implementing a complex functionality.
5847
- Next question is how to approach a Code Review. Difficult to cover everything. I would make a start. When doing a code review, I start with static analysis results (for example, sonar). I spend 10 minutes getting an overview of components and/or layers (focusing on size and dependencies). Next I would pick up a unit test for a complex functionality. I feel unit tests are the best place to discover the dependencies and naming practices (I believe good names = 50% of maintainable code). If a programmer can write a simple and understandable unit test, he can definitely write good code. Next, I look for 4 principles of Simple Design. After this, there are 100 other things we can look for - You decide.
5948

60-
### Why should you not take code quality tools at face value?
49+
#### Why should you not take code quality tools at face value?
6150
- If a project has a great Sonar report, does it mean it is perfect?
6251
- Nope, code quality tools are just a guidance!
6352
- Your focus should be to write code that adheres to "4 Principles of Simple Design"
@@ -68,47 +57,41 @@ I've been Programming, Designing and Architecting Java applications for 15 years
6857
- Naming variables, methods and classes
6958
- Size of methods and classes
7059
- Number of parameters
71-
### What is Pair Programming?
72-
### Why is readable code important?
73-
### Code Quality
74-
https://github.com/in28minutes/java-best-practices/blob/master/pdf/CodeQuality.pdf
60+
#### What is Pair Programming?
61+
#### Why is readable code important?
62+
7563
#### Static Code Analysis
7664
![Static Code Analysis](images/StaticCodeAnalysis.png)
7765
#### SONAR
7866
- One Slide from PDF - Making use of SONAR
7967
- https://github.com/in28minutes/java-best-practices/blob/master/pdf/CodeQuality.pdf
8068
#### Code Reviews
81-
- PDF : https://github.com/in28minutes/java-best-practices/blob/master/pdf/CodeReview-BestPractices.pdf#### Do not be fooled by Code Coverage?
69+
- PDF : https://github.com/in28minutes/java-best-practices/blob/master/pdf/CodeReview-BestPractices.pdf
8270

8371

8472
## Modern Development Practices
73+
![Modern Development Practices](images/ModernDevelopmentPracticesOverview.png)
74+
- Unit Testing and Mocking : We are in the age of continuous integration and delivery, and the basic thing that enables those is having a good set of unit test in place. (Don’t confuse unit testing with screen testing done manually to check if the screen flow is right. What I mean by unit testing is JUnit test’s checking the business logic/screen flow in a java method (or) set of methods). Understand JUnit. Here is a good start : https://www.youtube.com/watch?v=AN4NCnc4eZg&list=PL83C941BB0D27A6AF. Also understand the concept of Mocking. When should we mock? And when we should not? Complicated question indeed. Understand one mocking framework : Mockito is the most popular one. Easymock is a good mocking framework as well.
75+
- Automated Integration Tests. Automated Integration Tests is the second important bullet in enabling continuous delivery. Understand Fitnesse, Cucumber and Protractor.
76+
- TDD (actually I wanted to put it first). Understand what TDD is. If you have never used TDD, then be ready for a rude shock. Its not easy to change a routine you developed during decades (or years) of programming. Once you are used to TDD you never go back. I promise. This list of videos is a good start to understanding TDD. https://www.youtube.com/watch?v=xubiP8WoT4E&list=PLBD6D61C0A9F671F6. Have fun.
77+
- BDD. In my experience, I found BDD a great tool to enable communication between the ready team (Business Analysts, Product Owner) and the done team (Developers, Testers, Operations). When User Stories are nothing but a set of scenarios specified is GWT (Given When Then) format, it is easy for the done team to chew at the user story scenario by scenario. With tools like Cucumber & Fitnesse, tooling is not far behind too. Do check BDD out.
78+
- Refactoring. Is there an Architect who does not encounter bad code? Understand refactoring. Understand the role of automation tests in refactoring.
79+
- Continuous Integration. Every project today has continuous integration. But, the real question is “What is under Continuous Integration?”. Compilation, unit tests and code quality gate(s) is the bare minimum. If you have integration and chain tests, wonderful. But make sure the build does not take long. Immediate feedback is important. If needed, create a separate build scheduled less frequently for slower tests (integration and chain tests). Jenkins is the most popular Continuous Integration tool today.
80+
[[ModernDevelopmentPractices.png]]
8581
### Unit Testing
8682
#### Unit Testing Best Practices
8783
[Unit Testing Best Practices](pdf/UnitTestingBestPractices.pdf)
8884
#### Why is unit testing important?
8985
#### Why is performance of Unit Tests important?
90-
86+
#### Do not be fooled by Code Coverage?
87+
#### Why should a good programmer understand Mocking?
9188
### What is TDD?
9289
#### Why should you write unit tests with/before code?
93-
9490
### What is BDD?
95-
9691
### What is ATDD?
97-
### Why should a good programmer understand Mocking?
98-
99-
### Modern Development Practices
100-
![Modern Development Practices](images/ModernDevelopmentPracticesOverview.png)
101-
- Unit Testing and Mocking : We are in the age of continuous integration and delivery, and the basic thing that enables those is having a good set of unit test in place. (Don’t confuse unit testing with screen testing done manually to check if the screen flow is right. What I mean by unit testing is JUnit test’s checking the business logic/screen flow in a java method (or) set of methods). Understand JUnit. Here is a good start : https://www.youtube.com/watch?v=AN4NCnc4eZg&list=PL83C941BB0D27A6AF. Also understand the concept of Mocking. When should we mock? And when we should not? Complicated question indeed. Understand one mocking framework : Mockito is the most popular one. Easymock is a good mocking framework as well.
102-
- Automated Integration Tests. Automated Integration Tests is the second important bullet in enabling continuous delivery. Understand Fitnesse, Cucumber and Protractor.
103-
- TDD (actually I wanted to put it first). Understand what TDD is. If you have never used TDD, then be ready for a rude shock. Its not easy to change a routine you developed during decades (or years) of programming. Once you are used to TDD you never go back. I promise. This list of videos is a good start to understanding TDD. https://www.youtube.com/watch?v=xubiP8WoT4E&list=PLBD6D61C0A9F671F6. Have fun.
104-
- BDD. In my experience, I found BDD a great tool to enable communication between the ready team (Business Analysts, Product Owner) and the done team (Developers, Testers, Operations). When User Stories are nothing but a set of scenarios specified is GWT (Given When Then) format, it is easy for the done team to chew at the user story scenario by scenario. With tools like Cucumber & Fitnesse, tooling is not far behind too. Do check BDD out.
105-
- Refactoring. Is there an Architect who does not encounter bad code? Understand refactoring. Understand the role of automation tests in refactoring.
106-
- Continuous Integration. Every project today has continuous integration. But, the real question is “What is under Continuous Integration?”. Compilation, unit tests and code quality gate(s) is the bare minimum. If you have integration and chain tests, wonderful. But make sure the build does not take long. Immediate feedback is important. If needed, create a separate build scheduled less frequently for slower tests (integration and chain tests). Jenkins is the most popular Continuous Integration tool today.
107-
[[ModernDevelopmentPractices.png]]
108-
10992
#### When should you have multiple CI builds?
110-
111-
#### Important Questions
93+
### Continuous Integration
94+
#### Continuous Integration - Important Questions
11295
- How often is code commited?
11396
- How early are problems/defects found/fixed?
11497
-- Code Quality, Code Review, ST Defects
@@ -124,12 +107,14 @@ https://github.com/in28minutes/java-best-practices/blob/master/pdf/CodeQuality.p
124107
- Deployment
125108
- Chain Tests
126109
- How long does a Continuous Integration build run for? Is there a need for multiple builds?
110+
### Devops
111+
127112
## Design
128-
###Agile and Design
113+
### Agile and Design
129114
[Design in Agile Projects](pdf/AgileAndDesign-Evolution.pdf)
130115
#### Evolutionary Design
131116
### What are the 4 Principles of Simple Design?
132-
###Design Focus Areas
117+
### Design Focus Areas
133118
![Focus](images/Design-Focus.png)
134119
- 4 Principles of Simple Design. https://www.youtube.com/watch?v=OwS8ydVTx1c&list=PL066F8F24976D837C
135120
- Runs all tests
@@ -153,6 +138,7 @@ https://github.com/in28minutes/java-best-practices/blob/master/pdf/J2EE(Java%20E
153138

154139
###Design Review
155140
![Review](images/DesignReview.png)
141+
156142
## Architecture
157143
### General
158144
#### Why is it important to use Continuous Integration from Day 0 of the project?

0 commit comments

Comments
 (0)