第一篇:程序員是這樣煉成的5
程序員是這樣煉成的(5)-海納百川 做程序員要“海納百川”,其實就是建議各位要做一個通才。當然做通才是有條件的,我總結了下前提有三:
1.你已經是一個專才。熟練操作學一門像樣的編程語言。
2.有穩定的工作和收入支持。
3.想得更多的挑戰和機會。
作為項目經理和管理者而言,坦白的說,比較喜歡的還是專才,因為專才聽話,你在他知曉的領域劃一個圈,他能保證幫你完成任務,而且還不給你添麻煩,專才們在各自的領域的努力才會推動項目前進。那在項目中,通才的表現又如何呢?你給他畫一個圈,他會給你考慮到圈子以外的事,甚至跳到別人的圈里子耍弄一番。他就像潤滑劑一樣,提出很多創新的idea,雖然老是給項目管理者帶來不少的麻煩,但是總能讓整個項目更加協調。其實項目管理者討厭他,但又離不開通他,他的鬼點子時常能優化各個結構和模塊。更重要的是當管理者被提升,要選擇接替者一般是一個會顧大局,協調眾多專才的通才。
在所有的項目管理者或者teamlead的心里,肯定都有一種軟件工廠的構思或者布局。大意就是整個部門各個人都各施其職,讓整個軟件開發的過程,就像一個生產工廠一樣運轉。招來的程序員都是生產線上的工人。他們不需要想太多,照任務單做就是??蛻粜枨缶拖癞a品訂單一樣進來,需求分析師開始根據訂單安排我們要生產的產品規格滿足客戶的需求,系統架構是開始把這些規格加工成工廠生產計劃或者價格框架。設計師拿著詳細的設計文檔來往這個框架里面套,剩下的就交給代碼機器人們填充內容,然后到質量工位,檢查貼牌,然后出廠。整個過程每個工位都是專才,在領導的構想中,他們每天都只需要做重復的勞動就好了,如果他們想辭職了,也不會帶走我們全部的生產機密,更重要的是這樣的工人很廉價,找一個替換品不難。但是實際上管理者的春秋大夢很難實現,原因是軟件這個產品具有可復制性,也就是軟件可以copy.在軟件工廠里,生產兩個完全一模一樣的產品是沒有意義的??蛻舻男枨蠖际呛苋嵝缘模看味紩灰粯?,大大小小的改變是避免不了的,管理者們費盡了心血設計的一套生產流程,竟然只能生產一件產品?(去過生產線的朋友應該都知道,一旦生產的流程有所
變化,線上的工人們基本上都不知道怎么開始干活了,要重新培訓上崗,因為他們從來就沒有想過,半成品是從哪來的,又是干什么去,一直都在做機械的勞動。)但是我們的管理者們,他們肯定不會罷休焦頭爛額,會再一次優化生產流程。到下一個新的產品,又會繼續把生長線從頭至尾優化一下。某一天管理者突然頓悟,我們為什么每次都手把手的跟每一個人安排任務,每次都親自設計整個流程,我應該去辦公室里面喝喝茶,上上網。這個時候他會想到誰?毫無疑問,肯定不是專門,他需要的是一個能走通每一個環節的通才。
小時候我經常聽我老爸說:“不要半桶水,不要什么都懂點,什么都不?!边@句話就是用來貶低通才的,在這里我要為通才平凡。我的一個軟件項目曾經出了一次事故,整個汽車的生產線面臨停產,幾次電話支持的效果都不理想,需要一個技術人員立馬去現場解決問題。軟件用delphi開發在windows平臺運行,oracle數據庫,通過進口的硬件,用客戶的線束跟汽車通信,操作員是個新手,電腦硬件是我們提供的,現場環境惡劣。我思索了每個可能出現問題的可能,客戶能提供的有效信息太少,連軟件的日志文件都無法取出來(USB端口封閉,車間信息嚴格保密)。我不可能同時派一個軟件工程師,數據庫DBA,IT,或者硬件工程師奔赴現場。最后我選擇去的是一位軟件工程師,他很快找出來原因,是客戶的線路沒有按照我們的電路圖制作,關鍵線一條線是斷開狀態。我相信他,不是因為他是我們公司最厲害的程序員的,而是他懂技術領域的比其他人要多。其實在整個項目開發過程,除項目經理外,不可能每個人都會一直忙忙碌碌,無論是程序員,測試員,設計師,架構師,你總會有一段時間無所事事,除非你同時加入很多的項目。希望你能在有空的時候關注下你的同事們在做什么?你能不能幫助下或者學習下。做了這么多年的程序員,我們可能都常有一個共同的擔心,這個擔心是什么呢?我們一個項目或者我們公司的的關注點,研發的中心開始轉移出我擅長的技術領域。我們害怕自己發揮不了作用和特長,害怕我們對公司沒有價值,也就是意味著我們漲工資的幅度要比別人小了,或者沒有工資加了。其實這個擔心還不是最要命的,最要命的是,我們要精簡團隊的時候,你才發現自己比較單純,只會測試或者編碼,很多平時做其他工作的同事都能做你的替代者,那么你就要被over了。
說了這么多的苦口婆心勸大家做一個海納百川的通才,大家肯定會問,我覺得我在我的team里面已經算了百事通,萬事通了,我應該怎么繼續豐富我們的技術領域呢? 夜深了,還沒洗澡,我在這里不打算多說了,我請問各位幾個問
題,希望可以為你指點方向:
1.你有沒有想過在公司里,你計劃的職業階梯的各個領導每天都在干什么嗎? 你的boss,你boss’boss…..?(拿破侖不是說過將軍和士兵之類的名言….)
2.你知道你的一個組的同事在干什么嗎,每天?
3.你知道哪幾種操作系統平臺,軟件開發平臺?你會通過別的路徑走到羅馬嗎?
4.軟件工程師你知道你要用的數據是哪來的怎么來的嗎? 數據庫管理員你知道你的數據是去哪里的嗎?為什么人家裝個oracle一下就搞定,我寫了一輩子連oracle的程序連個listener.ora都不會配。
5.程序員知道你開發的軟件,打包后是怎么安裝注冊的嗎? 那般客戶的是什么折騰你的寶貝軟件的嗎?
6.有沒有約個罵你的杰作的客戶出來吃吃飯,聽聽他的用戶體驗?
希望我們都能明白自己缺少的是什么?如果程序員想找一份工作,做一個專才足矣,如果想把事業做好你最好做一個通才。
第二篇:程序員是這樣煉成的12
程序員是這樣煉成的(12)-勇于面對開發失敗
個人一輩子不犯錯很難,作為一個程序員要每天不制造程序錯誤更難。今天跟大家討論如何面對失敗和錯誤,大到一個項目的開發失敗,小到幾行代碼中的bug,都是我們在日常開發中經常要面對的問題。
有一家這樣小公司,測試部和軟件開發部是獨立的兩個部門,有各自的部門經理。老板總是喜歡給下面的員工施緊箍咒,施加壓力,又是能力評估,又事績效考核,于是某一年,在領導們別出心裁的領導下,公司出臺了軟件開發工程師的考核制度,制度明確規定:將程序員開發項目和軟件的測試一次通過率和項目中的bug個數納入開發人員的年終績效考核,由測試部門進行考核和執行。(所謂一次通過率,就是軟件提交測試后,一次通過的概率,一次測試就通過的軟件/提交測試申請的軟件數*100%)新法頒布后,測試部大呼過癮,軟件開發部一片嘩然,第一年的過去了,果然“成績喜人”,全公司的軟件一次通過率達到了97%,無數未經測試軟件被偷偷發布給了客戶。第二年領導們在吸取了第一年的經驗和教訓后,毅然的修改了考核標準,在統計bug個數的同時融入了代碼行數的概念,bug個數/100行代碼 *100%來,進行年終考核,第二年過去了,軟件開發部門戲劇化的以100行代碼0.5的bug數,高效的開發質量給了領導們一個有力的答案。這是一個真實的事故,一個三流的軟件公司的開發水平和軟件質量已經“超越了”微軟和google,我相信現在仍然還有很多公司在進行類似這個的考核。
這樣的小公司把軟件開發和測試部門獨立本身就是一種錯誤,嚴重的影響的開發和測試的時間,兩個部門相互扯皮,項目進展一拖再拖。
其次,兩個部門工作的出發點也錯了,兩個部門的工作重心是交給客戶盡善盡美的軟件產品,而不是為了應付考核和被考核。
第三大錯特錯的是考評制度,一看這樣的制度,多半都是事不關己高高掛起的人出的主意,開發軟件能一次就通過嗎?寫出來的代碼能沒有bug存在嗎?公司要提高產品質量,不把注意力放在項目管理人,開發人員的能力培訓上,開發規范和文檔管理上,想憑借一紙空文,或者員工的主觀能動就達到一個“質”的飛越,實在愚不可及!軟件工程師在把軟件測試N次以后才敢把軟件提交測試,幾行代碼就能完成的完成功能,引用了很多填充行數的無效單元。
最可惡的是,使所有的開發人員,散失了面對失敗和錯誤的勇氣!為什么不改面對呢?一面對就要扣工資和年終獎,誰還敢去面對啊?于是,整個開發風氣就是:開發人員私下放行軟件給客戶成風,不經過任何測試。程序員有了錯誤死有的不承認,有了bug支支吾吾。不但開發水平提升不上去,常見的開發問題還沒有被公開和分享解決,導致產品質量嚴重下降。
大家都應該知道在開發的過程中,越早發現軟件的問題,軟件就更加的完善。而不是藏著掖著,或者添上一抔土把這個“地雷”埋著,留著讓用戶踩去吧。正確的心態是:測試人員越早發現我們開發軟件中錯誤,我們應該越高興,因為不僅可以彌補我們的思維漏洞,讓我們的代碼更加完美,更加減少了我們挽救這個問題的開銷。不敢直面bug的程序員,算不上真正的程序員,如果你沒有闖過雷區,沒有被炸了個人仰馬翻,沒有給你留下深刻的教訓,那么下次你仍然會不知道代碼的隱患在哪?仍然不會學會選擇趨吉避兇之道。仍然會被炸的死去活來。
寫代碼有經驗的人,對異常處理都很有一套,知道大概這一塊要保護起來,那一塊要加一個判斷,這里要驗證下是否存在或已經被銷毀。如果程序員沒有很好的對未能遇見的故障做好防御工作,那么產品帶給用戶的錯誤提示或者死機,將讓客戶連殺了你的心都有。記得好多年前,在一個網吧找了一臺賽揚上網,打開IE,自動彈出網頁,然后就報錯系統級的錯誤了,還無休無止,CPU直接滿上,然后死機,當時又好笑又好氣,你寫個彈窗軟件,偷偷彈就算了,代碼都沒寫好,結果害網吧老板重裝系統:)
看過武俠的都知道,危難關頭,出現異常的時候,才是檢測一個真正武林高手水平的時候,平時的舞蹈練劍都是假把式,最多只能算是基本功,補救危局,化腐朽為神奇才能顯示技藝的高超。有多少人會記恨千年蟲問題是哪個混蛋帶給我們的?但是解決千年蟲問題軟件工程師們都是英雄。所以放心的動手開發
吧,即使你犯了錯誤,被罵成狗熊,也沒有人會記住你。問題被解決后一切釋然。
是人都會犯錯誤,對別人犯錯誤評頭論足的人愚昧。用發布制度來阻止別人放錯誤的人愚蠢,因為害怕放錯誤,而畏手畏腳不敢創新和向前的人則更加愚上加愚。錯誤面前我們要敢于應對:
1、對錯自在人心。
當然你發現問題后,請馬上提出,不要企圖隱瞞問題,越早發現問題,那么損失就越小,抗震救災有黃金72小時,軟件開發也有黃金72小時。我們在解決陳年詬病的時候,通過要花上數倍的時間,來回憶當時的開發心境和設計意圖。
2、接受批評。
如果這個問題跟你有關那么就是你的問題,千萬別動念頭找到一只替罪羊,出現問題后,重要的解決問題,不是秋后算賬,更加不要交纏不清推脫問題。
3、向解決的方向前進。
如果你不能馬上解決這個問題,那么請你把這個問題向解決的方向推進,如果你無法推進問題去解決,那么請不要讓這個問題繼續惡化。讓大家都知道這個問題的存在。
4、尋求幫助。
請不要讓自己的自尊心作祟,拒絕別人的幫助,一個好漢三個幫,放下那所謂的自尊,去聽取團隊和伙伴的建議。
每個人對錯誤的處理方式不同,會產生不同的結果,問題處理的好,會使得團隊更加信任你,甚至比遇到問題之前,更加信任你,要是處理的不好,不但摧毀了大家的信任,還會讓人覺得你難以擔任重任。
第三篇:程序員是這樣煉成的10
程序員是這樣煉成的(10)-現在我們能做些什么?
前天在1+1<2里面談到的那個麻煩今天被解決了,最后還是以AB兩組雙贏為目,相互合作,兩組和二為一,共同完成項目,這個是最好不過的結局了。今天的文章是寫給一位網友的,因為他問了我一個問題:“現在我們能做些什么”?
其實我以前也常有這樣的感覺:茫然,麻木,不知道自己要做些什么?也不知道自己能做些什么? 有時候一天下來,雖然一直在忙碌不停,但是工作都會自動的膨脹到占滿我所有的時間,包括我休息的時間。有時候我常問自己為什么會這樣?是我們的項目計劃出了問題?還是我們的任務量在增加?都不是,其實是時間在我們身邊偷偷的溜走了。我以前做項目的時候有個壞毛病,項目的前80%的時間,被我浪費在所謂需求分析和程序設計上,(實際上沒有花這么多時間,花時間在偷懶上了),到了最后的20%的時候,時間已經非常緊迫,這個時候我會發現編程的狀態完全不一樣。原因是,項目的dead line要到了,我們沒有機會拖延時間了,已經沒有時間讓我拖著熬著不作出決定,沒有時間讓我去組織無聊的項目會議,沒有時間讓我去接聽一些莫名其妙的客戶電話,我更沒有時間呆坐在電腦面前思考如何去躲過這無聊的工作,我必須要全力以赴在第一時間完成工作。其實當這個項目完成時,我再回頭想想,并不是我在最后的時候“蓋茨附體”,“圖靈重生”,而是一種危機感和急迫感讓我的效率提高了兩三倍,讓我在一些徘徊猶豫的問題上花費的時間變少了。我相信很多軟件工程師都有這樣的感觸。事實很明顯,我們的問題是在于我們能做很多,只是我們都沒有做,我們只動嘴,卻沒有動手。
在我的公司有一個這樣的故事,某幾位同事負責一個項目,項目的進展一直都不是很理想,不久公司公布半個月后集體outing的消息(就是集體旅游,還是公費),為了保證項目的完成時間,一些項目拖延的員工需要駐守大本營,繼續奮斗。本已經被我們放棄的那幾位同志,盡然在短短的半個月中,完成了1個月的工作量,提前的把項目完成了??磥硇∮钪姹l的威力真的很恐怖,可憐公司測試部的MM們,被那幾個家伙拖著天天加班:)??梢?,有時候工作雖
然讓我們很頭疼,但我們不應該把問題高高掛起,或者因為官僚作風,或者以召開分析會,技術評估的名義去拒絕問題,其實很多的困難都可以在我們的日常工作的空隙去完成的,沒準是一杯咖啡或者一根煙之后,我們就可以做出選擇。程序員應該學會選擇和面對。
我們不是不知道我們能做什么,而是我們沒有學會面對和抉擇,沒有想去做。附: 有的朋友問我,為什么每次更新文章的時間都很晚,實在抱歉4-6月我有一個開發項目要完成,周一-周四一般都在加班基本上10點才能抵達小窩,請諒解。
程序員是這樣煉成的,每天深夜寫作,已經過了十章完成了一半,雖然很累,謝謝一直支持和鼓勵我的同事和網友們,我不會半而廢的!
第四篇:Java高級程序員是這樣煉成的 - 文庫課程
Java高級程序員是這樣煉成的-文庫課程 Java基礎篇:J2SE基礎入門系列
學習課程:《JAVA語言基礎與OOP入門》
您可以學到:
?
?
? 面向對象OOP入門 Java中的實用類與集合 繼承與多態、接口...參加課程
本課程由北風網資深講師鳳舞煙老師主講,通過理論+上機練習的模式,全面細致的講解了java入門技術,課程涵蓋內容包括:Java中的實用類與集合詳解、以及Java中的oop思想,課程配合2個項目,進行教學,讓學生可在最短的時間內掌握java。22小時18816人已學習
學習課程:《JDK5.0新特性培訓》
您可以學到:
?
?
? 泛型類型及繼承的使用 枚舉的應用 EnumSet和EnumMap 參加課程
JDK是針對Java開發員的產品;自從Java推出以來,JDK已經成為使用最廣泛的Java SDK。JDK是整個Java的核心,包括了Java運行環境、Java工具和Java基礎類庫。
5小時913人已學習
學習課程:《Junit測試驅動開發》
您可以學到:
? JUnit4中的注釋講解
?
? HttpUnit TDD思想 參加課程
JUnit是Java語言事實上的標準單元測試庫。JUnit的易用性無疑是它受歡迎的主要原因。也許你會這樣想:它做的事情不多,僅僅是做一些測試然后報告結果,JUnit應該是很簡單的。
4小時867人已學習
學習課程:《ANT使用全攻略》
您可以學到:
?
?
? Ant屬性Ant數據類型 Ant測試和JUnit Ant的結構化構建 參加課程
ANT是使用最廣泛的Java項目構建工具,具有跨平臺、易于擴展、簡單和快速的特點。它伸縮性好,小到個人項目,大到多團隊J2ee項目,在各種規模項目中都可一顯伸手。并且,最重要的是,它易于掌握。
7小時1033人已學習
Java WEB篇:深入淺出Java web開發之JSP應用系列
學習課程:《深入淺出學Java中級教程》
您可以學到:
?
?
? JSP語法 BBS項目實戰 MVC實例-在線通訊錄 參加課程
本課程重點在項目實戰培訓,主要采用MVC設計模式進行開發。通過本次課程,您能很好地掌握MVC下Web項目設計方法,在JSP+servlet講解中,主要結合論壇項目,讓您通過切實的項目去掌握知識。
33小時5266人已學習
Java框架篇:深入淺出框架實戰開發
學習課程:《2013版Struts2.X深入淺出》
您可以學到:
?
?
? MVC思想簡介 Struts2配置 學生信息管理系統實戰 參加課程
本課程是2013版Struts2.X深入淺出系列,課程配合一個Strus2實現學生學籍管理實戰項目,課程深入淺出,全面解析了Struts2.X的應用,相比市面上的課程,更具有實用性質。
15小時1354人已學習
學習課程:《2013版Hibernate深入淺出》
您可以學到:
?
?
? Hibernate基本配置以及...ORM之映射關聯 Hibernate與struts2的整合 參加課程
2013版Hibernate深入淺出(詳解Hibernate3.X及Hibernate4新特征結合學生學籍管理系統),課程全面講解了Hibernate3.X以及Hibernate4的區別,是目前市面上Hibernate最新的版本,也是目前國內唯一一套講解完整細致的教程。
18小時3009人已學習
學習課程:《2013版Spring3.0實戰開發系列》
您可以學到:
?
? 屬性注入方式以及模擬...Spring與Hibernate集成? Annotation方式實現...參加課程
本課程是2013版Spring3.3實戰開發系列(SSH版學籍管理系統、Ant部署、SSH常見面試題),課程涉及內容包括:控制反轉(IoC)、面向切面編程(AOP)、IOC使用的兩大關鍵技術和一個設計模式(與Hibernate類似)。
14小時1021人已學習
Java實戰篇:項目實戰企業設備點檢系統
學習課程:《J2EE平臺下的企業設備點檢系統》
您可以學到:
?
?
? 需求分析的制作 核心代碼的編寫方式 數據庫設計 參加課程
本課程主要對企業設備點檢系統的開發過程進行講解,企業設備點檢系統是根據企業的實際要求和實際需要進行對設備、備件、人員等方面的素質化信息管理平臺,它可以為企業解決流程、成本、設備的檢修維修等方面的問題。
15小時1503人已學習
查看文檔來源:http://wenku.baidu.com/course/theme/java?fr=search
第五篇:程序員是怎樣煉成的
在成為程序員的道路上,要經歷四個坎坷,讓我們用四個境界來標明他們。
【第一境界】掌握一門或者幾門編程語言,會模仿例子來實現程序代碼,并且讓代碼在計算機系統中運行起來。達到這種境界的人,還不算真正意義上的程序員。而僅僅是掌握了一種或者幾種工具的工匠。他們中的熟練者能夠快速模仿現成的例子,以實現自己或用戶的軟件模塊。
第一境界的特質是對語言工具的掌握,在這個境界的高手,會強調自己對語言如何如何的熟練,因此這個境界可以用“知器”來表示。
【第二境界】第二境界里,我們要學習的是分解問題和推理的技巧,學習用邏輯的語言來精確地表達一個命題。在這個境界里,軟件工作者掌握的是一種分析具體事物的方法,他們不再一味地模仿,而是開始對一個又一個具體問題思考并嘗試用自己的方法來更好的解決。
在這個層次里的“程序員”開始關注解決問題的思路,并且關注分析和推理的數學技巧。他們中的優秀者熟知各種算法善用各種各樣的命題推理來分析并解決問題。他們同樣善于借鑒前人的例子,但是往往能夠根據問題的特點進行有效的改進,并且能夠在嘗試改進的過程中得到創新的成就感和新的經驗。在這個層次里的人,對語言工具的認識比第一境界更加深刻,他們是真正知道如何利用手中語言工具的特點更好地解決問題的人。但是他們并不會強調自己對于語言如何熟悉,也不再熱衷于宣揚掌握如何如何多的語言,在他們眼里,語言僅僅是一種工具而已,真正重要的是分析問題的方法。
第二境界的特質是對具體問題的分析,在這個境界的高手,往往善于從具體問題中分析出合理有效的解決方法。因此這個境界用“格物”來表示。(第二境界里有真正對如何用程序來解決問題經驗豐富的人,這些人能出色地勝任編碼工作,因此我們稱他們為Coder,或者初級程序員。)
【第三境界】第三境界里,我們要學習的是抽象思維和找出事物表象后面的規律。在這個境界里,軟件工作者不再針對一件一件具體的事物來分析,而是嘗試理解事物表象下的本質。在這個層次里的人,開始關注事物的共性,并且逐漸掌握歸納和總結的方法?!澳J健遍_始出現在他們的頭腦里。
“設計模式”是軟件領域的“三十六計”,是經過抽象總結而歸納出來的真正的思想精華。第三個境界的軟件工作者開始接觸并且理解“模式”,學會靈活運用模式和抽象思維來解決“某一類”問題。
第三個境界的特質是對事物本質規律的認識,在這個境界的高手,往往能夠快速地抽象出問題的本質,從而用最合適的方法來解決問題。這個境界我用“明理”來表示。
達到第三境界的程序員,是天生的設計師,他們對問題的本質的領悟能力幫助他們用優美簡潔的代碼來解決問題,他們的代碼中充滿設計思想。他們是真正能夠享受到程序設計的藝術魅力并且充滿成就感的一群人。這個境界里的程序員真正當得起programmer的稱號。
在這個境界之上,依然存在——
【第四境界】第三境界程序員中的極優秀者,并不滿足專家的地位和高薪,他們開始向第四境界艱難地前進。第四境界是程序設計領域的最高境界,要達到這個境界,只需掌握一樣東西,然而這個東西并不是尋常之物,而是許多人窮盡一生也無法得到的這個世界最為深邃的秘密。這樣的東西,叫做“道”。
所謂道,是天下所有規律的總和,是最根本的法則,只要能夠了解道,就可以明了世間所有的一切。掌握了“道”的程序員,才是真正的程序設計大師,能夠創造出流芳百世的作品。對第四境界的程序員來說,“思想”已經已經不再是很重要的東西,因為他們對程序本質的理解已經超越了問題本身。在他們的代碼里,有的只是自然,現實和虛幻的邊界都已經模糊,一個完美自治的系統在剎那見誕生,卻仿佛從亙古時刻起便存在著、運動著,從簡單而質樸的規律中涵蓋者世間萬物的本質。因此,這個境界,我稱之為“成道”。