Posts

Programming Paradigms — imperative, functional, declarative, object-oriented

Image
Programming Paradigms 常常看文章時看到一些類似這樣的敘述 ref 就很困惑這些到底是什麼意思,今天就來跟大家分享。 💡 我們在用不同的程式語言時,要用該語言的思維方式去使用它。 雖然他們能做的事情都一樣,但是 他們能力不同 舉例來說,C++ 能辦到的事情,想必 Java 也行,SQL 也有機會可以做到。而根據不同能力,有以下分類: Imperative 程序導向 → Procedure,其實就是 Finding algorithm ,也是我們最習慣的用法。 大部分的語言特性,像在寫 leetcode 題一樣,step by steps 依序做出來。 Object-Oriented (OOP) 物件導向,想像這個世界裡的東西都是一個一個物件,你要用這些物件去幫你做事。 例如小畫家:你今天要畫出很不同形狀,首先你要有一個物件 Shape,這個 Shape 可以幫你畫出圓型、矩形、三角形。 目的:常聽到的是複用,但複用的最終目的其實是「幫助程式設機師減少犯錯」。 能減少犯錯是基於以下特性: Abstraction 物件類別 information hiding encapsulation 封裝 💡 像是 SOLID 裡的 O: open-closed open for extension; closed for modification 你只能用 public function,不能修改 private function polymorphism inheritance Functional 整個程式是一個函示,函示裡有子函示 (decomposition) 假設你有一個函示如下: income - saving - investment = outcome 以 functional 的寫法就會是 tmp = findSum(saving, investment) outcome = findDiff(income, tmp) 或是 tmp = findDiff(income, saving) outcome = findDiff(tmp, investment) imperative 就是 tmp = income - saving outcome = tmp - in...

《內行人才知道的系統設計面試指南 System Design Interview - An insider's guide || Alex Xu》

Image
  當初翻開這本書的目錄,第一個念頭是:「就是他了!」 我是後端工程師,現在正在從 0 到 1 開發一項類似 FB、IG 的社群/社交 App。 想當然爾,這顆 App 就會用到會員註冊/登入服務、貼文服務、通知服務等。 當時我是負責最簡單的會員註冊/登入,串接 Firebase 的 Single sign-on (從第三方用同個帳號登入,例如你可以用 Apple, Google, FB 帳號登入我們的 App)。同事負責設計通知中心的架構,當時連架構都不懂的我,看著同事畫的架構圖,什麼 Queue、Kafka 的,我完全一頭霧水。重點是,主管還特別叮嚀同事說,在設計通知中心時,一定要解釋給我聽,跟我說裡頭的 know how。 呼應我面試這間公司時,主管告訴我的: 「身為後端工程師,如果要精進,未來的職涯規劃要朝架構師去走。」 我想同事設計通知中心的能力, 就是資深後端該具備的能力, 也太強大了。 回到翻開這本書的目錄的那一刻,「Chapter 10 設計通知系統」幾個大字閃閃發亮, 想說有這本書,我也可以嘗試設計通知系統了耶! 興奮的我立馬翻到那一章節,看完後,公司開會時提到的「外推播、內推播」、「多裝置登入時要儲存 user 的 device ID 」、「通知訊息要先塞到 Queue 裡再從 Workers 拉出來處理」,原本聽不懂的對話,或不知道怎麼實作的部分,全都豁然開朗,也理解同事的架構圖為什麼要那樣設計了。 小小一章,就解了我很多的「為什麼?」 其實剩下的章節,光看目錄名稱,沒辦法勾起我太大的興趣,直到有一天,主管又發問了。 我們的 App 架構是 Micro-services 外面有一層 Gateway,後來有個新需求是 Web 也要可以用,由於 Web 有可能出現流量太高,把後端打爆的情況,為了不讓 Web 的體驗影響到 App,同事在想要不要把 Web 跟 App 拆成兩個 Gateway。 主管就問:「我們 gateway 有 rate limit (或預期有) 的功能嗎? 或是 rate limit 被規劃做在哪個地方?」 我立馬想起這本書的「Chapter 4 設計網路限速器 rate limiter」,想說這也太讚了吧!翻完後就能理解主管在說什麼了。通常微服務 + Gateway 的架構,會把 rate limiter 做...

1 + 1 > 2

尼有沒有覺得,生活中常會有  1 + 1 > 2  的魅力。 喜歡咖啡、喜歡甜點的我,早上點了一杯熱拿鐵,啜了兩口就放著,到下午都涼了,看著他也不特別想喝。 冰箱冰了一盒昨天買的布朗尼,慰勞平常一直被我問問題的同事,自己也拿了一塊。 吃了一口後,濃郁的巧克力化在嘴裡,厚實的口感雖然好吃,卻會膩,配了口咖啡竟格外順口,不到 5  分鐘,一大塊布朗尼跟喝不完的咖啡就瞬間蒸發了。 果然有些東西搭配著格外討喜,是 1 + 1 > 2  的魅力。

《失物請洽圖書室》讀書心得

