大貓共和國

Meow

Learn Haskell the Easy Way

| Comments

今天晚上是台北Functional Programming User Group第一次聚會

出乎意料地,這次聚會報名非常迅速的額滿了,而其中不乏函數語言高手。相當期待今晚與各位認識 :)

因為是第一次聚會的關係,我把難度設定的較為簡單,試著以比較有趣的方式,分享Haskell語言的一些基礎元素。希望讓從未學習過函數式語言的人,也能對Haskell有基本的認知。

Haskell過去給人的印象,或許總是抽象、數學、難以理解。在分享中,我會Demo製作中的Haskell Warrior專案prototype。希望以遊戲的方式,破除大家對於Haskell不易學習的印象。歡迎各位高手給予批評指教。

在此先附上投影片:

[OSDC12]相依性管理 - 以Ruby開發為例

| Comments

很高興今年在OSDC有機會跟大家分享一些想法。

今年的OSDC讓我學到許多東西,聽到許多前輩精彩的分享,也讓我了解自己在present方面的不足之處。希望下次有機會分享時,能講的更有趣、更清楚、更有深度一些。

(我Lighting talk講惡搞的東西好像都比較有梗….冏rz)

但另一方面,高階語言的相依性管理是我一直想討論的議題,我還是認為自己傳達了一些重要的東西。許多人(Ruby開發者)應該都用過我介紹的工具,但或許不是每個人都深思過為何開發流程如此順暢。正因軟體開發是如此的複雜,我們更需要各式各樣的工具避免開發者犯錯,降低開發阻力。尤其是開源專案,為了讓其他人容易貢獻,讓初學容易從中學習,更需要方便的流程讓任何有興趣的人迅速上手。

附上我的投影片:

如何定義 “會” XXX 程式語言

| Comments

這是一篇我在Soft_Job版回應的文章。

其實我平時是不逛Soft_Jobs版的,寫這篇文章是因為女友在PTT看到這個主題,好奇我對於這件事的想法。開始動筆後不小心越寫越長,加上那陣子比較忙,結果花了十幾天才段段續續寫完。也感謝女友發揮編輯專業幫我潤稿 :)

以下保留BBS的排版風格,原文轉載於此。

作者: yzugsr (Big Cat) 看板: Soft_Job
標題: Re: [討論] 如何定義 "會" XXX 程式語言
時間: Sun Apr  1 23:43:02 2012


面試一個程式設計師時,要注意的面向很多
像是學習能力、溝通協調能力、實作能力…等等

在下是一名阿宅工程師,有時會需要一起面試未來的同事
在這些面向之中,我個人最重視實作和程式語言的部份(其他部份自然也有其他人把關)

以下就「Coding能力」、「語言的概念」、「語言的細節」、「函式庫的使用」幾項
與大家分享一下我在面試時會注意的事

# Coding能力

個人認為測驗Coding能力最有效的方式是「紙筆測試」
也就是不靠電腦/編譯器/除錯器的狀況下,請對方當面完成一段精簡的程式

有人覺得這樣考太難,面試考紙筆寫程式太殘酷
我聽聞不少公司會這樣考(ex. Facebook, Google, 國內一些軔體公司)
約耳趣談軟體中,也有一篇談論到這樣的測驗方式 http://goo.gl/YSCGy
我的標準也比約耳等人要寬鬆許多

拿約耳書上用C語言來考字串反轉的例子說明好了
我會在白板上寫下 void reverse(char * s),然後提問:

(1). 請實作將字串原地反轉的函式,不得呼叫其他函式
(2). 承上,不得進行動態記憶體配置
(3). 承上,不得使用數值(numeric)型別及運算

並且告訴對方:
不用緊張,沒有一次寫對沒關係,許多人都無法一次寫對。
但希望你能認真思考、除錯。

我會先從(1)問起,如果對方寫對,就再加上(2)和(3)的限制
如果是C語言高手,你給他(1)的限制,他通常會精簡的直接寫出(3)的答案

如果有錯誤,我會告訴面試者會出現什麼樣的錯誤
(Ex. Segmentation fault, compile error)
再詢問對方遇到這種狀況會如何除錯

P.S.提問者至少需要能夠人腦compile&emulate這些程式
    我可以在C/C++/Java/Ruby/Python上做到
    當然…不一定是考同樣的題目

我認為這樣的測驗可以看出許多東西(視題目的性質而定):
邏輯、思考方式、演算法、抗壓性、對寫程式的熟悉程度
我相信在面試的手法中,這樣做最能直接看出寫程式的實力

# 語言的概念

