導航:首頁 > 程序命令 > 程序員重構指南

程序員重構指南

發布時間:2022-10-02 17:55:02

㈠ 為什麼國內程序員都很少進行代碼重構

說到代碼的重構對於國外的程序員提到的比較多,特別是大型的開源工程,基本上一個模塊或者函數的實現會反復的修改,一個文件能被修改成千上萬次,曾經訂閱了linux內核組的郵件,每天的收到的修改文件成千上萬,有時候一個文件都能被修改上百次,對於文件修改最瘋狂的是google的chrome源碼,重構的次數,讓你覺得每天都在重寫但是功能上感覺越來越流暢。為什麼我們周圍的程序員絕大部分時間做的不是這樣的事情。

為啥從直覺上覺得老外的寫的代買質量比我們的要高,我們國內的程序員絕大部分的時間是在趕進度,准確的來講忙著增加功能和修改bug,其實也從側面反映出為什麼國內出不了android以及Linux等影響深遠的 科技 創新,從全球開源代碼的佔比就可以看出,差距還是很巨大的。

為什麼覺得老外寫的代碼比我們的強?

1.國內軟體發展主要階段還在解決有沒有,還遠談不上強大
中國的軟體經過近幾十年長足的發展,已經取得了巨大的成就,特別在互聯網行業已經有幾個巨頭躋身世界前列了,最近炒的很熱的臉書的用戶數據泄密事件,作為當事人扎克伯格,也在論述中提到中國有幾個很厲害的互聯網公司,這說明中國在互聯網領域還是取得了相當大的成就,但是在一些核心的領域,或者門檻很高的領域差別還是非常巨大。

任何事情在發展的初級階段首要考慮的是不是有沒有,所以如同創業初期的公司會選擇短時間內搞出來個產品,哪怕是不成熟的產品,然後快速的投入市場,根據市場用戶的反應同步追蹤問題,等到產品差不多穩定,並且產品在市場上有了一席之地之後,後續的事情就要考慮優化功能,對裡面的代碼或者產品的性能進行全方面的提升,目前國內大部分的互聯網一般比較年輕,還在解決有沒有的問題,相信隨著時間的推移以及國內軟體的發展,也會有大量的高質量的開源框架代碼出來,但這一切都需要很長的時間。

所以國內的程序員大部分時間都是在趕進度和根據需求完成功能代碼。

2.軟體產業的底子還很薄弱, 歷史 積淀還不夠
舉個很典型的例子,現在很多國內的程序員到了30多歲就開始考慮後續的轉型了,因為後面的輕輕人會帶來很大的沖擊,所以大部分的30多歲的程序員都在考慮自己後路,都要考慮轉型的問題。老的有經驗的程序員反而轉型去做管理或者合夥創業了,哪有幾個還在安心搞技術,年齡大了還在搞技術的還被人鄙視,覺得自己沒有出息。

但是在國外寫代碼是一種很常見的職業,和別的工種沒有多大的差異,40,50歲了寫代碼也是比比皆是,做軟體是一種技術工種,經驗的佔比是很高的,所以老程序員寫出來的代碼更加有深度,穩定性更高,一切的根源還是產業的發展不夠成熟,需要時間和 歷史 的積淀,從這方面講國內的軟體整體產業還是比較薄弱,從業人員的整體素質和工作氛圍還有待慢慢的成熟,周圍都是有經驗的程序員在帶領著如何去重構代碼,如何提升代碼的質量,而國內大部分的程序要還是被產品經理鞭策著增加需求和修改代碼。

3.公司的文化差異
目前很多的中國技術公司更多的追求的是短期利益的最大化,在基礎軟體的投入遠遠不夠,畢竟基礎的投入很難短期見成效,在一個具體的場景,有一個產品主體的功能已經實現了,也能在用戶那邊投入使用了,一般的公司很難拿出時間來,讓你做代碼的重構,畢竟這種事情很難直接產生經濟效益。這與公司本身的文化差異有很大的關系,重視的技術或者懂得技術的公司對於這方面相對比較重視,反之就差很多。

小時候課本上就說著我們落後100年,所以高樓大廈不是一天建成的,所以在追趕的道路很漫長,所以承認存在差距,然後努力加倍的去追趕。

Time is money. 以目前國內互聯網的情況,需求應接不暇,程序員基本上都是被需求與業務趕著走,時間非常緊張,在這種情況下,程序員很多時候唯一的選擇就是趕緊實現需求的功能。所以,一個項目下來,代碼基本上都變得非常非常的「垃圾」。

也有很多程序員想過在項目結尾的時候進行代碼的重構,基本上每個程序員也都知道重構代碼的好處,但是並不代表著真正能做起來。還是那個原因,國內互聯網的速度太快,需求應接不暇,做為程序員,基本上沒有時間來做這件事情。

而另外一個原因是跟團隊負責人有關。若團隊負責人能夠意識到重構的好處,那麼他可以為此單獨劃分一段開發時間出來,讓大家分別負責一個模塊進行重構,這都是可以安排做起來的。這也需要團隊負責人如何在需求人員的需求與代碼質量的進度上做一個平衡,進行統籌安排。

