依靠 IDE 會讓程序員的水平變差嗎?

一位在Web開發領域工作了近20年的資深程序員發表博文談論了他的編程語言選擇和.NET開發經驗。他說,如果選擇PHP的話他應該不會像.NET那樣過於依賴集成開發工具(IDE)如Visual Stuidio。.NET開發者Matthew Mombrea反駁了他的觀點,認為使用一個優秀的IDE將使你的工作更有效率,稱Visual Stuidio是最優秀的IDE。Mombrea的論點是,成為一名優秀的程序員不是熟記語言的特定調用,而是知道解決問題的既有方式,儘可能的用最好的技術或工具解決它。依靠IDE真的讓你變成一位差勁的程序員?還是顛倒過來,如果你是一位差勁的程序員,你只能完全依賴IDE?


其實,那些人有沒有依靠IDE,都會一樣差。差就是差,和IDE無關。


確實是這樣的。

相信我,使用打孔紙帶編碼才能讓你成為真正的優秀的程序員。


不知道利用IDE的GUI Debugger的各種高級功能的程序員才是差勁的程序員


現在都2014年了竟然還在為這種破事兒爭論不休。

IDE本來就是從代碼編輯器發展而來,整個文本編輯器加一堆插件不是IDE是什麼?除了可以用來裝逼之外,和IDE又有神馬區別呢?

對於這種問題,其實一句話可以總結。

對於Low逼而言,什麼東西都可以作為他差勁的借口。對於有追求的真正的程序員而言,什麼東西都不能成為自己差勁的借口,因為什麼東西不好用,他們就會自己發明和改造。


這個邏輯就等於:「用自動點火器會讓你變成一個糟糕的廚師,只有鑽木取火才能拯救你」

太傻了……


我覺得吧,真正讓程序員變得不行的不是IDE,而是編譯器阿.
你們大家回想一下,在打孔紙帶的年代,在人腦編譯機器碼的年代,那時候的程序員多稱職阿!

就是因為有了編譯器,才讓那些不能"熟記不同機器的編碼方式,了解紙帶打孔的既有方式,儘可能的用最好的優化與計算解決問題"的二把刀程序員們混進組織的!

所以先別管IDE了,你們看看那些編譯器怎麼樣?


if (自己寫過幫助開發的小工具) {
assert(明白IDE的價值);
} else {
assert(代碼寫的太少);
別跟著瞎討論這種問題();
exit(0);
}


我覺得 @vczh 沒看題目解釋就直接回答了;其實答非所問。

這題目跟「命令行黨秀優越感」其實沒啥關係。

這題問的是「依靠IDE真的讓你變成一位差勁的程序員?還是顛倒過來,如果你是一位差勁的程序員,你只能完全依賴IDE?」

======

從某種意義上講,命令行黨其實也可以是在寫自己的IDE, @vczh 秀寫IDE優越感的話也不用信太多~

^_^

工欲成其事,必先利其器。

用不用IDE都好,優秀的程序員,都是在讓自己的武器更加鋒利,以獲得更高的開發效率。

而差勁的程序員完全依賴IDE,則是人為刀役的表現。差勁的程序員沉迷於配置emacs,也是成為不了優秀的程序員。

關鍵是得清楚自己是在做什麼,使用IDE的話,IDE經常是會隱藏一些細節,如果習慣性的忽視這些細節,那麼是有可能變得差勁的。但我覺得這樣就栽在IDE手上,缺乏好奇心的程序員,我覺得本來就不是什麼好程序員。


好的IDE真的是生產力啊!
記得剛開始學C++,用devcpp,沒有錯誤提示,編譯以後才知道程序對錯,效率可低了。
後來換了netbeans寫C++,帶提示的,錯誤一目了然。
現在用VS2013寫C++,各種提示,宏定義/申明查詢,幫助看別人的代碼,真叫一個方便啊!
ps:組裡面有兩派,GUI和命令行派,不過這只是在調試/文件管理方面的區別,寫代碼,無一例外用IDE~


命令行黨秀優越感說的話你也信?難道他們以為他們沒有IDE寫出來的程序,和別人用IDE寫出來的程序的價值的區別,就跟手工拼接的自行車和自動化製造的自行車的價值區別一樣?