每個語言都是由若干概念組成的,先從一個例子開始說明吧:

  當一個只會C的人初學Java時,可能會碰到相當的瓶頸
  因為他不只學習了新的語法,還接觸了各種新的概念
  包括object oriented, garbage collection, class, interface, …

  當他再學習C#時,他會發現他只需要學習Java一半的時間,就能熟習C#的基本概念
  在看到某些設計時,他會想到:「喔喔,C#也有類似的設計」

  有一天他突然對腳本語言有興趣,所以他學習了Python,然後又遇到了撞牆期
  他同時接觸了以indent為block的語法
  還要學習dymanic typed, duck typing其實相關的設計方法

  當這個人再去學習Ruby時,他會發現他只需要學習Python一半的時間就學會基本
  當他再學習Lua時,他發現他只需要半天就可以看完語法,可以寫些簡單的小程式了

  數年後,他又因為興趣開始學習Erlang
  第一次接觸到Single-assignment, Functional Programming
  要入門又有好長的一段路要走

我認為重要的不是「會使用多少語言」,而是「對各種概念有多深的了解」
如果對方說會C++和Python,我會問他覺得兩種語言各有什麼特性、優缺點

很多時候對方會講不出來,或許不是面試者完全不了解
可能是對方不夠熟悉,或是不懂特定的專有名詞
這時可以再問一些問題,去試探對方對這些概念的了解程度

前面有版友提到:「我怎麼很少聽到有人自稱會很多程式語言的」
我相信在熟悉各種概念的前提下,要會很多種程式語言並非真的這麼稀奇

但就像Google在某些地區的徵才說明:

  请确保你简历中的所有内容都是可被核实的。例如,如果你的主要编程语言是Java或者
  Haskell,那么面试过程中就可能被问及此类话题。

如果有人說自己會C++
但發現他不懂template,甚至講不清楚物件導向的基本概念
列出C++不但不會加分,還會倒扣一些分數

很多時候,對方對程式設計的了解深淺,只要聊幾句就可以摸清楚
有時還是會碰到不確定對方實力的狀況,這時就看對方在紙筆測驗的表現當參考了

我不會因為對方在履歷上列出很多程式語言而扣分
但會希望列在履歷上的技能都是真材實料的,並會努力(笑)核實這些技能

# 語言的細節

我將初學時比較不會碰到,而在實戰、或看書深入研究才會了解的知識分為此類

舉例來說,像前面版友提到的:
* variable shadowing http://goo.gl/uy9In
* object slicing http://goo.gl/Gk6Ud

要自稱「精通」某個程式語言,就必需熟悉這些部分
才能在事前避開地雷,不致寫出有問題的設計及實作
也能在其他人遇到這類問題時,迅速幫助他找到原因

就我而言,對junior engineer來說這些是bonus,而不是requirement
只要基本概念、邏輯好,這些應該都很容易pick up

對於senior enginner而言
若團隊需要的是精通特定語言、技術的人,這點就很重要
換句話說,若是看重其他經驗/學習的potential
而需要能夠快速上手pick up各種技術的員工,這點就可以比較不看重

但若對方自稱擁有四年C++業界經驗
卻沒碰過、也沒聽過object slicing, variable shadowing
我也會對他的實力產生很大的疑惑

# 函式庫的使用

寫程式的人應該都聽過這句話:「不要總是重新發明輪子,要站在巨人的肩膀上。」
固然,為了練功去重刻底層函式庫是值得鼓勵的
但身為程式設計師,學習迅速利用、整合現有的工具,也是重要的課題

若團隊需要專精某Library/Framework的人材
面試者如果原本就精通那些函式庫,會有很大的加分作用
不過,老話一句,這些能力都是會在面試過程中被仔細提問核實的

然而,比起「用過那些函式庫」,我更重視是否理解函式庫的概念
這點與「語言的概念」相似,每個函式庫都可以拆解成一些核心概念

比方說,Spring核心最重要的概念,或許是Inverse of Control和Dependency Injection
若對方說用過Spring,我會對方為什麼選用Spring,他有什麼重要的特性
如果他說不出專有名詞,我會試著以例子測試他是否理解這些概念

接下來,我可能會問對方覺得Spring有什麼優點與缺點
能講出一些優點,算是基本的合格條件
有時被官方文件/書籍洗腦的結果,大多數的人都可以掰出一些優點
但如果優點/缺點都能侃侃而談言之有理,就代表他真的懂了

我同意約耳說的:「不會因應試者不掌握一種特定的技巧而拒絕他」
這裡我看重的有兩點:

1. 如果真正了解函式庫的概念,學習其他概念相似的函式庫時,很快就能上手
2. 如果對方本身碰的東西夠多,又在許多領域都能提出良好見解
我會相信對方對於學習新概念,也比較具有熱情跟效率的

