Skip to content

Commit 2e34ada

Browse files
Ranga Rao KaranamRanga Rao Karanam
Ranga Rao Karanam
authored and
Ranga Rao Karanam
committed
Formatting
1 parent b8bb568 commit 2e34ada

File tree

1 file changed

+56
-3
lines changed

1 file changed

+56
-3
lines changed

README.md

+56-3
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ I've been Programming, Designing and Architecting Java applications for 15 years
3838
### Code Quality
3939
#### Code Quality Overview
4040
![Code Quality Overview](images/CodeQuality.png)
41-
https://github.com/in28minutes/java-best-practices/blob/master/pdf/CodeQuality.pdf
41+
- An overview : https://github.com/in28minutes/java-best-practices/blob/master/pdf/CodeQuality.pdf
4242
- 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).
4343
- 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?
4444
- 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:
@@ -51,24 +51,29 @@ https://github.com/in28minutes/java-best-practices/blob/master/pdf/CodeQuality.p
5151
- Nope, code quality tools are just a guidance!
5252
- Your focus should be to write code that adheres to "4 Principles of Simple Design"
5353
- Peer Reviews are necessary!
54+
5455
#### Why should you have coding standards?
56+
5557
#### What are the most important coding standards?
5658
- Complexity of a method
5759
- Naming variables, methods and classes
5860
- Size of methods and classes
5961
- Number of parameters
62+
6063
#### What is Pair Programming?
64+
6165
#### Why is readable code important?
6266

6367
#### Static Code Analysis
6468
![Static Code Analysis](images/StaticCodeAnalysis.png)
69+
6570
#### SONAR
6671
- One Slide from PDF - Making use of SONAR
6772
- https://github.com/in28minutes/java-best-practices/blob/master/pdf/CodeQuality.pdf
73+
6874
#### Code Reviews
6975
- PDF : https://github.com/in28minutes/java-best-practices/blob/master/pdf/CodeReview-BestPractices.pdf
7076

71-
7277
## Modern Development Practices
7378
![Modern Development Practices](images/ModernDevelopmentPracticesOverview.png)
7479
- 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.
@@ -78,19 +83,32 @@ https://github.com/in28minutes/java-best-practices/blob/master/pdf/CodeQuality.p
7883
- Refactoring. Is there an Architect who does not encounter bad code? Understand refactoring. Understand the role of automation tests in refactoring.
7984
- 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.
8085
[[ModernDevelopmentPractices.png]]
86+
8187
### Unit Testing
88+
8289
#### Unit Testing Best Practices
8390
[Unit Testing Best Practices](pdf/UnitTestingBestPractices.pdf)
91+
8492
#### Why is unit testing important?
93+
8594
#### Why is performance of Unit Tests important?
95+
8696
#### Do not be fooled by Code Coverage?
97+
8798
#### Why should a good programmer understand Mocking?
99+
88100
### What is TDD?
101+
89102
#### Why should you write unit tests with/before code?
103+
90104
### What is BDD?
105+
91106
### What is ATDD?
107+
92108
#### When should you have multiple CI builds?
109+
93110
### Continuous Integration
111+
94112
#### Continuous Integration - Important Questions
95113
- How often is code commited?
96114
- How early are problems/defects found/fixed?
@@ -107,13 +125,18 @@ https://github.com/in28minutes/java-best-practices/blob/master/pdf/CodeQuality.p
107125
- Deployment
108126
- Chain Tests
109127
- How long does a Continuous Integration build run for? Is there a need for multiple builds?
110-
### Devops
128+
129+
### DevOps
111130

112131
## Design
132+
113133
### Agile and Design
114134
[Design in Agile Projects](pdf/AgileAndDesign-Evolution.pdf)
135+
115136
#### Evolutionary Design
137+
116138
### What are the 4 Principles of Simple Design?
139+
117140
### Design Focus Areas
118141
![Focus](images/Design-Focus.png)
119142
- 4 Principles of Simple Design. https://www.youtube.com/watch?v=OwS8ydVTx1c&list=PL066F8F24976D837C
@@ -140,15 +163,21 @@ https://github.com/in28minutes/java-best-practices/blob/master/pdf/J2EE(Java%20E
140163
![Review](images/DesignReview.png)
141164