最後我想說一個可能很少意識到的原因,那就是人員流動問題。國內互聯網目前人員流動非常的大,尤其是北上深這樣的互聯網發達的城市,基本上是平均兩年就會走一大波人,在這樣的情況下,也會考驗從業人員的職業道德,即我到底要把代碼寫的多好,要把代碼的可維護性做到多好,其實這都是從業人員自身需要考驗的問題,因為完成一個功能很容易,但是要考慮的全面就是另外一回事了。而人員流動帶來的另一個問題就是有一些代碼是很難看懂的,即有些代碼在人員離開後成為了「 歷史 」,無人敢動。這也會阻礙著軟體的重構工作的進行。

從我所講的這幾種情況來看,重構其實是大家都能知道的好處,但是真正實施起來卻又有現實的約束,需要負責人來做這樣的統籌安排與推動。

成本太大
大多數軟體產品的開發都是經過了很多開發人員的付出,如果進行代碼重構需要了解產品、了解框架、了解代碼邏輯,這個過程會花費大量的時間和人力成本,對於企業來說,效益是第一位的,與其花費精力進行效益不大的產品重構,不如去承接更多的項目來的實在。
領導決策
由於大部分企業的老闆都是非技術人員出身,他們更關注效益和客戶,為了符合企業的發展,在進行產品開發時會更多的採用新技術來吸引客戶,花費精力重構代碼不如開發一套新產品或者開發更酷炫的效果更具有實在意義。
代碼規范不足
由於國內互聯網較之國外起步較晚,很多企業發展時間較短,加之人員流動比較大等多方面的因素,很難形成標准、嚴謹、行之有效的代碼規范,所以很多技術人員在開發時都是根據個人風格習慣在開發,等其他人接手代碼時,缺少相關標准和文檔,很難理解代碼邏輯,花時間去了解代碼、重構代碼不如直接推翻重做來的方便。
客戶定製化需求
部分企業創業初期對企業信息化是不夠重視的,只有企業發展到一定程度才會考慮信息化建設,而由於業務的限制,大多數標准化的互聯網產品都很難滿足企業的實際需求,需要進行大量定製化的開發,對於互聯網企業來說,即使產品開發足夠完善,在實際項目中也需要進行擴展,倒不如直接在項目中進行調整。
程序員的發展限定
在國內很少有終身的程序員,大部分都會逐漸轉向銷售、售前、項目經理、產品經理等崗位,而這些崗位則需要了解業務、了解客戶,對技術的需求反而不會太高,所以與其花時間去專研技術不如將更多的精力用在業務和項目層面。

代碼能夠重構對底層框架要求深度掌握、且代碼框架本身要足夠靈活,而國內絕大部分技術人員都是停留在對框架的使用層面、少數可以完善、結合使用,極個別的在做同語言山寨或者換一種語言重寫,能夠對產品體系進行把握、與時俱進擴展實在是鳳毛麟角。隨著國家的經濟提升、IT行業逐漸成熟,在我國這么多IT公司基數下,即便是鳳毛麟角的概率,重視基礎框架、積累萃取、不斷迭代完善的一些技術公司也會慢慢嶄露頭角、涌現出來的。

【國內程序員很少進行代碼重構】,這個現象雖然沒有什麼調查統計,不過我寫了十多年代碼,也發現身邊的程序員大多數是這樣的,【寧可寫新的代碼,也不願意重構老代碼】。下面我也談談自己的看法:

系統沒有問題,就是最大的功勞
我見過的大部分的傳統行業的軟體公司或IT部門是這樣的(互聯網公司不太了解),「只要系統穩定,那麼就是最大的功勞」,而保持系統穩定最好的方法是什麼? 就是盡可能的不要動系統!

可能很多人不能理解,但很多公司確實是這樣,甚至公司對項目的考核標准中,項目有什麼突破的權重很低,是否有生產事故的權重很高。所以很多「機智」的項目組成員,千方百計的不接需求,或者把需求推給別的項目組。在這種單位裡面,別說重構了,新代碼都寫的不多。

測試覆蓋度太低,重構代碼沒辦法保證質量
代碼重構,很重要的一個問題:「重構後的代碼誰來保證?如果影響到原有的功能怎麼辦?」

這時候很有效的一個方法,是使用各種自動化的測試來保證重構代碼的質量。

但是,大部分公司,不管是單元測試還是其他的自動化測試,都是不健全的,甚至是沒有的。所以只要不是被逼不得已,程序員寧可重新寫一個方法,也不願意重構之前的代碼。

其他

進行代碼重構不是一件容易的事情,務必需要對需求熟悉;對代碼 歷史 變更熟悉;對代碼框架,模塊熟悉;對產品更新迭代做好風險把控,時間成本把控……

進行代碼重構需要能力非常高,責任心非常強的人進行,甚至需要一個優秀的團隊完成。

為什麼要代碼重構?理由一大堆,我認為主要有兩條,一是原代碼已不適合擴展新需求,二是原代碼已擁腫不堪,亂七八糟。

為什麼很少重構?除了上述分析外,還有其他因素,如人員流動快,原團隊原作者早已不知何去何從了。又如需求和業務繁多,完成工作開發都累得半死不活,日理萬機似的,哪有時間和心情重構?

謝謝大家。

1.國內程序員技術能力不足以進行代碼重構

大量的軟體從業人員連編程規范都不熟悉,怎麼可能做代碼重構?更多的人只會寫寫hello world,只會拷貝粘貼小段代碼,連if else這種語句都寫不清楚甚至漏掉邏輯,連面向對象的編程思想都沒有,談何重構?

