2011年6月29日

Google搜尋排名6月底大洗牌,本誌PageRank從5降成3了

PageRank (PR) 就是網站的重要性指標,會影響在 Google 搜尋結果中的排名順序,說 PageRank 不重要是騙人的。因為 PageRank = 0 的話,即使你的網頁再有內容,除非使用者輸入了很精確的關鍵字,或是很有耐心地檢索好幾頁甚至幾十頁搜尋結果,才能找到你寫的東西,甚至你發佈了一個苦心製作的新網頁,也要過了很久才被收錄到搜尋引擎的資料庫。

但是講究 SEO 並不是說要用那些小手段,欺騙搜尋引擎以換取更好的排名;而是讓搜尋引擎拜訪你的網站時,你的網站對搜尋引擎表現得更好客一些,讓搜尋引擎更容易知道你的網站真正有些什麼內容,不要平白失去內容被搜尋到的機會。

Google 在近日 (2011年6月27~28日) 大範圍調整了 PageRank 演算法,影響網站數量非常多,結果又造成了搜尋排名重新洗牌,架站的朋友們是否感受到了呢?

玩物尚誌來說,在此之前的 PageRank 值為5,以個人碎碎念類型的部落格來說,我認為是給得太過高了,畢竟很多議題並沒有太多時間深入追蹤及寫稿,頂多就是一些初淺的討論及情緒化的見解。

這一次洗牌後, PageRank 值從5降為3,我覺得這才終於合理多了!

也有不少部落格從原本 PR=0 躍升至 2,3,4,5!

當然也有不少偷吃步的網站被大幅下修 PR 值。(可以說是懲罰嗎?!:XD)

有興趣瞭解這次 PR 調整事件的消息,可以搜尋「谷歌2011年6月大更新」或「2011 6 28 google pagerank」,就會發現幾家歡樂幾家愁。

其實 PR 只要到一個合理的數值,真實反映出網站有多少重要程度就足夠了!靠著衝高 PR 值創造的流量並不會長久,而且騙來的訪客,瀏覽停留時間也不會太久,用了偷吃步方法達到 SEO 只會浪費了自己的時間和金錢,也浪費了瀏覽者的時間。畢竟沒有人想要找重要資料的時候,卻找到一堆不相干的垃圾吧!

如果你也想知道自己的網站 PageRank 是多少,可以利用這個「PR查詢」服務。

祝各位站長與部落客朋友們,都能得到一個公平公正的 PR 值。

Homebrew 讓 Mac OS X 輕鬆安裝軟體工具

 圖片來源:morgueFile
用過 Ubuntu 或其他 Linux 的朋友,是否覺得 Mac OS X 少了些方便好用的軟體工具呢?

雖然 Mac 有很棒的 AppStore ,可以線上下載/購買安裝許多好用的軟體,不過有一些在 Linux 系統經常使用的工具,卻找不到類似 apt 或 yum 等好用的套件管理工具,可以幫忙自動安裝和移除。

例如我經常使用 wget 抓取 URL 檔案,或是使用 lftp 連到遠端伺服器上下傳資料,可惜這些在 Linux 系統很普遍使用的工具, OS X 並未內建。

幸好 OS X 和 Linux 同樣具有 Unix 的血緣,所以不少常用的工具,其實都能用原始碼進行編譯及安裝。 OS X 內建的開發環境相當不錯,提供 make 及 gcc 等需要的工具,我們只需要一套簡便的套件管理工具,協助下載原始碼及完成編譯安裝等動作。

Homebrew 是本文要推薦的工具,它使用 Ruby 語言開發,目標是成為一套簡單並且具有彈性的套件管理工具,協助使用者在 OS X 系統上安裝 Unix 程式。

Homebrew - The missing package manager for OS X

在安裝 Homebrew 之前,系統必須裝有 ruby 開發工具,一般的 Mac OS X 系統已內建 ruby ,因使用以下的指令即可安裝 Homebrew 。

ruby -e "$(curl -fsSL https://raw.github.com/gist/323731)"

安裝好 Homebrew 之後,可以用 brew 指令進行操作,常用的指令格式有四種。

更新套件清單
brew update

搜尋某項軟體
brew search 軟體名稱

安裝新軟體
brew install 軟體名稱

移除軟體
brew uninstall 軟體名稱

