㈠ 程序員一直加班嚴重,為何還有許多人選擇程序員呢
每個行業都有每個行業的精英,很多精英都會有表現自己的地方,好比一個程序員,在他們職業光鮮亮麗,工資待遇相當不錯的背後,是一個一個夜晚走過來的,雖然說幾乎每個程序員都會有加班,有熬夜的時候,可為什麼還是會有人明知道會很苦,依舊選擇當一個程序員呢?
第一,工資待遇高於想對比職業程序員給人們的感覺就是高工資,事情是工資待遇很是不錯的,即使是一個剛畢業的大學生,只要有一定能力他的工資就會高於同畢業同學的工資,因為這是一份腦力的勞動,考驗的就是編程能力,對於剛畢業的學生來說拿到一個項目,讓自己去完成一個任務是不太可能的,所以就需要加班,這種高強度的加班換來的就是高回報,高額工資。
不管是哪一方面的原因,能夠從事這一方面的工作就肯定會付出自己的努力,去實現自己的價值,未來程序員的路還有很長時間要走,那就讓自己在這份道路上實現自己的理想,奔向更加美好的未來。
㈡ 程序員為什麼要堅持鍛煉身體
俗話說,如果你覺得一天過得沒有意義,要麼是因為沒有看書,要麼是因為沒有運動,更可能的是因為你既沒有看書也沒有運動。
我做為一個職業程序員才一年半,而持續不斷的堅持鍛煉身體才4個月時間,也許我現在來討論這個話題尚顯得經驗不足,不過也無妨,就寫一些個人的想法吧。
堅持鍛煉身體,關鍵字分為「堅持」和「鍛煉身體」。
堅持是一件很難的事情,更何況是堅持去做一件在肉體上幾乎享受不到快感的事情。那麼堅持的力量來自何處?為什麼有些人堅持不了的事情,另一些人卻樂此不疲呢?
很多人都說:明明知道運動的好處多多,但就是堅持不下去。我想說的是,一切力量都來自於內心。
那些能夠堅持健身或者慢跑的人,他們通過鍛煉獲得的並不是肉體上的快樂,而是心靈的滿足,他們知道,自己做了一件有意義的事情。這種滿足感與看一集美劇或是吃一頓大餐獲得的滿足感是不一樣的,這是自我實現的滿足感。
這樣的滿足感,可以驅動他們繼續將這件事情做下去,而且還能越做越好。滿足感還可以橫向擴張,它能夠蔓延到其他的事情上,為我們一整天的工作提供動力,為生活提供樂趣。
堅持鍛煉身體,我們不只是在身體上受益,更大的好處是養成了持之以恆的習慣。
有個笑話是:不要招惹一個減肥成功的人,對自己都能這么狠,他們什麼都幹得出來。現在的世界太浮躁,人們的功利心太強,想要的現在就要得到,卻不想世界上很多事情不過恆心二字。特別是堅持一種見效很慢的行為,對我們內心的平和是大有助益的。
很多程序員(包括我)剛入行的時候都是躊躇滿志,要學習各方面的知識,寫博客,搞開源,做小項目,但是往往無法堅持。因為每天工作了十數個小時以後,還要繼續搞技術真是一件很累心的事情。下班後刷刷微博,打打游戲,時間很容易就打發了,想做的技術卻一拖再拖。
人就是這樣,一旦開始拖延,那以後就很難再按原計劃走了,甚至越到後來越覺得自己沒有必要再努力,而被惰性徹底打敗。
綜上,如果能堅持鍛煉身體,培養堅持的習慣,對程序員技術上的成長也是有很大的幫助的。
持之以恆是一種的美好品質,那麼有什麼辦法培養嗎?
除了通過做自己感興趣的事情來培養,還有一種辦法就是從堅持簡單的事情開始。就拿做運動來說,剛開始可以只做輕度的運動,做到額頭微汗就好,習慣以後再慢慢加大運動量,這樣一來堅持的大樹就在你的內心生根發芽了。
程序員的形象往往是羸弱或虛胖的,且不說各種程序員猝死的傳聞,或是頸椎病、腰椎病、肩周炎這些耳熟能詳的職業病,光是我們的身材就有超過職業發展速度的趨勢。鍛煉能夠提高身體素質,增強寶寶免疫力,以後加班到天亮也不怕啦。
這幾年來人們越發關注自己的身體健康,健身的話題也已經變得火熱,甚至有種全民健身的勢頭。我也是在這股熱潮下關注了不少健身方面的知識,雖然實踐成果不怎麼樣,但隱隱然有種理論家將出世的感覺了。
以我個人為例,從上大學開始,每天就有好幾個小時坐在電腦前,到讀研究生後期開始,幾乎每天有14個小時都是電腦陪我度過的。可以說,電腦滿足了我們工作、學習、娛樂等各方面的需求,但是同時也給我們的健康埋下了危險的種子。
其實我一直都還算一個喜歡健身運動的人,雖然由於種種原因(跟女朋友打電話啦、後來要給老婆煮早餐啦,晚上要加班等等,現在回想一下,其實只是借口)一直都沒能長期堅持下來。所以我從入行起到至今四個月前的一年半時間里,體重也還是緩慢的增加了3kg,感謝公司食堂。。。雖然比起有些同事長了10kg好很多,但也是五十笑百而已。而且長時間的工作,確實引起我肩膀頸椎不適(不過這也可能是因為我打開電腦的姿勢不對吧。。。)
後來情況發生了變化,由於一些不足為外人道的原因,老婆回老家了,我又變成了一個快樂的單身漢,又有大把時間可以加班了,也有空閑能減減肥了。
因為我習慣晚上加班到10點左右,所以鍛煉的時間就定在了早上起床以後,大概每天20-30分鍾。而我租的房子離公司只有3km左右,所以我每天步行上下班,大概每天1w步左右,這就是我每天的運動量,其實並不大。
對於日常健身,我的觀點是保證適當運動量就好,能維持較高的代謝率,但是不會太疲累而影響工作。當然想要增肌和快速減肥的朋友就另當別論了。我根據自己的身體狀況,制定了一份健身日程表,每天按照日程表嚴格執行。
經過這四個月堅持不懈的鍛煉身體,我體重上減輕了4kg,每天的工作也更加輕松有活力。我也改變coding的方式——時而站立,時而坐正,變化多端,神鬼莫測——身體不適也大有改善。在保持激情的同時,整個人的心態變得更加平和,工作之餘學習各種技術的時候不再急於求成,而是慢慢積累,持續學習。
To Be Continue...
ps:附上我近期的健身日程表:
psps:這些健身的項目是參考《囚徒健身》制定的,也給大家安利一下這本書,裡面一些運動的方法相當有啟發性。
根據《囚徒健身》的健身方法,每個健身動作可以分為三段,以俯卧撐為例:第一段,從手臂伸直的姿勢到手臂完全彎曲;第二段,保持手臂彎曲的姿勢不動;第三段,恢復到手臂伸直的姿勢。這三段要滿足2-1-2的時間,也就是第一段和第三段要勻速運動,花2s的時間完成,第二段則是保持1s的穩定狀態。
㈢ 程序員未來會成為非常內卷式的職業嗎
內卷化在我之前已經有18人將其概念闡述了,在此我就不再重復了。
非常即不平常。我個人認為,程序員已經是或將來也是一種職業,正象各種工程師一樣,是其中的一個普通的職業而已,所以不存在非常之說。
任何職業到了一定時間都會推陳出新,或者說被前進中的、發展中的經濟 社會 淘汰,也是 社會 發展的正常現象。比如,伐木工、個體裁縫師、掏糞工……等等許多職業被 社會 發展淘汰了。
程序員這個職業, 社會 發展到一定階段,也會停滯不前或無法轉化,這也是時代發展的必然結果!謝謝!
1 我對內卷化的理解
網路這樣描述內卷化:指一種 社會 或文化模式在某一發展階段達到一種確定的形式後,便停滯不前或無法轉化為另一種高級模式的現象。最早出自美國人類學家吉爾茨(Clifford Geertz)的《農業內卷化——印度尼西亞的生態變化過程》(Agricultural Involution: The Processes of Ecological Change in Indonesia)。
參照網路的定義和網路其它資料對內卷化的解釋,我認為程序員的內卷化是指:不斷的重復現有的編程工作,無法取得創新性的成績或推動這一領域的變革,在編程這件事兒上很難再更上一層樓。
2 我對本問題的回答如果將這個問題加一個限定,限定為 中國的程序員 ,答案將會是肯定的。未來30年,程序員不會內卷化。
理由一: 當前美國對我們實施技術封鎖,涉及到工業基礎的軟體基本淪陷,猛一看去,遍地是國外產品。因此,涉及到這些國家工業命脈的基礎類軟體在未來的幾十年內我們都要自立更生,自主開發,等待程序員的挑戰還很多,離內卷化還很遠很遠。
理由二: 結合我自身12年 直升機HUMS系統 的科研經歷,我發現我們國內科研人員的編程能力普遍較弱,我自己也包括在內。而有的國外工程師則既是專業領域的大牛,又能將自己的專業知識用程序實現,最終還能成為產品,這種能力不得不服。而我們國內的很多程序員則只會開發程序,對專業又不懂。這就造成了國外同行一個人可以做的事情,我們需要一個小組。這就形成了效率方面明顯的反差。
理由三: 未來,純粹的程序員會越來越少,既精通專業又精通某一程序語言的人會越來越多,也會越來越受歡迎。這樣的模式也是國家在未來30年內急迫的需求,只有這樣我們在工業基礎領域才會以較快的速度誕生越來越多的自主軟體,完成Matlab、Solidworks、AutoCAD等軟體的替代。另一方面,科學技術的發展是沒有止境的,起碼對於我們祖國當前的處境來說是這樣的,我們離內卷化還很遠很遠, 科技 是不斷進步的, 科技 不會內卷化,那麼作為一個科研程序員就也不會內卷化。
第一:目前互聯網行業,高級工作不夠多,程序員的成長在資本家眼裡就不是一項優勢,而是成本負擔。就會直接導致內卷。
第二:有容易寫的程序,也有難寫的程序。程序員慢慢積累到能力的巔峰之後退休了,下面的人就得補上來,每個人都有自己的位置。
首先我們要確認什麼是程序員
會敲代碼的只是coder,俗稱碼農,那種996,過得非人的生活,堪稱「碼畜」,毫無生活可言~
會敲代碼,有編程思想,有業務理解的見解之人請叫他們「程序員」,programmer
分清楚什麼是程序員以後,程序員是不會非常內卷式的職業
即使本人無強烈意願,但是技術更新的迭代也迫使他們往前走,vb、Delphi、pb的程序員不會該轉行的轉行,轉語言的轉語言了。
為了更好的設計程序,必要討論需求及業務是必要的,如果是完全內卷,工作都完成不了,企業還要ta嗎?企業都不要ta了,ta還是程序員嗎?
因此程序員為了自己為了利益,必須是不斷學習及進步的一群人,中國的 科技 興國也在這群人身上。
至於coder,不要拿出來侮辱程序員了
對於未來的不確定性,哪個職位不可以被這樣質疑呢?
例如現在視頻發展越來越火,那麼文字工作者會內卷嗎?
現在新生人口下降,那麼未來教師行業會內卷嗎?
......諸如此類。
在我看來,行業充滿著不確定, 社會 也存在不確定性。
作為程序員或者想從事程序員的人士,現在考慮的不是將來會不會內卷,而是精進技術,多掌握幾門語言。這才是最重要的。
我媽媽在我小時候是名裁縫,那時候學得裁縫這門手藝就可以養活自己乃至家人, 社會 發展至今,工業代替了大部分手工。裁縫這個職業被邊緣化,那麼,我媽媽餓死了嗎?也沒有,媽媽不是裁縫之後,選擇了去賣衣服,因為做裁縫讓她對布料、剪裁等爛熟於心,所以進的貨好,生意也好,和我爸爸倆人把一大家子養活得白白胖胖。
所以程序員未來會成為非常內卷是的職業嗎?你完全不必要去杞人憂天,做好當下的工作,不斷進取,不斷學習,這才是成長之道!
未來這個應該有一個限定,比如說10年,20年,30年。30年我不敢去猜測,但是,未來10年內,程序員不可能成為內卷式的職業,相反,隨著國外對中國技術的封鎖,國內更加需要軟體方面的自主創新發展,軟體開發環境的改變也會帶動整個軟體行業發展的大變革,每個程序員的作用也會變得越來越重要,所以,我認為,未來10年,程序員不會成為非常內卷式的職業。
很高興回答你的問題,我大學學習7年,程序員工作4年了,說一說我對程序員行業的判斷。
現在 科技 的發展可以說是一年一個樣,作為程序員的我們也在不斷的學習新的技術。而人的學習能力和主動性是不一樣的,因為這個會將程序員進行劃分:
第一類:初級程序員。這類程序員會是it行業建設的中堅力量。主要負責基礎軟體和系統的基礎編碼編寫工作,隨著一些中間件和智能系統的不斷呈現,這類編碼工作門檻逐漸降低,工資水平也會降低並趨於穩定。
第二類:中級程序員。主要負責一些新技術的預研和攻堅,並結合業務場景搭建一些中台系統,從而降低公司的開發成本。
第三類:高級程序員(技術專家)。這類人專注於某一個領域進行研究,比如計算機視覺、圖片語音分析識別等。這類人會創造出很多專利性的技術,幫助公司拓展新領域的業務!
本人資深程序猿一枚,我覺得要判斷一個職業是不是內卷式,要從幾個方面來分析:
一、職業的依賴工具。還記得 歷史 書上說過:能不能使用工具是人和動物的主要區別。比如中國歷經5千年的農業一樣,農民這一職業高度依賴農具,農業的發展史實際上是農具的發展史,從刀耕火種到使用鐵器,再到目前部分發達地區的農業自動化,農具一直在變化,。只要農具向更先進化發展,我們就不能說農民這一職業具有內卷性,實際上幾千年來農民一直是向前發展的,而人總要吃糧食,農具(或者農業技術)向前發展是毋庸置疑的。再說程序猿,我們使用的工具就是電腦,相對於農具,電腦這一工具的發展可謂光速,從台式機、到智能手機、各種智能設備都可以歸為電腦這一類,可以肯定的是,電腦只會發展,不會消失,而且會進一步影響我們生活,比如物聯網、比如AI,只要電腦這一工具發展,程序猿這一職業就不會消失,只會向更高端進化,以適應更高級工具的操作要求。
二、職業人群。眾所周知,程序猿無論從學歷、知識還是智力在 社會 人群中是屬於中等以上的。 社會 的發展,是教育發展的推動,作為普遍的受過高等教育者,最有可能保持開放的思維去接受新的事物,只要能夠學習,這一職業只會進化,而不會停滯不前。但是這一過程中,不適應這種發展的部分程序猿會被淘汰,這是毋庸置疑的。
三、 社會 發展趨勢。 社會 的發展本質是 社會 生產力的提高。怎麼提高 社會 生產力?依賴機器!依賴自動化!就像當下程序猿存在的意義一樣,程序猿創造了各種自動化工具,提高了 社會 生產力。只有提高 社會 生產力這一大趨勢不變,程序猿就不會停滯不前,只會不斷進化。
一開始還不是996 coder,若干年之後才見分支,有的人悟性慢,有的人用心專而已,coder 是最基本的付出,連自己的起點都漠視了的匠人怎麼做繼承,內卷也不可怕,反射夠多就需要內卷式的人才積淀出火花,就算是普通的coder,也是信息世界的基石,不尊重民意和基礎的國度在大洋彼岸塌了,就這樣開始在信息磚工上開始新的歧視?
學好python大數據分析和機器學習等,就擁有了改變世界的能力,故好的程序員永遠有發展前途。
本人預計,隨著信息化等技術的發展,市場經濟將被計劃經濟代替,人類將會有更多創造性勞動的時間和休閑的時間。
㈣ 做程序員的中年男人,在職場中需要應酬嗎
作為一個中年男人的程序員,在工作當中是必須需要應酬的。應酬有以下的幾個好處。
第一,自己已經處於中年了,就應該多出去應酬學習一些年輕人所掌握的程序技巧。自己處於中年就不能夠說放棄學習,不應酬。在應酬的過程中,可以學習到很多的經驗以及知識,這些東西對自己以後的職業生涯都是可以帶來好處的。
第四,作為程序員出去應酬,他們在吃飯時可以延緩工作的緊張感。這個時候最適合討論程序員工作上的事,基本上對方是很少會拒絕的,更容易說服對方,讓對方聽從自己的意見,從而使自己想要應酬的最終目的實現。
應酬也是一門技術活,在應酬上面也不應該多說。作為程序員最主要的就是技術以及探討知識。程序員在應酬中都可以向對方了解很多的知識和技巧的。
㈤ 成為一個低等級的程序員的價值和意義有什麼
成為低等級的程序員,是成為高級程序員的必須的經歷
什麼人都是從零基礎開始接觸編程的,然後會寫一點代碼,然後成為初級程序員,如果說在這個行業繼續做,那麼經驗一步一步積累,才能成為高級程序員
如果說只做到初級就不做了,那麼就是你轉行的一個問題,有些人不適合做程序員,可能做到一定程度就想放棄,實際上,初級程序員的工資並不高,一般只有5到8k,和高級程序員可以拿到15k以上,如果你羨慕這個工資,那就得繼續錘煉自己的技術
如果只是目標成為一個初級的,那麼未來的就業市場也未必會容得下初級程序員,一位35歲以上的崗位已經不再適用初級程序員了
㈥ 你怎麼看待程序員的高壓工作
我自己就是從事程序員工作十幾年,這確實是一份很辛苦的工作,但是也有它的意義所在。
1、這是需要人不斷學習才能勝任的工作,所以能促使大部分人養成持續學習的自覺性,讓人一直走在前進的道路上;
2、這是一份比較損耗身體的工作,所以需要工作之外做好鍛煉計劃並付諸實踐,這就促使大部分人養成一種愛鍛煉習慣與愛護身體的思維;
3、這是一份重溝通的工作,所以很多人的表達能力得到極大的改善。
㈦ 為什麼都稱程序員為程序猿反映了這個工種的哪些特質
我上班第一天我的老闆讓我做的第一件事
看兩篇文章:
程序員隨想
雷軍
我不是天生的程序員,也並非天生就喜歡電腦,上高中時也沒有想過將來會當程序員,接觸電腦純屬偶然--小時候的一個好朋友上大學時選擇了電腦專業,為了和這個朋友有更多的「共同語言」我便選擇了計算機系。在大學,我略窺電腦世界,開始為之「發燒」;畢業後,開始了一個程序員的職業生涯。
從開始寫程序到現在快十年了,寫過的程序不少。從這些年的風風雨雨中走過來,不能不有些體會。說到體會,最大的體會就是這條路太漫長。
一、一輩子有你 苦一點也願意
我沒有奢望大家把寫程序和文學創作相提並論,但其中的苦楚卻不是一個普通用戶能夠體味的。為了寫好一個程序,我們度過太多不眠之夜。有個朋友如此評價道,「寫程序簡直是在自殺,巨費精力巨費腦子巨累」。但還是有許多人不畏其苦,前仆後繼。
我剛接觸到電腦就發現電腦的妙處:電腦遠沒有人那麼復雜,如果你的程序寫得好,你就可以和電腦有著非常融洽的關系,就可以指揮電腦干你想乾的事,這個時候,你是十足的主宰。每每坐在電腦面前,你就如同在一個王國里巡行。
電腦里的世界很大,程序員是活在自己想像的王國里。你可以細微到電腦里的每一個位元組、每一個比特的東西。
這樣的日子簡直就是天堂般的日子,很多人都愛上了這樣的日子。
不少人認為程序員最多干到三十五歲就可以收山,腦子也差不多該歇歇了,並認為寫程序悶碧告是年輕人的事情,到了一定年齡,估計沒什麼人再當程序員。
我剛畢業時,意氣風發,也想先吃點苦,到了三十歲就不幹了。年長一點後就發現了自己的無知。一個人大學畢業就二十一二歲,技術成熟一點後可能二十五,接著就是票子、妻子和房子等等諸多忙不完的事情。一切搞掂的時候,也許就是三十五歲。如果三十五歲就放棄的話,我們就不用選擇程序員的道路。
電腦進入我國時間不短,但真正大規模開始用,還是八五年PC登陸我國時候的事。因此國內真正寫電腦程序的人最長也就寫了十幾年(不知道是否還有這樣的人)。由於電腦應用在國內時間比較短,國內程序開發的主力以三十五歲以下的年輕人為主,但這並不表示程序員如同紅粉佳人般的容易衰老。美國和台灣地區的開發者以三四十歲的人為主。開始寫程序的慧叢時候,我們覺得沒有什麼不能做的(現在還能聽到這樣的豪言壯語),而且更要命的是,好象我們特別聰明,特別適合開發軟體,比老外強得多。當我們真正接觸那些傑出的國外開發人員的時候,發現他們太厲害了,都有十多年的開發經驗,絕對多數的產品出自這些有豐富開發經驗的程序員之手。
畢業後,編程不僅僅是愛好,而且成了一輩子的工作,可以肯定會干一輩子,雖然我沒有打算一生只干這一件事。用一生來編程是一件既容易又困難的事。如果碌碌無為,為交差寫點程序,這樣寫兩輩子的人都有。但如果想全身心地寫程序,寫十年都不是一件容易的事。現在我的不少朋友都洗手了,有時我也有這種想法,但一旦面對電腦,立刻頓悟:電腦還是自己最擅長乾的事,也是最順手的事。
二、我的未來不是夢
有的人刻螞明苦學習編程技術,努力提高編程水平,並把高級程序員作為追求的目標,甚至是終身的奮斗目標。後來參與了真正的商品化軟體開發後,感到非常困惑和茫然。
當我上大學的時候,高級程序員也曾是我的目標。當時,我通過等級考試獲得了高級程序員證書,並在自己的名片上印上「高級程序員」的字樣。後來,我的水平提高了,似乎也成了大家認可的好程序員了。這個時候我卻開始茫然。我希望我的技術能得到別人的承認,當得到別人的承認後,我又能如何呢?後來我發現,無論成為多麼高級的程序員都沒用,關鍵是是否能夠出想法、出產品,你的勞動是否能被社會承認,是否能為社會創造財富。
我的未來是明確的,開發出高質量的適用社會的產品,為社會創造財富。
三、每一個程序都是藝術品
有人認為程序員沒有什麼了不起,不過是一種熟練工種而已;也有人把編程說成是藝術創作,捧上天。這兩種意見爭論比較激烈,甚至可以說針鋒相對。
我們換個工種來看,石匠應該是熟練工種,跟藝術似乎沾不上邊。;但正是這些石匠,給我們留下了數不勝數的文物古跡,如樂山大佛、莫高窟等等。應該說這此石匠給我們留下了無窮的文化財富。我認為編程的工作和石匠比較相似,是技術,也是藝術。
現代軟體工業已具相當規模,很多軟體的完成需要的是大兵團作戰。一名精通程序員接受編寫某一塊的任務後,往往只是寫代碼,發揮的餘地很小。在大項目中,很多程序員只能了解到和自己所編模塊相關的很局部的細節,另外還受到開發環境的限制,真的很難體會到自己在從事「藝術」創造,更多的時候是感到自己在從事重體力勞動。有的時候還擔心自己苦苦參與的這個項目究竟有沒有意義,是不是在同類產品中有競爭力,會不會開發出來以後就因為硬體的發展、操作系統的換代而過時......
編程是技術活,才有可能大規模進行,才會有軟體工程的理論。也正是編程具備藝術創作的特點,我們的生活才會有如此多的好軟體產品。寫一個程序需要付出腦力和體力,當我—我們—某個群體完成一個程序之後,在我們的眼裡,每一個程序就都是藝術品。
程序員應具備的素質
前言
程序員是一種技術工作,在IT的發展中有相當重要的地位,從底層硬體通訊協議的建立, 到數據傳輸層的處理,到操作系統的建設,到資料庫平台的建設,一直到應用層上各種數 據營銷平台的搭建,程序員在裡面都扮演著舉足輕重的角色並為IT事業的發展做出了巨大 的貢獻。
中國有很多精於編碼的人,但是中國軟體行業,尤其是網路應用開發方面誤區很大,很難形成有規模的軟體開發力量和產品能力,不但比美國差距甚遠,和印度相比也是頗有不 如。這些問題不是在於中國程序員的智商和工作努力狀況,也不是在於國家和民間對開發 的投入程度,而是很大程度上,有一些對技術,對程序開發,對項目設計方面的思想誤 區,這些誤區,導致了軟體行業的產品化能力不足,缺乏規模化和大型復用系統研發能 力,可以說,改變認識誤區,是解決軟體行業小作坊模式和個體英雄模式所帶來的局限性 的重要工作。
中國有很多小朋友,他們18,9歲或21,2歲,通過自學也寫了不少代碼,他們有的代碼寫的很漂亮,一些技術細節相當出眾,也很有鑽研精神,但是他們被一些錯誤的認識和觀點左右,缺乏對系統,對程序的整體理解能力,這些人,一個網上的朋友說得很好,他們實際 上只是一些Coding fans,壓根沒有資格稱為程序員,但是據我所知,不少小網路公司的 CTO就是這樣的coding fans,拿著嚇人的工資,做著嚇人的項目,項目的結局通常也很嚇人。
一、程序員基本素質
作一個真正合格的程序員,或者說就是可以真正合格完成一些代碼工作的程序員,應該具有的素質。
1:團隊精神和協作能力
把它作為基本素質,並不是不重要,恰恰相反,這是程序員應該具備的最基本的,也是最 重要的安身立命之本。把高水平程序員說成獨行俠的都是在囈語,任何個人的力量都是有 限的,即便如linus這樣的天才,也需要通過組成強大的團隊來創造奇跡,那些遍布全球 的為linux寫核心的高手們,沒有協作精神是不可想像的。獨行俠可以作一些賺錢的小軟 件發點小財,但是一旦進入一些大系統的研發團隊,進入商業化和產品化的開發任務,缺 乏這種素質的人就完全不合格了。
2:文檔習慣
說高水平程序員從來不寫文檔的肯定是乳臭未乾的毛孩子,良好的文檔是正規研發流程中 非常重要的環節,作為代碼程序員,30%的工作時間寫技術文檔是很正常的,而作為高級 程序員和系統分析員,這個比例還要高很多。
缺乏文檔,一個軟體系統就缺乏生命力,在未來的查錯,升級以及模塊的復用時就都會遇 到極大的麻煩。
3:規范化,標准化的代碼編寫習慣
作為一些外國知名軟體公司的規矩,代碼的變數命名,代碼內注釋格式,甚至嵌套中行縮 進的長度和函數間的空行數字都有明確規定,良好的編寫習慣,不但有助於代碼的移植和 糾錯,也有助於不同技術人員之間的協作。
有些coding fans叫囂高水平程序員寫的代碼旁人從來看不懂,這種叫囂只能證明他們自 己壓根不配自稱程序員。代碼具有良好的可讀性,是程序員基本的素質需求。
再看看整個linux的搭建,沒有規范化和標准化的代碼習慣,全球的研發協作是絕對不可 想像的。
4:需求理解能力
程序員需要理解一個模塊的需求,很多小朋友寫程序往往只關注一個功能需求,他們把性 能指標全部歸結到硬體,操作系統和開發環境上,而忽視了本身代碼的性能考慮,有人曾 經放言說寫一個廣告交換程序很簡單,這種人從來不知道在百萬甚至千萬數量級的訪問情 況下的性能指標是如何實現的,對於這樣的程序員,你給他深藍那套系統,他也做不出太 極鏈的並訪能力。性能需求指標中,穩定性,並訪支撐能力以及安全性都很重要,作為程 序員需要評估該模塊在系統運營中所處的環境,將要受到的負荷壓力以及各種潛在的危險 和惡意攻擊的可能性。就這一點,一個成熟的程序員至少需要2到3年的項目研發和跟蹤經 驗才有可能有心得。
5:復用性,模塊化思維能力
經常可以聽到一些程序員有這樣的抱怨,寫了幾年程序,變成了熟練工,每天都是重復寫 一些沒有任何新意的代碼,這其實是中國軟體人才最大浪費的地方,一些重復性工作變成 了熟練程序員的主要工作,而這些,其實是完全可以避免的。
復用性設計,模塊化思維就是要程序員在完成任何一個功能模塊或函數的時候,要多想一 些,不要局限在完成當前任務的簡單思路上,想想看該模塊是否可以脫離這個系統存在, 是否可以通過簡單的修改參數的方式在其他系統和應用環境下直接引用,這樣就能極大避 免重復性的開發工作,如果一個軟體研發單位和工作組能夠在每一次研發過程中都考慮到 這些問題,那麼程序員就不會在重復性的工作中耽誤太多時間,就會有更多時間和精力投 入到創新的代碼工作中去。
一些好的程序模塊代碼,即便是70年代寫成的,拿到現在放到一些系統裡面作為功能模塊 都能適合的很好,而現在我看到的是,很多小公司軟體一升級或改進就動輒全部代碼重 寫,大部分重復性工作無謂的浪費了時間和精力。
6:測試習慣
作為一些商業化正規化的開發而言,專職的測試工程師是不可少的,但是並不是說有了專 職的測試工程師程序員就可以不進行自測;軟體研發作為一項工程而言,一個很重要的特 點就是問題發現的越早,解決的代價就越低,程序員在每段代碼,每個子模塊完成後進行 認真的測試,就可以盡量將一些潛在的問題最早的發現和解決,這樣對整體系統建設的效 率和可靠性就有了最大的保證。
測試工作實際上需要考慮兩方面,一方面是正常調用的測試,也就是看程序是否能在正常 調用下完成基本功能,這是最基本的測試職責,可惜在很多公司這成了唯一的測試任務, 實際上還差的遠那;第二方面就是異常調用的測試,比如高壓力負荷下的穩定性測試,用 戶潛在的異常輸入情況下的測試,整體系統局部故障情況下該模塊受影響狀況的測試,頻 發的異常請求阻塞資源時的模塊穩定測試等等。當然並不是程序員要對自己的每段代碼都 需要進行這種完整測試,但是程序員必須清醒認識自己的代碼任務在整體項目中的地位和 各種性能需求,有針對性的進行相關測試並盡早發現和解決問題,當然這需要上面提到的 需求理解能力。
7:學習和總結的能力
程序員是人才很容易被淘汰,很容易落伍的職業,因為一種技術可能僅僅在三兩年內具有 領先性,程序員如果想安身立命,就必須不斷跟進新的技術,學習新的技能。
善於學習,對於任何職業而言,都是前進所必需的動力,對於程序員,這種要求就更加高 了。
但是學習也要找對目標,一些小coding fans們,他們也津津樂道於他們的學習能力,一 會學會了asp,一會兒學會了php,一會兒學會了jsp,他們把這個作為炫耀的資本,盲目 的追逐一些膚淺的,表面的東西和名詞,做網路程序不懂通訊傳輸協議,做應用程序不懂 中斷向量處理,這樣的技術人員,不管掌握了多少所謂的新語言,永遠不會有質的提 高。
善於總結,也是學習能力的一種體現,每次完成一個研發任務,完成一段代碼,都應當有 目的的跟蹤該程序的應用狀況和用戶反饋,隨時總結,找到自己的不足,這樣逐步提高, 一個程序員才可能成長起來。
一個不具備成長性的程序員,即便眼前看是個高手,建議也不要選用,因為他落伍的時候 馬上就到了。
具備以上全部素質的人,應當說是夠格的程序員了,請注意以上的各種素質都不是由IQ決 定的,也不是大學某些課本里可以學習到的,需要的僅僅是程序員對自己工作的認識,是一種意識上的問題。
二、高級程序員/項目設計者還需具備的素質
那麼作為高級程序員,以至於系統分析員,也就是對於一個程序項目的設計者而言,除了應該具備上述全部素質之外,還需要具備以下素質:
第一,需求分析能力
對於程序員而言,理解需求就可以完成合格的代碼,但是對於研發項目的組織和管理者, 他們不但要理解客戶需求,更多時候還要自行制定一些需求,為什麼這么說呢?
一般而言,進行研發任務,也許是客戶提出需求,也許是市場和營銷部門提出的需求,這 時候對於研發部門,他們看到的不是一個完整的需求,通常而言,該需求僅僅是一些功能 上的要求,或者更正規些,可能獲得一個完整的用戶視圖;但是這都不夠,因為客戶由於 非技術因素多一些,他們可能很難提出完整和清晰,或者說專業性的性能需求,但是對於 項目組織者和規劃者,他必須能夠清醒認識到這些需求的存在並在完成需求分析報告的時 候適當的提出,同時要完整和清晰的體現在設計說明書裡面,以便於程序員編碼時不會失 去這些准則。
程序設計者必須正確理解用戶需求所處的環境,並針對性做出需求的分析,舉例而言,同 樣一個軟體通過ASP租用方式發布和通過License方式發布,性能需求可能就是有區別的, 前者強調的是更好的支撐能力和穩定性,而後者則可能更強調在各種平台下的普適性和安 裝使用的簡捷性。
第二,項目設計方法和流程處理能力
程序設計者必須能夠掌握不少於兩到三種的項目設計方法(比如自頂至下的設計方法,比如快速原型法等等),並能夠根據項目需求和資源搭配來選擇合適的設計方法進行項目的 整體設計。
設計方法上選擇不當,就會耽誤研發周期,浪費研發資源,甚至影響研發效果。
一個程序設計者還需要把很多功夫用在流程圖的設計和處理上,他需要做數據流圖以確立 數據詞典;他需要加工邏輯流圖以形成整體的系統處理流程。
一個流程有問題的系統,就算代碼多漂亮,每個模塊多精緻,也不會成為一個好的系統。 當然,做好流程分析並選擇好項目設計方法,都需要在需求分析能力上具有足夠的把 握。
第三,復用設計和模塊化分解能力
這個似乎又是老調重談,前面基本素質上不是已經說明了這個問題嗎?
作為一個從事模塊任務的程序員,他需要對他所面對的特定功能模塊的復用性進行考慮, 而作為一個系統分析人員,他要面對的問題復雜的多,需要對整體系統按照一種模塊化的 分析能力分解為很多可復用的功能模塊和函數,並針對每一模塊形成一個獨立的設計需 求。舉個例子,好比是汽車生產,最早每輛汽車都是獨立安裝的,每個部件都是量身定做 的,但是後來不一樣了,機器化大生產了,一個汽車廠開始通過流水線來生產汽車,獨立 部件開始具有一定的復用性,在後來標准化成為大趨勢,不同型號,品牌甚至不同廠商的 汽車部件也可以進行方便的換裝和升級,這時候,汽車生產的效率達到最大化。軟體工程 也是同樣的道理,一個成熟的軟體行業,在一些相關項目和系統中,不同的部件是可以隨 意換裝的,比如微軟的許多桌面軟體,在很多操作模塊(如打開文件,保存文件等等)都 是復用的同一套功能模塊,而這些介面又通過一些類庫提供給了桌面應用程序開發者方便 掛接,這就是復用化的模塊設計明顯的一個佐證。
將一個大型的,錯綜復雜的應用系統分解成一些相對獨立的,具有高度復用性的,並能僅 僅依靠幾個參數完成數據聯系的模塊組合,是作為高級程序員和系統分析員一項最重要的 工作,合適的項目設計方法,清晰的流程圖,是實現這一目標的重要保證。
第四,整體項目評估能力
作為系統設計人員,必須能夠從全局出發,對項目又整體的清醒認識,比如公司的資源配 置是否合理和到位,比如工程進度安排是否能最大化體現效率又不至於無法按期完成。評 估項目整體和各個模塊的工作量,評估項目所需的資源,評估項目可能遇到的困難,都需 要大量的經驗積累,換言之,這是一種不斷總結的累計才能達到的境界。在西方一些軟體 系統設計的帶頭人都是很年長的,比如4,50歲,甚至更老,他們在編碼方面已經遠遠不 如年輕人那樣活絡,但是就項目評估而言,他們幾十年的經驗積累就是最重要和寶貴的財 富。中國缺這么一代程序員,主要還不是缺那種年紀的程序員,而是那種年紀的程序員基 本上都是研究單位作出來的,都不是從專業的產品化軟體研發作出來的,他們沒有能積累 那種產品化研發的經驗,這也是沒有辦法的事情。
第五,團隊組織管理能力
完成一個項目工程,需要團隊的齊心協力,作為項目設計者或研發的主管人,就應當有能 力最大化發揮團隊的整體力量,技術管理由於其專業性質,不大同於一般的人事管理,因為這裡面設計了一些技術性的指標和因素。
首先是工作的量化,沒有量化就很難做到合適的績效考核,而程序量化又不是簡單的代碼 行數可以計算的,因此要求技術管理人員需要能真正評估一個模塊的復雜性和工作量。
其次是對團隊協作模式的調整,一般而言,程序開發的協作通常分為小組進行,小組有主 程序員方式的,也有民主方式的,根據程序員之間的能力水平差距,以及根據項目研發的 需求,選擇合適的組隊方式,並能將責權和成員的工作任務緊密結合,這樣才能最大發揮 組隊的效率。
一個代碼水平高的人,未必能成為一個合格的項目研發主管,這方面的能力欠缺往往是容 易被忽視的。
綜上可以看到,作為一個主管研發的負責人,一個項目設計者,所需要具備的素質和能力 並不是程序代碼編寫的能力,當然一般情況下,一個程序員通過不斷的總結提高達到了這種素質的時候,他所具有的代碼編寫能力也已經相當不簡單了,但是請注意這裡面的因果 關系,一個高水平的項目設計者通常已經是代碼編寫相當優秀的人了,但是並不是一個代 碼相當優秀的程序員就可以勝任項目設計的工作,這裡面存在的也不是智商和課本的問 題,還是在於一個程序員在積累經驗,逐步提升的時候沒有意識到應當思考哪方面的東 西,沒有有意識的就項目的組織和復用設計進行揣摩,沒有經常性的文檔習慣和總結習 慣,不改變這些,我們的合格的項目設計者還是非常欠缺。
另外,為防止有無聊的人和我較真,補充一點,本文針對目標是作商業化的軟體項目和工程,那些科研機構的編程高手,比如演算法高手,比如圖象處理高手,他們的工作是研究課題而非直接完成商業軟體(當然最終間接成為商業產品,比如微軟研究院在作的研究課 題),因此他們強調的素質可能是另外的東西,這些人(專家),並不能說是程序員,不能用程序員的標准去衡量。
三、軟體項目研發的設計流程
最後補充一點東西,一個軟體項目研發的設計流程是怎樣的呢?以通常標準的設計方法為例,(不過筆者喜歡快速原型法)。
第一個步驟是市場調研
技術和市場要結合才能體現最大價值。
第二個步驟是需求分析
這個階段需要出三樣東西,用戶視圖,數據詞典和用戶操作手冊。
用戶視圖是該軟體用戶(包括終端用戶和管理用戶)所能看到的頁面樣式,這裡麵包含了 很多操作方面的流程和條件。
數據詞典是指明數據邏輯關系並加以整理的東東,完成了數據詞典,資料庫的設計就完成 了一半多。
用戶操作手冊是指明了操作流程的說明書。
請注意,用戶操作流程和用戶視圖是由需求決定的,因此應該在軟體設計之前完成,完成 這些,就為程序研發提供了約束和准繩,很遺憾太多公司都不是這樣做的,因果顛倒,順 序不分,開發工作和實際需求往往因此產生隔閡脫節的現象。
需求分析,除了以上工作,筆者以為作為項目設計者應當完整的做出項目的性能需求說明 書,因為往往性能需求只有懂技術的人才可能理解,這就需要技術專家和需求方(客戶或 公司市場部門)能夠有真正的溝通和了解。
第三個步驟是概要設計
將系統功能模塊初步劃分,並給出合理的研發流程和資源要求。 作為快速原型設計方法,完成概要設計就可以進入編碼階段了,通常採用這種方法是因為 涉及的研發任務屬於新領域,技術主管人員一上來無法給出明確的詳細設計說明書,但是 並不是說詳細設計說明書不重要,事實上快速原型法在完成原型代碼後,根據評測結果和 經驗教訓的總結,還要重新進行詳細設計的步驟。
第四個步驟是詳細設計
這是考驗技術專家設計思維的重要關卡,詳細設計說明書應當把 具體的模塊以最』干凈』的方式(黑箱結構)提供給編碼者,使得系統整體模塊化達到最 大;一份好的詳細設計說明書,可以使編碼的復雜性減低到最低,實際上,嚴格的講詳細 設計說明書應當把每個函數的每個參數的定義都精精細細的提供出來,從需求分析到概要 設計到完成詳細設計說明書,一個軟體項目就應當說完成了一半了。換言之,一個大型軟 件系統在完成了一半的時候,其實還沒有開始一行代碼工作。
那些把作軟體的程序員簡單理解為寫代碼的,就從根子上犯了錯誤了。
第五個步驟是編碼
在規范化的研發流程中,編碼工作在整個項目流程里最多不會超過1/ 2,通常在1/3的時間,所謂磨刀不誤砍柴功,設計過程完成的好,編碼效率就會極大提 高,編碼時不同模塊之間的進度協調和協作是最需要小心的,也許一個小模塊的問題就可 能影響了整體進度,讓很多程序員因此被迫停下工作等待,這種問題在很多研發過程中都 出現過。編碼時的相互溝通和應急的解決手段都是相當重要的,對於程序員而言,bug永 遠存在,你必須永遠面對這個問題,大名鼎鼎的微軟,可曾有連續三個月不發補丁的時候 嗎?從來沒有!
第六個步驟是測試
測試有很多種:
按照測試執行方,可以分為內部測試和外部測試
按照測試范圍,可以分為模塊測試和整體聯調
按照測試條件,可以分為正常操作情況測試和異常情況測試
按照測試的輸入范圍,可以分為全覆蓋測試和抽樣測試
以上都很好理解,不再解釋。
總之,測試同樣是項目研發中一個相當重要的步驟,對於一個大型軟體,3個月到1年的外 部測試都是正常的,因為永遠都會又不可預料的問題存在。
完成測試後,完成驗收並完成最後的一些幫助文檔,整體項目才算告一段落,當然日後少 不了升級,修補等等工作,只要不是想通過一錘子買賣騙錢,就要不停的跟蹤軟體的運營 狀況並持續修補升級,知道這個軟體被徹底淘汰為止。
寫這些步驟算不上賣弄什麼,因為實話講我手邊是一本《軟體工程》,在大學里這是計算 機專業的必修課程,但是我知道很多程序員似乎從來都只是熱衷於什麼《30天精通VC》之 類的,他們有些和我一樣游擊隊出身,沒有正規學過這個專業,還有一些則早就在混夠學 分後就把這些真正有用的東西還給了老師。
網上現在也很浮躁,一些coding fans亂嚷嚷,混淆視聽,實際上真正的技術專家很少在 網上亂發帖子的,如筆者這樣不知天高地厚的,其實實在是算不上什麼高手,只不過看不 慣這種對技術,對程序員的誤解和胡說,只好挺身而出,做撥亂反正之言,也希望那些還 沉迷於一些錯誤人士的coding fans們能認真想想,走到正途上,畢竟那些聰明的頭腦還 遠遠沒有發揮應有的價值。
㈧ 程序員被納入「新生代農民工」,碼農為何會被官方定義為「新生代農民工」
01 什麼是新生代農民工「碼農」就是我們常說的程序員,因為靠寫代碼衛生,而且收入低,要長時間面對電腦,所以就自嘲為「碼農」。
我們先來看看「新生代農民工」的定義:
出生於20世紀80年代以後,年齡在16歲以上,在異地以非農就業為主的農業戶籍人口。
具體點來說,他們是「集中於勞動密集型行業,從事信息傳輸、軟體和信息技術服務業的打工人」。
所以如果單從這個描述來說的話,從事軟體和信息服務的程序員們很顯然就是「新生代農民工」中的一員。
但如果你看仔細點的話,你就會發現要滿足「新生代農民工」,條件有兩個:
1.在外地從事非農業行業;
2.農村戶口。
因此嚴格來說,標準的「碼農」前提要有「農村戶籍」,「城鎮戶口的碼農」是不屬於「新生代農民工」范疇的。
就光看這幾點,哪個跟農民工兄弟不是一樣的?