跳到主要內容

2018 Java 開發者年度大調查

前言

會想要寫這篇文章原因是希望提供Java同好參考和讓自己熟悉的工具是否與外國的開發者做一些比較和見解.
Java Magazine年度大調查,針對全球10500的Java開發者所做調查,問卷面向包含JDK、開發工具、web 框架等,我把一些資料整理出來提供大家參考,詳細可以參考本期java magazine內容.會針對部分常見的技術和工具,以我自己的角度去詮釋,如果有問題歡迎留言討論,因為版權問題大部分只能用描述,無法全部都貼統計圖表.

JDK調查

JDK是Java語言開發、編譯、執行程式的一個必要環境,換句話說想要執行Java必須要安裝JDK套件.調查內容如下:

(1) 哪些供應商的JDK安裝在產品上面?link
由調查結果可以知道有百分之70的人會使用Oracle JDK,21%的人會使用社群版本openJDK,一些企業用戶使用IBM JDK版本約4%.因為版權問題這幾年很多人把Oracle JDK移植到openJDK為他們主要開發的版本.

(2)哪些JVM語言為主要開發應用程式link
大部分開發者還是會使用Java為主要的開發語言,其他語言Clojure(3%)、Kotlin(2.24%)、Groovy(2.36%)、Scala(1.83%)這些因為各自有專門領域所以還有部分使用者在使用.例Kotlin可以支援開發行動APP、Scala著名的Spark大數據處理工具.

工具

整個軟體分析、設計、實作、測試到上線都有對應的工具,本次調查著重實作和測試所使用的工具或是框架,這些工具開發者容易部署與進行模擬測試.

(1) 開發者最長使用的IDElink
最多人使用前三名依序Intellj IDEA(45%)、Eclipse IDE(38%)、Apace Netbeans(11%),其中Intellj IDEA Ultimate Edition版本為需要付費有32%;Intellj IDEA Community Edition免費版本為11%;其他為Android開發者約2%.其他IDE開發工具沒有太大的變化.

(2)那些建構工具是主要使用link
開發團隊對專案主要使用的建構工具,是最多人在使用它,Maven仍有60%比例在使用,其次就是Gradle(19%)的人使用,我想應該是Andorid stodio建構工具預設為Gradle和Gradle也支援kotlin腳本關係,才有近年有大幅度的人開始使用.

(3)靜態程式碼品質工具(static quality tool)調查link
在Java有很多開源的品質工具可以用來檢查程式碼品質的好壞,這些工具最多人使用比例依次有SonarQnbe(39%)、FindBug(27%)、CheckStyle(23%),但是也多達36%的開發者沒有使用過此類的工具,來為他們的程式碼檢驗過.

(4)CI/CD工具調查link
CI工具是為了完成持續整合或是持續交付的目標,所發展的工具,這讓你的專案可以減少煩雜的部署工作,在調查結果顯示Jenkins高達57%開發者使用,但是也有21%的人未使用過CI的工具.

(5)源碼版本管理工具link
目前最多人使用源碼版本管理工具為Git高達74%的人使用,表示滿開發者使用Git來管理他們的源碼,其次為Subversion有16%比例的人在使用它.

(6)測試框架調查link
本調查為複選選項,因為測試框架不同使用的情境也會不一樣,這些測試框架有時候可以互相搭配使用,在單元測試JUnit(78%)最多人使用的單元測試框架,在眾多模擬測試框架當中Mockito(45%)也是多人推崇,補充一點JUnit和Mockito可以互相搭配使用.在Web測試框架中Selenium(29%)的人使用.

雲端技術

(1)虛擬技術調查link
為了因應新的技術serverless的誕生,容器框架使用比例高達43%,但是仍有VMs有33%仍在使用,和33%沒使用過雲端的工具

(2)部署方法調查link
本次調查有43%的人沒有使用過自動部署工具,有18%沒有聽過這種方式,大多數人使用批次bash的方式來部署他們的程式碼,約12%,只有一些公司或是開發者才會使用CD的工具像Ansible(12%)、Chef(5%)、Puppet(8%)完成部署上線工作.

應用程式開發

(1)web框架調查link
Spring的生態已經佔領高達76%(spring boot 和spring MVC)比例的人都會使用來開發web應用程式,官方JSF也有19%的人來使用

(2)ORM框架調查(複選)link
超過1/2的開發者使用Hibernate框架來處理資料存取的部分,但是仍有23%的人喜愛用原生JDBC使用,Spring開發者有些會使用Spring JdbcTemplate來存取資料庫.也有1/4沒有使用任何ORM的框架