2.國內程序員的溝通能力說服能力一般。

進行軟體重構,必須說服經理,讓經理相信重構會帶來軟體質量的提高和故障率的逐步降低,這樣經理才會安排人力進行重構。

3.國內軟體開發更注重bug的及時解決

國內軟體開發大量的人力被分配到解決短期的某個bug,沒人抽時間思考如何長久的徹底的解決軟體缺陷,其實解決bug不重要,找到軟體的缺陷或者性能低下的地方才重要,這些才是重構的點。國內加班加點疲於奔命式的開發,沒人考慮bug率是否長期內能夠收斂,總是先解決眼前的問題再說,處於一個永遠解決bug的死循環里。

這種工作模式是愚蠢的,不是smart的。

軟體開發,一定要動腦子,不要蠻干,這不是耕地,力氣大就耕的多。

重構代碼的目的說白了,就是讓軟體開發人員更自由。

謝謝樓主的問題,這是一個我特別想回答的問題?

為什麼?因為,第一,我是一個對代碼有潔癖的人,受不了一坨,一坨那樣的代碼。第二,我是一個踐行Clean Code 的人,給大家我主要負責的一個項目的一組數據(java),總代碼量20萬行,UT coverage(單元測試代碼覆蓋率)82%,代碼重復率0.5%,代碼規則(sonar)違反(Code issue)0,甚至連最低的違反都沒有。

也正是因為我的項目在實踐Clean Code上的數據,我經常去給不同的團隊做分享,也對團隊對這個重構不太上心有一些理解。

大致以下幾個原因。

第一,也是最多的,交付壓力,大部分人都會抱怨,你看我們有這么多新功能,還有那麼多bug,根本忙不過來,哪有時間重構?

第二,重構意識不足,老闆,管理人員總是希望這個我們要有,那個我們也要實現?為什麼?因為別人有,別人有我們沒有可能會造成用戶流逝。即使有一些有見識的程序員和老闆反應這個重構問題,但是重構從來不是高優先順序的。畢竟,現在的軟體的生命周期可能很短。

第三,人員流動性大,這個是我聽過最奇葩的一個理由,我問一個來聽培訓的哥們,說你代碼寫成這樣,以後怎麼維護?這個哥們說,我也知道難維護,但我明年就跳槽了。

第四,設計上就不需要重構,曾經給一個保險公司做分享,我本人也是做金融相關產品後台的,我就問你們這樣寫代碼,可能三四年以後就非常難維護了,還是要盡快重構。他們的回答是,我們不重構,我們只重寫。什麼意思那?就是一個系統,三四年以後在寫一遍。

第五,程序員本身的問題,可能第一寫單元測試,修改命名,修改代碼結構,是一件很沒有成就感的事情,也是一個沒有多少附加值的事情。畢竟現在你去找工作,這個代碼質量方面的問題會問得很少。

第六,我見過的我不能反駁的一個回答,我的英文太差,不能很好的命名,而我也不想學英文。

第七,反正我已經實現了功能。

最後,用一句話來提醒程序員們,重構是多麼重要。

出來混遲早要還的,挖了坑遲早要填的。

在國內,【重構】這件事是程序員最喜歡做的事,而不是公司喜歡做的事。

但程序員喜歡並不能影響公司的決策,所以,國內的現象就是軟體系統很少有重構。

其根本的原因在於,國內的公司所推出的系統大多沒有重構的價值。

1、國內的互聯網公司存在這樣一種快節奏,那就是發現一個有價值的創意,就馬上進入開發,開發完成立即上線,並立馬推廣使用。這是一種快速試錯的模式,一旦發現系統在 社會 中沒有引起反響,那就馬上把系統再下線。這種情況下的系統哪來的重構價值呢?

2、即使一個系統上線成功了,也積累了大量的用戶,貌似為了系統的穩定性和性能,可以有重構的機會。但事實上不是,國內公司仍舊不會選擇重構,因為重構帶不來新的價值。所以,公司多數都會在系統上添加新的功能來吸引新的客戶,而不會考慮重構現有系統。

總得來說,引起重構的原因在於能夠有持續的價值。沒有價值的事,企業當然不會做,僅是程序員的一廂情願而已。

你只是見到了你所在的公司現象,不代表所有,也不能代表大部分的。

代碼重構還是存在的現象

代碼設計爛,經常出問題、擴展麻煩、維護心累、數據混亂、結果不清醒、模塊劃分混亂

就可能要考慮到重構了

呵呵,

老大說:

你趕緊去修復一下這個bug,

還有幾個功能沒有實現,加班搞一下,

pm 說:

這個功能改一下,

還有這個,界面重新調整一下,

這個業務流,現在不一樣了,

客戶需求需要多幾個功能,

老闆說:

這東西下周能出來嗎?

㈡ 如何成為一個程序老手,新手必知的40個小技巧

老鳥和新手的一個很大區別來自於debug的能力。其中最主要又可以從兩方面看出來:

從高層往底層找錯。

科學方法。

0.重構是程序員的主力技能。

工作日誌能提升腦容量。

先用profiler調查,才有臉談優化。

注釋貴精不貴多。杜絕大姨媽般的「例注」。漫山遍野的碎碎念注釋,實際就是背景噪音。

普通程序員+google=超級程序員。

單元測試總是合算的。

不要先寫框架再寫實現。最好反過來,從原型中提煉框架。

