<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>程式設計 遇上 小提琴 &#187; 嘴砲</title>
	<atom:link href="http://blog.ez2learn.com/tag/%e5%98%b4%e7%a0%b2/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.ez2learn.com</link>
	<description>Victor&#039;s個人部落格，關於程式設計與小提琴</description>
	<lastBuildDate>Tue, 07 Feb 2012 03:26:25 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>技術應為服務而生</title>
		<link>http://blog.ez2learn.com/2011/07/25/%e6%8a%80%e8%a1%93%e6%87%89%e7%82%ba%e6%9c%8d%e5%8b%99%e8%80%8c%e7%94%9f/</link>
		<comments>http://blog.ez2learn.com/2011/07/25/%e6%8a%80%e8%a1%93%e6%87%89%e7%82%ba%e6%9c%8d%e5%8b%99%e8%80%8c%e7%94%9f/#comments</comments>
		<pubDate>Mon, 25 Jul 2011 06:01:04 +0000</pubDate>
		<dc:creator>victor</dc:creator>
				<category><![CDATA[中文文章]]></category>
		<category><![CDATA[嘴砲]]></category>
		<category><![CDATA[工具]]></category>
		<category><![CDATA[技術]]></category>

		<guid isPermaLink="false">http://blog.ez2learn.com/?p=1487</guid>
		<description><![CDATA[在前面的一系列文章裡，我發現有些人有些很有趣的想法，有些人覺得使用Windows是很落後的事，或是要用vim、gcc、gdb來寫程式才顯得有技術，我自己也是從小玩技術長大的人，事實上我很能理解這樣的想法，或著說我以前也是這樣的想法，但後來漸漸地想法就改變了 在大學時有位組合語言很強的傳說中的教授，他的組合語言課真的很令人印相深刻，他從來不帶課本，一上台就開始畫圖，然後用很粗俗易懂的例子講解，可以看得出他對低階的這塊領域實力有多深厚，有一次他在上課談到 我以前在做賭博電玩時，有人來跟我推銷繪圖晶片，可是我跟他說，不用，我覺得自己寫一個pixel一個pixel畫才有技術 可是後來發現別人用繪圖晶片來畫圖，一下子就做出來了，我還在刻低階的繪圖功能 後來因為這樣做不過別人就不做了 聽了之後仔細想想我自己也是這樣的想法，以前在寫遊戲時最初是用Direct Draw，後來覺得使用現成的函式庫沒什麼技術，在之後重寫的版本中，就自己寫畫圖的函式庫，一個pixel一個pixel去填，半透明混色也是自己去算，甚至想自己寫3D的繪圖引擎，雖然確實在這過程中學到很多東西，但事實上整個寫遊戲的過程中有好一大半的時間是花在底層的這些基礎繪圖功能上，後來漸漸理解，重覆利用別人做好的輪子是很重要的事，只因為覺得 "那樣才叫有技術" 而去自己做別人已經做好的東西是很不成熟的想法，後來我終於理解到 技術只不過是在工程中完成目標的手段，並不是最終的目的 除了技術以外，事實上在整個軟體的工程當中，還有太多值得注意的事，從你學習那項技術需要花多少心力，技術相關的社群，如果你是商業公司還得考慮到有沒有支援商業服務，還有你用這項技術的話能不能找到人來接替你的位置? 你用了這項技術生產力有因此而提升嗎? 以先前提到的例子，用gcc直接下指令編譯，用gdb下指令除錯，你的生產力有因此而提升嗎? 為了從一般的IDE環境下切換到這樣的環境需要多少的學習成本? 如果你找一個人來接續你的工作，他是否有辦法像你一樣熟練地使用這些工具? 如果你要教新來的人熟悉你的環境，你需要花多少時間? 我相信，大部份提到要使用這些工具的人都沒想過這些問題，這很正常，因為他們熱愛技術，但是實際的工程應用這些都會是很重要的問題。 人適應工具 而在這些提到的一些工具中，有個很極端例子，那就是vi/vim，我自己有用vim，因為打大量程式會比較有效率，或在Linux下改程式都得用到，為什麼說vim是很極端的例子，因為它的設技概念與我們一般常見的IDE是相反的，一般的工具都是設計工具來適應人，然而vim卻是設計工具要人去適應它，因為如果需要打大量的字，手一直保持在鍵盤上是最有效率的，所以它設計讓你手都不用離開鍵盤，就能進行所有的操作 Vim cheat sheet 來自 http://www.viemu.com/a_vi_vim_graphical_cheat_sheet_tutorial.html 當然，缺點是它的學習曲線很陡，在一開始你可能打幾個字都會弄得灰頭土臉，身為技術人員如果你覺得打大量的字是很常有的事，這投資是值得的話，學一學vim確實是不錯，但推薦初學者學vim就不是什麼好事 所以，當你很興奮地覺得這個東西才算有技術，或著是開源萬歲之類的理由，推薦給別人時，想想你自己花多少時間學這東西，別人又能因此得到什麼好處好嗎? 而當你開始設計產品時，你想想如果Apple的Macbook廣告詞是 經過三個月的練習，使用我們的系統工作效率提升了50%!! 你覺得還會有人買這樣的產品嗎? 工具適應人 另一種設計的想法，也是主流的設計思維就是讓工具去適應人，大多數你能在市面上看到的產品都是這樣的設計，我們舉一些例子，Visual Studio最近推出了一種新的UI，叫Debugger Canvas，是將整個debugging trace的過程以泡泡視窗的方式串聯在一起，讓你可以很直覺地理解程式呼叫的過程 有這樣視覺化的輔助，除錯的過程會輕鬆許多，在有現代化工具可用的情況下，除了學習以外的炫技理由堅持使用原始的工具，就只是浪費寶貴的開發時間而已 再舉另一個例子，就是git或mercurial在送commit之前，我個人都會對送出的內容review一次，以免將測試用的程式也送進去，例如像是這樣糟糕的例子 def auth&#40;user_id, password&#41;: # XXX: FOR &#8230; <a href="http://blog.ez2learn.com/2011/07/25/%e6%8a%80%e8%a1%93%e6%87%89%e7%82%ba%e6%9c%8d%e5%8b%99%e8%80%8c%e7%94%9f/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>在前面的一系列文章裡，我發現有些人有些很有趣的想法，有些人覺得使用Windows是很落後的事，或是要用vim、gcc、gdb來寫程式才顯得有技術，我自己也是從小玩技術長大的人，事實上我很能理解這樣的想法，或著說我以前也是這樣的想法，但後來漸漸地想法就改變了</p>
<p>在大學時有位組合語言很強的傳說中的教授，他的組合語言課真的很令人印相深刻，他從來不帶課本，一上台就開始畫圖，然後用很粗俗易懂的例子講解，可以看得出他對低階的這塊領域實力有多深厚，有一次他在上課談到</p>
<blockquote><p>我以前在做賭博電玩時，有人來跟我推銷繪圖晶片，可是我跟他說，不用，我覺得自己寫一個pixel一個pixel畫才有技術</p>
<p>可是後來發現別人用繪圖晶片來畫圖，一下子就做出來了，我還在刻低階的繪圖功能</p>
<p>後來因為這樣做不過別人就不做了</p></blockquote>
<p>聽了之後仔細想想我自己也是這樣的想法，以前在寫遊戲時最初是用Direct Draw，後來覺得使用現成的函式庫沒什麼技術，在之後重寫的版本中，就自己寫畫圖的函式庫，一個pixel一個pixel去填，半透明混色也是自己去算，甚至想自己寫3D的繪圖引擎，雖然確實在這過程中學到很多東西，但事實上整個寫遊戲的過程中有好一大半的時間是花在底層的這些基礎繪圖功能上，後來漸漸理解，重覆利用別人做好的輪子是很重要的事，只因為覺得 "<strong>那樣才叫有技術</strong>" 而去自己做別人已經做好的東西是很不成熟的想法，後來我終於理解到</p>
<blockquote><p>技術只不過是在工程中完成目標的手段，並不是最終的目的</p></blockquote>
<p>除了技術以外，事實上在整個軟體的工程當中，還有太多值得注意的事，從你學習那項技術需要花多少心力，技術相關的社群，如果你是商業公司還得考慮到有沒有支援商業服務，還有你用這項技術的話能不能找到人來接替你的位置? 你用了這項技術生產力有因此而提升嗎?</p>
<p>以先前提到的例子，用gcc直接下指令編譯，用gdb下指令除錯，你的生產力有因此而提升嗎? 為了從一般的IDE環境下切換到這樣的環境需要多少的學習成本? 如果你找一個人來接續你的工作，他是否有辦法像你一樣熟練地使用這些工具? 如果你要教新來的人熟悉你的環境，你需要花多少時間? 我相信，大部份提到要使用這些工具的人都沒想過這些問題，這很正常，因為他們熱愛技術，但是實際的工程應用這些都會是很重要的問題。</p>
<h2>人適應工具</h2>
<p>而在這些提到的一些工具中，有個很極端例子，那就是vi/vim，我自己有用vim，因為打大量程式會比較有效率，或在Linux下改程式都得用到，為什麼說vim是很極端的例子，因為它的設技概念與我們一般常見的IDE是相反的，一般的工具都是設計工具來適應人，然而vim卻是設計工具要人去適應它，因為如果需要打大量的字，手一直保持在鍵盤上是最有效率的，所以它設計讓你手都不用離開鍵盤，就能進行所有的操作</p>
<p><a href="http://blog.ez2learn.com/wp-content/uploads/2011/07/vi-vim-cheat-sheet.gif"><img class="alignnone size-medium wp-image-1490" title="vi-vim-cheat-sheet" src="http://blog.ez2learn.com/wp-content/uploads/2011/07/vi-vim-cheat-sheet-300x212.gif" alt="" width="300" height="212" /></a></p>
<p>Vim cheat sheet 來自 <a href="http://www.viemu.com/a_vi_vim_graphical_cheat_sheet_tutorial.html">http://www.viemu.com/a_vi_vim_graphical_cheat_sheet_tutorial.html</a></p>
<p>當然，缺點是它的學習曲線很陡，在一開始你可能打幾個字都會弄得灰頭土臉，身為技術人員如果你覺得打大量的字是很常有的事，這投資是值得的話，學一學vim確實是不錯，但推薦初學者學vim就不是什麼好事</p>
<p>所以，當你很興奮地覺得這個東西才算有技術，或著是開源萬歲之類的理由，推薦給別人時，想想你自己花多少時間學這東西，別人又能因此得到什麼好處好嗎? 而當你開始設計產品時，你想想如果Apple的Macbook廣告詞是</p>
<blockquote><p>經過三個月的練習，使用我們的系統工作效率提升了50%!!</p></blockquote>
<p>你覺得還會有人買這樣的產品嗎?</p>
<h2>工具適應人</h2>
<p>另一種設計的想法，也是主流的設計思維就是讓工具去適應人，大多數你能在市面上看到的產品都是這樣的設計，我們舉一些例子，Visual Studio最近推出了一種新的UI，叫<a href="http://blogs.msdn.com/b/somasegar/archive/2011/06/13/debugger-canvas-on-devlabs.aspx">Debugger Canvas</a>，是將整個debugging trace的過程以泡泡視窗的方式串聯在一起，讓你可以很直覺地理解程式呼叫的過程</p>
<p><a href="http://blog.ez2learn.com/wp-content/uploads/2011/07/DebuggerCanvasSmall.png"><img class="alignnone size-medium wp-image-1491" title="DebuggerCanvasSmall" src="http://blog.ez2learn.com/wp-content/uploads/2011/07/DebuggerCanvasSmall-300x180.png" alt="" width="300" height="180" /></a></p>
<iframe width="640" height="385" src="http://www.youtube.com/embed/3p9XUwIlhJg" frameborder="0" type="text/html"></iframe><div style="text-align:right;"><a style="color:#aaa;font-size:9px" href="http://www.clickonf5.org/" title="IFRAME Embed for Youtube Free WordPress Plugin" target="_blank">IFRAME Embed for Youtube</a></div>
<p>有這樣視覺化的輔助，除錯的過程會輕鬆許多，在有現代化工具可用的情況下，除了學習以外的炫技理由堅持使用原始的工具，就只是浪費寶貴的開發時間而已</p>
<p>再舉另一個例子，就是git或mercurial在送commit之前，我個人都會對送出的內容review一次，以免將測試用的程式也送進去，例如像是這樣糟糕的例子</p>

<div class="wp_syntax"><div class="code"><pre class="python" style="font-family:monospace;"><span style="color: #ff7700;font-weight:bold;">def</span> auth<span style="color: black;">&#40;</span>user_id, password<span style="color: black;">&#41;</span>:
    <span style="color: #808080; font-style: italic;"># XXX: FOR TESTING ONLY!!! DO NOT COMMIT</span>
    <span style="color: #ff7700;font-weight:bold;">return</span> <span style="color: #008000;">True</span>
    <span style="color: #dc143c;">user</span> = session.<span style="color: black;">query</span><span style="color: black;">&#40;</span>User<span style="color: black;">&#41;</span>.<span style="color: black;">get</span><span style="color: black;">&#40;</span>user_id<span style="color: black;">&#41;</span>
    <span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: #dc143c;">user</span> <span style="color: #ff7700;font-weight:bold;">is</span> <span style="color: #008000;">None</span>:
        <span style="color: #ff7700;font-weight:bold;">return</span> <span style="color: #008000;">False</span>
    <span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: #dc143c;">user</span>.<span style="color: black;">password</span> <span style="color: #66cc66;">!</span>= password:
        <span style="color: #ff7700;font-weight:bold;">return</span> <span style="color: #008000;">False</span>
    <span style="color: #ff7700;font-weight:bold;">return</span> <span style="color: #008000;">True</span></pre></div></div>

<p>原本的授權檢查，為了測試直接回傳True，不小心把這樣的送出去就不好玩了，使用console看列出git或mercurial的差異通常沒有標顏色都很難看清楚</p>
<p><a href="http://blog.ez2learn.com/wp-content/uploads/2011/07/git_demo1.png"><img class="alignnone size-full wp-image-1495" title="git_demo" src="http://blog.ez2learn.com/wp-content/uploads/2011/07/git_demo1.png" alt="" width="658" height="469" /></a></p>
<p>&nbsp;</p>
<p>然而有了Gitk的GUI標上顏色，到底改了哪幾行就相當顯眼<a href="http://blog.ez2learn.com/wp-content/uploads/2011/07/gitk_demo.png"><img class="alignnone size-full wp-image-1496" title="gitk_demo" src="http://blog.ez2learn.com/wp-content/uploads/2011/07/gitk_demo.png" alt="" width="663" height="467" /></a></p>
<p>這還只是簡易的例子，真正程式碼在修改不會像這樣只有一行兩行，不使用適當的工具只會弄得眼花潦亂，造成錯誤就得不嘗失</p>
<h2>工具應為服務而生</h2>
<p>技術與工具應為服務人而生，不是最終的目的，不懂得從使用者的角度出發思考，不懂得從軟體工程的角度出發思考，我想這是很多技術人常見的問題，如果能用不同的角度，放下對於單純技術的追求與炫耀，才能做出更能幫助人們、受人們歡迎的工具。</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.ez2learn.com/2011/07/25/%e6%8a%80%e8%a1%93%e6%87%89%e7%82%ba%e6%9c%8d%e5%8b%99%e8%80%8c%e7%94%9f/feed/</wfw:commentRss>
		<slash:comments>16</slash:comments>
		</item>
		<item>
		<title>軟體產業的失敗藉口 &#8211; 台灣的市場太小了?</title>
		<link>http://blog.ez2learn.com/2011/05/22/excuse-for-failure-small-market/</link>
		<comments>http://blog.ez2learn.com/2011/05/22/excuse-for-failure-small-market/#comments</comments>
		<pubDate>Sun, 22 May 2011 07:59:27 +0000</pubDate>
		<dc:creator>victor</dc:creator>
				<category><![CDATA[中文文章]]></category>
		<category><![CDATA[嘴砲]]></category>
		<category><![CDATA[台灣]]></category>
		<category><![CDATA[市場]]></category>
		<category><![CDATA[國際]]></category>
		<category><![CDATA[軟體]]></category>
		<category><![CDATA[軟體產業]]></category>

		<guid isPermaLink="false">http://blog.ez2learn.com/?p=1264</guid>
		<description><![CDATA[最近在網路上越來越多軟體產業相關的部落格，也有很多不少相關的討論，其中我發現很多人將台灣軟體產業發展不起來歸究到台灣的市場太小了，我個人覺得這是最糟糕的藉口，因為事實上網路並沒有國界，只要有能力，一台電腦，一條網路線，一個人一樣可以做全球的生意，把自己能力不足怪到沒有市場是很奇怪的事，在這世界上有無數軟體成功的案例，都不是來自美國等軟體大國，我想在這裡舉出這些我所知道的一些例子，來證明確實在地的市場並不能做為軟體產業發展失敗的理由 EVE online &#8211; 冰島 冰島這個國家，人口數三十幾萬人，主要的產業活動是漁業，除此之外軟體產業也是這個國家的產業之一，是世界主要軟體的輸出國之一，有趣的是，在不久之前冰島還是被選為所謂最幸福的國家，吸引大量外資到當地投資，但因為炒作過度，導致整個國家銀行破產，幸福國度的神話也從此破滅，這個國家軟體產業最為人知的代表作就是一套以科幻星探險的線上遊戲，玩家可以駕駛太空船，在太空進行買賣、挖礦，還有海盜的冒險，我曾經有玩過一陣子，這遊戲有個公司的機制，玩家可以組成公司，一起行動來達到最佳的利益，例如有些公司以挖礦為業務，為了防止被海賊攻擊，就得有護衛艦負責保護，也有些公司是專門四處獵殺玩家的，我就有因為貪圖在高危險區的高任務獎勵，被守在星門外的海賊集團打暴過，印相相當深刻，值得一提的是這套遊戲的核心語言是Python 來自官網的遊戲畫面截圖 想想看一個人口只有三十幾萬的非英語系國家，國家還破產了，居然可以推出一套受全球玩家歡迎的線上遊戲，台灣有兩千餘萬人口，中文使用的人口是世界上最多的，居然說台灣沒有市場，這真的是一件很丟臉的事，請不要再提台灣市場很小做為失敗的理由 Minecraft - 瑞典 Minecraft是一套以挖礦和建造建築為主要活動的遊戲，很難以常見的遊戲類型分類，可以說是很特別的一款遊戲，這款不起眼的遊戲已經在全球賣出了兩百多萬套 作者是Notch，他來自瑞典， 瑞典的人口有九百多萬人，使用的主要語言是瑞典語，不用說市場當然是比台灣小，除此之外他在遊戲前期的開發都完全只靠他一人，在遊戲賣到一定量時，他就拿資金成立的公司，這又是另一個和在地市場無關的成功案例 Angry bird &#8211; 芬蘭 紅遍全球的手機遊戲，這家公司是來自芬蘭，國家人口數五百多萬，主要語言是瑞典語或芬蘭語，我想這遊戲不用太多介紹大家都很清楚了，同樣是來自比台灣人口少的國家，使用的也是人口數較少的語言 ICQ &#8211; 以色列 ICQ是一款在十幾年前相當流行的即時通軟體，在MSN Messenger之前ICQ可以說是獨佔了即時通的市場，ICQ是來自以色列的軟體，以色列的人口數七百多萬人，這國家的四週被敵國環繞，即使今天ICQ已經沒落了，但以色列依然還是全球的主要軟體輸出國之一 還有很多 這類非英語系小國家在軟體成功的例子其實還有很多很多，平時看到我沒有特別記下來，而且這類的例子有越來越多的情況，常常我會想，台灣的人口兩千多萬人口，這樣算市場小，所以是軟體產業發展不起來的原因? 我覺得反而是相反的，台灣的市場要大不大，要小不小，除了國際市場還有中文市場，上面所列出來的這些例子，這些國家都沒什麼在地市場，連語言都很小眾，如果他們沒有能力一口氣打進國際市場，沒什麼生存空間，反觀台灣這個不大不小的市場，吃不飽餓不死，接接企業專案、做做政府專案，都還可以活下去，因為這樣的環境，讓很多人以為市場就只有台灣這麼小的地方，忘了連上網路沒有所謂的國界這件事，所以請別再說台灣市場太小了，只能怪你自己能力太爛沒辦法在國際市場競爭 靠自己最實在 台灣現在很多人都還在用許多十年前的過時方法/技術在開發軟體，因為吃中文市場就能活下去，國外也不太可能來搶中文市場，倒頭來還是只能怪自己不精進技術、語言能力等等的能力，真的要成功，還是得靠開發者們加強自己的能力，我一直都這樣認為，台灣要有軟體產業，必然要先有一些開發者當種子，先靠自身的能力闖出一遍天地，才能帶出更多優秀的開發者，確立經營的方式等等，而這些後起之秀才能出去帶出更多優秀的人才，只是坐著抱怨起不了太大的作用]]></description>
			<content:encoded><![CDATA[<p>最近在網路上越來越多軟體產業相關的部落格，也有很多不少相關的討論，其中我發現很多人將台灣軟體產業發展不起來歸究到台灣的市場太小了，我個人覺得這是最糟糕的藉口，因為事實上網路並沒有國界，只要有能力，一台電腦，一條網路線，一個人一樣可以做全球的生意，把自己能力不足怪到沒有市場是很奇怪的事，在這世界上有無數軟體成功的案例，都不是來自美國等軟體大國，我想在這裡舉出這些我所知道的一些例子，來證明確實在地的市場並不能做為軟體產業發展失敗的理由</p>
<h2>EVE online &#8211; 冰島</h2>
<p><a href="http://zh.wikipedia.org/wiki/%E5%86%B0%E5%B3%B6">冰島</a>這個國家，人口數三十幾萬人，主要的產業活動是漁業，除此之外軟體產業也是這個國家的產業之一，是世界主要軟體的輸出國之一，有趣的是，在不久之前冰島還是被選為所謂最幸福的國家，吸引大量外資到當地投資，但因為炒作過度，導致整個國家銀行破產，幸福國度的神話也從此破滅，這個國家軟體產業最為人知的代表作就是一套以科幻星探險的線上遊戲，玩家可以駕駛太空船，在太空進行買賣、挖礦，還有海盜的冒險，我曾經有玩過一陣子，這遊戲有個公司的機制，玩家可以組成公司，一起行動來達到最佳的利益，例如有些公司以挖礦為業務，為了防止被海賊攻擊，就得有護衛艦負責保護，也有些公司是專門四處獵殺玩家的，我就有因為貪圖在高危險區的高任務獎勵，被守在星門外的海賊集團打暴過，印相相當深刻，值得一提的是這套遊戲的核心語言是Python</p>
<p><a href="http://blog.ez2learn.com/wp-content/uploads/2011/05/01.jpg"><img class="alignnone size-full wp-image-1268" title="EVE - online screen shot" src="http://blog.ez2learn.com/wp-content/uploads/2011/05/01.jpg" alt="EVE - online screen shot" width="650" height="450" /></a></p>
<p><a href="http://www.eveonline.com/screenshots/collection.asp?collection=2010&amp;n=8">來自官網的遊戲畫面截圖</a></p>
<p>想想看一個人口只有三十幾萬的非英語系國家，國家還破產了，居然可以推出一套受全球玩家歡迎的線上遊戲，台灣有兩千餘萬人口，中文使用的人口是世界上最多的，居然說台灣沒有市場，這真的是一件很丟臉的事，請不要再提台灣市場很小做為失敗的理由</p>
<h2>Minecraft - 瑞典</h2>
<p><a href="http://www.minecraft.net/">Minecraft</a>是一套以挖礦和建造建築為主要活動的遊戲，很難以常見的遊戲類型分類，可以說是很特別的一款遊戲，這款不起眼的遊戲已經在全球賣出了兩百多萬套</p>
<p><a href="http://blog.ez2learn.com/wp-content/uploads/2011/05/2011-04-14_19.52.21.png"><img class="alignnone size-medium wp-image-1269" title="Minecraft - screenshot" src="http://blog.ez2learn.com/wp-content/uploads/2011/05/2011-04-14_19.52.21-300x176.png" alt="Minecraft - screenshot" width="300" height="176" /></a></p>
<p><a href="http://blog.ez2learn.com/wp-content/uploads/2011/05/2011-05-14_19.39.33.png"><img class="alignnone size-medium wp-image-1270" title="Minecraft - screenshot" src="http://blog.ez2learn.com/wp-content/uploads/2011/05/2011-05-14_19.39.33-300x176.png" alt="Minecraft - screenshot" width="300" height="176" /></a></p>
<p>作者是<a href="http://notch.tumblr.com/">Notch</a>，他來自瑞典， <a href="http://zh.wikipedia.org/wiki/%E7%91%9E%E5%85%B8">瑞典</a>的人口有九百多萬人，使用的主要語言是瑞典語，不用說市場當然是比台灣小，除此之外他在遊戲前期的開發都完全只靠他一人，在遊戲賣到一定量時，他就拿資金成立的公司，這又是另一個和在地市場無關的成功案例</p>
<h2>Angry bird &#8211; 芬蘭</h2>
<p>紅遍全球的手機遊戲，這家公司是來自芬蘭，國家人口數五百多萬，主要語言是瑞典語或芬蘭語，我想這遊戲不用太多介紹大家都很清楚了，同樣是來自比台灣人口少的國家，使用的也是人口數較少的語言</p>
<h2>ICQ &#8211; 以色列</h2>
<p>ICQ是一款在十幾年前相當流行的即時通軟體，在MSN Messenger之前ICQ可以說是獨佔了即時通的市場，ICQ是來自以色列的軟體，以色列的人口數七百多萬人，這國家的四週被敵國環繞，即使今天ICQ已經沒落了，但以色列依然還是全球的主要軟體輸出國之一</p>
<h2>還有很多</h2>
<p>這類非英語系小國家在軟體成功的例子其實還有很多很多，平時看到我沒有特別記下來，而且這類的例子有越來越多的情況，常常我會想，台灣的人口兩千多萬人口，這樣算市場小，所以是軟體產業發展不起來的原因? 我覺得反而是相反的，台灣的市場要大不大，要小不小，除了國際市場還有中文市場，上面所列出來的這些例子，這些國家都沒什麼在地市場，連語言都很小眾，如果他們沒有能力一口氣打進國際市場，沒什麼生存空間，反觀台灣這個不大不小的市場，吃不飽餓不死，接接企業專案、做做政府專案，都還可以活下去，因為這樣的環境，讓很多人以為市場就只有台灣這麼小的地方，忘了連上網路沒有所謂的國界這件事，所以請別再說台灣市場太小了，只能怪你自己能力太爛沒辦法在國際市場競爭</p>
<h2>靠自己最實在</h2>
<p>台灣現在很多人都還在用許多十年前的過時方法/技術在開發軟體，因為吃中文市場就能活下去，國外也不太可能來搶中文市場，倒頭來還是只能怪自己不精進技術、語言能力等等的能力，真的要成功，還是得靠開發者們加強自己的能力，我一直都這樣認為，台灣要有軟體產業，必然要先有一些開發者當種子，先靠自身的能力闖出一遍天地，才能帶出更多優秀的開發者，確立經營的方式等等，而這些後起之秀才能出去帶出更多優秀的人才，只是坐著抱怨起不了太大的作用</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.ez2learn.com/2011/05/22/excuse-for-failure-small-market/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>嘴砲談雲端 &#8211; 介紹用雲端除錯網頁的雲端技術: Browserling</title>
		<link>http://blog.ez2learn.com/2011/01/23/cloud-service-browserling/</link>
		<comments>http://blog.ez2learn.com/2011/01/23/cloud-service-browserling/#comments</comments>
		<pubDate>Sat, 22 Jan 2011 16:57:43 +0000</pubDate>
		<dc:creator>victor</dc:creator>
				<category><![CDATA[中文文章]]></category>
		<category><![CDATA[作品]]></category>
		<category><![CDATA[嘴砲]]></category>
		<category><![CDATA[分享]]></category>
		<category><![CDATA[嘴砲加嘴砲]]></category>
		<category><![CDATA[超嘴砲]]></category>
		<category><![CDATA[雲端]]></category>

		<guid isPermaLink="false">http://blog.ez2learn.com/?p=1187</guid>
		<description><![CDATA[有試著想開發支援所有主流瀏覽器的朋有們肯定都會遇過像我在 How hateful it is to develop a web application which runs correctly with different browsers? 所提到的情況，為了確定網頁在各種版本的瀏覽器，特別是那該死的IE系列都能正常顯示和執行，這樣的畫面出現是很平常的事 在這張圖中我分别用了兩個VirtualBox給IE7和IE6，如果連IE5要加進來右是另一個，只是IE5太古老雖然還是可能有人在用，但我已經懶得測了。 當然，安裝所有的瀏覽器是一個解決方法，包括使用VirtualBox之類的虛擬化技術來安裝萬惡的IE系列，但畢竟還是很麻煩，來自拉脫維亞 (老實說我也不知道這是什麼樣的地方 XD) 的Peteris Krumins，有趣的是Peteris他唸的是物理系，他和來自美國的James Halliday創作了一個基於雲端的解決方案，叫Browserling，裡面用的技術是之前我在 Open the browser, and here comes the computing power 所提到的，他們共同開發的技術，這個技術最有趣的地方是可以透過網頁來遠端操作電腦，雖然這不是什麼很創新的技術，但結合虛擬化的技術，將運算能力變成像流水一樣，網頁一開服務即到的型式，這就是它的潛力。 扯到雲端 在台灣一個很有趣的現像就是，當某種新東西很新奇、在未來會有不錯的應用，總會有一堆門外漢跟著朗朗上口地四處吹噓這些名詞，說穿了不過就只是趕流行，前陣子流行的是奈米，什麼都要冠上奈米，這樣做價格似乎就可以翻幾成，也有Web2.0之類的，甚至台灣還有人搶著推出Web3.0，說是要把網頁變成P2P的型式，當然是以失敗收場，而現在只不過是把流行的口號改成雲端而已，什麼都要冠上雲端，打開電視偶爾也會看見一些名嘴吹噓著雲端巴啦巴啦&#8230;，其實當發現一堆門外漢也在跟著人云亦云時就說明了這已經是在炒作了，哪天在路邊看見"雲端雞排"也請不要意外 XD 何謂雲端 每個人對雲端都有一套解釋，對我來說，雲端不外乎就只是將計算資源、資料儲存等等能力變成像自來水那樣，接上名為網際網路的大水管，打開電腦即可存取，這樣的概念其實早就有了，更早之前甚至有人提出更激進的想法，要將使用者這端完全只剩下客戶端的能力就夠了，剩的東西都由雲端的能力提供，但是也是沒有成功，或許是環境不夠成熟，而我個人認為使用者端的能力也是需要的，網路頻寬再怎麼進展，要即時所有東西都由遠端提供還是有困難的 台灣的現況 &#8230; <a href="http://blog.ez2learn.com/2011/01/23/cloud-service-browserling/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>有試著想開發支援所有主流瀏覽器的朋有們肯定都會遇過像我在 <a href="http://blog.ez2learn.com/2010/07/11/how-hateful-it-is-to-develop-a-web-application-which-runs-correctly-with-different-browsers/">How hateful it is to develop a web application which runs correctly with different browsers?</a> 所提到的情況，為了確定網頁在各種版本的瀏覽器，特別是那該死的IE系列都能正常顯示和執行，這樣的畫面出現是很平常的事</p>
<p><a href="http://blog.ez2learn.com/wp-content/uploads/2010/07/browsers.png"><img class="alignnone size-medium wp-image-1052" title="browsers" src="http://blog.ez2learn.com/wp-content/uploads/2010/07/browsers-300x187.png" alt="" width="300" height="187" /></a></p>
<p>在這張圖中我分别用了兩個VirtualBox給IE7和IE6，如果連IE5要加進來右是另一個，只是IE5太古老雖然還是可能有人在用，但我已經懶得測了。</p>
<p>當然，安裝所有的瀏覽器是一個解決方法，包括使用VirtualBox之類的虛擬化技術來安裝萬惡的IE系列，但畢竟還是很麻煩，來自拉脫維亞 (老實說我也不知道這是什麼樣的地方 XD) 的<a href="http://catonmat.net/">Peteris Krumins</a>，有趣的是Peteris他唸的是物理系，他和來自美國的<a href="http://substack.net/">James Halliday</a>創作了一個基於雲端的解決方案，叫<a href="http://browserling.com">Browserling</a>，裡面用的技術是之前我在 <a href="http://blog.ez2learn.com/2010/07/21/open-the-browser-and-here-comes-the-computing-power/">Open the browser, and here comes the computing power</a> 所提到的，他們共同開發的技術，這個技術最有趣的地方是可以透過網頁來遠端操作電腦，雖然這不是什麼很創新的技術，但結合虛擬化的技術，將運算能力變成像流水一樣，網頁一開服務即到的型式，這就是它的潛力。</p>
<h2>扯到雲端</h2>
<p>在台灣一個很有趣的現像就是，當某種新東西很新奇、在未來會有不錯的應用，總會有一堆門外漢跟著朗朗上口地四處吹噓這些名詞，說穿了不過就只是趕流行，前陣子流行的是奈米，什麼都要冠上奈米，這樣做價格似乎就可以翻幾成，也有Web2.0之類的，甚至台灣還有人搶著推出<a href="http://mr6.cc/?p=646">Web3.0</a>，說是要把網頁變成P2P的型式，當然是以失敗收場，而現在只不過是把流行的口號改成雲端而已，什麼都要冠上雲端，打開電視偶爾也會看見一些名嘴吹噓著雲端巴啦巴啦&#8230;，其實當發現一堆門外漢也在跟著人云亦云時就說明了這已經是在炒作了，哪天在路邊看見"雲端雞排"也請不要意外 XD</p>
<h2>何謂雲端</h2>
<p>每個人對雲端都有一套解釋，對我來說，雲端不外乎就只是將計算資源、資料儲存等等能力變成像自來水那樣，接上名為網際網路的大水管，打開電腦即可存取，這樣的概念其實早就有了，更早之前甚至有人提出更激進的想法，要將使用者這端完全只剩下客戶端的能力就夠了，剩的東西都由雲端的能力提供，但是也是沒有成功，或許是環境不夠成熟，而我個人認為使用者端的能力也是需要的，網路頻寬再怎麼進展，要即時所有東西都由遠端提供還是有困難的</p>
<h2>台灣的現況</h2>
<p>就台灣的環境來看，台灣軟體產業規模不足，人才都被硬體產業吸走，教育也以偏理論導向，實務部份相對很弱，網路頻寬也因為被隴斷更是奇貴無比，又位於地震帶上，不利於建資料中心，我只能說一個<strong><span style="font-size: large;">慘</span></strong>字</p>
<p>但是就高階應用的層面還是有機會，純軟體服務產業最有趣的地方就是，它不需要什麼12吋晶元廠、上千萬上億元的設備，需要的只是人才、電腦、一條網路線，這樣就可以做到任何事情，電腦和網路在現在已經是隨手可得，剩下的就是人才，人才才是這樣產業裡最重要的資產，這說明了競爭是公平的，只要有能力就算只是幾個人躲在車庫裡一樣能在網路上打下一片江山</p>
<p>或許你會問，那像資料中心那類基礎建設怎麼辦? 其實這個問題本身就被雲端給解決了，因為雲端的概念就如我所說的，是透過網路來提供服務，你不需要自己建一個資料中心才能提供服務，你可以使用別人提供的基礎建設在上面提供更高價值的服務，一個好的例子像是<a href="http://www.dropbox.com/">Dropbox</a>，它提供了雲端的儲存服務，只要安裝它的軟體，把檔案拖進料夾，剩的它會自動幫你傳到資料中心並且自動同步，它本身是透過<a href="http://aws.amazon.com/s3/">Amazon S3</a>的儲存服務來存放檔案，談到Dropbox，很有趣的是ASUS的電腦也有贈送類似的加值服務，叫<a href="https://www.asuswebstorage.com">ASUS WebStorage</a>。</p>
<p>近來，像這Amazon S3、EC2等等的基礎建設已經日漸成熟，所以現在要提供網路服務已經不像以前所有東西都得自己建置，自己買硬體、自己建資料中心，這些東西都將由雲端來提供，成本已經降很低，後繼者要做的就是要想出更高價值的高階整合應用服務並且用現有的這些基礎建設實作出來，可惜的這部份是台灣比較缺乏的能力</p>
<h2>Browserling</h2>
<p>久沒有寫文章就會想打一下嘴砲，扯遠了，這一是個標準的高階雲端運用 Browserling (<a href="http://browserling.com/">http://browserling.com</a>)，它所要解決的問題就是上面所提到的，開發網頁時需要安裝各種瀏覽器來測試網頁，而這些都改由他們的雲端來提供，這是他們的介紹影片</p>
<p><iframe title="YouTube video player" class="youtube-player" type="text/html" width="640" height="390" src="http://www.youtube.com/embed/nsCWiBMcJlk" frameborder="0" allowFullScreen></iframe></p>
<p>他們提供了有限時間的免費使用，有興趣可以玩看看</p>
<p>雖然像這樣的服務其實還不太成熟，需求其實也有限，反應速度也有點差強人意，但是算是很有趣的應用，我個人覺得台灣的產業如果只是爭幾毛錢的硬體毛利，個人覺得不如多花一點心力在於這類高價值的應用服務，硬體有的摩爾定律，與其說是定律，不如說是詛咒，因為有了這條定律似乎不照著做就表示了硬體的極限到了，硬體再怎麼發展也會有物理上的限制，從近來的CPU設計就可以發現，都是朝多核心發展，連手機都有了雙核心的CPU，但其實多核心不代表效能就會立即提升，如果沒有軟體的配合是很難有顯著的改善，再者，有再強的運算能力硬體沒有軟體的功能事實上也沒有什麼用處</p>
<p>就像我所說的，這類的應用並不需要什麼上百億的投資，需要的就是創意 + 能力 + 執行力，像Browserling這樣的服務就只是兩個人合作之下的產品，台灣的開發者們可以多試著嘗試創造這類的服務，會失敗是必然的，但我想有了失敗的經驗，朝著這個方向走多少還是有機會成功</p>
<h2>站在使用者的角度想</h2>
<p>台灣常見的程式設計師都有個壞毛病，就是只顧著自己想怎樣使用軟體，想著要有強大的功能，但從來都沒有想過使用者到底會怎樣使用，台灣到處隨處可見糟糕到極點的可用性設計，看網頁的表單就知道了，一堆網頁不知道哪裡學來的風氣，總喜歡把一堆五四三的欄位加到會員註冊的表單裡，什麼已婚未婚、年收入多少，從來都沒想過使用者到底是怎樣的感覺，一個實際本身的體驗就是，最近一直收到中華電信的廣告簡訊騷擾，終於受不了想要停掉廣告簡訊，網路上找到的方法寫說要先註冊emome的會員才能取消，你一定想不到裡面有一個必填欄位是什麼，答案是</p>
<p><span style="font-size: x-large;"><strong>血型</strong></span></p>
<p>我的媽呀&#8230; 中華電信你們非知道我的血型不可是要做什麼!? 難道我哪如果天貧血暈倒你們要提供緊急手機定位輸血服務嗎? 這就是台灣的現況，台灣或許有技術可以做到某個功能，但就使用者經驗這方面真的還是很糟糕，常常會聽到某些人說 XXX也可以做到那個，標準的想法就是只在乎可不可以做到，從來都沒想過做到這些所需要付出什麼</p>
<h2>另一個沒有站在使用者角度思考的失敗實例</h2>
<p>還有一個很好的例子就是之前提到跟人家趕流行的Web3.0，可以參考這篇 <a href="http://wp.tenz.net/archives/231">吳昇老師的Web 3.0為何很特別</a> 或 <a href="http://wp.tenz.net/archives/231">吳昇老師的 web3.0</a>，雖然它的概念挺有趣的，大意是說Web2.0大多東西傳到那些網站像是Youtube，結果使用者本身一無所有，內容都被服務提供者綁架，透過他們建置的系統，使用者可以將那些內容放在本地端以P2P的方式分享出去，剛出來時我就有說這東西100%不會成功，為什麼不會成功? 很簡單的從使用者的角度來想就知道了，身為使用者我會很在意這些內容是否在本機端嗎? 完全沒有，使用者最在意的只是好不好用，能不能達到我的需要，說使用者的資料被綁架只是被迫害妄想式的想法而已，將原本的系統換成P2P內容留在本機，使用者到底得到了什麼? 什麼都沒有，這就是標準的只用自己的想法思考事情，而不站在使用者角度想的後果，當時還在網路上跟人爭論過，還有人覺得要愛用國貨之類的，說真的，這樣做只會讓爛東西也能生存下去，就好像為了支持國片去看朱延平導的爛片一樣，只會讓他們更爛而已</p>
<h2>Linux or Windows?</h2>
<p>還有另一種常見的情況是覺得Linux比Windows好之類的想法，我得坦白說我自己也曾有類似的想法，我使用Windows也用Linux跑server，但站在使用者的角度想就會發現，要使用者學那些東西是不可能的事情，說穿了兩種是導向不同的東西，就vim來說它是人去學機器，很難學，但一但學會用起來會很有效率，而另一種可能是Word，這就是以機器來貼近人的例子，撇開要不要錢的問題，一般的使用者肯定是選Word而不是vim + latex之類的鬼東西來寫文件。</p>
<h2>站在使用者的角度多想一分鐘，使用者會更喜歡你一些</h2>
<p>對於使用者經驗的認知，我得說大部份技術出身的人很多都沒這樣的觀念，我自己以前也是這樣，身為開發者，站在使用者的角度多想一分鐘，使用者會更喜歡你或你的軟體一些</p>
<h2>總結</h2>
<p>其實本來一開始只是想簡單地解紹Browserling，不小心就嘴砲了一堆，以上只是個人的小小想法，參考看看就好，不過我真的挺希望可以看見台灣軟體產業有所發展，最近在發展自己網站的過程中學到不少東西，有空的話可能會嘴砲幾篇來分享一下我的心得</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.ez2learn.com/2011/01/23/cloud-service-browserling/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>如何寫出有用的程式?</title>
		<link>http://blog.ez2learn.com/2009/06/27/how-to-write-useful-program/</link>
		<comments>http://blog.ez2learn.com/2009/06/27/how-to-write-useful-program/#comments</comments>
		<pubDate>Sat, 27 Jun 2009 12:03:38 +0000</pubDate>
		<dc:creator>victor</dc:creator>
				<category><![CDATA[中文文章]]></category>
		<category><![CDATA[分享]]></category>
		<category><![CDATA[心得文]]></category>
		<category><![CDATA[嘴砲]]></category>
		<category><![CDATA[資工]]></category>
		<category><![CDATA[沒有八卦]]></category>

		<guid isPermaLink="false">http://blog.ez2learn.com/?p=598</guid>
		<description><![CDATA[有網友在這篇 別讓危險成為預設的行為，讓危險的行為比安全的行為更麻煩 回應裡提到 WiyD-Luck 請問大大寫程式寫多久了小弟今年大三要升大四了在無意間近來大大的blog收穫良多(請受小的一拜會寫程式.跟會寫一個能用的程式.差別好大…想問大大那些程式會造成的漏洞.是經過自己研讀還是有人指點才有如今的實力阿PS.小弟就讀的大學老只有教我怎麼寫程式.並沒有教我寫出一個可以用的程式.. 我覺得這是很多人心裡共同的疑問，所以就特地寫了一篇來說說我的看法&#8230; 個人的經驗 以我個人的經驗而言，開始有程式的概念大概是在小學六年級，那時喜歡自己做出些亂七八糟的網頁，就是那種整頁都是GIF閃個不停沒什麼內容的網頁，傳到一些免費空間裡，不知怎麼的突然有點懷念那種亂七八糟的風格，總覺得有種復古的感覺，想說如果現在網頁刻復做成那樣應該蠻有趣的，接著開始用Flash做一些小遊戲，在當時Flash不像現在有先進的ActionScript，我記得似乎是填某些表單，自動產生類似script之類的，在當時開始有變數、流程控制等等很淺的概念 接著時間來到國一，在偶然的機會下接觸到了VB6.0，起初完全不懂怎麼寫程式，靠著剪貼、修改，最後終於知道怎麼寫一個簡單的VB6的程式，我還留有第一個程式，只能做比大小，兩個文字欄輸入，按下按鍵它會告訴你誰大、誰小、或是相等，如此簡單的程式在當時做出來就有很大的成就感，在現在看來只不過是幾行的程式，連縮排都沒有，但是卻是一個很重要的開始，在什麼都沒有的金門，靠的只是一條網路線,和一些電腦書，對於從小就喜歡拆東西、科學、機械之類事物的我，這是一片可以自由創作的天地，透過寫程式，只要想得到的功能，就能透過程式寫出來，程式語言就像魔咒一般，只要唸出正確的咒語，事物就會依照你的語意、你的意唸動起來，就像魔法一般，從此就開始了寫程式的興趣，每天放學回家就是寫程式，寫到一兩點第二天去學校睡覺，日復一日 在這個過程中，我寫過無數的程式，爛程式，這對於寫有用的程式來說，寫爛程式是一個很重要的經驗，正因為我寫過爛程式，所以才知道好的程式和爛的程式到底差別在哪裡，我重寫過最多次的程式，是一款叫Dream On Line的線上遊戲，當時我很喜歡天堂這款線上遊戲，他好玩之處就是能當小白，還記得小六暑假就推出了，一開始在太陽神伺服器線上人數才700~800人，一開始都沒有人會玩，大家看見村裡的雞鴨豬狗牛就猛追著砍，砍了一陣子發現自己名字似乎有點紅，這不是錯覺，的確變紅了，過一陣子，開始學著當小白，故意剩一滴血負重跑去打別人讓別人還手一擊就把自己打死等等腦殘的白目行為，可以說是小白的始祖，這遊戲好玩的地方就是夠白目，我也想做出一個這樣的遊戲自己來玩玩，於是就開始研究如何寫遊戲，研究Direct Draw等等，寫出了非常陽春的版本 雖然說這樣的遊戲看起來似乎有這麼回事，但其實其中的bug不少，像伺服器就極度的不穩定，動不動就會當機，隨著時間不停的前進，很多時候不是有那麼多時間寫程式，而且在當時寫的程式都是硬寫出來的，常常沒有設計可言，隨著程式的膨賬，程式雜亂不堪常常覺得有心無力，每次回頭想寫時，就發現，為什麼自己會寫出這樣的爛程式，連自己都看不下去，所以每次回頭過來的改寫，最後都是受不了自己的爛程式變成重寫，這個程式重寫了5~6次之多，我自己都快記不清了 各個重寫的版本 即使每次都覺得自己以前寫的程式是垃圾，但從好的角度看來，這或許就是代表了進步，當然這遊戲只是我寫過的程式中的一部份，其它還有很多五四三的程式，像是鍵盤記錄器之類的，而這個遊戲我還沒放棄它，我一直想找個時間想玩成它，比起當年，我永遠都覺得比當時更有把握寫出來，只是時間上的問題，但是是不是這樣我就不知道了 來到了大學 來到了大學，在這之前我靠的都是自己、書、還有網路，當然也得感謝很多指導過我的人，起初我一直認為，我靠自己都能學成這樣，如果有人教一定可以學得更快，有點像是中華小廚師裡雷恩想跑去暗黑暗料理界的那種感覺，希望能有更多、更快的進步，但是我卻發現，事實上倒頭來還是得靠自己讀，不過不可否認地，在大學這三年裡我學到了很多我之前都一直不懂的理論，在之前我可能不懂多緒、多工背後context-switch怎麼運作，寫迴圈為什麼存取相鄰的記憶體會比較快，原來是cache的原因，一直聽到什麼分支預測錯誤，不瞭解是什麼東西，修了計算機結構學，才瞭解原來CPU裡還有pipeline這種機制在加速，才會有分支預測的問題，很多理論都是在這時建立起來，在這之前我會寫程式，但很多概念上可能不正確，在這之後我能從基本的原理出發，寫出更好的程式來 所以，為什麼大學沒辦法教會你寫有用的程式? 在經過這些歷程，我想我很清楚為什麼大學資工四年沒辦法培養出一個可以寫出有用的程式的工程師，出在下列原因 程式作業生命週期太短 在資工系的大學生寫的程式，通常都是寫完交完就算了的程式，在這種情況下寫出來的程式，都是寫完丟就算了，程式的生命週期在交上作業的那一瞬間就結束了，相較於我自己寫的遊戲，我不停地重新檢視自己的程式，差別就在於，一個程式如果一直改，它設計不良的地方就可以被看得出來，好的程式設計應該是要經得起修改，但是大學因為作業交完就算了，可能再也沒有人會再看它第二眼，所以寫出來的程式常常都是硬寫出來的，規劃、維護什麼的都不需要，但是在現實世界中，程式其實是寫完那一刻它的生命週期才正要開始，寫完了程式，交到客戶手裡，客戶發現bug、或是有新的需求，這時再改程式，初而復始，直到程式不再被使用，程式的生命週期才正式結束，學校和現實的落差就在這裡，程式作業的超短生命週期讓它寫作的風格、設計都不受到重視，反正能交能跑就好，所以學生往往在遇到真實的程式會用寫作業的方法寫，下場當然是很慘 程式的規模太小 除了生命周期短，規模小也是另一個原因，通常作業都是幾百行甚至幾十行可以打發的程式，然而在真實世界中，程式往往是用萬行在算的，像我寫的遊戲就有上萬行的程式、甚至上十萬，而且還是好幾個程式，Server、Client、地圖編輯器等等，程式小，不經規劃和設計，硬寫也一樣可以寫出來，但是當程式一大，不經過適當的規劃、分析、與設計，下場就會很慘，那重寫無數次的遊戲只是例子之一，我曾經接過一個Case，錯估了程式的複雜程度，打算隨便寫就可以寫出來，後來發現複雜程度預估錯誤，所以加上了之前沒想到的部份，結果就非常慘，程式改這裡，那裡會跑出bug，而且你無法確定，這個bug到底是誰的，是什麼東西引起的，因為設計不良，疊床架屋，一堆模組之間有亂七八糟纏在一起的關係，造成一點點修改就牽一髮動全身，整個程式陷入無限的debug迴圈中，我發現這樣子下去不行，程式肯定寫不出來，所以就整個砍掉重寫，讓他們之間的關係，也就是藕合度降到最低，這才順利將程式寫出來，因為每個模組和其它程式的關聯都很少，所以可以很輕易地確定這個模組是正確的，而且關係少了，出了bug誰和這模組有關，也很容易找出來，這些經驗都是要程式大到一定規模才能會遇到的，在大學的作業通常規模都太小，學生自然不懂得設計，小程式硬寫也寫出來，何來的設計，而就算是畢業專題，通常也是寫完就算了，就算稍大一點硬寫也一樣寫出來，所以沒有實務經驗是理所當然的 但是我有遇過有門課教授出程式作業的方式我相當認同，而且可以改善以上兩點問題，他的作業一開始是簡單的功能，然後後面出的作業都是要求原本的功能加上另外的功能，如此一來，越到後來的作業規模會越大，程式也經過一再的檢驗，學生在這過程中可以學到程式如何重復利用，如果學生用硬寫的方式，很快就會吃到我上面所說的苦頭，越到後來程式越來越大，硬寫的程式以前的程式難以擴充，除錯也困難，生命週期長了，學生也能從中學到寫出較容易維護的方式，就算不知道，在以後看見了設計相關的概念，就會突然發現原來設計就是這麼一回事，在此我個人建議資工大學的課程，可以考慮用這樣的方式，設計每次增加一個小要求的大程式，如此一來可以解決上面提到的問題 寫的程式太少 不止是生命週期和規模的問題，以資工四年的程式作業來看，如果學生寫的程式就只有作業真的是太少了，個人其實也不是很喜歡寫作業，因為不是很有趣，並不是因為太簡單，難度不是問題，而是因為你覺得有沒有興趣，如果你對會計有興趣，或許可以自己寫一個財務報表的計算程式，如果你對物理有興趣，或許可以寫個簡單的物理模擬程式，如果你對數學有興趣，或許你可以寫一個尋找超大質數或計算圓周率的程式，如果你對遊戲有興趣，就寫遊戲，其實有太多程式都不難，而且都很有趣，像是鍵盤記錄器，聽起來很神奇，其實就只是一個掛在windows下的hook攔劫keyboard event而已，而木馬其實也只是利用socket等連線，一個指令一個動作，你傳什麼給我，我就做什麼的程式而已，有太多有趣的程式都比作業好玩，而實際上又會用到，如果學生只單純的寫作業，可能什麼是Win32API永遠都不會用，而Open source的library又要怎麼樣用，學校通常也不會教你，debugger怎麼用? 也很少有人會教你，資料怎麼找? 也沒人會教你，文件怎麼看? 沒人教你，所以除了程式的作業以外，學會如何寫有用程式的不二法門就是多寫，沒有人規定你要寫什麼好，對什麼有興趣就寫什麼，在這個過程中你找資料、問問題、解決的每個問題，都是你學到的經驗，而且課堂上通常都不會教你 不會找資料 我們從小到大的教育似乎範圍都只在教課書上，但事實上在實際的應用上很常需要自己找資料，現在有了網路、有了Google，即使找資料已經是這麼簡單的事情，但是很學生還是不會找，舉個例子，當你手上有一個函數的名字，fopen，它是拿來做什麼? 你要如何使用它? 很多學生可能想都沒想過要找資料，甚至有些人用Yahoo!奇摩 搜尋引擎來找資料，不好意思，找資料請用Google，最簡單的方式就是fopen直接貼到google裡搜尋，通常你要的答案就會在那裡，但是有時候不是這麼簡單可以找到資料，例如可能跑出來的是PHP的fopen而不是C語言的fopen，那你可能得這樣下關鍵字"C語言 fopen"，而這還算是好找的例子，有時候你想找你以前某個看過的東西，但是想不起來是什麼名字，關鍵字也不知道要下什麼，這時你可能要透過聯想的方式，想一下應該找什麼會出現包含那個名字的網頁，再透過那個頁面再找你要的資料，有時甚至要這樣轉兩三次，很多人或許以為寫程式的能力就只有寫，但其實在背後有很多其它的能力支撐，而資工系的學生可能很多都只會翻教課書，遇到問題或是想知道的東西不懂得找資料的技巧，當然所知範圍只限於課本的話，不用談寫出有用的程式 不會閱讀 其實寫程式聽起來好像就只有寫而已，其實在背後需要大量的閱讀，當你拿到一份library的文件，要如何閱讀，當然這部份還扯到英文的能力，中文的資料是有，但是通常都已經慢最新的東西許多，如果最新的東西都要等人翻譯你才能使用，早就已經落後好久，更新的東西又出來了，因此英文我認為是讀資工系必備的能力之一，當然我一開始看英文資料也很痛苦，不懂的單字一堆，可能一開始大部份時間都在查單字，但是同樣一個單字，查一次、查兩次、查三次，查久了就自然記起來了，而且很多同學可能有錯誤的讀法，喜歡一字一句讀，事實上很多資料只有某部份的東西是你要的，一字一句讀很快地會讓你失去耐心，大部份時間都花在查字點上，進度可能只有一頁，這樣的方式理所當然會看不懂，正確的讀法，應該是要快速的描過一次，大概知道哪裡有什麼，像是工具書，或是說明文件等用來查的東西更是需要這樣，不懂的單字其實可以不用急著查，先猜猜看，猜不到就算了，大概看懂就好，有時你發現你不懂的單字一次兩次多次地出現，這時表示這個字很重要或是很常用的術語，此時再查這個字也不遲 &#8230; <a href="http://blog.ez2learn.com/2009/06/27/how-to-write-useful-program/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>有網友在這篇<a href="http://blog.ez2learn.com/2008/12/13/dangerous-behavior-should-not-be-default-behavior/"> 別讓危險成為預設的行為，讓危險的行為比安全的行為更麻煩</a> 回應裡提到</p>
<p>WiyD-Luck</p>
<blockquote><p>請問大大寫程式寫多久了<br style="padding: 0px; margin: 0px;" />小弟今年大三要升大四了<br style="padding: 0px; margin: 0px;" />在無意間近來大大的blog<br style="padding: 0px; margin: 0px;" />收穫良多(請受小的一拜<br style="padding: 0px; margin: 0px;" />會寫程式.跟會寫一個能用的程式.差別好大…<br style="padding: 0px; margin: 0px;" />想問大大那些程式會造成的漏洞.是經過自己研讀還是有人指點才有如今的實力阿<br style="padding: 0px; margin: 0px;" />PS.小弟就讀的大學老只有教我怎麼寫程式.並沒有教我寫出一個可以用的程式..</p></blockquote>
<p>我覺得這是很多人心裡共同的疑問，所以就特地寫了一篇來說說我的看法&#8230;</p>
<p><span id="more-598"></span></p>
<h2>個人的經驗</h2>
<p>以我個人的經驗而言，開始有程式的概念大概是在小學六年級，那時喜歡自己做出些亂七八糟的網頁，就是那種整頁都是GIF閃個不停沒什麼內容的網頁，傳到一些免費空間裡，不知怎麼的突然有點懷念那種亂七八糟的風格，總覺得有種復古的感覺，想說如果現在網頁刻復做成那樣應該蠻有趣的，接著開始用Flash做一些小遊戲，在當時Flash不像現在有先進的ActionScript，我記得似乎是填某些表單，自動產生類似script之類的，在當時開始有變數、流程控制等等很淺的概念</p>
<p>接著時間來到國一，在偶然的機會下接觸到了VB6.0，起初完全不懂怎麼寫程式，靠著剪貼、修改，最後終於知道怎麼寫一個簡單的VB6的程式，我還留有第一個程式，只能做比大小，兩個文字欄輸入，按下按鍵它會告訴你誰大、誰小、或是相等，如此簡單的程式在當時做出來就有很大的成就感，在現在看來只不過是幾行的程式，連縮排都沒有，但是卻是一個很重要的開始，在什麼都沒有的金門，靠的只是一條網路線,和一些電腦書，對於從小就喜歡拆東西、科學、機械之類事物的我，這是一片可以自由創作的天地，透過寫程式，只要想得到的功能，就能透過程式寫出來，程式語言就像魔咒一般，只要唸出正確的咒語，事物就會依照你的語意、你的意唸動起來，就像魔法一般，從此就開始了寫程式的興趣，每天放學回家就是寫程式，寫到一兩點第二天去學校睡覺，日復一日</p>
<p>在這個過程中，我寫過無數的程式，爛程式，這對於寫有用的程式來說，寫爛程式是一個很重要的經驗，正因為我寫過爛程式，所以才知道好的程式和爛的程式到底差別在哪裡，我重寫過最多次的程式，是一款叫Dream On Line的線上遊戲，當時我很喜歡天堂這款線上遊戲，他好玩之處就是能當小白，還記得小六暑假就推出了，一開始在太陽神伺服器線上人數才700~800人，一開始都沒有人會玩，大家看見村裡的雞鴨豬狗牛就猛追著砍，砍了一陣子發現自己名字似乎有點紅，這不是錯覺，的確變紅了，過一陣子，開始學著當小白，故意剩一滴血負重跑去打別人讓別人還手一擊就把自己打死等等腦殘的白目行為，可以說是小白的始祖，這遊戲好玩的地方就是夠白目，我也想做出一個這樣的遊戲自己來玩玩，於是就開始研究如何寫遊戲，研究Direct Draw等等，寫出了非常陽春的版本</p>
<div id="attachment_158" class="wp-caption alignnone" style="width: 310px"><a href="http://blog.ez2learn.com/wp-content/uploads/2008/10/2008-10-11_115307.png"><img class="size-medium wp-image-158" title="夢想線上登入畫面" src="http://blog.ez2learn.com/wp-content/uploads/2008/10/2008-10-11_115307-300x225.png" alt="夢想線上登入畫面" width="300" height="225" /></a><p class="wp-caption-text">夢想線上登入畫面</p></div>
<div id="attachment_159" class="wp-caption alignnone" style="width: 310px"><a href="http://blog.ez2learn.com/wp-content/uploads/2008/10/2008-10-11_115338.png"><img class="size-medium wp-image-159" title="夢想線上遊戲畫面" src="http://blog.ez2learn.com/wp-content/uploads/2008/10/2008-10-11_115338-300x225.png" alt="夢想線上遊戲畫面" width="300" height="225" /></a><p class="wp-caption-text">夢想線上遊戲畫面</p></div>
<p>雖然說這樣的遊戲看起來似乎有這麼回事，但其實其中的bug不少，像伺服器就極度的不穩定，動不動就會當機，隨著時間不停的前進，很多時候不是有那麼多時間寫程式，而且在當時寫的程式都是硬寫出來的，常常沒有設計可言，隨著程式的膨賬，程式雜亂不堪常常覺得有心無力，每次回頭想寫時，就發現，為什麼自己會寫出這樣的爛程式，連自己都看不下去，所以每次回頭過來的改寫，最後都是受不了自己的爛程式變成重寫，這個程式重寫了5~6次之多，我自己都快記不清了</p>
<p>各個重寫的版本</p>
<div id="attachment_160" class="wp-caption alignnone" style="width: 310px"><a href="http://blog.ez2learn.com/wp-content/uploads/2008/10/map_editor_test.jpg"><img class="size-medium wp-image-160" title="某個重寫版本的地圖編輯器" src="http://blog.ez2learn.com/wp-content/uploads/2008/10/map_editor_test-300x225.jpg" alt="某個重寫版本的地圖編輯器" width="300" height="225" /></a><p class="wp-caption-text">某個重寫版本的地圖編輯器</p></div>
<div id="attachment_161" class="wp-caption alignnone" style="width: 310px"><a href="http://blog.ez2learn.com/wp-content/uploads/2008/10/client_test_01.jpg"><img class="size-medium wp-image-161" title="某個重寫版本的Client" src="http://blog.ez2learn.com/wp-content/uploads/2008/10/client_test_01-300x225.jpg" alt="某個重寫版本的Client" width="300" height="225" /></a><p class="wp-caption-text">某個重寫版本的Client</p></div>
<div id="attachment_162" class="wp-caption alignnone" style="width: 310px"><a href="http://blog.ez2learn.com/wp-content/uploads/2008/10/client2.jpg"><img class="size-medium wp-image-162" title="更晚的重寫版本的Client" src="http://blog.ez2learn.com/wp-content/uploads/2008/10/client2-300x225.jpg" alt="更晚的重寫版本的Client" width="300" height="225" /></a><p class="wp-caption-text">更晚的重寫版本的Client</p></div>
<div id="attachment_163" class="wp-caption alignnone" style="width: 310px"><a href="http://blog.ez2learn.com/wp-content/uploads/2008/10/mapeditor3.jpg"><img class="size-medium wp-image-163" title="更晚的重寫版本的地圖編輯器" src="http://blog.ez2learn.com/wp-content/uploads/2008/10/mapeditor3-300x225.jpg" alt="更晚的重寫版本的地圖編輯器" width="300" height="225" /></a><p class="wp-caption-text">更晚的重寫版本的地圖編輯器</p></div>
<div id="attachment_164" class="wp-caption alignnone" style="width: 310px"><a href="http://blog.ez2learn.com/wp-content/uploads/2008/10/client3.jpg"><img class="size-medium wp-image-164" title="更晚的重寫版本的Client 2" src="http://blog.ez2learn.com/wp-content/uploads/2008/10/client3-300x223.jpg" alt="更晚的重寫版本的Client 2" width="300" height="223" /></a><p class="wp-caption-text">更晚的重寫版本的Client 2</p></div>
<div id="attachment_165" class="wp-caption alignnone" style="width: 310px"><a href="http://blog.ez2learn.com/wp-content/uploads/2008/10/last_map_editor.jpg"><img class="size-medium wp-image-165" title="最後的重寫版本的地圖編輯器" src="http://blog.ez2learn.com/wp-content/uploads/2008/10/last_map_editor-300x240.jpg" alt="最後的重寫版本的地圖編輯器" width="300" height="240" /></a><p class="wp-caption-text">最後的重寫版本的地圖編輯器</p></div>
<div id="attachment_166" class="wp-caption alignnone" style="width: 310px"><a href="http://blog.ez2learn.com/wp-content/uploads/2008/10/last_map_editor2.jpg"><img class="size-medium wp-image-166" title="最後的重寫版本的地圖編輯器" src="http://blog.ez2learn.com/wp-content/uploads/2008/10/last_map_editor2-300x240.jpg" alt="最後的重寫版本的地圖編輯器" width="300" height="240" /></a><p class="wp-caption-text">最後的重寫版本的地圖編輯器</p></div>
<p>即使每次都覺得自己以前寫的程式是垃圾，但從好的角度看來，這或許就是代表了進步，當然這遊戲只是我寫過的程式中的一部份，其它還有很多五四三的程式，像是鍵盤記錄器之類的，而這個遊戲我還沒放棄它，我一直想找個時間想玩成它，比起當年，我永遠都覺得比當時更有把握寫出來，只是時間上的問題，但是是不是這樣我就不知道了</p>
<h2>來到了大學</h2>
<p>來到了大學，在這之前我靠的都是自己、書、還有網路，當然也得感謝很多指導過我的人，起初我一直認為，我靠自己都能學成這樣，如果有人教一定可以學得更快，有點像是中華小廚師裡雷恩想跑去暗黑暗料理界的那種感覺，希望能有更多、更快的進步，但是我卻發現，事實上倒頭來還是得靠自己讀，不過不可否認地，在大學這三年裡我學到了很多我之前都一直不懂的理論，在之前我可能不懂多緒、多工背後context-switch怎麼運作，寫迴圈為什麼存取相鄰的記憶體會比較快，原來是cache的原因，一直聽到什麼分支預測錯誤，不瞭解是什麼東西，修了計算機結構學，才瞭解原來CPU裡還有pipeline這種機制在加速，才會有分支預測的問題，很多理論都是在這時建立起來，在這之前我會寫程式，但很多概念上可能不正確，在這之後我能從基本的原理出發，寫出更好的程式來</p>
<p>所以，為什麼大學沒辦法教會你寫有用的程式?</p>
<p>在經過這些歷程，我想我很清楚為什麼大學資工四年沒辦法培養出一個可以寫出有用的程式的工程師，出在下列原因</p>
<h2>程式作業生命週期太短</h2>
<p>在資工系的大學生寫的程式，通常都是寫完交完就算了的程式，在這種情況下寫出來的程式，都是寫完丟就算了，程式的生命週期在交上作業的那一瞬間就結束了，相較於我自己寫的遊戲，我不停地重新檢視自己的程式，差別就在於，一個程式如果一直改，它設計不良的地方就可以被看得出來，好的程式設計應該是要經得起修改，但是大學因為作業交完就算了，可能再也沒有人會再看它第二眼，所以寫出來的程式常常都是硬寫出來的，規劃、維護什麼的都不需要，但是在現實世界中，程式其實是寫完那一刻它的生命週期才正要開始，寫完了程式，交到客戶手裡，客戶發現bug、或是有新的需求，這時再改程式，初而復始，直到程式不再被使用，程式的生命週期才正式結束，學校和現實的落差就在這裡，程式作業的超短生命週期讓它寫作的風格、設計都不受到重視，反正能交能跑就好，所以學生往往在遇到真實的程式會用寫作業的方法寫，下場當然是很慘</p>
<h2>程式的規模太小</h2>
<p>除了生命周期短，規模小也是另一個原因，通常作業都是幾百行甚至幾十行可以打發的程式，然而在真實世界中，程式往往是用萬行在算的，像我寫的遊戲就有上萬行的程式、甚至上十萬，而且還是好幾個程式，Server、Client、地圖編輯器等等，程式小，不經規劃和設計，硬寫也一樣可以寫出來，但是當程式一大，不經過適當的規劃、分析、與設計，下場就會很慘，那重寫無數次的遊戲只是例子之一，我曾經接過一個Case，錯估了程式的複雜程度，打算隨便寫就可以寫出來，後來發現複雜程度預估錯誤，所以加上了之前沒想到的部份，結果就非常慘，程式改這裡，那裡會跑出bug，而且你無法確定，這個bug到底是誰的，是什麼東西引起的，因為設計不良，疊床架屋，一堆模組之間有亂七八糟纏在一起的關係，造成一點點修改就牽一髮動全身，整個程式陷入無限的debug迴圈中，我發現這樣子下去不行，程式肯定寫不出來，所以就整個砍掉重寫，讓他們之間的關係，也就是藕合度降到最低，這才順利將程式寫出來，因為每個模組和其它程式的關聯都很少，所以可以很輕易地確定這個模組是正確的，而且關係少了，出了bug誰和這模組有關，也很容易找出來，這些經驗都是要程式大到一定規模才能會遇到的，在大學的作業通常規模都太小，學生自然不懂得設計，小程式硬寫也寫出來，何來的設計，而就算是畢業專題，通常也是寫完就算了，就算稍大一點硬寫也一樣寫出來，所以沒有實務經驗是理所當然的</p>
<p>但是我有遇過有門課教授出程式作業的方式我相當認同，而且可以改善以上兩點問題，他的作業一開始是簡單的功能，然後後面出的作業都是要求原本的功能加上另外的功能，如此一來，越到後來的作業規模會越大，程式也經過一再的檢驗，學生在這過程中可以學到程式如何重復利用，如果學生用硬寫的方式，很快就會吃到我上面所說的苦頭，越到後來程式越來越大，硬寫的程式以前的程式難以擴充，除錯也困難，生命週期長了，學生也能從中學到寫出較容易維護的方式，就算不知道，在以後看見了設計相關的概念，就會突然發現原來設計就是這麼一回事，在此我個人建議資工大學的課程，可以考慮用這樣的方式，設計每次增加一個小要求的大程式，如此一來可以解決上面提到的問題</p>
<h2>寫的程式太少</h2>
<p>不止是生命週期和規模的問題，以資工四年的程式作業來看，如果學生寫的程式就只有作業真的是太少了，個人其實也不是很喜歡寫作業，因為不是很有趣，並不是因為太簡單，難度不是問題，而是因為你覺得有沒有興趣，如果你對會計有興趣，或許可以自己寫一個財務報表的計算程式，如果你對物理有興趣，或許可以寫個簡單的物理模擬程式，如果你對數學有興趣，或許你可以寫一個尋找超大質數或計算圓周率的程式，如果你對遊戲有興趣，就寫遊戲，其實有太多程式都不難，而且都很有趣，像是鍵盤記錄器，聽起來很神奇，其實就只是一個掛在windows下的hook攔劫keyboard event而已，而木馬其實也只是利用socket等連線，一個指令一個動作，你傳什麼給我，我就做什麼的程式而已，有太多有趣的程式都比作業好玩，而實際上又會用到，如果學生只單純的寫作業，可能什麼是Win32API永遠都不會用，而Open source的library又要怎麼樣用，學校通常也不會教你，debugger怎麼用? 也很少有人會教你，資料怎麼找? 也沒人會教你，文件怎麼看? 沒人教你，所以除了程式的作業以外，學會如何寫有用程式的不二法門就是多寫，沒有人規定你要寫什麼好，對什麼有興趣就寫什麼，在這個過程中你找資料、問問題、解決的每個問題，都是你學到的經驗，而且課堂上通常都不會教你</p>
<h2>不會找資料</h2>
<p>我們從小到大的教育似乎範圍都只在教課書上，但事實上在實際的應用上很常需要自己找資料，現在有了網路、有了Google，即使找資料已經是這麼簡單的事情，但是很學生還是不會找，舉個例子，當你手上有一個函數的名字，fopen，它是拿來做什麼? 你要如何使用它? 很多學生可能想都沒想過要找資料，甚至有些人用Yahoo!奇摩 搜尋引擎來找資料，不好意思，找資料請用Google，最簡單的方式就是fopen直接貼到google裡搜尋，通常你要的答案就會在那裡，但是有時候不是這麼簡單可以找到資料，例如可能跑出來的是PHP的fopen而不是C語言的fopen，那你可能得這樣下關鍵字"C語言 fopen"，而這還算是好找的例子，有時候你想找你以前某個看過的東西，但是想不起來是什麼名字，關鍵字也不知道要下什麼，這時你可能要透過聯想的方式，想一下應該找什麼會出現包含那個名字的網頁，再透過那個頁面再找你要的資料，有時甚至要這樣轉兩三次，很多人或許以為寫程式的能力就只有寫，但其實在背後有很多其它的能力支撐，而資工系的學生可能很多都只會翻教課書，遇到問題或是想知道的東西不懂得找資料的技巧，當然所知範圍只限於課本的話，不用談寫出有用的程式</p>
<h2>不會閱讀</h2>
<p>其實寫程式聽起來好像就只有寫而已，其實在背後需要大量的閱讀，當你拿到一份library的文件，要如何閱讀，當然這部份還扯到英文的能力，中文的資料是有，但是通常都已經慢最新的東西許多，如果最新的東西都要等人翻譯你才能使用，早就已經落後好久，更新的東西又出來了，因此英文我認為是讀資工系必備的能力之一，當然我一開始看英文資料也很痛苦，不懂的單字一堆，可能一開始大部份時間都在查單字，但是同樣一個單字，查一次、查兩次、查三次，查久了就自然記起來了，而且很多同學可能有錯誤的讀法，喜歡一字一句讀，事實上很多資料只有某部份的東西是你要的，一字一句讀很快地會讓你失去耐心，大部份時間都花在查字點上，進度可能只有一頁，這樣的方式理所當然會看不懂，正確的讀法，應該是要快速的描過一次，大概知道哪裡有什麼，像是工具書，或是說明文件等用來查的東西更是需要這樣，不懂的單字其實可以不用急著查，先猜猜看，猜不到就算了，大概看懂就好，有時你發現你不懂的單字一次兩次多次地出現，這時表示這個字很重要或是很常用的術語，此時再查這個字也不遲</p>
<h2>不會問問題</h2>
<p>比起查資料，問問題最好當作最後一個手段，因為你會問的問題通常別人都已經問過了，先問問Google吧，當你找了該找的地方發現沒有你要的問題，這時才考慮問問題，雖然說問問題聽起來好像沒什麼，但是不會問問題一樣是很多同學的通病之一，有時同學問我問題，我聽了半天都聽不懂他到底想問什麼，原因出在於可能自己都沒有把問題先整理過，這是很重要的步驟，多例如像程式出現bug，想要貼上網問，有些人就全部的程式一口氣貼上去，事實上程式可能只有一小部份有問題，這樣做讓回答問題的人很煩腦，必須看完整個無關的程式，降低回答的意願，最好的方法是先把想問的問題整理出來，以程式片段來看，就是把無關的部份刪去，然後只剩下可以重現出那問題的程式片段，如此一來回答問題的人可以很快找到問題所在，而且這樣做有個好處，就是常常在整理問題的過程中，就發現問題在哪裡，其實其中就包含了推導的過程，很多同學常常不懂怎麼問問題，當然也不知道怎麼解決問題</p>
<p>用英文問問題一樣是一個很重要的技能之一，這一樣扯到了英文的能力，當學會問問題之後還不夠，很多東西出了問題，你必須用英文到那東西的出處去問問題，例如像是open source的library，英文絕對是電腦領域的官方語言，其實用英文問問題不難，就算文法有些錯誤，其實也不要緊，只要大家能懂你的意思，基本的禮貌做到，該找的資料先找了，通常他們都很樂意回答你的問題，懂的單字都很簡單也沒關係，我個人就傾向以最簡單的單字來表達我想說的，我知道可能有些單字在字義上能更精確地表達那意思，但是那樣的單字我通常都不知道或記不住，我們不是在寫什麼作文比賽，什麼華麗的詞藻就丟進馬桶裡沖掉吧</p>
<h2>沒有興趣不要來念資工</h2>
<p>能做到上面說的這些，通常是有一定的興趣才辦得到，沒有興趣，難以支撐這背後所需要花的心力，最好不要來讀資工，很多幼稚的父母總喜歡要自己的小孩去擠所謂的熱門科系，也從不過問到底他們的興趣是什麼，一心只想說熱門等於有錢賺，其實這是很大的錯誤，以資工來說，如果讀了四年什麼都不會，這樣的人根本不會有什麼人想雇用，即使有的話，也頂多是少得可憐的薪水，並不會因為有資工系畢業的文憑而有任何保障或前途，與其花四年在所謂的熱門科系上不如在自己有興趣的事物上，如果畢業時才發現，父母逼你讀的熱門科系已經成為了夕陽產業，父母又要如何替你負責? 所以沒有興趣的話，不要來讀資工，往你最有興趣的方向發展，遠比在資工系裡一無所獲來得好，所以如果以有人逼你讀你不想讀的資工時，請告訴他們「我的人生是我自己要過的，你沒辦法替錯誤的選擇負責，而我可以」</p>
<h2>最後</h2>
<p>如果我說的這些你都做到了，恭喜你，不敢保證，但是至少隨著時間會越來越強，懂得越來越多，到今天我也跟原po一樣，大三要升大四了，背後花了9年的時間，大學畢業剛好十年，有人說，培養一項專業要十年，但其實我覺得學越多越會覺得懂越少，十年過後，其實才正要開始，只要有興趣、有心做，當然，有人教是更好更快，程式設計不難，每個人都能設計出有用的程式</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.ez2learn.com/2009/06/27/how-to-write-useful-program/feed/</wfw:commentRss>
		<slash:comments>13</slash:comments>
		</item>
		<item>
		<title>六先生開課事件 : 我的看法</title>
		<link>http://blog.ez2learn.com/2009/01/26/mr-6-my-opinion/</link>
		<comments>http://blog.ez2learn.com/2009/01/26/mr-6-my-opinion/#comments</comments>
		<pubDate>Sun, 25 Jan 2009 17:50:21 +0000</pubDate>
		<dc:creator>victor</dc:creator>
				<category><![CDATA[中文文章]]></category>
		<category><![CDATA[分享]]></category>
		<category><![CDATA[心得]]></category>
		<category><![CDATA[心得文]]></category>
		<category><![CDATA[嘴砲]]></category>
		<category><![CDATA[沒有八卦]]></category>

		<guid isPermaLink="false">http://blog.ez2learn.com/?p=489</guid>
		<description><![CDATA[關於Mr. 6六先生開課被罵得很慘的事件 : 我的看法 <a href="http://blog.ez2learn.com/2009/01/26/mr-6-my-opinion/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>話說，有玩過魔獸爭霸三國無雙之類的地圖的人都知道，看到數字人，也就是ID全由數字組成的玩家，有很大的機會中離，不過這一點都扯不上邊 XD</p>
<p>最近很熱鬧的事情是，知名部落客Mr.6先生開的程式設計課程被踢暴課程的內容很差勁</p>
<p><a href="http://mr6offline.com/">http://mr6offline.com</a></p>
<p>大約看了一下是教一些PHP MySQL之類老掉牙的東西，但驚人的是三堂課要$4500大洋，而且跟據上面的部落格暴料還教得不怎麼樣，但是廣告詞卻寫得非常動人，想創業沒法靠別人，所以只能靠自己寫程式，學完就能靠自己寫程式創業之類的巴拉巴拉&#8230;</p>
<p>那我們未來要靠寫程式吃飯的資工系學生們是不是全都要去喝西北風啦? 為什麼這次事件會被罵得那麼慘，原因很簡單</p>
<p>頂著史丹佛等的和一堆亮麗經歷的光環，收費4500，但教的卻都是一些老掉牙了無新意的東西，PHP不難，但是真的值得不懂程式想學寫程式的人學習用來創業，用來寫網頁嗎? 先不論教得好不好，我個人認為:</p>
<h2><strong>不值得&#8230;..</strong></h2>
<p>PHP是一個設計很差勁的程式語言(請參考<a href="http://blog.ez2learn.com/2008/12/13/dangerous-behavior-should-not-be-default-behavior/">別讓危險成為預設的行為，讓危險的行為比安全的行為更麻煩</a>)，但不可否認的它是目前用來寫網頁最流行的程式語言，它也有它許多的優點，中文資源隨手可得，對於初學者來說，要用PHP寫網頁卻實是不難，但是，要寫出合格的網頁程式，卻需要很多瑣碎的know-how，不是初學者三兩天就可以達成的事情，初學者可以用PHP寫出各種常見的網頁程式，但是裡面充滿無數的問題、臭蟲、漏洞，光是一個許功蓋問題初學者可能就覺得莫明奇妙，但遲早會遇到，聲稱要三堂課教會學生寫PHP到可以用來自行創業，我只能說胡扯</p>
<h2>老掉牙的PHP MySQL&#8230;</h2>
<p>一樣技術有多老掉牙，或許我們可以定一個指標，叫做天瓏書局中文書指標，用技術的名詞在天瓏書局搜尋中文書，看數量有多少</p>
<p>PHP的結果 118筆<a href="http://tlsj.tenlong.com.tw/WebModule/BookSearch/bookSearchAdvancedAction.do"><br />
</a></p>
<p>有118筆符合的書，PHP到底有多老掉牙，這表示PHP的中文資源已經是唾手可得的地步，隨便找個有工程師的頭銜的人問他，你會不會PHP? 我想有八成的機會他都會回答Yes，即使是社交工程師(誤)，但在這裡我要強調的是，<strong>不是老掉牙、被用到爛掉就表示它不好，我一直都認為每種程式語言都各有優缺點，將他們用在正確的地方才是明確的選擇</strong>，而六先生聲稱想創業寫網頁教的居然是PHP土法煉鋼在寫網頁，這真的令人覺得不解，到底要寫到民國幾年，更何況既然PHP MySQL等已經那麼普遍，到底有什麼價值可以花4500元去學?</p>
<h2>那該教什麼好?</h2>
<p>真正想要快速寫能用的網頁，最好是學習網頁框架，隨便一款網頁框架都比用PHP土法鍊鋼做起來得好，收費昂貴教的卻是那麼落伍且不明智的方式，真令人覺得無法認同，但是姜太公釣魚，願者上勾，如果覺得真的有那個價值，去學也沒人能阻止，但在我看來，這就好像去用高價買一瓶平凡無奇的水，明明是隨手可得的東西，但是上面貼著"史丹佛雙碩士"，一樣的道理</p>
<p>以我的看法，如果教的是現代一點的東西還令人能接受，像TurboGears、Django、Ruby On Rails等等，我們來看看天瓏書局中文書指標</p>
<p>TurboGears 1 (簡體中文)</p>
<p>Django 0筆</p>
<p>Ruby On Rails 12筆</p>
<p>同樣是中文資源，差那麼多，我如果今天是初學者，也沒辦法靠自己學習最新的技術，中文書少得可憐，或著根本沒有，就算英文能力夠，礙於技術的背景知識的需要而學不了那些東西，如果是這樣的話，開課教這些網頁框架，快速開發、省略細節、更安全、更有生產力、更敏捷，也比較適合創業的目的，再者很少人會，才有那樣的價值，這樣看來花4500去學明明已經被用到爛掉，那麼多人會的東西其實蠻冤大頭的，真的要學PHP找家教一對一教學都來得便宜和實在，或是買本書來自學也便宜又實惠</p>
<p><strong>但是，再次的，我必須要強調，也不是越新的技術就越好，它們有比現有的東西更好的地方，但缺點就是因為很新資源比較少</strong>，可能有不夠穩定等問題，物以稀為貴，正因為很少人懂，才顯得有價值，我記得我以前我有個家教學生在討論價錢時這麼跟我說</p>
<blockquote><p>我去家樂福打工一個小時才多少</p></blockquote>
<p>我想了一想，就這麼回答他</p>
<blockquote><p>你去路邊隨便拉一個人都能去家樂福打工，但是你沒辦法路邊拉一個人來教你C語言</p></blockquote>
<p>這是同樣的道理，隨手可得的東西沒什麼價值，而學習最新技術的基本門檻是英文能力，英文能力不好，只能看中文書的話，等到有人翻譯通常又有更新更好的東西出來了，只會中文的話就永遠只能落在人後，六先生自稱</p>
<blockquote><p>美國史丹佛電機、管理雙碩士，14歲移民加拿大，而後移居美國矽谷</p></blockquote>
<p>即然有能力，為何不教一些較現代的技術，卻教PHP MySQL等土法鍊鋼的方式，想要創業，自己寫程式，這明明PHP+MySQL是個很不切實際的選擇，六先生如果真的有心想開課教人寫網頁創業，個人建議還是學一些現代一點的東西來教比較實在</p>
<h2>那自己學寫程式創業到底可不可能?</h2>
<p>我認為，可能，但機會很小，即然我們知道速成的程式設計能力是胡扯，那麼表示真的要能夠寫真正能用的程式需要時間，網路是瞬息萬變的，等你真的學會，寫出程式來，網路可能又是另一回事了，不過到了那個時候至少有技術，有能力可以實現自己的想法，視當時的情況實現也不是不可能，至於<strong>要花多久呢? 我想&#8230; 十年吧</strong>，我曾看過一篇文章這麼說，學習一樣專業，需要十年的時間，這文章我一時找不到，我個人覺得蠻認同這樣的說法，我個人從國一開始學寫程式，到今年差不多九年了，畢業的話就剛好十年了，但是我覺得我還是有很多東西要學，或許你覺得不認同，你說我照著六先生教的可能三天就能寫個留言版還什麼的，但是事實是，程式有分大小，小程式就算隨便亂寫、躺著寫、坐著寫、趴著寫、跳著寫，也硬是可以寫出來，但大程式就不一樣了，當你程式寫著寫著，規模越來越大，你會發現程式越來越混亂，越來越難以除錯，到最後你的程式變成一沱難以想像的東西，你這邊改了發現那邊居然跑出漏洞，那邊改了又跑出新的漏洞，為什麼我瞭解，原因很簡單，我寫過數不清的爛程式，從土法鍊鋼開始慢慢地摸索，因此我很清楚爛程式寫大的時候到底是什麼情況，但寫出來就算了，事情才剛開始，程式不是寫出來就結束了，你還得維護它，如果有新的功能要加進去怎麼辦? 使用者太多原本的系統沒辦法負擔又該怎麼辦? 又得想辦法改寫程式，現實是殘酷的，不是每個人都是你網站、程式的愛護者，會有一群無聊的、為了利益的人，想盡各種方法來玩你的系統，為了好玩、為了撈你的資料賣給詐騙集團，老練的設計師都有可能出錯導至系統被攻擊，更何況是半生不熟的設計師，所以為了要能創業而學寫程式，真的能成功的機會可能比中樂透還低，不過我相信真的有人能做到，但肯定是有過人毅力的奇才</p>
<h2>那程式設計的重點到底在哪裡?</h2>
<p>土法練鋼寫程式的人我個人稱為"黑手"，不可否認我當過很久的黑手，用各種笨方法硬寫程式，所以才會遇到各種問題，那到底缺少什麼? 程式設計師和程式黑手的差別到底在哪裡? 程式設計的重點在於設計，到底什麼是設計? <a href="http://mr6.cc/?p=2553">六先生提過</a>設計</p>
<blockquote><p>姚老師告訴對方，「啊，他在學程式設計！」</p>
<p>17歲的我，非常驕傲的抬起頭來。不是因為「程式」這個炫麗的字眼，而是「設計」。</p>
<p>加拿大沒有什麼好科系和壞科系的，沒有「選系不選校」的問題，我一點都不為「程式」而驕傲，我為「設計」而驕傲。</p>
<p>17歲，只有考試，只有作業，只有報告…什麼，「設計」？所以，以後我真的可以這個叫「程式」的東西來「設計」囉？</p>
<p>從那隻會動的蟲子以後，我果然就發現，原來，用程式要實現自己的任何點子，是這麼容易的一件事！</p></blockquote>
<p>六先生說對了重點，程式設計真正重要的的確是設計而不是程式，但是我很懷疑他到底懂不懂得設計，我承認我對於設計還差很遠，有人曾這樣說過</p>
<blockquote><p>有才華洋溢的年輕編程人員，但沒有年輕的程式設計師</p></blockquote>
<p>原文是英文，我記得似乎是在某本書上看到的，一時也想不起來，我寫的語意用詞可能也沒有那麼正確，但是他想表達的大概是這樣，寫程式這件事情要寫得好其實不難，很多程式設計師很年輕就表現出很強的編程能力，但是很少有程式設計師在年輕時就能表現出設計能力，這表示設計不是很短的時間內可以學會的，需要的是長時間的累積，不是說設計兩個字就真的會設計</p>
<h2>還有什麼? 團隊合作?</h2>
<p>除此之外六先生還有提到</p>
<blockquote><p>所謂速成，就是一個月內就開始寫點子。</p>
<p>我們希望找到一群志同道合的人或許一起創業。</p>
<p>我們希望一邊寫，一邊還討論現在網路最新的狀況與可用的API。</p>
<p>我們還一邊交換自己使用的機房與SEO的建議。</p>
<p>甚至，我們互相幫對方寫對方的程式，整個課程就像一個超大的創業團隊，各有各的目標，但各自之間是互相幫忙的。</p></blockquote>
<p>這問題就更大了，團隊寫程式和一個人寫程式是兩回事，著名的軟體專案開發經驗談的書 "人月神話" 裡有提到，軟體的開發不像是收割小麥，人越多就越有效率，而是人越多，所需要付出的溝通成本就越多，反而會更沒有效率，一個人寫程式，你自己怎麼寫，你自己知道，所有的東西都在你的掌控中，歐~ 不，連你自己都可能忘記自己以前寫的程式，更何況是和別人合作，你得讀別人的程式，他寫出來的如果是天書，你也要能讀懂天書才能夠和他合作，而且程式的開發，如果需求是自己想，自己來實現會最有效率，如果是別人的需求，經過溝通，很容易發生寫出來的程式不是需求者要的東西，從六先生所謂的互相幫對方寫對方的程式，真的是莫名奇妙， 一整個團隊成員們都有不一樣的目標，但是卻又能共同開發來達成這些目標，真的能辦到，我只能說六先生太神了&#8230;.</p>
<h2>最後</h2>
<p>我沒有史丹佛學歷，也沒待過知名企業，只有自學程式九年，寫程式不怎樣，打嘴砲還有點自信的小小阿宅，以上純屬嘴砲&#8230;.僅供參考，看看就好 XD</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.ez2learn.com/2009/01/26/mr-6-my-opinion/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
	</channel>
</rss>

