關於程序新手入行的分析與看法

一、關於應屆生就業時選擇大公司還是小公司問題

很多人在第一次求職的時候幾乎都會遇到“到大公司還是到小公司”的問題。他們認爲大公司的薪水高、工作穩定、技術水平高、升遷機會多,但是,大公司要求高,競爭激烈,自己怕進不了;而小公司薪水相對低一些,工作穩定性較差,技術水平參差不齊,升遷機會不多,但是,錄取率相對較高。這可能是各種求職中的一個常見話題。這個選擇應該是因人而異,幾乎沒有什麼正確答案。所以,我們看到過選擇大公司的人獲得了成功,也看到過選擇小公司的人獲得了成功,相反的情況我們同樣也見到過。

作爲程序員的求職,我想還是具有職業特殊性的。程序員職業和一般的職業有很大的不同,程序員職業有其鮮明的特點:1)個人勞動;2)產品可複製。這兩個特點註定了程序員有很大個人發展的空間。

1.個人勞動

表明其工作主要和勞動者自身有關。無論是程序員獨自承擔一個編程項目,還是在一個項目中承擔部分編程工作,都可以歸結爲個人勞動。不像有的職業需要昂貴的勞動設備,依賴昂貴的設備,例如:鍊鋼工人必須要有鍊鋼廠的鍊鋼爐;也不像有的職業需要其他人聯合勞動,例如,流水線上的裝配工;也不像其他職業有嚴格操作規範和工作流程,例如,製藥廠必須按照製藥的配方生產藥品。

程序員只要有臺計算機(其價格可以忽略不計)就可以工作了,而且在工作時是一個人在工作(工作前後以及項目的銜接可以忽略不計)。其編程過程完全取決於程序員個人的技術水平發揮。

2.產品可複製

絕大部分企業生產出的是實物產品,每個產品都需要投入一定的原材料,價值很大限度上與其原材料的成本有關。勞動者生產一件產品,其最大的價值就限制在這個產品的售價之內了。

而程序員生產的產品是軟件,軟件最大的特點是可複製性,而且可複製得不計其數。因此,程序員生產軟件的價值就是軟件拷貝數。當拷貝數不斷增加的時候,程序員生產的軟件價值就在不斷增大。一個軟件最大的價值等於其單價乘上可能的用戶數。如果這個用戶數是成千上萬的時候,程序員的一個勞動價值可達到一個天文數字。所以,世界上成功的軟件企業,正是這種可複製性的受益者。

程序員的這兩個職業特點表明程序員的發展空間很大。程序員不管是在大公司還是在小公司都能獲得成功。只要這個公司能生產和銷售出可複製的軟件,程序員都能夠獲得比職業高得多的收益。關鍵是程序員是否具備編制這些軟件的技術,這些軟件能否被大量複製(定製軟件價格高也行)。

比爾·蓋茨正是成功通過編制軟件而將微軟發展成爲一個軟件帝國的。在現實生活中,也有一些成功的程序員自己當上了軟件公司的老闆。不成功的也有很多,但是,其中的原因不在此,我會在後面的內容中加以分析。

通過以上分析,當程序員面對“選擇大公司還是小公司”的時候,我建議:

1)在程序員趨向於安穩工作的情況下,而且具有大公司所要求的學歷、經驗、證書、能力的時候,應該首選大公司。這些大公司指的是國內外著名企業,有的甚至是地區內著名企業。進入大公司後,可以保證收入高,崗位穩定。

2)在程序員技術水平一般的情況下,想進大公司也可能是一個夢想,那隻好選擇小公司了。小公司的好處是起點低、機會多,缺點是收入低、開發不規範。

3)對於有理想和抱負的程序員,我建議先進小公司,然後再進大公司。小公司專業化分工比較粗糙,有的甚至一個人就會負責一個項目,對人的鍛鍊機會很多,程序員既可以學到編程,又可以學到設計和項目管理,往往會成爲一個“全能型”的程序員,這對程序員以後的發展有很大的好處。但是,程序員在完成編程積累之後,應該轉向到大公司發展,學習大公司的軟件開發流程、團隊意識、大項目的開發經驗、規範和管理、企業間的合作以及技術交流和運用等。

4)我們知道軟件能否複用是軟件小公司發展的關鍵。因此,我們在面對軟件小公司的招聘的時候,我們應當對公司在軟件行業應用的範圍,以及軟件的客戶數有所瞭解,以判斷小公司的成長性。當小公司成長性很高的時候,你的選擇應該是正確的,當小公司成長性很低的時候,你若選擇,就有可能不正確。

5)那些缺乏遠大理想的程序員,只是把軟件當做普通工作,求得平均工資和正常收入的程序員,最好能找到一些工作較爲穩定的部門,以保證有一個穩定收入。這些人即使進入大公司、小公司,都可能面臨解僱的危險。最好的情況就是處在一個崗位多年不動,工資多年不漲的局面。

對於有理想的程序員來說,無論進入大公司還是小公司,都是一個積累過程,都是一個鍛鍊自己的天地。對於普通的程序員來說,進入大公司則實現夢想更容易些,進入小公司則可能存在諸多困難。只是前者取決於自己,而後者取決於別人。而關注公司成長性則是兩者都要重視的,畢竟這和自己的當前和未來收入密切相關。

總之,我想說程序員是一個很特殊的職業,它給每個程序員造就了一飛沖天的可能。關鍵是程序員自己是否有這個想法,能不能在進入各種公司之後,積累和提高自己的技術水平,爲一飛沖天做好準備。