也只有程序員會跟自己過不去了,故意用生產力低下的東西,然後還製造一大堆理由,讓你覺得彷彿用IDE就是弱智一樣。


以後誰再跟你扯這些,你就說「看看人家 @vczh ,不僅IDE用得好,他還會寫IDE!你呢?」


拿個針在紙帶上打孔會讓程序員水平變好么?


不能這麼說,應該說是:你本來就是一不怎麼樣的程序員,依賴ide使你更難變成好程序員。


IDE相對於「純粹的」Text Editor(如不裝任何插件的Vim)而言的確有很大的優勢,如語法檢查、自動化編譯工程、GUI控制項布局等。但事實上,Text Editor可以通過插件完成大部分IDE所能提供的服務。所以說,IDE與Text Editor其實在本質上並沒有太大的差異,都是工具罷了。

不過,似乎從概率的角度,使用Text Editor的程序員要比使用IDE進行開發的程序員靠譜,畢竟以國內高校的教育現狀,大多Text Editor的用戶都曾經是IDE用戶(大一上過C++/C/JAVA,用過VS/Eclipse寫hello world的都懂),經過再三權衡才從IDE轉向Text Editor。在中國,讀完計算機本科,連Makefile為何物都不知道的大有人在,這部分人構成了IDE的主體用戶。

工具之爭沒有太大的價值。正所謂條條大路通羅馬,有的牛人喜歡用IDE,有的牛人喜歡用Text Editor,他們都可以很好地完成自己的工作。至於效率之說,那就是仁者見仁,智者見智了。


人們不會因為有好的工具而使自己的技能變差。

好的工具其實也不是那麼容易掌握的。


用盡量短的時間實現功能、性能、穩定性和可擴展性等各方面指標都滿足要求的程序員水平最高


對於Editor和IDE的爭論,我覺得王垠當年有篇文章說得蠻好得(亂入,雖然現在我覺得他有點偏了....)
編輯器與IDE

很多 Emacs 和 vi 的用戶以為用 etags 和 ctags 這樣的工具就能讓他們「跳轉到定義」,然而這些 tags 工具其實只是對程序的「文本」做一些愚蠢的正則表達式匹配。它們根本沒有對程序進行 parse,所以其實只是在進行一些「瞎猜」。簡單的函數定義它們也許能猜對位置,但是對於有重名的定義,或者局部變數的時候,它們就力不從心了。

很多人對 IDE 有偏見,因為他們認為這些工具讓編程變得「傻瓜化」了,他們覺得寫程序就是應該「困難」,所以他們眼看著免費的 IDE 也不試一下。有些人寫 Java 都用 Emacs 或者 vi,而不是 Eclipse 或者 IntelliJ。可是這些人錯了。他們沒有意識到 IDE 裡面其實蘊含了比普通文本編輯器高級很多的技術。這些 IDE 會對程序文本進行真正的 parse,之後才開始分析裡面的結構。它們的「跳轉到定義」一般都是很精確的跳轉,而不是像文本編輯器那樣瞎猜。

這種針對程序語言的操作可以大大提高人們的思維效率,它讓程序員的頭腦從瑣碎的細節裡面解脫出來,所以他們能夠更加專註於程序本身的語義和演算法,這樣他們能寫出更加優美和可靠的程序。這就是我用 Eclipse 寫 Java 程序的時候相對於 Emacs 的感覺。我感覺到自己的「心靈之眼」能夠「看見」程序背後所表現的「模型」,而不只是看到程序的文本和細節。所以,我經常發現自己的頭腦裡面能夠同時看到整個程序,而不只是它的一部分。我的代碼比很多人的都要短很多也很有很大部分是這個原因,因為我使用的工具可以讓我在相同的時間之內,對代碼進行比別人多很多次的結構轉換,所以我往往能夠把程序變成其他人想像不到的樣子。

