網頁

搜尋此網誌

2011年11月28日 星期一

Learning SQL

SQL語言是使用資料庫時的基礎能力,對一個資料庫管理系統操作就是「說」SQL語言! 這裡介紹一本學習SQL語言的入門書籍,由歐萊禮(O'Reilly Media)出版,碁峰資訊發行,非常適合想學習SQL語言的初學者。

Alan Beaulieu著,張偉超、林青松編譯,陳佳新審校,SQL學習手冊(第二版),台北:碁峯資訊,2011。譯自:Learning SQL, 2nd Edition (Master SQL Fundamentals), O'Reilly Media。

SQL語言可分為三類:
  1. SQL結構描述陳述式(SQL schema statements)
    有關建立資料庫(資料表、索引、條件約束),通常是資料庫管理員要熟悉的工作內容。
  2. SQL資料陳述式(SQL data statements)
    建立、操縱和擷取儲存在資料庫中的資料,通常是程式開發人員與資料庫使用者,以及資料庫管理員必須熟悉的工作內容。
  3. SQL交易陳述式(SQL transaction statements)
    在多使用者的環境之下,用來開始、結束和回復交易,通常是程式開發人員與資料庫使用者必須熟悉的工作內容。
作者將重點放在講述SQL資料陳述式,全書總共15章,用了前面12章說明資料操作的語法,因此這本書適用於程式開發人員與資料庫使用者。另外,這本書以MySQL做為範例操作的資料庫系統,由於MySQL自由免費,而且安裝與使用都很簡單,因此沒有理由學不會SQL語言!

注意到,書中使用MySQL 6.0版本,目前2011年只有MySQL Community Server 5.5版本。 從Wikipedia搜尋發現,MySQL使用新的發行模型(New Release Model),6.0.11是最後一版,詳細可以參閱MySQL開發週期

###

延伸閱讀
Database 資料庫

2011年11月11日 星期五

System Analysis and Design 系統分析與設計

前些日子研讀系統分析與設計(System Analysis and Design),有個問題讓我感到疑惑,為何系統分析與設計的書籍都是討論「資訊系統(Information System)」呢? 若是如此,那書名應該改成「資訊系統分析與設計」。因為我認為「系統」是一個很大範圍的主題,不應該只侷限於資訊系統的分析與設計。同樣介紹一本書,資訊如下所示,聽jasper312說這是「系統分析與設計」領域的聖經本,各大考試的題目與解答都從參考這本喔!

吳仁和、林信惠,系統分析與設計—理論與實務應用,台北:智勝文化,2010。

書籍只討論資訊系統的理由,我認為有二個原因。第一 ,討論資訊系統比較簡單容易,目前資訊系統的分析設計工具與方法很多,因此討論會比較具體且容易。第二,萬物皆是「資訊系統」, 自然界中不外乎存在三種:物質、能量與資訊,討論資訊系統也就等於包含所有的系統。雖說是如此,但系統分析與設計的書籍看到最後,好像就是一本「軟體工程(Software Engineering)」的書籍,變成都是講述軟體開發流程。關於這點,希望未來能有書籍從不同的角度去討論「系統分析與設計」。

「系統分析與設計—理論與實務應用」這本書從兩個主要技術方法討論系統的分析與設計:「結構化技術」與「物件導向技術」,各別使用5章與6章的篇幅說明。結構化技術是將資料與流程分開考慮,而物件導向技術則是將資料與流程封裝成物件處理。除了這兩種技術外,還有其他如元件導向、服務導向等新技術。

整本書的架構如下:
  • 第01章 資訊系統開發概論
  • 第02章 資訊系統開發模式
  • 第03章 需求分析
  • 第04章 結構化技術
  • 第05章 結構化分析與設計-流程塑模
  • 第06章 結構化企業流程塑模個案
  • 第07章 結構化分析與設計-資料塑模
  • 第08章 結構化企業資料塑模個案
  • 第09章 物件導向技術
  • 第10章 使用個案塑模
  • 第11章 物件互動行為塑模
  • 第12章 使用者介面塑模──結構與狀態
  • 第13章 物件資料結構塑模
  • 第14章 系統元件與結構塑模
  • 第15章 結論與展望
若想對系統分析與設計有所認識,我想這是一本入門的參考書,淺顯易懂。另外,建議搭配一本軟體工程的相關書籍一起閱讀,對於資訊系統開發將會有更深入的認識。

###

延伸閱讀
Unified Modeling Language 統一塑模語言

2011年11月8日 星期二

Golden Rules for Writing E-mails 英文書信寫作

介紹一本實用的英文書信寫作書籍,這是「LiveABC互動英語教學集團」出版發行的書本和互動光碟,書中包含35篇主題的書信,內容除了講述撰寫英文書信的格式外,也詳述200個左右的常見錯誤說明,推薦大家這本書非常實用。

吳嘉玲,E-mail寫作不出錯(Golden Rules for Writing E-mails)全新增修版,台北:希伯崙公司,2008。

以下記錄電子郵件與一般書信的書寫格式重點。

一封電子郵件(e-mail)通常有9個項目:
  1. From:寄件人
  2. To:收件人
  3. Cc:副本,是carbon copy的縮寫
    Bcc:密件副本,是blind carbon copy的縮寫
  4. Subject:信件主旨
  5. Attachment:附加檔
  6. Salutation:稱謂語
  7. Body:信文
  8. Closing Segment:結語
  9. Complimentary Close:結尾敬語
 一般書信(非電子郵件)包含9個項目,由信件上至下依序為:
  1. Letterhead:信頭
  2. Date:日期
  3. Addressee:收信人
    Address:收信人地址
  4. Salutation:稱謂語
  5. Subject:主旨
  6. Body:信文
  7. Closing Segment:結語
  8. Complimentary Close:結尾敬語
  9. Signature:簽名
 另外,商用書信的三大格式分別是:
  1.  Full-block Form齊頭式
  2. Semi-block Form半齊頭式
  3. Indented Form縮格式
###

2011年11月2日 星期三

Beginning Programming 學習程式設計

如何學習一個程式設計?這個問題學校教育似乎沒有好好告訴我們青年學子們。以我自己的經驗來看,學校的程式設計課程大部分都是講述程式語法的使用,我認為這是錯誤的方法,教育程式設計的正確方式是:傳授程式設計的核心概念。

以下分享自己在程式設計學習之路的心得,期望能幫助正在學習程式語言的青年學子們。

首先,我們必須知道程式語言(Programming Language)的意義為何?我認為程式語言是「幫助人類完成處理資料的目的」,重點在於「處理」與「資料」兩個部分。

開始學習之前,根據「工欲善其事,必先利其器」原則,必須先準備好開發工具,不過這又關係到程式語言的種類。個人認為選用自由軟體的開發工具作為學習較好,例如EclipseNetBeans,也可以使用微軟的Visual Studio的Express版本。重點不在於開發工具和語言種類,這些都只是工具,學習程式設計在於程式設計本身!

開發工具有了,第一步先了解「資料」這個部分,你必須先認識資料型態,常見的資料型態有:整數、浮點數、字元、字串等, 這些屬於基本資料型態。由這些基本資料型態組合成的資料型態有:陣列、結構、類別等,稱為複合資料型別。學習的核心概念在於認識與瞭解每種資料型態的特性,什麼時候適合採用哪種資料型態,更進階學習則屬於「資料結構(Data Structures)」的領域了。

第二步是了解「處理」這個部分,程式處理資料不外乎兩種模式:重複與判斷。重複(或稱反覆)在程式語言中是迴圈 ,人類利用迴圈自動化處理重複的工作,一般來說有:for迴圈、while迴圈、do-while迴圈、foreach-in迴圈等,用於處理相同的動作。判斷(或稱選擇)在資料處理中依據資料狀態做不同的動作,通常有:if-else判斷、switch-case判斷等。重複與判斷互相搭配使用,已經足夠幫助我們完成處理資料的目的,同樣的,學習的核心概念在於認識與瞭解每種重複與判斷的特性。更進階學習則屬於「演算法(Algorithm)」的領域了。

再來,更進階一些的就是函式(副程式)的觀念,程式寫多的會發現程式碼重複,因此,你可以利用函式將常用的功能包裝起來成為函式,減少後續修改維護的麻煩。更進階的學習則是使用程式庫(library)與開發程式庫。

資料型態、重複與判斷這三類程式語言的基礎知識,如果可以掌握好,我相信你已經有程式開發的基礎能力。至於其他像是物件導向(Object-Oriented, OO)這個部分,我認為這是屬於更進階的程式設計學習,是讓你成為真正的「程式設計師」。

物件導向其實是程式語言的一部分(對於物件導向的語言來說,目前流行的程式語言時之八九都是OO),很難抽離去獨立學習程式語言。因此我建議剛開始學習程式語言,重心放在資料型態、重複與判斷這三類程式語言的基礎知識,物件導向若不明白以後再學習,千萬不要因為不懂物件而受挫,學習程式設計真的是很有趣的一件事情!

###

延伸閱讀
Web Programming Language網頁程式語言

2011年10月27日 星期四

Server Architectures 伺服器系統架構

伺服器(Server)在現在的網路世代非常重要,所有服務都必須由伺服器提供,不過伺服器的組成結構是什麼,對網路使用者而言可說是虛無飄渺像一朵雲!這次介紹這本「Server Architectures」,提供技術決策者(technology decision-maker)與系統架構師(system architect)認識伺服器的組成架構,如此在爾後的系統規劃上能有更高層次的視野。

 這本書以目前來看稍微舊了一些,第一次在2000年以法文發行,我買的這本書是2005年以英文版發行,並加入一些新的內容(2002至2004的技術背景),也許在今日科技技術快速變遷時代,部分的內容已成為過去式,但是其中伺服器架構的核心概念仍具有學習價值!


René J. Chevance, "Server Architectures: Multiprocessors, Clusters, Parallel Systems, Web Servers, Storage Solutions", Elsevier Digital Press, 2005.

這本書分成兩個部分,主要有三個主題,先介紹伺服器的組成硬體(CPU, Memory, I/O)與軟體,接著介紹伺服器系統的架構,最後說明選擇架構的效能評估標準。整本書的目錄如下:
  • Part 1: Architectural Options and Technology Evolution
    • 1 Processors and Memory
    • 2 I/O
    • 3 Evolution of Software Technology
  • Part 2: Systems Architecture Options
    • 4 Symmetrical (Tightly-Coupled) Multiprocessors
    • 5 Clusters and Massively Parallel Machines
    • 6 Data Storage
    • 7 Systems Performance and Estimation Techniques
    • 8 DBMS and Server Architectures
    • 9 The Terminology of High-Availability Systems
    • 10 Hardware and software Solutions for High Availability
    • 11 Selection Criteria and Total Cost of Ownership
    • 12 Conclusions and Prospects
認識伺服器架構之前,必須對更高層次的系統架構(Systems Architecture)有基礎的認識,書中將系統區分成兩類,注意這是以多處理器(multiprocessor)的角度來看:
  • Tightly-coupled,或稱為Symmetrical Multiprocessor (SMP)
    在一台主機上有多個處理器,只有一個作業系統,各個處理器共享所有的系統資源(Memory與I/O裝置)。所謂Symmetrical是指每個處理器在作業系統中都是具有相同能力的意思。
  • Loosely-coupled
    由多個獨立主機互相連接的系統,每個主機有各自獨立的資源(處理器、Memory與I/O裝置)與作業系統,系統中的每個主機稱為節點(node),各個主機之間通常沒有共享記憶體資源。代表的系統架構有:叢集(cluster)MPP(Massively Parallel Processing),也是分散式系統(distributed system)的概念之一。
有了這些基礎認識之下,伺服器通常會有容量的議題存在,因而需要擴充性(scalability)。伺服器的擴充有兩個維度:
  • Scale-up,或稱vertical growth。
    在一個主機上增加資源,增加處理器數量、記憶體、儲存容量。
  • Scale-out,或稱horizontal growth。
    增加系統中的節點數量,進而擴充整體系統的容量或效能。
上述只是稍微講述伺服器架構的基本觀念,還有很多知識需要進行研讀,後續再撰寫文章介紹。
###

2011年10月22日 星期六

Drive: The Surprising Truth About What Motivates Us 動機

這本書是討論動機的真相,如同原文書名「Drive: The Surprising Truth About What Motivates Us」,動機是行為的驅動力。研究指出,過去認為的動機論(原理、理論)與真相之間有著錯誤,導致「激勵制度」建築在有問題的動機論之上,進而產生一些深信不疑的觀念。

丹尼爾‧品克(Daniel H.Pink)著,席玉蘋譯,「動機,單純的力量(Drive: The Surprising Truth About What Motivates Us)」,台北:大塊文化,2010。

科學研究指出動機有三種驅力:
  1. 生理上的驅力:食物、性。
  2. 外在環境的驅力(外在誘因):獎勵懲罰制度(胡蘿蔔和棍子)。
  3. 工作的績效表現(內在激勵):滿足感、成就感、樂趣。
不過在1940年代,科學界普遍認為只有前兩種驅力存在(雙驅力理論),所幸有教授哈利‧哈洛(Harry F. Harlow)與研究生愛德華‧戴西(Edward Deci)這兩位先鋒的研究,動機的第三種驅力逐漸受到重視,讓我們對於人類行為有了更正確真實的解釋。

激勵1.0:人類是生理動物,努力是為了求生。
激勵2.0:人類除了生理驅力,也會對環境中的獎懲做出回應。
激勵2.1:加入道格拉斯‧麥葛瑞格(Douglas McGregor)的學說,主張人類有更高層次的驅力。
激勵3.0:從「I型行為」做基礎,強調內在激勵的第三驅力。

作者提出「I型」與「X型」 兩種行為的觀點,「I型」象徵內在(Instrinsic),指內在驅力大於外在誘因的行為,而 「X型」象徵外在(Extrinsic),指外在誘因大於內在驅力的行為。作者認為「I型行為」的優點比「X型行為」的優點要多,建議我們朝著「I型行為」學習。

I型行為有三大要素:自主(Autonomy)、專精(Mastery)、目的(Purpose)。當這三個要素具備的時候,內在驅力將大於外在驅力,因而產生「I型行為」。

整本書從動機論切入,探究目前企業的激勵制度,作者認為目前工作型態的轉變,已由過去強調利益目標的改變為以內在驅力為導向的工作內容(例如創新、目的感...),激勵制度已經不適用於這個時代,我們必須塑造適合「I型行為」的環境。

###

2011年10月17日 星期一

Linux Filesystem Hierarchy 系統架構與目錄

用過微軟Windows系統之後,看到Linux的檔案系統(File System)還真是不習慣,兩者之間有些差異,我認為這是作業系統的設計觀點不同導致,真正的答案還需要蒐集求證才會知道。

有關Linux檔案系統的書籍,目前大概只有邱世華先生(Juergen S.H. Chiu)撰寫的這一本,很可惜的是已經絕版,強烈希望再版並建議添加新內容,這是難得一見的好書。作者提到一個重點:「基本上,Linux的精神就是要將所有作業系統中的資訊,全部都變成檔案,以方便管理。」由此可見檔案系統的重要性!了解檔案與目錄的架構有助於我們認識Linux作業系統。


邱世華,Linux系統架構與目錄之解析, 台北:悅知文化,2008。

由於Linux是自由開放原始碼的作業系統,各廠商推出不同的Linux版本有所差異,因此造成系統檔案架構而有所不同,所幸差異不大,加上目前已經有Filesystem Hierarchy Standard (FHS)的標準規範Linux檔案架構,學習起來不會太困難(因為有參考資料)。另外,你也可以使用man hier指令顯示目錄階層的說明,這個指令非常實用。

目錄中最為重要的就是根目錄(root directory),這是檔案系統的開始位置,在「Linux系統架構與目錄之解析」也有提到根目錄是怎麼產生的由來,除了告訴我們是什麼,還讓我們知道為什麼。

重要的目錄還有虛擬檔案系統(Virtual File System, VFS)的部分,所謂VFS是指不存在於實體的檔案與目錄(不佔磁碟空間),存在的目的是為了操作作業系統,記得前述「所有作業系統中的資訊全部都變成檔案」的觀念,VFS就是用來做這件事情。重要的目錄有:/dev、/proc與/sys三個目錄,分別代表:裝置(device)資訊、行程(process)資訊與系統(system)資訊。

作業系統執行檔的目錄則是:/bin、/sbin、/usr/bin與/usr/sbin四個目錄之中,usr目錄的檔案通常是非必要性,大多屬使用者安裝的共用指令檔案,注意到usr不是user的縮寫,而是Unix Software Resource (或 UNIX source repository) 的縮寫,其中sbin目錄則用於系統管理之用(system binary),這裡類似於Windows中的C:\WINDOWS\system32目錄的功能。此外,使用者安裝的應用程式,則是位於/usr/local/bin目錄中,類似Windows中的C:\Program Files目錄的功能。

有關軟體「設定」的目錄是:/etc目錄,包含各類程式服務執行的設定參數,檔案目錄的數量相當多,所以才稱為「etcetera directory」。

感謝邱世華先生,您序中提到:「重點就在要做的事情貢獻大不大,是不是自己要的,這是唯一重要的事,只要做的事是對的,就一定會有人欣賞。」我認為世界就是需要有這樣的人、做這樣的事!

Delight Press
請再版,好嗎!

其他參考資料:https://wiki.debian.org/FilesystemHierarchyStandard

###

2011年10月13日 星期四

Bourne Again SHell 命令列介面

最近重新開始學習Linux的Command-line Interface (CLI)使用操作,過去使用Linux的經驗是Mandriva或Fedora,這次選擇的則是Ubuntu 11.04桌面版的作業系統,因為安裝方便容易。

一般來說,Linux上的CLI都是bash的「殼(shell)」,bash全名是Bourne Again SHell,bash的前身是Bourne Shell(通稱為sh),除了bash與sh之外,還有其他shell提供使用者操作作業系統。

相關知識可以在GNU Bash網站取得:http://www.gnu.org/software/bash/,或是參閱「Linux Shell程式設計實務」一書,這本書偏向Linux管理的程式撰寫,不過從基礎到進階的操作都有提及到,我推薦這本書給大家。

臥龍小三,Linux Shell程式設計實務,台北:精誠資訊:2009。

查詢Linux用的Shell是哪一種的指令:echo $SHELL
Ubuntu 11.04桌面版是bash,執行檔是/bin/bash

查詢Bash Shell的版本(從Shell變數的值可以知道):echo $BASH_VERSION
或是使用指令:bash --version
Ubuntu 11.04桌面版與伺服器版的bash都是4.2.8(1)-release版本

查詢Bash Shell內建的命令有哪些:help
或是參考http://www.gnu.org/software/bash/manual/html_node/Builtin-Index.html#Builtin-Index

注意,Bash Shell的命令是區分大小寫(case-sensitivity)!。換句話說,Linux的檔案系統是區分大小寫的(命令是對應到執行檔),不同於Windows檔案系統是不區分大小寫。

除了內建命令之外,還有位於/bin路徑與$PATH路徑之下的指令,這些路徑下的執行檔就相當多了,也包含自己安裝的應用程式指令。CLI的操作其實不難,熟悉後就得心應手了。
###

2011年9月1日 星期四

Stay hungry stay foolish 求知若渴,虛心若愚

神一樣的傳奇。「賈伯斯本身就是一個傳奇,比任何虛構的小說都更精彩。」李開復說。

感謝李開復先生,策劃這本書的誕生,讓我們可以閱讀這本賈伯斯傳記,故事精彩而且好讀,讀完之後我更堅信自己的想法,一定做自己想要做的事情、喜歡的事情、擅長的事情,追尋「求知若渴,虛心若愚」的精神。

本書共分9章,從賈伯斯回歸蘋果的那天開始說起,之後從蘋果創立的過程開始敘述,直到最近2011年6月發生的事情,整個故事其實都是圍繞著賈伯斯與蘋果的人事物,也提及一些重要人物:Jonathan Ive(產品設計), Jon Rubinstein(硬體工程), Avadis Tevanian(作業系統軟體),這些A+的人讓Apple更為傳奇。書中收錄一些賈伯斯語錄,相當具有「警世」作用。

這是一本值得推薦的書,推薦給想要改變世界的人。
王詠剛、周虹,世界跟著他的想像走:賈伯斯傳奇,台北:天下遠見,2011。

賈伯斯 (部分):
  • 我非常幸運,因為我在很早的時候就找到了我真愛的東西。
  • 有時,生活會拿起一塊磚頭在你腦袋上猛拍一下。不要失去信心。我們清楚,我之所以能夠一直堅持,唯一的理由是,我熱愛我所做的事情。
  • 我們沒有機會去做很多事情,而且,每一件事都要做到完美。因為,這就是生命。生命是短暫的,你會死去,不是嗎?既然我們選擇用我們的生命去做這件事,那最好做到完美,最好值回生命的價值。
  • 有時候人們會擔心自己將會失去某些東西。避開這個念頭的最好辦法是,記住自己將要死去。你已經了無牽掛,沒有理由不去追隨自己的心。
  • 你在憧憬未來時不可能串聯起以前累積的點點滴滴,你只能再回顧過去時這麼做。所以你必須相信,當前累積的點點滴滴,會在未來的某一天串聯起來。你必須相信某些東西─你的勇氣、目的、生命、因緣等等─相信它們會串聯起你的生命。這會讓你更有自信追隨自己的心,甚至指引你不走尋常路,使你的生命與眾不同。
  • 時間有限,不要將時間浪費在重複他人的生活上。
###

2011年8月5日 星期五

Are Your Lights On 你想通了嗎

介紹解決問題的經典著作,這本書是「真正的問題是什麼?你想通了嗎?」原著書名:Are Your Lights On? How to Figure Out What the Problem RELLY Is,於1990年首次出版,中文版由城邦出版集團於2005年第一次發行。

唐納德‧高斯(Donald C. Gause)、傑拉爾德‧溫伯格(Gerald M. Weinberg)合著;蘇耿弘譯,「真正的問題是什麼?你想通了嗎?:解決問題之前,你該思考的6件事」(第二版),台北:經濟新潮社,2010。

整本書如同書名所說:解決問題之前,你該思考的6件事。這6件事分別是書中的6章,總共分成20篇。作者用一些故事說明解決問題的觀念,淺顯易懂,一些觀念甚至有違背我們的常識,但卻是十分有道理,不愧是問題解決的經典著作。

內容架構如下所述:
  • 第一章,問題是什麼?
    • 誰有問題?你認為問題的本質是什麼?
    • 問題往往來自於期望和感受之間出現了落差。
  • 第二章,這是什麼問題?
    • 不要把別人解決問題的方法,當成是問題的定義,尤其是當解決方案是由你自己提出的時候。
    • 如果你很輕易就解決了別人的問題,那麼,他們將不會相信你解決了他們真正的問題。
    • 你永遠無法確定自己是否已經取得了正確的問題定義,即使問題已經被解決了。
    • 你永遠無法確定自己是否有了一個正確的定義,但絕不要放棄去試著追尋一個。
  • 第三章,真正的問題是什麼?
    • 每一個解決方案都是下一個問題的根源。
    • 某些問題最難處理的地方就是去意識到它們的存在。
    • 如果以你對問題的了解,你想不出至少三個可能出錯的地方,那麼,你就不是真的理解這個問題。
    • 每個新觀點都會引發一個新的不合身(misfit)。
    • 一旦你用文字來描述一個問題,請不斷調整你的遣詞用句,直到它進到每一個人的腦袋裡為止。
  • 第四章,這是誰的問題?
    • 不要急著幫別人解決問題,當他們自己就可以處理得很好的時候。
    • 如果這是他們的問題,就讓它成為是他們的問題。
    • 如果一個人是因為職位而被迫處理和他無關的問題時,你要做的就是─讓他的問題也產生關係。
  • 第五章,問題是從哪來的?
    • 問題的起源通常和你自己大有關係。
    • 在這世界上有兩種人,一種人會做事,另一種人則是找事情給別人做。
    • 問題是誰出的?他的企圖是什麼?
  • 第六章,我們真的想解決它嗎?
    • 不管看起來如何,人們其實很少真正知道他們需要的是什麼,直到你給了他們要求的那些東西。
    • 到了最後的分析階段,其實沒有多少人是真的希望他們的問題被解決。
    • 我們永遠沒有足夠時間可以把事情做對,不過,我們總有足夠時間可以把事情重做一遍。
    • 我們永遠沒有足夠時間思考自己是否需要它,不過,我們總有足夠的時間可以後悔。
    • 魚,總是最後一個看到水的。
我們每天生活都會遇到問題,而書中的觀念讓我們可以正確地解決問題,這是一本值得一讀再讀的經典,推薦。

###

熱門文章