簡評二十九

慢下來,更需要勇氣

知道怎麼選擇,專注瞄準自己願景,即使慢慢到達目標,也能享受一路上風景的充實。

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
  • 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
    • Need to write a lot
      • Engineering proposals
        • Recommended framework DACI
        • The proposals are decided (design pages)
        • Tickets for some work
    • 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
  • 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
  • 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
    1. 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.”
    2. 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
    3. You Have to Write All Tests Before You Start the Code
      • Write one test -> watch it fail -> implement -> watch it pass -> repeat
    4. Red, Green, and ALWAYS Refactor?
      • Unit test allow you to refactor, but not require you to refactor
    5. Everything Needs Unit Tests
      • Unit test work best for pure function
        1. Given the same input, always return the same output
        2. No side effect
      • The code which require a lot of mock, may be it does not need unit test
        • Integration test may be better

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
    1. Set reasonable time to do some discovery
    2. Discovery can be pure research or prototype
    3. Sync the result at the end of time box

被抖音“毁掉”的中国年轻人(深度好文)

  • 年轻人千万不要碰的东西之一,便是能获得短期快感的软件。它们会在不知不觉中偷走你的时间,消磨你的意志力,摧毁你向上的勇气。
    • 禁止人用抖音其實冇用,世上太多可以獲得短期快感嘅野,禁都禁唔曬
    • 點解佢地想要短期快感,點解係現實揾唔到滿足感?ED問題嘅答案先至係關鍵
  • 可怕的碎片式信息正在吞噬你
    • 集中精神嘅能力越來越稀少
  • 别让娱乐至死,毁掉你的人生
    • 真正能让你成长的,绝对不是那些让你快乐轻松的东西,而都是那些让你痛苦到极致的东西
      • 點解要成長?點解要去做D令你痛苦到極嘅野?篇文冇提及ED關鍵問題

上台簡報 3 個無關簡報但詢問度最高的技術問題

  • 如何瞬間放大桌面某個部份畫面?
  • 如何快速切換不同展示桌面?
  • 如何把手機畫面投影到電腦?