關於新手面試常見問題和對策:

招聘面試是一個用人單位(面試官)與招聘者之間的博弈,不同的應聘者、不同的用人單位、不同的面試官會產生不同的面試過程和不同的面試結果。因此,如何應對面試是很難有什麼正確答案的。但是,大量面試沉澱下來的各種成功的經驗和失敗的教訓卻是我們可以參考的。

在日常生活當中,常常有朋友和同事找到我,向我詢問他們學計算機專業的孩子在面試時要注意些什麼。也有一些軟件公司因爲和我比較熟悉,請我在業餘的時候爲他們招聘人員把把關,提提意見。在單位的時候,有時候也會帶上實習生,也會面臨培養新員工的問題。因此,我見到新手的機會相對比較多一些,加之自己也是從新手走過來的,所以對新手相對了解一些。可以說我身兼了被招聘者和招聘者兩種角色。客觀瞭解和分析這兩者的面試心理可以讓我們面試時心態更從容和平和一點。

作爲新手,主要是一些剛畢業的大學生,他們很少有編程經歷,很少有人能把學的東西與現實對上號。但是他們求職心切,急需通過錄用來證明自己的社會價值,證明自己的獨立生活能力,因此,他們在應聘中一直處於弱勢地位。

作爲面試官,肩負着企業招聘員工的重任,知道企業招人的急迫性和招人的標準,當應聘者衆多的時候,其招聘要求應更加嚴格;當應聘者不多的時候,要求就可能放寬。他們擁有招與不招的大權。在招聘中處於強勢地位。

二、新手在面試時常見有以下幾個問題

1.簡歷灌水

新手在求職時,往往會投寄和遞交簡歷。這些簡歷對用人單位瞭解應聘者的意義重大,這是用人單位對其第一印象。現實中有很多簡歷言過其實,例如:“精通C#、Java語言”,其實遠遠達不到精通的水平。“開發過某某項目”,實際上僅僅是參與過這個項目,在項目中作用微乎其微。這樣言過其實的部分往往會在“掌握語言”、“編程水平”、“英語水平”、“項目能力”、“團隊精神”、“學習經歷”、“學習成績”有所體現。有的人明明沒有學過C#,但是他敢於寫上自己精通C#。

灌水的直接結果就是應聘者在面試時,顯得很尷尬,顯得很不誠實。例如用人單位急聘C#程序員,看到簡歷上精通C#之後,必然會在面試時問及C#編程情況,在某些情況下,還會出一些C#編程試題。如果這個新手並不精通或根本不會C#,其結果就可想而知了。

很多新手認爲,你不寫誇大一點,你可能連面試的機會都得不到。但是,到了面試,一切都會暴露的。我認爲,在簡歷上誠實地寫清自己的各種情況和水平,這可能更容易得到用人單位的認可。如果自己掌握的東西不夠的話,還是應該把應該掌握的東西在應聘之前多掌握一些,把真實的自己展示在用人單位面前。

大家知道,在招聘程序員的時候,面試官中一定會有一個懂程序的高手(用人單位的高手),而這些人自信心很強,具有好鬥的潛意識。你說強,他就要讓你把強說出來,好讓他表現自己。所以這個職業特點註定你不能太誇大自己。

2.恐懼心理

由於新手處於弱勢地位,其恐懼心理很嚴重,有的大學生社會實踐比較少,連起碼的見面禮節和打招呼都忘了。有的人在介紹自己的時候話不成句,聲音極小,連面試官都聽不清楚,尤其是被問到程序方面問題的時候,更是緊張得詞不達意。幾乎所有新人都有恐懼心理,只是恐懼程度有高有低罷了。恐懼心理使應聘者留給面試官的印象不好,他會認爲你社會經驗比較少,溝通力差,還是一個學生。

可以通過時間和經歷來克服恐懼心理,新手平時要注意這方面的改進,講話聲音儘量大一些,說話要儘可能多,話與話之間儘量連貫,在說話時,眼光要儘量看着聽者。新手可以找一些同學、老師、家人當做面試官練練兵,一次不行二次,二次不行三次,多練幾次就會好得多。

3.表現欲強

程序員中也有一些表現欲強的人,這類人動手能力相對強一些,對新技術有追逐的愛好,有的也做過一些項目,自己也賺過一些錢,有的認爲自己已經會編程了,有的認爲自己已經是高手了,他們在面試時表現出了那種過於自信的談吐。有的甚至會問面試官知道不知道某個東西,這往往讓面試官感到不快。因爲在企業工作的程序員或項目經理都知道技術水平的提高是沒有止境的,否則,他們也不會來招聘新人。他們既要看到應聘者的能力,又要看到應聘者表現能力的方式。他們認爲,那些過高看待自己的人往往在團隊合作上容易出現問題。而且誇誇其談的人往往和那些沒有真實能力的人畫上等號。

面試時,缺乏能力的時候,要表現出能力;缺乏風度的時候,要表現出風度,應聘者,切記不要班門弄斧,弄斧可能傷到自己的腳,如果想要表現自己的話,可以在同學、家人、陌生人面前盡情的表現,雖然這些表現可能不會影響你的應聘。

不過,有的企業不把表現欲很強的人錄用爲程序員,而是把其錄用爲軟件銷售人員,這種情況在現實生活中也真的出現過。

4.準備不足

