The main difference is that you don't get the gradual adding/removing of service methods. e.g. you add a service method and now need to gradually implement it in multiple servers and clients.
The main difference is that you don't get the gradual adding/removing of service methods. e.g. you add a service method and now need to gradually implement it in multiple servers and clients.
Also few additional posts about code-reviews for other tips blog.palantir.com/code-review-... and dev.to/codemouse92/...
Also few additional posts about code-reviews for other tips blog.palantir.com/code-review-... and dev.to/codemouse92/...
Any beginner coding problem or kata is a good exercise. One year I tried part of advent of code with this approach. 13 successes, 20 failures.
Any beginner coding problem or kata is a good exercise. One year I tried part of advent of code with this approach. 13 successes, 20 failures.
The basic premise is that your goal is to write fully correct code, without any help from your editor, tests or language server etc. You have a single attempt to run code per coding task.
The basic premise is that your goal is to write fully correct code, without any help from your editor, tests or language server etc. You have a single attempt to run code per coding task.
* let people read bug-fixes
* let people read lists of common mistakes
* let people read posts about code bugs
* share new interesting, bug finds in a slack channel (or mailing list)
* let people read bug-fixes
* let people read lists of common mistakes
* let people read posts about code bugs
* share new interesting, bug finds in a slack channel (or mailing list)
Bad naming can easily hide bugs, make design less obvious and code intent less clear.
Also avoid negation in naming, whenever possible. `if !incorrect {` is harder to processs than `if correct {`.
Bad naming can easily hide bugs, make design less obvious and code intent less clear.
Also avoid negation in naming, whenever possible. `if !incorrect {` is harder to processs than `if correct {`.
Having different variations of the same thing is an easy way to introduce mistakes that can be otherwise obvious
```
for i := 0; i < N; i++ {
for i := 0; N > i; i++ {
for i := 0; N - 1 >= i; i++ {
for i := 0; i <= N - 1; i++ {
```
Having different variations of the same thing is an easy way to introduce mistakes that can be otherwise obvious
```
for i := 0; i < N; i++ {
for i := 0; N > i; i++ {
for i := 0; N - 1 >= i; i++ {
for i := 0; i <= N - 1; i++ {
```
e.g. `go func()` and `chan` are a common source of errors, hence take extra time to consider logical races. What if you inserted `time.Sleep(time.Hour)`, would something break?
e.g. `go func()` and `chan` are a common source of errors, hence take extra time to consider logical races. What if you inserted `time.Sleep(time.Hour)`, would something break?
Add checklists for critical things.
Add checklists for critical things.
Works for regular text as well. e.g. try on www.sciencealert.com/images/2018-...
Works for regular text as well. e.g. try on www.sciencealert.com/images/2018-...
Over 500 LOC reviewer fatigue kicks in and review quality drops.
Numbers based on smartbear.com/learn/code-r...
Over 500 LOC reviewer fatigue kicks in and review quality drops.
Numbers based on smartbear.com/learn/code-r...