1. 程式人生 > >一個程式設計師對另一個準程式設計師的忠告

一個程式設計師對另一個準程式設計師的忠告

自己關於所從事工作的一些看法,希望對你有用。

為什麼要選擇軟體網際網路行業

從巨集觀上來看,軟體網際網路工作者算得上是這個時代的弄潮兒,站在潮流的前沿,致力於為使用者創造更加時尚便捷優質的生活。在當今這個移動網際網路的浪潮之中,你可以感受到網際網路正在改變人們的生活方式和思維方式,激發時代的變革,進而改變中國,改變世界。如今,一切傳統行業如果不擁抱網際網路,就將面臨被時代浪潮淘汰的危機。拿金融銀行業來說,阿里巴巴餘額寶的面世為千千萬萬的擁有小額存款的打工一族及其他社會基層人民提供了一種可觀的穩定可靠的且入門門檻較低的理財方法,給廣大民眾帶來巨大福音,而餘額寶也因此觸動了傳統銀行界國有壟斷者們的利益根基,雖然他們目前企圖聯合起來抵制這種網際網路金融,但我相信他們這是逆流而行,終究擋不住網際網路帶來的金融變革!

在我看來,網際網路巨頭Google是這個時代最偉大的科技企業,他們的決策者正在帶領員工用科技,用智慧手機、Google Glass、無人駕駛汽車、熱氣球無線網路改變世界,改變生活。而在中國,阿里巴巴這樣的網際網路企業也都在努力探索改變和顛覆一切不盡人意的傳統行業,使之更加親民,更加具有使用者體驗性。總之,在網際網路面前,一切傳統事物都具有無限的想象空間。這大概也是網際網路從業者比其他傳統行業從業者更加容易創業的原因吧。

從微觀來說,移動網際網路時代真的是讓人們的生活更加高效便捷甚至優雅,地圖,叫車,付款,訂票,吃喝,購物,社交這些事情因為智慧手機和移動網際網路而變得輕而易舉,也使得世界近在咫尺。可以坦言,我個人現在的生活已經幾乎離不開手機,離開將寸步難行,這或許從另一個方面來看也許有些悲哀,但你不得不承認移動網際網路如今已經植根於我們的生活,從事移動網際網路的建設會讓人們的成就感如此真實貼近。當然,網際網路工作者相對於其他行業從業者來說,也有普遍相對較為可觀的收入。 說到這裡,也給大家推薦一個架構交流學習群:614478470,裡面會分享一些資深架構師錄製的視訊錄影:有Spring,MyBatis,Netty原始碼分析,高併發、高效能、分散式、微服務架構的原理,JVM效能優化這些成為架構師必備的知識體系。還能領取免費的學習資源,相信對於已經工作和遇到技術瓶頸的碼友,在這個群裡會有你需要的內容。

網際網路工作者不侷限於程式設計師

不過有一點需要明確的是,網際網路工作者不僅限於程式設計師,因為一個好的網際網路產品絕不是單單由程式設計師創造的,它需要各種不同職能的人分工合作共同創造出來。

作為一個程式設計師,在我的日常工作中,接觸比較頻繁的角色通常分為以下幾種:

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,前途問題

必須承認,程式設計師這樣的工作不能不說是靠吃青春飯維持的。在我們這樣的單位,幾乎很少看到四十歲以上的程式設計師,即使有,可能也不是寫程式碼的角色了。上了年紀的程式設計師是無法適應需要快速學習頻繁變更的工作任務的。一種通常的想法是,走管理路線。這當然是可行的,然而是不是任何程式設計師都適合走管理路線,或者有管理路線可以走呢——畢竟能夠最終走到企業上層的人還是佔少數比例,況且上層的崗位也是有限的。還有一種想法是,自己幹,創業!無可否認,程式設計師創業的成本和門檻相對來說是非常之低的——幾臺電腦,一個可以上網的工作室,幾個志同道合的人和一個美好的夢想,足矣!但非樂觀主義者總是不難看到前路的障礙重重和成功的機會渺茫,畢竟夢想總是豐滿的,而現實多是骨感的。人們所樂於仿效和推崇的成功者們,很少不是踏著累累白骨走上耀眼的巔峰的。總之,程式設計師終究需要為寫不動程式碼的後半生做好心理準備和打算,這也正是焦慮來源。

寫了這麼多,也差不多了,都是自己的一點思考和感悟。但願可以對你的規劃能夠有一些有利的引導和啟發,其中的觀點只做參考,也不能忙信,畢竟一個人的思維和見識總是有限的。

想要學習Java高架構、分散式架構、高可擴充套件、高效能、高併發、效能優化、Spring boot、Redis、ActiveMQ、Nginx、Mycat、Netty、Jvm大型分散式專案實戰學習架構師視訊免費獲取   架構群:614478470