很多企業和單位在招聘的時候對招聘崗位和人員要求都是很明確的。但是,有的應聘者往往對此沒有針對性、重點性的準備。例如,某用人單位要招聘有金融軟件開發經驗、熟練使用C#語言的程序員,很顯然用人單位是要做金融方面程序的,而且缺少C#程序員。應聘者應該針對金融方面的知識和C#語言兩大方面多做準備,如果你有金融軟件開發經歷,那就要在面試時突出這個方面的內容,如果沒有,你最好多準備金融方面的知識,談談對金融業務的理解和自己的看法,表明你對金融軟件的瞭解程度。同理,在C#方面,也要針對C#在金融軟件方面常用到的技術做些準備。這樣有的放矢地回答面試官的問題,總比擺出一副叫我做什麼我就做什麼的架勢要好得多。

許多新手對用人單位的性質、員工人數、工資狀況、同業中排名、產品方向、單位特點、發展趨勢、可能筆試、面試的內容都無準備,便匆匆應聘,其結果是可想而知的。機會總是留給那些有準備的人。

5.性格內向

由於編程是一種個人勞動,很多學程序的學生很自然地沉浸於個人世界裏,與外界交往和交流並不主動和積極。表現在與人打交道上很內向,少言寡語,給人看上去很“老實”的感覺。這些人往往對自己很自信,卻又埋怨別人不理解自己的能力。在面試時,往往和面試官形成一問一答那種很機械的場景,嚴重缺乏主動性,從而給面試官留下一種很不自信的印象。除了女人找對象要找“老實人”之外,很少有軟件企業要招那種性格極端內向的程序員的。

在當今項目規模越來越大,項目內部越來越需要協調、交流和合作,軟件開發更需要團隊精神來支持。無論是交流意識、交流方式都是優秀程序員必須具備的。所以在面試的時候,要避免一問一答,要主動地在重點問題上談談自己的看法和想法,主動和面試官進行溝通,這樣面試官自然會對你另眼相看,我們不排除的用人單位喜歡僱用性格內向的程序員,但那畢竟是少數。

6.邏輯不清

程序員最重要特徵之一就是邏輯性,凡事要講邏輯、講條理,有條理才能成爲程序。但是,面試時也常常遇到一些應聘者答非所問。如果你要問他多高,他絕不會回答他1米70,而是可能回答“今天上午我才趕來面試的”。你要問他常用的排序方法有幾個,他絕不會回答有3個,第1個是什麼,第2個是什麼,第3個是什麼,而是回答讓你不知道他在說些什麼,也許其中有那麼個排序的名詞。對於那些沒有什麼正確答案的問題,那更是能回答得雲裏霧裏,聽不出其中的頭緒。可以說這種人說話和思維缺乏邏輯,能把一個簡單事情複雜化,能把一個真實事情虛無化。

這種人在理解別人的話的能力方面,在處理問題的能力方面,在邏輯方面都很欠缺。如果不加以注意和改進,那麼進入了程序員這個行業後,自己痛苦,同時別人也會跟着痛苦。瞭解這些後,應聘者在面試時,一定要集中精力,要充分理解面試官提問的真正意圖,回答簡明而有條理,不懂也不要胡亂說。只有這樣面試官纔會認可你是做程序員的材料。

7.潛力不明

用人單位招收程序員一般有兩種類型,一類是招來即用的,一類是培訓後使用的。對於前者,用人單位招的是和自己項目開發最接近的程序員,比如之前做過此類項目最好(挖同行的人員),招人的標準很明確,能幹則要,不能幹就不要。針對第二類,主要是看應聘者的各方面素質,看看是否通過培訓後能逐步成爲單位的有用之才,所以標準比較寬泛,無論是應聘者還是招聘者都有很大的選擇範圍。很多應聘者並不瞭解這些,在面試的時候,沒有主動地表現自己各個方面的素質,表明自己是一個有素質和潛質的員工,以獲得面試官的認可。

有一點要特別說明,應聘者千萬不要過度地表現自己的學習慾望,說一些“到單位之後,我會好好學習的”之類的話,認爲用人單位是一個學校,只要當一個好學生就可以了。用人單位要的不是一個學生,不會提供一個免費培訓基地,而是讓你爲它創造財富的。面試官特別不喜歡那些已經走出校門而思想還沒有走出校門的應聘者。你不如說“我到了單位後,將多做工作,爲單位創造財富貢獻自己微薄之力”之類的話,這反而更能讓面試官認同。

應聘者的語音語調、着裝打扮、遞交材料方式、等候面試、介紹自己的分寸、對用人單位的關注度、對自己未來的企盼、對自己可成長性闡述、對自己不懂問題的回答等面試中的細節,都可能是面試官對你產生印象的一個因素。這些因素的綜合形成了面試官對你的素質的判斷。

面試官可以理解你現在編程技術達不到所要求的水平,但是不能容忍今後你達不到所要求的水平。關鍵是讓面試官看到你的潛質。

總之,新手在面試時,要準備充分,要端正自己的心態,即不要過分地表現自己,也不要恐懼猶豫,說話要條理清楚,注意面試中的各個細節,儘可能地向面試官展示自己良好的職業素質,展示自己未來的發展潛力,這樣面試官就可能對你有一個良好的印象,有助於獲得這個就業機會。

面試只是應聘者素質的集中反映。素質的形成可以是在面試之前,也可以是在面試之後。只要我們注重培養和提高自己的素質,我們就可以在任何時候面對任何的面試。

 三、關於薪水的問題