代碼結構清晰,其它問題都不算事兒。

好的項目作風硬派,一鍵測試,一鍵發布,一鍵部署; 爛的項目生性猥瑣,口口相傳,不立文字,神神秘秘。

編碼不要畏懼變化,要擁抱變化。

常充電。程序員只有一種死法:土死的。

編程之事,隔離是方向,起名是關鍵,測試是主角,調試是補充,版本控制是後悔葯。

一行代碼一個兵。形成建制才能有戰鬥力。單位規模不宜過大,千人班,萬人排易成萬人坑。

重構/優化/修復Bug,同時只能作一件。

簡單模塊注意封裝,復雜模塊注意分層。

人腦性能有限,整潔勝於雜亂。讀不懂的代碼,嘗試整理下格式; 不好用的介面,嘗試重新封裝下。

迭代速度決定工作強度。想多快好省,就從簡化開發流程,加快迭代速度開始。

忘掉優化寫代碼。過早優化等同惡意破壞;忘掉代碼作優化。優化要基於性能測試,而不是糾結於字里行間。

最好的工具是紙筆;其次好的是markdown。

leader問任務時間,若答不上來,可能是任務拆分還不夠細。

寧可多算一周,不可少估一天。過於「樂觀」容易讓boss受驚嚇。

最有用的語言是English。其次的可能是Python。

百聞不如一見。畫出結果,一目瞭然。調試耗時將大大縮短。

資源、代碼應一道受版本管理。資源匹配錯誤遠比代碼匹配錯誤更難排查。

不要基於想像開發, 要基於原型開發。原型的價值是快速驗證想法,幫大家節省時間。

序列化首選明文文本 。諸如二進制、混淆、加密壓縮等等有需要時再加。

編譯器永遠比你懂微觀優化。只能向它不擅長的方向努力。

不要定過大、過遠、過細的計劃。即使定了也沒有用。

至少半數時間將花在集成上。時間,時間,時間總是不夠。

與主流意見/方法/風格/習慣相悖時,先檢討自己最可靠。

出現bug主動查,不管是不是你的。這能讓你業務能力猛漲、個人形象飆升; 如果你的bug被別人揪出來.....呵呵,那你會很被動~≧﹏≦

不知怎麼選技術書時就挑薄的。起碼不會太貴,且你能看完。

git是最棒的。簡單,可靠,免費。

僅對「可預測的非理性」拋斷言。

Log要寫時間與分類。並且要能重定向輸出。

注釋是稍差的文檔。更好的是清晰的命名。讓代碼講自己的故事。

造輪子是很好的鍛煉方法。前提是你見過別的輪子。

code review最好以小組/結對的形式。對業務有一定了解,建議會更有價值(但不絕對)。而且不會成為負擔。管理員個人review則很容易成team的瓶頸。

提問前先做調研。問不到點上既被鄙視,又浪費自己的時間。

永遠別小看程序媛(╯3╰)!

㈢ 程序員的軟技能書籍有哪些值得推薦

1. 《深入理解計算機系統》:(美)布賴恩特 (Bryant,R.E.) 等著。 以程序員的角度和全局的視角來審視計算機系統,涵蓋從數據表示到程序運行、系統交互的各個方面,非常值得深讀!
2. 《Writing solid code》: (美) Steve Maguire 著。 想寫出 bug-free 程序的上佳讀物之一。相應讀物的還有《高質量程序設計藝術》(code quality: from a open source perspective) , 《代碼整潔之道》(Writing clean code),《編寫可讀代碼的藝術》(The Art of Readable Code)
3. 《Thinking in Java》:(美)Bruce Eckel 著。 Java 語言編程的推薦教材。 《Effective Java》(Joshua Bloch著) 作為進階書籍。
4. 《設計模式——可復用面向對象軟體的基礎》:(美)「四人幫」著。 設計模式的必讀書籍(亦可用於參考)。
5. 《實現模式》: Kent Beck 著。 非常有益的面向對象編程經驗談。
6. 《重構: 改善既有代碼的設計》: Martin Fowler 著。 作為面向對象編程的收藏書籍,隨時可參閱。
7. 《Test Driven Development: By Example》: Kent Beck 著。 測試驅動開發的優秀入門書籍
8. 《MYSQL必知必會》: (英)Ben Forta 著。 人民郵電出版社。薄薄的一百頁左右, 快速上手和使用 mysql 資料庫。
9. 《正則表達式必知必會》: (英)Ben Forta 著, 楊濤 / 王建橋 / 楊曉 譯。人民郵電出版社。 薄薄的一百頁左右, 清晰的闡述, 適合正則表達式的快速了解和上手。
10. 《Java TCP/IP socket 編程》: (美)Kenneth L.Calvert, M.J. Donaboo著, 周恆民譯。 非常好的 Java tcp/ip socket 入門讀物, 詳細地講解了相關的知識點,有相應的實例為佐, 並且對底層、性能等方面也作了一定的闡述。
11. 《Ubuntu Linux 指南:基礎篇》: Mark G.Sobell 著。 學習和使用 Linux 系統的優秀入門讀物, 建議未接觸過 Linux 系統的童鞋從 Ubuntu 起步。
12. 《Perl 語言入門》(第五版) : Randal L.schwartz 等著, 盛春等譯。 Perl 入門的推薦教程。通俗易懂、詳盡得當。
以上,祝你學習愉快!

