1. 程式人生 > >程式設計師成長規劃

程式設計師成長規劃

前言與目錄

·  前言

·  目錄

引言

·  引言

           引言

我的程式設計師成長之路

程式設計師的成長經歷往往很相似,大部分的人走過了最前面相同的一段路,而有的人則走得更遠。總結自己這些年來的歷程,這也許能讓年輕的程式設計師少走一些彎路,成長得更快;或許更好一些,能讓大家從中得到一些啟發,早日進入優秀程式設計師的階段,實現夢想,釋放激情。

第一階段,最初是在學校裡學習計算機基礎知識,學習經典的程式設計語言,編寫測試用的小程式。這個過程可以說是對計算機和程式設計的入門階段。這個階段主要是培養了自己對計算機軟體的興趣,打下了良好的計算機基礎知識。

第二階段,而後參加工作,從事計算機軟體開發工作。按照工作要求,一邊學習,一邊程式設計,終於可以讓自己的程式投入運行了。在這個階段我突然感覺到了自己的價值,感覺到了軟體的神奇,並且自己編寫的軟體成為了實用產品。這個階段實現了學習到生產的過渡。

第三階段,隨著工作的增加,開始編寫各種程式,開發各種系統,這時候忙於程式設計知識的積累和應用。應該說在這個階段自我感覺很充實,好像有做不完的事,程式設計水平還處在語言級階段。

第四階段,隨著積累了一定程式設計技巧之後,我開始想這樣的問題:我是不是最好的程式設計師?我能否編寫出最好的程式?這個過程是一個反思的階段。我對自己的要求是:不但要會程式設計序,而且要編好程式,從關注程式數量開始轉向關注程式質量。

第五階段,開始在提高自己的軟體開發水平上做文章。經過各種系統開發,尤其是大型系統的開發,發現了軟體中有許多功能是重複的。因此,有一段時間把精力花在編制各種庫函式上,通過不同系統呼叫相同的函式,以便減少重複開發,實現功能共享。當時比較得意的是庫函式不是我一個人在呼叫,而是整個專案小組都在呼叫,甚至不同的系統也能呼叫,從而體會到編寫庫函式特別有價值。這個階段的標誌是庫函式,程式設計師水平上升到庫函式那一級。

第六階段,到了庫函式那一級後,很快就發現,單單實現程式函式級的呼叫是遠遠不夠的。當你做了很多專案,包括大專案和小專案,尤其是做過跨行業的專案之後,你就會把庫函式的共享思想用於專案開發。你就會想這樣一個問題:為什麼不同專案不能有相同的架構?如果有相同的架構,那麼開發就有了相對的標準,我們就有可能通過配置的方法實現相同架構的系統。於是我提出了IASG

(互動式軟體自動生成器)思想,並在C語言和其他一些語言中實現了IASG例項。記得最快的一次是編寫一個系統(公安部門的自行車資訊管理系統,主要用於丟失自行車資訊登記)只用了3個小時(從需求到安裝盤)。這個事情對我影響很大。我在這個階段上升了一個很大的臺階,從程式上升到軟體。核心思想就從庫函式共享上升到軟體共享。具體過程是建立一個通用的系統架構,架構中有許多共同的功能,例如,引數設定、使用者許可權管理、庫表管理等。另外還提供資訊建立查詢開發模板,通過配置和特殊功能的編制就能很快完成了一個系統的開發。現在想起來IASG距離我已經有20年了。

第七階段,到了IASG階段後,我發現無論技術如何提高,都無法改變開發落後於需求的現實。通俗地說就是:程式設計師水平再高,僅僅是拉車水平高,但是,應該在什麼路上拉車程式設計師並不知道。如果這條路是一條光明的路,則程式設計師越拉越有勁,有前途;如果這是一條死衚衕,則程式設計師白費工夫;如果這是一條漫長的路,前途不明,則程式設計師可能要累倒在路上。現實中程式設計師水平低、收入低;系統需求不明確,系統開發週期一拖再拖;系統重複開發多,資訊甚至不能在一個企業內實現共享,更不用說在企業之間、行業之間實現共享了;各種企業級的軟體ERP、CRM、BI層出不窮,也沒有哪個能滿足中國的市場;各種新技術、新概念不斷出現,卻沒有哪種技術或概念能真正發揮其內在價值,最終還是處於被學習、被運用的階段。