上班了!拿工資了!從學生轉變成社會的勞動者,這是人生階段的一個重要轉折標誌。當拿到自己的薪水之後,是喜悅、是滿足、是苦惱、是無奈,每個人的感覺都是不一樣的,我記得自己第一次領到上班的工資不到10元錢,興奮異常,忙着請客慶賀。而今一個新手拿着2000多元的薪水估計也不會欣喜到哪裏去。

程序員注重自己的收入與其他所有勞動者一樣,注重自己的收入是天經地義的事情。只要是爲了謀生而工作的(爲了其他目的,如愛好、興趣、自我實現等而工作的,不在我們談論之列),都會注重自己的收入。幾乎沒有一個人會認爲自己的收入高,所有的人都希望自己的收入越高越好。這個原因主要是人對金錢的追求是無止境的。

現實中程序員對自己的薪水還是有很多苦惱的。

1.從宏觀上看收入

從宏觀上看,由於程序員所處的行業或企業不同,其收入的差距確實存在。所以,當程序員看到在其他行業工作的同學所拿到的工資時,就會感嘆自己拿的工資太少。我初步估算了一下,新進軟件公司的大學生的工資收入一般是當地最低工資的2倍左右。

2.從企業內部看收入

在一個企業內部,由於各個部門或職位分工不同,其工資也存在較大差異,而且在不同的行業中這種差距也比較明顯。

作爲軟件公司的程序員一般是公司收入最低的階層,而作爲用戶單位的程序員的收入一般處於單位平均工資的中等水平。總之程序員的平均收入水平是不高的。而程序員本身也因工齡、技術能力、項目的不同而收入不同,有的程序員升任到了設計師、項目經理,其收入也能是普通程序員的5~10倍。這種眼前工資的差異也會讓新進公司的程序員心中有所不平,尤其是看到和自己一樣工作,甚至能力不如自己的同事,拿着比自己高的工資,這種心態尤其強烈。

3.從話語權看收入

程序員除了感到收入低之外,還會對自己的薪水制定沒有話語權感到沮喪,而且也會爲獎金有無,分配問題激動,還會爲收入不能滿足各種生活支出而感到無奈。大凡與收入掛鉤的事都會讓人苦惱不已。

現實,現實,還是現實。程序員不但要學習技術,還要學習適應社會,增加自己的社會知識和經驗。我們無法掌控薪水的多少,薪水不是靠我們想出來的,就像發財不是靠做夢就能實現的道理一樣。所以我們要學會“自己不能左右的事不要多想”,多做些自己能把控的事,例如,有想象的時間不如把自己的工作做好,把自己的學習忙好,把自己周圍的人際關係搞好。

從另一個角度來看,新進公司的程序員至少在3個月到半年時間內還是處於學習和適應階段,還沒有能力爲公司創造利潤。從市場經濟的“等價交換”原則來看,程序員此時對公司來說是負效益的。而那種只要上班就必須給我工資的想法是一種很天真的想法。在這段時期,如果程序員能想通這個道理,就不會爲薪水煩惱了。

建議程序員換一種阿Q的心態,畢竟自己要比那些沒找到工作的強呀。

有了好的心態,我們可能更加現實,可能更加有利於我們在這個社會的成長。今天的薪水也許很低,但是必須承認我們的水平也很低;我們眼前雖然有收入比我們高得多的程序員,但是總有一天我們也會達到他們的收入水平。如果我們能認識到這點,抓住一切時間去學習、工作、提高自己的工作能力和技術能力,提高自己的社會生存能力,我們可能就會縮短自己的成熟時間,我們也可能縮短新手的低薪水的時間,而增加自己的高薪水時間。

程序員的能力是最重要的,而能力需要得到程序員的理想支持。在程序員這個職業中,心有多高,薪水就會有多高。

四、關於工作中遇到問題如何解決的問題

我們已經知道了新手如何學習一門新的語言,那麼對於已經掌握一種或一種以上的程序員如何學習一門新的語言呢?由於程序員已經有一定語言基礎,形成了自己的一套學習方法和思維定式,所以這個問題還是和新手學語言有些差別的。

在現實生活中,我發現不少程序員因爲工作的需要而學習新的編程語言。他們心懷恐懼,不知道自己能否學好,而且學習方法非常傳統,像新手一樣:首先去買本這方面的書(或者借本書,或者網上閱讀),看完以後再動手。但是,我不知道他們是怎麼看書的,是從頭到尾地看?還是挑選着看?他們關注書中的什麼內容?第二種情況是程序員動手能力特別強,先把語言安裝起來,先編起來再說,但是他們不知道這個過程有多長,何時是終點。無論哪一類程序員,當你向他討教如何學習一門新語言時,大都是仁者見仁,智者見智,而且幾乎沒有人能從頭到尾說清楚。若不信,讀者可以自己回答這個問題。

其實,程序員學新語言是有講究的。學習與自己現在使用的不同類型的語言難度最大,相同類型的語言難度就小些。當掌握過程語言(如C語言)的人去新學面向對象的語言(如C++)時,難度就非常大,因爲這兩種語言的思想是完全不同的,用過去的定勢去思考新的語言,那種痛苦是難以言表的。例如VB程序員去學VFP、PB等同是C/S類開發程序相對就容易得多。又例如,VB程序員去學ASP就很困難,因爲一個是C/S,一個是B/S,雖然語法上相差不大,但是架構差距很大,很難馬上適應。所以,學習新的語言,第一個要分析這個語言的類型自己是否已經掌握,如果已經掌握,那麼學習的時間會很短,一般在一個星期到半個月就行了;如果沒有學過,則學習時間會很長,一般要2~3個月或者更長,而且非常痛苦。

