今年初以來，我們團隊就一直在轉換新的開發環境，按部就班的從 Maven 轉換到 Gradle、升級到 Java 8、升級 Cassandra CQL、更新新的 code style、導入 Vagrant... 等等。每一次的升級都讓我們的開發更為進步，更加順暢。而今年最後一次的升級正在進行中 -- 從 Eclipse 轉換到 Intellij IDEA。
我個人已經用 Eclipse 十年了吧，要把長久以來身體的記憶換掉不是件容易的事。如果你沒什麼再用 IDE，專門用 Vim，那你可以想像自己切換到 Emacs 會有多難。這不是辦不到，只是要很有決心，要有足夠的理由，轉換才能成功，才有意義。
我們團隊在今年初就一直想切換到 Intellij 族系了，期間雖然有斷斷續續在嘗試，但都只是玩玩而已。轉換 IDE 很困難的，所以我比較希望能一次解決，長痛不如短痛。因此熬到了九月，時機才算成熟，可以開始正式轉換。
如果你是 solo 開發者，或是你們的團隊間開發規定比較疏散，那麼用什麼 IDE 其實是隨自己爽的，愛什麼時間換就什麼時間換。我們的團隊比較特殊，我們有採行 pair programming，所以大家用的開發環境要求完全一致，而快速鍵的設定也得統一才行。不然換個電腦、換個 pair，寫程式時就會變得 卡卡的，節奏會整個慢下來。也因為不能漸進式的一人一人的轉換，要一口氣大家一起轉，所以時機和誘因變得很重要。
Google Android 開發團隊已經講明了，未來新功能只會加在 Android Studio 上，Eclipse ADT 只會做維護。所以到了某版的 Android 之後，是非轉換 IDE 不可了。
Intellij IDEA 早在三年前就推出了免費且 Open Source 的 Community Edition，功能也很完整。轉換頓時少了個很大的阻力。
如果你有在追 IDEA 近來幾版的演進，你會發現相較於 Eclipse ，他們的改進比較多比較快，支援的語言種類很豐富，而新加的功能也比較新穎。Eclipse 這幾年幾乎沒什麼變化了。在軟體業，停滯就是一種退步。
Intellij 有出 AppCode ，可以取代 Apple 的 XCode 進行 iOS 的開發，我們已經用了一年，的確是相當出色。AppCode 與 Android Studio 兩個都是 Intellij 同一系列的產品，用起來相當的一致，降低學習與訓練的成本。
Android Studio + AppCode + Intellij IDEA Community Edition 這組合從 mobile 端到 server 端，整個開發套餐是統一的。開發團隊不用因為換到不同的開發任務，腦袋和身體就要將思考模式和快速鍵記憶做硬生生的轉換。如果團隊也有開發 web 的話，Intellij 也有 WebStorm 可選。這樣下來，整個開發環境都是連貫的。不僅管理簡化了，而開發者只要專心在程式語言，以及需求的問題上就好，開發效率也會提升。
前兩個月我們花了一些時間將我們複雜的大專案從 Maven 轉換到 Gradle。採用 Gradle 後我們的 Android 專案就可以換到 Android Studio 開發了。
我們團隊正值 PC 切換到 Mac 的過渡期。過去幾年我們統一使用 PC layout 的快速鍵配置來開發 app，不論開發機是在 PC 或是 Mac 上。到了今年年中我們的開發機全部轉換到 Mac 了 (包含員工私人的筆電也全都是 MacBook 了)。因此可以正式放棄 PC layout 的鍵盤配置。突然間換到 Mac 鍵盤 layout 其實也是很痛的。我們選擇連同 IDE 在一同時間轉換，要痛就痛這麼一次吧。
我想我們內部轉換的誘因並不適用於各位，當做參考就好。
那麼，轉換後的風景如何？
在開發模式下，build apk 一次的時間快一分鐘，相比 Eclipse ADT 只要十幾秒真是差太多了。雖然之後會越來越好，但這部份 Google 的進展太慢了，實在是很遜。這也讓我們的 Android 開發變慢。
卡彈啊！卡彈！
轉換到新 IDE 的兩個禮拜內，寫程式就像拿到一把不斷卡彈的機槍，寫寫停停、寫寫停停。三不五時就要停下來翻快速鍵小抄，直到用身體記住為止。兩個禮拜能回復全速算快的了，像我自己就大概要一個月吧。
相較於 Eclipse，Intellij 少了一個我認為很重要的功能，就是 IDE 不會即時回饋程式不能 compile。在 Eclipse 裡，你隨便把 method 改個名，Eclipse 馬上會在呼叫端的程式碼上標紅叉。但是在 Intellij 裡，你必須手動 Rebuild Project 才行 (Make Project 沒用)。我覺得這缺點實在太糟糕了。
Eclipse 強在即時 compile 回饋，還有那無所不能的 Quick Fix Ctrl + 1。Intellij 則有 instant completion、postfix completion 讓你寫起程式有如行雲流水，以及更好的 Java 8 Lambda 支援。兩者的關係比較像是 Android vs. iPhone 吧，要比的話是吵不完的。
開發來回在 iOS, Android, Server 間切換很順啊，快速鍵不會打架了。我們公司還有用 Dart，DartEditor 本質上就是 Eclipse，所以現在變成切換到 DartEditor 開發時就很痛苦。怎麼辦？把 DartEditor 的所有快速鍵全改成跟 Intellij 一樣啊！多少減少一點切換的負擔。
我上面都在一股腦地抱怨 Intellij ，但轉換如果不會痛就不是轉換了。隨著熟練度提升，我想這情況再過個二、三週就會好很多，因為現階段我的速度已經回復了不少。未來學會 Intellij 上更多的新招式後 (例如神奇的 multiple selections)，開發速度我想會比 Eclipse 快一點。
我們花的時間比一般的純轉換 IDE 還長，因為我們連 keyboard layout 也跟著一起換。PC layout 的快速鍵只有運用 ctrl, alt, shift 三個。而 Mac layout 多了一個 command 鍵，有些組合鍵一次就要四顆鍵同時按，手都按到快抽筋了，這得練習久一點。
我也應該轉換到 Intellij 族系嗎？
你可以參考我列出的轉換好處，然後像我上面一樣列出自己轉換的誘因，看看足不足夠為轉換的動機。如果你的狀況不甚符合，然後也沒什麼其他誘因，那你的轉換時機還未成熟，那麼繼續用 Eclipse 也無妨。Eclipse 也是很成熟的產品，可以勝任所有的任務，沒有說非換不可，頂多少了些很炫的功能。當然如果你是新手，或是才剛用 Eclipse 幾個月，那我個人建議可以直接用 Intellij，不用再考慮。
你也可以去試用 Intellij IDEA 看看，但我會說試用的時間如果太短其實沒用，你反而會一直抱怨 Intellij 怎麼少了 Eclipse 某某功能，很難用之類的。留下錯誤的印象反而扼殺未來轉換的動機。要試用的話就試用個二週以上，然後期間不要碰 Eclipse，這樣才能去除偏見，玩得出 Intellij 的醍醐味。
Intellij 有 Vim 的 Plugin，能讓你在 IDE 內使用簡單的 Vim 模式。我並不是 Vim 派系的開發者，但是基於某個原因，我被迫實驗混搭 VimIdea 進行開發。原因是 MacBook 的方向鍵太小很難按，而 page up/down 要配上 fn 鍵才有，也是很難按。為了提升程式碼間 cursor 移動的效率，我裝 VimIdea 來使用 hjklwb 鍵來移動 cursor。當然 Vim 模式帶來的不止這些，像是 vi" 啦、ciw 之類的指令也是寫程式時的好幫手。
搭配 VimIdea 的運用我還在實驗中，但加上這個額外的 plugin 又讓我轉換的時程更長了一點，真是有點自找苦吃。目前的心得是 cursor 的移動快很多，手不用移到鍵盤外去按那小小的方向鍵真是不錯。不過 Intellij 的 refactor 模式跟這個 plugin 會衝突，你得先進入 Vim 的編輯模式後，再啟用 Intellij refactor 模式才行。感覺有點像是電影全面啟動那樣，一層一層的進入。
題外話：我個人不太喜歡買 Apple 的產品，十年來也都是一直用 Linux 過日子。不過為了適應這次公司的轉換，新的筆電只好選 MacBookPro。這 MacBookPro 用了快一個月了吧，雖然開發上沒什麼問題，而且 Apple 的東西都是幫你弄的好好的，不用煩惱什麼。但我還是覺得 Linux 比較好，儘管 Linux 上的整合都是破破的。我想這是因為在 Linux 裡有一種獨特的自由感吧，對我來說這無可取代。嘛，有些人就是特別討厭被拘束。
轉換到 Intellij 其實有很多技巧要學，但本文就不提那些了，因為網路上很多文章都整理的更好，我怎麼寫也寫不過那些好文。所以談比較多為什麼要轉換，和轉換後遇到的問題。我們的經驗比較特別，因為包含了轉換到 Mac 鍵盤配置。
Eclipse 沒什麼不好，只是 Intellij 未來會逐漸變成主流。根據國外的統計，Eclipse 仍然是最多人用的 Java IDE，達 48 %，而 Intellij 則成長到了 33%。Intellij 成長速度極快，也許再過個兩年就超越了。這是 Java 人遲早都會遇到的挑戰。