㈣ 程序員應該讀什麼書

《軟體故事》([美] 史蒂夫·洛爾)電子書網盤下載免費在線閱讀

資源鏈接:

鏈接:https://pan..com/s/13OInH9h3qa6ZZhcbo-GoZg

密碼:g82l

書名:軟體故事

作者:[美] 史蒂夫·洛爾

譯者:張沛玄

豆瓣評分:7.2

出版社:人民郵電出版社

出版年份:2014-7

頁數:259

內容簡介:

「本書語言流暢細膩,讀起來如沐春風。它猶如一部波瀾壯闊的計算機史詩,講述了軟體革命的恢弘歷史,以及中流砥柱們的光輝事跡。故事並不是斷斷續續的,因為作者採用了微型傳記的形式……他把歷史寫成了優美的散文,生動迷人又嚴謹有度。」

——David Gelernter,《紐約時報》

「這是一本給人啟迪的著作,完美地展現了想像力的巨大力量。如果你想像得到,並把它編成代碼,那麼一定能夠改變世界!」

——Boston Sunday Globe

「本書把難懂的技術概念講解得通俗易懂。對於那些對計算機內在結構好奇的人,這是一本能讓其豁然開朗的好書。計算機科學界的前輩John McCarthy曾向作者抱怨過新聞記者的無知,本書就是作者對此作出的回應……與計算機行業相關的所有新聞記者都應該讀一讀這本書。」

——《紐約時報書評》

「這不是一本通常意義上的書,而是一部史詩。它講述的不是技術,而是那些設計編程語言和計算機軟體的名人的故事……本書內容清晰易懂,簡明扼要。軟體工程讓程序員不需要材料和工具也能有所創造,他們為此興奮不已。他們能夠憑空創造新的事物,唯一的限制就是自己的想像力。」

——《國際先驅論壇報》

「如果本書作者是一名程序員,那麼他寫的代碼一定清晰有序,不需要復雜的結構或者奇怪的快捷方式就能跳轉到正確的子程序上;他的寫作風格也是如此。本書化繁為簡,讓讀者與數學專家、橋牌高手、象棋大師、特立獨行的科學家、批判傳統觀念的人,以及掀起軟體革命的程序員們進行了一次愉悅的會面。」

——《新聞周刊》

「本書展現了技術締造者們面對的挑戰,是本曠世傑作。」

——《自然》周刊

聆聽軟體行業發展的精彩故事

領悟軟體巨擘的深邃思想

放飛想像力,通過編碼改變世界

Steve Lohr(作者)《紐約時報》高級作家和技術通訊記者,U .S. v. Microsoft一書合著者,現居住於紐約。

張沛玄(譯者)1992年畢業於北京理工大學飛行器工程系固體火箭發動機專業,獲得工學學士學位。2001年重回母校管理與經濟學院就讀,2004年畢業並獲工商管理碩士學位。早年他曾從事軟體開發,擔任IT公司高級管理工作多年。

作者簡介:

Steve Lohr,《紐約時報》高級作家和技術通訊記者,U .S. v. Microsoft一書合著者,現居住於紐約。

㈤ 初級程序員該如何逆襲

初級程序員該如何逆襲
如何在工作中成長
其實你想問的是這些出去程序員並不可怕
只要你有一顆上進的心
去問多去學去接觸
慢慢的就會發現一大牛越來越近
不要害怕去接觸一些新的東西
慢慢地去適應它
在工作中積累
在工作中學習
不懂的就去問那些大牛
慢慢的你也會成為他們中的一份子

㈥ 怎麼成為一名程序員,要從哪裡開始學起,先學什麼在學什麼

答:

首先你要清楚程序員也分很多種,從語言分,有C,C++,C#,JAVA,Delphi等等,你要考慮好弄自己向哪部分發展。

  1. 一般如果沒什麼理解可以從C語言學起,因為C語言比較貼切於機器語言,大學裡面一般也都是先學C的,學好了C語言,可以觸類旁通,更容易學其他的語言。

2.Java據說是現在最熱門的(所有程序員都覺得自己用的那個語言最牛逼),IOS或者android學了可以做手機軟體哦,Delphi和C#是用控制項拖出自己想要的結果,然後在後台寫代碼的,不過有人說Delphi相對落伍了,但好些大公司還是在用Delphi來搭框架的。

3.選定好語言後,如果覺得自己理解能力動手能力超強的話,自己買本入門的書,或者網上看些教學視頻,邊看邊實踐。不過這個對於初學者來說真的挺難的,因為第一次的話,可能連環境都搭不好,用來編程的軟體對初學者來說還是蠻麻煩的一種軟體,不是這個不行,就是那個設置錯了,或者連一些基礎的窗口啊工程啊項目啊的概念都沒有,網路起來又要答案一個一個看,浪費時間。而且還要自己搭資料庫啊什麼的,真的很難。有老師教的時候,還能掛科一大片的。不過入門了,之後就簡單了,自己隨便找本書,學學代碼用法啊,照著打就可以了。

拓展資料:

程序員(英文Programmer)是從事程序開發、程序維護的專業人員。一般將程序員分為程序設計人員和程序編碼人員,但兩者的界限並不非常清楚,特別是在中國。軟體從業人員分為初級程序員、中級程序員、高級程序員(現為軟體設計師)、系統分析員,系統架構師,測試工程師六大類。

崗位職責:

