慢下來,更需要勇氣
知道怎麼選擇,專注瞄準自己願景,即使慢慢到達目標,也能享受一路上風景的充實。
I am a mediocre developer
雖然個title係平庸嘅developer,但係入面嘅tips都係一流developer會做嘅野
- Keep things straight simple
- Rewrite it to have cleanner design
- Provide documentation
- Add comments to the most tricky parts. But remember, that comments are the code smell themselves
- Use correct names for variables, functions, and classes
- Make sure that every part of your program does only one thing
- Prefer pure functions over regular functions
- Prefer regular functions over classes
- Fallback to classes only in a strong need
- I do not trust myself (we always make mistakes)
- Write tests and run them in CI
- Use static typing or optional static typing
- Use compilor to check
- Use automated style checks
- Use quality checks
- Detect different problems like this line has too many logics inside, this class is not needed, this function is too complex
- Review your code
- Let other review your code
- It should work not only on my computer
- Use script to build your env
- After the application is deployed, I still do not trust myself
- Monitor error
- Collect logs
- Monitor server
- Constantly learning
What Does a Tech Lead Do?
- A full-time owner
- You receive tasks are tied up to specific business goals
- Figure out all the requirements and constraints
- Understanding and defining the end goals
- All successes (and failures) of the software that is created to achieve the goal are associated with you
- You receive tasks are tied up to specific business goals
- The space for the engineering creativity
- You can do whatever is reasonable for you within your time/budget to achieve the goals
- Software development methodology
- Parameters of SCRUM
- Technical stack
- Software architecture
- Define the structural parts
- Design interfaces between components
- Non-functional requirements
- Define the border between good enough and perfect software
- Internal milestones
- Service Level Indicators
- Availability
- Number of processed jobs
- Success rates for the principal components
- Rollout schedule
- Communication
- Split of work
- How are the tasks in your Jira assigned?
- Code review policy
- Retrospectives
- How technical is a Tech Lead?
- You do not write much code on a daily basis
- Need to read a lot
- Code
- PR
- Reused solution
- Code of third-party services that you need work with
- Technical documentation
- The service used
- Implementation details of the solutions
- Known issues fro them
- Code
- Need to write a lot
- Engineering proposals
- Recommended framework DACI
- The proposals are decided (design pages)
- Tickets for some work
- Engineering proposals
- Discuss
- Reach agreement with your teammates on non-trivial tasks
- Educate your teammates
- Negotiate contracts with other teams
- Demo results of your work
- As well as promote your solutions within the company
- May have a few hour for individual contibution
- Hotfixes
- Make POC
- Commit database or configuration changes
- Investigate a weird bug difficult to re-produce
- Pull some data from metrics / logging solution to validate an idea of implementation
- Pros and Cons of being a Tech Lead
- Pros
- Become a subject matter expert in the area of your project
- Get replicable knowledge on how software system works and how to apply chnages into that with minimal risk
- Become a good communicator
- Understanding requirements
- Explaining technical solutions
- Reach some (not always very high) level of competency in
- System design
- Operations
- Quality engineering
- Engineering management
- Cons
- Do not have a feeling of accomplishment
- Generate some new work for your team
- Resolved some blocker
- But it does not feel like real work
- Not enough coding on larger teams
- Need to accept tasks from multiple sources
- Your teammates
- Your management
- Partner teams
- Customer support team
- Other people that have heard about your team
- Stressful because it is a lot of responsibility
- Do not have a feeling of accomplishment
- Pros
- Tech Lead starter pack
- Practical proficiency in the programming languages
- Crucial for proper start of the project
- Good level of skills related to data stores
- Is a ground for system design
- Project management
- Communication skills
- Practical proficiency in the programming languages
- Tech Lead is decision-maker, does not equal to being a dictator and ignoreing the voices of other people
- Can delegate tasks to the experts on your team, but be able to verify, approve or correct the solution
- Team Lead vs Tech Lead
- Team lead is responsible for people, not project
- Team lead does people management
- Team lead is not suppose to make the individual contribution
- Architect vs Tech lead
- Architect has more practical and diverse experience
- Architect is needed for more extensive and more complex systems
- Architect position is more about doing the most laborious work instead enabling the rest of the team to do all the work
辦公室求生指南:避免「懷才不遇」的六個方法
- 了解公司文化,在適合自己嘅地方工作
- 了解自己的職涯位階
- 盡量把這些工作變成學習的機會
- 與主管保持良好的關係
- 設定工作優先次序
- 要主動讓別人知道你做了什麼
- 75%的力氣做事,25%的力氣做公關
- 最好有不定期更新的「Elevator Speech」,簡介自己做緊咩
- 做好情緒管理
- 冷靜下來,離開辦公室走一走,讓自己恢復平靜
- 以免因為情緒而做出連自己可能都會後悔的事
顛覆亞洲價值的人生啟示錄:為何有些人沒有一個真正的天職?
- 多領域的學習可以產生相互補充的效果
- 如果一味屈從於社會強加給你的標籤,你失去的是你的自由,失去了自己對人生的定義權。
情緒非壞事,但「情緒化」就會壞事
- 有些人總給自己設下太多規矩
- 容易對自己產生拘束感
- 這類型的人通常自我肯定感偏低,但同時又自尊心強,因此容易為許多事情感到辛苦
- 想要跳脫這種狀態
- 就要深刻地了解自己的堅持,逐項確認、剖析它們是否真的重要到會對自身的幸福有所影響
以下無需重讀
5 Common Misconceptions About TDD & Unit Tests
- 5 Common Misconceptions
- TDD is too Time Consuming. The Business Team Would Never Approve
- TDD improve productivity
- “The business team doesn’t care at all about the development process you use, as long as it’s effective.”
- You Can’t Write Tests Until You Know the Design, & You Can’t Know the Design Until You Implement the Code
- Should design before code
- You Have to Write All Tests Before You Start the Code
- Write
one
test -> watch it fail -> implement -> watch it pass -> repeat
- Write
- Red, Green, and ALWAYS Refactor?
- Unit test allow you to refactor, but not require you to refactor
- Everything Needs Unit Tests
- Unit test work best for pure function
- Given the same input, always return the same output
- No side effect
- The code which require a lot of mock, may be it does not need unit test
- Integration test may be better
- Unit test work best for pure function
- TDD is too Time Consuming. The Business Team Would Never Approve
15 Jan 2019
The summary is good enough
Dealing With Unknowns In Software Development
- Discovering new things is like trying to slay a hydra.
- Learn one thing and you find 3 more things you need to learn about.
- Deal with unknowns
- Set reasonable time to do some discovery
- Discovery can be pure research or prototype
- Sync the result at the end of time box
被抖音“毁掉”的中国年轻人(深度好文)
- 年轻人千万不要碰的东西之一,便是能获得短期快感的软件。它们会在不知不觉中偷走你的时间,消磨你的意志力,摧毁你向上的勇气。
- 禁止人用抖音其實冇用,世上太多可以獲得短期快感嘅野,禁都禁唔曬
- 點解佢地想要短期快感,點解係現實揾唔到滿足感?ED問題嘅答案先至係關鍵
- 可怕的碎片式信息正在吞噬你
- 集中精神嘅能力越來越稀少
- 别让娱乐至死,毁掉你的人生
- 真正能让你成长的,绝对不是那些让你快乐轻松的东西,而都是那些让你痛苦到极致的东西
- 點解要成長?點解要去做D令你痛苦到極嘅野?篇文冇提及ED關鍵問題
- 真正能让你成长的,绝对不是那些让你快乐轻松的东西,而都是那些让你痛苦到极致的东西
上台簡報 3 個無關簡報但詢問度最高的技術問題
- 如何瞬間放大桌面某個部份畫面?
- 如何快速切換不同展示桌面?
- 如何把手機畫面投影到電腦?