對程序員而言,學習新的語言,第一,建議不買什麼資料,買了資料也不要花時間一字一句地去看。主要的學習手段就是動手編程序,通過在編寫範例程序的過程中學習!第二,一定要找到一個懂這種語言的人,如果能夠找到人問的話,一定要找人去問。這個時候和新手找人問是完全不同的,因爲新手會聽不懂別人所說的一些基本概念,這會引起高手的不耐煩。第三,程序員千萬不要自己去“刻苦鑽研”,因爲,程序員有一定的語言基礎,心中只要記住“流程”、“語法”、“調用”(見1.2節)就可以了。

程序員在掌握編程的流程之後,可以通過編寫以下三個程序:

1)顯示“hello world!”程序。

2)打印日曆程序。

3)“學生學籍信息”處理程序。

來掌握新語言中的語法和調用方法。當然程序員自己也可以選擇編寫自己的程序以達到學習目的。

與新手不同的是:

1)要特別注意語言的語法差別。一般來說,語言的語法差別很小,但是很令人討厭。程序員學過之後往往會混淆不同語言的語法。例如,有的語句是以分號爲結束符的,有的語言中的語句是以回車符爲結束符的。如果混淆了,你就會一會兒加分號,一會兒不加分號的。尤其當程序員對原先語言特別精通時,這種操作慣性是很大的,因此也特別煩人。

2)要特別注重程序的調試方法。因爲除語言本身之外,如何調試也可能不太相同。調試對於程序員來說太重要了,必須加以關注。

3)要特別注重程序運行環境。程序編出來了,生成exe可執行文件了,但這並不意味着程序就能執行了。例如,用C語言編寫的程序一般是不需要額外環境的,直接運行就可以了;用VFP編寫的程序,則需要系統中安裝VFP系統DLL,因此,VFP程序要做安裝盤;C#則需要更多的環境才能執行等。

4)要特別注重程序中的各種調用。由於新學的語言往往功能更強,涉及調用功能更多,程序員要關注新語言如何調用的問題,調用也是今後程序編寫的最重要的內容。

程序員按照這種方法去學習新的語言,剛開始一定會感到寸步難行,可能會遇到很多困難。但是,我相信只要程序員知道整個學習的流程,知道下一步工作的目標,他的進步會越來越快。我最不希望看到程序員在學習上表現出自發、盲目、恐懼的精神狀態。

五、新手和高手

入門之前,很多程序員心裏有一個高手情結。通過書籍、媒體、傳說渲染,他們認爲IT行業是一個高手林立的行業,好像這些高手創造了這個行業的奇蹟。這些高手可能是國外的,也可能是中國的。這個高手可能是一個具體的人,也可能抽象於某些著名軟件背後看不見的程序員。只知其名,不聞其聲,這個時候的高手是一種無所不能的神,一種虛幻,是令程序員崇拜的偶像。

到了工作崗位之後,這種高手情結更加嚴重,由於新手發現自身技術水平有限,而內心想盡快擺脫這種狀況,使得很多新手對高手感覺更加恐懼和渴望。我發現在IT行業中,中國程序員認爲外國的程序員是高手;網下的程序員認爲網上的是高手;搞硬件的人認爲搞軟件的是高手,搞軟件的認爲搞硬件是高手;搞應用程序的認爲搞系統的是高手;搞界面設計的認爲程序員是高手,程序員認爲搞界面設計的是高手;年輕的人認爲年長的是高手,年長的認爲年輕的是高手;企業內的程序員認爲企業的外部程序員是高手;客戶單位內部的程序員認爲軟件公司是高手,軟件公司的程序員認爲客戶單位內部的程序員是高手等。所有這些高手都是建立在程序員本身對某個領域無知或掌握不精的基礎上。因此,高手的多少是和程序員的水平成反比的,如果程序員水平高,那他眼中的高手就會少;如果水平低,那他的眼中的高手就會多。所以,不同程序員對待高手的標準應該是不同的。

高手情結是新手的正常心理現象,它反映了程序員對未知領域的嚮往,說明程序員還有遠大的理想,還有激情,還有奮鬥的目標。關於高手,我想新手應該關注以下幾個方面。

1.向身邊的高手學習

身邊的高手,一般是新手的第一個師傅,也就是第一個培養他的那個人。這個人對新手來說是一個決定其技術命運的人。程序員很多人可以忘記,但是第一份工作,第一次帶他的人是很難忘記的。假定這個師傅帶他的時間有一年以上,我想從這個程序員身上一定能夠看到其師傅的某些影子。比如說,這個師傅喜歡的語言,這個師傅喜歡的編程格式等,都能在新手身上找到。

作爲新手來說,除了要向他的師傅學習之外,也要把身邊的同事看做高手,要向他們學習,只要單位或團隊範圍內有比自己強的,不管這個人是早於自己進入這個單位一天,哪怕只是一個函數、一個語句、一個調用、一個算法都值得去討教和學習。這個時候學習是很實在的,是能解決具體問題的。

向身邊的高手學習,就是要充分利用身邊的優勢,可以面對面地接受別人的技術傳授。新手千萬不要顧及面子,或不好意思,或怕麻煩別人,能請教的就趕快請教,學習是硬道理。向別人請教不僅僅是去弄懂某個問題或解決某個問題,更重要的是培養與人溝通和建立良好人際關係的習慣。