1、對項目經理負責,負責軟體項目的詳細設計、編碼和內部測試的組織實施,對小型軟體項目兼任系統分析工作,完成分配項目的實施和技術支持工作。

2、協助項目經理和相關人員同客戶進行溝通,保持良好的客戶關系。

3、參與需求調研、項目可行性分析、技術可行性分析和需求分析。

4、熟悉並熟練掌握交付軟體部開發的軟體項目的相關軟體技術。

5、負責向項目經理及時反饋軟體開發中的情況,並根據實際情況提出改進建議。

6、參與軟體開發和維護過程中重大技術問題的解決,參與軟體首次安裝調試、數據割接、用戶培訓和項目推廣。

7、負責相關技術文檔的擬訂。

8、負責對業務領域內的技術發展動態進行分析研究。

網路詞條 程序員

㈦ 程序員需要具備的基本技能,你都知道嗎

下面是程序員所應該具備的基本職業技能:
基本技能 技能描述
閱讀代碼 這個技能需要程序員能夠具備讀懂已經存在的代碼的能力,這樣的能力可以讓程序員分析程序的行為,了解程序,這樣才能和開發團隊一起工作,繼承維護或是改進現有的程序。
編寫程序 編寫程序並不包括程序設計。不要以為編程是一件很簡單的事情,很多程序員都認為編程只需要懂得程序語言的語法,並把設計實現就可以了。但是這離編寫程序還遠遠不夠,使用什麼樣的編碼風格成為編寫程序員最需要具備的基本技能。能否使用非常良好的編程風格直接決寫了程序員的級別。
軟體設計 這一能力直接決定了需要吏用什麼樣的代碼技術達到怎麼樣的功能,而系統架構設計直接決定了軟體的質量、性能和可維護性。並不是所有的程序在這一方面都非常優秀,但每個程序員都需要或多或少的明白和掌握這一基本技能。
熟悉軟體工程 每個程序員都應該明白軟體工程是什麼東西,都應該知道,需求分析 設計,編碼測試,Release和維護這幾個階段。當然,幾乎所有的人都知道這些東西,但並不是每個人都很清楚這些東西。現在很多高級程序員都會混淆「需求規格說明書FS」和「概要設計HLD」。另外,程序員還需要知道一些軟體開發的方法論,比如:敏捷開發或瀑布模型。
使用程序庫或框架 一個程序員需要學會使用已有的代碼,無論是標論的程序庫,或是第三方的,還是自己公司內部的,都需要學會做。比如:C++中,需要學會使用STL,MFC,ATL,BOOST,ACE,CPPUNIT等等。使用這些東西,可以讓你的工作事半功倍。
程序調試 程序調試是分析BUG和解決問題最直接的能力。沒有人能夠保證程序寫出來不用調試就可以運行正常 也沒有人可以保證程序永遠不會出BUG。所以,熟練使用調試器是一個程序員需要具備的基本技能
使用IDE 學會使用IDE工具也會讓你的工作事半功倍。比如,VC++,Emacs Eclipse等等,並要知道這些IDE的長處和短處。
使用版本控制 一定要學會使用版本控制工具,什麼叫mainline/trunk,什麼叫tag,什麼叫branch,怎麼做patch,怎麼merge代碼,怎麼reverse,怎麼利用版本控制工具維護不同版本的軟體。這是程序員需要明的的軟體配置管理中最重要的一塊。
單元測試 單元測試是每個程序都需要做的。很多單元測試也是需要編碼的。一定要學會在xUnit框架下進行單元測試。比如JUnit, NUnit, CppUnit等等。
重構代碼 每個程序員都需要有最基本的能力去重構目前已有的代碼,使代碼達到最優但卻不能影響任何的已有的功能。有一本書叫《軟體的重構》 每個程序員都應該讀一下
自動化編譯 程序員需要使用一個腳本,其能自動化編程所有的工程和代碼,這樣整個開發團隊可以不停地集成代碼 自動化測試,自動化部署,以及使用一些工具進行靜態代碼分析或是自動化測試。
當然,還有很多的基本技術也是非常重要的,比如,與人的溝通能力,語言的表達能力,寫作能力,團隊協作能力,適應變化的能力,時間管理能力,多任務處理能力,自我學習能力,故障處理能力,等等,等等,這里只是列舉了和技術相關的能力,這些是程序最最最基本的能力,只要是程序員就必需要有的能力。

㈧ 程序員,如何少走彎路,成為一名技術專家或者架構師

#1 專業技能

