轉自知乎,如何成爲一個全棧工程師


原文鏈接:https://www.zhihu.com/question/22420900/answer/21770992


做這樣一個簡單的 app:
一個天氣應用,乾淨清爽的界面,天氣信息一目瞭然。它不僅可以精確預測未來 10 天的天氣,還可以顯示某地的歷史天氣信息。它具有自定義提醒功能,支持 web 版本, iOS 版, Android 版。

爲什麼想要做這樣一個 App ?因爲你喜歡旅行,但沒找到一個天氣 App 可以提供你下個月或者某個特定月份的天氣信息;因爲你懶你沒有每天看天氣預報的習慣,你想要在第二天溫度達到 30 度以上或者溫差有 +/-7 度的時候,獲得溫馨提示;因爲你要成爲一個 Full Stack Engineer ,你必須不斷訓練每個 stack 的能力。


## Web版
你決定用 MySql 來存儲用戶數據,用 NoSql 存儲歷史天氣數據。你用 Redis 作爲 cache ,緩存一些最常請求的天氣數據。你用 Python 寫後臺,功能簡單,後臺不復雜,用戶註冊登錄,抓取返回某城市的天氣數據,某地的歷史天氣數據,很快便搞定。

後臺開發並測試好了,接下來是 Web 前端。你十分清楚一個好的 UI 設計對一個 App 的重要性,你也明白 UI 的設計不只是爲了美觀,更重要的是提高信息的可讀性和程序的可用性。幸好你平日的積累這次派上用場了。你把之前保存下來的上百個優秀的UI設計作品拿來研究,你從書架上拿出Norman 的那本經典 - The Design of Everyday Things 重新細讀。最終你用白紙黑筆敲定了第一個版本的 UI,簡潔直觀,沒有任何多餘的設計,所有元素的排列間距 大小顏色都恰到好處。你相信即使天氣不好,但用戶只要使用這個 App 都會有着愉悅的心情。

那麼開始寫前端吧。啊,別急,都忘了還有 Icon 和 Logo ,可是不會 PS ,不會 AI ,不會 Sketch 怎麼辦呢,學吧。你平日喜歡結交不同領域的朋友,正好幾周前在一個活動上你認識一位朋友做設計的。她花一個下午的時間教你基本的 Sketch 的使用,並對你的 UI 設計給出了一些意見。你請她吃了頓晚飯表示感謝,然後立即回家根據她的一些建議重新調整了 UI ,這次你在 PS 裏把 UI 畫了出來,Icons 和 Logo 也順道一起做了。

接下來的一週,你學習 HTML,CSS,以及 Javascript,並漂亮地把前端搞定。


## 發佈 App
在朋友圈發了個狀態,找人幫你做 Beta 測試。他們都首先問你是什麼 App,一開始你簡單回答一個天氣的 App。但你發現,這不能提起他們的興趣。你覺得你需要用語言,用故事包裝一下。不光是作爲別人「是什麼 App」提問的回答,也是成爲 Full stack Engineer 道路上的一個重要技能。

你去看了所有你喜歡的產品的主頁,從他們的文案上獲得一些靈感啓發;你讀了經典的 On Writing Well ,發現好的文案,好的設計,其實和好的代碼很相似,都是重在交流,如何讓他人毫不費勁地明白你要表達的內容。你的故事要吸引人,你的產品介紹要在1分鐘內解釋清楚,並確保你的父母可以毫無壓力聽明白。

一切就緒,產品上線了。反響不錯,用戶持續增加。很多用戶希望有移動版本,於是你立即投入到iOS 版本的開發上。


## iOS 版 及 後臺優化
你花一週不到時間學習了基本的語法和工具使用便投入到 App 的開發中。你知道 Learn by Doing 是最好也是最快的。由於之前學習了設計的基礎,UI ,Icons 很快搞定,不久 iOS 版本便發佈了。iOS 的發佈帶來了更多的用戶增長,後臺服務器的壓力頗大,你知道是時候優化後臺了。

你在 AWS 上多開了 2 臺服務器,並寫了一個 Script 來自動化部署過程。
你改用 uWSGi 協議,用 uwsgi 作爲 Application Server。
你使用 Nginx 來做併發,負載均衡 ...
......
......


