2017就要結束了,再學點什麼呢?
下周回京,打算做兩場知乎 live。感興趣的同學可以關注一下。
回歸本源,軟體開發中的那些基本概念
似乎自小學畢業以後,我們在數學課以外,就很少關注概念(concept)。概念是一切認知的基石 —— 很多時候,我們因為對概念的理解不清不楚,而無法抓住本質。軟體開發中有很多你以為你理解了實際上你沒有理解的概念,而我們在開發的路上走得太遠,需要時不時回過頭來重新梳理一下這些最基本的概念。柳總說:撒一層土,夯實,再撒一層。這是任何學習或者求知必經之路。
本次 live,我將拋磚引玉,從軟體開發中最基本的四個概念:變數,值,函數,介面講起,談談我們該如何理解這些概念,以及概念後面的編程思想。
大綱如下:
- 什麼是變數(variable)?為什麼說變數是一個 indirection / separation?
- 如何給變數取合適的名字?
- 什麼是變數的值(value)?變數所蘊含的信息,該用什麼樣的容器來承載?
- 什麼是函數(function)?pure / impure function 如何區分?如何將其應用在系統設計中?
- 什麼是介面(interface)?如何設計簡單清晰的介面?
本 live 講述部分約 60 - 75 分鐘,答疑會有 30 分鐘。
開講時間:12月6日晚 7:00。
傳送門:回歸本源:軟體開發中那些基本的概念
談談工程師常常忽視的軟體開發能力
兩周前我發了個招聘貼,講到我們的廣告系統用 scala 撰寫。後台於是一下子湧來好多留言:啊啊啊你們為什麼要用scala 開發廣告系統?為什麼不用 erlang?為什麼不用 C++?scala 合適嗎?編譯那麼慢?效率也不高?akka 還是偷師的 erlang/OTP?…
根據我過往的經驗,我發現很多有趣的點:
- 程序員容易陷入無所謂的對語言本身的爭執上去
- 兩三年工作經驗的工程師往往會遇到一個瓶頸 - 過於關注於某個語言和某種技術本身而忽視了系統層面的修為
- 軟體開發是一個系統性的工程,語言佔比有多大?你寫的代碼的佔比有多大?
- 軟體是為什麼服務?business!你又了解多少和 business 有關的知識呢?
因而,我覺得有必要做一個 live,談談工程師常常忽視的軟體開發能力。
我常常使用軟體系統來描述軟體,是因為解決商業問題的邏輯僅僅佔據軟體開發的一部分。日誌,監控,安全,部署,性能,數據分析等一系列由開源軟體或第三方工具構建的服務,加上商業邏輯的服務一起,運行在生產環境中,才是真正的軟體。工程師提升代碼的能力,僅僅是整個 big picture 中的一環。
此外,賺錢,在這個 picture 的諸多能力中,越靠近錢,或者越能夠影響錢的能力,對公司的價值就越大。
所以,工程師除了要提升開發的能力外,還應該著力構建業務能力和系統能力。
我們先從軟體系統的演進談起,談談軟體系統中的重要組成部分,然後聊聊工程師如何打造系統能力:它們和具體的功能無關 —— 如何使用各種工具和資源,建立一套體系,讓軟體能夠正常運行和演進。這包括綜合的軟體開發和系統架構的能力,收集數據的能力,以及分析數據的能力,快速應對問題,進行決策和解決問題的能力,以及萬金油 —— 什麼都「略懂」的能力。
然後,談談商業知識和業務知識業務的業務獲取,比如說,你需要了解你的公司公司如何賺錢?如何獲取用戶?每個用戶身上花費多少(UAC),能夠賺多少錢(LTV)? —— 這些知識,能夠幫助你更好地撰寫出有價值的軟體,能夠讓你在價值鏈上越走越高。由於公司和公司的業務不同,在這裡,我提出一些基礎的概念,然後不斷提出問題,不斷引發你的思考,從而激發你問出更多的問題,並主動去尋找這些問題的答案,或者找到更好地解決方法。很多時候,問對問題,比尋找答案還要重要。
本 live 講述部分約 60 - 75 分鐘,答疑會有 30 分鐘。
大綱如下:
- 什麼是軟體系統?什麼樣的能力有助於構建軟體系統?
- 什麼是系統能力?如何累積系統知識和經驗?
- 什麼是業務知識?如何累積業務知識?
- 總結:工程師如何提升個人在公司的價值?
開講時間:12月13日晚 7:00
傳送門:談談工程師常常忽視的軟體開發能力
推薦閱讀:
※優秀的項目管理與糟糕的項目管理
※人生已經過了 29565 天,敲代碼還來得及嗎?
※Make it run, make it right, make it fast
※那些所謂的微軟軟體服務外包人才培訓基地跟微軟到底什麼關係?