例如要安裝 wget ,可以輸入:
brew install wget

就可以看到 Homebrew 自動幫忙下載原始碼壓縮檔,解壓縮,執行 ./configure 設定,編譯(make)及安裝(make install),這真的太方便了。

如果遇到需要的軟體,已經無法下載檔案,該怎麼辦呢?

以 lftp 來說,現在就會遇到這種情況,所以會顯示以下錯誤:

curl: (22) The requested URL returned error: 404

這真是太悲情了!

幸好 Homebrew 的設定真是超級簡單!超級EASY!只要修改一下設定檔就可以解決。

首先用瀏覽器打開  http://ftp.yars.free.net/pub/source/lftp/ 網址,會發現問題的原因在於,檔案名稱 lftp-4.2.2.tar.bz2 已經不存在,當然無法下載;因為 lftp 已經發佈新版本,檔名是 lftp-4.3.1.tar.bz2 。

Homebrew 針對每一種軟體套件,都有獨立的個別設定檔,稱為 FORMULA ,這些設定檔位於 /usr/local/Library/Formula 路徑下。

以 lftp 工具來說,設定檔就是 /usr/local/Library/Formula/lftp.rb ,用文字編輯器打開,可以發現設定檔其實就是 Ruby 程式。以前面所提到的問題,只需要修改兩個地方,請參考以下紅色字體標示的部份。

require 'formula'

class Lftp < Formula

  url 'http://ftp.yars.free.net/pub/source/lftp/lftp-4.3.1.tar.bz2'

  homepage 'http://lftp.yar.ru/'
  md5 'ea45acfb47b5590d4675c50dc0c6e13c'

修改存檔後,再次執行 brew install lftp ,即可完成安裝。

由於 Homebrew 是免費的開放源碼軟體,諸如此類的問題未來還會不斷發生,但是它至今仍有不斷在更新及維護,只要有更多人參與使用或開發,就會協助 Homebrew 變得更好。