這個過程是程式設計師脫離技術本身,開始思索、開始求源的階段。在這個階段的程式設計師的思想有了質的飛躍。以前光拉車不看路,現在要擡頭看路了。

第八階段,有了擡頭看路的想法,於是我踏上尋路征程。我首先弄明白了我們腳下的路是什麼樣的,為什麼這條路那麼不平坦、不寬廣。從軟體生命週期來看,軟體主要由使用者需求發起,使用者需求是軟體生存的根本理由。由於企業、使用者的不同而導致不同的需求——大量的無序的需求,這種需求驅動方式必然造成了我前面介紹的各種現象。這個階段是尋找根源的階段。只要我們找到了根源,就可以有機會解決問題。這個過程相對來說比較困難,這不僅需要程式設計技術,還需要很多方面的知識。若要了解這個根源,就迫使你學習和積累更多程式以外的知識。

第九階段,當我找到軟體是需求驅動方式之後,就開始考慮什麼是使用者需求?使用者為什麼要提出這些需求?我們可以更深入地分析使用者需求產生的根源,我們能否讓無序需求變成有序需求呢?當然針對這些問題我們都進行了深入分析,其過程也很難在這裡展開說明。我只能說,最後結論是使用者的需求來源於企業的經營。很多人思考問題還是就需求而論,並沒有站在企業經營角度去考慮問題。千萬不要小看這個變化,這個變化最終會產生一個理論。於是我們儘可能地站在企業經營角度看待企業經營方式、企業管理、企業資訊化等。但是,我們最終要解決企業經營這個概念問題,如果我們都不能明確企業經營這個概念,或者我們不能科學地定義企業經營這個概念,那一切基於企業經營的各種具體現象就如同無本之源一樣無序氾濫。就像ERP、CRM等所謂企業資訊化產品一樣,由於沒有一個企業經營定義的支撐,只能就企業經營的某個方面提出解決方案。這些產品不缺乏需求的支援,缺乏的是最基本的企業經營定義的支援。而這個概念就是EOM。

EOM是從定義企業經營角度入手,把我們今後要開展的各種研究和開發活動都放在一個理論可支援的基礎上。只有定義了企業經營之後,我們才有可能分析我們需要什麼軟體,我們的軟體採用什麼技術才能實現企業經營的目標。而程式設計師則通過EOM瞭解到企業經營需要什麼樣的軟體,這個軟體有多大的價值,這個軟體採用什麼技術才能實現,自己要提高哪方面的技術水平才能獲得更大的價值。

這個過程就是EOM階段,通過EOM瞭解軟體的根源和有價值的軟體所在,進而選擇自己未來的方向。

第十階段,當我建立了EOM之後,便開始了EOM實現階段。這個實現階段分為兩部分,通過這兩部分的結合,我們就可以逐步看到EOM軟體產品的例項,看到EOM的真正價值。

第一部分是EOM的業務實現。當我們明確了EOM之後,就可以根據EOM來重新規劃企業資訊化的整體架構,可以細分這個架構中的各種平臺產品、通用產品、專業產品,可以細分出這個架構實現的各種技術架構和實現手段,可以細分出這個架構中的各種標準功能和標準資訊。通過這樣的分析,我們的程式設計師就可以根據自己的特長和愛好以及價值的判斷來選擇其中的軟體產品和技術。在明確目標和方向的情形下,通過自己的努力,不斷提高自己的各種技能水平,讓自己的價值和企業經營價值有機地結合在一起,從而實現自己的理想。

第二部分是EOM的技術實現。有了EOM並根據EOM理論構建企業資訊化的架構後,我們就必須從技術上實現這個架構,否則這個架構將永遠停留在理論階段,不具有可行性。我們可以採用現有的各種技術來實現這個架構,但是,現有的技術都是基於原有的業務需求而建立和發展的,它適用於原來的應用物件。目前的EOM是一個全新的企業經營理念,因此,我們必須建立一種新的軟體架構來適應和最好地實現這個理念。幸運的是,我們找到了稱作NSS(New Software Structure)軟體新架構的技術,該技術體現了適應企業經營發展方向,將軟體合理分層,用最新的軟體技術按照架構的方式規範軟體開發的模式,可以實現最大範圍的功能共享,實現軟體的可擴充套件性。

這個階段可以讓程式設計師在軟體產品業務設計或軟體產品技術實現上等多個方面進行深入鑽研,並且成為領域專家。這和我們平時涉及的簡單的需求分析和簡單的技術實現有著本質區別。