新手千萬不要有那種有人會主動幫助自己的幻想,一方面是大家工作都很忙,另一方面很多程序員不習慣於主動幫助新手。

要注意身邊的高手並不是所有問題都能解答的,遇到這種情況,新手不要吃驚,很多“僞高手”就是在這個時候被揭開其僞裝的。對於他們,新手要懷有寬容的心態,應坦然面對,不要深究,這個人不能解答,那就去請教另一個人。新手要記住,你請教的不是高手,而是解決問題。因此,向其請教的人是否是高手並不重要。

新手千萬不要太迷信不可觸及的高手,因爲迷信了也沒有用,而且也不會對你的實際工作有什麼幫助,而應該把對那些高手崇拜的時間和精力用在身邊的工作上,這可能更有成效。只有當自己有了一定進步之後,確定了自己發展方向之後,我們纔有本錢和資格向外部高手學習。

2.學習高手的技術

(1)軟件製作流程

我記得很多新手並不會安裝操作系統、不會安裝開發環境、不會配置網絡、不會新建項目、不會新建程序、不會編寫程序、不會運行程序、不會調試程序、不會製作安裝盤等。即使會也只是知其然,而不知其所以然。而一般的程序員對此駕輕就熟,而且沒有太多變化,相對機械,新手死記硬背就行了。因此,新手首先要把編程的流程搞清楚。把流程搞清楚之後,我們就可以把精力放在編寫程序上了。

(2)語言的掌握

在程序的編寫方面,新手常常遇到的就是語法問題,如語句使用不當、變量問題、格式問題、備註問題、命名問題、函數調用問題、參數問題等,這些問題就不那麼簡單了,不同的程序員會給出不同的解決方案。當解決這些問題之後,只能說是新手剛剛學會編程的工具而已,接下來就要學習如何運用這些工具來開發項目了。

(3)開發項目

這個時候新手就會遇到需求問題、功能問題、處理流程問題、數據結構問題、算法問題、可靠性問題、邊界處理問題等,針對這些問題,不同的程序員更是有不同的觀點和看法,所以,新手要多聽不同的解決方案,通過比較來加深對這些問題的認識。

(4)高級技術

以上就是滿足開發的基本要求了,但是,能運行的程序並不是一個好程序,只是站在一個項目的角度上來看技術,也不是最好的技術。因此,新手要更進一步提高自己的技術水平,還要在程序的架構、接口、參數、共享、安全、效率、交互等與程序密切相關的問題上進行探討和研究,而在這方面有所建樹的程序員已經不多見了。所以,新手要多留意,自己也要多積累,在這些方面多下工夫。

3.學習高手的方法

具體的問題是永遠解決不完的,尤其是編程。遇到的問題可以說是千奇百怪,無所不有,因此,新手不能把全部的精力放在學習解決問題上。新手要在學習具體問題的解決方法前提下,更要學習高手們是如何解決這類問題的。通過方法的學習,可以使新手有很大的進步。例如,高手向新手講解一個具體程序的調試方法。新手除了掌握這個程序的調試方法之外,還要學會跳出具體程序,掌握好調試基本流程、主要調試命令和注意事項。只有這樣,當新手再次遇到調試問題的時候,就可以不用再找高手指導了,可以用這種方法自己來處理了。

高手的另一特點就是站得高,看得遠,一般新手的問題,他們都很輕鬆擺平,所以,新手也要在平時看問題時,儘量地跳到具體問題之外,站在更高的層次上看待具體問題。

4.學習高手的激情

高手除了技術水平高、工作方法好之外,還有一點是新手要學習的,那就是他們的激情、堅持、專注。高手之所以是高手,一定付出比常人更多的勞動和辛苦。而這種付出並不像工作那樣是強制的,往往是他們心甘情願的,而且樂在其中。新手可能對老程序員沒日沒夜地連續工作感到不可思議,但是一旦他們也這樣做了,他們同樣也會感受到那種付出後獲得成功的喜悅。

在遇到困難的時候,新手要向高手學習那種永不放棄的精神,不戰勝困難就絕不罷休。高手之所以是一個高手,那是在某個領域,他能比別人有更大發言權,因爲他比別人更瞭解這個領域的客觀規律,這個規律是他長期專注和研究的結果。因此,新手遇到各種問題時,要沉下心來,注意觀察問題中的細節,不放過任何疑點。只有這樣,新手對問題的理解就會比別人更加深入。

5.不迷信高手

其實,現實中並不存在完美的高手,高手總會存在這樣或那樣的缺陷。新手不要對高手一味盲從,編程好,不一定界面設計好;編程好,不一定設計好。所以,新手要有自己判斷是非的能力。例如,高手讓新手按照某種要求編寫程序,而這種要求本身就可能存在問題。當新手發現這個問題時,就應該停止編程,找出問題的原因所在,最好能找出解決方法,向高手說明情況,爭取高手的理解和支持。這樣高手就能看到新手的進步。而新手也可以在自己發現的新方法的過程中找到自我價值。

雖然我們是新手,但是,面對高手我們無須恐懼,我們會發現,隨着時間推移,自己看到的高手會越來越少。這說明自己的技術水平在不斷提高,當有一天有人開始請教你問題的時候,儘管你不處在高手的最前列,但是,你已經步入了高手行列。其實,面對高手就是面對未來的自己。

 六、新手應該具備的基本素質