## 成立公司
用戶持續增長,每天你都會收到十幾二十封用戶的郵件。你很感激這些願意花時間給你寫郵件的用戶,你相信他們是你最重要的用戶,是潛在的付費用戶。如果你把他們像上帝一樣對待,他們同樣也會把你看作是上帝。所以除了睡覺時間的發來的郵件,每一封郵件,你都會在2小時內給予回覆。

果然這樣的付出是收穫巨大的,他們不僅驚訝且非常感謝你的快速回復,他們會在app store裏給你★★★★★的評價,他們在社交網站上分享你的app,他們甚至會主動提出捐款給你。

你從快速的用戶增長中嗅到了商機,你開始思考如何賺錢。廣告你是堅決不能允許的,你認爲再精確的廣告也會影響用戶體驗。你設計了 2 個不同的付費方案,你打算用 A/B 測試看哪個方案更好。你分別給 200 個用戶發去邀請嘗試付費的郵件,郵件內容你精心打磨過,並在最後寫上:CEO & Founder. 通過分析 2 種方案的用戶行爲,你決定將使用第一種方案。

接下來,你相信差不多是時候成立個公司了。爲了省時間,你花 2000 塊錢找了個園區掛靠並幫你註冊公司。公司的名字讓你頭疼了很久,你不想只是簡單的用這個 App 的名字作爲公司名字,你知道公司將來還會做出其他優秀的產品。你希望這個名字簡單易記,同時其含義也是你公司文化的象徵。

公司註冊下來了,但銀行那邊得自己跑。你聯繫了一些媒體編輯,邀請他們來試用你的產品;你重新設計了產品主頁,並開始寫產品的 Blog ;你在各大社交網絡都給 App 註冊了賬號,即做社區客服也爲宣傳... 這些事大大壓縮你寫代碼的時間。以往你都是以代碼量作爲衡量自己當天工作效率的指標,所以這些天你總感覺沒做啥工作。

這樣的發展早已超過你的預期,這個 App 從一個 Side Project 幾乎變成了你生活的全部。你跟你女朋友半個月纔出去約會一次,她抱怨不斷;你1個月沒跟朋友出去玩耍喝酒了;你 2 個月都沒鍛鍊過身體... 你意識到, YOU CAN NOT DO THIS ALONE,你需要幫手,你需要找人一起把這個做下去。

但你不是要成爲 Full Stack Engineer 麼?你現在是了麼?


## Full Stack Engineer
設計,後臺開發,前端開發,移動開發,運營維護,PS,文案... 好像都會了,這算 Full Stack Engineer 了麼?

不,這只是踏上成爲 Full Stack Engineer 的第一步。你知道目前只是每個 stack 都懂一點,離senior 或者 expert 還差得遠,而要每個 stack 都做到極致,需要大量的時間和精力。精力有限,產品開發緊迫,力不從心啊,這條道路也太孤獨,因爲你不需要與任何人進行協作。難道要把一些stack的任務交給別人做麼?這樣算是放棄成爲 Full Stack Engineer 麼?

不!這不是。
什麼是 Engineer?「Engineers are versatile minds who create links between science, technology, and society」。
Engineer 的本質工作是設計,開發出應用於大衆的產品。

一個真正的 Full Stack Engineer ,他從生活中發現問題,洞察需求,他設計解決方案,並開發出初始版本的產品。爲了達到目標,他願意去學習任何領域的技能和知識。同時他不追求一個人完成所有工作,如果有人可以比他在某方面做得更出色,便會十分熱情的邀請他們加入。


最終他的職位也許不再是 Engineer ,他不再設計 UI ,不再寫代碼 ... 他的工作不再是 design and building an app or product,因爲他有更大更重要的任務要做 - design and building a team or a company which builds great products.

而這時,社會給了他們另一個稱呼 - 創業者。儘管衆人已忘記他們 Engineer 的身份,但在他們骨子裏,內心深處,自己始終都是一個 Engineer 。當他們需要從頭再來時,他們毫不猶豫從設計開發產品做起。Nikola Tesla,Ferdinand Porsche,Henry Ford,Jack Dorsey,Mark zuckerberg,Elon Musk ... 細數那些改變了或正改變世界的創業者,他們大多數是 Engineer 背景,熱衷於設計創造。他們學習技能和知識,不是爲了成爲某個領域的專家;而是因爲那些 是完成自己目標所需要的。


以上,爲我認可的 Full Stack Engineer 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章