@首先當然基礎知識要扎實,一些經典的專業書籍一定要看。比如,設計模式,演算法,數據結構,所在領域的編程語言的專業書籍等.關於不同的能力階段,需要讀取什麼類型的書籍,請參考ThoughtWorks(中國)程序員讀書雷達,每年都有更新。
@作為架構師,review別人的代碼並給出合理的建議是基本功,比如變數或者方法命名的規則;所以代碼大全,重構,改善既有代碼的設計,Clean code 等等肯定需要看。
@ 對於某一個技術領域或者業務領域,一定要有一門技術是精通的,因為這樣你才能體會到以後遇到自己不懂的技術的時候,如何能夠快速成為這一方面的行家。
@ 平常有時間一定要多多進行代碼的訓練,也就是Martin Flower常說的Kata練習,這個比喻來自於跆拳道,跆拳道選手一般每天都會找一些基本的招式,進行反復的練習,從而訓練肌肉的條件發射,那麼對於我們程序員來說,一定也要進行持續的編程訓練,比如上面提到的那位同事,給的建議是,雖然把大部分時間花在了溝通和協調上面,沒有機會寫代碼,但是自己一定要利用業余時間,自己找一些例子來聯系,比如,參與開源項目,或者到網上去搜索一些大師的經典Kata聯系的例子;或者看工作裡面是否有一些小工具,是否能夠提升自己的溝通效率,當然已經天天寫代碼的童鞋們除外。請參考我轉發的另外一篇文章和另外一篇介紹能在線練習Kata code的文章.
@ 最好能夠在精通一門語言的基礎之上,學習其他的語言,從而站在一個更高的角度,對於程序語言有一個更高層次的抽象認識,比如,學了Java之後,可以學學Ruby,Groovy,C#等等,其實語言之間都是相互借鑒的,比如Lamba表達式,連java也慢慢的向函數式編程方向靠攏。
@ 如果有時間,一定要自己維護一個博客,既然選擇了架構師,就決定了自己以後不僅僅是一個技術專家,同時也要成為一個佈道師,為企業組織或者社會上的其他IT同行們貢獻自己的一些微薄之力。
@ 多參加一些社會上舉辦的軟體專業會議或者活動,了解當前比較流行的技術和框架。
@ 這條不提倡,我以前有一個同事,幾乎每年都要更新簡歷1~2次,目的不是真正的換工作,而是通過面試得到當前市場上大部分公司正在使用什麼技術和框架。對於這條,請慎用!!!!
@如果有結對編程的機會一定要好好珍惜,特別是和高手大拿一起結對的時候。
@如果大家上面都已經做的非常的好了,這個時候可以看看架構設計方面的書籍,比如企業應用架構模式,架構之美等等。
@ 去51Job上搜索架構師這個職位標簽,看看不同行業的企業對於架構師的技術要求和標准,然後結合自己當前所處的行業和你自己的技術特點,比如擅長前段或者後端,有選擇性的學習一些自己感興趣的技術或者方法。
@ 關於常用的網站,沒有定論,筆者主要是根據搜索的結果去發現適合自己的網站,所以需要讀者掌握一定的搜索的技巧,筆者一般喜歡用英文搜索,這樣的話資料比較全也比較新;如果下載電子書的話或者查看博客的話 一般會首選CSDN;如果是解決工作中的問題的話,在StackOverFlow上面被解答的概率是最大的,此外平常自己也需要去積累一些自己感興趣的技術的人氣比較旺的網站列表,比如一般和Window相關的就是MSDN;如果對Java入門比較感興趣,可以看看這個網站。對於一些開源的框架,一般都會有想對應的社區,google一搜索,很快就能找到。另外一個德國人寫的博客的非常的精緻,如果對Eclipse插件開發特別感興趣的朋友們可以去參考它。
@大家如果時間和精煉允許,最好能在Github開源和分享自己平常寫的代碼。這樣一方面可以熟悉git用法,另外一方面也可以把自己平常練手的代碼免費保存,何樂而不為呢?
@如果大家平常遇到什麼問題,可以到StackOverFlow上面去尋找答案;當然,如果你能自己注冊一個StackOverFlow賬號那是最好不過的,這樣不但可以提問,還可以幫助別人,同時上面還有很多工作簽證的工作機會。
#2 軟技能(現代社會,一個合格科學家不僅僅是某一個行業的技術專家同時也是一名專業的社會活動家)

@遇到問題,一定要多想,遇到一個問題,如果解決了,就要反思為什麼能夠解決,如果以後遇到類似的問題,
如何更快速的解決。
@英語的重要性,不言而喻,因為現在很多新技術的框架的中文文檔非常的少,即使翻譯成中文,也是二手的了(國內自己的開發的一些開源框架除外)
@ 有時間的話,看一些溝通方面的書籍,如果有參與溝通的機會的時候,一定要想如何把溝通做的更好更舒暢。
@ 如果有機會的話,可以參加PMP的考試,關於如何備考PMP,請大家參閱另外一篇文章:如何備考PMP,但是如果不想參加的話,也沒有關系,至少要涉獵到項目管理方面的書籍,否則以後如果成為架構師之後,客戶或者管理者給你說一些項目管理上一些專業術語時,到時候就會一頭霧水。
@架構師其實從某種意義上就是一種角色,而不是一種職位。一定要時時刻刻保持空杯心態。
@一定要有一顆保持飢渴學習和耐得住寂寞的赤子之心。
@當前的技術節湊是非常快的,特別是結婚以後又有小孩了。一定要好好的利用自己碎片時間,對於一些技術,當時讀不懂不要緊,但是一定要記住和了解其關鍵詞,這個主要是為了拓寬自己的視野。比如,當前你想自己開發一個系統,結果已經有一個開源框架實現了,而且還很穩定,這個時候,自己就沒有必要重復發明輪子了。
@與不同的技術、編程語言、設計模式和結構等(甚至是它並沒有在日常中給予你直接的幫助)打交道。你永遠都不知道這些知識是否會在未來派上用場,但是對你絕對是有益無害。
@在工作中,能夠幫助到別人解決技術難題,一定要盡量全力以赴,因為這不但可以贏得同事的好感和口碑,同時也能增長你解決問題的經驗和提高你的技術思維能力
@ 一定要掌控好自己的時間,對工作沒有幫助的會議,能不參加盡量不要參加,當然,企業安全,公司規章制度如果是強制性的,該參加還得參加,但是如果沒有工作效率和扯皮的會議,盡量避免參加。
@程序員要耐得住寂寞,要在自己的領域深挖,不能看啥火,就學啥,一定要有自己的想法和判定,如果決定不了,可以向資深的同事或者朋友溝通。
@盡量參與到項目中的編碼,因為架構師不能與項目脫離。
@ 如果有機會可以鍛煉一下自己在大眾環境下的演講和PTT的能力。
@有機會多做知識分享,因為你一旦分享了知識,你就會對這門技術有深刻的印象,同時也能樹立在同事中的良好的技術形象,從而贏得更多的專家影響力而不是職位影響力。
上面只是我當前能想到的,知易行難,知道了上面的一些經驗,並不代表年輕程序員們就能馬上成功,畢竟這需要一個鳳凰涅槃和實踐的過程,但是肯定能幫助有志於於此的年輕程序員們少走一些彎路,限於筆者水平,如有總結不恰當或者不到位的地方,還望批評指正。