從我的程式設計師經歷可以看出,程式設計師的成長是無止境的,只要有的放矢地努力,就會一步步登高向上。我認為程式設計師成長經歷主要有三大階段,即通用技術階段、市場階段、專業技術階段。

1)通用技術階段是程式設計師專注程式設計水平提高的階段,也就是說“只拉車不看路”階段。這個程式設計師能做的事情那個程式設計師也能做,程式設計師的替代性很強,程式設計師市場價值相對較低,程式設計師只關注程式設計技術本身。

2)市場階段是程式設計師跳離技術層面開始考慮為什麼要開發這個軟體,這個軟體有什麼價值的階段,通過求軟體之源來重新認知自己的方向。

3)專用技術階段是程式設計師認知了這個軟體和技術有很大的市場價值,全身心投入到這個領域中去,並在這個領域成為專家的階段。程式設計師不但要懂技術,更要懂得客戶業務,不同的程式設計師的技術和業務變得沒有可比性,這種稀缺性造就了程式設計師極大的價值。

這三個階段其實就是三個過程,每一個過程都是一次飛躍。程式設計師知道自己可以飛多高,依靠的是程式設計師的學習和眼界;而程式設計師能飛到哪裡,那就要靠程式設計師自身的努力。一個程式設計師可以沒有能力,但是不可以沒有眼界。

【責任編輯:雲霞 TEL:(010)68476606】

第一部分 入門篇

1.1 程式設計師的夢想——中國的比爾·蓋茨

作為一個IT行業職員,我經歷過一個普通程式設計師成長的過程,同時也接觸過許多不同層次的程式設計師。他們或在我身邊匆匆而過,或與我共同工作,或在我可以關注的範圍內成長著。他們的喜怒和哀樂、挫折和成功、幻想和現實、希望和失望,無不與我心共振。我知道這個行業從業人員的夢想,也知道這個行業的殘酷。無數人懷著希望而來,卻抱著無奈離去。我早就有和他們共語的願望,希望通過這個主題和他們交流程式設計師所關注的各種問題,希望我的經驗有助於他們的成長,同時我也想談談EOM對程式設計師的真正價值的影響,以及如何實現“成?榷じ譴摹閉飧齔絛蛟鋇淖罡咼蝸搿?

什麼是程式設計師?什麼人能稱得上是程式設計師?會程式設計序的人都是程式設計師嘛!這個問題看似簡單,但仔細想一下,也很難回答。其實在中國,關於程式設計師的稱呼有很多種近似的叫法,例如“開發人員”、“程式設計人員”、“計算機人員”等。只是現在分工越來越細、專業化程度不斷提高的情況下,程式設計師這個詞才逐漸地流行起來。

那麼什麼人才算是程式設計師呢?現在看來凡是從計算機專業或相近專業畢業的、以編寫程式為職業的人都可算得上是程式設計師。但是在20世紀80年代到90年代,由於計算機還是新生事物,整個社會對其有種神祕的、高貴的、不可觸及的印象。加之當時計算機人才少之又少,除了計算機專業從事開發工作之外,很多非計算機專業的學生,甚至初、高中生也加入到計算機開發隊伍之中。他們充滿激情,敢於學習,勇於探索,其中有許多人很快就成為開發隊伍中的主力軍,成為程式設計人員中的佼佼者。有的時候,專業的程式設計師還不如業餘的程式設計師,程式設計語言比較單調,技術書籍更是少之又少。記得當時只能把單位印製的8086、Z80等彙編程式設計資料當做教材,用debug把作業系統中的程式碼列印成厚厚書籍來閱讀。由於當時我的單位是生產(組裝)計算機的,因此,使用計算機還是比較方便的,但是,不像現在,絕不可能在家裡使用計算機的。

由於那時程式設計師可以觸及計算機,可以看明白別人不懂的程式碼,可以讓計算機執行自己的指令,這讓許多外行甚至內行人很羨慕。

程式設計師一般只掌握單一的程式設計語言,比如編寫彙編程式的程式人員,編寫C語言程式的程式人員,編寫Unix、XENIX、AIX、SCO、HPunix等Unix類的shell程式的程式人員,編寫與資料庫打交道的proc c程式人員,編寫C++程式的程式人員,編寫面向物件的VFP、VB、Delphi、PB的程式人員,編寫Web程式的HTML、CGI、ASP、PHP的程式人員,編寫C#、Java的程式人員。這些程式語言有些保留了下來,有的則被時代無情地淘汰了。同樣是程式設計師,如果不能適應語言的發展也避免不了被淘汰的命運。

