I came few days ago from vacations and had some written, plus others I've read recently and found worthwile of sharing. Very diverse mix :)
10 Modern software over-engineering mistakes: Good examples and advices
Taking PHP Seriously: Good points of why PHP is not loved by a large segment of developers but also why it is not as bad as many say. Actually, while I despise its syntax I agree that using object orientation you can do things really well.
Why We're Living in the Age of Fear: Food for tought about the increasing culture of fear, mostly regarding America, but also happening at other countries like UK or Spain. Interesting contents inside, like the "law of group polarization", "illusory correlation", or differentiating fear from anxiety.
Lessons Learned from Scaling Uber to 2000 Engineers, 1000 Services and 8000 Git repositories: Lots of good microservices and high scalability hints and tips and "I wish I knew" examples.
Five Elements of Effective Thinking: 1. Understand deeply, 2. Make mistakes, 3. Raise questions. 4. Follow the flow of ideas, 5. Change. For details, read the articles.
Docker in Production: A History of Failure: Good list of anti-patterns and general advices of what not to do using Docker. We're pretty happy at work using it but we've avoided most of this problems I think; For example, instead of a dockerized database (pretty dangerous), we use a cloud one (Amazon RDS, DynamoDB, etc.) and forget about problems.
Running Docker in production for 6 months: And as a counterpoint to last article, one about some good advices of having docker in production.
The Secret Algorithm Behind Learning: Explains a technique (the Feynman Technique) to learn better, in three steps:
- Step 1: Teach it to a child (force yourself to understand the concept at a deeper level and simplify relationships and connections between ideas)
- Step 2: Review (discover the edge of your knowledge and improve)
- Step 3: Organize and Simplify (build a simple story with the notes and concepts you've gathered)
Practical advice for analysis of large, complex data sets: From Google, just the list of subsections is already great (idea comes from this HighScalability post:
- Look at your distributions
- Consider the outliers
- Report noise/confidence
- Look at examples
- Slice your data
- Consider practical significance
- Check for consistency over time
- Separate Validation, Description, and Evaluation
- Confirm expt/data collection setup
- Check vital signs
- Standard first, custom second
- Measure twice, or more
- Check for reproducibility
- Check for consistency with past measurements
- Make hypotheses and look for evidence
- Exploratory analysis benefits from end to end iteration
- Data analysis starts with questions, not data or a technique
- Acknowledge and count your filtering
- Ratios should have clear numerator and denominators
- Educate your consumers
- Be both skeptic and champion
- Share with peers first, external consumers second
- Expect and accept ignorance and mistakes
10 characteristics of an excellent software developer: I like them:
- Being knowledgeable about customers and business
- Being knowledgeable about engineering processes and good practices
- Not making it personal (egoless but open discussions)
- Honest (admit mistakes)
- Personable (gets along well with teammates)
- Creating shared success (team player)