說說程式設計師的核心能力:第一個三年:後臺、前端、移動應用,第二個三年呢?

NO IMAGE

轉眼間,做了一年多的專案結束了。修了兩天的假,等著下一個專案的開始,或許這就是身為乙方的宿命。

倘若是在自己的辦公室裡完成專案,那麼甲方和乙方的區別怕是不大。而作為一個在客戶現場工作的乙方工程師,就不是一件容易的事。在客戶現場面對的,不僅僅是技術問題,還要注意一系列的溝通,以及額外的政治影響等等。

時間一久吧,總會在思考兩種工作模式的不同之處。兩者的目標是一致的,只是一方永遠都是要配合的。總在想,如果我是另外一方,會怎麼去思考問題。也在思考著,如何來提升自己——因為很多時候自己是接觸不到資料、終端使用者等等的資訊。

扯太遠了,我就是來總結一下所思所想。

不要讓 title 限制了你的職業生涯

大學學的是電子資訊工程,剛畢業的時候,想找一些硬體方面的工作。可是因為學校和學歷的原因,就找不到合適的機會。可儘管如此,在大學的時候,我仍然做了很多的網站開發的工作。

從前將自己定位成前端工程師,那時便覺得『運氣』是一種特別值得玩味的事。它(運氣)可以讓你當上 CTO,走上人生巔峰,也能讓你覺得生活是一種樂趣。

當我想做前端相關開發的時候,專案主要的都是 Java 相關的維護工作。慢慢地由於需要,將注意力放到了後臺架構、搜尋引擎這一類的事上。

當專案上用上了前沿的前端技術棧時,我在做 DevOps 的工作。關心專案中的一些瑣事、雜事,也會羨慕別人可以無憂無慮地去做業務卡。

當其他人覺得我的主要工作前端的時候,在專案上主要做的是移動應用開發工作。從原先的混合應用,到編寫一些簡單的 Java、Objective-C 來實現混合應用外掛,再到使用 React Native 升級 Growth 來練手。

這就是命吧,下一步是怎樣的,便是一件有趣的事。

可後來吧,工作的時間漫漫的拉長,便也發現了作為一個工程師,我到底還是合格的——放到一個新的技術棧上,如與擅長的前端不同,學習會兒,也就勉強能跑幾步了。這倒是與之前的定位,發生了一些微小的變化。

慢慢地,在我完成了《全棧應用開發:精益實踐》一書後,我便將前端工程師視為是工作的需求(也就如今年初寫的開源電子書《我的職業是前端工程師》一書所講述的),而不是我的標籤後,便發現可以做的事情有很多,可以拒絕的事情也有很多。

大抵只是因為我將 title、標籤 視為工作上的標籤。對,就是那種你覺得工作上的你是正經的你,業餘的你是不正經的你。你可以去做自己喜歡的事,編寫自己想寫的程式碼——前提是,你加班沒有那麼多。

不過,我的真實 title 是一個諮詢師,啊哈哈哈。

關注能力的成長

從後臺到前端,再到移動端,要關心的東西很多,要學的東西很多。可說到底吧,有幾種能力便還是不變的:

  • 快速學習
  • 索引知識
  • 解決問題
  • 溝通表達

快速學習

記得我在大四實習的時候,沒有用過 Spring,亦沒有深入瞭解過 JDBC 這一類的東西。可是,工作上是要用到的。於是吧,無論是誰,都得拼命的學一段日子。這時吧,只能買幾本書,熬幾個夜,喝幾杯咖啡,幾天也就得上手。壓力這麼一大吧,學習也就快了。

可這樣一說,快速學習那可是基本的核心能力啊。它所指的,並非是我們能快速使用一個新的框架,而是我們能快速的使用一個新的框架來完成工作。因為當我們談及快速學習的時候吧,我們多數是在以任務為驅動的學習。

解決問題

慢慢的,當我們習慣了堆砌的程式碼,就會發現工作中的高潮,就是解決一個個的疑難雜症。解決問題吧,無非就是: 先識別問題,再去解決問題(PS:很是奇怪)。

