Agile Development
Software design is about abstraction, which needs training and practices.
The lack of abstraction ability cannot be compensated by SCRUM or AGILE process.
For worst case, shit one’s pants and do laundry in next Sprint.
Requirements/System Analysis
Describes the way a human have to do, not the way how a computer going to do.
IT Profession
A responsible programmer learns the philosophy of programming languages/frameworks/tools.
You don’t have to know all of the things in one day,
what you have to do is to learn a little more everyday.
An irresponsible programmer creates his own error handling, error-prone design, etc.
Simplicity
- Do not invent something have to be remembered by someone.
- If something is triggered without thinking, the worst outcome is harmless.
- If something have to be remembered, it’s much better that the thing have been written by official documentations.
- Some automatic tests ensure the error-free environment for trivial things.
Coding
“Feeling” cannot be a reason for good style.
Unit tests give you a way to review your design.
Complex unit tests means complex design,
which indicates poor design,
which tips error-prone fragments of code.
Unit Test
- You don’t know how many times will you need to test your code in future.
- You have to pay $1 for every time testing your code.
- You only have to pay $5 to write unit tests and you can run tests for free in future.
No fucking excuse.
Learning
- Be humble and foolish while reading the time-proof books.
- Be careful of code snippets.
Documenting
Use documenting to clarify your mind.
If you can write effectively, you can code effectively.
Make you as your reader, who is unable to meet you face-to-face.
An incompetent programmer also makes unreadable documentations.
Work philosophies
Before you invent anything, try to read the TOCs of framework/languages/tool documentations.
The recursive process of incompetent programmer
- “I don’t have time to learn X, so I have to spent a lot of X^2 time to fix the thing”.
The whole picture
- If you only need a few Git’s features for daily work,
you must have done something correctly.
- If we keep discussing the rules of ticket system,
we must have a lot of defects to be managed.
Ignorances
- “The time spent on hot fixes is shorter than writing unit tests.”
- “My code is self-documented”
- I wish the developers of OSs/compilers/frameworks/libraries/databases can say the same thing to their user.
- “CI/CD can fix everything, even for 5 hot-fixes in a row of same feature in an hour.”
- “I had to abstract
StringUtils.trim()
(Apache Common Lang) in case of future replacement.”