然後我個人的觀點是:
1.使用IDE是入門編程的最好選擇
當使用VIM之類的編輯器什麼的,肯定都要花一段時間配置的。有一段時間因為某些奇葩的原因我不得不用純記事本開發C++開發了一個星期,簡直痛不欲生,所以不配置是不行的,而且這個配置可能花你幾小時甚至一天的時間。但是我們是不是真的應該把時間花費在配置上面呢?設想我們要入門編程,我覺得更重要的是掌握程序設計思想 --&> 快速驗證 --&> 反饋學習-&>重複。而這個過程,保持心情愉快是最重要的:編程很多問題已經夠初學者糾結了。而IDE提供的查看定義處,查看實現處,簡易編譯運行調試一體化,還有圖形化顯示N多信息等功能,這尼瑪簡直是初學者的神器啊。而且這一切都幾乎不需要設置啊!

2. 依靠IDE真的讓你變成一位差勁的程序員?還是顛倒過來,如果你是一位差勁的程序員,你只能完全依賴IDE?
這兩個說法在我看來都不成立。我認為使他們不成立的主要原因是:
IDE最後用起來沒有想像中好用。。。。
我們平時開發一般都不用IDE,或者用IDE也當作Editor用。因為:
1. IDE開啟好大好慢...
2. 在我們開發的項目(甚至很多實際項目)中,IDE並不能提供那麼NB的功能了,比如說:indexing不出來(就是你要實現跳轉定義什麼之類之前的一個處理步驟),然後那些跳轉定義、實現處那些功能都用不出來;調試因為項目的原因也用不來;代碼分析之類的因為設計的複雜性,最後分析地結果讓我們不忍吐槽...
3. IDE好貴的好么

我身邊的隊友的觀點都是,如果有一款IDE在對我們做的項目能夠也實現做一個小項目的那些IDE功能,我們都會毫不猶豫地跳過去即使會笨重一點。當然如果你說我們隊友菜那也就沒法說了。

至於導致:依靠IDE真的讓你變成一位差勁的程序員?還是顛倒過來,如果你是一位差勁的程序員,你只能完全依賴IDE
我覺得那是接觸的項目和人自身的問題:當一個人做的東西用IDE搞不定了,那自然沒法用了;如果一個人做的東西本來就不怎麼需要難度,那用一輩子Editor還是不厲害的吧

3.至於說用Editor各種快捷鍵效率高的說法
首先,IDE也有各種快捷鍵。
其次,最重要的是,做開發,一天就寫那麼些代碼,打字快打字慢根本沒有影響,設計才是最耗費時間的。在紙上畫好圖再編碼,用IDE還是用Editor速度都差不多的。

編譯完了繼續幹活了。。本來還想往下說的。
------
另外補充一下,我是用Sublime的,因為我覺得Sublime的界面設計真的很性感很銷魂啊~讓我看到覺得就開心啊!對於一個Editor/IDE,沒有什麼比能夠讓我心情好更重要的功能了。


其實我想說,text editor的問題還好了,對於有經驗的程序員來說用vim或者用ide的text editor在開發效率上其實並不見得有太大的區別。但是IDE的優勢是集成的debugger,gdb(jdb)的console模式的調試真乃反人類。。。所以對我來說IDE最大的意義無非就是個好用的gui debugger,如果一個IDE的debugger不好用, 就是個失敗的IDE


是不是用VIM、記事本開發會顯得更高逼格、水平更高?也就是說,讓我們每個程序猿重回石器時代。這樣才顯得我們水平高。這是什麼邪教的教條?
  IDE本質是一個提高生產力的工具。既然是工具,當然是用來生產的,而不是用來顯得這個人多高水平,繼而裝逼的。

如何判斷程序員水平?
  個人認為,判斷一個程序員的水平,主要看兩種能力:
  1.「思維能力」,大概意思是根據以往開發實踐或理論學習經驗抽象出來的一套思考方法或模式。
  2.「領域能力」,比如某項語言、工具或業務掌握的熟練程度。

工具使用者的差別在哪裡?
  現代分工模式已把造車和開車的人分開了。要開車的人無需會造車,只需大概了解車構造,甚至於不用了解就能開車。
  假設有ABC三人
   A會造車,會開車
   B了解車的構造,會開車
   C職業場地車手,不懂車
---------------
  情況一:三人同時開車到終點,在賽道跑圈。
  結果:三人都能順利到達終點,C最快到達終點
