Ⅰ 編程能自學嗎
編程當然可以自學。自學編程大約需要兩三個月,每天抽出兩三個星期把基礎全部學習一遍,其他都是建立在基礎之上的東西,學起來就會很快。
以下是關於零基礎學習編程的建議:
1.准備一個相對好的運行速度快的電腦,然後安裝一個操作系統(建議Windows操作系統)。不要讓一台速度緩慢的電腦浪費你的時間。
2.選擇一個正確的打字指法。此外,還要熟悉一些Windows快捷鍵和文本編輯器。
3.學習計算機科學,第一步就是學習一門編程語言。下面就是這種語言的利弊:
a.C語言
【優點】:你可以學習到許多底層的知識,給你夯實基礎。
【缺點】:C語言不支持面向對象編程,你很難使用它直接找到一份工作
b.C++
【優點】:很多用法和C一樣,但是卻支持面向對象編程
【缺點】:有太多的知識點要學習,相對比較復雜的語言,有多個版本要選擇
c.java/C#/Python/JavaScript
【優點】:簡單的語法,隱藏了低層次的知識點,可讀性強,學好它容易找工作
【缺點】:你將丟失很多底層的知識點
推薦自學編程的教科書:
《C程序設計語言第二版·新版》
(1)程序員下樓擴展閱讀:
編程是編寫程序的中文簡稱,就是讓計算機代為解決某個問題,對某個計算體系規定一定的運算方式,使計算體系按照該計算方式運行,並最終得到相應結果的過程。
為了使計算機能夠理解人的意圖,人類就必須將需解決的問題的思路、方法和手段通過計算機能夠理解的形式告訴計算機,使得計算機能夠根據人的指令一步一步去工作,完成某種特定的任務。
這種人和計算體系之間交流的過程就是編程。
編程:設計具備邏輯流動作用的一種「可控體系」【註:編程不一定是針對計算機程序而言的,針對具備邏輯計算力的體系,都可以算編程。】
參考鏈接:編程_網路
Ⅱ 做程序的項目經理應該具備那些素質和才能呢
序員,或者說就是可以真正合格完成一些
代碼工作的程序員,應該具有的素質。
1:團隊精神和協作能力
把它作為基本素質,並不是不重要,恰恰相反,這是程序員應該具備的最基本的,
也是最重要的安身立命之本。把高水平程序員說成獨行俠的都是在囈語,任何個人的力
量都是有限的,即便如linus這樣的天才,也需要通過
組成強大的團隊來創造奇跡,那些遍布全球的為linux寫核心的高手們,沒有協作精神是
不可想像的。獨行俠可以作一些賺錢的小軟體發點小財,但是一旦進入一些大系統的研
發團隊,進入商業化和產品化的開發任務,缺乏
這種素質的人就完全不合格了。
2:文檔習慣
說高水平程序員從來不寫文檔的肯定是乳臭未乾的毛孩子,良好的文檔是正規研發
流程中非常重要的環節,作為代碼程序員,30%的工作時間寫技術文檔是很正常的,而
作為高級程序員和系統分析員,這個比例還要高很多。缺
乏文檔,一個軟體系統就缺乏生命力,在未來的查錯,升級以及模塊的復用時就都會遇
到極大的麻煩。
3:規范化,標准化的代碼編寫習慣
作為一些外國知名軟體公司的規矩,代碼的變數命名,代碼內注釋格式,甚至嵌套
中行縮進的長度和函數間的空行數字都有明確規定,良好的編寫習慣,不但有助於代碼
的移植和糾錯,也有助於不同技術人員之間的協作。fan
s叫囂高水平程序員寫的代碼旁人從來看不懂,這種叫囂只能證明他們自己壓根不配自稱
程序員。代碼具有良好的可讀性,是程序員基本的素質需求。再看看整個linux的搭建,
沒有規范化和標准化的代碼習慣,全球的研發
協作是絕對不可想像的。
4:需求理解能力
程序員需要理解一個模塊的需求,很多小朋友寫程序往往只關注一個功能需求,他
們把性能指標全部歸結到硬體,操作系統和開發環境上,而忽視了本身代碼的性能考慮
,有人曾經放言說寫一個廣 告交換程序很簡單,這種人從
來不知道在百萬甚至千萬數量級的訪問情況下的性能指標是如何實現的,對於這樣的程
序員,你給他深藍那套系統,他也做不出太極鏈的並訪能力。性能需求指標中,穩定性
,並訪支撐能力以及安全性都很重要,作為程序員需要
評估該模塊在系統運營中所處的環境,將要受到的負荷壓力以及各種潛在的危險和惡意
攻擊的可能性。就這一點,一個成熟的程序員至少需要2到3年的項目研發和跟蹤經驗才
有可能有心得。
5:復用性,模塊化思維能力
經常可以聽到一些程序員有這樣的抱怨,寫了幾年程序,變成了熟練工,每天都是
重復寫一些沒有任何新意的代碼,這其實是中國軟體人才最大浪費的地方,一些重復性
工作變成了熟練程序員的主要工作,而這些,其實是完全可
以避免的。
復用性設計,模塊化思維就是要程序員在完成任何一個功能模塊或函數的時候,要
多想一些,不要局限在完成當前任務的簡單思路上,想想看該模塊是否可以脫離這個系
統存在,是否可以通過簡單的修改參數的方式在其他系統和應用環境下直接引用,這樣
就能極大避免重復性的開發工作,如果一個軟體研發單位和工作組能夠在每一次研發過
程中都考慮到這些問題,那麼程序員就不會在重復性的工作中耽誤太多時間,就會有更
多時間和精力投入到創新的代碼工作中去。
一些好的程序模塊代碼,即便是70年代寫成的,拿到現在放到一些系統裡面作為功
能模塊都能適合的很好,而現在我看到的是,很多小公司軟體一升級或改進就動輒全部
代碼重寫,大部分重復性工作無謂的浪費了時間和精力。
6:測試習慣
作為一些商業化正規化的開發而言,專職的測試工程師是不可少的,但是並不是說
有了專職的測試工程師程序員就可以不進行自測;軟體研發作為一項工程而言,一個很
重要的特點就是問題發現的越早,解決的代價就越低,程序
員在每段代碼,每個子模塊完成後進行認真的測試,就可以盡量將一些潛在的問題最早
的發現和解決,這樣對整體系統建設的效率和可靠性就有了最大的保證。
測試工作實際上需要考慮兩方面,一方面是正常調用的測試,也就是看程序是否能
在正常調用下完成基本功能,這是最基本的測試職責,可惜在很多公司這成了唯一的測
試任務,實際上還差的遠那;第二方面就是異常調用的測試,比如高壓力負荷下的穩定
性測試,用戶潛在的異常輸入情況下的測試,整體系統局部故障情況下該模塊受影響狀
況的測試,頻發的異常請求阻塞資源時的模塊穩定測試等等。當然並不是程序員要對自
己的每段代碼都需要進行這種完整測試,但是程序員必須清醒認識自己的代碼任務在整
體項目中的地位和各種性能需求,有針對性的進行相關測試並盡早發現和解決問題,當
然這需要上面提到需求理解能力。
7:學習和總結的能力
程序員是人才很容易被淘汰,很容易落伍的職業,因為一種技術可能僅僅在三兩年
內具有領先性,程序員如果想安身立命,就必須不斷跟進新的技術,學習新的技能。
善於學習,對於任何職業而言,都是前進所必需的動力,對於程序員,這種要求就
更加高了。但是學習也要找對目標,一些小coding有些codingTO就是這樣的coding上只
是一些Cfans們,他們也津津樂道於他們的學習能力,一會學會了asp,一會兒學會了ph
p,一會兒學會了jsp,他們把這個作為炫耀的資本,盲目的追逐一些膚淺的,表面的東
西和名詞,做網路程序不懂通訊傳輸協議,做應用程序不懂中斷向量處理,這樣的技術
人員,不管掌握了多少所謂的新語言,永遠不會有質的提高。
善於總結,也是學習能力的一種體現,每次完 成一個研發任務,完成一段代碼,都
應當有目的的跟蹤該程序的應用狀況和用戶反饋,隨時總結,找到自己的不足,這樣逐
步提高,一個程序員才可能成長起來。
一個不具備成長性的程序員,即便眼前看是個高手,建議也不要選用,因為他落伍
的時候馬上就到了。具備以上全部素質的人,應當說是夠格的程序員了,請注意以上的
各種素質都不是由IQ決定的,也不是大學某些課本里可以學習到的,需要的僅僅是程序
員對自己工作的認識, 是一種意識上的問題。
那麼作為高級程序員,以至於系統分析員,也就是對於一個程序項目的設計者而言
,除了應該具備上述全部素質之外,還需要具備以下素質:
第一,需求分析能力
對於程序員而言,理解需求就可以完成合格的代碼,但是對於研發項目的組織和管
理者,他們不但要理解客戶需求,更多時候還要自行制定一些需求,為什麼這么說呢?
一般而言,進行研發任務,也許是客戶提出需求,也許是市場和營銷部門提出的需
求,這時候對於研發部門,他們看到的不是一個完整的需求,通常而言,該需求僅僅是
一些功能上的要求,或者更正規些,可能獲得一個完整的用戶視圖;但是這都不夠,因
為客戶由於非技術因素多一些,他們可能很難提出完整和清晰,或者說專業性的性能需
求,但是對於項目組織者和規劃者,他必須能夠清醒認識到這些需求的存在並在完成 需
求分析報告的時候適當的提出,同時要完整和清晰的體現在設計說明書裡面,以便於程
序員編碼時不會失去這些准則。
程序設計者必須正確理解用戶需求所處的環境,並針對性做出需求的分析,舉例而
言,同樣一個軟體通過ASP租用方式發布和通過License方式發布,性能需求可能就是有
區別的,前者強調的是更好的支撐能力和穩定性,而後者則可能更強調在各種平台下的
普適性和安裝使用的簡捷性。
第二,項目設計方法和流程處理能力
程序設計者必須能夠掌握不少於兩到三種的項目設計方法(比如自頂至下的設計方
法,比如快速原型法等等),並能夠根據項目需求和資源搭配來選擇合適的設計方法進
行項 目的整體設計。設計方法上選擇不當,就會耽誤研發周期,浪費研發資源,甚至影
響研發效果。
一個程序設計者還需要把很多功夫用在流程圖的設計和處理上,他需要做數據流圖
以確立數據詞典;他需要加工邏輯流圖以形成整體的系統處理流程。一個流程有問題的
系統,就算代碼多漂亮,每個模塊多精緻,也不會成為一個好的系統。當然,做好流程
分析並選擇好項目設計方法,都需要在需求分析能力上具有足夠的把握。
第三,復用設計和模塊化分解能力
這個似乎又是老調重談,前面基本素質上不是已經說明了這個問題嗎?作為一個從
事模塊任務的程序員,他需要對他所面對的特定功能模塊的 復用性進行考慮,而作為一
個系統分析人員,他要面對的問題復雜的多,需要對整體系統按照一種模塊化的分析能
力分解為很多可復用的功能模塊和函數,並針對每一模塊形成一個獨立的設計需求。舉
個例子,好比是汽車生產,最早每輛汽車都是獨立安裝的,每個部件都是量身定做的,
但是後來不一樣了,機器化大生產了,一個汽車廠開始通過流水線來生產汽車,獨立部
件開始具有一定的復用性,在後來標准化成為大趨勢,不同型號,品牌甚至不同廠商的
汽車部件也可以進行方便的換裝和升級,這時候,汽車生產的效率達到最大化。
軟體工程也是同樣的道理,一個成熟的軟體行業,在一些相關項目和系統中,不同
的部件是可以隨意換裝的,比如微軟的許多桌面軟體,在很多操作模塊(如打開文件,
保存文件等等)都是復用的同一套功能模塊,而這些介面又
通過一些類庫提供給了桌面應用程序開發者方便掛接,這就是復用化的模塊設計明顯的
一個佐證。
將一個大型的,錯綜復雜的應用系統分解成一些相對獨立的,具有高度復用性的,
並能僅僅依靠幾個參數完成數據聯系的模塊組合,是作為高級程序員和系統分析員一項
最重要的工作,合適的項目設計方法,清晰的流程圖,是實現這一目標的重要保證。
第四,整體項目評估能力
作為系統設計人員,必須能夠從全局出發,對項目又整體的清醒認識,比如公司的
資源配置是否合理和到位,比如工程進度安排是否能最大化體現效率又不至於無法按期
完成。評估項 目整體和各個模塊的工作量,評估項目所需的資源,評估項目可能遇到的
困難,都需要大量的經驗積累,換言之,這是一種不斷總結的累計才能達到的境界。在
西方一些軟體系統設計的帶頭人都是很年長的,比如4,50歲,甚至更老,他們在編碼方
面已經遠遠不如年輕人那樣活絡,但是就項目評估而言,他們幾十年的經驗積累就是最
重要和寶貴的財富。中國缺這么一代程序員,主要還不是缺那種年紀的程序員,而是那
種年紀的程序員基本上都是研究單位作出來的,都不是從專業的產品化軟體研發作出來
的,他們沒有能積累那種產品化研發的經驗,這也是沒有辦法的事情。
第五,團隊組織管理能力
完成一個項目工程,需要團隊的齊心協力,作為項目設計者或研發的主管人,就應
當有能力最大化發揮團隊的整體力量,技術管理由於其專業性質,不大同於一般的人事
管理,因為這裡面設計了一些技術性的指標和因素。
首先是工作的量化,沒有量化就很難做到合適的績效考核,而程序量化又不是簡單
的代碼行數可以計算的,因此要求技術管理人員需要能真正評估一個模塊的復雜性和工
作量。
其次是對團隊協作模式的調整,一般而言,程序開發的協作通常分為小組進行,小
組有主程序員方式的,也有民主方式的,根據程序員之間的能力水平差距,以及根據項
目研發的需求,選擇合適的組隊方式,並能將責權和成員的
工作任務緊密結合,這樣才能最大發揮組隊的效率。
一個代碼水平高的人,未必能成為一個合格的項目研發主管,這方面的能力欠缺往
往是容易被忽視的。
綜上可以看到,作為一個主管研發的負責人,一個項目設計者,所需要具備的素質
和能力並不是程序代碼編寫的能力,當然一般情況下,一個程序員通過不斷的總結提高
達到了這種素質的時候,他所具有的代碼編寫能力也已經相當不簡單了,但是請注意這
裡面的因果關系,一個高水平的項目設計者通常已經是代碼編寫相當優秀的人了,但是
並不是一個代碼相當優秀的程序員就可以勝任項目設計的工作,這裡面存在的也不是智
商和課本的問題,還是在於一個程序員在積累經驗,逐步提升的時候沒有意識到應當思
考哪方面的東西,沒有有意識的就項目的組織和復用設計進行揣摩,沒有經常性的文檔
習慣和總結習慣, 不改變這些,我們的合格的項目設計者還是非常欠缺。
另外,為防止有無聊的人和我較真,補充一點,本文針對目標是作商業化的軟體項
目和工程,那些科研機構的編程高手,比如演算法高手,比如圖象處理高手,他們的工作
是研究課題而非直接完成商業軟體(當然最終間接成為商業
產品,比如微軟研究院在作的研究課題),因此他們強調的素質可能是另外的東西,這
些人(專家),並不能說是程序員,不能用程序員的標准去衡量。
最後補充一點東西,一個軟體項目研發的設計流程是怎樣的呢?以通常標準的設計
方法為例,(不過筆者喜歡快速原型法)。
第一個步驟是市場調研,技術和市場要結合才能體現最大價值。
第二個步驟是需求分析,這個階段需要出三樣東西,用戶視圖,數據詞典和用戶操
作手冊。用戶視圖是該軟體用戶(包括終端用戶和管理用戶)所能看到的頁面樣式,這
裡麵包含了很多操作方面的流程和條件。數據詞典是指明數據邏輯關系並加以整理的東
東,完成了數據詞典,資料庫的設計就完成了一半多。用戶操作手冊是指明了操作流程
的說明書。請注意,用戶操作流程和用戶視圖是由需求決定的,因此應該在軟體設計之
前完成,完成這些,就為程序研發提供了約束和准繩,很遺憾太多公司都不是這樣做的
,因果顛倒,順序不分,開發工作和實際需求往往因此 產生隔閡脫節的現象。
需求分析,除了以上工作,筆者以為作為項目設計者應當完整的做出項目的性能需
求說明書,因為往往性能需求只有懂技術的人才可能理解,這就需要技術專家和需求方
(客戶或公司市場部門)能夠有真正的溝通和了解。
第三個步驟是概要設計,將系統功能模塊初步劃分,並給出合理的研發流程和資源
要求。作為快速原型設計方法,完成概要設計就可以進入編碼階段了,通常採用這種方
法是因為涉及的研發任務屬於新領域,技術主管人員一上來無法給出明確的詳細設計說
明書,但是並不是說詳細設計說明書不重要,事實上快速原型法在完成原型代碼後,根
據評測結果和經驗教訓的總結,還要重新進行詳細設計的步驟。
第四個步驟是詳細設計,這是考驗技術專家設計思維的重 要關卡,詳細設計說明書
應當把具體的模塊以最『干凈』的方式(黑箱結構)提供給編碼者,使得系統整體模塊化
達到最大;一份好的詳細設計說明書,可以使編碼的復雜性減低到最低,實際上,嚴格
的講詳細設計說明書應當把每個函數的每個參數的定義都精精細細的提供出來,從需求
分析到概要設計到完成詳細設計說明書,一個軟體項目就應當說完成了一半了。換言之
,一個大型軟體系統在完成了一半的時候,其實還沒有開始一行代碼工作。那些把作軟
件的程序員簡單理解為寫代碼的,就從根子上犯了錯誤了。
第五個步驟是編碼,在規范化的研發流程中,編碼工作在整個項目流程里最多不會
超過1/2,通常在1/3的時間,所謂磨刀不誤砍柴功,設計過程完成的好,編碼效率就會
極大提高,編碼時不同模塊之間的進度協調和協作是最需要小心的,也許一個小模塊的
問題就可能影響了整體進度,讓很多程序員因此被迫停下工作等待,這種問題在很多研
發過程中都出現過。編碼時的相互溝通和應急的解決手段都是相當重要的,對於程序員
而言,bug永遠存在,你必須永遠面對這個問題,大名鼎鼎的微軟,可曾有連續三個月不
發補丁的時候嗎?從來沒有!
第六個步驟是測試。
測試有很多種:按照測試執行方,可以分為內部測試和外部測試;按照測試范圍,
可以分為模塊測試和整體聯調;按照測試條 件,可以分為正常操作情況測試和異常情況
測試;按照測試的輸入范圍,可以分為全覆蓋測試和抽樣測試。以上都很好理解,不再
解釋。
總之,測試同樣是項目研發中一個相當重要的步驟,對於一個大型軟體,3個月到1
年的外部測試都是正常的,因為永遠都會又不可預料的問題存在。
完成測試後,完成驗收並完成最後的一些幫助文檔,整體項目才算告一段落,當然
日後少不了升級,修補等等工作,只要不是想通過一錘子買賣騙錢,就要不停的跟蹤軟
件的運營狀況並持續修補升級,知道這個軟體被徹底淘汰為
止。
寫這些步驟算不上賣弄什麼,因為實話講我手邊是一本《軟體工程》,在大學里這
是計算機專業的必修課程,但是我知道很多程序員似乎從來都只是熱衷於什麼《30天精
通VC》之類的,他們有些和我一樣游擊隊出身,沒有正規學過這個專業,還有一些則早
就在混夠學分後就把這些真正有用的東西還給了老師。
fans亂嚷嚷,混淆視聽,實際上真正的技術專家很少在網上亂發帖子的,如筆者這
樣不知天高地厚的,其實實在是算不上什麼高手,只不過看不慣這種對技術,對程序員
的誤解和胡說,只好挺身而出,做撥亂反正之言,也希望那些還fans們能認真想想,走
到正途上,畢竟那些聰明的頭腦還遠遠沒有發揮應有的價值。
從程序員到工程師
從程序員升級到工程師大多數象我這樣對軟體有濃厚興趣的人,畢業後義無反顧地
走進了企業,開始了程序員的生涯。那時,我們迷戀「大全」、「秘籍」一類的書籍,
心中只有代碼。當我看到一行行枯燥的代碼變成了能夠打電話的設備,變成了屏幕上漂
亮的表格,變成了動聽的音樂,成就感油然而生。我覺得自己也是一個出色的程序員了
。在用戶的機房中苦熬三晝夜解決軟體的bug,也成了一種可以誇耀的資歷。五年前的某
一天,我把曾經讓我興奮自豪的大量代碼和少得可憐的文檔移交之後,來到了華為。這
里有更多的年輕人,我如魚得水,可以充分發揮自己的想像力。依然是代碼,依然是匆
匆地在紙上記下稍縱即逝的靈感(我們把它稱作文檔),依然是無休止地和bug作斗爭。
當有一天,一個新來的同事拿著署著我的大名的文檔,小心翼翼地來問我時,我發現自
己好象有點不認識它了。我心裡有點沮喪,再看看代碼,發現文檔上記錄的一些靈感已
面目全非。我當時不知道那位新來的同事感受如何,但我從那時起,好象意識到什麼。
現在來看,那時的很多事情都是事倍功半。
我也見到了我的項目經理,一個個子較高,瘦瘦的年輕人,據說剛從美國回來,已
工作了五、六年。我聽了心裡很高興,這回要一招一式地學兩手。需求分析的時間是一
個月,項目經理和我們(實際上代表客戶 )討論了proposal中的內容,確定每一項都是
需要的。然後他把模塊大致劃分了一下,開始進入計劃中的學習階段。每個人在學習階
段要寫出功能描述的膠片,給其他人講解,不知不覺中,項目組的所有人對項目有了整
體的了解。
他還安排了一些培訓,如他們公司的軟體開發模型、項目組中各角色的定義,以後
及時的培訓不斷,只要項目組中有需求,他總是把qa或相關的人請來,培訓很專業。需
求分析完成後提交了一份四十多頁的文檔,當我看到這份英文文檔中我寫的部分整整齊
齊地列在其中時,我的感覺很復雜,有些喜悅,但更多的是苦澀,我以前怎麼就從來沒
有這樣做過需求分析呢。
在我寫文檔的過程中,qa給我們培訓過srs的寫作模板,後來我還是不放心,讓他們
一個有經驗的工程師寫了一段,我們再琢磨著照著寫。這份srs雖然是多個人合寫,但風
格一致,內容詳實。更為可貴的是,一直到最後,這份需求分析的內容都沒有改過,以
至於我們沒有機會走一下他們的需求更改流程。
需求分析是項目的第一階段,第二階段的開發時間要根據需求分析的結果來確定。
當對方的首席技術官(相當於我們業務部的總體組長)來和我們討論計劃時,他們已列
出了對每個 模塊的代碼行數的預測,可能存在的風險。根據他們公司的生產率--300
行/人月,他得出了項目第二階段需要多少周。
我們當時就提出了異議:1)公司對該項目需求很急;2)每月300行是否太少;3)
我們還有下載的源代碼參考。他解釋說,300行/人月是使得項目能達到他們質量標準的
經驗數據,考慮到有源代碼參考,生產率最多不能超過350行/人月。
當他問我們公司的生產率時,我腦袋裡轉了三個圈,沒敢多說,大概六、七百行吧
。他沉默了一會兒,然後堅定地說,我們這個計劃是建立在確保質量的基礎上的,我想
你們到印度來開發軟體,首先看中的應該是我們印度公司的
質量保證。我知道你們不缺乏軟體開發人員,你們為什麼不選擇下載的軟體呢。幾句話
說到了我的痛處,現在國內的弟兄們還在為使用下載軟體移植的產品四處奔波呢!
隨後的開發活動有條不紊,我們老老實實地跟著做。系統測試計劃、用例,概要設
計,集成測試計劃、用例,詳細設計,單元測試計劃、用例,編碼,單元測試,集成測
試,系統測試。一個完整的v模型開發過程,其中每個過程都有review。當我們對一些設
計的方法不太明白時,項目經理給我們發來了相關的資料,我不知道他當時是怎麼想的
,一些基本的分析、設計方法是十年,甚至二十年前的軟體工程書中就講到的,印度每
個計算機專業的人員都是必修這些內容的。而我們除了對一些具體協議的代碼很熟之外
,對這些常用的方法似乎一無所知。我感到一些羞愧,進城直奔書店,把他給我開列的
書找了出來,晚上躺在床上,仔細研讀,我彷彿突然又遇到了能給我指點迷津的良師益
友。現在印度所已形成了強烈的學習風氣。我回來後也推銷了700多本書,這些書教我們
如何用工程化的方法開發軟體,是成為一個軟體工程師必讀的資料。
我們的項目經理的計劃控制能力很強,當有什麼影響到項目計劃的事情發生時,如
人員辭職、實驗室搬家、某一模塊預測不準(該模塊是我們預測的),他總是採取必要
的措施,減少延期,調整計劃。剛開始,我們對他們每天上午11點,下午4點下樓喝咖啡
還有點意見,後來也跟著喝去了,原來,喝咖啡時的交流非常豐富,從項目管理到設計
方法,從技術發展到風土人情,無所不包,對我們互相之間的理解,對團隊的氣氛很有
幫助。我們項目的QA也在適當的時候出現在我們的面前,我們對她的工作只有一些感性
認識。她每次參加會議時,手裡時常拿著一個check list,項目經理准備相應的資料,
回答一些問題,她打著勾,或寫著項目經理的解釋。她給我們做培訓時也很耐心,體現
出很好的職業素養,我至今還在懷念她給我們的幫助。
我從事軟體開發已有九個年頭了,可我現在仍然不能說自己是個合格的軟體工程師
,更不用談什麼合格的管理者。我看到一份報道說,瑞士洛桑一權威機構把中國的科技
綜合競爭力從原來的第十三位調到二十多位,原因是他們調整了一些評估標准,其中有
一條是中國合格工程師的可獲得性非常低。想著弟兄們熬紅的雙眼,四處奔波升級的疲
憊身影,我有一個強烈的願望:快把我們自己升級成合格的工程師吧!
Ⅲ 象程序員,網路工程師這方面有沒有很經典很值得看的書
程序員基本素質:
作一個真正合格的程序員,或者說就是可以真正合格完成一些
代碼工作的程序員,應該具有的素質。
1:團隊精神和協作能力
把它作為基本素質,並不是不重要,恰恰相反,這是程序員應該具備的最基本的,
也是最重要的安身立命之本。把高水平程序員說成獨行俠的都是在囈語,任何個人的力
量都是有限的,即便如linus這樣的天才,也需要通過
組成強大的團隊來創造奇跡,那些遍布全球的為linux寫核心的高手們,沒有協作精神是
不可想像的。獨行俠可以作一些賺錢的小軟體發點小財,但是一旦進入一些大系統的研
發團隊,進入商業化和產品化的開發任務,缺乏
這種素質的人就完全不合格了。
2:文檔習慣
說高水平程序員從來不寫文檔的肯定是乳臭未乾的毛孩子,良好的文檔是正規研發
流程中非常重要的環節,作為代碼程序員,30%的工作時間寫技術文檔是很正常的,而
作為高級程序員和系統分析員,這個比例還要高很多。缺
乏文檔,一個軟體系統就缺乏生命力,在未來的查錯,升級以及模塊的復用時就都會遇
到極大的麻煩。
3:規范化,標准化的代碼編寫習慣
作為一些外國知名軟體公司的規矩,代碼的變數命名,代碼內注釋格式,甚至嵌套
中行縮進的長度和函數間的空行數字都有明確規定,良好的編寫習慣,不但有助於代碼
的移植和糾錯,也有助於不同技術人員之間的協作。fan
s叫囂高水平程序員寫的代碼旁人從來看不懂,這種叫囂只能證明他們自己壓根不配自稱
程序員。代碼具有良好的可讀性,是程序員基本的素質需求。再看看整個linux的搭建,
沒有規范化和標准化的代碼習慣,全球的研發
協作是絕對不可想像的。
4:需求理解能力
程序員需要理解一個模塊的需求,很多小朋友寫程序往往只關注一個功能需求,他
們把性能指標全部歸結到硬體,操作系統和開發環境上,而忽視了本身代碼的性能考慮
,有人曾經放言說寫一個廣 告交換程序很簡單,這種人從
來不知道在百萬甚至千萬數量級的訪問情況下的性能指標是如何實現的,對於這樣的程
序員,你給他深藍那套系統,他也做不出太極鏈的並訪能力。性能需求指標中,穩定性
,並訪支撐能力以及安全性都很重要,作為程序員需要
評估該模塊在系統運營中所處的環境,將要受到的負荷壓力以及各種潛在的危險和惡意
攻擊的可能性。就這一點,一個成熟的程序員至少需要2到3年的項目研發和跟蹤經驗才
有可能有心得。
5:復用性,模塊化思維能力
經常可以聽到一些程序員有這樣的抱怨,寫了幾年程序,變成了熟練工,每天都是
重復寫一些沒有任何新意的代碼,這其實是中國軟體人才最大浪費的地方,一些重復性
工作變成了熟練程序員的主要工作,而這些,其實是完全可
以避免的。
復用性設計,模塊化思維就是要程序員在完成任何一個功能模塊或函數的時候,要
多想一些,不要局限在完成當前任務的簡單思路上,想想看該模塊是否可以脫離這個系
統存在,是否可以通過簡單的修改參數的方式在其他系統和應用環境下直接引用,這樣
就能極大避免重復性的開發工作,如果一個軟體研發單位和工作組能夠在每一次研發過
程中都考慮到這些問題,那麼程序員就不會在重復性的工作中耽誤太多時間,就會有更
多時間和精力投入到創新的代碼工作中去。
一些好的程序模塊代碼,即便是70年代寫成的,拿到現在放到一些系統裡面作為功
能模塊都能適合的很好,而現在我看到的是,很多小公司軟體一升級或改進就動輒全部
代碼重寫,大部分重復性工作無謂的浪費了時間和精力。
6:測試習慣
作為一些商業化正規化的開發而言,專職的測試工程師是不可少的,但是並不是說
有了專職的測試工程師程序員就可以不進行自測;軟體研發作為一項工程而言,一個很
重要的特點就是問題發現的越早,解決的代價就越低,程序
員在每段代碼,每個子模塊完成後進行認真的測試,就可以盡量將一些潛在的問題最早
的發現和解決,這樣對整體系統建設的效率和可靠性就有了最大的保證。
測試工作實際上需要考慮兩方面,一方面是正常調用的測試,也就是看程序是否能
在正常調用下完成基本功能,這是最基本的測試職責,可惜在很多公司這成了唯一的測
試任務,實際上還差的遠那;第二方面就是異常調用的測試,比如高壓力負荷下的穩定
性測試,用戶潛在的異常輸入情況下的測試,整體系統局部故障情況下該模塊受影響狀
況的測試,頻發的異常請求阻塞資源時的模塊穩定測試等等。當然並不是程序員要對自
己的每段代碼都需要進行這種完整測試,但是程序員必須清醒認識自己的代碼任務在整
體項目中的地位和各種性能需求,有針對性的進行相關測試並盡早發現和解決問題,當
然這需要上面提到需求理解能力。
7:學習和總結的能力
程序員是人才很容易被淘汰,很容易落伍的職業,因為一種技術可能僅僅在三兩年
內具有領先性,程序員如果想安身立命,就必須不斷跟進新的技術,學習新的技能。
善於學習,對於任何職業而言,都是前進所必需的動力,對於程序員,這種要求就
更加高了。但是學習也要找對目標,一些小coding有些codingTO就是這樣的coding上只
是一些Cfans們,他們也津津樂道於他們的學習能力,一會學會了asp,一會兒學會了ph
p,一會兒學會了jsp,他們把這個作為炫耀的資本,盲目的追逐一些膚淺的,表面的東
西和名詞,做網路程序不懂通訊傳輸協議,做應用程序不懂中斷向量處理,這樣的技術
人員,不管掌握了多少所謂的新語言,永遠不會有質的提高。
善於總結,也是學習能力的一種體現,每次完 成一個研發任務,完成一段代碼,都
應當有目的的跟蹤該程序的應用狀況和用戶反饋,隨時總結,找到自己的不足,這樣逐
步提高,一個程序員才可能成長起來。
一個不具備成長性的程序員,即便眼前看是個高手,建議也不要選用,因為他落伍
的時候馬上就到了。具備以上全部素質的人,應當說是夠格的程序員了,請注意以上的
各種素質都不是由IQ決定的,也不是大學某些課本里可以學習到的,需要的僅僅是程序
員對自己工作的認識, 是一種意識上的問題。
那麼作為高級程序員,以至於系統分析員,也就是對於一個程序項目的設計者而言
,除了應該具備上述全部素質之外,還需要具備以下素質:
第一,需求分析能力
對於程序員而言,理解需求就可以完成合格的代碼,但是對於研發項目的組織和管
理者,他們不但要理解客戶需求,更多時候還要自行制定一些需求,為什麼這么說呢?
一般而言,進行研發任務,也許是客戶提出需求,也許是市場和營銷部門提出的需
求,這時候對於研發部門,他們看到的不是一個完整的需求,通常而言,該需求僅僅是
一些功能上的要求,或者更正規些,可能獲得一個完整的用戶視圖;但是這都不夠,因
為客戶由於非技術因素多一些,他們可能很難提出完整和清晰,或者說專業性的性能需
求,但是對於項目組織者和規劃者,他必須能夠清醒認識到這些需求的存在並在完成 需
求分析報告的時候適當的提出,同時要完整和清晰的體現在設計說明書裡面,以便於程
序員編碼時不會失去這些准則。
程序設計者必須正確理解用戶需求所處的環境,並針對性做出需求的分析,舉例而
言,同樣一個軟體通過ASP租用方式發布和通過License方式發布,性能需求可能就是有
區別的,前者強調的是更好的支撐能力和穩定性,而後者則可能更強調在各種平台下的
普適性和安裝使用的簡捷性。
第二,項目設計方法和流程處理能力
程序設計者必須能夠掌握不少於兩到三種的項目設計方法(比如自頂至下的設計方
法,比如快速原型法等等),並能夠根據項目需求和資源搭配來選擇合適的設計方法進
行項 目的整體設計。設計方法上選擇不當,就會耽誤研發周期,浪費研發資源,甚至影
響研發效果。
一個程序設計者還需要把很多功夫用在流程圖的設計和處理上,他需要做數據流圖
以確立數據詞典;他需要加工邏輯流圖以形成整體的系統處理流程。一個流程有問題的
系統,就算代碼多漂亮,每個模塊多精緻,也不會成為一個好的系統。當然,做好流程
分析並選擇好項目設計方法,都需要在需求分析能力上具有足夠的把握。
第三,復用設計和模塊化分解能力
這個似乎又是老調重談,前面基本素質上不是已經說明了這個問題嗎?作為一個從
事模塊任務的程序員,他需要對他所面對的特定功能模塊的 復用性進行考慮,而作為一
個系統分析人員,他要面對的問題復雜的多,需要對整體系統按照一種模塊化的分析能
力分解為很多可復用的功能模塊和函數,並針對每一模塊形成一個獨立的設計需求。舉
個例子,好比是汽車生產,最早每輛汽車都是獨立安裝的,每個部件都是量身定做的,
但是後來不一樣了,機器化大生產了,一個汽車廠開始通過流水線來生產汽車,獨立部
件開始具有一定的復用性,在後來標准化成為大趨勢,不同型號,品牌甚至不同廠商的
汽車部件也可以進行方便的換裝和升級,這時候,汽車生產的效率達到最大化。
軟體工程也是同樣的道理,一個成熟的軟體行業,在一些相關項目和系統中,不同
的部件是可以隨意換裝的,比如微軟的許多桌面軟體,在很多操作模塊(如打開文件,
保存文件等等)都是復用的同一套功能模塊,而這些介面又
通過一些類庫提供給了桌面應用程序開發者方便掛接,這就是復用化的模塊設計明顯的
一個佐證。
將一個大型的,錯綜復雜的應用系統分解成一些相對獨立的,具有高度復用性的,
並能僅僅依靠幾個參數完成數據聯系的模塊組合,是作為高級程序員和系統分析員一項
最重要的工作,合適的項目設計方法,清晰的流程圖,是實現這一目標的重要保證。
第四,整體項目評估能力
作為系統設計人員,必須能夠從全局出發,對項目又整體的清醒認識,比如公司的
資源配置是否合理和到位,比如工程進度安排是否能最大化體現效率又不至於無法按期
完成。評估項 目整體和各個模塊的工作量,評估項目所需的資源,評估項目可能遇到的
困難,都需要大量的經驗積累,換言之,這是一種不斷總結的累計才能達到的境界。在
西方一些軟體系統設計的帶頭人都是很年長的,比如4,50歲,甚至更老,他們在編碼方
面已經遠遠不如年輕人那樣活絡,但是就項目評估而言,他們幾十年的經驗積累就是最
重要和寶貴的財富。中國缺這么一代程序員,主要還不是缺那種年紀的程序員,而是那
種年紀的程序員基本上都是研究單位作出來的,都不是從專業的產品化軟體研發作出來
的,他們沒有能積累那種產品化研發的經驗,這也是沒有辦法的事情。
第五,團隊組織管理能力
完成一個項目工程,需要團隊的齊心協力,作為項目設計者或研發的主管人,就應
當有能力最大化發揮團隊的整體力量,技術管理由於其專業性質,不大同於一般的人事
管理,因為這裡面設計了一些技術性的指標和因素。
首先是工作的量化,沒有量化就很難做到合適的績效考核,而程序量化又不是簡單
的代碼行數可以計算的,因此要求技術管理人員需要能真正評估一個模塊的復雜性和工
作量。
其次是對團隊協作模式的調整,一般而言,程序開發的協作通常分為小組進行,小
組有主程序員方式的,也有民主方式的,根據程序員之間的能力水平差距,以及根據項
目研發的需求,選擇合適的組隊方式,並能將責權和成員的
工作任務緊密結合,這樣才能最大發揮組隊的效率。
一個代碼水平高的人,未必能成為一個合格的項目研發主管,這方面的能力欠缺往
往是容易被忽視的。
綜上可以看到,作為一個主管研發的負責人,一個項目設計者,所需要具備的素質
和能力並不是程序代碼編寫的能力,當然一般情況下,一個程序員通過不斷的總結提高
達到了這種素質的時候,他所具有的代碼編寫能力也已經相當不簡單了,但是請注意這
裡面的因果關系,一個高水平的項目設計者通常已經是代碼編寫相當優秀的人了,但是
並不是一個代碼相當優秀的程序員就可以勝任項目設計的工作,這裡面存在的也不是智
商和課本的問題,還是在於一個程序員在積累經驗,逐步提升的時候沒有意識到應當思
考哪方面的東西,沒有有意識的就項目的組織和復用設計進行揣摩,沒有經常性的文檔
習慣和總結習慣, 不改變這些,我們的合格的項目設計者還是非常欠缺。
另外,為防止有無聊的人和我較真,補充一點,本文針對目標是作商業化的軟體項
目和工程,那些科研機構的編程高手,比如演算法高手,比如圖象處理高手,他們的工作
是研究課題而非直接完成商業軟體(當然最終間接成為商業
產品,比如微軟研究院在作的研究課題),因此他們強調的素質可能是另外的東西,這
些人(專家),並不能說是程序員,不能用程序員的標准去衡量。
最後補充一點東西,一個軟體項目研發的設計流程是怎樣的呢?以通常標準的設計
方法為例,(不過筆者喜歡快速原型法)。
第一個步驟是市場調研,技術和市場要結合才能體現最大價值。
第二個步驟是需求分析,這個階段需要出三樣東西,用戶視圖,數據詞典和用戶操
作手冊。用戶視圖是該軟體用戶(包括終端用戶和管理用戶)所能看到的頁面樣式,這
裡麵包含了很多操作方面的流程和條件。數據詞典是指明數據邏輯關系並加以整理的東
東,完成了數據詞典,資料庫的設計就完成了一半多。用戶操作手冊是指明了操作流程
的說明書。請注意,用戶操作流程和用戶視圖是由需求決定的,因此應該在軟體設計之
前完成,完成這些,就為程序研發提供了約束和准繩,很遺憾太多公司都不是這樣做的
,因果顛倒,順序不分,開發工作和實際需求往往因此 產生隔閡脫節的現象。
需求分析,除了以上工作,筆者以為作為項目設計者應當完整的做出項目的性能需
求說明書,因為往往性能需求只有懂技術的人才可能理解,這就需要技術專家和需求方
(客戶或公司市場部門)能夠有真正的溝通和了解。
第三個步驟是概要設計,將系統功能模塊初步劃分,並給出合理的研發流程和資源
要求。作為快速原型設計方法,完成概要設計就可以進入編碼階段了,通常採用這種方
法是因為涉及的研發任務屬於新領域,技術主管人員一上來無法給出明確的詳細設計說
明書,但是並不是說詳細設計說明書不重要,事實上快速原型法在完成原型代碼後,根
據評測結果和經驗教訓的總結,還要重新進行詳細設計的步驟。
第四個步驟是詳細設計,這是考驗技術專家設計思維的重 要關卡,詳細設計說明書
應當把具體的模塊以最『干凈』的方式(黑箱結構)提供給編碼者,使得系統整體模塊化
達到最大;一份好的詳細設計說明書,可以使編碼的復雜性減低到最低,實際上,嚴格
的講詳細設計說明書應當把每個函數的每個參數的定義都精精細細的提供出來,從需求
分析到概要設計到完成詳細設計說明書,一個軟體項目就應當說完成了一半了。換言之
,一個大型軟體系統在完成了一半的時候,其實還沒有開始一行代碼工作。那些把作軟
件的程序員簡單理解為寫代碼的,就從根子上犯了錯誤了。
第五個步驟是編碼,在規范化的研發流程中,編碼工作在整個項目流程里最多不會
超過1/2,通常在1/3的時間,所謂磨刀不誤砍柴功,設計過程完成的好,編碼效率就會
極大提高,編碼時不同模塊之間的進度協調和協作是最需要小心的,也許一個小模塊的
問題就可能影響了整體進度,讓很多程序員因此被迫停下工作等待,這種問題在很多研
發過程中都出現過。編碼時的相互溝通和應急的解決手段都是相當重要的,對於程序員
而言,bug永遠存在,你必須永遠面對這個問題,大名鼎鼎的微軟,可曾有連續三個月不
發補丁的時候嗎?從來沒有!
第六個步驟是測試。
測試有很多種:按照測試執行方,可以分為內部測試和外部測試;按照測試范圍,
可以分為模塊測試和整體聯調;按照測試條 件,可以分為正常操作情況測試和異常情況
測試;按照測試的輸入范圍,可以分為全覆蓋測試和抽樣測試。以上都很好理解,不再
解釋。
總之,測試同樣是項目研發中一個相當重要的步驟,對於一個大型軟體,3個月到1
年的外部測試都是正常的,因為永遠都會又不可預料的問題存在。
完成測試後,完成驗收並完成最後的一些幫助文檔,整體項目才算告一段落,當然
日後少不了升級,修補等等工作,只要不是想通過一錘子買賣騙錢,就要不停的跟蹤軟
件的運營狀況並持續修補升級,知道這個軟體被徹底淘汰為
止。
寫這些步驟算不上賣弄什麼,因為實話講我手邊是一本《軟體工程》,在大學里這
是計算機專業的必修課程,但是我知道很多程序員似乎從來都只是熱衷於什麼《30天精
通VC》之類的,他們有些和我一樣游擊隊出身,沒有正規學過這個專業,還有一些則早
就在混夠學分後就把這些真正有用的東西還給了老師。
fans亂嚷嚷,混淆視聽,實際上真正的技術專家很少在網上亂發帖子的,如筆者這
樣不知天高地厚的,其實實在是算不上什麼高手,只不過看不慣這種對技術,對程序員
的誤解和胡說,只好挺身而出,做撥亂反正之言,也希望那些還fans們能認真想想,走
到正途上,畢竟那些聰明的頭腦還遠遠沒有發揮應有的價值。
從程序員到工程師
從程序員升級到工程師大多數象我這樣對軟體有濃厚興趣的人,畢業後義無反顧地
走進了企業,開始了程序員的生涯。那時,我們迷戀「大全」、「秘籍」一類的書籍,
心中只有代碼。當我看到一行行枯燥的代碼變成了能夠打電話的設備,變成了屏幕上漂
亮的表格,變成了動聽的音樂,成就感油然而生。我覺得自己也是一個出色的程序員了
。在用戶的機房中苦熬三晝夜解決軟體的bug,也成了一種可以誇耀的資歷。五年前的某
一天,我把曾經讓我興奮自豪的大量代碼和少得可憐的文檔移交之後,來到了華為。這
里有更多的年輕人,我如魚得水,可以充分發揮自己的想像力。依然是代碼,依然是匆
匆地在紙上記下稍縱即逝的靈感(我們把它稱作文檔),依然是無休止地和bug作斗爭。
當有一天,一個新來的同事拿著署著我的大名的文檔,小心翼翼地來問我時,我發現自
己好象有點不認識它了。我心裡有點沮喪,再看看代碼,發現文檔上記錄的一些靈感已
面目全非。我當時不知道那位新來的同事感受如何,但我從那時起,好象意識到什麼。
現在來看,那時的很多事情都是事倍功半。
我也見到了我的項目經理,一個個子較高,瘦瘦的年輕人,據說剛從美國回來,已
工作了五、六年。我聽了心裡很高興,這回要一招一式地學兩手。需求分析的時間是一
個月,項目經理和我們(實際上代表客戶 )討論了proposal中的內容,確定每一項都是
需要的。然後他把模塊大致劃分了一下,開始進入計劃中的學習階段。每個人在學習階
段要寫出功能描述的膠片,給其他人講解,不知不覺中,項目組的所有人對項目有了整
體的了解。
他還安排了一些培訓,如他們公司的軟體開發模型、項目組中各角色的定義,以後
及時的培訓不斷,只要項目組中有需求,他總是把qa或相關的人請來,培訓很專業。需
求分析完成後提交了一份四十多頁的文檔,當我看到這份英文文檔中我寫的部分整整齊
齊地列在其中時,我的感覺很復雜,有些喜悅,但更多的是苦澀,我以前怎麼就從來沒
有這樣做過需求分析呢。
在我寫文檔的過程中,qa給我們培訓過srs的寫作模板,後來我還是不放心,讓他們
一個有經驗的工程師寫了一段,我們再琢磨著照著寫。這份srs雖然是多個人合寫,但風
格一致,內容詳實。更為可貴的是,一直到最後,這份需求分析的內容都沒有改過,以
至於我們沒有機會走一下他們的需求更改流程。
需求分析是項目的第一階段,第二階段的開發時間要根據需求分析的結果來確定。
當對方的首席技術官(相當於我們業務部的總體組長)來和我們討論計劃時,他們已列
出了對每個 模塊的代碼行數的預測,可能存在的風險。根據他們公司的生產率--300
行/人月,他得出了項目第二階段需要多少周。
我們當時就提出了異議:1)公司對該項目需求很急;2)每月300行是否太少;3)
我們還有下載的源代碼參考。他解釋說,300行/人月是使得項目能達到他們質量標準的
經驗數據,考慮到有源代碼參考,生產率最多不能超過350行/人月。
當他問我們公司的生產率時,我腦袋裡轉了三個圈,沒敢多說,大概六、七百行吧
。他沉默了一會兒,然後堅定地說,我們這個計劃是建立在確保質量的基礎上的,我想
你們到印度來開發軟體,首先看中的應該是我們印度公司的
質量保證。我知道你們不缺乏軟體開發人員,你們為什麼不選擇下載的軟體呢。幾句話
說到了我的痛處,現在國內的弟兄們還在為使用下載軟體移植的產品四處奔波呢!
隨後的開發活動有條不紊,我們老老實實地跟著做。系統測試計劃、用例,概要設
計,集成測試計劃、用例,詳細設計,單元測試計劃、用例,編碼,單元測試,集成測
試,系統測試。一個完整的v模型開發過程,其中每個過程都有review。當我們對一些設
計的方法不太明白時,項目經理給我們發來了相關的資料,我不知道他當時是怎麼想的
,一些基本的分析、設計方法是十年,甚至二十年前的軟體工程書中就講到的,印度每
個計算機專業的人員都是必修這些內容的。而我們除了對一些具體協議的代碼很熟之外
,對這些常用的方法似乎一無所知。我感到一些羞愧,進城直奔書店,把他給我開列的
書找了出來,晚上躺在床上,仔細研讀,我彷彿突然又遇到了能給我指點迷津的良師益
友。現在印度所已形成了強烈的學習風氣。我回來後也推銷了700多本書,這些書教我們
如何用工程化的方法開發軟體,是成為一個軟體工程師必讀的資料。
我們的項目經理的計劃控制能力很強,當有什麼影響到項目計劃的事情發生時,如
人員辭職、實驗室搬家、某一模塊預測不準(該模塊是我們預測的),他總是採取必要
的措施,減少延期,調整計劃。剛開始,我們對他們每天上午11點,下午4點下樓喝咖啡
還有點意見,後來也跟著喝去了,原來,喝咖啡時的交流非常豐富,從項目管理到設計
方法,從技術發展到風土人情,無所不包,對我們互相之間的理解,對團隊的氣氛很有
幫助。我們項目的QA也在適當的時候出現在我們的面前,我們對她的工作只有一些感性
認識。她每次參加會議時,手裡時常拿著一個check list,項目經理准備相應的資料,
回答一些問題,她打著勾,或寫著項目經理的解釋。她給我們做培訓時也很耐心,體現
出很好的職業素養,我至今還在懷念她給我們的幫助。
我從事軟體開發已有九個年頭了,可我現在仍然不能說自己是個合格的軟體工程師
,更不用談什麼合格的管理者。我看到一份報道說,瑞士洛桑一權威機構把中國的科技
綜合競爭力從原來的第十三位調到二十多位,原因是他們調整了一些評估標准,其中有
一條是中國合格工程師的可獲得性非常低。想著弟兄們熬紅的雙眼,四處奔波升級的疲
憊身影,我有一個強烈的願望:快把我們自己升級成合格的工程師吧!
Ⅳ 胖的程序員有妹子喜歡嗎
我對象在某阿里當程序員。還沒見面之前看他空間,哇他胖胖的哎!看起來挺壯哦。見面發現真人比照片瘦阿。算不上胖子,頂多算微胖吧!到夏天發現我的天他肚子超級多肉哈哈!因為這個我經常笑他,說要給他買內衣,還經常玩他的肚子,超好玩,就覺得肉嘟嘟超可愛。笑他看起來有三個月身孕,給肚子取名叫肉團子。我說我會好好照顧肉團子噠,讓它好好長大哈哈。平常在一起擁抱的時候會覺得肩膀很厚實,懷抱很溫暖,很有安全感。我也超喜歡捏他的臉,肉嘟嘟真的太好玩太可愛了。尤其捏的時候他笑起來,眼睛彎彎像月牙,牙齒又很白很整齊,會好想親一大口。他跑起來也可愛阿,像是一個跳動的肉團,身上的肉都在一抖一抖,哈哈哈。
Ⅳ 作為一名程序員,你通常是如何過周末的
作為一個工作了6年的資深程序員,周末基本上已成固定模式,一般都是睡到9點起來,下樓吃個豐盛的早餐。吃完回來上網看看股票,研究下周一買啥以及分析下持倉的股票,當然是邊聽音樂邊看,間或看看豆瓣人人網易微博等。等早餐消化差不多了,就會打打羽毛球或去小區游泳,為了保持健碩有線條的身材,堅持運動健身當然不能少。下午如果有朋友約可以玩玩游戲比如DOTA神馬的,晚上再看看電視電影來放鬆。
Ⅵ 程序員每天都是怎麼過的
早上十點半到單位,花五分鍾寫一下今天的工作計劃,去飲料機買飲料,喝快樂水,打開電腦,看看群里有沒有人反饋bug,沒有繼續翻牆看看國外的新聞。大概十一點多了,群里討論下中午吃什麼,十二點下樓,下午一點回來玩手機+午睡。睡到兩點,起來揉揉眼睛再買個飲料,兩點半開始寫代碼,寫到4.30,兩個小時寫完一天的任務。剩下的時間就測試,休息一下,學習新技術,想想怎麼賺錢,提升自己。六點吃完飯。回來7點,繼續學習,八點下班。出去喝一杯小酒或者奶茶回家。做兼職,學習。睡覺!
Ⅶ java程序員的日常工作包括哪些
打卡,上樓,上班,開電腦,看網頁,關電腦,下班,下樓,打卡,回家。
Ⅷ 程序員有很厲害,不外傳的代碼嗎
所謂程序員,是指從事程序設計、程序開發、程序維護的基層工作人員。
程序員包括兩大類:
1,程序設計人員。
一個程序,就是一個系統。對於一個規模龐大的程序來說其結構非常復雜,各個部分的功能之間的銜接非常復雜,所以需要預先對整個系統的架構進行設計,程序設計人員的主要工作就是如此。
2,程序編碼人員。
編碼,也就是代碼。……程序是由代碼組成的。相應的,程序代碼是由程序員一段一段編輯而成的。……因此,代碼也就成為程序員業績和能力的代表。
編程序、寫代碼,其核心就是演算法。……掌握一套精密有效的演算法,就能把一段程序編好,使其發揮出最佳功效。
從這個角度說,程序員所掌握的最厲害的工具,不是代碼,而是演算法。……代碼對於程序員來說,只是磚石一類的工具,而演算法才是程序的核心。……一段程序,代碼的生成很簡單,但是其中包含的演算法卻是非常深奧的。……因此,設計出一套演算法,對於程序員來說才是最關鍵的事情。
從這個角度說,程序員最厲害的並不是擁有一段代碼,而是掌握一套演算法。
另外,程序員這份工作其實也有不同的分工。並不是所有的程序員都要敲代碼的。……實際上,程序員工作職責涵蓋面非常廣泛。以下幾方面工作,都屬於程序員的工作職責:
1,負責軟體的設計、開發、測試。
2,與客戶進行溝通,明確客戶需求。
3,項目調研、可行性分析。
4,解決軟體開發和維護過程中的各種問題。
5,對本專業領域范圍內的技術動態進行跟蹤分析。
由此可以看出,程序員並不全都是敲代碼的人,還有很多程序員是負責軟體系統相關工作的人。……當然了,雖然因為分工不同,有些程序員不寫代碼,但是他們肯定是能夠看得懂代碼,並有能力修正其中的問題的。……他們當中的每個人都對於某個具體領域的演算法非常擅長,這就是他們的絕招,是他們實力最強的領域。
Ⅸ 大佬們都是怎樣的程序員
編程1.0時代的「IT英雄」
80年代末,22歲的求伯君辭去了穩定的工作,帶著八張寫有列印驅動軟體磁碟來到北京,順利進入了當時頗有名望的四通公司,在四通工作時,他認識了香港金山公司的老闆張旋龍,後者很欣賞他精湛的編程技巧。
求伯君在寂寞中完成了由十幾萬行代碼寫就的WPS。在鍵盤上敲下最後一行代碼時,他沒有一種如釋重負的輕松感,「任何一個產品,做成功以後,不會有什麼感想,所謂感想都是後來總結出來的。」
雖非「十年寒窗無人問,」但確是「一舉成名天下知。」金山WPS在市場迅速取得了成功,並很快引來一批模仿者,這其中的「佼佼者」是雷軍。
「求伯君就是我們的明天。」
雷軍發出了這樣的宣言,然後在求伯君的授權下,牽頭在北京成立了金山開發部,為WPS漢卡提供技術支持,並開始規劃金山未來三至五年的產品路線圖。這個開發部設在香港四通總經理李文俊的一所私宅里,租金是每月幾千元。
雷軍開始打造他的明星級團隊,由於他之前在程序員的圈子裡已有了一定的名氣,很多同行紛紛慕名而來,20多名頂尖程序高手雲集他的麾下。
談及自己對程序人生的看法,雷軍表示,20年前,我是一個程序員,一個軟體工程師,到今天依然是。
「我愛編程這個工作,可以肯定我會幹上一輩子。雖然我沒有打算一生只干這一件事。」
網路程序員的接棒者
1995年周鴻禕研究生畢業,當時很多人想去深圳,那邊銀行也答應給他「鐵飯碗」;當時他想去北大方正,可北大方正給他開的工資是800塊錢,而且必須從最低級的程序員做起,他毅然選擇了方正。
程序員的工作無比枯燥乏味,為此有不少年輕的同事覺得工作重復、瑣碎、沒意思。一些程序員,有的經常打游戲、看DVD;要麼就坐不住,頂多編一個小時就得出去透透風,吸根煙,到處走一走,玩一會兒。而且編程的時候經常容易受到別人的影響,如果有人在旁邊玩游戲、看電影,總會忍不住瞄一眼。
周鴻禕原本也是一個坐不住的人,但為了鍛煉韌性和毅力,找個10000以內的素數表,把它們全都抄下來,然後再檢查三遍,達到不間斷地完成這一工作為止。後來他在編程的時候,比誰都能坐得住,他坐在那裡,就像屁股上被釘住了,除了吃飯打水,可以十個小時一動不動,別人玩,他可以熟視無睹。他不斷地編自己的程序,發現自身存在的缺陷,以及更熟練地掌握各種數據介面的調試和數據調用的應用。通過大量的實踐,慢慢培養對產品、對商業的感覺。
他悟到:沒有寫過十萬行代碼,就別奢談做大項目。他當時就立下目標:自己要寫十年程序。
和數字死磕到底。
網易公司的出現是廣州Internet史上的一個里程碑。為了探求網易發展方向而整天冥思苦想的丁磊在發現Hotmail的時候,眼睛豁地亮了起來。網易准備借10萬美元買一套Hotmail系統,在中國建免費郵箱站點。Hotmail先說不賣,後來答復280萬美元一套,另外加收每小時2000美元的安裝費。於是,丁磊找來自己的夥伴陳磊華研究Hotmail的結構,兩個人最後決定自己做。一個月下來,他們倆的知識大增。幾個夥伴經常為一個技術上的突破興奮得手舞足蹈。
一邊開發免費電子郵箱,一邊想域名。丁磊認定免費電子郵箱要想成功一定得有一個朗朗上口的域名才行。怎樣的域名才好記?丁磊幾乎天天都在想這個問題。凌晨2點,丁磊突然想到可以用數字表示域名,中國數字的發音特別乾脆,而且163、169在中國已經具有了指向Chinanet和電信局以及Internet的含義,上網的人每天都要撥163,對它熟悉得不能再熟悉了。
想到這,丁磊從床上跳了起來,撥163上網,查詢了一下163.net和163.com這兩個域名,謝天謝地,還沒有被注冊。注冊下這兩個域名,丁磊又去睡覺,卻怎麼睡也睡不著了,他越想越美,就又從床上跳起來一口氣注冊了188.net、188.com、166.net、166.com、126.net、126.com等一大串域名。
曾經我和pony一起寫代碼
2015年8月網上首次曝光馬化騰16年前在大年初六寫的代碼。按時間推算,1971年出生的馬化騰,16年前還是一個28歲的小伙。而騰訊公司是在1998年成立,也就是說這條代碼還是在騰訊成立不久時他寫下的。
你說你天天寫代碼會有女孩子喜歡你么?不過Pony現在的老婆也是當初通過QQ聊天而相識,碼農們看到如此勵志的愛情版本不知作何感想呢?
Pony寫代碼的水平究竟有多牛?網上有這么一個段子供大家體悟。
當時我們5個人擠在一個只有四個位置的房間里,埋頭開發,用C++。有人當時負責寫我的一個通訊模塊,我有一個bug,他弄了兩天,沒有一點進展,這小子不知恥後勇,居然下樓去買東西吃。他剛出門,一個眼鏡男就坐到電腦面前,看了看我,輕輕一笑,給我修改了幾個代碼。那買東西吃的孫子回來發現我的BUG居然弄好了,而那個眼鏡男光著膀子,在陽台上捧著一瓶啤酒,冷峻說道:已經幫你弄好了。
編程從娃娃抓起
話說,一個成功男人的背後總會有一個更偉大的男人,具體到小扎童鞋身上,站在他身後的就是——他的父親愛德華·扎克伯格。
這位牙醫老爸在培養兒子對電腦的興趣方面,絕對是功不可沒。
據說,在馬克·扎克伯格出生的那一年,愛德華就購買了他的第一台電腦,成為世界上第一批擁有個人電腦的人,而他的孩子們小時候都是在診所長大,這給孩子們了解和接觸電腦提供了良好條件。
小扎老爸回憶說,他起初只是認為兒子對電腦附帶的一個編程磁碟感興趣,於是就告訴了兒子一些相關常識,沒想到,從那之後小扎童鞋就迷上了電腦。10歲左右,小扎因為游戲開始對編程感興趣。牙醫老爸「扔」了本編程的書給兒子,然後就任其自由發展。
因為熱愛電子游戲,他開始琢磨怎麼能製作出更好的游戲,這是他編程的開始,「客觀地說,我編寫的那些游戲很糟糕,但當它是你自己的游戲,玩兒的時候會有一種滿足感。」
於是,小扎童鞋就——自!學!成!才(財)!
其實,小扎童鞋的前輩「世界首富」比爾·蓋茨先生是13歲開始學編程滴!
還是有不懂代碼的互聯網大佬的
馬雲根本不懂編程,他第一次使用計算機的時候已經過了30歲。
如今,馬雲的身價達到225億美元,但直到30歲時他還認為自己是個失敗者。在接受采訪時,馬雲說自己參加過三次高考,申請過超過30份不同的工作,包括肯德基餐廳服務員,但都被拒絕了。
31歲時,馬雲創建了他的第一家互聯網公司:中國黃頁。這家公司在存續的3年內共獲得大約80萬美元的收入。
35歲時,馬雲創建了阿里巴巴。與亞馬遜類似,阿里巴巴在前三年沒有任何利潤,但後來的故事眾所周知。
我完全不懂技術,更不知道寫代碼;所以我很景仰尊重敬畏技術人員,在阿里從來不敢和技術人才吵架。我這個不懂技術的CEO,成了技術產品研發後的測試體驗者。——馬雲
這個世界上的用力跑步的B其實很多,往北走,他就叫NB,往南走,就變SB了。
而馬雲,雖然他不懂代碼,但是他能告訴你哪裡才是通往NB方向的人,同時讓所有人都相信這件事並為之努力,並且最後無限接近NB。
成長的故事使人熱血沸騰,不管是少年英才還是大器晚成,偶像們無疑給正在編程的Java程序員們帶來無盡的正能量。沒有什麼是不可能的。