你好,我是陳震霖,英文名Seven。我目前在完美日記工作,剛加入完美日記不久。個人經歷了2019年的巨大變故,2020年決定重新加入一家公司做程序員,我非常幸運地加入了完美日記這家公司。在公司工作了三個星期,熟悉了公司的技術架構,相關制度,開發流程以及完整的wiki文檔,讓我對公司的技術以及發展有了一個比較清晰的腦圖。同時也有幸加入了公司開通的極客時間中學習陳皓的左耳聽風系列課程,課程的標題是“洞悉技術的本質,享受科技的樂趣”,而我在本系列課程的學習筆記中,則定義了我自己的標題爲“洞悉技術的本質,提高程序員生產力”,很明顯我的主題是提高程序員的生產力,同時也是提高我的個人生產力。本系列的學習分享會每週發佈一篇文章,共15或16篇文章左右,這篇文章是本系列分享的開篇,下面進入本次分享的正題。
一、程序員如何用技術變現
在學習左耳聽風系列課程之前,我也曾經想過如何通過自己的技術來獲得來自工作之外的報酬。在百度去搜索程序員如何接私活來賺外快,搜索到的信息無外乎是去豬八戒或者一些衆包平臺接一些項目來做,我真正去嘗試過一些,但是靠個人接執行起來的難度非常高,這裏我不是說技術的難度,我主要談的是開個人很難獲得如何獲得正向反饋,沒有良好的工作環境和團隊氛圍以及其他各方面的阻力會讓自己一個人很難堅持下去,而且這些項目可能根本無法提高個人的技術和其他方面的能力,對個人的未來不能產生價值。
那麼,程序員如何用技術來變現呢?這裏分享我學習左耳聽風中提到的方法和手段,同時也分享我自己的一些思考。
1.積累一個個的小成功
首先,程序員通過技術來變現不是一蹴而就的事情,需要經過一定時間的積累才能產生質變。所以我們在工作和生活的過程中需要不斷積累,保持不斷學習的能力,遇到問題或新技術要用自己的方式方法記錄下來,這在未來會產生很大的價值。保持對技術的熱情,提高對項目工作中遇到問題的嗅覺,提高對新技術的敏銳感,善於記錄,善於分享,讓更多外部的人注意到你,慢慢形成自身影響力,時間久了就會產生效益。成功永遠是靠一個一個的小成功積累而來的。
2.關注有價值的東西
什麼東西是有價值的呢?供大於求則沒有價值,供不應求則有價值。
首先要關注市場需求,瞭解目前的公司都在做什麼,他們遇到的難題是什麼,解決得怎樣?現在公司缺人的真相是缺少有能力能夠解決技術難題的人,能夠提高團隊人效的人。所以你需要學習那些真正“供不應求”的技術和能力。
其次要關注技術趨勢,要做到關注技術趨勢就需要對技術的發展歷史有所瞭解,要看一個新的技術是否順應技術發展趨勢,你需要將一些老技術的本質喫得很透。
因此,在學習技術的過程一定要多問自己兩個問題:“一,這個技術解決什麼問題?爲什麼別的同類技術做不到?二,爲什麼是這樣解決的?有沒有更好的方式?”另外,還有一個簡單的判斷方法,如果一個新的技術順應技術發展趨勢,那麼在這個新的技術出現時,後面一定會有大型的商業公司支持,這類公司支持得越多,就說明你越需要關注。
3.找到體現價值的地方
在一家大公司中,技術架構和業務已經定型,基本上沒有什麼太多的事可以做的。剛起步的公司業務還沒有跑順,公司的主要精力放在業務拓展上,這個時候不需要很高精尖的技術,所以程序員的價值也很難體現出來。
只有在那些高速發展中的公司,程序員的價值才能被最大化地體現出來,如果你有幸加入到一家快速發展中的公司一定要爭取讓自己的價值最大化。完美日記目前也是一家正在快速發展的公司,所以一定要把握住機會。
給初入職場的程序員的建議是先進入大公司學習大公司的技術和成功的經驗方法,然後再找到高速成長的公司,這樣你就可以實現自己更多的價值。
4.動手能力
程序員是手藝人,靠手藝賺錢,所以動手能力非常重要。在解決一個關鍵問題的時候,有沒有很強的動手能力是解決問題的關鍵,所以程序員不能停下來,需要一直寫代碼。所有業務的具體細節實現都在代碼裏,細節是非常重要的,只有瞭解細節才能提出更好的可以落地的解決方案。
5.提升自己的能力和經歷
要通過技術付費來賺取報酬,信任是前提。那麼要讓別人信任你,就需要提升自己的能力和經歷,別人通過查看你的個人履歷才能提高對你的信任感。
這裏分享一點我面試完美日記這家公司的感受,在面試初期和背景調查階段,我個人認爲很大程度是由於我在過去一家公司的經歷,在過去一家公司給了我質的飛躍,成長非常大,同時原公司的同事對我的評價和認可度都非常高,這在一定程度上提高了完美日記對我的信任度。
6.找到有價值的信息源
現代社會信息量非常龐大,甚至有人提出了信息碎片化的概念,信息多到接收不過來,但真相是有價值的信息並不多。對於技術人員來說,幾乎所有的技術都來自西方,所以你應該走到信息的源頭去獲取第一手資料,多使用Google搜索,提高你的英文閱讀能力去閱讀技術英文文檔,你會收穫非常大。
7.輸出觀點和價值觀
只有輸出你的觀點和價值觀才能獲得真正的影響力。但是持續地輸出並不是一件容易的事,這需要你不斷積累和經歷,如果要能使你的技術變現,那你需要持續不斷地輸出,這個過程非常地枯燥無味,並且在很長一段時間都無法變現,你需要有足夠的耐力,克服人性的弱點,事實上大部分人都很難堅持下來,包括我也是。但是如果堅持下來了,並且形成了個人影響力,那後面變現將是顛覆性的,翻倍地增長,所以技術變現本質上是一個厚積薄發的過程。
8.朋友圈很重要
一個人的朋友圈很重要,你在什麼樣的朋友圈,就會被什麼樣的朋友圈所影響。
優質的朋友圈基本上都有這樣的特性。
l 這些人都比較有想法、有觀點,經驗也比較豐富;
l 這些人涉獵的面比較廣;
l 這些人都有或多或少的成功;
l 這些人都是喜歡折騰喜歡搞事的人;
l 這些人都對現狀有些不滿,並想做一些改變;
這些人都有一定的影響力。
最後有個關鍵的問題是,物以類聚,人以羣分。如果你不做到這些,你怎麼能進入到這樣的朋友圈呢?
二、數據安全策略
1.Equifax公司數據泄露
美國知名徵信公司 Equifax其系統中使用了Apache Struts開源框架,但由於沒有及時升級Apache Struts框架版本,導致黑客利用了其系統中未修復的 Apache Struts 漏洞(CVE-2017-5638,2017 年 3 月 6 日曝光)來發起攻擊,造成大範圍的用戶數據泄露,影響用戶數量達1.43億之多。
從Equifax數據泄露事件總結出三點經驗:
1.使用開源的框架必須實時關注其動態,特別是安全漏洞方面
2.任何公開的入口,都必須進行嚴格的安全檢查
3.框架的選型十分重要,必須將安全考察進去
2.解決數據安全問題的技術手段和方法
l 黑客竊取數據的方式有哪些?
1.利用程序框架或庫的已知漏洞
2.暴力破解密碼
3.代碼注入:通過程序員代碼的安全性問題,如 SQL 注入、XSS 攻擊、CSRF 攻擊等取得用戶的權限。
4.利用程序日誌不小心泄露的信息
5.社會工程學:通過向公司員工發送釣魚郵件
6.數據管理問題
1.只有一層安全
2.弱密碼
3.向公網暴露了內部系統
4.對系統沒有及時打安全補丁
5.安全日誌被暴露
6.保存了不必要保存的用戶數據
7.密碼沒有被合理地散列
l 手段和方法
1.理解你的軟件產品中使用了哪些支持性框架和庫,它們的版本號分別是多少。時刻跟蹤影響這些產品和版本的最新安全性聲明。
2.建立一個流程,來快速地部署帶有安全補丁的軟件產品發佈版,這樣一旦需要因爲安全方面的原因而更新支持性框架或庫,就可以快速地發佈
3.所有複雜的軟件都有漏洞。不要基於“支持性軟件產品沒有安全性漏洞”這樣的假設來建立安全策略
4.建立多個安全層
5.針對公網資源,建立對異常訪問模式的監控機制
l 技術上的安全做法
1.把關鍵數據隔離出來
把關鍵數據放在一個具有安全審計、安全監控、安全訪問的區域,對於這個區域內的敏感數據只進不出
2.對於關鍵信息的返回需要打“馬賽克”,同時在傳輸層需要加密傳輸
加密算法採用非對稱加密,同時設置祕鑰的有效期,過期則自動更換
3.對加密的祕鑰一定要做到隨機生成
更換祕鑰需要做到雙因子認證和更爲嚴格的物理認證等措施
三、技術領導力
1.人類社會發展的幾個階段
l 第一階段:野蠻開採:這個階段的主要特點是資源過多,只需要開採就好了
l 第二階段:資源整合:在這個階段,資源已經被不同的人給佔有了,但是需要對資源整合優化,提高利用率。這時通過管理手段就能實現
l 第三階段:精耕細作:這個階段基本上是對第二階段的精細化運作,並且通過科學的手段來達到
l 第四階段:發明創造:在這個階段,人們利用已有不足的資源來創造更好的資源,並替代已有的馬上要枯竭的資源。這就需要採用高科技來達到了。
l 目前我們國家正在處於一種野蠻開採的階段。
2.技術領導力的定義
l 尊重技術,追求核心基礎技術。
l 追逐自動化的高效率的工具和技術,同時避免無效率的組織架構和管理。
l 解放生產力,追逐人效的提高。
l 開發抽象和高質量的可以重用的技術組件。
l 堅持高於社會主流的技術標準和要求。
3.擁有技術領導力有哪些特質?
l 能夠發現問題
l 能夠提供解決問題的思路和方案,並能比較這些方案的優缺點
l 能夠做出正確的技術決定
l 能夠用更優雅,更簡單,更容易的方式來解決問題
l 能夠提高代碼或軟件的擴展性、重用性和可維護性
l 能夠用正確的方式管理團隊
l 創新能力
4.怎樣才能擁有技術領導力?
首先需要喫透基礎技術,基礎技術就好比是地基,要想樓房蓋得高,地基必須要打好。其次是提高自己的學習能力,第三要堅持做正確的事,第四用高標準來要求自己,第五同時要提升自己的軟技能。
第一:要喫透基礎技術
編程:
①C語言:推薦書籍:《C 程序設計語言(第 2 版)》
②編程範式
③算法和數據結構
系統:
①計算機系統原理:推薦書籍:《深入理解計算機系統》
②操作系統原理和基礎:推薦書籍:《UNIX 環境高級編程》、《UNIX 網絡編程》和《Windows 核心編程》
③網絡基礎:推薦書籍:《TCP/IP 詳解》
④數據庫原理
⑤分佈式技術架構
第二:提高學習能力
①學習的信息源:常見的信息源有 Google 等搜索引擎,Stack Overflow、Quora 等社區,圖書,API 文檔,論文和博客等
②與高手交流:學習這些牛人的思維方式和看問題的角度
③舉一反三的思考
④不怕困難的態度
⑤開放的心態:實現一個目的通常有多種辦法。帶有開放的心態,不拘泥於一個平臺、一種語言,往往能帶來更多思考,也能得到更好的結果
第三:堅持做正確的事
l 提高效率的事
l 自動化的事
l 掌握前沿技術的事
l 知識密集型的事
l 技術驅動的事
第四:高標準要求自己
l Google 的自我評分卡
l 敏銳的技術嗅覺
l 強調實踐,學以致用
l Lead by Example。永遠在編程
第五:軟技能
良好的溝通能力、組織能力、驅動力、團隊協作能力
推薦書籍:《技術領導之路》、《卓有成效的管理者》