㈨ 做一個程序員需要達到什麼樣的水平

辨別一個程序員的水平唯一的辦法就是看 產出質量。
演算法和數據結構都是錦上添花,並非是雪中送炭。而一個程序員的水準大致上是可以通過之前的代碼質量估算出來的。【如果你可以獲得此程序員的真實編寫的代碼,比如原創的Github】。
舉個栗子:下面是我最近在單位一個同事寫的代碼,Java語言
private boolean checkProportions(String str, Integer grades) {
String proportion = str;
for (int i = 1; i < grades; i++) {
String st = proportion.substring(proportion.lastIndexOf(",") + 1);
if (st.equals(""))
return false;
proportion = proportion.substring(0, proportion.lastIndexOf(","));
}
if (proportion.equals(""))
return false;
str = str.replace(".", "");
str = str.replace(",", "");
for (int i = str.length(); --i >= 0; ) {
int chr = str.charAt(i);
if (chr < 48 || chr > 57)
return false;
}
return true;
}
大致上的功能就是將 1,2,6.2,4,1 的字元串判斷每一 『,』內是數字,而且長度符合規定
這樣的代碼看上第一眼就覺得非常的醜陋。所以在我的要求之下,進行了一次重構。
private static boolean checkProportions(String str, int grades) {
String[] proportions = str.split(",");
if (proportions.length != grades) {
return false;
}
for (String s : proportions) {
if (!NumberUtils.isNumber(s)) {
return false;
}
}
return true;
}
這里看上去差不多就Ok。這樣的代碼其實也並沒有用到什麼數據結構和演算法,就是很簡單的字元串處理。

實際情況:在我們寫的絕大多數的代碼裡面,大部分屬於業務邏輯,極少部分的代碼需要使用到演算法和數據結構,在這樣的情況下,我們能使用的到的技能最為關鍵的是讓代碼如何更加合理。而讓代碼更加優秀的方式是通過千錘百煉的重構,而重構是極大的考驗一個程序員耐心和能力的東西。
質量的范圍廣泛,我從下面幾個小方面聊聊。
出貨能力:如果一個程序,演算法再精妙,不能出貨都是扯淡,我看過某某大神,演算法溜得很,但是一個人完全做不到按照工程需要把事情給做完。
優化能力:並沒有一個程序是一步到位的,一個工程的交出去可運行了,那才是第一步,很多時候隨著業務的增大,對性能的要求越來越高,有一定對於代碼優化的能力也是比較重要的。
調錯能力:項目越大,遇見的Bug也就是越離奇,這個時候需要強大的Debug能力,找出那個最為關鍵的錯誤點,甚至於追溯底層框架的源碼。
技術掌控:你項目能用Spring,Hibernate等等框架,但是有沒有想過,這些技術你真的可以掌控么,如果有一天你的框架版本需要升級,真的做得到么?甚至於從Hibernate轉為MyBatis。

演算法和數據結構是影響到一些核心區的問題,但是其他的一些技能,比如面向對象的架構設計,代碼的低耦合,那都是對整個項目有著直觀改善的技能。並非是貶低演算法,而在實際工作中,有太多比演算法更重要的問題了。

閱讀全文

與程序員重構指南相關的資料

熱點內容
動畫遺傳演算法 瀏覽:52
php如何解析xml文件 瀏覽:702
如何改變appstore的語言 瀏覽:462
javahtmlxml 瀏覽:34
單片機啟動文件 瀏覽:811
橙app如何開啟聊天 瀏覽:899
訪問伺服器公網地址 瀏覽:666
pdf列印底色去掉 瀏覽:463
java快遞介面 瀏覽:397
哪個app可以教新爸爸 瀏覽:210
如何查看伺服器系統版本信息 瀏覽:524
成都市土地出讓金演算法 瀏覽:703
鋼筋加密標記 瀏覽:578
ps中擴展功能在文件夾的什麼位置 瀏覽:905
雙極壓縮機為什麼要先高壓 瀏覽:527
蘋果手機伺服器填什麼 瀏覽:832
android移動動畫效果 瀏覽:692
電子和伺服器是什麼意思 瀏覽:693
phpurl中文亂碼問題 瀏覽:894
程序員那麼可愛大結局陸漓產子 瀏覽:539