1. 程序員跳槽應該注意什麼
程序員跳槽的注意事項有哪些呢?下面我為大家整理了程序員跳槽的注意事項,供大家參考!
一、技術要有深度,更要有廣度
一味的鑽研某一項技術,乃至達到頂峰,這是很OK的。但是,科學的發展也是極快的。 所以,在研究深度的同時,不要忘記關注當下流行的技術。 拿游戲開發來說, 許多招UNITY3D引擎程序員的公司,是不會為一個多年經驗的傳統引擎開發者開出大價錢的。 特別是一些新團隊,或者團隊LEADER本身沒有這個意識。 當然,也有識貨的公司。
二、跳得多漲得快,不跳不漲
很多人覺得,現在的程序員很浮燥,幹不了多久就要跳了。 但是,有沒有想過,這是什麼導致的。 你一年不漲工資,兩年不漲工資,那別人發現,自己的工資與業界水平相距太遠,不得不跳。 或許你說,那至少要要多呆些日子,多積累經驗再跳吧。 我們來看看第二條潛規則。
三、你在上一家公司的工資,直接影響了你在下一家的工資
每個人都是有底線的,這個底線,是一個相對值。 因此,業界通常喜歡在你上一家的工資的基礎上,最多上浮30%。 也就是說,你幹上十年,運氣如果真的好,說不定到下一家的工資,可以翻翻。 這一條,和第一條是相輔相成的。
四、不要對分紅期望過大,工資一定要要到位
項目成功,是靠大家的努力才能換來的。 但,項目的失敗,或許是由於個別人的人脈太差,或者管理水平太次。
五、年輕的你,很難成為高管
或許你技術一流,或許你智商很高。 但是,你的確沒有成為管理者的資本,人脈,經驗,閱歷,你是比不上那些‘前輩’的。 因此,多忍忍吧
六、內推比盲目投簡歷有效
很多人喜歡在網上投簡歷,而實際上。各大QQ群里的招聘信息,更佳有效果。一般都是HR或者獵頭在發。有的直接是老闆。
七、不要因為筆試面試失誤就否定自己
筆試面試通常喜歡考演算法,數據結構,或者一些特定的知識。 如果你很厲害,完全搞定這些了,說明你真的很不錯。但如果不巧遇上了一些自己不會的,或者因為工作一直沒有和這個沾邊而忽略了的。不要為此為感到煩惱,如果你覺得有必要補充這方面的知識,那接下來可以抽空補上。但是,不要因為這過,而放棄自己的'先前的工資期望。是個人都能明白,即使有些東西你不會,在項目開發過程中,也會自然會的。人的本事不是與生具來的,不是你掌握得多少,而是當你面對一個未知問題的時候,你能用多少時間來掌握。
八、前期靠技術,後期靠情商、人脈
年輕的時候,你可以用你的精力去拼博,可以努力學習。但隨著年齡的增加,你的精力會不及當年,同時也要面對家庭。因此,在發展技術的同時,也不要忘了結交各種小夥伴,大夥伴…………
PS:以上事項,排名不分先後。每一條,都實用
但是,技術是根本,是你作為一個程序員,能夠在這個行業混下去的最佳籌碼。如果你還有精力擼,那希望你不要放棄對技術的追求……。
其他注意事項
1、確實是跳得多漲得快,不跳不漲
但你不能讓HR發現你跳的多。
2、你在上一家公司的工資,直接影響了你在下一家的工資
確實很多HR以這個做依據去砍價,不過可以報高上家公司的待遇,不過也別亂用,現在很多公司入職要開上家公司收入證明的。
3、不要對分紅期望過大,工資一定要要到位
除非是非常正規的大公司,不然想都別想,我有家公司給我說年底獎金2月工資,結果半個月工資。
4、技術要有深度,更要有廣度
拿高工資沒有技術做底子是不行的
5、內推比盲目投簡歷有效
內推的話至少不會因為一些其他因素給過濾掉,對方相對來說也相信內推的人。
6、不要因為筆試面試失誤就否定自己
基本上好的工作都是面談環節搞定的,筆試人家基本不看的。
2. 程序員現狀,看看來自二三線城市程序員的真實感受
2022年3月,烏魯木齊市,95年26歲Java後端程序員。
我先後在烏魯木齊市兩家互聯網公司工作過,通過自己努力的思考,總結出了一些對程序員現狀的看法,供大家分享和參考。以下內容全部屬實。
很多人會覺得程序員是高薪行業,並且有人會說朝九晚五雙休,工作清閑還有業余時間去做其他事情。
我來揭曉真實答案。真實答案和上述情況基本完全相反。
真實情況我的城市,程序員的薪資算不上高薪行業,不是行業平均薪資不高,而是這里很多中小企業都會考慮降低用工成本,在招聘的時候用各種方式打壓你的薪資。
這種方式尤其對新入行的程序員特別奏效。因為企業打壓你工資的方式有很多種,而新入行的程序員根本就沒有與企業談判的資本。或許你入行時技術功底扎實,開發水平相對較高,又或者你學歷很好,綜合能力很強。但是企業依舊會以你沒有工作經驗,以及試用期,或者說培養你都需要付出成本,找人帶你教你等等一系列舉措,讓你啞口無言只好接受企業的用工要求。沒有能跟企業談薪資的能力。企業最後會以一個較低的薪資利用你為企業創造更大的價值。
而處於新手階段和試用期的你,想要獲得企業的青睞獲得轉正的機會,會更好的去工作提升以及轉正。這樣你會在試用期努力工作,為企業創造效益。這個時候大多數程序員都會想,薪資低一些活多一些累一些也無所謂,因為這時候在鍛煉提高自己的工作能力,對自己其實也有很大好處。企業也同樣利用員工這個心裡,不停的激勵你去工作。而企業只是付出了很小的成本,利用新人的你去做了很多又苦又累的活,而你還不自知。這樣企業很開心啊,而你除了努力付出工作和鍛煉,錢卻沒有收獲進口袋裡。
你以為你能力鍛煉了就會對應的拿到較高的薪水的時候。但是你別忘了,小企業把程序員當碼農並且降低用工成本的核心思想並不會因為你的技術提升而發生改變。
企業依舊會以招最少的人用最低的成本讓員工干最多的活去運行,並且項目大人員少,這樣上線前一個就有理由讓你加班,並且告知你是不可避免,去要求你加班工作。我自己的真實經歷是連續加班一個月,並且在每天正常下班之後還需要額外加班5-6個小時,工作日連續五天加班後,周末再額外加班一天的強度去工作。基本就是一天工作14個小時一周工作6天,這么個強度。而且企業並不會在乎你是不很累,加班不會付加班費,而是以加班可以調休的方式安慰你。然而你想想這種小公司,並且開發人員企業不配備很多的情況下,怎麼會讓你調休。調休是需要上級領導項目負責人到經理,一系列人的簽字的。可想而知,調休說是有,基本想想就可以,不會讓你想休就休的,哪怕加班很累,第二天還是要上班。因為你不幹就沒人干,但是公司項目需要上線。而且你的工作每天都有人監工,你就負責幹活就好,讓你做什麼就做什麼。這樣你還會覺得程序員薪資很高嗎?
現在企業都知道招年輕人,剛入行的新人最好。因為他們沒有太多經驗,好對付,便宜而且幹活又賣力。哪怕有幾個不上進的水平差一點的,也會有人監督你把每天的任務完成。怎麼說企業都不虧,所以企業能用新人和年輕人為何還會選擇你要求薪水高的人呢。你以為你技術上去了,可以跟企業要高薪的時候(其實也不高,就月薪過萬而已),以你的技術可以拿到月薪過萬的時候。企業依舊可以通過各種方式降低用工成本,或者壓根就不錄用你。比如試用期只給你80%薪水,哪怕企業知道你經驗很豐富,也利用試用期少給錢讓你多幹活快速熟悉並進入開發。會以工作年限限制你的薪水,你說你水平高怎麼證明,其實就是企業不願意承認和付出更高的成本而已。哪怕你技術很牛學歷很好,一樣會面對這樣的問題。等真到一定的工作年限的時候,你會發現頭發和精力和興趣都會少很多。你再去跟企業談薪,你還會發現企業還有方式降低用工成本。你有家庭嗎,你能加班嗎,對你提更高的技術要求等等。雖然總的來說薪資會有一定上升,你想要拿到一個滿意的薪資很難,因為你滿意企業就會不滿意,企業不會為了照顧你,而降低自己的企業的效益。
這就是現在絕大多數程序員現狀。付出很多,承受很大的壓力,賺取來一點辛苦錢。而且現在程序員絕大多數都會有35歲危機。這行業想要做好是有一定門檻的,還要有抗壓能力和很強的學習能力,理解業務的能力。現在你還覺得程序員這份工作好乾嗎,高薪嗎?那些年薪幾十萬的都是一線大廠的少數人。中國絕大多數行情,程序員就是底層的碼農而已。付出這么多,收入稍微比普通職業高了那麼一點而已。一樣會面對買房買車的壓力。誰也沒比誰好多少。沒有太多業余時間發展愛好,接觸更多事物,壓力大。絕大多數時間在跟計算機打交道。每天面對電腦的時間很久,一坐就是一天。
我這兩天也是剛離職,因為企業不招人進來,就五六個人干一個項目,還加班。當你去面試的時候一大堆企業要招你,但是能給你滿意薪水的企業的數量直接就大打折扣了。
當然企業不給你滿意的薪水,也不代表你不好,這只是畸形商業模式下的企業招人的方式而已。你要相信自己其實比很多人要優秀。
否則企業會讓你懷疑人生的。在一個沒有裝修過的小房間當碼農的感覺親自體會一下就明白了。就像不被企業在乎的流水線工人埋頭苦幹。
遇到這種情況程序員們一定要堅持自己薪資的底線,不要讓企業或者根本不懂技術的hr 輕易的壓低你的薪資。而你卻選擇默默接受。雖然我們是打工人,但是面對這樣的企業也要堅持自己的原則,去進行雙向的選擇。並且為自己以後的發展做好規劃。
希望程序員們都能找到一家滿意的公司,去發展。人生只有一次,不只是工作,一定要按自己喜歡的方式去活。
這就是來自二三線程序員的真實現狀。你們怎麼看呢?歡迎在評論區留下你的看法。
3. 程序員該有哪些職業道德
to accept responsibility in making decisions consistent with the safety, health, and welfare of the public, and to disclose promptly factors that might endanger the public or the environment;決策時要維護公眾的安全、健康、福利,並及時披露任何危及公眾的因素。
to avoid real or perceived conflicts of interest whenever possible, and to disclose them to affected parties when they do exist;盡量迴避存在或可預見的利益沖突,如有沖突存在應及時向波及對象披露。
to be honest and realistic in stating claims or estimates based on available data; 對現有的數據的聲明或估計應誠實、客觀
to reject bribery in all its forms; 拒絕任何形式的賄賂
to improve the understanding of technology; its appropriate application, and potential consequences; 增進個人對技術及其應用和潛在後果的理解
to maintain and improve our technical competence and to undertake technological tasks for others only if qualified by training or experience, or after full disclosure of pertinent limitations; 保持並提高自身技術實力,在確保能力和經驗勝任、並充分披露有關局限的情況下,方可接受他人的技術性委託
to seek, accept, and offer honest criticism of technical work, to acknowledge and correct errors, and to credit properly the contributions of others; 對技術成果,尋求、接受和提供誠懇的批評,承認和糾正錯誤,和恰當地承認他人的貢獻
to treat fairly all persons and to not engage in acts of discrimination based on race, religion, gender, disability, age, national origin, sexual orientation, gender identity, or gender expression;公平對待所有人,不做出任何有關種族、地域、性別、殘障、年齡、國籍、性取向、性別認知、性別表現的歧視行為。
to avoid injuring others, their property, reputation, or employment by false or malicious action; 避免因錯誤或惡意的行為損害他人人身、財產、名譽、或工作。
to assist colleagues and co-workers in their professional development and to support them in following this code of ethics.幫助同事的職業發展,並支持他們遵守職業行為准則。
4. 為什麼說千萬不要和程序員談戀愛呢
和程序員談戀愛會非常的累,在這場感情里付出的時間和精力也很多。但換回來的永遠都不是幸福的生活,完全是一種冷冰冰的狀態。
一、以工作為主
程序員的職責就是以工作為主,對於自己的戀愛總是順其自然發展。因為程序員不懂得情趣,在他們的生活里工作往往大於一切,甚至在自己工作的時候絕對不允許別人打擾自己。
和程序員談戀愛除非是一個堅強的人,這樣才能接受程序員的愛情,也會讓兩個人的愛情順其自然發展。如果沒有這樣的本事要遠離程序員,遠離這樣的愛情。
5. 作為一名程序員,你真的理解需求嗎
作為一個程序員,最重要的職責就是: 按時保質保量地完成需求開發。
像開發新業務這樣的復雜需求, PM (Proct Manager,產品經理) 一般會寫出詳細的 PRD (Proct Requirement Document,產品需求文檔) ,甚至可能會製作高保真原型。
而像調換兩個按鈕順序這樣的簡單需求,PM有可能只會口頭通知一下,最多在JIRA之類的項目管理平台上創建一條只有標題的ISSUE。
如果是有和用戶交互的需求,負責設計的部門或人員一般會提供設計圖。專業一點的話還會幫你把圖都裁好,並准備不同屏幕解析度下使用的多個尺寸版本。
當然,如果你在一個剛剛成立的創業公司,很有可能是創始人在白板前(或者是飯桌上)講了半個小時,然後就問你:「需要多長時間把它做出來?」
不管提出需求的是PM還是創始人,他們的腦海中一定為這個需求設想好了一個自洽的邏輯和形態。PRD也好,口頭宣講也罷,都是在描述這個邏輯和形態。他們提出需求,就是希望程序員能夠最大程度地還原他們的設想。
說起來簡單,做起來難。 我們可以通過一個小實驗來揭示這一點。
首先,你需要找一張長方形的紙。如果你在辦公室,那就找一張A4紙;如果你在家,那就找一張紙巾。然後按照下面的步驟進行操作:
你的作品是什麼樣子?中間開洞了嗎?邊上呢?角上呢?如果再做一次,你能完成同樣的作品嗎?
你可以拿著同樣的紙去找你的家人、同事或朋友,請他們來完成同樣的操作。在你不施加影響的前提下,他們完成的作品極有可能和你截然不同。
為什麼會這樣呢?
如果你仔細觀察他們操作的過程,就會發現:
由於每次對折都會可能產生兩種不同結果,在撕第一個角時紙的朝向有四種可能性,旋轉180度時有兩種可能。所以僅僅兩個撕角的位置,就至少有 2 x 2 x 4 x 2 = 32 種不同的可能性。
就這樣,我們還沒有考慮撕角的大小、角度的區別,還有極少數人是會沿對角線對折的……
上面撕紙的需求,其實是我自己拿了張紙隨意擺弄,然後記錄下來的操作流程。我照著這個流程,可以十分輕松地做出完全相同的作品。但是如果讓別人來做,結果就完全不一樣。其原因就是,我在完成作品的過程中,不光是按照流程進行操作,還隱含了自己的一些小習慣,卻並沒有把這些細節記錄下來。
如果把所有細節都完整地記錄下來的話,需求應該是這樣的:
同樣,PM在寫PRD時,很有可能會漏掉一些自己認為應該是「常識」,無需再進一步說明的內容。比如「把一張紙對折」,我們很容易想當然地認為,應該是沿著長邊對折,但事實上並非所有人都是這么理解「對折」的。
由於每個人的成長經歷不同,其認知結構之間必然存在差異,因此對同一概念未必持有相同的理解。 你所認為的「常識」,我可能並不知道,或者擁有和你截然不同的理解。所以程序員在看PRD時,一定要把自己對需求的理解復述出來,跟PM確定是不是這么回事。否則就容易出現開發中、提測甚至上線後發現邏輯性錯誤,需要緊急修復甚至返工的情況。
此外, 很多問題在設想階段是發現不了的,只有到了具體實施時才會暴露出來。 PRD不可能真正做到完備,也不能保證沒有錯誤和遺漏。比如一個表單需求,很可能在做的過程中發現某個非法數據case是PRD里沒考慮到的,這時的用戶交互怎麼做?文案怎麼定?這都要和PM溝通來解決,而不能自己拍腦門決定。
PRD只是需求的一個快照性描述文檔,並不是需求本身。 程序員應該對需求負責,而不是對文檔負責。 只有和PM保持溝通,不斷地細化需求,才能讓需求真正落地。當發現PRD里有不合理或者有疑問的地方時,一定要提出來讓PM進行解釋。千萬別視若無睹,甚至乾脆將錯就錯,等著看PM笑話。
如果我們拿到了一份圖文並茂、十分詳盡的PRD,是不是應該馬上照著文檔開工呢?那可不一定。
一位優秀的程序員,應該在開工之前把下面這些問題想清楚:
程序員有責任對需求方案進行review,並協助PM改進設計。 要知道,PM一般不會從技術角度對需求進行考慮,所以往往提出的並非最優方案。有時只要做一點點調整,技術實現的難度就會大大降低,卻不影響目標的達成效果。
比如某個業務需要用到日期選擇器組件,PM為此專門設計了一個,而你知道系統中某個功能頁面里有現成可用的同類組件。這時就應該和PM溝通是否可以直接復用,或者在原有組件的基礎上進行功能擴展。這樣既節省了開發資源,又保持了用戶體驗的一致。
程序員要對整個產品的可用性負責,全面評估需求可能導致的不良影響,謹慎對待有破壞性的需求。 PM由於不了解系統的底層實現和實際數據的組織方式,所以很可能無法全面地評估需求的影響面。如果程序員忽視在這方面的思考,只是機械地按部就班地執行方案,就很可能導致嚴重的線上事故。
比如要對某數據進行批量修改,在做的過程中時發現該數據有多個業務正在使用。這時就應該必須停下來和PM溝通,因為PM可能只了解自己負責的那一塊業務,不知道修改可能會對其他業務產生影響。此類需求要和相關各方溝通協商,確認修改沒有不良影響後才能繼續。
程序員要有魄力去拒絕那些明顯不靠譜的需求。 有的時候,PM提出需求的動機不是為用戶創造更多的價值或提升用戶體驗,而是為了沖績效完成自己的KPI。為此拆東牆補西牆,從兄弟業務手裡搶流量入口;甚至殺雞取卵,以嚴重破壞用戶體驗的方式拉量。遇到這種事,程序員一定要堅持自己的原則,守住自己的底線。
6. c#程序員都有什麼最低要求
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們能認真想想,走到正途上,畢竟那些聰明的頭腦還遠遠沒有發揮應有的價值。
7. 如何確定自己是否適合做程序員
你老婆對你說:「老公,晚上回來買一個西瓜,如果看到西紅柿,就買兩個。」
如果你晚上買了一個西瓜和兩個西紅柿回來的話,說明你不適合當程序員。
如果你晚上只買了兩個西瓜回來的話,說明你適合當程序員,但是
。。。
。。。
。。。
。。。
。。。
。。。
。。。
你應該不會有老婆。
=========華麗麗的分割線===========
你們這群程序員也是夠了,一直在吵應該買幾個西瓜,你們這么吊你們老婆知道嗎?還有很多有經驗的程序猿說應該反復確認用戶需求的,你們確定你們都能找的到老婆?
我聽到需求時心裡運行的代碼如下:
int 到底買點啥 ( ) {
// 所有把大括弧放到這一行的人都去屎!
int 西瓜的數量 = 1;
if (看到了西紅柿) {
// 注意大括弧的位置
西瓜的數量 = 2;
}
return 西瓜的數量;
}
// 尼瑪,為什麼沒有縮進!!!!
那麼什麼時候該買三個西瓜呢?我們重現一下場景:
你老婆對你說:「傻X,晚上回來買一個西瓜,如果看到西紅柿,就再買兩個。這次你要是還買兩個西瓜回來,我就一輩子都不理你了!」
你仔細揣測了一下她的需求,發現了這個關鍵的「再」字!哈哈哈,這種戰鬥力只有5的渣題怎能難倒我這種top coder!你晚上開開心心地買了三個西瓜回來,跪碎了新買的HHKB pro,老婆還是摔門而去,攔都攔不住!
這次你運行的代碼如下:
int 到底買點啥 ( ) {
// 所有把大括弧放到這一行的人都去屎!
int 西瓜的數量 = 1;
if (看到了西紅柿) {
// 注意大括弧的位置
西瓜的數量 += 2;
}
return 西瓜的數量;
}
就讓這三個西瓜陪你過下半輩子吧!!!!
8. 求堅守底線的事例,急急急
司馬光在《交趾獻奇獸賦》中有言「正心以為本,修身以為基,」可見自古以來,修煉正直的高尚的品格就被視為安身立命的基石。周恩來同志,一生嚴於自律,為世人所景仰,這是他平生注重道德修養的結果。他年輕時代,貼手書警句於大立鏡旁,言「面必凈,發必理,衣必整,紐必結;頭容正,肩容平,胸容寬,背容直,氣旬勿傲勿怠,顏色宜和宜靜宜庄。」縱觀周恩來一生,不論局勢如何動盪、嚴峻,他都照鏡自勉、堅守高尚的品格,贏得了中國人民乃至世界人民的尊敬。周總理的事跡,為我們樹立了堅守高尚品格的榜樣。
尊嚴是上帝賦予每個人的最崇高的信物,也是一個國家得以高昂頭顱,不被侮辱的脊樑。天津有兩個計算機系的高材生,剛畢業就被日本某軟體開發公司邀為程序員,開發一個以日本二戰為題材的大型游戲,公司答應給予他們豐富報酬。但在得知此游戲的宗旨含有美化侵略的成份,他們毅然辭職。公司加酬謝,他們嚴辭拒絕:「我們是程序員,但首先是中國人!」就這樣,他們以自己的行動堅守住了自己的尊嚴和中華民族的尊嚴,不論多麼優厚的物質回報,都無法腐蝕他們自己堅守的那一方心靈的凈土。
正義是道德的核心,是一切社會准則的靈魂。作為真正的人,在面對強暴、威逼、利誘之時,必須毫不動搖地為正義而戰!南宋末年,宋都臨安被元軍攻破,文天祥面對元軍高官厚祿的誘惑,毫不動心。元軍沒辦法,只得把他囚禁起來,折磨他,但為了民族大義,他始終沒有屈服,反而寫下了令人感佩的《正氣歌》,最後英勇就義。文天祥以自己的生命為代價,捍衛民族大義。
9. 程序員該有哪些職業道德
只有一個道德問題,誠實和其他技術和貿易問題。
離職的時候,我沒有帶走一行代碼,我覺得這就是職業道德。
目前在國內IT行業,我覺得最可怕的不是問題,但當它人才流失技術(如源代碼、文檔等)也跟著一起,它是可用的,一些大公司,比如一些外國公司所做的相對較好,電腦上的所有外部設備介面已經被封鎖,不得INETERNET,即將離任的電子郵件或被監控,但不用說,這種管理方式,通常國內中小企業很難做到這一點,所以基本上依靠員工的意識和個性,就像心理醫生必須為病人保守秘密,作為程序員或者人才,當你從事產品的研發和接手一個項目,你必須與該產品或項目如源代碼、文檔、數據保密,這些東西是公司的商業秘密。
10. 我35歲了,還能做程序員嗎
首先,程序員這個行業和年齡沒有很大的關系,前段時間還有新聞報道一位80歲左右的老奶奶自己學編程做出了游戲呢,你還在擔憂什麼呢?如果你不清楚自己是否適合做程序員,看看這幾點你達標了嗎?
1、邏輯思維能力(或推衍能力)
這個是做程序員的底線。比如不能寫的代碼出個Exception就抓瞎不知道哪裡出了問題,而是有能力從Exception順藤摸瓜反推出哪裡出了問題。Code即邏輯,Code有問題即邏輯有問題。沒有邏輯的人是無法找到邏輯漏洞的,也寫不出條理清晰的代碼。
2、抽象思維力
這個能力大體可以決定一個程序員的上限。沒有這個能力是做不出一切皆文件這種抽象的,可以試試學習函數式編程,如果無法理解並使用高階函數,你不適合做程序員。再來幾個更初級的例子:如果你學寫代碼的過程中,理解指針的指針的指針這個東西的時間超過了一天,那你不適合當程序員。
3、專注力
我理解的專注力只是興趣的衍生品,你打Dota,打CS打幾個小時能越打越有興趣,為什麼?因為你覺得有趣。如果也覺得寫代碼有意思,那專注自然不是個事。
4、想像力與記憶力
這個不是說過目不忘的那種,只是說你大概記得有什麼類,都有什麼函數,每個函數里的大體過程是什麼樣的。然後走路、坐地鐵的時候就可以用想像力在腦子里做代碼的重構啦,找Bug啦什麼的,然後回到電腦前就噼里啪啦敲代碼。我聽說有人在夢里也能寫代碼,我還沒有鍛煉出這個技能。當然,這些能力不是必須的,你隨身帶個筆記本也行,就是效率低些,影響職業成長的上限。
5. 英語
很遺憾地,目前多數有價值的東西都是英文的。所以無障礙閱讀Stackoverflow的回答是起碼的。