第一篇:程序員必備的素質
程序員必備的素質
作為一個真正合格的程序員,或者說就是可以真正合格完成一些代碼工作的程序員,應該具有的素質。
1:團隊精神和協作能力
把它作為基本素質,并不是不重要,恰恰相反,這是程序員應該具備的最基本的,也是最重要的安身立命之本。任何個人的力量都是有限的,即便如linus這樣的天才,也需要通過組成強大的團隊來創造奇跡,那些遍布全球的為linux寫核心的高手們,沒有協作精神是不可想象的。一旦進入系統的研發團隊,進入商業化和產品化的開發任務,缺乏這種素質的人是不合格的。
2:文檔習慣
說高水平程序員從來不寫文檔的肯定是乳臭未干的毛孩子,良好的文檔是正規研發流程中非常重要的環節,作為代碼程序員,30%的工作時間寫技術文檔是很正常的,而作為高級程序員和系統分析員,這個比例還要高很多。缺乏文檔,一個軟件系統就缺乏生命力,在未來的查錯,升級以及模塊的復用時就都會遇到極大的麻煩。
3:規范化,標準化的代碼編寫習慣
代碼的變量命名,代碼內注釋格式,甚至嵌套中行縮進的長度和函數間的空行數字都有明確規定,良好的編寫習慣,不但有助于代碼的移植和糾錯,也有助于不同技術人員之間的協作。有些codingfans叫囂高水平程序員寫的代碼旁人從來看不懂,這種叫囂只能證明他們自己?根不配自稱程序員。代碼具有良好的可讀性,是程序員基本的素質需求。沒有規范化和標準化的代碼習慣,研發之間的協作是絕對不可想的。
4:需求理解能力
程序員需要理解一個模塊的需求,很多程序員寫程序往往只關注一個功能需求,他們把性能指標全部歸結到硬件,操作系統和開發環境上,而忽視了本身代碼的性能考慮,性能需求指標中,穩定性,并訪支撐能力以及安全性都很重要,作為程序員需要評估該模塊在系統運營中所處的環境,將要受到的負荷壓力以及各種潛在的危險和惡意攻擊的可能性。就這一點,一個成熟的程序員至少需要2到3年的項目研發和跟蹤經驗才有可能有心得。
5:復用性,模塊化思維能力
經常可以聽到一些程序員有這樣的抱怨,寫了幾年程序,變成了熟練工,每天都是重復寫一些沒有任何新意的代碼,這其實是中國軟件人才最大浪費的地方,一些重復性工作變成了熟練程序員的主要工作,而這些,其實是完全可以避免的。
復用性設計,模塊化思維就是要程序員在完成任何一個功能模塊或函數的時候,要多想一些,不要局限在完成當前任務的簡單思路上,想想看該模塊是否可以脫離這個系統存在,是否可以通過簡單的修改參數的方式在其他系統和應用環境下直接引用,這樣就能極大避免重復性的開發工作,如果一個軟件研發單位和工作組能夠在每一次研發過程中都考慮到這些問題,那么程序員就不會在重復性的工作中耽誤太多時間,就會有更多時間和精力投入到創新的代碼工作中去。
一些好的程序模塊代碼,即便是70年代寫成的,拿到現在放到一些系統里面作為功能模塊都能適合的很好,而現在很多軟件一升級或改進就動輒全部代碼重寫,大部分重復性工作無謂的浪費了時間和精力,這是我們應當刻意克服的弊病。
6:測試習慣
作為一些正規化的開發而言,專職的測試工程師是不可少的,但是并不是說有了專職的測試工程師程序員就可以不進行自測;軟件研發作為一項工程而言,一個很重要的特點就是問題發現的越早,解決的代價就越低,程序員在每段代碼,每個子模塊完成后進行認真的測試,就可以盡量將一些潛在的問題最早的發現和解決,這樣對整體系統建設的效率和可靠性就有了最大的保證。
測試工作實際上需要考慮兩方面,一方面是正常調用的測試,也就是看程序是否能在正常調用下完成基本功能,這是最基本的測試職責,可惜在很多公司這成了唯一的測試任務,實際上還差的遠那;第二方面就是異常調用的測試,比如高壓力負荷下的穩定性測試,用戶潛在的異常輸入情況下的測試,整體系統局部故障情況下該模塊受影響狀況的測試,頻發的異常請求阻塞資源時的模塊穩定測試等等。
當然并不是程序員要對自己的每段代碼都需要進行這種完整測試,但是程序員必須清醒認識自己的代碼任務在整體項目中的地位和各種性能需求,有針對性的進行相關測試并盡早發現和解決問題,當然這需要上面提到的需求理解能力。
7:學習和總結的能力
程序員是人才很容易被淘汰,很容易落伍的職業,因為一種技術可能僅僅在三兩年內具有領先性,程序員如果想安身立命,就必須不斷跟進新的技術,學習新的技能。善于學習,對于任何職業而言,都是前進所必需的動力,對于程序員,這種要求就更加高了。
但是學習也要找對目標,善于總結,也是學習能力的一種體現,每次完成一個研發任務,完成一段代碼,都應當有目的的跟蹤該程序的應用狀況和用戶反饋,隨時總結,找到自己的不足,這樣逐步提高,一個程序員才可能成長起來。
具備以上全部素質的人,應當說是夠格的程序員了,請注意以上的各種素質都不是由IQ決定的,也不是大學某些課本里可以學習到的,需要的僅僅是程序員對自己工作的認識,是一種意識上的問題。
一個中心:
一切以健康為中心。
兩個基本點:
遇事瀟灑一點,看世糊涂一點。
三個忘記:
忘記年齡,忘記過去,忘記恩怨。
四個擁有:
無論你有多弱或多強,一定要擁有真正愛你的人,擁有知心朋友,擁有向上的事業,擁有溫暖的住所。
五個要:
要唱,要跳,要俏,要笑,要苗條。
六個不能:
不能餓了才吃,不能渴了才喝,不能困了才睡,不能累了才歇,不能病了才檢查,不能老了再后悔!
第二篇:學php需要哪些基礎?程序員需要哪些素質呢?
www.tmdps.cn
學php需要哪些基礎?程序員需要哪些素質呢?
中國每年有大量的計算機類畢業生進入企業,企業會把那些程序員列入優秀人才加以重視呢?斬獲高薪的程序員需要哪些素質呢?
團隊精神和協作能力
團隊精神是程序員應該具備的基本素質,任何個人的力量都是有限的。即便如Linus這樣的天才,也需要通過組成強大的團隊來創造奇跡。那些遍布全球的為Linux寫核心的高手們,沒有協作精神是不可想象的。獨行俠可以作一些賺錢的小軟件發點小財,但是一旦進入一些大系統的研發團隊,進入商業化和產品化的開發任務,缺乏團隊精神的人就完全不合格了。
文檔習慣
說高水平程序員從來不寫文檔的肯定是乳臭未干的毛孩子,條理清晰的文檔是正規研發流程中 非常重要的環節。作為代碼程序員,3成的工作時間寫技術文檔是很正常的,而作為高級程序員和系統分析員,這個比例還要高很多。缺乏文檔,一個軟件系統就缺乏生命力,在未來的查錯,升級以及模塊的復用時就都會遇 到極大的麻煩。
四川地處中國大西南,肥沃的土地,豐富的自然資源,悠久的歷史和絢爛多彩的少數民族文化,構成了多樣性的自然和文化旅游資源。每到中考季,很多初中生總是為自己的未來前途擔心,尤其是一些學習成績不好的初中生,他們不知道中考沒考上怎么辦。同時許多家長也擔心,自己的孩子年齡還小,進入社會顯然不合適。這個時候職業培訓學校更加適合,放眼眾多學院,四川國信安職業培訓學校無疑是非常合適的。
尋尋覓覓,走馬觀花,你在it培訓這條路上看了多久?走了多遠?你是否還在為它而困擾?你是否發現找到一個心儀的實在太麻煩!其實選擇也可以很簡單!讓小編帶你走進it培訓,來了解些實用干貨。接下來就讓小編帶你來看看it培訓相關的情況吧~請看下文~
www.tmdps.cn
學php需要哪些基礎?這是很多人在學習php之前想到的一點,因為大家都覺得這門課程很陌生,也擔心自己會學習的非常吃力。但同時,php領域的高工資又誘惑著大家,即使是小白都想快速成為高手。
學php需要哪些基礎?從培訓機構的角度來講,大家不需要有任何基礎,因為不管你是行業精英還是初始學習者,學校都會給大家提供適合自己的課程,有的以基礎班為準,有的以提升班為準,課程方向不同,學習的深度就有所差別。知道了培訓機構的課程設置之后,我們就應該充分考慮一下自己的現狀了。建議小白人員從最基礎的理論部分開始學習,先不要忙著去實踐,先掌握知識的來龍去脈,等到有了自己的思考和理解之后再去進修即可。國信安教育基地給出了循序漸進的學習方法,只為給大家提供優良的學習思路,從而讓每個人成為行業精英。
學php需要哪些基礎?因此大家根本不用擔心基礎問題,國信安教育基地會給出適合你的學習方案和計劃,大家只需要按部就班的跟著老師的思路執行即可。不管你是不是行業小白,相信在國信安這種培訓機構的帶領下,我們會快速認識到php相關的概念和知識,從而讓你成為唾手可得的人才,進而在求職市場中獲得更多公司的青睞。至于學習時間,需要根據大家的時間安排進行設定,如果每天學習幾個小時,不出幾個月,你就成為php領域的專家了。
國信安IT培訓基地指定的官方IT人才培訓機構。專注java培訓、php培訓、UI設計培訓、IOS培訓、安卓培訓、嵌入式培訓、.NET培訓、web前端培訓等培訓課程。你們準備好怎么學習IT技術了嗎?來參加國信安IT培訓課程,你的選擇不會有錯!
第三篇:PHP程序員等級素質模型
PHP程序員等級素質模型
初級PHP程序員(T1)
素質模型:能夠完成基本的LNMP系統安裝,簡單配置維護;能夠做基本的簡單系統的PHP開發;能夠在PHP中型系統中支持某個PHP功能模塊的開發。
1.Linux:
基本命令、操作、啟動、基本服務配置(包括rpm包、源碼包安裝文件,各種服務配置等)。
2.Nginx:
能夠安裝配置nginx+php,知道基本的nginx核心配置選項,知道 server/fastcgi_pass/access_log 等基礎配置信息,能夠讓nginx+php_fpm順利工作。
3.MySQL:
會自己搭建mysql,知道基本的mysql配置選項;知道InnoDB和MyISAM的區別,知道針對InnoDB和MyISAM兩個引擎的不同配置選項;知道基本的兩個引擎的差異和選擇上面的區別;知道MySQL字段類型,知道如何選擇MySQL的字段類型;能夠純手工編譯搭建一個MySQL數據庫且配置好編碼等正常穩定運行。
4.PHP:
基本語法數組、字符串、數據庫、XML、Socket、GD/ImageMgk圖片處理等等;熟悉各種跟MySQL操作鏈接的api(mysql/mysqli/PDO),知道各種編碼問題的解決;知道常規熟練使用的PHP框架(ThinkPHP、Yii、Yaf等);了解基本MVC的運行機制和為什么這么做,了解不同的PHP框架之間的區別;能夠快速學習一個MVC框架。能夠知道開發工程中的文件目錄架構,有基本的良好的代碼結構和風格,能夠完成小系統的開發和中型系統中某個模塊的開發工作。
5.前端:
了解 HTML/CSS/JS 等相關基礎知識,知道什么web標準,div+css的web/wap頁面模式,知道HTML5和HTML4的區別;了解一些基本的前端知識和JS框架(jQuery之類的);了解一些基本的JavaScript編程知識。
6.系統設計:
能夠完成小型系統的基本設計,包括簡單的數據庫設計,能夠完成基本的:瀏覽器-> Nginx+PHP-> 數據庫 架構的設計開發工作。中級PHP程序員(T2)
素質模型:能夠隨時隨地搭建好LNMP環境,快速完成常規配置;能夠追查解決大部分遇到的開發和線上環境的問題;能夠獨立承擔中型系統的構架和開發工作;能夠在大型系統中承擔某個中型模塊的開發工作。
1.Linux: 在第一階段的基礎上面,能夠流暢的使用Shell腳本來完成很多自動化的工作(數據庫備份等);會簡單的awk/sed/perl 操作,能夠完成部分文本處理和數據統計等工作;能夠安裝大部分非特殊的Linux程序(包括各種庫、包、第三方依賴等等,比如Memcached/MongoDB/Redis/Sphinx之類的);了解基本的Linux服務,知道如何查看Linux的性能指標數據,知道基本的Linux環境下的問題跟蹤等。
2.Nginx: 在第一階段的基礎上面,了解復雜一些的Nginx配置;包括多核配置、events、proxy_pass,sendfile/tcp_*配置,知道超時等相關配置和性能影響;知道nginx除了web server,還能夠承擔代理服務器、反向靜態服務器等配置;知道基本的nginx配置調優;知道如何配置權限、編譯一個nginx擴展到nginx;知道基本的nginx運行原理(master/worker機制,epoll),知道為什么nginx性能比apache性能好等知識。
3.MySQL/MongoDB:
在第一階段的基礎上面,在MySQL開發方面,掌握很多小技巧,包括常規SQL分析、性能優化(group by/order by/rand優化等)、索引優化;除了能夠搭建MySQL,還能夠冷熱備份MySQL數據,還知道影響InnoDB/MyISAM性能的配置選項(比如key_buffer/query_cache/sort_buffer/innodb_buffer_pool_size/innodb_flush_log_at_trx_commit等),也知道這些選項配置成為多少值合適;另外也了解一些特殊的配置選項,比如 知道如何搭建mysql主從同步的環境,知道各個binlog_format的區別;知道MySQL的性能追查,包括slow_log/explain等,還能夠知道基本的索引建立處理等知識;原理方面了解基本的MySQL的架構(Server+存儲引擎),知道基本的InnoDB/MyISAM索引存儲結構和不同(聚簇索引,BTree,B+Tree);知道基本的InnoDB事務處理機制;了解大部分MySQL異常情況的處理方案(或者知道哪兒找到處理方案)。
4.Redis/Memcached:
在大部分中型系統里面一定會涉及到緩存處理,所以一定要了解基本的緩存;知道Memcached和Redis的異同和應用場景,能夠獨立安裝 Redis/Memcached,了解Memcahed的一些基本特性和限制,知道PHP跟他們的使用結合;Redis了解基本工作原理和使用,了解常規的數據類型,知道什么場景應用什么類型,了解Redis的事務等等。原理部分,能夠大概了解Memcached的內存結構(slab機制),redis了解常用數據類型底層實現存儲結構(SDS/鏈表/SkipList/HashTable)等等,順便了解一下Redis的事務、RDB、AOF等機制更好。
5.PHP:
除了第一階段的能力,安裝配置方面能夠隨意安裝PHP和各種第三方擴展的編譯安裝配置;了解php-fpm的大部分配置選項和含義(如max_requests/max_children/request_terminate_timeout之類的影響性能的配置),知道mod_php/fastcgi的區別;在PHP方面已經能夠熟練各種基礎技術,還包括各種深入些的PHP,包括對PHP面向對象的深入理解/SPL/語法層面的特殊特性;在框架方面已經閱讀過最少一個以上常規PHP MVC框架的代碼了,知道基本PHP框架內部實現機制和設計思想;在PHP開發中已經能夠熟練使用常規的設計模式來應用開發(抽象工廠/單例/觀察者/命令鏈/策略/適配器 等模式);建議開發自己的PHP MVC框架來充分讓開發自由化,讓自己深入理解MVC模式,也讓自己能夠在業務項目開發里快速升級;熟悉PHP的各種代碼優化方法,熟悉大部分PHP安全方面問題的解決處理;熟悉基本的PHP執行的機制原理(Zend引擎/擴展基本工作機制)。
6.C/C++:
開始涉獵一定的C/C++語言,能夠寫基本的C/C++代碼,對基本的C/C++語法熟悉(指針、數組操作、字符串、常規標準API)和數據結構(鏈表、樹、哈希、隊列)有一定的熟悉下;對Linux下面的C語言開發有基本的了解概念,會簡單的makefile文件編寫,能夠使用簡單的GCC/GDB的程序編譯簡單調試工作;對基本的網絡編程有大概了解。
7.前端:
在第一階段的基礎上面,熟悉基本的HTTP協議(協議代碼200/300/400/500,基本的HTTP交互頭);條件允許,可以在深入寫出稍微優雅的HTML+CSS+JavaScript,或者能夠大致簡單使用某些前端框架(jQuery/Angular/React/RequireJS/BootStrap之類);如果條件允許,可以深入學習JavaScript編程,比如閉包機制、DOM處理;再深入些可以讀讀jQuery源碼做深入學習。
8.系統設計:
能夠設計大部分中型系統的網站架構、數據庫、基本PHP框架選型;性能測試排查處理等;能夠完成類似:瀏覽器-> CDN(Squid)-> Nginx+PHP-> 緩存-> 數據庫 結構網站的基本設計開發維護;能夠支撐每天數百萬到千萬流量基本網站的開發維護工作。
高級PHP程序員(T3)
素質模型:除了能夠完成基本的PHP業務開發,還能夠解決大部分深入復雜的技術問題,并且可以獨立設計完成中大型的系統設計和開發工作;自己能夠獨立hold深入某個技術方向,在這塊比較專業。(比如在MySQL、Nginx、PHP、Redis等等任一方向深入研究)
1.Linux:
除了第二階段的能力,在Linux下面除了常規的操作和性能監控跟蹤,還能夠使用很多高級復雜的命令完成工作(watch/tcpdump/starce/ldd/ar/gdb/sar/free等);在shell腳本方面,已經能夠編寫比較復雜的shell腳本來協助完成很多包括備份、自動化處理、監控等工作的shell;對awk/sed/perl 等應用很熟練,能夠隨意操作控制處理文本統計分析各種復雜格式的數據;對Linux內部機制有一些了解,對內核模塊加載,啟動錯誤處理等等有個基本的處理;同時對一些其他相關的東西也了解,比如NFS、磁盤管理等等;了解Linux集群、負載均衡、容災、數據同步等等。
2.Nginx: 在第二階段的基礎上面,已經能夠把Nginx操作的很熟練,能夠對Nginx進行更深入的運維工作,比如監控、性能優化,復雜問題處理等等;深入學習過Nginx工作原理部分,主要表現在閱讀源碼開始,比如具體的master/worker工作機制,Nginx內部的事件處理,內存管理等等;可以進行Nginx擴展的開發;同時對Nginx+Lua有一定程度的了解,使用Nginx+Lua開發過相關程序。
3.MySQL/MongoDB:
在第二階段的基礎上面,在MySQL應用方面,除了之前的基本SQL優化,還能夠在完成一些復雜操作,比如大批量數據的導入導出,線上大批量數據的更改表結構或者增刪索引字段等等高危操作;除了安裝配置,已經能夠處理更多復雜的MySQL的問題,比如各種問題的追查,主從同步延遲問題的解決、跨機房同步數據方案、MySQL高可用架構等都有涉及了解;對MySQL應用層面,對MySQL的核心關鍵技術比較熟悉,比如事務機制(隔離級別、鎖等)、對觸發器、分區等技術有一定了解和應用;對MySQL性能方面,有包括磁盤優化(SAS遷移到SSD)、服務器優化(內存、服務器本身配置)、除了二階段的其他核心性能優化選項(innodb_log_buffer_size/back_log/table_open_cache/thread_cache_size/innodb_lock_wait_timeout等)、連接池軟件選擇應用,對show *(show status/show profile)類的操作語句有深入了解,能夠完成大部分的性能問題追查;MySQL備份技術的深入熟悉,包括災備還原、對Binlog的深入理解,冷熱備份,多IDC備份等;在MySQL原理方面,有更多了解,閱讀源碼了解MySQL的工作機制,比如主從同步(復制)技術的源碼學習,或者某個存儲引擎(MyISAM/Innodb/Memery)的源碼學習理解。MongoDB層面,能夠做一些線上的數據分析處理的操作,核心是要更好的深入理解RMDBS和NoSQL的不同場景下面的應用。
4.Redis/Memcached: 在第二階段的基礎上面,能夠對Redis/Memcached進行更深入的應用。因為Memcached不是特別復雜,需對內存管理部分,閱讀過源碼或熟練掌握其原理;Redis部分,做過一些復雜的數據結構的應用(zset來做排行榜排序操作/事務處理用來保證原子性在秒殺類場景應用之類的使用操作);熟悉aof等同步機制的原理,可設計一個高可用的Redis應用架構和集群。
5.PHP:
作為基礎核心技能,需要在第二階段的基礎上,有更深入的學習和應用。從基本代碼應用上面來說,能夠解決在PHP開發中遇到95%的問題,了解大部分PHP的技巧;對大部分的PHP框架能夠迅速在一周內上手使用,并且了解各個主流PHP框架的優缺點,能夠迅速方便項目開發中做技術選型;在配置方面,除了常規第二階段會的知識,會了解一些比較偏門的配置選項(php auto_prepend_file/auto_append_file),包括擴展中的一些復雜高級配置和原理(比如memcached擴展配置中的memcache.hash_strategy、apc擴展配置中的apc.mmap_file_mask/apc.slam_defense/apc.file_update_protection之類的);對php的工作機制比較了解,包括php-fpm工作機制(比如php-fpm在不同配置機器下面開啟進程數量計算以及原理),對zend引擎有基本熟悉(vm/gc/stream處理),閱讀過基本的PHP內核源碼(或者閱讀過相關文章),對PHP內部機制的大部分核心數據結構(基礎類型/Array/Object)實現有了解,對于核心基礎結構(zval/hashtable/gc)有深入學習了解;能夠進行基本的PHP擴展開發,了解一些擴展開發的中高級知識(minit/rinit等),熟悉php跟apache/nginx不同的通信交互方式細節(mod_php/fastcgi)。
6.C/C++:
在第二階段基礎上面,在C/C++語言方面有更深入的了解,能夠完成中小型C/C++系統的開發工作;除了基本第二階段的基礎C/C++語法和數據結構,能夠掌握一些特殊數據結構(b-tree/rb-tree/skiplist/lsm-tree/trie-tree等)方便在特殊工作中需求;在系統編程方面,熟悉多進程、多線程編程;多進程情況下面了解大部分多進程之間的通信方式,能夠靈活選擇通信方式(共享內存/信號量/管道等);多線程編程能夠良好的解決鎖沖突問題,并且能夠進行多線程程序的開發調試工作;同時對網絡編程比較熟悉,了解多進程模型/多線程模型/異步網絡IO模型的差別和選型,熟悉不同異步網絡IO模型的原理和差異(select/poll/epoll/iocp等),并且熟悉常見的異步框架(ACE/ICE/libev/libevent/libuv/Boost.ASIO等)和使用,了解大部分C/C++后端Server開發中的問題(內存管理、日志打印、高并發、前后端通信協議、服務監控),知道各個后端服務RPC通信問題(struct/http/thirft/protobuf等);能夠更熟絡的使用GCC和GDB來開發編譯調試程序,在線上程序core掉后能夠迅速追查跟蹤解決問題;通用模塊開發方面,開發過一些通用的工具或庫(比如異步網絡框架、日志庫、內存池、線程池等)。
7.前端:
深入了解HTTP協議(包括各個細致協議特殊協議代碼和背后原因,比如302靜態文件緩存了,502是nginx后面php掛了之類的);除了之前的前端方面的各種框架應用整合能力,前端方面的學習如果有興趣可以更深入,表現形式是,可以自己開發一些類似jQuery的前端框架,或者開發一個富文本編輯器之類的比較瑣碎考驗JavaScript功力;
8.系統設計:
系統設計在第二階段的基礎之上,能夠應用掌握的經驗技能,設計出比較復雜的中大型系統,能夠解決大部分線上的各種復雜系統的問題,完成類似 瀏覽器-> CDN-> 負載均衡->接入層-> Nginx+PHP-> 業務緩存-> 數據庫-> 各路復雜后端RPC交互(存儲后端、邏輯后端、反作弊后端、外部服務)-> 更多后端的復雜業務;能夠支撐每天數千萬到數億流量網站的正常開發維護工作。
第四篇:Java程序員應具備的素質
Java程序員應具備的素質
——動力節點Java
java程序員是一種技術工作,在IT的發展中有相當重要的地位,從底層硬件通訊協議的建立,到數據傳輸層的處理,到操作系統的建設,到數據庫平臺的建設,一直到應用層上各種數據營銷平臺的搭建,程序員在里面都扮演著舉足輕重的角色并為IT事業的發展做出了巨大的貢獻。
中國有很多精于編碼的人,但是中國軟件行業,尤其是網絡應用開發方面誤區很大,很難形成有規模的軟件開發力量和產品能力,不但比美國差距甚遠,和印度相比也是頗有不如。這些問題不是在于中國程序員的智商和工作努力狀況,也不是在于國家和民間對開發的投入程度,而是很大程度上,有一些對技術,對程序開發,對項目設計方面的思想誤區,這些誤區,導致了軟件行業的產品化能力不足,缺乏規模化和大型復用系統研發能力,可以說,改變認識誤區,是解決軟件行業小作坊模式和個體英雄模式所帶來的局限性的重要工作。
中國有很多程序員,他們18,9歲或21,2歲,通過自學也寫了不少代碼,他們有的代碼寫的很漂亮,一些技術細節相當出眾,也很有鉆研精神,但是他們被一些錯誤的認識和觀點左右,缺乏對系統,對程序的整體理解能力,參加專業Java培訓機構,進行Java學習是不錯的選擇。動力節點專注Java培訓多年,在業界有著良好的口碑,學生百分百就業。
作一個真正合格的程序員,或者說就是可以真正合格完成一些代碼工作的程序員,應該具有的素質。
1、團隊精神和協作能力
把它作為基本素質,并不是不重要,恰恰相反,這是程序員應該具備的最基本的,也是最重要的安身立命之本。把高水平程序員說成獨行俠的都是在囈語,任何個人的力量都是有限的,即便如linus這樣的天才,也需要通過組成強大的團隊來創造奇跡,那些遍布全球的為linux寫核心的高手們,沒有協作精神是不可想象的。獨行俠可以作一些賺錢的小軟件發點小財,但是一旦進入一些大系統的研發團隊,進入商業化和產品化的開發任務,缺乏這種素質的人就完全不合格了。
2、文檔習慣
說高水平程序員從來不寫文檔的肯定是乳臭未干的毛孩子,良好的文檔是正規研發流程中非常重要的環節,作為代碼程序員,30%的工作時間寫技術文檔是很正常的,而作為高級程序員和系統分析員,這個比例還要高很多。
缺乏文檔,一個軟件系統就缺乏生命力,在未來的查錯,升級以及模塊的復用時就都會遇到極大的麻煩。
3、規范化,標準化的代碼編寫習慣
作為一些外國知名軟件公司的規矩,代碼的變量命名,代碼內注釋格式,甚至嵌套中行縮進的長度和函數間的空行數字都有明確規定,良好的編寫習慣,不但有助于代碼的移植和糾錯,也有助于不同技術人員之間的協作。有些coding fans叫囂高水平程序員寫的代碼旁人從來看不懂,這種叫囂只能證明他們自己壓根不配自稱程序員。代碼具有良好的可讀性,是程序員基本的素質需求。再看看整個linux的搭建,沒有規范化和標準化的代碼習慣,全球的研發協作是絕對不可想象的。
4、需求理解能力
程序員需要理解一個模塊的需求;很多程序員寫程序往往只關注一個功能需求,他們把性能指標全部歸結到硬件,操作系統和開發環境上,而忽視了本身代碼的性能考慮,有人曾經放言說寫一個廣告交換程序很簡單,這種人從來不知道在百萬甚至千萬數量級的訪問情況下的性能指標是如何實現的,對于這樣的程序員,你給他深藍那套系統,他也做不出太極鏈的并訪能力。性能需求指標中,穩定性,并訪支撐能力以及安全性都很重要,作為程序員需要評估該模塊在系統運營中所處的環境,將要受到的負荷壓力以及各種潛在的危險和惡意攻擊的可能性。就這一點,一個成熟的程序員至少需要2到3年的項目研發和跟蹤經驗才有可能有心得。
5、復用性,模塊化思維能力
經常可以聽到一些程序員有這樣的抱怨,寫了幾年程序,變成了熟練工,每天都是重復寫一些沒有任何新意的代碼,這其實是中國軟件人才最大浪費的地方,一些重復性工作變成了熟練程序員的主要工作,而這些,其實是完全可以避免的。
復用性設計,模塊化思維就是要程序員在完成任何一個功能模塊或函數的時候,要多想一些,不要局限在完成當前任務的簡單思路上,想想看該模塊是否可以脫離這個系統存在,是否可以通過簡單的修改參數的方式在其他系統和應用環境下直接引用,這樣就能極大避免重復性的開發工作,如果一個軟件研發單位和工作組能夠在每一次研發過程中都考慮到這些問題,那么程序員就不會在重復性的工作中耽誤太多時間,就會有更多時間和精力投入到創新的代碼工作中去。一些好的程序模塊代碼,即便是70年代寫成的,拿到現在放到一些系統里面作為功能模塊都能適合的很好,而現在我看到的是,很多小公司軟件一升級或改進就動輒全部代碼重寫,大部分重復性工作無謂的浪費了時間和精力。
6、測試習慣
作為一些商業化正規化的開發而言,專職的測試工程師是不可少的,但是并不是說有了專職的測試工程師程序員就可以不進行自測;軟件研發作為一項工程而言,一個很重要的特點就是問題發現的越早,解決的代價就越低,程序員在每段代碼,每個子模塊完成后進行認真的測試,就可以盡量將一些潛在的問題最早的發現和解決,這樣對整體系統建設的效率和可靠性就有了最大的保證。
測試工作實際上需要考慮兩方面,一方面是正常調用的測試,也就是看程序是否能在正常調用下完成基本功能,這是最基本的測試職責,可惜在很多公司這成了唯一的測試任務,實際上還差的遠那;第二方面就是異常調用的測試,比如高壓力負荷下的穩定性測試,用戶潛在的異常輸入情況下的測試,整體系統局部故障情況下該模塊受影響狀況的測試,頻發的異常請求阻塞資源時的模塊穩定測試等等。當然并不是程序員要對自己的每段代碼都需要進行這種完整測試,但是程序員必須清醒認識自己的代碼任務在整體項目中的地位和各種性能需求,有針對性的進行相關測試并盡早發現和解決問題,當然這需要上面提到的需求理解能力。
7、學習和總結的能力
程序員是人才很容易被淘汰,很容易落伍的職業,因為一種技術可能僅僅在三兩年內具有領先性,程序員如果想安身立命,就必須不斷跟進新的技術,學習新的技能。
善于學習,對于任何職業而言,都是前進所必需的動力,對于程序員,這種要求就更加高了。
善于總結,也是學習能力的一種體現,每次完成一個研發任務,完成一段代碼,都應當有目的的跟蹤該程序的應用狀況和用戶反饋,隨時總結,找到自己的不足,這樣逐步提高,一個程序員才可能成長起來。
一個不具備成長性的程序員,即便眼前看是個高手,建議也不要選用,因為他落伍的時候馬上就到了。
具備以上全部素質的人,應當說是夠格的程序員了,請注意以上的各種素質都不是由IQ決定的,也不是大學某些課本里可以學習到的,需要的僅僅是程序員對自己工作的認識,是一種意識上的問題。
所以當自己感覺遇到瓶頸的時候找個Java培訓學校系統的學一下,跟有多年工作經驗的Java老師探討一下,而且在學生中也有很多的牛人同學。相互探討才能出現新思路。
第五篇:程序員(范文模版)
作業:研究一個新或自己感興趣的職業 v介紹:名稱定義
v典型生涯路徑:從新手到最高職位的生涯路徑
v趨勢:技術、組織結構、培訓、經濟趨勢對職業的影響
v薪酬:差別、地域差別
v所需技能
v教育/培訓:受教育程度
v證書/資格證書
v工作條件:環境、壓力、工作時間、是否出差?
v聘用機構
v對生活方式的影響
v性別構成v聘用過程
v專業知識 月收入
人數
<1000元 131 1000-3000元 919 3001-5000元 477 5001-10000元 245 10000元以上 44
最多的部分居然是“1000-3000元”...程序員苦哇,同志們!
程序員
目錄
1作為一個真正合?
2崗位職責
3行業現狀
4職業要求
5必備技能
6素質要求
7職業困境
程序員(英文Programmer)是從事程序開發、維護的專業人員。一般將程序員分為程序設計人員和程序編碼員,但兩者的界限并不非常清楚,特別是在中國。軟件從業人員分為初級程序員、高級程序員、系統分析員和項目經理四大類的方法。
崗位職責
1、對項目經理負責,負責軟件項目的詳細設計、編碼和內部測試的組織實施,對
小型軟件項目兼任系統分析工作,完成分配項目的實施和技術支持工作。
2、協助項目經理和相關人員同客戶進行溝通,保持良好的客戶關系。
3、參與需求調研、項目可行性分析、技術可行性分析和需求分析。
4、熟悉并熟練掌握交付軟件部開發的軟件項目的相關軟件技術。
5、負責向項目經理及時反饋軟件開發中的情況,并根據實際情況提出改進建議。
6、參與軟件開發和維護過程中重大技術問題的解決,參與軟件首次安裝調試、數據割接、用戶培訓和項目推廣。
7、負責相關技術文檔的擬訂。
8、負責對業務領域內的技術發展動態。
一、通過國家統一組織的考試,資格考試分初級程序員級(技術員級)、程序員級(助
理工程師級)和高級程序員級(工程師級);水平考試分初級程序員級、程序員級、高級程序員級、系統分析員級、以及網絡程序員(初級)、網絡設計師(中級)。
二、報考條件:報各級水平考試者無學歷、資歷限制;在職人員均可報初級程序員資格,其中大學本科畢業或任技術員兩年以上者(含二年),可報程序員級資格,研究生畢生或任助工兩年以上者(含二年),可報高級程序員級資格(計算年限均至本12月31日)。
三、報名手續:報名時須持身份證或學生證,交本人近期同底一寸免冠半身照兩張及報名費100元(系統分析員報名費150元),其中報資格還須提交本人工作證及任職證明或相應學歷證明復印件。
作為一個真正合格的程序員應該具有的素質 1:團隊精神和協作能力
把它作為基本素質,并不是不重要,恰恰相反,這是程序員應該具備的最基本的,也是最重要的安身立命之本。任何個人的力量都是有限的,即便如linus這樣的天才,也需要通過組成強大的團隊來創造奇跡,那些遍布全球的為linux寫核心的高手們,沒有協作精神是不可想象的。一旦進入系統的研發團隊,進入商業化和產品化的開發任務,缺乏這種素質的人是不合格的。
2:文檔習慣
說高水平程序員從來不寫文檔的肯定是乳臭未干的毛孩子,良好的文檔是正規研發流程中非常重要的環節,作為代碼程序員,30%的工作時間寫技術文檔是很正常的,而作為高級程序員和系統分析員,這個比例還要高很多。缺乏文檔,一個軟件系統就缺乏生命力,在未來的查錯,升級以及模塊的復用時就都會遇到極大的麻煩。
3:規范化,標準化的代碼編寫習慣
代碼的變量命名,代碼內注釋格式,甚至嵌套中行縮進的長度和函數間的空行數字都有明確規定,良好的編寫習慣,不但有助于代碼的移植和糾錯,也有助于不同技術人員之間的協作。有些codingfans叫囂高水平程序員寫的代碼旁人從來看不懂,這種叫囂只能證明他們自己?根不配自稱程序員。代碼具有良好的可讀性,是程序員基本的素質需求。沒有規范化和標準化的代碼習慣,研發之間的協作是絕對不可想的。
4:需求理解能力
程序員需要理解一個模塊的需求,很多程序員寫程序往往只關注一個功能需求,他們把性能指標全部歸結到硬件,操作系統和開發環境上,而忽視了本身代碼的性能考慮,性能需求指標中,穩定性,并訪支撐能力以及安全性都很重要,作為程序員需要評估該模塊在系統運營中所處的環境,將要受到的負荷壓力以及各種潛在的危險和惡意攻擊的可能性。就這一點,一個成熟的程序員至少需要2到3年的項目研發和跟蹤經驗才有可能有心得。
5:復用性,模塊化思維能力
經常可以聽到一些程序員有這樣的抱怨,寫了幾年程序,變成了熟練工,每天都是重復寫一些沒有任何新意的代碼,這其實是中國軟件人才最大浪費的地方,一些重復性工作變成了熟練程序員的主要工作,而這些,其實是完全可以避免的。
復用性設計,模塊化思維就是要程序員在完成任何一個功能模塊或函數的時候,要多想一些,不要局限在完成當前任務的簡單思路上,想想看該模塊是否可以脫離這個系統存在,是否可以通過簡單的修改參數的方式在其他系統和應用環境下直接引用,這樣就能極大避免重復性的開發工作,如果一個軟件研發單位和工作組能夠在每一次研發過程中都考慮到這些問題,那么程序員就不會在重復性的工作中耽誤太多時間,就會有更多時間和精力投入到創新的代碼工作中去。
一些好的程序模塊代碼,即便是70年代寫成的,拿到現在放到一些系統里面作為功能模塊都能適合的很好,而現在很多軟件一升級或改進就動輒全部代碼重寫,大部分重復性工作無謂的浪費了時間和精力,這是我們應當刻意克服的弊病。
6:測試習慣
作為一些正規化的開發而言,專職的測試工程師是不可少的,但是并不是說有了專職的測試工程師程序員就可以不進行自測;軟件研發作為一項工程而言,一個很重要的特點就是問題發現的越早,解決的代價就越低,程序員在每段代碼,每個子模塊完成后進行認真的測試,就可以盡量將一些潛在的問題最早的發現和解決,這樣對整體系統建設的效率和可靠性就有了最大的保證。
測試工作實際上需要考慮兩方面,一方面是正常調用的測試,也就是看程序是否能在正常調用下完成基本功能,這是最基本的測試職責,可惜在很多公司這成了唯一的測試任務,實際上還差的遠那;第二方面就是異常調用的測試,比如高壓力負荷下的穩定性測試,用戶潛在的異常輸入情況下的測試,整體系統局部故障情況下該模塊受影響狀況的測試,頻發的異常請求阻塞資源時的模塊穩定測試等等。
當然并不是程序員要對自己的每段代碼都需要進行這種完整測試,但是程序員必須清醒認識自己的代碼任務在整體項目中的地位和各種性能需求,有針對性的進行相關測試并盡早發現和解決問題,當然這需要上面提到的需求理解能力。
7:學習和總結的能力
程序員是人才很容易被淘汰,很容易落伍的職業,因為一種技術可能僅僅在三兩年內具有領先性,程序員如果想安身立命,就必須不斷跟進新的技術,學習新的技能。善于學習,對于任何職業而言,都是前進所必需的動力,對于程序員,這種要求就更加高了。
但是學習也要找對目標,善于總結,也是學習能力的一種體現,每次完成一個研發任務,完成一段代碼,都應當有目的的跟蹤該程序的應用狀況和用戶反饋,隨時總結,找到自己的不足,這樣逐步提高,一個程序員才可能成長起來。
具備以上全部素質的人,應當說是夠格的程序員了,請注意以上的各種素質都不是由IQ決定的,也不是大學某些課本里可以學習到的,需要的僅僅是程序員對自己工作的認識,是一種意識上的問題。
作為高級程序員,乃至于設計師而言,除了應該具備上述全部素質之外,還需要具備以下素質:
1、需求分析能力
2、整體框架能力
3、流程處理能力
4、模塊分解能力
5、整體項目評估能力
6、團隊組織管理能力
世界上第一位程序員是英國著名詩人拜倫的女兒AdaLovelace曾設計了巴貝奇分析機上解伯努利方程的一個程序。她甚至還建立了循環和子程序的概念。由于她在程序設計上的開創性工作,AdaLovelace被稱為世界上第一位程序員。美國國防部開發的ADA語言就是為紀念這位世界上的第一位程序員而命名的。
計算機科學發展到今天(21世紀初期),程序員從事的人群很多,分工也不相同,從大的方面可以分為以下幾類:
asp程序員 jsp程序員 delphi程序員 php程序員 powerbuilder程序員.net程序員 vb序員 java程序員 javascript程序員 C++程序員
職業要求
一般的程序員都有四年的在專業領域的學習,需要一個在程序領域的學士學位獲得者,不論是數學方面的還是工程方面的都是可以的。
大約有20%的人在這一領域的計算機科學和工程學擁有更高的學位。還有很小一部分程序員是自學的,盡管一些專業性的學校或者綜合大學可以提供,但是也需要一些別的途徑來提供相關的人才。盡管學歷是比較重要的,但是公司經常把重點放在應聘者的工作經驗上,很多剛從大學畢業的大學生雖然有引人注目的學位證書,但是他們找不到工作是因為他們缺乏經驗。一個程序員雖然有正規的學歷,但是如果一個人擁有程序設計的深厚知識背景或者豐富的工作經驗的話,那么他的機會要比有學歷的應屆畢業生大得多。所以要盡量抓住有用的工作和實習機會,這樣的話在畢業后你就會發現,多實習讓你有更多的經驗,在找工作的時候就有更多的機會。
對于職業程序員,另外一個重要的方面就是,程序員需要不斷提升自己的業務技術,他的技術必須一直保持在一個較高的水平,并且要不斷發展,程序員也要尋找貿易的機會,要參加研討會,在周刊上發表文章和接受職業教育,這些使程序員在自己的領域中分級或者不斷并排前進。
必備技能
熟練開發工具
做為一名程序員至少熟練掌握兩到三種開發工具的使用,這是程序員的立身之本,其中C/C++和JAVA是重點推薦的開發工具,C/C++以其高效率和高度的靈活性成為開發工具中的利器,很多系統級的軟件還是用C/C編寫。而JAVA的跨平臺和與WEB很好的結合是JAVA的優勢所在,而JAVA即其相關的技術集JAVAOne很可能會成為未來的主流開發工具之一。其次,能掌握一種簡便的可視化開發工具,如VB,PowerBuilder,Delphi,CBuilder,則更好,這些開發工具減小了開發難度,并能夠強化程序員對象模型的概念。另外,需要掌握基本的腳本語言,如shell,perl等,至少能讀懂這些腳本代碼。
熟知數據庫
為什么數據庫是如此重要?作為程序員,他們自然有自己的理由:很多應用程序都是以數據庫的數據為中心,而數據庫的產品也有不少,其中關系型數據庫仍是主流形式,所以程序員至少熟練掌握一兩種數據庫,對關系型數據庫的關鍵元素要非常清楚,要熟練掌握SQL的基本語法。雖然很多數據庫產品提供了可視化的數據庫管理工具,但SQL是基礎,是通用的數據庫操作方法。如果沒有機會接觸商業數據庫系統,可以使用免費的數據庫產品是一個不錯的選擇,如mySQL,Postgres等。
了解操作系統
當前主流的操作系統是Windows,Linux/Unix,熟練地使用這些操作系統是必須的,但只有這些還遠遠不夠。要想成為一個真正的編程高手,需要深入了解操作系統,了解它的內存管理機制、進程/線程調度、信號、內核對象、系統調用、協議棧實現等。Linux作為開發源碼的操作系統,是一個很好的學習的平臺,Linux幾乎具備了所有現代操作系統的特征。雖然Windows系統的內核實現機制的資料較少,但通過互聯網還是能獲取不少資料。懂得網絡協議TCP/IP。
在互聯網如此普及的今天,如果您還沒有對互聯網的支撐協議TCP/IP協議棧有很好的掌握,就需要迅速補上這一課,網絡技術已改變了軟件運行的模式,從最早的客戶/服務器結構,到今天的WEBServices,再到未來的網格計算,這一切都離不開以TCP/IP協議棧為基礎的網絡協議支持,深入掌握TCP/IP協議是非常必要的。至少,需要了解ISO七層協議模型,IP/UDP/TCP/HTTP等常用協議的原理和三次握手機制。明白DCOM/CORBA/XML/WEBServices存在的意義
隨著技術的發展,軟件與網絡的無縫結合是必然趨勢,軟件系統的位置無關性是未來計算模式的重要特征之一,DCOM/CORBA是當前兩大主流的分布計算的中間平臺,DCOM是微軟COM(組件對象模型)的擴展,而CORBA是OMG支持的規范。XML/WebServices重要性不言而喻,XML以其結構化的表示方法和超強的表達能力被喻為互聯網上的“世界語”,是分布式計算的基石之一。
不要將軟件工程與CMM分開
大型軟件系統的開發中,工程化的開發控制取代個人英雄主義,成為軟件系統成功的保證,一個編程高手并不一定是一個優秀的程序員,一個優秀的程序員是將出色的編程能力和開發技巧同嚴格的軟件工程思想有機結合,編程只是軟件生命周期中的其中一環,優秀的程序員應該掌握軟件開發各個階段的基本技能,如市場分析,可行性分析,需求分析,結構設計,詳細設計,軟件測試等。
需求理解能力
程序員要能正確理解任務單中描述的需求。在這里要明確一點,程序員不僅僅要注意到軟件的功能需求,還應注意軟件的性能需求,要能正確評估自己的模塊對整個項目中的影響及潛在的威脅,如果有著兩到三年項目經驗的熟練程序員對這一點沒有體會的話,只能說明他或許是認真工作過,但是沒有用心工作。
模塊化思維能力
作為一個優秀的程序員,他的思想不能在局限當前的工作任務里面,要想想看自己寫的模塊是否可以脫離當前系統存在,通過簡單的封裝在其他系統中或其他模塊中直接使用。這樣做可以使代碼能重復利用,減少重復的勞動,也能是系統結構越趨合理。模塊化思維能力的提高是一個程序員的技術水平提高的一項重要指標。
素質要求
團隊精神和協作能力
團隊精神和協作能力是作為一個程序員應具備的最基本的素質。軟件工程已經提了將近三十年了,當今的軟件開發已經不是編程了,而是工程。獨行俠可以寫一些程序也能賺錢發財,但是進入研發團隊,從事商業化和產品化的開發任務,就必須具備這種素質。可以毫不夸張的說這種素質是一個程序員乃至一個團隊的安身立命之本。
文檔習慣
文檔是一個軟件系統的生命力。一個公司的產品再好、技術含量再高,如果沒有缺乏文檔,知識就沒有繼承,公司還是一個來料加工的軟件作坊。作為代碼程序員,必須將30%的工作時間寫用于技術文檔。沒有文檔的程序員勢必會被淘汰。
規范化的代碼編寫習慣
知名軟件公司的代碼的變量命名、注釋格式,甚至嵌套中行縮進的長度和函數間的空行數字都有明確規定,良好的編寫習慣,不但有助于代碼的移植和糾錯,也有助于不同技術人員之間的協作。
測試習慣
測試是軟件工程質量保證的重要環節,但是測試不僅僅是測試工程師的工作,而是每個程序員的一種基本職責。程序員要認識測試不僅是正常的程序調試,而要是要進行有目的有針對性的異常調用測試,這一點要結合需求理解能力。
學習和總結的能力
程序員是很容易被淘汰的職業,所以要善于學習總結。許多程序員喜歡盲目追求一些編碼的小技巧,這樣的技術人員無論學了多少語言,代碼寫起來多熟練,只能說他是一名熟練的代碼民工,他永遠都不會有質的提高。一個善于學習的程序員會經常總結自己的技術水平,對自己的技術層面要有良好的定位,這樣才能有目的地提高自己。這樣才能逐步提高,從程序員升級為軟件設計師、系統分析員。
擁有強烈的好奇心
什么才是一個程序員的終極武器呢,那就是強烈的好奇心和學習精神。沒有比強烈的好奇心和學習精神更好的武器了,它是程序員們永攀高峰的源泉和動力所在。
行業現狀
由CSDN、《程序員》主辦的2007年開發者大調查2007年底已收到15000多份有效問卷,已經是中國調查樣本最多的開發者調查。在這次調查中,詳細的分析了樣本空間的分布狀況,發
現在龐大數目的有效問卷的參與者中有70%也就是接近一萬一千名的參與調查者是IT的全職人員,14%的參與者是有過開發工作經驗的學生,從這樣的分布就可以看出來IT從業人員對專業知識的需求是巨大而迫切的,CSDN作為專業的軟件開發技術門戶網站,已經是大家獲取這些技術知識的主要手段。
一、選擇數據庫技術和互聯網技術的人數總和占到了總人數的一半
2007年火熱的SOA和動態語言各占13%和12%。其實這幾大塊技術分布他們之間都是有一定的聯系的,互聯網的發展近兩年呈爆炸式的增長態勢,中國的網民總數已經超過了1.4億這樣一個巨大的數字。
企業中業務的復雜程度越來越高,商業競爭不斷增加企業的IT系統,使企業的商業數據呈幾何數量級不斷增長,在后臺海量的數據中數據的管理由之前的單一型數據變成了多緯度的復雜數據,所以可以同時管理關系型數據庫和XML數據的混合型數據庫已經成為主流。
面對企業不斷增加新的IT信息系統,整合已經迫在眉睫,SOA成為必然的趨勢,企業對人才的需求從單一型技術人才、業務人才跳躍到了業務技術的復合型人才,這次的開發人員大調查令《 程序員》雜志的調查者看到了這些技術焦點背后千絲萬縷的關聯。
二、幾乎一半的.NET用戶不參與開源項目RedHat+Ubuntu占有率超過70%
應用到.NET平臺上的開源項目,“大量使用”的比例數僅為8.68%,尚不足一成;“少量應用”的開發者人數比例為42.78%。“基本不用”的比例高達48.54%,與前二者之和幾乎不相上下。
雖然開源的出現和發展,讓軟件沒有壟斷的未來日漸明朗;雖然開源運動經過多年的高速發展,現在已經聚集了相當的力量,開源的自由和給予理念逐漸深入到了企業的技術核心層面。但微軟以商業軟件為生,畢竟在微軟技術領域中,開源項目通常都被看作是二等公民。很多開源項目對.NET社區產生了巨大的推動作用,微軟公司很難提供任何實質性質的支持。
Linu版本
當前安裝有Linux操作系統,數據中RedHatFedora占據絕對優勢——Linux使用者使用該版本占總數的49.49%。Fedora是RedHat推出的重要的一款Linux版本,在每個fedora版本中都是集成最新的Linux軟件,特別是服務端軟件。
使用“RedHatFedora”關鍵詞在百度網頁中搜索得到7,090,000條結果,RedHatFedora在調查中占據Linux版本的半壁江山符合整個Linux版本的分布情況。
排在第二位的是Ubuntu,受支持數占到總數的23.92%;第三位的是SuSE占9.09%,接下來是Debian,使用率為5.92%。
在這里面令人期待的中國本土Linux的讓人大失所望。使用率僅占5.16%,幾乎只
有RedHatFedora的十分之一。
三、揭示八成技術人員數據庫選型標準SQLServer用戶接近50%
使用率占據榜首的數據庫產品是微軟的SQLServer,比例數達到了47.92%。與其余所有的數據庫之和分庭抗衡,大有一覽眾山小之勢。
從調查得到的使用率來看,MySQL仍處于望MSSQLServer項背的階段。調查顯示,MySQL的使用數為1651,占總數的13.80%,不過排名第三。
使用率排在第二位的是Oracle,比例達到24.21%。在前有SQLServer,后有MySQL的情況下,Oracle仍能達到四分之一的占有率,發展勢頭不可謂不強勁。
雖然Orcale數據庫的價格比SQLServer數據庫要高,但Oracle采用開放的策略目標,可在所有主流平臺上運行。而且有開發者認為Oracle的安全認證是獲得最高認證級別的ISO標準認證,因此安全性高于SQLServer。
排在第四位的是Access——5.59%;接著是DB2UDB,占總數的2.75%;至于FoxPro、Informix、PostgreSQL、Sybase得票數均僅在一百左右,還有待進一步的發展。
四、中國程序員最愛的智能手機平臺Linux+Java超過Symbian
“開源Linux對于眾多開發者的吸引力是巨大的,但是,這僅僅是針對于技術開發人員來說的,而對于普通消費者就不是如此了。”在眾多開發者心中,主要是對Linux的青睞。從調查結果中也可以直接反應這樣的現象。有專家對此評論說:Linux+Java的模式,應該是應用最多的模式。
開源Linux對于眾多開發者的吸引力是巨大的,但是,這僅僅是針對于技術開發人員來說的,而對于普通消費者就不是如此了。針對此問題行業的專家有自己的觀點:“現在Wince和Symbian發展很快,并且隨著手機硬件方面性能的提高,很多政府部門和企業在采購時,很多會考慮Dopod這樣的手機,或者價格便Wince和Symbian都主要使用c++開發,正是嵌入式開發的潮流。”
不同人群對于收集智能操作系統的觀點是不同的,對于開發者角度,他們更加青睞于微軟和開源Linux的產品,而普通大眾他們比較喜歡Wince和Symbian。五、七成程序員不愿意選擇門戶網站獲取開源信息SourceForge占絕對優勢
30%的技術人員從門戶網站獲取開源技術信息,剩下的70%的技術人員都是從專業的開源社區和開源廠商的技術網站上獲取信息,包括有SourceForge、LinuxToday、OpenOffice和IBMdW等。
在這70%當中,比例占有絕對優勢的就是SourceForge了,這里是開源軟件的開發者進行開發管理的集中式場所,也是全球最大開源軟件開發平臺和倉庫。而LinuxToday里面會有記錄很多很新的Linux業界大事,新聞以及出版信息。所以,對開源技術感興趣的程序員們,不必再為如何獲取開源信息而苦惱了,快加入到這70%的人群中來吧。
互聯網的發展已經成為大家獲取信息最主要的渠道之一,網民上網的習慣也從開始的上為數不多的幾個門戶網站發生了變化,大而全的門戶網站并不能滿足專業領域人員的信息需求,從2004年開始陸續出現了大量的各個領域垂直細分的內容網站,一方面有長尾理論的理論支持,另一方面廠商也建立了相應產品的技術內容網站,希望能聚集一批專注于這個領域專業人士,做好他們的定向營銷。
做細分領域內容的網站對門戶已經造成了一定的威脅,這些網站的專業性高,用戶的粘性相對也比較高,如果細分領域的內容網站能將自己的服務有所提升,就如同SourceForge一樣,那么未來門戶網站的路就變得更加崎嶇了。
六、Java開發框架:6%的JSF欲撼動21%的Struts
JSF現在比較有優勢的是對Ajax的集成,這一點走在了其他框架的前面。未來兩
年,JSF與Struts將展開JavaWeb框架的最終戰爭。經過數年的“框架大戰”,Java界的各種框架找到了自己應有的位置。Spring+Hibernate+Struts已成為Java開發的主流體系。在這個體系中,Spring+Hibernate的地位應該說短期內是難以撼動了。除了新興的JbossSeam作為挑戰者之外,幾乎難有勁敵。
JavaB/S編程中歷來戰火最激烈的其實還在Web層,框架的數量最多,爭議最大。一切由Struts而起,而Struts最終也坐穩了第一個時代的王座。在技術層面,Struts1.x已經被無數人抱怨過、批評過,但終于還是穩坐王位,這充分說明了習慣的力量。“穩定壓倒一切”,這句話在IT技術領域仍舊適用。
詳細的分析了Java開發框架的使用狀況,發現主要使用的開發框架JSP占26%,Struts占21%,Hibernate占17%,SpringMVC占11%,EJB占7%,JSF占6%,SpringWebFlow和POJO各占4%,其它占4%。就這一調查數據,不難看出,Spring+Hibernate+Struts的優勢地位還是相當的明顯。
Struts和Hibernate幾乎已經成了JavaEE應用的常規配置,21%的開發者用到Struts,用到Hibernate的開發者也有17%;在一個成熟的技術平臺上,各個項目的技術方案會在很大程度上趨同——因為所有未知領域都已經被探明,各種問題都有對應的最佳實踐,架構師們可以參考的成功案例越來越多。就拿JavaEE來說,架構師們需要考慮的問題比之三年前已經簡單多了,這就是成熟的價值。
有專家評論:“其實IT應用技術,什么新鮮玩意并不難學,難的是標準化和規范化。每個程序員都有自己的思路和習慣,寫出來的代碼自然是五花八門。Java何以成為編程界的占重要地位,很重要的一點在于Java的規范化。這種規范化很高的語言適用于多人合作的大型項目,便于溝通和理解,也就便于集成和維護。Java世界為什么會框架橫飛,說到底還是規范化的需要。純JSP和Struts寫Web誰快,擺明了是JSP。那為什么用Struts?原因在于100個人寫出來的JSP,有100種寫法;而100個人寫出來的Struts,基本相似。Struts之成功,正緣于其在JavaWeb層的規范化方面所做出的貢獻。
然而長江后浪推前浪,Struts1.x的技術缺陷畢竟是隱患。Sun力推JSF,打算一雪Web層框架缺失之恥。JSF現在比較有優勢的是對Ajax的集成,這一點走在了其他框架的前面。未來兩年,JSF與Struts將展開JavaWeb框架的最終戰爭。
JSP經過幾年風雨洗禮依然把持頭把交椅,看來所有的框架表示層都離不開JSP而存在,而作為JSP的手足兄弟JSF也是僅次Spring之后又一個后起之秀。
七、C++開發環境格局難打破75%的開發人員首選VS系列
BCB正江河日下,2007版本的推出也無法力挽狂瀾。雖然現在C++Builder已經歸于CodeGear,但人們還是習慣性地與Borland聯系上。
1998年Borland公司推出的C++Builder這一當年全新的32位Windows開發工
具,繼承了Delphi使用簡便、功能強大、效率高的特點,并且結合了C++語言幾乎所有優點。所以開始C++Builder迅速風靡。它的主要競爭對象——Microsoft開發的VisualC++也是不甘示弱,迅速出擊,突出了Visual可視化強的特點,加上Platform、SDK部分以及Microsoft產品與Windows的天然默契,逐漸成為了技術人員的首選。隨著VisualC++版本的不段升級,以及功能、風格等諸多原因,BCB漸現頹勢,許多Builder使用者也開始轉而使用Visual了。
在2007年CSDN、《程序員》主辦的開發者大調查中,詳細的分析了C++方面大家主要使用什么IDE的狀況,在目前已收到的15000多份有效問卷中,發現主要使用VS系列的占了75%,BorlandC++Builder/CBuilderX只占6%,EclipseCDT占6%,DevC++占2%,其他IDE占3%,不使用IDE占8%。對于.NET開發,VisualC++2005有了一套新的語法;新的優化技術,可使程序的速度最高提高30%;同時新的編譯模式,可保證在Microsoft.NETFramework之上生成完全遵從CLI(CommonLanguageInfrastructure)的可驗證代碼;新的interop模式,可提供本地與托管代碼的無縫融合。
相對于前兩個版本,新編譯器還包括了一個增強版本的緩沖區安全檢查選項,而且對C++程序普遍使用的庫,也有新的注重安全的版本。VisualC++2005對基于IntelItanium和AMD64的64位平臺,提供了對OpenMP標準的支持,并且修正了一些混合DLL加載的問題,對DoubleP/Invoke的性能問題,提供了自動運行時消除。相比之下,C++Builder2007英文版2008年6月初上市。從CodeGear大中華區技術總監李維的博客,看到CodeGear對C++Builder2007的期待。雖然說對同一件事情,每個人都有自己的視角,已有五年C++方面學習和開發經驗的賴勇浩說道:“BCB正江河日下,2007版本的推出也無法力挽狂瀾。雖然現在C++Builder已經歸于CodeGear,但人們還是習慣性地與Borland聯系上。
現在的Microsoft及VC勢頭強勁,產品也具有很高的質量性,CodeGear在C++和.Net領域至少三五年內會繼續望其項背。所以推出CB2007,更多的是基于版本延續。”
八、程序員更喜歡Firefox市場份額超過IE7.0兩倍
參與調查的多數是軟件開發人員或者多數是IT從業人員,但是從這一比例不難看出,IE丟失掉了曾經在瀏覽器大戰中占據了的技術優勢,在IE6推出后的5年時間里,瀏覽器一直在快速發展,而IE卻一直沒有更新過,這對一個世界上最常用的產品來說絕對是致命的。Firefox(火狐瀏覽器)以它的小巧、安全,很容易擴展和定制的特長獲得了越來越多的喜愛。
更重要的是,它是是一個自由的瀏覽器,所有的源代碼都是開放的,任何人可以為它的成長貢獻力量。Cookie、頁面緩存,個人都可以精確的控制,這些特性都是技術人員們所崇尚的“我的 地盤我做主”的精神。如果說之前FireFox相對IE6有50%的優勢的話,那么,FireFox相對于現在的IE7的優勢已經降低到25%左右了。因為IE7從底層已經做了很多的修改,已經慢慢的向W3C標準靠近了許多,在功能使用方面與FireFox的差距也變得很細微,Tab功能,CSS和腳本支持功能現在IE7都比之前表現強了,差距僅僅存在于某些小細節中了。
IE6在這個市場中存在了5年之后微軟才意識到改變和向國際標準靠攏的重要性,這就直接導致了大量的技術人員失去了對IE的信心,投向FireFox陣營,不過,微軟到底還是強大的,在全球范圍內有很多的“粉絲”,他們會一直關注微軟的任何一次動作,客觀的評價也是對產品最好的反饋,也是最有價值的。
關于Maxthon和騰訊的TT,雖然它們都是基于IE內核的瀏覽器,但是Maxthon在這次調查中僅次于FireFox,力壓IE名列第二的位置,著實看出了這幾年Maxthon確實做到了他們的口號“讓技術為使用舒適服務”。
包括了FireFox、Opera這種標準的瀏覽器,也包括了Maxthon和TT這樣基于IE內核的瀏覽器,對于標準的瀏覽器,FireFox和Opera的重點是要解決兼容問題,而基于IE內核的Maxthon和TT更主要的是要解決瀏覽器插件、工具的應用問題,所以,技術產品的激烈競爭帶給用戶的其實是一種良性循環,使我們可以第一時間用到最好用的工具,至于商業效應,還是留給廠商自己去考慮吧。
九、中國程序員健康兩成感覺很虛弱亞健康接近七成
“干得比驢累,吃得比豬差,起得比雞早,看上去比誰都好,五年后比誰都老。很多程
序員都曾這樣感慨和抱怨過自己的生活狀態。” 亞健康狀態是人體處于健康和疾病之間的過渡階段,在身體上、心理上沒有疾病,但主觀上卻有許多不適的癥狀表現和心理體驗。
位于調查結果第二位的是“很虛弱”——149,比例為19.81%。很虛弱的健康指數低于亞健康,已接近生病和透支狀態,他們的健康已經被亮出了黃牌。
每個人的理解不一樣,但是“糟透了”這樣的詞如果用來形容程序員健康的話,相信大多數人都絕對認同“你已經病了”這樣的理解。令人不敢相信的是,竟然有8.24%的程序員用這個詞來形容自己的健康狀態!
調查結果中“非常健康”的票數低得可憐——40,即使算上“沒感覺”,二者之和也不過9.04%,幾乎跟“糟透了”持平。如果將“非常健康”和“沒感覺”一起算為健康的話,處于亞健康狀態的程序員是健康狀態的7倍,自認為“很虛弱”的程序員數目是處于健康狀態的2.2倍!
十、.NET全面進入2.0時代,AJAX風頭正勁“在Java領域,JDK5.0是當之無愧的主流平臺,但JDK1.4仍保有一半以上的占有量。總的來說,Java族群顯然不像.NET族群那樣追新。從另一個方面看,這也說明Java平臺的成熟,和.NET平臺的迅速發展。”
根據2007年的調查數據分析,在.NET領域,.NETFramework2.0的采用量已全面超越.NETFramework1.1,成為.NET平臺的首選框架。2006年調查結果,1.1和2.0的采用量基本持平,而2007年2.0的采用量則高達1.1的三倍之多。.NETFramework1.1已是明日黃花,微軟的更新
換代策略可以說是成功的。在Java領域,JDK5.0是當之無愧的主流平臺,但JDK1.4仍保有一半以上的占有量。總的來說,Java族群顯然不像.NET族群那樣追新。從另一個方面看,這也說明Java平臺的成熟,和.NET平臺的迅速發展。
B/S已經成為中國軟件業普遍接受的軟件結構。在表現層,AJAX技術采用量較去年有較大提升,有將近一半的Web應用采用了AJAX技術,仍采用純HTML+少量腳本的Web應用中,也有四分之三打算轉向采用AJAX技術。反觀微軟和Adobe力推的新一代RIA平臺,則響應者尚少。分別只有1/20和1/10的人愿意選用SilverLight和Flash/Flex作為Web表現層技術。
職業困境
老虎、Bill、自己,中國程序員的困境也來自三個方面
困境之一:老虎的威脅。程序員要面對的餓老虎實在不少,比如說老板,好象老板就是程序員的天敵,什么“不懂技術卻指手畫腳”、什么“得到與付出不相當”似乎是程序員最常見的牢騷,這個問題不可能得到真正的解決。
困境之二:Bill的競爭。一般說來中國的程序員大都是吃“青春飯”的,大部分程序員的黃金時代是24~28歲。到了30歲左右,一批又一批年輕程序員會給你帶來巨大的競爭壓力。首先由于軟件行業的飛速發展,很多自己以前學的東西逐漸升級換代,而許多程序員由于長期于工作,學習新知識的效率必然下降。其次自己干了幾年,薪水要求自然就高了,而年輕程序員工資又低、干活又快,當然會成為老板的首選;第三,30歲基本都已經成家了,要支撐家庭的生活負擔,幾乎連從頭在來的勇氣都不會有了。中國的老話說“長江后浪推前浪、一代新人換舊人”,這個歷史的規律在軟件開發行業體現的尤其明顯和殘酷,很多程序員必然要面對的結果就是降薪乃至失業。
困境之三:自我的實力。都知道人最難戰勝的是自己,所以自我也就是程序員需要超越的最大障礙。大多程序員都把系統分析員和項目經理作為自己的職業目標,但這些目標的達成,需要個人素質、市場機遇等多個方面的條件,太多的程序員就是在高不成、低不就的狀態中蹉跎了歲月。對于系統分析員,特別需要以下幾方面的素質:客戶需求分析能力、系統架構與設計能力、模塊分解設計能力、項目流程控制能力、項目風險評估能力等,而對于項目經理則更注重項目管理方面的能力如團隊組織能力、溝通協調能力、分析問題解決問題的能力以及良好的職業道德等,而這些素質和能力往往只能依靠程序員個人的學習和努力。看到越來越多的程序員開始學習項目管理的課程,真的有點為他們擔心,因為現在的項目管理培訓只能停留在理論和考證的程度,既沒有素質方面的訓練,又缺少實際軟件開發項目的案例,學習的結果遠遠不能達到預期的效果。