您可以利用以下的管道,取得更多 Homebrew 的消息,並參與討論及提供建議。
IRC (irc://irc.freenode.net/#machomebrew)
Mailing List (homebrew@librelist.com)
Twitter (http://twitter.com/machomebrew)
GitHub (http://github.com/mxcl/homebrew)

為什麼程式設計師無法有效率地工作?為什麼總是要加班?兩段程式碼幫您解惑

(一) 程式設計師為什麼無法有效率地工作?

The "pids" is a plain text file contains PIDs for important tasks.
Project manager tell you every task is *IMPORTANT*, should be done as soon as possible.
You're a programmer (also a system administrator), it's a piece of cake to change piorities.

$ cat pids
16994
17377
17378
17379

for p in `cat pids`; do renice -n -20 -p $p; done

Which process is most favorable scheduling?

(二) 程式設計師為什麼總是不斷加班?

Demo: http://jsfiddle.net/MWMBk/

var taskNum 3;
var money 10000;
var health 100;

function incoming_task({
    taskNum ++;
    taskNum ++;
}

function work({
    taskNum --;
    money ++;
}

function work_overtime({
    taskNum --;
    money ++;
    money ++;
    health --;
}

function programmer_life({
    while (taskNum 0{
        work();
        incoming_task();
        work_overtime();
        
        if (money >= 1000000{
            return "retired";
        }
        else if (health <= 0{
            return "died";
        }
        else {
            //nothing
        }
    }
}

function assert(val1val2{
    if (val1 == val2{
        alert("True");
    }
    else {
        alert("False");
    }
}

assert(programmer_life()"died");
assert(programmer_life()"retired");
// or infinite loop ?

2011年6月28日

Markdown Syntax 易讀易寫的文件撰寫格式

Markdown 的目標就是易讀易寫 (easy-to-read, easy-to-write)。

Markdown: Syntax 是由 John GruberAaron Swartz 兩位老兄建立的一種純文字格式,它是「輕量級標記語言(lightweight markup language)」,讓純文字撰寫的文件,就已經具有良好的可讀性,可以透過 E-Mail 等方式發佈,也可以方便地透過多種工具,轉換成瀏覽效果更現代化的 (X)HTML,等於是一魚多吃。

對軟體開發者來說,每天撰寫大量文件可說是家常便飯,不論是撰寫系統設計規格文件,或是透過電子郵件及論壇的討論內容,以及自己的備忘文件。有時候這些文件寫得落落長,不僅要分章節,還參雜不少超連結、程式碼和註記。

到底要用純文字(Plain Text)撰寫?還是用網頁格式(HTML)寫?其實各有利弊。用純文字寫很簡單,但美觀比不上網頁;網頁的標記語言很複雜,本身已經破壞了文件的結構,而且當發佈的平台限制必須為純文字時,又會變得不堪入目。

Markdown 讓我們魚與熊掌可以兼得,正是所謂的摸蛤兼洗褲。

簡單的文件範例
This is an H1
=============
*   Bird
*   Magic
Refer: <http://example.com/>

如果您已經使用 Dokuwiki 當協作平台,還可以安裝 Markdown Plugin ,同時支援 Wiki 及 Markdown 兩種語法,寫文件更加方便!

相關連結:

走自己的路,讓別人去說吧!

圖片來源:morgueFile
「走自己的路,讓別人去說吧!」這句話出自但丁的名著《神曲》,原文是「Go your own way; let others talk.」。

每個人從小都有很多夢想,但是生活在這個社會可不容易,我們不斷被教育要接受和屈就於現實;於是我們之中大多數的人,都開始偏離自己的路,走上那些別人認為你應該走的路。

可是,你必須清楚知道的是,你的路,並非由你或別人決定,而是來自上天的賜予,也就是「天賦」。每個人都有自由意志,可以走向其他的路,遠離你的天賦之路。

為什麼自己的路不能自己決定呢?

雖然我們每個人都有自由意志,可以決定要做什麼,但是不管我們在生命中的哪個階段,都只是學習成長的一個歷程。所以理性是有限的,決策的知識和資訊是有限的,還有來自世俗、普世價值觀、他人眼光、道德與政府法律規範,各種壓力之「罪」加諸在人的身上,讓我們總是以為自己是在該走的路上。

高中老師也許告訴你,好好念書考上熱門系所,將來才有好的收入。聽起來確實很為你著想,記得說聲謝謝,畢竟那是發自內心考量時勢的關心話語!但真正的人生導師會告訴你,你的天賦不在這些教育部三隻小豬編撰的課本上,你走錯路了,趕快回自己的路去吧!

有很多人每天痛苦工作著,明明知道這樣下去不是辦法,卻必須咬緊牙關苦撐著!但這些人明明有自由意志,為什麼要把自己逼上一條顯然不正確的路呢?問起原因有百百種,最老套的一種就是:「我上有老母下有稚兒,一家八口全靠我這雙手。」也許沒這個戲劇化,但活在21世紀,七年級、八年級總是被認為標新立異的今天,類似的理由卻還是常被使用。

有些人走在一條錯的路上,也知道自己走錯;但是將錯就錯,一路錯到底,反正有千百種理由可以一用再用。

如果把那些拿來表象的理由去除後,或許真正的理由是比較難以面對的,也就是實際上你並沒有太多選擇,你也在一堆爛選項中正確選了那個比較好的。

但追根究柢後,你之所以選項很少,極有可能是過去一直走在錯的路,讓你人生發展的選項愈來愈少,如果一直忍受錯的路,最後很可能連一個其它選項都沒有,被逼上了絕路。 (別誤會!不是指自殺,比自我了斷更絕的路,就是在一條錯的路上走完漫長一輩子)

其實,每個人都不會沒有選項,因為天賦之路一直都在那,是任何人都無法改變。只是你離它愈遠,表象能見的選項就愈少,因此你誤以為自己無路可去。

也許你曾經走偏了,而且已經走遠了,覺得要回去的希望渺茫。但只要靜下心來想一想,你終究會發現屬於自己的路,永遠不會迷路,其實你知道該怎麼走,並且清楚那裡將有滿滿的祝福。

Google持續在台灣擴大徵才

圖片來源:Google
最近台北市政府和Google槓上,手上有Android手機的台灣消費者,這下可要著急了,因為Googe App Market(軟體市集)的「付費軟體」,暫時被關閉了。而且要關閉服務多久,還沒有明確的消息。

原因請看:拒絕7天退費 被罰100萬/Google槓北市府 付費APP不賣了

不過在這個新聞事件沸騰的同時,有位Google員工投書 Mr./Ms. Days,發表了這篇「在 Google, 我們堅持的只是一種價值觀」。

其價值觀就是Google的「Do No Evil」理念,因為Google是一家成功卓越的公司,所以擁有足夠的能力,創造一個適合工程師的快樂工作環境,讓工程師可以專注於創造對使用者最好的服務,而不是為了快快能賺到錢。就像這篇文章所講的,真的要談賺錢,寫軟體還不如賣雞排(註1)。但是在Google的工程師們,是盡力在解決一項比賺錢更困難的問題「創造出好的軟體」(註2),Google以解決工程問題為導向的文化和價值觀,正式它能不斷吸引優秀工程師加入的原因。

(註1:每賣出一塊雞排,你就能得到現金。每寫一行程式,你會先得到更多BUG,再得到使用者抱怨,接著還可能面臨法律問題,最後不一定能得到現金。)

(註2:一家公司還是需要賺錢才能永續經營,但如何從使用者身上撈到錢的問題,交給更專業的經理人、行銷和業務人員傷腦筋吧。如果工程師只想著怎麼賺到錢,做出來的軟體能用嗎?!想像一下每次打開Android手機,它都強迫你先點擊十個商業廣告,才能讓你免費使用的情況。囧rz..)

這篇文章也提到Google在台灣的101總部,最近在擴大徵才,釋出包含多種工程師在內的職缺,剛畢業或想找新工作或想參觀Google的朋友們,該把握機會了。

2011年6月27日

Stack Exchange 匯集55種網路問答服務

圖片來源:http://stackexchange.com/
台灣的網友應該都聽過「Yahoo!奇摩知識+」,它是一個提供網友發問與解答問題的服務,囊括各種問題種類。

有更多的網路問答服務,是針對特定領域的問題,例如在軟體開發圈很知名的「Stack Overflow」,近來利用Google搜尋某種軟體開發技術的問題,很可能找到的前幾筆結果就包含Stack Overflow的討論。由於Stack Overflow擁有不少對技術學有專精的熱心網友,而且能夠標示出「有用」的解答,幫許多人解決找不到人可以問、花很多時間try-error的麻煩,它至少提供解決問題的一個方向。

開發Stack Overflow服務的共同創辦人,就是曾經以「Joel on Software」發表連載文章,道出軟體業各種不為人知秘辛的作者「Joel Spolsky」,他除了自身的卓越成就,也啓發了不少軟體從業人員及軟體公司。

經營Stack Overflow成功後,Joel並沒有停止創新軟體開發的腳步,2010年成立的「Stack Exchange」,再次吸引了大量使用者的目光。以下是來自「SiteLatitude」提供的數字,可以看出目前Stack Exchange的發展狀況。

這是一份針對網站「Stackexchange.com」的報告。 根據我們的分析,網站Stackexchange.com的日均訪問量為801,591次。這個網站每天的收入大約有新台幣33,181元,網站總價值大約是新台幣214,934,290元。網站的域名的後綴是「.com」,註冊名稱是「stackexchange」。根據Alexa.com的統計,Stackexchange.com的世界排名為第2,272位。 我們還檢測出這個網站使用Google網站分析工具來統計用戶資訊。該網站的Google網頁評級為PR5。該網站存放於Chicago, United States,網站的IP地址是64.34.119.12.

Stack Overflow是由Jeff Atwood與Joel Spolsky在2008年建立,將數百萬電腦程式設計師聚在一起,使這些軟體開發領域的專家可以互相幫助。這個服務的成功,讓他們獲得「Union Square Ventures」共6百萬美元的投資。因此他們在2010年8月開始建立Stack Exchange網路服務,2011年1月,短短不到一個月時間,Stack Exchange已經匯集55個網路問答服務,並累積1千9百萬次不重複訪問次數,並且不斷成長⋯

很多網路服務都能提供問與答的功能,那我們真的需要Stack Exchange嗎?

網路的資源很多,透過搜尋引擎,可以找到與輸入關鍵字相關的資料。使用社群服務,可以讓得到的資訊,是來自信任、有關聯的朋友。如果把這些現在當紅的網路服務結合起來,讓群眾的智慧,可以更有效、更有效率地幫助每個人解決問題,就是更具有價值的網路服務了。

成立 NodeJS 華文維基平台


近日由前端工程師(f2e) Clonn 發起,我們開始研究 NodeJS 相關的技術。雖然 NodeJS 愈來愈熱門,但是 Google 找到的 nodejs 繁體中文網頁,居然僅有11,300 項結果,代表著未來還有段長時間需要跟原文資料奮戰,對於一些新資訊也沒有太多消息來源。

當然抱怨資料少無濟於事,我們決定自己開始動手寫啦!最近將開始試著把 NodeJS 應用到專暗中,並將學習心得和教學文件整理保存。

以下是協作平台網址,歡迎有興趣的同好加入 (需要共同維護者請留言給我即可) 。

MySQL 疑難雜症之 mysqldump 匯出亂碼篇

較新版本的 MySQL 支元多國語言編碼的資料儲存,建立資料庫結構或查詢、匯出時,必須自己注意編碼問題。

以下以 UTF-8 為例:

my.ini 的設定:
[mysqld]
init_connect='SET NAMES utf8'
default-character-set = utf8
[client]
default-character-set = utf8

建立資料庫:
CREATE DATABASE `aa` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;

建立資料表:
CREATE TABLE  IF NOT EXISTS `aat` (
...略...
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci;

mysqldump 匯出資料:

mysqldump -u USER -p DBNAME --default-character-set=utf8 > DBNAME.sql

有些網站在開發時,並沒有正確指定編碼,採用了預設的 latin1 ,並且將 big5 的中文資料直接儲存。這種情況如果直接用 mysqldump 直接匯出,結果可能是一堆亂碼,必須加上 --default-character-set=latin1 讓匯出的資料保持正常的 big5 編碼。

mysqldump -u USER -p DBNAME --default-character-set=latin1 > DBNAME.sql

如果在匯出備份資料時,忘記加上參數,產生的亂碼資料,用 iconv 可以救回部分(以下指令示範假設匯出檔為錯誤編碼的utf8),參數 "-c" 表示忽略無法轉碼的字元。

iconv -c -f utf8 -t latin1 DBNAME.sql > DBNAME.big5.sql

匯出檔中可能存在錯誤指定編碼格式的SQL語法,可以使用 perl 指令進行替換。

perl -pi -e 's/latin1/big5/g' DBNAME.big5.sql

對於 big5 編碼的匯出檔,也可以用 iconv 轉換成 utf8 格式。

iconv -c -f big5 -t utf8 DBNAME.sql > DBNAME.utf8.sql

再進行編碼格式設定的替換。

perl -pi -e 's/big5/utf8/g' DBNAME.utf8.sql

轉換後資料若存在許功蓋問題,會在 INSERT 資料的語法看到許功蓋等字都被多加了一個倒斜線,例如:許\功\蓋\閱\。

perl -pi -e 's/許\\\\/許/g' DBNAME.utf8.sql

由於有很多中文字都存在許功蓋問題,可以寫一段 PHP Script 產生所有需要的指令碼。

<?php
$str = <<<_HTML_
么 功 吒 吭 沔 坼 歿 俞 枯 苒 娉 珮 豹 崤 淚 許 廄 琵 跚 愧 稞 鈾 暝 蓋 墦 穀 閱 璞 餐 縷 擺 黠 孀 踊 髏 躡 尐 佢 汻 岤 垥 柦 胐 娖
 涂 罡 偅 惝 牾 莍 傜 揊 焮 茻 鄃 幋 滜 綅 赨 塿 縷 槙 擺 箤 踊 嫹 髏 潿 蔌 醆 嬞 獦 佢 螏 餤 燡 螰 駹 礒 鎪 瀙 酀 瀵 騱 酅 贕 鱋 鱭
_HTML_;

foreach (explode(" ", $str) as $word) {
        echo "perl -pi -e 's/$word\\\\/$word/g' DBNAME.utf8.sql\n";
}

重新將資料匯入 mysql 時,可以加上 "-f" 參數強制忽略 SQL 語法的錯誤。

mysql -f -u USER -p DBNAME < DBNAME.utf8.sql

關於 Wii 4.2j 軟改成功的方法


手邊的一台 Wii (黑色版) 韌體是 4.2j

為了減少光碟機讀寫頭的耗損

上網找了軟改的方法

花了一些時間測試過各種方法後

發現這個搜尋結果找到的教學最管用


搜尋關鍵字:WIIDISC101-2

需要先準備1~2GB SD卡

和一顆強壯的心臟

& 請購買正版遊戲以支持優良遊戲軟體開發商 : )

關鍵字: Wii, Crack, Firmware, BootMii, cIOS, SoftChip, Priiloader, cIOSCORP, IOS36, WAD Manager, 破解, 改機, 軟改, USB

2011年6月25日

用Groovy動態產生ZIP壓縮檔

Java SDK提供一組操作很容易的ZIP函式庫(java.util.zip),可以在程式中動態產生ZIP壓縮檔,在Groovy 程式中,只要簡單地操作 ZipOutputStream 就能動態產生壓縮檔。
  • Groovlets 網頁程式提供批次檔案下載,先將內容打包成壓縮檔,方便使用者一次下載全部
  • 用 Groovy 撰寫系統維護的 scripts ,可以將舊資料或某些大量文字資料壓縮起來節省磁碟空間。
  • 程式透過網路傳送大型文字資料(如資料匯出的XML),先壓縮再傳輸,減少網路流量消耗。




本範例程式碼產生的 ZIP 壓縮檔內容 (1)

本範例程式碼產生的 ZIP 壓縮檔內容 (2)

開啟其中一個 .txt 文字檔

2011年6月24日

微軟協助將NodeJS移植到Windows平台


對於Windows平台的網站開發者來說,這真是一個好消息!新一代的高效能網站開發框架NodeJS,即將發行原生的Windows版本。

NodeJS採用V8 JavaScript Engine(Google Chrome瀏覽器就是採用這款高效能引擎)實現事件驅動(Evented I/O),有別於傳統網頁伺服器採用多執行緒(multi-threaded),事件驅動架構的Web Server更容易達到高負載量。

有趣的是,網頁開發者採用NodeJS,只需要熟悉一種程式語言---JavaScript。因為在前端以JavaScript實作AJAX使用者介面,而後端的動態網頁程式,則同樣使用JavaScript撰寫,不需要再學習PHP、Java、C#等其他程式語言。

NodeJS的開發社群正在快速成長,因為它確實是一個高效能、愈來愈穩定、可行的解決方案, 將會有愈來愈多大型網站採用。

不管在Mac OS X或Linux平台,安裝NodeJS只需要簡單的編譯指令。可惜的是,目前在Windows平台需要搭配Unix模擬環境Cygwin軟體,才能使用NodeJS,但這種非原生的執行方式,讓效能及穩定性都打了折扣。

幸好NodeJS的優勢也被微軟正視,在Node部落格提到,微軟協助將NodeJS移植到Windows平台,開發者可以期待官方原生版本的 node.exe 發行。

未來在Windows 2003以上的伺服器環境,將有機會同時以IIS+NodeJS建構高效能網站服務,而微軟的雲端平台Windows Azure也極可能支援NodeJS。

看到這個消息時,真是徹底被微軟的善心感動,此微軟非彼邪惡微軟,再次應證 "No one ever got fired for buying Microsoft." 這句話。
(不過,我還是會繼續使用Linux運作NodeJS,否則哪天微軟不再支持NodeJS移植版,專案不就垮一半了?!)

歡迎加入 NodeJS Taiwan Facebook粉絲團。

延伸閱讀:

2011年6月21日

文摘:選個程式語言好創業

Choosing a Programming Language and Framework for Your Startup》作者Tony Karrer,是TechEmpower的CEO兼任CTO,這家網站開發公司位於洛杉磯,擁有e-Learning領域的頂尖技術。Kareer講授資訊科學11年,並有20年擔任CTO的經驗,他在多家財星500大企業從事社群媒體(social media)、e-Learning及績效支援(Performance Support)工作。

日前在洛杉磯資訊技術長論壇(LA CTO Forum),他們做了一場有趣的簡報,關於那些採用GroovyGrails開發框架的新創事業。對於創業技術長們,該如何選擇程式語言和開發框架,有了一場精采的討論,以下是從討論產出的一些見解。

清楚你該何去何從

在實際開發任何軟體之前,必須先做足功課,再來思考選什麼語言及框架。
(譯註:有很多人做專題或專案,一開始就不斷思考、嘗試有趣的技術,並不斷圍繞這些技術進行辯論,但是並沒有深入去瞭解這些技術,或是仔細去思考要做什麼產品。)

盡可能貼近功能需求

假設你的產品或服務,功能方面需要內容管理、組織會員的功能,找一個功能接近的軟體(通常是自由軟體)當基礎,例如DrupalJoomla等架站軟體,幾乎就能將基本功能都搞定,開發團隊可以把時間用在那些影響產品或服務成敗的關鍵。如果你選擇這樣做,在你的選擇的技術組合中,就至少會包含這些軟體本身的開發語言和基礎框架(如PHPCodeIgniter)。

同理,如果你需要開發一組函式庫,而某一種語言已經有現成的程式庫,選那個語言就能省下一些力氣。(例如想要整合Plurk功能,而Python提供的plurkapipy正好可以滿足需求。)

如果你想發展行動應用軟體,或是以某個程式庫為基礎發展應用,這時候你選擇的語言和框架,就必須跟某樣東西緊密的結合在一起。舉例來說,當你的Web-based應用程式,想要在PC瀏覽器有豐富的畫面元件,而在iOS或Android手機上,可以操作起來就好像專屬開發的App應用程式,就可以考慮Sencha(Ext JS開發者)的解決方案。

考慮那些人

那些已經存在的程式碼,還有撰寫那些程式碼的人,他們瞭解哪些程式語言,會影響最終的選擇。你組織的那些人或股東們,他們可能有特定的程式語言偏好或已經擁有的才能,有時候你想找來投資者(或共同創辦人),你或許需要使用某一種程式語言完成工作。(有些創投目前很喜歡Ruby)

常見的迷思

迷思一、你如果用Ruby開發將可以快10倍

確實用Ruby on Rails或Groovy on Grails,以及其他許多敏捷開發框架,都可以讓軟體專案開發的速度明顯加快。但是別以為原本要花30天的專案,現在只要3天就能完成,這些進步的開發框架,讓開發團隊能省下一些時間,也許是整個專案之中1~2成的部分,可以提升個3倍開發速度。但別忘了真正影響專案開發時間的因素還有很多,撰寫程式只是其中一小部分。

(譯註:雖然用了先進的開發框架,並不會讓專案進度從三輪車變火箭,但如果已經有那麼多進步的框架和工具,你身為CTO卻仍堅持要用那些陳年的老方法,就是不重視開發人員寶貴的時間、以及對技術學習的熱情;許多不必要的加班可能因此產生,例如延後下班好幾個小時,只為了解決一個難搞、不在進度之內的複雜設定。因此技術雖然不是重點,但CTO選擇了什麼樣的技術組合,最後就會吸引什麼樣的人一起共事。明白的說法是,如果CTO堅持用陳年的蠢方法開發軟體,就會擁有一批不願意求進步的蠢蛋開發團隊,最後只好採取更先進的有效管理方法,但仍然造不出卓越的軟體。)

迷思二、用Ruby就對了

StackOverflow有一篇討論,從2011年這個時間點,比較Rails及Grails兩種開發框架。其中被評選為最佳解答的回覆這麼說:
  • Rails的水平擴充(scale)不如Grails
  • Rails在NoSQL替代方案稍微贏了一些,但Grails即將趕上 (譯註:此處講的NoSQL是MVC框架中Model對NoSQL資料庫的支援度)
  • Rails有更多擴充套件(Plugins)
  • 此時此刻Rails更成熟且有更多功能特點(features),因為它發展比較久
  • Rails對REST(一種Web Services的實作方式)支援非常好
  • 關於Rails的"大"站比Grails多
  • 在JVM環境Grails的整合比JRuby更好
2011年的TIOBE程式語言排名,你可以看到趨勢,Ruby仍佔有一席之地。(譯註:但Java仍大幅領先,PHP也維持前五名,C#持續熱門,Lua大幅晉升前10名,JavaScript也快逼近了,而古老的C/C++仍有屹立不搖的地位。Ruby/Rails是很棒的程式語言/開發框架,但可不要把它當成救世主。)


眉批:CTO掛上一個「長」字輩,決策往往是牽一髮而動全身,對技術保有開闊的視野更顯得重要。
lyhcode by lyhcode
歡迎轉載,請務必註明出處!