Image
好吃的東西會捨不得吃完, 好看的書居然也會捨不得看完!第一次捨不得看完一本書!!! 其實是我自己一再重複,我想要學習「換位思考」的能力- 當初為了成長,看了許多工具書:《查理蒙格》《彼得杜拉克》⋯。 也看了心理書,想了解別人的想法跟了解自己。 朋朋看看我,覺得學習感同身受的話,或許可以試試小說。 起初不以為意,他借了我很久,也就擱在桌上。沒想到一讀之後就獲得了滿滿的體悟。比起工具書,「小說」更能讓你思考。 當書中的角色 A  問角色  B  問題時,如果你是  B  你會怎麼回應? 邊看主角的自白,內心不斷贊同 「對」 「沒錯」 「就是這樣」 滿滿的認同感呼應著主角們的生活體悟。 當初看書名還覺得,是在圖書館借書然後掉東西的小說嗎?後來發現,貫串本書的圖書館諮詢人員,真的非常強大,溫暖又強大,是圖書室裡的小太陽,自詡自己能成為像這樣的人。 他就在那,他沒有變,但是他的光與熱,可以帶給觸碰過他的人,一些微小變化。這些觸及他的人,希望改變,而做出的嘗試,讓命運走向截然不同的軌道,如果風景都一樣,倦了、乏了,也許轉個彎,面向截然不圖的風景,生命也會注入截然不同的力量。 這些嘗試不是你想像的「巨大改變」而是非常普通的、微小的改變,包含看待事情的想法。想法變了,心境就不同了。 總是抱怨自己做著為不足道的工作,所以就換工作嗎?不!而是明白自己現在在做的這件工作,也很重要!一但覺得重要,就會重視,你會開始感受到,原來在這個位置,有人需要你。如果你是  IG  工程師,今天  PM  需要你新增了一項「修改留言」的功能,你可以想「又有工作了,這週事情已經夠多了,又要加班了,到時候新功能上線,怕有萬一,又要  on call  了」;也可以想「這功能可以造福  10  億用戶,到時候上線他們肯定會很開心,因為終於不用再刪留言,重發一次了。」 能被認定價值,是件幸福的事。 偷偷跟  IG  許願 😏 回到感同身受的部分,看著這些角色的生活,如同上帝視角看著每個人的心境,雖然沒辦法掌握每個人的下一步,但跟著他們一起遊歷在屬於他們的世界,真的會理解他們,從而明白他們為什麼退卻、為什麼猶豫、為什麼對生活無法抱以期待。 總是叫人往前衝的我,也許也...

紅石抱石技巧 V3 - V4 訓練班 - D7 動態練習/爆發力

Image
課後心得 上完這堂課,會自己出路線,自己改點了!以前想練習的時候,都會看著牆面發呆,不知道要找什麼點練習,不會自己出作業給自己玩,看半天最後還是用既有路線的單動練。能夠習得這個技能真的很有趣,現在暖身的時候都可以自己找點玩了,開心XD 另外在攀爬路線時,如果單動太難,也可以自己改點,先改簡單一點。例如手點變好,腳點變好,手點變近,腳點變近,循序漸進地練習,效果會滿好的! 跳起來的部分 主要發力還是腳,手只是帶方向 所以腳腳還是要用力唷! 如果是動態要到下個位置,可以先想自己停在下一動的時候,身體平衡的位置應該在哪裡,試著動態一次到位,就不會花太多或太少的力。 ((每次上牆都有加油,好暖

紅石抱石技巧 V3 - V4 訓練班 - D6 動態練習/爆發力

Image
課後心得 今天的課程大多為動態練習,身體蹲低,搭配腳, 快速站起來,利用 手拉控制身體方向。 手拉雖然可以幫忙帶動身體,但是長距離的出力,還是要給腳,手 只是幫忙把身體拉近牆,或是調整左右的方向, 主要出去的力,是靠腳用力蹬。 上完課之後,比較知道要怎麼出路線,找起攀手點、腳點跟完攀,點 讓自己練習 。如果做得到,可以把手點改難抓,或是改更低;把腳點改難踩,或是改更高。 這次課程,利用兩手抓,腳一高一低,站起來的動作,很像我之前做的 Double Dyno 教學影片,如果想練習這個動作的朋朋可以參考: 接著教授 Moon board 的訓練方式,Moon board 是進步與否的指標,因為 Moon board 的點都一樣、距離也一樣。當一條路線,本來爬不完;或是某一動,本來做不到,但現在可以了,就代表進步了。 因此簡簡推薦大家可以用 Moon board 來訓練唷! 最後單手爆發力訓練很好玩,讓身體平衡後,拉起來出手,練協調與力量!

紅石抱石技巧 V3 - V4 訓練班 - D3 力量訓練

Image
課後心得 第三堂開始,漸漸會讀線了,難關還是看不出來,在下面想的動作也會有些跟上牆後想得不一樣,但會知道自己哪一動很遠,要動態跳了。 獲得了力量提升的神方法,真的是攀岩必學 -- 拉單槓,而我在一個月後也證實了非常有效,超開心!!