(3)Web Server調查link
目前最受歡迎的網頁伺服器為Apache Tomcat(41%),他主要流行的原因為快速、穩定、開源.在企業版方面WebLogic(6%)和WebSphere(5%)還是Web Logic比較多企業在使用.

(4)最常在哪裡取的Java的技術資訊(複選)link
開發者最常取的技術資訊:Stack Overflow(62%)、Oracle’s document(41%)、Java Magazine(38%)、DZone(32%)、Youtube(24%),這些可以提供大家參考節省開發時遇到的問題或是技術上資訊容易取得.

參考

  1. java magazine
  2. JDK維基百科

留言

這個網誌中的熱門文章

JavaBean 和POJO

前言 今天介紹JavaBean和POJO的不同,這兩個名詞在JAVA文章常常被拿來使用以及討論。在JDK1.1時候釋出才有的一個標準架構,很多時候常常被搞混,所以我們特別開闢一章來加以討論。POJO規範在企業級應用已經廣大的被使用的規範。 解釋 POJO : 全名為Plain-old-Java-object,只需要繼承Object就可以,沒有特定規定,只要建立的類別有setter/getter方法都可以稱為POJO JavaBean: JavaBean通常用來封裝多個物件成為單獨物件使用,規範比較嚴格,規則如下 規則 說明 1 需要實作序列(Serializable/Externalizable) 2 不能有參數的建構子( no-arg constructor) 3 需要有公用setter/getter 4 屬性必須要私人(private) 5 屬於特定POJO規則 比較 所有的JavaBean都為POJO,但是所有的POJO不一定為JavaBean 都可以當作重複元件 都必須序列化 特性都為可用性、易用性和持久化使用 - 應用 由圖我們可以知道POJO在應用程式中,主要用來存取資料庫資料達到持久化的目的,並提供給商業邏輯流程處理使用。這種POJO的架構提供程式人員開發時的可以很有規則將資料封裝並加以使用。 範例1. JavaBean(以員工為實例) JavaBean建立員工物件,可以發現Employee物件建構子沒有任何參數,屬性為私有化並setter/getter的命名方式。 //實作序列化 public class Employee implements java.io.Serializable{ private int id; private String name; //無參數建構子 public Employee(){} //以下實作setter/getter public void setId(int id){this.id=id;} public int getId(){return id;} public void setName(String ...

Python AI-問題集

Python AI-問題集 問題集 Jupyter Notebook執行ipywidgets會出現kernel死掉的錯誤發生(The kernel appears to have died) 解決方法 (1) 根據log檔來判斷問題: 例如:log訊息出現OMP: Error #15: Initializing libiomp5.dylib, but found libiomp5.dylib already initialized. (2) 根據問題關鍵字找出問題所在: 利用google查詢所遭遇到的問題,例如我把上面的問題上google查詢可以找到這篇的解法 https://blog.csdn.net/bingjianIT/article/details/86182096 (3)實作解法: 我實作下面解法後,就可以順利執行手寫辨識的程式. //在Python宣告時加入 import os os.environ["KMP_DUPLICATE_LIB_OK"]="TRUE" 參考 https://blog.csdn.net/bingjianIT/article/details/86182096

GSON 進階教學

GSON進階教學 完成 基礎教學 後,本章節教你如何處理在非正常情況下,如何完成反序列與序列動作。 泛型轉換 序列化與反序列化時,客製化輸入出JOSN字串@SerializedName 忽略物件屬性輸出@Expose 泛型轉換 泛型做Json序列/反序列時,比較麻煩地方是泛型在運行期間相關的參數就會被抹除所以無法知道原來的類別。我們建立一個播放器(Play)類別,它為泛型的類型,它可撥放MP3、CD等等,所以建立一個CD媒介(CD)類別。Play使用類型為泛型T, 物件 屬性 播放器 Play 類型 type CD媒介 CD 歌 songs /**' * 播放器 * @param */ public class Play { T type ; public Play(T t){ this.type = t; } @Override public String toString() { return this.type.toString(); } } /** * CD 音樂物件 */ public class CD { private List songs ; public CD(String ...songs){ this.songs = new ArrayList() ; for(String song : songs){ this.songs.add(song) ; } } @Override public String toString() { StringBuilder sb = new StringBuilder() ; sb.append(""); for(String s:songs){ sb.append(""+s+",\r\n"); } sb.append("")...