1. 程序員有雙休日嗎
雙休與否與職業無關,與老闆有關。跟了工作狂老闆就容易996,甚至007
2. 嫁給程序員的弊端是什麼
嫁給程序員的弊端:
1、程序員邏輯思維特別強,以至於什麼都用理性思維去對待,感性的女孩別想從程序員身上得到多少浪漫的元素。
2、程序員是IT界的民工,比工新階層還要工薪,身處社會底層的他們,沒辦法滿足女孩更多物質上的需求。
3、程序員擁有一顆呆腦袋,女孩在給程序員講有趣的事時,或許他心裡已經笑開了花,但臉上卻只有淡淡的微笑,讓人難堪,讓人曲解。
4、程序員是也是廉價勞動力的一種,跟沒背景的教師職工一樣,今天是這樣,十年內也是這樣,二十年後還是這樣,前途一片黑暗。
5、程序員在談吐方面比不上一般人,因為平時難得講話、接觸的人少,不僅在日常交際中談吐能力有限,女孩也更別想從他們身上聽到什麼甜言蜜語。
6、程序員一般都不多話,在別人面前總是自信不足,更別談什麼霸氣,當然,他們也沒法給女孩帶來更多面子上的東西。
3. 我女朋友是做java程序員的 最近因為工作 覺得工作壓力太大 經常抱怨 經常憂郁 我該怎樣去幫她
剛開始工作的人都這樣 我也剛工作 有時候挺郁悶的 怎麼說呢 如果實在覺得因為工作而很大程度的影響心情和生活 那就辭掉這份工作 但是 前提是在辭職之前已經找到了比較不錯的工作 因為 如果讓她辭職了卻在家呆著 她心裡壓力更大 那我估計就不是她自己抑鬱 大概你們倆會出問題 如果是我 我絕對會搞得大家都不開心
如果真的不想辭職的話 或許鼓勵她好好地學習專業知識比較好 因為她的問題是自己的能力不足以應付上面的工作而引起的 雖然說這不是短時間能完成的 但是 可以讓她在學習的過程中多點自信 或者 勸她多和同事溝通 這樣有問題的話就不用一個人為難 畢竟 在公司還是要靠同事的幫助的
周末的時候拉著她出去玩唄 恩 可以逛街 也可以是唱k什麼的 這個就你想辦法了 一般時候狠狠地逛街 花點錢就心情比較舒坦了 恩 我是說一般女士都這樣
這個 最後建議一點 其實 有時候 換個環境是好事 但是 有時候還是要學會面對 告訴她自己要放寬心態 不要因為工作影響生活 畢竟 工作 是為了生活 如果 你先把自己搞垮在工作里 那生活就沒什麼樂趣可言
嘻嘻 祝你好運哦 努力哈
4. 如何看待程序員面試讓上機做編程題,這樣的公司多嗎
從事軟體開發多年,上機寫代碼這種考查模式在國外用的比較多,很多國內的公司也在學習這種方式,這種方式能直接看出寫代碼的能力,但對上機做編程題目這種事情很多成熟的程序員覺得是一種侮辱,有一些程序員看到有筆試直接就選擇走人了,這些東西在面試之前應該有溝通,事情不會變得這么被動,因為對於很多有能力的程序員,能夠請到面試已經非常不容易了,能力越強脾氣越大。
直接上機做編程測試能力的公司不是很多,從事軟體開發十幾年主要經歷了四家公司,面試的時候主要靠面談為主,因為編程行業能力的高低通過交談就能了解差不多,只需要根據簡歷上寫的項目進行細節溝通,如果真的做過幾句話就能看出大概的水平,所以很多公司壓根不搞什麼筆試或者上機寫代碼的事情,編程這個職業主要靠時間的積累,並且在積累中不斷完善自己的知識體系,慢慢提高自己的認知。
一個程序員如何提升自己的能力水平,對於初學者來講首先是學習好一門編程語言,開始學習階段覺得編程語言就是天了,好像是學會了編程語言就能做任何的東西了,隨著編程語法的學習完畢就開始嘗試做一些題目,結果發現距離語法真的非常遙遠,所以有很多的初學者有一種感概明明在課堂什麼都明白了,結果到真正自己實踐的時候什麼都想不起來,這是初學者必然的經歷,編程本身就是一種不斷磨練編程思想的過程,編程語言屬於在輔助類基礎技能,沒有輔助就不會寫代碼,編程設計思想再牛也不可能實現,兩者是相輔相成的作用,編程思想裡麵包含著仙姑經驗的積累。
很多人覺得很奇怪有些公司也不進行面試也不讓上機寫代碼,就是通過不到一個小時的閑聊就能把一個人的水平能力和工資水平給定位下來,通過面試就能檢測出編程思想以及編程基礎,編程基礎類的考察只需要問幾個簡單的語法問題就能做個大概的檢測,編程思想就是完全的編程意識以及編程經驗的積累,所以一些企業在招聘的時候明確寫著就相關開發經驗的人優先,企業招聘的目的就是希望要的人在短時間內能夠上崗直接切入到項目開發中去,整體來看是不是需要上機寫代碼測試完全看每個公司的技術文化了。
有些技術類的公司對於程序員的基本功要求特別嚴格,有個同事在第一家技術公司的時候,部門技術經理特別關注程序員的基本語法,只要是簡單的代碼語法錯誤,就能到部門的黑板通報,開始實施階段很多人上了黑板,後來隨著時間的推移上去的人越來越少了,同事說到自己上了兩次黑板都是因為在使用指針的時候沒有初始化導致,到今天還是記憶尤新,如果在技術生涯的初期能夠經歷過這種企業是一個技術人的幸運了,越是嚴格要求的領導或者公司越是有利於技術人員 的成長,至於在面試的時候要不要上機這個就看每個公司的技術文化了,一般注重代碼基礎的領導會引領這個事情,希望能幫到你。
這是一個正常的流程,我覺得有時候還是有必要的考驗一下面試者的。
以前這種面試實際上是很平常的,但是發展到現在越來越多的人對這樣的面試很反感,大概率的原因是因為很多人更多的是在搬代碼,並且搬的很成功,而真正注意寫代碼的人反而越來越少。
筆試和上機編程好不好?
我覺得挺好的,這樣可以刷下去很多劃水的人,有的人,寫代碼的能力並不強,但是搬代碼的技術一流,隨著技術越來越晚上,一些解決各種bug的網站越來越流行,現在更多的畢業生為了高工資,變成了搬代碼的人,他們能解決問題嗎?能,但是是他們自己的解決的嗎?不是,更多的是他們通過搜索的手段,問度娘,問谷歌,漸漸的形成了一個可以解決問題的方案,雖然問題解決了,但是等遇到一個需要創新開發的時候,他們就完了,基本上沒有了自我的思維。
筆試和上機可以有效的防止這類人進入公司,實際上也是一種不錯的手段。
這樣的公司多不多?
據我所致,目前來講上機編程的公司不是很多,畢竟,每個公司所使用的編程軟體不同,有的公司製作的軟體也比較具有保密性,沒辦法直接考程序員的實際能力,只能通過一些演算法測試,或者是什麼測試,來簡單的排除掉那些搬運的人。
所以上機測試的效果並不是特別好,一般的公司都會選擇用筆試的方式。
我遇到過不少筆試的,上機的從來沒有遇到過。
我一個同事之前換工作的時候倒是遇到過,按他所說,這樣的測試並沒有什麼效果,畢竟測試題出得很淺,太難的問題,基本上短時間內很難解決,也不會有那麼長的面試時間。
其實,在我看來,這個上機面試並沒有那麼大的用途,畢竟測試不到太多的東西,還不如看他自己寫過的代碼來的更快。至於這樣的公司多不多,真沒辦法說,畢竟沒有統計過,根據我的經驗,我覺得不會太多。
筆試的我見過,但是上機的沒有過。
1.筆試可以有
這么說嘛,其實簡單的筆試的話肯定是可以的。因為筆試的話可以讓招聘者知道你大概的能力定位在什麼位置?一些邏輯編程可以測試你的邏輯能力。尤其是在it這個行業,邏輯能力是非常重要的。
如果說你是一個已經有工作經驗的人。其實筆試就沒有那麼重要了。這時候看中的一般差不多就是你曾經的項目經歷。
如果說讓你做一些項目上的,比如說項目架構了這種的,你可以拒絕回答。因為我之前就有聽到過說招聘產品經理,讓他去設計一個產品的。結果這個公司就是通過一直招聘產品經理。然後讓產品經理去設計產品相關的功能,最後再把這些所有求職者的產品相關的思維組合到一起。
雖然說這總公司是很少的,但是也不排除是有隻通過這種方式來滿足產品需要的。
所以解釋的時候可以大概的寫一個思路代碼的流程,但是可以不用全部都寫。
2.上機測試
我覺得這個確切的來說是有一點過分的。像這種上機考試的話,肯定他是需要一個比較完整的項目。但是這種項目誰都不知道是他們公司需要,還是讓他僅僅是為了做測試。所以像這種事情完全可以直接拒絕。
在這里大概說明一下。 找工作是一個雙向的過程 ,如果說是你無法接受這個公司相關的制度,或者說是相關的流程。其實你可以趁早放棄這種公司的,不然的話即使是你筆試面試都過啦,你到公司之後也會因為你自己的價值觀跟企業的文化匹配不到一起。遲早還是要辭職的,所以你要慎重考慮。
其實面試的時候筆試和機試都是it的正常流程,但是在國內被玩爛了,面試和機試過程中,會有公司內遇到的問題做為面試內容的,也許是個人也許是公司,讓你解決這樣那樣的問題,這樣子的都是垃圾
作為一個老程序員,關於程序員面試的話題,非常有意思,特別有的聊。其實在 IT 界面,有兩個不算公開的秘密,也就是兩個不成文的習慣或者規定吧,關於面試的。
讓老程序員做筆試題是一種侮辱
很多程序員,尤其是有經驗的程序員,去面試的時候,尤其是去小公司面試的時候,如果對方給你出了一套筆試題,很多程序員會說: 我轉頭就走,這是對我經驗水平的侮辱 。
你們是不是感覺很吃驚,還有這種道理?確實是,我有一次去一個創業公司面試,對方給我出了一套筆試題,我做完了,面試完回去跟一些同事聊筆試題的事,他們會驚訝的說:你竟然把筆試題做了?你是有經驗的程序員,不應該經過筆試的,直接面試就行,筆試是一種侮辱。那是我才發現,好多程序員都這么認為的。
但是,我感覺這是一種病態思維,你既然去面試,其實筆試也是面試的一種,你去大公司比如 BAT 這樣的公司的時候,也會有筆試,而且層層面試好幾輪,你都能忍,一些小公司給你出筆試題,你竟然受不了?公司用什麼方式來面試你,是公司的選擇和考量,當然了,面試是一種雙向選擇,如果你感覺是侮辱,當然可以選擇不面了,這是雙方面試的權利。
但是,我感覺筆試是一種正常的流程,跟有沒有經驗沒有關系。有經驗了,你筆試你確定能過么?
很多程序員都不會選擇上機測試
還有一種就是面對上機做題的面試,很多程序員都不喜歡,其實我也不喜歡的,大部分程序員好像遇到上機面試的情況,也是選擇扭頭就走。
其實,我感覺上機測試是可以接受的,但是是有條件的,那就是上機做題,可以做演算法題,這種方式我能接受。
有一次我去面試,他讓我上機做題,竟然跟我說用 Android 寫個什麼功能,什麼模塊,簡直了,這種題怎麼做?直接去實現功能模塊,寫其中的一個點,我都不熟悉需求,也不熟悉功能模塊,上來就寫,怎麼做?沒法弄。我直接就走了。
演算法題屬於比較明確的東西,上機做兩道應該是可以接受的。
你問上機做題的這樣面試的公司多嗎?可以明確地告訴你,不多,我工作這么多年,面試了很多公司,只遇到過兩家。
我是負責我們公司技術面試的,機試環節必不可少。題目不會很難主要是考核程序員的感覺,只有有感覺的程序員才能寫好大程序,這很關鍵。
這主要看做什麼了,我最頭疼的是拿一個構架來靠你函數命令。我都是自己寫數學模型和函數。我哪知道這個構架的函數名?
務實啊,說明人要的是能實乾的程序猿,沒什麼奇怪。面試需求很明確,要會乾的。找領導才找會說的。剛畢業面試的時候遇見過這種機試,程序猿這行算是工科,靠技術吃飯,面試動手實戰是正常的。
支持,不然很多水逼,劃水貨太多了
這樣的公司會存在
基於以下4個原因:
1 面試的人很多,不想花過多的時間去篩選。這樣做題,可以快速過濾一些濫竽充數的人
2 通過合理的上機操作,有針對性地找合適的人,匹配的人也能快速完成上機操作
3 標准,對面試者統一對待,以免主觀原因造成誤判
4 面試者的配合度,一般看到機試,有人就會直接退出。(我遇到這種情況,就會直接走)
以上4個原因,都是較為正式的原因,還有一個主要原因就是能力不行,面試官無法正確篩選簡歷,面試官無法從面試中獲取想要的信息並加以判斷。
基於最後一個原因就是我會選擇直接走的原因,面試官能力不行,表示公司對此招聘的用功不足,該公司沒有能力或沒有意願重視此次招聘。即使入職,收到的待遇不會重視,沒有必要把自己的前景壓在一個不會重視你成果的公司上。
5. 程序員適合當老公嗎
看個人吧,每個人都不一樣。
6. 做IT行業是不是很累有多累形容下好嗎
看你做到了什麼程度了
初級程序員 做的是重復性的勞動 累而且工資低
高級程序員 做的是相對輕松的工作 每天會有不少的空餘時間 像我老公 三四天來一個任務 這個任務他差不多2,3個小時就能完成 剩下的時間全部由他揮霍
當然他是在外企
如果做到項目主管 技術總監的話 那就更輕鬆了
不過不同的企業情況也會有所不同
但有一點是肯定的 如果你的技術過硬 工作強度很大的公司你可以立馬走人 因為你根本不愁找不到待遇高相對輕松的工作
如果你技術不行
只能是給你啥任務你做啥任務
任勞任怨了
當然
一個高級程序員 也是從初級程序員走過來的
資質好,勤奮好學的程序員 他會感覺到工作越來越輕松
不刻苦的,或者在IT這方面不開竅的 也許他永遠都在初級 低級徘徊 永遠都是最苦的抱怨最多的那一個
關鍵是看你自己怎麼走你的IT路了
7. 為什麼都稱程序員為程序猿反映了這個工種的哪些特質
我上班第一天我的老闆讓我做的第一件事
看兩篇文章:
程序員隨想
雷軍
我不是天生的程序員,也並非天生就喜歡電腦,上高中時也沒有想過將來會當程序員,接觸電腦純屬偶然--小時候的一個好朋友上大學時選擇了電腦專業,為了和這個朋友有更多的「共同語言」我便選擇了計算機系。在大學,我略窺電腦世界,開始為之「發燒」;畢業後,開始了一個程序員的職業生涯。
從開始寫程序到現在快十年了,寫過的程序不少。從這些年的風風雨雨中走過來,不能不有些體會。說到體會,最大的體會就是這條路太漫長。
一、一輩子有你 苦一點也願意
我沒有奢望大家把寫程序和文學創作相提並論,但其中的苦楚卻不是一個普通用戶能夠體味的。為了寫好一個程序,我們度過太多不眠之夜。有個朋友如此評價道,「寫程序簡直是在自殺,巨費精力巨費腦子巨累」。但還是有許多人不畏其苦,前仆後繼。
我剛接觸到電腦就發現電腦的妙處:電腦遠沒有人那麼復雜,如果你的程序寫得好,你就可以和電腦有著非常融洽的關系,就可以指揮電腦干你想乾的事,這個時候,你是十足的主宰。每每坐在電腦面前,你就如同在一個王國里巡行。
電腦里的世界很大,程序員是活在自己想像的王國里。你可以細微到電腦里的每一個位元組、每一個比特的東西。
這樣的日子簡直就是天堂般的日子,很多人都愛上了這樣的日子。
不少人認為程序員最多干到三十五歲就可以收山,腦子也差不多該歇歇了,並認為寫程序悶碧告是年輕人的事情,到了一定年齡,估計沒什麼人再當程序員。
我剛畢業時,意氣風發,也想先吃點苦,到了三十歲就不幹了。年長一點後就發現了自己的無知。一個人大學畢業就二十一二歲,技術成熟一點後可能二十五,接著就是票子、妻子和房子等等諸多忙不完的事情。一切搞掂的時候,也許就是三十五歲。如果三十五歲就放棄的話,我們就不用選擇程序員的道路。
電腦進入我國時間不短,但真正大規模開始用,還是八五年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們能認真想想,走到正途上,畢竟那些聰明的頭腦還 遠遠沒有發揮應有的價值。
8. IT程序員,為什麼會無奈苦逼
首先來談談為什麼要有這篇文章,主要是最近一段時間的親身經歷後的所感。最近我們團隊開始在全國范圍內開始為很多的企業的項目進行性能調優。接觸到了很多不同的人和事情,也看到了很多的現象,趁今天有點空閑時間和大家嘮叨一下。 每次去IT社區,都在吐槽:說技術人員是多麼的苦逼;每次和一些搞技術的朋友聚會,聊的也是大家的生活是多麼的苦逼;每次上網看微博,也是充斥著「技術人員苦逼論」… 今天談到這個話題,固然會有很多的不同的意見和想法,我這里這是就從我看到的一些現象和自己的一些思考說說技術人員到底為什麼「苦逼」。 為什麼苦逼? 原因一大堆,對於外部的因數,我們很難控制,例如中國的IT國情和對技術人員的觀念。但是,在商業中有這樣一句話可以借鑒一下:經濟再蕭條,也有人在賺錢;形式再好,也有很多人在虧本,很多的公司在倒閉。 很多的時候,我們倒苦水,但是心裡要知道:是大的環境讓我們苦逼,還是我們本身就得苦逼,換句話說,苦逼是我們自己應得的。這話很多人不愛聽,但是很多時候確是事實。 這半年多以來,去了不少大大小小的公司,為他們的項目進行救火,解決他們現有的性能等問題。很多的項目在做的時候,很少考慮什麼性能,安全等因素,都是上面的人在不斷的催,下面的人在火急火燎的加班加點趕進度—今天完成了什麼功能點,明天要完成什麼功能點。於是很多的技術人員顧不上什麼,一心思的把功能堆了起來。苦逼的第一個原因出來了。 終於,項目搞定了,上線跑了沒有多久,問題就出來了:項目功能是齊全,但是就是無法使用,有的功能慢的像拖牛。於是,有人建議開始買好的設備,加大帶寬,以為錢砸下去了,情況會好點。但是好景不長,甚至事與願違。於是一堆人就開始焦慮,束手無策,技術人員又開始加班加點的解決明明知道自己無法解決的問題,於是苦逼的第二個原因出來了。 在無法搞定的情況下,技術人員開始郁悶了,接著瘋狂的上網開始收集可能的偏方,然後一股腦的用在項目中,求神拜佛的希望偏方有效果,運氣好,暫時搞定了,那就皆大歡喜,搞不定,把之前的步驟再次重復一次吧。基本可以用下面的一個幽默來總結這個過程: 從接觸到的一些技術朋友來看,有些朋友的技術能力不錯,有的卻讓我想抽自己,沒有聽錯,是抽我自己。抽我自己為什麼要給他們講這么多的東西,而這些東西他們又不懂,然後又非得把懂這些知識的鋪墊知識給他們講。例如,項目出現了內存泄露的問題,公司的技術人員問題我這么回事,於是我告訴他們是VAS的碎雹帶悄片,他們又問我們為什麼VAS碎片了,於是我們給他們講述,但是他們聽不懂,於是讓我們給他們講解一些鋪墊知識:Window內存機制,.NET內存機制等。本來以為大家都是同行,交流交流,沒想到行州,使得我們自己陷入了苦逼: 同時也深深的感受的一點:很多的技術朋友在走出了校門或者培訓學校之後,技術能力就沒有在進步了,一是處於打混的階段,有的運氣好,很多年之後,混到了不錯的職位,但是很多的人卻混的非常不幸,於是他們就成為「技術人員苦逼論「的忠實粉絲。其中有一點就是很多的朋友不喜源渣歡自學,總是希望有人手把手的教。我們遇到的一個最搞人的情況就是,我們已經把功能全部調完了,代碼完全實現了,伺服器也是全部配置好了,就差調試了,很多的人依然不動。 也使得我想起另外一個情況:每次有很多的朋友都說要學習技術內幕,要學深一點,喊著叫著要看深一點的文章,但是寫出來之後,沒有幾個人真正的看完,前幾篇簡單的介紹看的人很多,稍微深一點,就沒有人看了。也有很多的朋友想到處找大牛拜師,都希望沾點牛氣,成為牛中的一員。但是技術,能力,這個東西終究靠自己。用心與不用心,差別就是天壤之別。 我常常說這樣的話:社會不是初中,高中,沒有人會像老師那樣手把手的教你,盯著你,一切靠自己。沒有誰就非得要叫你,沒有人欠你的,如果自己都不上進,想做阿斗,諸葛亮來了也沒用辦法。物競天擇,適者生存! 我非常敬佩那些出身不好但是一直堅持奮斗的人,也非常敬仰那麼環境舒適還依然努力的人。你遇到過很多聰明人,你的大學同學,你的同事,你的朋友,有幾個比你傻?很多年以後,你會看到成功的並不是最聰明的人。因為決定成功的更多是非智力因素:明確的目標,積極的心態,努力和堅持,承受挫折和壓力的能力,成熟的接人待物等等。有一種人註定沒戲:不努力和怨天尤人。 長期操作電腦需要養成的好習慣談程序員的出路我的25年嵌入式生涯--周立功 (很值得一讀)衣最個性:男裝之短袖T桖篇男生買衣服為什麼就這么難?技術七年之感受程序員每年要做的十件事Java 的工作原理Java語言的輝煌,還能延續多久?