我自己認為的程式設計師與其他職業人員之間的區別:

1)因為比爾·蓋茨是程式設計序的,所以似乎每個程式設計人員都有一個“比爾·蓋茨”夢想:比爾·蓋茨能做的,我也許能做到,即使做不到,做到一半也是不錯的。這個潛在的意識是程式設計師最大的財富,許多程式人成了為理想、有抱負的人。我想很多人選擇IT大都是與此有關吧。

2)工作成果完全由自己把握,隨時編隨時執行隨時出結果。這種自我感覺是很多職業都不具備的。因此,程式設計師有很強的自信心。而且這種自信心往往可以使得程式設計師產生自己開公司的念頭。

3)有很高的預期價值。軟體通過使用創造了價值,程式設計師通過製作產生了軟體。因此,程式設計師往往把軟體的價值看做自己的價值,例如一個軟體賣了5萬元,程式設計師就會把自己的勞動價值估算在5萬元以上;如果這個軟體有100個潛在的市場,那麼程式設計師就會把這個價值升值到5×100=500萬以上。所以在程式設計師這個群體中,很多人都相信自己未來能夠獲得更多的收入。

當然,程式設計師也有其他一些特點,例如:有的程式設計師喜歡晚上幹活,白天睡覺;有的喜歡鑽研,連續加班;有的頭腦靈活,動手能力強;有的喜歡追逐最新技術,變成別人公司的代言人等。

我注意到了有這樣一點,那就是現在的程式設計師已經失去了神祕感,以往給人以仰目而視的形象正逐步走下神壇。

這是程式設計師職業發展的必由之路,抑或是再正常不過的社會現象?

【責任編輯:雲霞 TEL:(010)68476606】

1.2 談談程式設計師的基礎知識

對於程式設計師需要具備哪些最基礎的知識和技能這個問題,不少剛從大專院校畢業出來的新入職員工,甚至是從事過一段時間程式設計工作的程式設計師,都是比較模糊的。只有認真掌握一些基礎的知識和技能,才能走上程式設計師這條大道。

說句實在話,我在從事程式設計工作很長一段時間內都沒有關注這個問題,基本上是邊編邊學,邊學邊編,從學習中積累,從程式設計中積累。除了和同事進行工作上交流之外,學習材料很少,基本上是一個人在戰鬥,也不知道自己是不是成為了合格的程式設計師。也許是受那個年代所限,當時的程式設計師人數很少,因此同行間沒有什麼競爭,有了位置就不怕失去。要是放在現在,真的很後怕。

回到正題,我認為程式設計師在最初階段要從流程、語法、呼叫三個層次要求自己。

1.流程

這是對程式設計師最基本的要求,這個層次就是要求程式設計師能夠把一個最簡單的程式編輯、編譯、執行成功,強調的是掌握程式設計的環境和流程。

在這個層次上又分三個方面的要求:

(1)計算機基礎知識

我見過許多程式設計師新手,他們都自稱學過計算機基礎知識。但實際情況是,學而不致用,學的概念太多,自己卻理不出頭緒,和實際工作對不上號。有的甚至認為自己忘了,什麼都不知道。但是我要提醒新手的是,儘管基礎知識十分豐富,但是有關程式設計的一些基礎知識和概念是必須掌握的。

1)作業系統

什麼是作業系統?你所編寫的程式在什麼作業系統上執行?目前主要有Windows類、Unix類、Linux類作業系統。每種作業系統對程式設計的影響是不同的。

2)計算機、記憶體、硬碟

這些概念對程式設計來說也是最基礎的,例如計算機分為PC機、小型機、大型機。在PC機上程式設計和小型機上程式設計是有差別的。程式設計語言安裝時也要注意記憶體大小和硬碟大小。

3)目錄、檔案

這些是最基礎的概念了!一定要掌握和理解。因為你編寫的程式就是一種檔案,而且要放置在指定目錄下。

4)程式設計語言、程式、編輯、源程式、編譯、可執行程式、執行

這些概念也是最基礎的。不同的程式設計語言對程式設計具有很大的影響。

目前主流的程式設計語言有Java、C#、C語言等。

(2)程式設計環境

作為程式設計師一定要知道自己的程式設計環境是什麼:

1)瞭解所要使用的計算機

2)作業系統安裝

3)程式設計語言安裝要求環境

4)程式設計語言安裝盤

5)安裝程式設計語言

PC機和小型機有很大的不同,使用PC機的程式設計師一定對5個部分要全部掌握,使用小型機的程式設計師只需要瞭解程式設計語言是否安裝好了。

(3)程式設計流程

PC機開發程式的一般流程:

執行開發環境→建立專案→建立源程式→編寫源程式→編譯專案(源程式)執行可執行程式→檢視執行結果。

小型機開發程式的一般流程(以C語言為例)

編寫源程式→編譯→執行→檢視結果。

程式設計師要驗證自己是否掌握了這個層次,建議編寫一個最簡單的顯示“helloworld!”的程式。如果程式設計師能白手起家,能執行自己編寫的程式並能顯示“hello world!”則可以通過了。

2.語法

這是對程式設計師的基礎要求。這個層次建立在上一層的基礎上,應該掌握程式中最基本的語法、運算、基本功能。

主要掌握:進入程式引數、退出程式命令、賦值語句、條件語句、迴圈語句、引用、字串操作、算術運算、檔案操作等。

對於人機互動程式主要掌握:視窗、標示控制元件、文字框控制元件、命令按鈕控制元件、列表控制元件、下拉框控制元件、表格控制元件等。掌握對控制元件屬性賦值、對屬性的讀取、增加事件、對事件的呼叫等。

3.呼叫

這是對程式設計師的一般要求。這個層次建立在上一層次的基礎上,應該掌握程式中對資料庫、庫函式、動態連結庫等外部環境的呼叫。相應的概念也要掌握。

另外,程式設計師還要具備查詢語法和尋求幫助的技能。

這裡還談不上程式設計師水平問題,需要強調的是,以上是程式設計師必須掌握的,是最低的要求。由於開發環境不斷在變化,程式設計語言也不斷在升級,作為程式設計師就應該紮實地掌握這些方法,做到心中有數,以不變應萬變。

【責任編輯:雲霞 TEL:(010)68476606】

1.3 語言選擇與就業方向

程式設計語言與就業之間的關係現在變得非常強烈和敏感,這是我始料未及的。記得當年自己在學校裡學習程式設計語言,自己從沒有選擇程式語言的概念。基本上是學校規定學什麼,自己就學什麼,從未考慮到這些學習將對今後分配工作產生的影響。這可能是由於在當時的社會環境下,不愁就業的狀況所造成的。沒有了就業的壓力,學生可以安心學習一些基礎性的課程,可以學習很多經典的程式設計語言,看到語言發展的軌跡,從而對一種程式語言打下良好基礎。當然,很多學生並沒有把程式語言學好的主觀意識,只是想做學習的“奴隸”,而不是為自己真正掌握生存技能服務的。若跟這樣的學生交流好好學習,那就是浪費時間。

而今,社會已經發生翻天覆地的變化。程式設計師從高高在上的“稀缺人才”地位開始下降。這期間的變化令人感慨和無奈。不得不承認,我們已經進入了市場經濟社會,而且是一個充滿競爭的市場經濟社會。面對市場和競爭,我們必須拿出滿足市場需求的商品:我們的程式設計能力。程式設計能力有兩個方面的含義,一是程式語言,二是程式設計本身能力。所以,如何選擇我們的程式語言是首要問題。而程式設計技術的提高則需要時間積累和專案積累。

當我們能夠樹立市場觀念和就業意識時,我們對程式設計語言的選擇就變得相對簡單了。就這個問題我想提出自己的一些建議供各位參考。

1.就業方向

程式設計師就業範圍應該很廣。有的是軟體工廠式的程式設計工作,有的是專案開發的程式設計工作,有的是使用者單位維護類的開發工作,有的是後臺程式設計工作,有的是前端程式設計工作,有的是編制網站工作,有的是軟體培訓工作,有的是與硬體相關的彙編級程式設計工作,有的是資料庫類程式設計和管理工作。隨著軟體專業化分工的加快,分工會越來越細,就業種類也會越來越多。面對各種就業種類如何選擇,這是一個仁者見仁智者見智的問題。只有先定下就業方向,然後再根據就業方向所要求的必須掌握的語言來確定自己要學的語言。

例如,你想去做後臺的程式設計工作,你就可能會選擇C語言、資料庫等。