此外,使用函式庫的時候,難免遇到種種問題
這些問題會來自於自身邏輯的錯誤、對函式庫的誤解、甚至函式庫本身的bug
這部份可以請對方談談之前的開發遇到的問題,以及解決問題的流程
試著了解對方是否擁有獨立解決問題的能力

----

不同的人,不同的團隊風格,在面試時會在意不同的事
以上是我的觀點,分享給大家參考

後記:
其實這篇文章十幾天前就開始動筆寫了
不過越寫越長,加上最近太忙,所以到今天才寫完

--
※ 發信站: 批踢踢實業坊(ptt.cc)

將Wordpress轉移到Jekyll及Disqus

| Comments

最近越來越不習慣使用Wordpress寫文章。我對於寫文章的方式有下列要求:

  • 不使用WYSIWYG編輯器。大多數的WYSIWYG編輯器都有產生不必要的HTML碼、貼code格式跑掉…之類的問題。
  • 可以不用手動撰寫HTML碼(markdown)。
  • 可以使用慣用的純文字編輯器(vim),撰寫文章如同撰寫程式源碼一樣。

Jekyll是一套Ruby靜態網站產生器,支援markdown, textile等語法。包括Github Pages在內,已有許多網站使用Jekyll。由於靜態網站沒有留言的功能,可以配合Disqus或Facebook實作留言。我認為這樣的撰文方式不一定適合一般使用者,但相當適合程式設計師使用。

使用Pretty Permalink

所謂pretty permalink是指網址是這種格式:

http://blog.miaout17.net/2011/05/08/convert-wordpress-to-jekyll-and-disqus/

而非

http://blog.miaout17.net/2011/05/08/convert-wordpress-to-jekyll-and-disqus.html
http://blog.miaout17.net/?p=2241

若Wordpress與Jekyll都使用pretty permalink,轉換時網址就可以直接對應,方便許多。Wordpress需要在後台設定,而Jekyll的_config.yml中加入:

permalink: pretty

即可。

順帶一提,我的permalink全部都是英文及橫線組成。若permalink有中文或其他字元,可能會產生問題。若不想改掉,請自行修改程式小心處理。

將Wordpress資料庫轉至Jekyll

我原本的blog系統是Wordpress。要將Wordpress搬家到Jekyll、Wordpress留言搬到Disqus,都有現成的工具。但這些工具可能還需要一些workaround。

首先,Jekyll內建的Wordpress Migrator有幾個問題:

  • yaml中的utf8字串會變成binary format
  • 沒有匯出wordpress中的category和tag資訊
  • 沒有匯出時間資訊,同一天的文章順序可能會錯誤

因此,我手動修改了Jekyll Wordpress Migrator的源碼,修改後的源碼位於: https://gist.github.com/961198 。這裡有許多可以客製化的地方。我決定不匯出Category,只匯出Tags。讀者若有需要,可以自行修改。

將Wordpress留言轉至Disqus

最後是將留言匯入Disqus。我研究後,認為最方便的方法是直接將Wordpress XML備份檔匯出。其本上Jekyll匯入Wordpress備份檔時是只認網址的。依前面所述,如果Wordpress及Jekyll都使用pretty permalink,兩邊的網址規則應該是一樣的。如果你更換了網域,只要用文字編輯器將XML檔中的網址取代即可。

此外要注意的是:Disqus在匯入時,會直接以HTTP存取你的網站,抓取標題等相關資訊。所以你必需先完成Wordpress轉至Jekyll的動作,並確保網站是可以存取的,最後才能匯入Disqus。

Jekyll就像一塊白布,幾乎什麼功能都沒有提供。使用者可以自行設計HTML及CSS模版,撰寫Tag Could等功能。本站就是一個成功轉換的範例。

Blogtrans 1.0.1版更新

| Comments

Blogtrans v1.0.1釋出,需要者請至SourceForge下載

  • 修正了Blogger XML匯出時,PM變AM的問題
  • 先拿掉了其實不能用的Blogger XML匯入功能

Blogtrans開發密辛:

2009/05/23: 來寫Blogger匯入功能好了,先寫個不能動的程式碼,之後再補完

一年多沒動Blogtrans後…….

2011/03/05: 疑?有一年多前寫好的code還沒發佈耶,裡面有自動化測試、對無名的XML容錯、和Blogger匯入功能耶。來合併一下發佈好了…

……..

使用者:這個MT檔有問題耶,我把他匯出Blogger格式再匯入就讀不進來了

……..

對不起,有問題的大概不是MT檔,是Blogger匯入的功能和作者的腦袋…..Orz