自己關于所從事工作的一些看法,希望對你有用。
為什么要選擇軟件互聯網行業
從宏觀上來看,軟件互聯網工作者算得上是這個時代的弄潮兒,站在潮流的前沿,致力于為用戶創造更加時尚便捷優質的生活。在當今這個移動互聯網的浪潮之中,你可以感受到互聯網正在改變人們的生活方式和思維方式,激發時代的變革,進而改變中國,改變世界。如今,一切傳統行業如果不擁抱互聯網,就將面臨被時代浪潮淘汰的危機。拿金融銀行業來說,阿里巴巴余額寶的面世為千千萬萬的擁有小額存款的打工一族及其他社會基層人民提供了一種可觀的穩定可靠的且入門門檻較低的理財方法,給廣大民眾帶來巨大福音,而余額寶也因此觸動了傳統銀行界國有壟斷者們的利益根基,雖然他們目前企圖聯合起來抵制這種互聯網金融,但我相信他們這是逆流而行,終究擋不住互聯網帶來的金融變革!
在我看來,互聯網巨頭Google是這個時代最偉大的科技企業,他們的決策者正在帶領員工用科技,用智能手機、Google Glass、無人駕駛汽車、熱氣球無線網絡改變世界,改變生活。而在中國,阿里巴巴這樣的互聯網企業也都在努力探索改變和顛覆一切不盡人意的傳統行業,使之更加親民,更加具有用戶體驗性。總之,在互聯網面前,一切傳統事物都具有無限的想象空間。這大概也是互聯網從業者比其他傳統行業從業者更加容易創業的原因吧。
從微觀來說,移動互聯網時代真的是讓人們的生活更加高效便捷甚至優雅,地圖,叫車,付款,訂票,吃喝,購物,社交這些事情因為智能手機和移動互聯網而變得輕而易舉,也使得世界近在咫尺。可以坦言,我個人現在的生活已經幾乎離不開手機,離開將寸步難行,這或許從另一個方面來看也許有些悲哀,但你不得不承認移動互聯網如今已經植根于我們的生活,從事移動互聯網的建設會讓人們的成就感如此真實貼近。當然,互聯網工作者相對于其他行業從業者來說,也有普遍相對較為可觀的收入。
互聯網工作者不局限于程序員
不過有一點需要明確的是,互聯網工作者不僅限于程序員,因為一個好的互聯網產品絕不是單單由程序員創造的,它需要各種不同職能的人分工合作共同創造出來。
作為一個程序員,在我的日常工作中,接觸比較頻繁的角色通常分為以下幾種:
1、PM
Product Manager,即產品經理的意思。這一類角色主要負責追蹤和分析市場需求,從而提出并定義有價值的產品,進而推動這些產品的開發實現。他們需要具有敏銳的嗅覺和前衛的思維,他們可以不用寫程序畫界面,但需要懂技術,知道什么功能是可以實現的,什么功能難以實現。
2、RD
Research and Development engineer,研發工程師,也就是所謂的程序員,諸如PHP程序員,Java程序員或者C/C++程序員等等。從更為專業的角度區分,程序員分為客戶端RD(包括windows RD,MAC RD,Android RD,IOS RD,WP RD等等)、服務器RD(也分為前端和后端,前端是后面要提到的FE,后端包括PHP Python C/C++等不同語種的RD)和系統嵌入式級RD(開發操作系統和嵌入式級別的軟件——聽起來功力更加深厚的人群)。總之,程序員致于力將PM提出的產品實現出來,并且具有合理的運行邏輯。
3、FE
Front-End Development,前端開發。實際上這類角色也是寫代碼,不過偏向JS、HTML、CSS這些決定網頁布局展示的腳本代碼。他們除了需要掌握這些包腳本技術之外,也需要具有一定的美學和藝術功底。
4、UE
User Experience,即用戶體驗。他們負責產品的用戶界面和交互邏輯的設計,為程序員們各種圖片資源,而這些設計和資源基本決定了產品的美觀程度和易用程度。
5、QA
Quality Assurance,測試工程師。他們負責對RD們實現的產品進行檢驗和評測,提BUG挑毛病。他們也屬于技術類的角色,需要理解產品的實現原理和邏輯,并且會利用相關工具和技術(包括必要的程序語言,如各種腳本語言)來對RD的程序從功能、性能(內存、速度、效率等)等方面進行檢驗和評測。必要的條件下,他們需要閱讀RD所寫的代碼,從而提出潛在的風險和問題。
6、OP
Operator,操作員,管理員。在我們這里他們主要負責服務器的管理和維護。RD開發出的服務器類程序最終會由他們布置并運行到線上機器,也就是服務器。他們也屬于技術類角色,精通服務器操作的各種命令和工具。他們相對RD來說更加具有大局觀念,因為他們管理的是大量由不同的RD實現的不同的服務。
以上這些除了PM之外,其他均為純技術類崗位。不同的崗位需要不同性格不同潛質的人來擔當。如果你是個比較有想法邏輯思維也不錯的人,PM就是一種不錯的選擇。如果技術能力較強,學習能力強有鉆勁兒RD是不錯的選擇。思維嚴密的也適合QA,有美術功底的可以選擇FE/UE。技術面廣的也可以選擇OP。
程序員的工作生活狀態
程序員,程序猿,眾所周知,我們的工作強度普遍較高。目前我自己的工作狀態是,早上10點前到公司,晚上9點到10點回家,更忙的時候也可能到十一二點,有時趕進度周末也會加班。當然不管是本公司還是國內其他類似企業,比我工作輕松或者繁重的都是有的,不同氛圍決定不同的工作狀態。從事這樣一種行業,你需要做好一定的心理準備。
然而程序員的命運也并沒有悲慘到無法忍受的地步,否則天下怎么還會有這么多不辭勞苦兢兢業業的程序員呢?以我個人為例,我的工作時間并不是完全定死的,而是可以適當靈活處理的,比如有時早上有事晚到甚至下午到也是可以的,下午或者晚上有事提前走也是沒問題的,只要跟上司打個招呼或者發個郵件通知一下就好,不會算礦工(時間長的可以申請休假),不扣工資,周末加班也可以申請調休(別的企業可能以發工資補償)。另外,一般正規的互聯網企業都應該會有年假制度,我們公司技術類崗位的初級一年有12天帶薪年假,這些年假可以適當地任意支配,比如清明、中秋、元旦這樣的小長假我們就可以利用年假拼湊出大長假,然后就可以出去大玩一番了。在我們這里,有很多旅游達人,他們動不動就出個國旅個游什么的,看起來很是逍遙自在。
程序員也可以創造優雅的藝術
事實上,程序員可以不等同于程序猿,只要你愿意。他們也可以擁有高雅的興趣愛好,比如詩詞、音樂等,也可以擁有健康的生活,比如定期運動等等。更重要的是,程序員也可以創造優雅的藝術,就像你閱讀的《黑客與畫家》中所說的一樣。因為互聯網產品是用戶體驗至上的,沒有用戶體驗的產品是不負責任的產品,沒有前途的產品,終將被市場所淘汰。高質量的用戶體驗必定是優雅的,甚至藝術的。
另外,優秀的程序員也會追求代碼的簡潔高效性和藝術優雅性,因為通常某個程序員編寫的代碼不僅僅只會給自己閱讀,總不可避免地需要給項目組的其他搭檔或者后來接入項目的人員閱讀并進一步加工擴展,那么優質的代碼則顯得尤為重要,而優質的代碼也是一種藝術。
程序員是怎樣練成的
編程語言不是根本,程序員的最終目標不是寫代碼,而是分析并解決問題。如果你可以不費一行代碼而高效解決你的問題,你何必選擇寫代碼呢。當然,寫代碼終究是無可避免的,那么對于編程語言來說,你需要理解程序和計算機之間的協作方式。C/C++是基礎:C語言讓你理解計算機是怎樣一步步被操控的,而C++讓你在此基礎上認識面向對象的執行原理。其他語言可以觸類旁通,比如JAVA就可以簡單看作C++的子集,在理解C++的基礎上掌握JAVA可謂輕而易舉。一個不太差的程序員都應該理解并掌握C/C++,并能使用其他語言,而不是單純地只會JAVA或PHP或C#一種應用性較高的程序語言。由于程序員的目的是解決問題,因此他們很可能為了達到目標需要同時使用不同的技術手段,包括運用不同的程序語言來協同完成任務。
程序員最大的挑戰不是如何寫代碼,而是如何搭建一個開發調試環境,如何使編寫的代碼編譯運行起來,并處于一種可測試可檢驗的狀態,從而你可以很方便地了解你的代碼執行的效果,透過現象分析程序運行中出現的預料之外的問題(所謂BUG),進一步也可以明確改進和優化的方向。
程序員的慣用伎倆是復制粘貼。鑒于代碼的版權無關性,大多數程序員的大多數代碼往往源于借鑒和復用,包括從網上搜索得到或者從已有的項目中獲得。總之我們的宗旨是解決問題而非寫代碼,因此快速地獲取有效的解決方案的一切正規手段都是值得推崇的,事實上能夠有效運用復制粘貼的手段實現自己的功能也是程序員的一種必備技能。
程序員最大的煩惱是無法專心寫代碼,因為在你工作的時候隨時需要應對PM、QA、上級以及其他同仁拋出的問題,因而極易被打斷當前的思路,這是一種比較讓人煩惱的事情,但卻基本是無法避免,因為你不是一個人在戰斗,而是在一群人中戰斗。就像操作系統一樣,程序員必須具有較好的中斷處理能力。
程序員最好的學習方式是閱讀別人的優秀代碼,并拿來自己運用。尤其是那些開源的基礎庫的代碼和項目,因為開源庫的東西需要面向更多的程序員并為之所用,必須具有普遍可接受容易理解的體系結構和優化高效的實現邏輯。上學的時候,就有一些比較牛的同學通過閱讀Linux內核源代碼來提升自己的專業素養,因為這種源代碼是無數高水準的前人智慧的結晶,必然有很多可以學習和仿效的地方。
一些針對性的建議
互聯網從業者的職業規劃可以根據自身的特點綜合考慮PM,RD,QA等這些職位,選擇適宜的職業方向。如果確定了要做程序員,你需要從以下這些方面著手:
1、學習掌握C/C++程序語言。學習的方法不建議一味地看書,最好是多寫些典型的小程序運行運行(教材上或者網上應該有很多,諸如鏈表算法之類的實現等),在實踐中學習進步。相關書籍的話,基礎語法書就好,C++ Primer(這種很厚的書一般我是看不進去的,都是拿來當字典一樣查閱的,而不是當教材來學習)。
2、多進行工程實踐,課程設計或者畢業設計這種系統級別的工程實踐。最典型的就是用MFC圖形界面(或者C#)和sql sever(或者My sql)實現一個圖書館管理系統,這里面就不單是程序語言的問題了,更重要的是架構規劃和設計思想,包括數據庫的設計、界面邏輯的設計、程序結構的設計。這里面就會涉及sql數據庫,界面開發等不同的技術。這其中,安裝數據庫及開發工具并最終打通界面與數據庫初步構建一個系統對于一個初學者來說是一個大的挑戰,也是提升能力的關鍵。當然也可以做PHP網站項目,或者Andrdoid IOS等手機項目,這些應該比MFC項目更加有前途,圖書館里面或者網上應該可以找到很好的訓練項目。這樣的項目實踐對提升程序員的技術能力和解決問題的能力有很大功效。
3、找實習,在企業里面親身實踐,努力提升。企業工作環境能夠提供不同于學校的學習和進步的環境,尤其對于程序員來說更加不可或缺,實習的話就不要過多關注待遇,更多的要關注如何腳踏實地地干活,從而提升技術實踐能力。我畢業前曾經在杭州一家做手機軟件的企業實習過近一年,自認為提升非常大,如果沒有那一年的實踐經驗我也基本不可能來到現在的單位。當然,實習單位也可以是就業的一個選擇,如果合適的話,一般實習單位很容易接收在那里實習過的人的,畢竟培養一個員工并不是一件輕而易舉的事情。
4、關于應聘求職。在我之前寫的求職感悟之中也提到過,程序員求職筆試是一個門檻,你必須進行充分準備,只有通過了筆試你才能獲得進一步的機會。另外受挫折是不可避免的,你需要不斷地嘗試,在各種筆試面試中積累經驗,提高應聘技巧,以求能夠抓住后面的機會。
關于書籍方面,如果針對提升求職技能的話,C++(JAVA)程序員面試寶典,C和指針這類專門應對應聘的書籍是很適用的。另外為了真正提升專業素養,也可以嘗試一些層次較高的書籍,如設計模式、thinking in C++/java之類(我這里所列舉的并不一定是最好的,也不是全面的,網上可能有更好更多的推薦)。
5、程序員的基本技能。一般情況下,一個合格的程序員除了需要掌握一門程序語言外,還需要了解和掌握數據結構及算法思想、操作系統原理、數據庫原理、網絡技術(TCP/IP)等等。這些都是程序員的基本技能,而加強這些技能的有效方法就是在簡單學習理論知識的前提下通過工程項目實踐來深入理解和運用。
至于半道出家或者非專業出身,我還是那個觀點,項目實踐是提升程序員技能的唯一有效途徑,程序員招聘非常簡單,就是看你會什么,做過什么,有潛力做什么。只要你實踐足夠多,經驗足夠豐富,不在乎你的出道時間和是否專業出身。我個人上大學以前,在電腦面前基本就是個白癡,大學時粗淺地學過C/C++,大二以后才有自己的電腦,后來修了個計算機雙學位才有了一些基本的專業素養。不過提升最大的還是在自己做課程實踐和畢業設計的過程中得到的。在我看來成為一個合格的程序員的門檻相對來說還是比較低的,稍微入門之后,課程設計這種級別的實踐是的物質代價和時間代價都是比較低的,一臺電腦,一本指導書,少則幾周,多則上月就可以完成一次實踐。對于培訓的話,其實我也不是很了解,如果有助于你進行項目實踐,那自然也是可以考慮的,如果純粹像學校一樣授課而不能推進實踐,那么不去也罷,還不如自己利用這個時間自己親自動手探索。
總之要想得到好的結果,關鍵還是靠自己的毅力和決心。
程序員的焦慮
人無遠慮必有近憂。由于程序員工作的特殊性,他們普遍存在一些焦慮。
1,健康問題
由于長期久坐,各種頸椎腰椎問題在程序員中普遍存在。同時久坐不運動引發的脂肪肝超標也非常常見。此外,長時間不間斷勞作引發的身體突發異常情況的現象在程序員中時有發生。這些健康問題一直都在生理和心理上困擾著廣大的程序員,而無法得到妥善解決。
2,生活問題
早出晚歸的生活節奏,加班趕工的工作常態,使得程序員陪伴家人的時間和精力普遍減少。從某種程度上來說,程序員相對較優越的收入是以減損人性化生活為代價換取的。這也是許多程序員的痛處。
3,前途問題
必須承認,程序員這樣的工作不能不說是靠吃青春飯維持的。在我們這樣的單位,幾乎很少看到四十歲以上的程序員,即使有,可能也不是寫代碼的角色了。上了年紀的程序員是無法適應需要快速學習頻繁變更的工作任務的。一種通常的想法是,走管理路線。這當然是可行的,然而是不是任何程序員都適合走管理路線,或者有管理路線可以走呢——畢竟能夠最終走到企業上層的人還是占少數比例,況且上層的崗位也是有限的。還有一種想法是,自己干,創業!無可否認,程序員創業的成本和門檻相對來說是非常之低的——幾臺電腦,一個可以上網的工作室,幾個志同道合的人和一個美好的夢想,足矣!但非樂觀主義者總是不難看到前路的障礙重重和成功的機會渺茫,畢竟夢想總是豐滿的,而現實多是骨感的。人們所樂于仿效和推崇的成功者們,很少不是踏著累累白骨走上耀眼的巔峰的。總之,程序員終究需要為寫不動代碼的后半生做好心理準備和打算,這也正是焦慮來源。
寫了這么多,也差不多了,都是自己的一點思考和感悟。但愿可以對你的規劃能夠有一些有利的引導和啟發,其中的觀點只做參考,也不能忙信,畢竟一個人的思維和見識總是有限的。
李靖
2014年5月