李大師您多久沒寫程式了 ? 一百個你不應該繼續用Dev C++的理由
我常常喜歡說,台灣的軟體業界落後國外十年,這不只是說說而已,很多地方都透露著落後的氣息,像是學校特別是如此,看看很多大學計概在教C/C++語言就知道了,清一色用的是Dev C++,每次看到我都會說
我的天阿! 拜託! 不要再用Dev C++了!!
所以用Dev C++到底錯在哪裡? 下面列出一些為什麼你不該用Dev C++的理由,特別是用來教學
Dev C++是已經死亡多年的專案!
是的,Dev C++這個專案已經陣亡多年,它的上一個穩定版本已經是十年前的產物,即使是beta版也早在六年前停止了開發
所以台灣的軟體產業落後國外十年這真的不是戲言,但或許你會說,停止開發又如何? 簡單好用,過了十年還是一樣簡單好用,但是事情根本不是那樣
學生連開新專案都學不會?
Dev C++最大一個特色就是不用開新專案就能編譯並執行程式,在我所知道的IDE裡這是極少數有這樣特性的環境,至少以現代的眼光來看盡是如此,如果是遠古時代的Turbo C之類的就不用比了,因為這樣特性的使然,一堆學生連開新專案都不會,你或許會說,不會開新專案又怎樣?
不會開新專案問題就大了,不管是debugger、編譯器設定、函式庫連結,這些都得先建出一個專案才能進行設定或使用,不管是Visual C++、Eclipse、Code::Blocks等你所能找到的所有現代IDE都是如此,連開新專案都不會就在寫程式就好像連走路都不會就在跑步一樣的糟糕
多數不清的臭蟲和怪異的行為
因為Dev C++專案已經陣亡多年,所以其中有數不清的臭蟲還有詭異的行為都沒有被修正,通常遇到了就像是鬼打牆一樣,debugger也是問題百出,常常有些同學的程式有問題拿來問我,我在檢查了多次都找不到問題所在,接著拿到其它的IDE下就能正常執行,最後發現其實是Dev C++本身的缺陷所引起的,只能苦笑著說是Dev C++發生鬼打牆,這對初學者有什麼影響?
這影響可大了! 初學者連最基本的東西都不會,他們需要的是一個可以信賴的環境讓他們可以知道什麼是對的什麼是錯的,但是今天這個環境連什麼是對的什麼是錯的都沒辦法確定,這樣有可能可以學好程式設計嗎? 有可能嗎?
無法教會學生使用除錯器
除錯器(debugger)是學習程式到底是如何執行的,以及找到錯誤的好幫手,有一點程度的程式設計師都知道這叫trace,也就是追蹤,但是因為Dev C++本身的問題,其除錯器的功能殘缺就算了,還有一大堆未知的臭蟲在其中,更慘的是搭配先前不用建專案就能執行,就算建了專案還得手動加入除錯的選項才能使用,使得用Dev C++教會學生正確地使用除錯器根本就是天方夜譚。
業界根本沒有人在使用Dev C++
就我所知道的業界根本沒有人在使用Dev C++,如果有的話請讓我知道,我真的很佩服可以用這樣破爛的工具還能在業界生存,肯定是神手中的神手
學生學會這樣的工具就頂多只能勉強寫作業而已,出了社會來到業界連個開新專案都不會,更別說是連結別人寫好的函式庫,甚至是自己寫函式庫給別人連結,我只能寫一個慘字!
老舊的編譯器
現在的C++已經跟10年前的C++有一段很大的落差了,新的特性一直在增加,因為Dev C++搭載的是當時的gcc,因此很多最新的特性都沒有,好吧,雖然我一點都不期待有多少老師或助教能知道那些新技術,像是李伯伯知道什麼是Boost嗎? 什麼又是technical report? 暱名函數? auto? 甚至是最基本的STL?
為什麼用Dev C++?
是的,我的標題騙人,我沒寫滿100個理由,或許有天我會補上,但現在我們先看一下主要我所認為使用Dev C++的理由
- 懶,Dev C++開了檔案就編譯,簡單好用,連開新專案都不用解釋
- Debugger? 那是什麼?
- 阿我也只會用Dev C++
- 阿我的老師教我用Dev C++,所以我也用
- 學長寫的講議用Dev C++,所以我也用
- 隔壁Lab的王小明他家的狗的前主人的二嬸婆也用Dev C++教學,所以我也用
- 我只知道Dev C++
- 阿就免錢的,我也買不起Visual C++
- 寫論文拿來跑跑模擬數據就夠了
- ….
啥咪? 連李家同都用Dev C++喔?
為什麼我會突然寫這篇? 其實平時看到大家在用Dev C++在心裡咒罵這些不長進的傢伙就算了,但今天偶然看見李家同大師的新書的心得
然後看見這本書的介紹裡提到
在此強調我們用的程式語言是C語言,所使用的編譯器是Dev-C++4.9.9.2。讀者如果用錯了編譯器版本可能會出問題。
我的媽呀,於是我忍不住了,姑且不論這本書是不是他弟子捉刀寫的書,但即然都掛上李家同名號了,我想請問一下李大師
您多久沒寫過程式了?
讀者用錯了編譯器版本還可能出問題,不要告訴我這特異的行為又是Dev C++本身引起的問題,難道其中用了什麼樣的奇技淫巧在不同編譯器下還會出現不同的行為? 使用這樣破爛的工具教初學者真的好嗎? 初學者有辦法分得出來是Dev C++本身鬼打牆,還是自己寫錯了呢? 更何況是這本書聲稱的人人有功練?
選擇更好的工具,你可以不用變成李家同
我不知道李伯伯多久沒寫程式了,但是看他的書都用Dev C++就可以斷定,他或他的弟子都沒寫過什麼真正的程式,或許跑跑數據模擬還過得去,除此之外可能就有問題,更別說來教別人寫程式了,巨塔裡所謂的寫程式和外面的寫程式是兩回事
工欲善其事,必先利其器,使用破爛的工具只會造成程式學習上的重大阻礙,如果你的目標是成為李大師,或許你可以用Dev C++,否擇除了Dev C++以外,其實你還有n種選擇,在這裡列出幾樣我所知道的
Code::blocks
Code::Blocks是一款open source的IDE環境,優點是輕巧易用,而且該有的功能一樣都沒少,其本身就是一套強大的編譯工具,甚至cmake等編譯工具也可以產生Code::block的專案用來編譯,但缺點是目前只有英文介面,對於教學上比較不方便
Visual C++ Express
或許是為了搶佔學生市場,微軟佛心來的推出了免費的閹割版的Visual C++,也就是Visual C++ Express,雖然說是閹割版,也只是少掉了MFC之類商用的函式庫,其它該有的功能一樣都沒少,自動完成等等,它的debugger甚至還硬比其它IDE強大,可以回朔到上面的指令,而且它有中文版,拿來教學再好也不過,缺點是中文版的編譯器訊息也是中文的,英文的錯誤訊息已經夠難懂了,翻成中文後你連在Google貼上訊息找到半點有用的資料都找不到
Eclipse
Eclipse本身是用Java寫的IDE,並沒有限定在特定的語言上,因此從Java、C/C++、Python甚至到PHP都有相對應的IDE可以使用,而且該有的功能也一樣都有,比其它IDE棒的地方是它有各種不同的插件可以使用,例如可以整合版本控制系統,不過對於教學用途可能就用不到,而且缺點是很耗系統資源,特別是記憶體,這是用Java寫的程式一貫的毛病,對於老舊的教室電腦可能是很大的負擔,因此不是很推薦用於C/C++教學
wxDevC
不是說Dev C++死了嗎? 確實是死了,但其實沒有死透,後繼有人接手了Dev C++的開發,改名為wxDev C++,最主要是整合了wxWidget的設計功能,個人是沒有用過,但這專案一直都有在維護,應該至少會比目前的Dev C++好上很多,如果真的對Dev C++有執著的話不妨可以試試
最後
再一次,如果你是程式設計課程的助教、老師,拜託,花點時間學款現代一點的IDE吧,不要再用史前時代的破爛工具來殘害你的學生們,台灣軟體產業已經夠落後了,行行好吧