導航:首頁 > 程序命令 > 國內程序員編程能力

國內程序員編程能力

發布時間:2024-11-22 20:08:49

Ⅰ 怎樣快速確定程序員編程水平

想要快速確定程序員的編程水平,可以從以下四個方面考慮:
第一,知識的考察。這個是幾乎每個公司都會做的,也是很有效的手段,基本就是考試。包括問語法問標准演算法問API問一切有標准答案的問題。一個人懂得多,不一定寫得特別好,但是什麼都不懂一定寫不明白。這個方式還可以按需求選人才,比如我們就在php做前端,那我就可以問一堆關於php的,如果我是做嵌入式的,那我可以問一堆c。可以考察這個程序員在和公司需求的交集上完成的怎麼樣。這也是最最簡單和直觀的方法。
第二,對過往項目的理解。這個也是在簡歷關很常問的,說說你當時做的這個項目吧。這個問題非常有效地考察了他是否理解他之前做的東西。有的人簡歷寫的巨漂亮可是實際那項目和他沒關系,或者他就是復制粘貼的代碼,其實自己啥都沒寫。這種時候你和他聊的足夠深入之後能很明顯地發現他自己說不明白了。同時還可以考察一定的語言表達能力和邏輯能力。用我們的話說,先問到面試官不會的深度,然後讓他給面試官講明白。如果他做的東西,他蒙圈的時候比面試官還早(前提是面試官不是搞這方向的),那一般就比較悲劇了。
第三,對寫程序本身的理解。我們很喜歡問一道題,描述一下你是怎麼寫程序的。凡是說我事先design好所有的模塊、介面、功能,然後逐一實現,然後程序就work的,我們都心裡默默補上「呵呵」。因為這是不可能的,只能說明他沒寫過大程序或者沒總結過寫程序的經驗。沒有人在完成一千行以上的程序的時候在沒寫之前就做好所有模塊設計的,何況更大的程序。當然還有就是他會不會認為程序跑通一次就完成了(即寫程序有沒有test階段)之類的。
第四,動手寫程序的能力。這個說實話是面試的時候不太容易考的,因為時間有限。現在的大公司基本是45-60分鍾一輪,一輪還要問好幾個程序題,所以寫的代碼都是片段的,大概20行左右,根本沒法體現一個人會不會寫程序。所以很多人不需要會寫程序,只需要刷好leetcode之類的演算法題庫就可以進大公司(相信我我認識很多)。我們認為一個好的程序員一定要在限定時間之內完成一個完整工作,滿足要求的程序。從輸入到輸出到corner case的驗證。而不僅僅是研究明白某個基礎演算法如何用nlogn而不是n^2解決。這一關卡下去了無數看起來很美好的人。因為我們的題目是不可能在那個時間內找到最優解的,就像絕大部分工程中的編程一樣。一個較好的可用解往往比最優解要有價值的多,因為後者需要大量的時間,很可能沒有前者直白,而且提升未必很高。這是我們公司最在乎的一點。

Ⅱ 為什麼中國的程序員總被稱為碼農

本人並不是一位程序員,但是從事互聯網行業也少不了與程序員朋友打交道,他們經常自嘲為「碼農」、「程序猿」、「代碼工人」、「碼字猴」等等,這些一定程度上是幽默的稱謂,但是站在旁觀者的角度,本人認為還有一些深層次的原因。

第一,中國的程序員是一個龐大的群體,只要是學過計算機,只要懂一門編程語言,都可以吃這碗飯。當你看到中午吃飯時那個浩浩盪盪的場面,你就會覺得程序員真的看起來和農民差不多。

第二,大部分程序員做的都是比較枯燥的工作,一點創新性都沒有。很多新項目都是在很成熟的項目之上進行修改,都有現成的模板可以套用,基本上不用怎麼動腦筋。這和農民種田是多麼的類似。他們年復一年地做著同樣的事情(播種、插秧、收割),也不知道這種日子什麼時候是個頭。IT行業本應該是一個創新性非常強的行業,但到了中國就成了比較死板的東西了,這是什麼原因呢?

第三,大部分程序員的視野都比較的窄,對其他行業懂得很少,這也和農民是多麼的相似啊!我們都說農民階層是沒有多少文化的,但這居然也適用於以高學歷著稱的程序員身上,是多麼具有諷刺意味啊!你隨便問一下身邊的程序員,當今最流行的詞語是什麼,我想沒有幾個人回答得上來。他們成天盯著代碼,想著那26個字母和10個數字,視野如何能變寬廣?

第四,大部分程序員都是靠自己的努力掙錢,沒有強的人際關系,基本上屬於「弱勢」群體。就像農民一樣,他們沒有關系,只能世世代代在自己的土地上耕耘,只求維持生計、終老一生。如果稍微有點關系,幾乎沒有人願意當程序員。在行業發展較為順利的時候,他們能夠保住飯碗,能夠養家糊口;當行業不景氣的時候,他們隨時都有被裁的危險,因為公司要不了那麼多人。程序員的命運並沒有真正地掌握在自己手上。

在一個大的IT公司,程序員都佔了很高的比例,少則成百上千人,多則幾萬人,真的像農民一樣,到處都是。我在和同事聚餐的時候,程序員都在抱怨自己的工作是如何的辛苦、如何的累,都說自己是「碼農」。

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

說到代碼的重構對於國外的程序員提到的比較多,特別是大型的開源工程,基本上一個模塊或者函數的實現會反復的修改,一個文件能被修改成千上萬次,曾經訂閱了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 說:

這個功能改一下,

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

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

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

老闆說:

這東西下周能出來嗎?

閱讀全文

與國內程序員編程能力相關的資料

熱點內容
怎麼把伺服器卡死 瀏覽:479
ug加密的key文件 瀏覽:165
編程理論基礎 瀏覽:311
安卓boot配置文件都有什麼 瀏覽:534
數量關系排序演算法 瀏覽:182
serv文件怎麼傳到伺服器上 瀏覽:274
開發者聯名貢獻源碼 瀏覽:338
sae部署java 瀏覽:18
校園330app怎麼下載 瀏覽:23
javahashcode演算法 瀏覽:714
pdf轉doc手機軟體 瀏覽:531
方舟手游開伺服器機床怎麼選 瀏覽:255
qt編程入門pdf下載 瀏覽:784
java編程的三個步驟 瀏覽:776
s點b點主圖源碼 瀏覽:436
電腦可以刪除的臨時文件夾 瀏覽:9
小杜app上怎麼啟用 瀏覽:305
為什麼伺服器喇叭喊了一次就不行 瀏覽:480
phpdbo驅動 瀏覽:255
程序員尋找轉行建議 瀏覽:632