---------------
  情況二:三人同時開車到終點,一般馬路,路況非常差。
  A結果:車子中途壞了,還好,修理一下就繼續上路,順利到達終點。
  B結果:車子中途壞了,修理了好久才能繼續上路,順利到達終點。
  C結果:車子中途壞了,果斷棄車,自己步行了非常久才到達終點。
---------------
  結論:
   1.按駕駛環境的要求排名是這樣的A&<B&<C
   2.按駕駛速度排名是這樣的A=B<C
   那麼你們說這幾個人當中哪個到終點的地的能力強?

  再補充調侃一下那群「裝逼能力者」,A每次開車到終點之前,都造一輛新車出來,造好了再開過去。那麼我會說要麼A是真心腦缺鈣,要麼A是在赤裸裸的炫技。

工具變革需要恐慌嗎?
  說到過分依賴工具,其實大家是擔心工具變革,我能想到的工具變革就以下幾種情況:
  1.領域細分,例如針對不同場景做出更精準拼配的工具或技術
  2.領域迭代,例如基於舊技術的補充或深化
  3.領域消亡,例如領域需求消亡導致領域消亡
  4.領域融合,例如兩個不同領域組合成一個新的領域
  表面上看,一旦工具變革,我們原來積累的「領域能力」就一無是處了。但不要忘記,我們還有「思維能力」在。「思維能力」在我們每獲得一項「領域能力」就能增長。而且大部分領域的思維模式其實都是相通的。我們可以通過類比,很快的從一個領域轉換到另一個領域當中去。所以工具變了,我們確實會丟失很多原有積累的東西,但不要忘了,工具只會向更好的方向發展(比如更易用、更高效),所以使用新工具,扣除我們丟失積累的東西,其實我們還有一定的生產力提高。綜合起來我們的損失並不是太大。
  從社會發展規律看,一個人的「領域能力」不可能無窮廣,要提高生產力,只能對工作進行細分深化和協作安排,個人英雄主義已經不再湊效了。如果每個人必須成為全才,才能產出成果,那麼我認為這是社會的一個退步。
  在這樣的社會大環境下,你可以選擇掌握你的「領域能力」的同時,積累自己的扁平化廣領域圈子。又或者成為底層的「造車人」,無論工具或技術如何變革都能觸類旁通,應付自如。總有一條是你的出路。
  循例總結兩句,不要成為工具的奴隸,要成為工具的主人。世界沒有垃圾,只是我們把資源放在了不適當的地方而已。


這個問題讓我想起了我們高中英語老師大學畢業的時候用Word寫論文,論文前面要加目錄。記得很清楚,她告訴我們,目錄必須用Word的生成目錄功能來完成,不能手工抄頁碼。如果被教授知道了,不僅不會表揚你的「艱苦奮鬥」精神,反而還要扣分。因為論文的格式、每一個標點符號都有非常嚴格的要求,錯一點都是不行的。
所以在我眼裡那些有IDE不用卻非要用記事本去寫代碼的人,跟那些想替換掉文章里的某個詞、放著查找替換不用、卻非要自個兒去一個個找然後再改過來的人沒有區別。能靠機器完成的事情絕不要靠人工。人的精力有限,應該放在讓你的程序儘可能完善上面,而不是在寫代碼的時候鍛煉眼力,在沒有標色的情況下去找這個那個,搞得自己頭暈眼花一身疲憊。有些人覺得這樣很「高手」,其實很愚蠢,甚至可以說是凈幹些沒屁眼兒的事,跟高手毫無關係。


編輯器黨的問題在於沒有需求就要創造需求, 我一生中能遇到幾次隔兩行刪一行的任務啊.

這說明什麼, 他們接不到大活, 沒有產品狗告訴他們"這是最後一次改需求了啊今天給我做完", 閑得蛋疼, 比如我.


推薦閱讀:

有那些由ABCDEF組成的6個字母的單詞?
一名合格黑客所具備的基本技能包括那些?
怎樣讓一個編程新手的演算法思路,邏輯思路變清晰?
老大隻讓用vi寫代碼該怎麼破?

TAG:文本編輯器 | 程序員 | 編程 | Unity遊戲引擎 | 集成開發環境 |