142165
## Architecture
166+
143167
### General
168+
144169
#### Why is it important to use Continuous Integration from Day 0 of the project?
170+
145171
#### What is a vertical slice? Why should you need it?
172+
146173
#### Why should you create a reference component?
174+
147175
#### Agile and Architecture. Do they go together?
148176
- First of all I’m a great believer that agile and architecture go hand in hand. I do not believe agile means no architecture. I think agile brings in the need to separate architecture and design. For me architecture is about things which are difficult to change : technology choices, framework choices, communication between systems etc. It would be great if a big chunk of architectural decisions are made before the done team starts. There would always be things which are uncertain. Inputs to these can come from spikes that are done as part of the Done Scrum Team.But these should be planned ahead.
149177
- Architecture choices should be well thought out. Its good to spend some time to think (Sprint Zero) before you make a architectural choice.
150178
- I think most important part of Agile Architecture is Automation Testing. Change is continuous only when the team is sure nothing is broken. And automation test suites play a great role in providing immediate feedback.
151179
- Important principles for me are test early, fail fast and automate.
180+
152181
### Layers
153182
- PDF https://github.com/in28minutes/java-best-practices/blob/master/pdf/LayeringInJavaApplications.pdf
154183

@@ -181,6 +210,7 @@ Listed below are some of the important considerations
181210
- Do we need to expose external web services?
182211

183212
### Web Services
213+
184214
### SOAP Web Services
185215
![SOAP Web Services](images/SOAPWebServices.png)
186216

@@ -189,17 +219,24 @@ Listed below are some of the important considerations
189219

190220
#### How should you document your REST Web Services?
191221
- Swagger
222+
192223
### Microservices Architecture
224+
193225
#### What are Cloud Native Applications?
226+
194227
#### What are micro-services?
228+
195229
#### Why is it important to have an API Standard?
196230
- YARAS
231+
197232
#### What is the importance of Logging and Centralized Monitoring?
233+
198234
#### Automate! Automate! Automate!
199235
- Why is it important?
200236
- Personal Experience with Deployment Automation, Providing user screen with requests/responses
201237

202238
### Component Based Architecture
239+
203240
#### Why should you create small components?
204241

205242
## How to be a good architect?
@@ -223,28 +260,41 @@ Most important qualities I look for in an Architect are
223260

224261
###Architecture Review
225262
![Architecture Review](images/ArchitectureReview.png)
263+
226264
## Tools
265+
227266
### Maven
267+
228268
#### What happens behind Maven? What is a Repository?
269+
229270
#### What is use of Maven Parent POM?
271+
230272
#### Maven Best Practices
231273
![Maven Best Practices](images/MavenBestPractices.png)
274+
232275
#### 10 Tips For Maven
233276
[10 Tips for Eclipse and Maven](pdf/10TipsforEclipseAndMaven.pdf)
277+
234278
### Why should you have api & impl in each layer maven projects?
279+
235280
### IDE - Eclipse
236281
![Eclipse](images/Eclipse.png)
237282

238283
#### 10 Tips For Eclipse
239284
[10 Tips for Eclipse and Maven](pdf/10TipsforEclipseAndMaven.pdf)
285+
240286
### Version Control
287+
241288
#### Why should you migrate to GIT?
289+
242290
#### Why should you commit your code often?
291+
243292
#### What are version control best practices
244293
- Do not commit derived files.
245294
- Do not commit IDE files.
246295
- Commit often
247296
- Use Git
297+
248298
## Frameworks
249299

250300
## Performance
@@ -262,11 +312,14 @@ Most important qualities I look for in an Architect are
262312
![Java Performance](images/JavaPerformance.png)
263313

264314
### Why do Stateless applications perform better?
315+
265316
### Why should you optimize judiciously?
317+
266318
### How can you increase performance and reliability of applications using Queues?
267319

268320
### Distributed Cache
269321
![Distributed Cache](images/DistributedCache.png)
322+
270323
### Load and Performance Testing
271324
- PDF Presentation https://github.com/in28minutes/java-best-practices/blob/master/pdf/LoadAndPerformanceTestingBestPractices.pdf
272325
- Have clear performance objectives. That’s the single most important objective. Decide Peak Load, Expected Response Time, Availability Required before hand.

0 commit comments

Comments
 (0)