新手走過的路,我們都走過了,別人走過的路,我們也看過了。回首往事,我們有過很多經驗和教訓,但是,幾乎沒有人會刻意告知我們應該怎麼成長,更沒有人專門對我們進行素質上的要求和引導。直到今天我們才知道我們的成長是自發的。它完全取決於我們的工作環境和內容,取決於我們遇到的人和開發的項目。假如我們能夠回到從前,我們一定會在年輕的時候更加註重培養自己的素質,讓我們成長得更好更快。我將與程序員有關的素質方面的要求進行了一個系統性的歸納,希望這些會對程序員有所啓發。

1.激情

激情是程序員的職業標誌,在很多情況下,激情具有遞減規律。也就是說新手的激情最高,越到最後激情越低,甚至麻木和消失。而成功的程序員幾乎都是充滿激情的,他們能將激情始終保留在身邊。我們要對年輕的程序員說,請保持你們的激情,無論你們在工作中遇到多大的不滿、委屈、挫折、失望都不要喪失你們的激情,只要你們有了激情,你們才能東山再起,才能勇往直前,才能達到事業的頂峯。

2.學習

無論是新手還是優秀程序員,無論是程序員還是其他職業人員都應該注重學習,人只有在學習中才能增加自己的知識,才能將更多知識用於自己的工作。針對程序員這個職業,由於其涉及軟件技術、項目管理、用戶的業務知識等方方面面,而且這些方面的知識還在不停地變化和更新,所以只有學習纔跟得上職業發展的要求。剛開始的時候,我們發現若不學習,那就什麼都不會,我們只好學習。後來,我們發現即使學習了,還是有很多東西不會。當我們把學習看做一種常態的時候,我們就會不斷獲得新知識,這樣纔會適應職業要求。

3.基礎

“萬丈高樓平地起”,這充分說明了基礎的重要性。程序員在開始的時候,並沒有感覺到基礎的重要性,但是隨着程序員不斷成長,這種基礎的制約現象就會很明顯。很多程序員總是感覺自己的進步不大,進步不快,不知道自己的問題出在什麼地方。其實,很多最根本的問題是大學生的基礎問題。因爲很多大學生在學校的時候,並不知道所學的基礎知識用在什麼地方,有什麼看得見的重要性。很少有人會對基礎知識有真正的理解。到了工作單位之後,一些程序員在編程的時候,複製網上的程序,還是知其然不知其所以然,基礎越來越差。不單是知識基礎,其他基礎也很重要,例如,一些新手開始不願意學習盲打,不肯在開始學打字的時候練習盲打,基礎沒打好,結果若干年後,只會一個手指頭按鍵盤,被人們笑談爲“一指殘”。程序員要有基礎意識,要把現有的取得的成績當做基礎,只有把現有的基礎打牢,這樣才能向上更好地發展。

4.好勝

沒有一個程序員沒有好勝之心的。但是,好勝有強有弱,有的程序員大有捨我其誰的氣概,有的程序員則不露聲色暗下工夫比高低,有的則看不出來是否好勝,一副好壞與己無關的樣子。有的因能力而好勝,有的因面子而好勝。作爲程序員好勝是必需的,因爲程序員是一種智慧勞動,要比就是比智慧。只有通過智慧的競爭,智慧才能精彩,程序才能更加漂亮,軟件才能向前發展。好勝意味着要比同們做得更好,好勝意味着遇到困難必須克服,好勝意味着自己要比自己原先做得更好。我們要的是好勝的結果,我們不需要的是好勝的表現。其實,不要刻意表現你的能力,你的成果足以表現你的能力了。

5.動腦

軟件本質上是一種智力的產物,這個智力並非天生就有的,它和程序員的技術能力、理論基礎、思維方式、知識範圍、周圍影響等因素密切相關。只有通過對這些因素進行收集、存儲、加工、處理,進行各種各樣排列組合,形成各種解決方案,然後在這些方案中進行擇優判斷,才能得出最後的解決問題的辦法。程序員除了動腦還要通過打鍵盤編寫程序,所以程序員還有一個動手的工作。很多程序員習慣於邊想邊編,久而久之就養成了動手習慣。從成長的眼光來看,程序員應更加註重開動腦筋,而且要把其和動手編程分離開。這樣養成動腦的習慣之後,對編寫程序有很大的幫助。一般而言,動腦的時間越長,動手的時間越短,程序員技術水平就可能越高。

6.外向

程序員性格對成長有很大的影響,無論是原來外向還是內向性格的程序員,只要從事這個職業,只要和計算機打交道,其性格都會有點向內向方面轉變的趨勢,我們看到不少程序員不善於和另人交談,怕見人,甚至從內心裏不願意和別人交談。這樣的自我封閉其實對自己並無益處,我認爲程序員性格要外向一些,要樂於和別人交流,要主動和另人交流,和別人交流並不一定要限於技術,用戶的需求、公司成長情況甚至對方個人生活等方方面面都可以進行交流。這些外向的性格可以讓程序員見識更多的人,見識更多的領導,見識更多的高手,見識過動去不敢見識的人。這樣可以積累更多的社會關係。

7.技能