如果你想去編寫網站,你就會在C#、Java、PHP中進行選擇。

如果你想去做底層與硬體有關的程式設計,你就可以學習彙編和專業的微控制器語言。

2.市場狀況

當你自己不知如何選擇的時候,可以從“唯利是圖”角度出發,看看在程式設計師這個行業當中,做什麼職業收入最高。你可以通過百度搜索的方式反覆比較,獲知收入相對較高的職業,然後根據這個職業要求選擇所需的程式語言。

你當然可以從“技術至上”的角度出發,你可以通過百度搜索的方式瞭解當前哪種語言最流行,因為流行的程式往往體現出這種語言未來可持續發展,當你選擇了流行的語言的時候,這就意味著軟體市場對這種語言的程式設計師需求是比較大的,因此,就業的概率相對較高。但是,正是需求增加,在供過於求的情況下,競爭就會加劇,如果你沒有表現出更多的能力的話,就很難在競爭中勝出。

當然,你也可以從“反向思維”選擇相對冷門的職業,由於是相對冷門的職業,競爭就會有所減弱,就業的概率同樣會大大增加。

3.社會資源

就已經參加工作的人來說,就業還取決於個人的社會資源,假如你有足夠的社會資源,你就可能想到哪裡就到哪裡。這種個別的現象不在我討論的範圍之內。其他的個人的社會資源如學校、家庭、朋友、朋友的朋友,其他求職中介和求職渠道,都是你求職的重要因素。例如,你的朋友正好在一家軟體公司,而這家軟體公司正好要招聘你這種程式設計師,求職往往會很快成功。因此,將目光放在你的社會資源上,看看他們能夠觸及的單位,然後去了解這些單位對程式設計語言的要求,再進行語言的準備,我感到這樣做還是非常有必要的。

4.個人基礎

當然,你通過各方面考量最終選擇了就業方向,也就確定了你的程式設計語言。你可能在學校學過這個語言,也可能沒有學過。對於你來說都要有一個重新學習的階段。這個學習階段和大學裡無憂無慮的學習有著本質區別,這可是關係到你能否被用人單位錄用,關係到你今後的生存,關係到你今後的職業生涯規劃。因此,你不但要把用人單位所需要的程式設計語言學好,而且要把相關的其他語言學好,以及相關的計算機基礎知識學好。這樣才能把你的個人程式設計基礎夯實。可以說基礎是必需的。

另外要有的放矢,瞭解用人單位所採用的語言、開發專案等情況,只有這樣,自己在應聘的時候才會更有把握。

我們可能因為語言而獲得就業,我們也可能因為語言失去工作。關鍵是我們每時每刻要注重語言的發展趨勢,注重用人單位的語言發展趨勢。語言的學習可以伴隨程式設計師終身。從我的經驗來看,要想進入程式設計師這個行業,主流的程式語言都是應該瞭解和掌握的,至於掌握的深度可以根據就業的要求深淺不一。因為語言的掌握是無止境的,人們不可能為掌握而花費太多的時間和精力。就目前而言,學習.NET、Java,學習任何可用於網路應用軟體開發的程式語言都是非常有前途的,因為基於網路、網際網路、手機(包括移動裝置)的軟體將是未來軟體的主流。

現在我們因為語言而生存,未來能否讓語言因為我們而驕傲?

【責任編輯:雲霞 TEL:(010)68476606】

1.4 新手如何學習一門新的語言

學習程式設計語言是程式設計師的看家功夫。許多程式設計師邊編邊學,沒有止境,可以說是“活到老學到老”。在語言面前,程式設計師永遠是學生。然而,程式設計語言是一項不斷髮展的技術,從機器語言到組合語言,從低階語言到高階語言,從面向過程語言到面嚮物件語言,從C/S語言到B/S語言,從非跨平臺語言到跨平臺跨系統語言,從純語言到開發平臺工具,真的是目不暇接。這些革命性的技術浪潮推動著程式設計師不斷學習新的語言以適應其發展,否則程式設計師將被淘汰。

學習新的語言有兩類人員,一類是從來沒有程式設計語言基礎的、沒有編過程式的人;另一類是已經掌握了一門或一門以上語言,正想要學習更高版本語言或新的語言的人。對於第一類的人我且稱為新手。

