Ⅰ 一般'程序員'的薪水多少
他問就是程序員,一般程序員不用設計,不用測試,就是按照別人設計的思路寫寫代碼,做做單元測試,工資是不高,有2000不錯了,比他高的有軟體設計師,軟體測試員,系統分析員,項目經理,技術總監等,不過區域、單位差異很大
Ⅱ 有哪些話一聽就知道一個程序員是個水貨
水貨程序員特徵總結:
以點蓋全,並且會根據某個程序員說的一句話就斷定別人是瞎說的人,觸及到自己的盲點就會開始叨叨叨別人怎麼怎麼的這種程序大概率是個水貨,就是看別人代碼(除非真是懶得出奇的)就會各種叨叨,殊不知其實他叨叨的這種水平放給他自己寫他也是寫不出來的,復制粘貼和創新是兩碼事兒,就像修改和創造是兩碼事兒,要知道一個真正學習程序比較厲害的人看到問題都會去分析和思考他為什麼會這樣說。
」程序員能幹到退休嗎?「問出這樣的問題,認為程序員35歲要轉行也是大概率是水貨,35歲這文章已經發表多次了,其次真就是缺乏點體力和智力競爭力弱一點其他方面需要強一點而已,我就不信了35歲難道其他行業就不會存在問題?
甩鍋,遇到問題就甩鍋的這種也是40%概率。
初生牛犢,這種程序員真的就應了那個階段,自己做了一點東西學了一點東西覺得擁有與自己實力完全不匹配的優越感,基本沒有什麼謙虛心理,覺得前輩都是垃圾,因為對一個新技術不了解或者對前輩做的方法不夠理解到深度,就覺得寫代碼就這么回事兒,感覺啥也會,java,go,php,c隨便來,這種哦大概率80%hi個巨大的坑,做什麼事情都是答應的滿滿的然後盡情的被各種打臉,打臉打多了才會老實然後進入下一個階段。
目光狹隘,總是覺得自己弄的才是最牛逼,也就是所謂語言鄙視鏈的那潑,真的不明白優越感從何而來看不起這個語言瞧不起那個語言的80%大概率。
簡歷上寫著」精通。。。。「之類的基本也是大概率70%。
用Java,要用java啊,安全,這個大概率不是水貨,但是這種理論很菜。
8。。。8暫時還沒有想到
Ⅲ 作為一個iOS開發程序員,我的未來何去何從
隨著移動互聯網流量紅利的逐漸退去,iOS程序員正在面臨開發崗位增速下降的現實問題,一方面App開發的熱度在下降,另一方面大型互聯網平台相繼推出了自己的小程序生態,在這些因素的綜合影響下,iOS程序員的崗位競爭壓力將進一步加劇。
作為iOS程序員來說,如果想在技術研發的道路上走得更遠,可以從以下幾個方面入手:
第一:豐富自身的知識結構。 在當前大數據以及產業互聯網的推動下,軟體開發的功能邊界在不斷得到拓展,同時由於大量的互聯網公司開始採用數據驅動的運營方式,所以開發團隊小型化的趨勢也比較明顯,這就要求程序員要具備更豐富的知識結構,以適應不同的開發角色。iOS程序員可以進一步從崗位任務開始進行知識結構的拓展,比如進一步豐富前端開發知識就是不錯的選擇,iOS程序員也完全可以走全棧開發路線。
第二:跳出iOS的生態圈。 iOS的生態圈相對來說還是比較封閉的,而且iOS程序員自身可以發揮的空間也相對有限,主要原因是系統的封閉性所導致的。如果想綜合提升自身的研發能力,可以考慮跳出iOS的生態圈。
第三:走研發級路線。 iOS程序員也完全可以走研發級路線,走研發級路線需要做好三件事,其一是選擇一個主攻方向;其二是有扎實的基礎知識儲備;其三是能夠不斷完成崗位升級,從而獲得更多的資源整合渠道。不少應用級程序員在發展的過程中會遇到較大的上升瓶頸,通過讀研來完成崗位升級也是一個比較常見的選擇。
如果有互聯網、大數據、人工智慧等方面的問題,或者是考研方面的問題,都可以在評論區留言!
微信適配夜間模式了嗎?這就是例子,強者話語權,ios先天的系統優勢就是一個市場的錨點,微信知道自己的命根子在哪,為硬體設備提供極致操作的工具,例如Metal,無可匹敵,再說ios系統核心的源代碼,與高端伺服器os unix一脈相承,又有進一步的嵌入式操作,核心api專業打磨,絕對不是開源系統能比的量級,說白了每個環節都是錢砸出來的,靠的都是工匠精神,核心源碼是任何一個程序員的寶藏,不要認為玩過幾個跨平台根本不考慮性能的js小技術就明白了一切,只要去過Google開發者大會的就知道,看看安卓程序員手裡吃飯的傢伙是啥,mac,頂上的葉子再多也要靠下面的根,喬布斯,一騎絕塵
去開發華為系統的APP,動作要快
轉後端 Java PHP go py都學一波
我干過大概一年的iOS開發,後來又轉回java了,說句實話,iOS對開發者確實友好,一切都很不錯,開發工作也很愉快,但是後來工作不太好找,而且iOS開發的發展深度沒有java深,java深入不僅僅是curd,還有架構、框架、微服務、分布式 等等。而且java到架構之後,薪資也比iOS要高很多,不過我不建議你學我,除非你有毅力學習java,因為我除了有iOS開發經驗之外,還有五年的java經驗,說轉也就轉了。
作為IT行業的從事多年的程序狗,我來解答下您的這個問題。
2015年到2017年可能是IOS最熱的一段時間,大量的軟體開發人員投入IOS的市場。現今隨著蘋果公司的銷量不斷受挫。IOS的市場也是不溫不火。
IOS開發程序員,其實可以嘗試這跳出這個生態舒適圈,軟體這個行業是多向選擇的,軟體的開發思想、程序的設計思想都是大同小異的。對於一個精深IOS開發人員來說,對於別的語言多少都會掌握一些,這對於您跳出IOS的圈也是一大幫助。畢竟Java、Python現在是市場上的主流語言。
另一個方面就是很多資深程序員選擇的,進入深層次領域的學習。走研發級的一些路線。研發級軟體研發的職位生命周期長。工作壓力會比程序員小很多,很適合大齡程序員的選擇。
或者就是選擇自己的一個主攻方向,做這個方向的專家,這也不失為一種選擇。豐富自身的知識結構,向著全棧開發工程師不斷的前進。
或者可以嘗試這轉行管理層,做一些技術經理、技術總監。當然任何一種選擇都需要您結合自身的實際情況去抉擇。謹慎考慮、然後在做選擇。
希望回答對您有所幫助。
我本人從事多年互聯網Java開發,感興趣的朋友可以關注私聊,共同努力,共同進步。
謝謝!
我是8年iOS開發從業者,結合我自身情況以及我自己的職業規劃,希望能夠幫到你。
焦慮 今年已經三十歲了,對於iOS的現狀和未來也時常感到焦慮,大齡程序員未來的出路在哪,我也會迷茫。
市場需求 移動開發需要iOS,安卓兩端一起開發,耗費的時間成本是企業會考慮的,再加上html5、小程序、各種跨端方案的出現,市場對原生開發需求更少了。
案例 再分享一個之前做主管時我招聘C++開發的一個經歷,杭州C++需求量不大,但是這位應聘者能力過硬,最終進了華為。
我們應該怎麼做 上面的案例也印證了只要自身技術過硬,只要市場還有需求,過多的擔心和焦慮是沒有必要的,把大量的時間花在 探索 未來方向,不如沉下心來學習技術,努力提高自己,成為不可替代的人才。其實應對焦慮最好的方法是行動,目前市場更需要的是高端人才,只要有崗位需求,把自身能力提高上去之後,現在所擔憂的問題都會迎刃而解。
希望我的回答對你有幫助,隨時歡迎留言反饋。
flutter歡迎你
轉其他語言,或者自己獨立開發
我鼓搗flutter去了
Ⅳ 程序員接私活能賺多少
程序員接私活收入
程序猿接私活一般都是接小型的項目外包。
看項目大小以及外包需求方的經費。
一般一個項目20W以上。
但是項目不是你一個人就能做的。
如此看,還需要幾個程序猿平均分配。
我之前接私活,每天耗費2-4個小時,平均每月獲得外快5500元。
程序員接私活一年能賺多少錢知乎
這個要看你做的是什麼項目
程序員能接私活么,一般怎麼接的
1.個人所接觸的,往外包的大活一般都是找朋友推薦,知根知底有一定信任基礎,一定程度上就是拿朋友的了解做信用擔保了,這樣項目會比較可控。否則隨意外包,項目管理成本會比較高,就未必劃算了。也有些程序員跟銷售、市場人員的合作,以工作室的性質對外找活,生意不錯就逐漸轉為公司運作。
2.一般接的活按預估工作量,通常按自己工資的1.5倍交易。根據技術稀缺程度浮動。
3.在我看來,程序員在公司內的工作量取決於管理,管理到位的情況下程序員的付出已經對得起他們的工資了,如果還有精力去接私活,也是對他技術能力和熟練程度的提高,好事。但也說明公司和員工還沒有達到最充分的協作:公司沒有給予員工足夠的工作量和與之對應的報酬。
程序員有接私活的嗎,高報酬
你要做什麼,最好能說的詳細一點。這樣才會有人接
一個老程序員的心理話 程序員該不該接私活賺外快
雖然那些證件很重要不過你可能對你自己的專業都不了解就去考證書 有些盲目 底下是我原創的文章悉數 希望對你的就業方向有指導意義希望睜行首給你幫帶悶助土木專業就業土木各行業前景及薪資參考學土木的可以選擇的自己工作方向 如夢無痕…… 沒畢業的土木工程的畢業生,對於以後的職業選擇可能會有些迷惑,我就對我所知道的,了解的一些情況,簡單介紹一下。畢業之後我換過好幾種工作,對於土木工程學生可以從事的行業以及年薪進行簡單介紹。底下的年薪不包括個人接的私活以及外快。這些年薪僅供參考,地區差異,有不一樣的很正常 。還有我指的薪水是年薪 如果你的月薪是一千五乘以十二月 是一萬八 在加個兩千獎金 都差不多的是兩萬. 1施工方向 這是大部分土木畢業生的選擇,施工方向是專業對口的一個工作。大的施工和小的單位工資待遇相差很大。中建,中鐵等這些工資待遇通常比一般施工單位能高出1000元。但是大的施工單位通常是天南地北到處做工程,不利於人脈資源的積累,同時對於自己成家立業有一定影響,而且由於人多,競爭激烈,想成為項目經理很難,這些大企業適合只想做技術,不喜歡打交道。同時喜歡到接觸大自然的那些人以及對開始的工資待遇有一定要求。 參考年薪應屆畢業生 3.5萬--5萬 工作3年後 5萬--10萬。大企業一般外塊很少。 對於小施工企業基本是在一個地區做工程,開始可能待遇不高。不過由於經常在一個地區施工,能建立自己的人脈資源。對於自己創業,以及日後社會交際以及做些私活外快,很方便。小企業不在乎高學歷,通常你是個大學生,人家就要了。小企業競爭不激烈,跟老闆混得好了,而且運氣好的話,有的甚至做了兩三年,老闆就讓你做項目經理了。在小企業,由於素質普遍較低。對於社會上一些吃喝嫖賭這些腐敗的現象無法接受的同學不太適合,小施工企業更適合八面玲瓏,能喝酒,會交際的同學去。 應屆畢業生 參考年薪 2.0萬---3萬 工作三年後 4萬----6萬 ( 同時外加一些灰色收入就看個人能力了,厲害的角色能拿到10萬+)。 施工方向的畢業兩年後,可以考二級建造師,掛靠5000一年,工作四年後,考一級建造師,掛靠2萬一年。2設計院--結構設計或者建築設計 由於結構設計關系建築物的安全,大部分設計院對於設計者的學歷和經驗很看中。所以大家都覺得設計院高不可攀,從而放棄對設計院投簡歷。實際上看中學歷的都是大城市的甲級設計院。一些縣級市的設計院對於結構設計建築設計這些工作崗位還是很缺人的。如果你大學學習成績不錯,CAD畫的還行,學過PKPM。一般一本院校的可以去一些比較大的設計院試試。二本的學校的,可以回家鄉的設計院或者家鄉臨近縣市的設計院試試。結構設計工作穩定,同時有雙休這是施工單位沒法比的,待遇一般差不多的。如果你認准設計非設計院不僅不想做施工的話,而自己學歷不硬,可以考慮參加一些培訓機構的培訓,給自己充充電。這些培訓結構的講師都是有設計院豐富經驗的,先跟他們學習一下結構施工圖的繪制流程,再去找設計院的工作就易如反掌了(網易結構論壇目前有老莊結構培訓和會挽雕弓培訓)。 土木轉建築設計的有,但是一般不太容易。做些廠房,小辦公樓的建築施工圖還行,遇到大規模的廠區規劃和地塊設計,一般設計能力是比不上建築設計畢業生的。不過一些小地方的乙級設計院設計的主要業務就是廠房,小辦公樓。他們更希望學土木的去把建築和結構圖一起畫了,所以他們一般招學土木的,而不太喜歡學建築的。不過甲級設計院不會出現這種情況,甲級設計院分工明確,甚至PKPM建模 , 梁板柱施工圖 , 基礎施工圖都是分開做的。應屆畢業生一去一般都是開始畫樓梯,然後梁板柱......>>
程序員自己接小項目能賺很多錢嗎
接固定的幾種類型的,接的多,可以賺錢,因為同一種類型的大同小異,只需要個修修改改,速度快,工作量小,如果經常接不同的項目,經常需要從0開始做,那是賺不到錢的,而且一般找私人做的都是預算有限。
程序員一般通過什麼途徑接私活
1.個人所接觸的,往外包的大活一般都是找朋友推薦,知根知底有一定信任基礎,一定程度上就是拿朋友的了解做信用擔保了,這樣項目會比較可控。否則隨意外包,項目管理成本會比較高,就未必劃算了。也有些程序員跟銷售、市場人員的合作,以工作室的性質對外找活,生意不錯就逐漸轉為公司運作。
2.一般接的活按預估工作量,通常按自己工資的1.5倍交易。根據技術稀缺程度浮動。
3.在我看來,程序員在公司內的工作量取決於管理,管理到位的情況下程序員的付出已經對得起他們的工資了,如果還有精力去接私活,也是對他技術能力和熟練程度的提高,好事。但也說明公司和員工還沒有達到最充分的協作:公司沒有給予員工足夠的工作量和與之對應的報酬。
程序員如何接私活,如何報價,應該注意什麼
可以在豬八戒接活,天涯論壇,網路貼吧去看看有沒有客戶需要
接到項目以後,仔細想想大概多長時間能做完,然後再多留出50%客戶調試驗收的時間,盡量精準到幾個人需要幾天
看看你當地一個工程師的日薪水,如果不知道那就問問熟練泥瓦匠的日薪*2(哈哈)
總價出來以後,預留15%的稅金,然後再高報30%用於未知的支出(吃飯,行賄等等)
一定要先收30%定金,然後交付的時候不要交出源碼,而且有手段可以控制萬一客戶不給錢,也讓他用不了的手段(這也是沒有辦法,防小人吧),收到全款,然後再全面交付源碼和和有關的東西。
程序員一年賺多少錢算多
一般程序員年薪都在十萬左右
程序員一般通過什麼途徑接私活
同問.....................
Ⅳ 如何成為一名合格的程序員
程序員可以分為很多種,像Unix程序員、Windows程序員,或是C++程序員、Delphi程序員,等等。今天我想談的是Web程序員,一名真正的Web程序員應該懂得那些方面的知識,應該注意學習哪些東西。 也許有些朋友會說,我知道Asp、Jsp,會做網站、會做bbs,這應該叫Web程序員了吧。確實,我承認,這些技術是一名Web程序員應該具備的;但是,你如果僅懂得這些,卻只能叫做Asp程序員、Jsp程序員,而不是真正意義上的Web程序員。現在的世界是屬於Internet的,大部分的應用基於Internet,大家可以想想,像Yahoo、Microsoft、Amazon那樣的網站,其訪問量之大、應用之復雜,需要什麼樣的技術才可以支撐,難道僅僅是硬體的功勞么。 我想在Windows平台下來談談Web程序員應該掌握的技術
1. 首先,就是上面提到的各種腳本,asp、jsp、php等等,這些東西大同小異,基本可以舉一反三。
2. 資料庫, 相信做Web的人肯定用過,像Access、Sql Server、Oracle。很多人會用各種資料庫,但是僅限於寫一些sql,select、update、insert,用ADO來操作,如果這樣,就算會用100種資料庫又有什麼用呢? 你應該考慮用戶量、訪問速度、內存消耗,這些東西和你的sql密切相關,我經常見到很多分頁程序根本不去考慮資料庫中有多少條數據,統統select出來,很明顯,當你從資料庫中查出1萬條數據和100條數據,佔用的內存是不同的。 另外,資料庫連接池和事務機制是非常重要的,應該知道資料庫用什麼來保證事務,連接池如何實現,這些都是商務應用的關鍵。譬如,目前很多的應用服務,像weblogic、MTS,都包含事務處理,可以說好的事務處理決定了他們的競爭力。
3. 組件技術 我想是現在的Web應用推動了組件技術的發展。以前,從老式的靜態庫、動態庫(dll),到現在的COM/DCOM,再到正在興起中的Web Service;從單機調用,到基於內部網的分布式調用,到現在基於Internet的分布式計算。現在的應用都是基於組件的n層結構,最明顯的就是COM和JavaBean。 這些東西體現了軟體架構的發展,以前是基於單機的應用,然後是C/S結構,到現在的B/S結構。我記得李維曾經說過,程序員一定要注意軟體技術的發展趨勢,只有這樣,才不至於被淹沒在技術的洪流中。我想,作為Web程序員,一定要明白COM的原理,如何實現這種調用、如何進行分布式調用。說實話,我覺得COM還是比較復雜的,否則微軟為什麼要提供ATL和VB呢,要搞明白,應該學學C++,因為VC中提供的ATL庫可以很明顯的說明COM的內部運行機制。
4. 網路技術 這可以說是Web程序員最應該懂得東西。起碼,應該知道Web伺服器的機制,要明白Http協議。就拿IIS來說,要懂得web應用程序運行的進程安全和IIS的關系,懂得ISApi的作用。 如果有時間,就看看TCP/IP,看看winsock,這些都是底層的網路的東西。 我所說的這些都是基於微軟技術下的東西,其他的像Java方面的東西都可以對照參考,就不多說了,這也是我這幾年來的一些心得。總之,學海無涯,每當接觸一些新的東西,就會發現自己的不足,同時也就覺得基礎知識的重要。說實話,像我們做應用開發,用別人的東西,在現在這種情況下,新的技術層出不窮,稍不注意就會被甩開,這也是沒有辦法的事情。
Ⅵ Erlang游戲程序員換語言轉行,都有哪些建議
1、對於優秀的程序員來說,不存在轉語言一說。不管什麼語言,設計思想都是一樣的。不管是Java、Go、Python,還是C、C++、PHP,它的一些基礎語法(for循環、條件判斷、數組操作)都是大同小異的。如果項目中需要用別的語言,不要怕!更不要提前花時間就研究,跟著項目需求走就行。當然如果你想好好掌握該語言,那工作之餘多看看相關技術文檔好好研究一下就行。語言只是一個工具,拿來即用才是我輩程序員的終極修為!
4、創業比起做管理崗要求更高,除了溝通能力,還有商務能力,團隊管理,人脈資源等等,都是創業者必備的技能。每個創業者都要有九頭六臂老處理日常大大小小的瑣碎事,還要有極強的承壓能力,下個月的員工工資都發不出來了,今晚依然能倒頭就睡,否則創業未成,自己就先被壓垮了。創業難度很大,風險很高,但總會有「勇士」前赴後繼。
Ⅶ 在山西省太原市和大同市,網路工程師和網路程序員的工資怎麼樣山西省哪些網路公司做的比較好
如果你以前就是學計算機專業,去學學也不錯,有個提高。 行行出狀元,只要技術好,吃苦耐勞,肯定有前途。 但是一般來說進電腦公司,收入高,但是經常出差; 進一個大些的公司或事業單位,比較穩定,幾年後收入到4000元左右。
Ⅷ 作為一個程序員,選擇哪些兼職比較好
接私活
大多數程序員想要在業余的時間掙點錢,第一想到的就是它,畢竟這是程序員本職的工作。但問題是哪裡找私活?私活該怎麼定價?這里大家優先選擇熟人推薦的,比如你的朋友、同事、或者同事的同事等等。他們所在的公司可能剛好需要這樣的私活需要找人做,比較靠譜。其次去各大外包網站尋找,很多技術網站都有人發布一些私活項目,網上搜索下就會找的到。那麼私活該怎麼定價?首先肯定是不能比你的工資低,不管是按時薪算還是月薪算,因為對於程序員來說你的業余時間比你工作時間更寶貴。
但這種接私活的方式並不是很推薦,自己最開始工作的時候有接過一個私活,但是後來就沒做了。因為太累了,而且費心。如果你遇到僱主不是從事互聯網的人,有可能連他自己的需求都理不清,就開始叫你做。做到一半的時候,又重新改需求。並且有時候做完的私活,尾款難以收到。
錄制視頻課程
現在在線教育大家越來越能接受,不管是網上的免費課程還是收費課程,總有受眾人群的。所以這就是衍生了一種賺外快的方式,就是錄制視頻課程。一般錄制的課程分為兩種:免費課程和收費課程。免費課程是按照課程時長來算,一般至少是每小時 1000 - 2000 塊,不同的網站與不同的課程級別,價格有浮動,但是這個時長是按照最後剪輯的市場,也就是說,最後剪輯的 1 小時課程,你很可能錄制了 2、3 小時。當然,一開始錄制會比較麻煩些,但是一旦上手了,後面錄制就會比較快了,一般來說,每月靠錄制課程賺個 5、6 K 是沒有問題的。
還有一種是收費課程,但是收費課程一般都尋找一些大公司 title 好聽的,或者有點名氣的。因為這樣才能吸引用戶付費購買。收費課程除了錄制課程費用,還有一定的提成,提成標准每家也都有所不同。如果你能力還不錯,去錄制一些免費課程應該沒問題,如果你在業界小有名氣,那隻要你願意,那肯定是沒有問題。
自媒體
如今自媒體如日中天,以今日頭條為首的自媒體平台非常的多。有的人玩今日頭條年收入 50 萬,有的人月收入一萬。當然那些人都是全職在玩今日頭條,但對於我們來說,利用業余時間每個月賺幾千還是很輕松的。就已今日頭條來說,你過了新手期,就會自動幫你開通頭條廣告。也就是說你以後發布的文章、視頻、圖集只要有閱讀量就會有收益。今日頭條視頻一萬點擊量的單價是在 3-4 元左右,如果你開通原創之後一萬點擊量單價則高達 10-12 元。
Ⅸ 我的夢想是成為一名出色的程序設計人員,想問問那些成功的朋友們,我要怎樣努力,謝謝大家!
我上班第一天我的老闆讓我做的第一件事
看兩篇文章:
程序員隨想
雷軍
我不是天生的程序員,也並非天生就喜歡電腦,上高中時也沒有想過將來會當程序員,接觸電腦純屬偶然--小時候的一個好朋友上大學時選擇了電腦專業,為了和這個朋友有更多的逗共同語言地我便選擇了計算機系。在大學,我略窺電腦世界,開始為之逗發燒地;畢業後,開始了一個程序員的職業生涯。
從開始寫程序到現在快十年了,寫過的程序不少。從這些年的風風雨雨中走過來,不能不有些體會。說到體會,最大的體會就是這條路太漫長。
一、一輩子有你 苦一點也願意
我沒有奢望大家把寫程序和文學創作相提並論,但其中的苦楚卻不是一個普通用戶能夠體味的。為了寫好一個程序,我們度過太多不眠之夜。有個朋友如此評價道,逗寫程序簡直是在自殺,巨費精力巨費腦子巨累地。但還是有許多人不畏其苦,前仆後繼。
我剛接觸到電腦就發現電腦的妙處:電腦遠沒有人那麼復雜,如果你的程序寫得好,你就可以和電腦有著非常融洽的關系,就可以指揮電腦干你想乾的事,這個時候,你是十足的主宰。每每坐在電腦面前,你就如同在一個王國里巡行。
電腦里的世界很大,程序員是活在自己想像的王國里。你可以細微到電腦里的每一個位元組、每一個比特的東西。
這樣的日子簡直就是天堂般的日子,很多人都愛上了這樣的日子。
不少人認為程序員最多干到三十五歲就可以收山,腦子也差不多該歇歇了,並認為寫程序是年輕人的事情,到了一定年齡,估計沒什麼人再當程序員。
我剛畢業時,意氣風發,也想先吃點苦,到了三十歲就不幹了。年長一點後就發現了自己的無知。一個人大學畢業就二十一二歲,技術成熟一點後可能二十五,接著就是票子、妻子和房子等等諸多忙不完的事情。一切搞掂的時候,也許就是三十五歲。如果三十五歲就放棄的話,我們就不用選擇程序員的道路。
電腦進入我國時間不短,但真正大規模開始用,還是八五年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們能認真想想,走到正途上,畢竟那些聰明的頭腦還 遠遠沒有發揮應有的價值。