程序員的技術能力是程序員生存下來的基礎,而技能從某些方面來說是首要的。可以說程序員就是技術的代名詞。有了好的技能你就能更好地開展自己的工作,有了好的技能你就有了和別人交流的內容,有了好的技能就可能讓自己獲得更高一層的技能。因此,程序員要重視自己的技能學習和提高,要在技術上體現自己的能力,要通過技術能力去影響或幫助自己的同伴。只有這樣,程序員的最基本的價值才能真正體現出來。很多程序員到了一定階段放鬆了對技術的追求,技術平平,只能滿足現有工作,這就愧對程序員這個稱號了。

8.團隊

程序員可以一個人編程序,但是,一個人只能編寫一些程序或小規模的程序。有一些程序員一個人完成了整個系統開發,其技術水平固然值得稱賀,但是,如果他認爲軟件可以一個人擺平,這就會影響到其向更高水平發展。隨着軟件業發展,軟件的規模也在變大,軟件製作的專業化程度變得越來越高,一個人即使有這個能力開發一個完整的系統,最好也不要一個人去完成,只有通過團隊的分工協作,軟件製作才能走向正道。如果程序員一開始就能注重團隊意識,一開始就認爲自己僅僅是團隊的一分子,一開始就注重與其他團員的溝通和協作,這樣程序員一定能融入團隊中,而團隊的巨大作用是每個程序員個人作用所不可比擬的。程序員不要只是享受自己獨自編程的快樂,而是要享受整個團隊編程的快樂。

9.興趣

程序員的工作內容看起來似乎只是一行行代碼。代碼的編寫來自於程序員頭腦的指令,而程序員頭腦中的指令並不是來源於程序設計語言,而是來源於各種需求、各種問題的分析方法和處理方法。因此,程序員要編好程序,不僅要對程序語言感興趣,而且要對所有和編程序相關的事物感興趣,甚至對看上去與編程無關的東西也要感興趣。我們成長後才知道各種事物都是相通的,有些東西會潛移默化地影響到你的分析方法和處理方式中。所以,程序員不要只關心編程,這樣只會成爲“書呆子”。我們日常生活中看電視、聽新聞、上網聊天、社交活動等都應放在興趣之中。只有廣泛的興趣才能體會到你最愛的興趣。

10.謙和

我喜歡程序員有一種謙和的精神,尤其是那些有本領驕傲的程序員的謙和。我們常常看到一些得意於自己的程序、自己的項目、自己的收入、自己的職位而忘形的程序員,他們無視別人的意見和建議,有的甚至自傲,看不起其他程序員。但是,要知道藝無止境,假定軟件領域擁有頂峯,而謙和正是通向這個頂峯的一個階梯。更何況軟件領域沒有頂峯,更需要我們的謙和來表明自己不拘泥現有的成就,我們還有更高更遠的理想。

11.求新

我們常說軟件技術發展太快,跟不上就會被淘汰。回顧幾十年來的軟件技術發展就可以明白這一點。求新本質就是注重時代的變化、跟上時代的變化。因此,對程序員來說,要有求新的意識,不要排斥新生事物。要通過網絡和各種媒體注意各種新技術的產生,對於與自己工作相關或感興趣的技術要花點時間進行跟蹤,要了解這些新東西的新方面,要學會新舊對比,對自己必須掌握的新技術要毫不猶豫地花時間拿下。求新會讓程序員時刻感到壓力,但是求新又讓程序員能看到自己未來成長的方向。

12.主動

主動絕對是程序員的一個良好素質。我和許多年輕的程序員打過交道,有主動型的與被動型之分,大凡學習上主動,工作上主動,甚至是勞動上主動的人,大都會得到同事的喜愛,都會得到更多的回報。而那些雖然聽話,但是“不說不動”的人,因爲缺乏主動意識,只能被動聽從別人的安排。別人給什麼,自己就吃什麼,就像一隻填鴨,當哪天沒有人給你填食的時候,結果就可想而知了。“會哭的孩子有奶吃。”這是很有道理的一句話。

13.吃苦

現在的程序員和我們那個年代的程序員有很大的不同,他們很多都是獨生子女,家庭嬌慣比我們那個年代多了很多,而且絕對的自我。因此,他們眼高手低,怕吃苦,不能吃苦。對於程序員來說,連續工作是一種很常態的事。有的吃不了程序員的苦,因苦而選擇離開。我們不能說吃苦是一件好事,但是,一個人能吃苦說明這個人不怕困難,有堅韌不拔的意志。這對程序員成長是很有幫助的。想想當年,自己要是怕吃苦,可能也不會有今天的成果。當一個人沒有苦吃的時候,說明這個人真的沒有發展機會了。而且吃苦的人更能感到甜的味道。

一個人的素質是其成長的基礎,良好的素質一定是後天培養的,是後天自我約束和完善形成的,這種約束和完善的內在要求使得他在做任何事的時候趨於合情、合理,容易獲得進步和成功。同時,一個人良好的素質可以給外界一個良好的形象,而外界因此會給這個人更多的關注和鼓勵,外界的影響反過來又促使這個人進一步提高素質。相同的時間和相同的環境,不同的人因其素質的不同會有很大的不同。因此,如果我們在入門階段能夠重視自己的素質的培養,知道自己在什麼方面需要改進和提高,程序員一定會少走彎路,成長更加順利,而其中的良好素質將影響程序員的一生。

很多程序員對以上方面也有所瞭解,也知道應該怎麼做。但是,涉及自身時,說歸說,做歸做。如果是這樣的話,缺乏自己約束的程序員也只能“自發”地成長了。

發佈了4 篇原創文章 · 獲贊 4 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章