新手要學習一門程式語言,若是將新手比作一張白紙,可以畫出最新最美的圖畫,同樣也可以畫得亂七八糟沒有美感。新手的第一門語言對其今後的影響是巨大的,如果學得好,則自信心大增,對今後的發展非常有利;如果學得不好,學不下去,則對其職業生涯打擊很大。新手面對眾多的語言往往無從下手,第一,不知道學哪種語言為好;第二,不知道如何學習;第三,不知道能不能學好!

我認為,就目前而言,先學習Java、C#,今後再想學習應用於後臺的C語言都是不錯的選擇。

針對第三點,我認為只要想學,有職業壓力,沒有學不好的,只有學不到最好的。

關於第二點,我的建議應特別注重兩個要點:一是基礎,二是動手能力。學語言首先要看書,然後要動手。那些認為光看書就能學會語言的想法是很幼稚的,而那種光注重程式設計而不注重讀書的人,將來一定是動手能力強而程式設計水平低的。

1)新手不要急於求成,要把時間放長一點,先把基礎知識學好,基礎越紮實,今後程式設計水平就越有可能提高。看書至少要花三個月時間。

主要選擇計算機原理、程式設計原理以及所學語言相關(最好是入門類,不要刻意地選擇哪本,對初學者來說,任意一本都是好的)的三類書籍。

2)由於看書過程中肯定會遇到很多不懂的概念,而且各種概念之間的關係也不容易理解和掌握,所以許多新手望而生畏,堅持不下去。這個時候一定要學會堅持,堅持讀下去,反覆讀下去,對實在不懂的概念要注意收集,將其牢記在心。這個時候最好不要找人去解答,而是把所有的書籍反覆看完3遍之後,再去找人解答,這樣就可以加深對這個問題的理解,而且解答者也願意回答。如果一有問題就去問,一是解答者容易失去耐心,二是自己對問題沒有印象,容易產生依賴性。

3)有了一定基礎知識之後,就要自己想辦法安裝程式設計環境。安裝程式設計環境的要點可參照1.2節中有關“流程”的闡述,這裡就不再贅述。

4)開發環境安裝完成後,新手就可以編寫顯示“hello world!”程式了。

編寫這個程式目的主要是學習主程式的作用、主程式的引數入口、簡單的賦值語句、顯示功能呼叫和退出程式語句。通過完成這個程式,新手就可以對編寫程式流程有一個切身體會。

5)接下來可以學習算術運算程式設計。試一試算術表示式編寫,可以簡單地編寫一個計算器示例;也可以編寫一個顯示日曆的複雜程式(若輸入年份,則顯示這個年份的日曆)。在這個階段主要是學習函式以及函式的呼叫、算術運算、條件語句、迴圈語句、顯示功能等,這些都是程式設計的基礎。

6)完成算術運算的學習後,可以編寫更復雜的完整的程式了。例如可以編寫一個學生資訊管理程式。其功能為:接受一個學生資訊(例如,學號、學生姓名、班級、年齡)並把它儲存在計算機中,同時提供增加、刪除、修改、查詢功能。資訊儲存形式可以是文字檔案,也可以是資料庫。

這個階段主要是學習變數、資料存放、檔案操作、資料庫操作、程式完整性等,這也是程式設計的基礎。

7)完成上述學習之後,程式設計師要學會回頭梳理自己編寫的程式,梳理自己已經學過的概念。可以對自己以前的程式進行修改,培養不斷提高自己程式設計水平的意識。

8)在這些過程中若遇到問題,先看幫助。幫助不行,最好是找懂行的人詢問,不要自己鑽牛角尖,浪費時間。上網查詢也可以,但是不如詢問別人直接。看書是不能解決問題的,切記!

9)在這些都完成之後,程式設計師可以有目的地針對自己將要開發的內容進行相應的技術學習和準備了。

10)編寫程式的時間估計需要2~3個月。一般而言,一個新手學習一門語言需要半年左右的時間。有的可能要少一點,有的可能會多一點。但是,無論如何,最終的結果是程式設計師對語言有了初步的瞭解,可以用語言編寫簡單的程式了。

【責任編輯:雲霞 TEL:(010)68476606】

1.5 理性看待考證熱