識別問題。通過復現、Debug 找到出現問題的地方,然後再找尋到出現問題的地方,再去追根溯底。這一步往往是最難的地方,為此,你需要掌握好各式各樣的除錯工具,前端開發中的 Chrome 除錯,後臺開發中的實時 Debug、日誌記錄,移動開發中的抓包工具。還要去了解各個系統的組成,如典型的編碼問題,一般都不是應用程式的問題。因此,你要從 Chrome 發出的請求開發,再檢視 HTTP 伺服器(如 Nginx)接收到的請求,隨後便是應用容器(如 Tomcat)轉的語法,最後才到應用程式的地方。

解決問題。多數時候,我們所要解決的問題,都是別人遇到的。因此,解決問題的第一原則是使用搜尋,多數時候只需要搜尋錯誤提示,就能找到答案。而為了使用好搜尋,你還需要找到合適的上網方式。

在解決問題的過程中,最重要的不是解決問題本身,而是諸如問題有沒有解、有沒有解決問題的必要(即最優解)。如你做了一個混合應用,那麼效能問題接近於『無解』。而如果你們的應用不會有效能問題,那麼就沒有理由去重寫應用,以解決效能問題。

索引知識

人吶,不會一直年輕,也總會有個伴侶的(@花仲馬),哪怕是基友喝上門。很多時候,總需要處理一系列的瑣事,需要花費時間去照料家庭,家人。哪怕能我一樣不加班,時間也遠遠不夠用的。有些技術細節,只能看個大概,又有很多技術細節,與其他框架是相似的。

上手一個新的領域,總會找個人資料、找本書瞭解、找相關資料探索,隨後再找一個 Awesome List,在這個列表裡,找到這個領域的一些流行趨勢。一步步探索的過程中,我們便在不斷地構建這個領域的索引,慢慢地便能識別相關的問題。

因而,當你覺得你對這個領域很瞭解時,實際上是因為你有了這個領域的索引。

溝通表達

對於我而言,這方面仍然有相當大的提升空間,只是當前它可能還不在第一優先順序上。雖然只是花費了一兩個月的時間,讀了一兩本相關的書,確也發現有所提升。

作為一個程式設計師的日常溝通,大概就是業務人員和程式設計師吧,溝通的要點吧,便是知道對方要表達的東西,再表達清楚自己心裡的想法。

可作為一個普通的人,是得多和人打交通。與大多數程式設計師相比吧,在我司還是不錯的,至少你要不斷地和人溝通,日常的聊天、與客戶的溝通、與開發人員的溝通等等。

做一個自己的產品

大抵,只要是一個有追求的程式設計師,都會想去做自己的產品。無論你是在騰訊、阿里大公司裡,又或者是在哪個小公司裡,只要你不是老闆,那麼做出來的東西可就算不上你的成就了。於是乎,有熱忱的程式設計師都會去創造自己的輪子,有一個自己拿得出手的東西。

造輪子、寫部落格、做 APP,總能讓我看到程式碼之外的,不一樣的東西。用某句高大上的話來說,就是看到世界的執行法則。

部落格,算是我的第一比較正式的作品,我學習了大量的 SEO 技巧。

Growth,使用者過 10萬的作品,嘗試了大量的使用者,程式碼維護。如何宣傳,獲取更多的使用者

『玩點什麼』,作為職業生涯裡的第三個作品,運用了更豐富、嘗試著如何去保留使用者。

你就好比是一個更大的試驗田,可以輕鬆地嘗試自己的想法。工作的時候,往往很少有這樣的機會;業務上的任務,是由業務人員與客戶溝通過來的,

在學校找一個女朋友

考慮到,你們那麼單純:

  • 工作的,還是去學校找個女程式設計師~~~,啊哈哈哈。
  • 還在學校的,快找學妹下手~~。

算了,只要不上婚戀網站就行~~。

完結,撒花~