# I Wrote More Than 90 Articles on 2021: Here Is What I Learned

Below you will find many resources and tools, and my method and tips for writing a lot.

> TL;DR: Several advices to write great articles

# My Background

- I have a degree in computer science. 👨🏽‍🔬

- I use the scientific method and [Occam's razor](https://en.wikipedia.org/wiki/Occam%27s_razor).

- I have researched for 30 years both in the academic and industrial fields.

- I don't have the absolute truth. 

- I try to support my opinions with evidence. 🔍

- They are my opinions and are very subject to change.

# My tools and secret sauces

- I Have a (very) long list of draft articles.

- I often skip the waiting queue and write about some inspirational source (and quote it).

- I use a different template in all my series. 

- For example, I have an empty [Code Smell template](https://maximilianocontieri.com/series/code-smells).

- I write Everywhere 🗺️

- I proofread all my articles with HemingwayApp, Grammarly, and Google Translate (all free) 🔡

- I parse the markdown in my articles and convert them to HTML to republish on many platforms at once. 

- I heavily use the *canonical URL* tag to avoid search penalties. 🔎

- I Follow very interesting people on Twitter and blogging platforms. ✨

- I take a new course every week, usually on a subject that is far away from my comfort zone.

- I add many references and quotes to my articles.

# Time management

- I read a lot of articles early in the morning and bookmark them during the day. 🌅

- I use Trello, Inoreader, Pocket, and Obsidian.

- I Use [The Pomodoro technique](https://maximilianocontieri.com/16-simple-tips-to-boost-your-productivity-x10) to focus when writing. 🍅

- I avoid perfection. I publish them when they are *ready*. 

- Then I make corrections following other people's comments. Even after months.

- I [Garden](https://maximilianocontieri.com/today-i-learned-the-concept-of-gardening) my articles.

# Dealing with Criticism

- I have different opinions than many other developers.

- Software Design is a creative activity. 

- My articles are *suggestions* and not rigid rules.

- I try to have intelligent and polite discussions.

- I have zero tolerance for hate speech and unprofessional comments.

- I never feed the troll.

# Common Criticism

- I get the same comments over and over again, these are the common critics I get and my opinions:

## Opinions

### Revealed Truth

- I don't have the same opinion as many people.

- If you think [NULLs|Undefined|Singletons|...|Whatever] are awesome, I have a different point of view.

## Readability

### I need to see the complete code in a sheet

- If you need to see long methods/scripts to understand your solution, that's fine.

- I prefer to have small/reusable/testable functions.

### A 15 lines long method is not 'long'

- IMHO, a 6 lines method is too long

- You can always break them using [refactorings](https://maximilianocontieri.com/refactoring-002-extract-method).  🛠️

- You don't need to see the big picture and the details at the same time. 🌳

- Trust your implementation and write good tests.

### The code in your articles is not Compiling/Working/has errors

- I try to add code samples for clarity.

- Most of the code snippets work.

- Some of them are pseudo-code for educational purposes. 👨‍🏫

- I have used 25+ different languages in my articles.

- Whenever possible, I test the code in a repl.it

- I am not an expert in NONE of these languages.

- Languages are accidental, and Software design is [essential](https://maximilianocontieri.com/no-silver-bullet).

### Why do you rotate the programming languages?

I use different languages on purpose.

Some Code Smells are language-dependent.

Imagine what would happen if I write them in, for example, Javascript.

Everyone would argue and associate Javascript with those languages.

No language is perfect and that is my point.

### I Have a trick in *INSERT LANGUAGE* to improve the code.

- Most of the articles are language-independent.

- The solution tries to avoid language perks and cleverness.

## Performance

### Your solution is not performant/optimal/memory efficient

- I write about backend business software. 🖥️

- This is the domain I've been working on.

- I know that some tasks require more performant solutions (for example DApps).

- I will always choose long descriptive names over smart performance optimizations.

- First, make the code right. ✔️

- Then, optimize it *only if you have strong evidence*.

- Complexity is not enough evidence. 

- You need a genuine benchmark in real use case scenarios. 📈

- If I need to sort 20 elements in a collection, I will always choose bubble sort because it is easier to read.

> [Premature optimization](https://maximilianocontieri.com/code-smell-20-premature-optimization) is the root of all evil. 😈

## Anti-Patterns

### [Helpers](https://maximilianocontieri.com/code-smell-22-helpers), [DTOs](https://maximilianocontieri.com/code-smell-40-dtos), [Singletons](https://maximilianocontieri.com/code-smell-32-singletons), [Nulls](https://maximilianocontieri.com/code-smell-12-null), [Setters](https://maximilianocontieri.com/code-smell-28-setters), [Metaprogramming](https://maximilianocontieri.com/laziness-i-meta-programming), [Castings](https://maximilianocontieri.com/code-smell-69-big-bang-javascript-ridiculous-castings), [Comments](https://maximilianocontieri.com/code-smell-05-comment-abusers) are standard. 🙈

- I write a lot on these anti-patterns with the reasons why I think we should avoid them.

- You can keep thinking they are good and that's fine.

- My arguments against them are in all articles.

- I reply polite comments about them.

### Your solutions have too many indirections

- [Coupling](https://maximilianocontieri.com/coupling-the-one-and-only-software-design-problem) is our worst enemy. 🙅

- We need to avoid direct relationships.

### I Hate the word 'Code Smell'

- I didn't coin it. I was [Martin Fowler](https://martinfowler.com/books/refactoring.html).

### You have too many rules and constraints 

- There is just one rule

-- Always follow the [bijection](https://maximilianocontieri.com/the-one-and-only-software-design-principle) 🔀