在當今這個社會,經常會出現各種所謂的熱門現象。這說明目前的社會相對浮躁,而IT行業也同樣不能避免。IT證書可謂名目繁多,應該有幾十種。IT證書(認證證書)大體可分兩類:一類是各大企業的認證,如微軟、IBM、SUN、CISCO等認證考試,這類考試主要是考核考生的專業技能和特殊技術的水平;另一類是國家認可的考試認證:如全國計算機等級考試(NCRE)和全國計算機應用技術等級考試(NIT),考核的是考生綜合的或某一領域的標準要求達到的程度。其實幾乎所有的程式設計師都知道,程式設計師的能力是一種綜合能力,其動手能力的成效是其能力的主要方面。若認為單靠考試就可以反映出考生的實際能力,那簡直就是一個笑話。

證書的出現說明社會對任職資格的追求,反映出社會對無序現象的一種規範要求,反映出對“持證上崗”的認同。社會資格的本質是對人們之間競爭的一種限制。為了突破這種限制,獲得在競爭中的優勢,人們便千方百計地獲取這種社會資格。於是社會上便出現了三類群體,一類是發放證書的,一類是獲取證書的,一類是招聘中認可證書的。由於這三類群體都能從中獲得直接的或間接的證書經濟利益,於是,證書不火也難。當證書火到一定程度的時候,其原本內在的職能就慢慢地被異化了。人們不是為證明證書持有人的能力而設立考試,而是為了獲取考試帶來的經濟利益而設立各種證書,於是證書的價值就貶值了。

但是,我們很多考生並沒有深入地看到證書背後真正的內容,他們認為用人單位需要證書,沒有證書就不能被錄取。社會上大量流傳著未經證實的證書和高薪之間的關係,更使某些證書神乎其神。因此,他們在證書方面花了大量的時間和金錢,為了證書而證書,能考多少證書就考多少證書。為的是在應聘時遞交的簡歷上可以附上厚厚的各種證書。

就我本人而言,我好像沒有考過什麼證書,工作依然很順利。這雖然和我成長所處的年代有關,但更重要的是我可能更關注自己能力的提高。如果自己的能力水平能夠達到用人單位滿意的要求,我相信即使你沒有那些證書,用人單位也會考慮錄取你的。我也相信有些用人單位的人力資源部門會按規定辦事,沒有證書不予錄取狀況也是存在的。這個時候,你自己就要權衡了,是進入按能力看人的企業求得發展呢,還是進入憑證書看人的企業求得發展呢?

我對證書方面的建議:

1)如果不佔用自己大量的時間和金錢,能考多少證書就考多少證書。把考證書當做消遣和對知識的複習。

2)如果需要對國家證書和企業證書進行選擇時,在沒有針對性的情況下,選擇國家證書。

3)如果自己對某類公司或某類崗位有意向的時候,最好打聽其是否有剛性的證書要求,若有,則要不惜時間和金錢去獲得這個證書。若沒有剛性的要求,僅僅是一種參考,那就要根據個人情況,例如時間和金錢方面的條件,進行取捨。

4)在已經有足夠證書的情況下,不要見一個證書就去考一個證書。儘量把時間放在自己的學習上和能力提升上。把時間和金錢節約下來做更重要的事。

5)不要和別人攀比證書多與少。因為每個人就業方向和機會都是不相同的。

6)沒事的時候,可花點時間跟蹤流行證書的情況,以便自己及時掌握證書最新情況,早作打算。

7)工作之後,也有可能因為你考了相關證書,可能會對你的薪水、崗位產生有利的影響;也可能對你跳槽有所幫助。這些在現實生活中也是可能出現的情況。

總之,我們要理性地對待考證熱,我們不贊成為考證而考證,我們也不贊成能考證而不考證。我們贊成那種實用主義的態度:當我們剛性地需要考證的時候,我們就準備考試,爭取獲得證書。當證書僅作參考的時候,我們能考就考,不考則把時間和精力花在自己的能力提升上面。

在國內,證書的泛濫早已使證書失去了原有的價值。但是,我們應學會內外兼修,也不妨在提升自己內在能力的同時學會打扮自己,讓自己更加漂亮一些,讓別人更欣賞自己。

【責任編輯:雲霞 TEL:(010)68476606】

1.6 選擇大公司還是小公司

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

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

1.個人勞動

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

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

2.產品可複製

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

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

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

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

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

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

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

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

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

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

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

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

【責任編輯:雲霞 TEL:(010)68476606】

1.7 新手面試常見問題和對策

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

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

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

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

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

1.簡歷灌水

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

灌水的直接結果就是應聘者在面試時,顯得很尷尬,顯得很不誠實。例如用人單位急聘C#程式設計師,看到簡歷上精通C#之後,必然會在面試時問及C#程式設