2015/6/28

你應該準備作品還是考證照?

你是學生,在畢業之前還有1~2年的時間可以準備作品或考證照,請問你該選擇作作品,還是考證照?

在我快畢業的那時候,我思考過這個問題。當時得到的結論是「那就都拿阿」。現在回頭想想,傻孩子,人的時間是有限的。除了必須持有證照才合法的職業之外,我認為只需要把時間投資在作品上。

公司用人,基本上就是要找有用的人,有能力的人。不管作品還是證照,都是證明你有用的佐證。作品是直接證明,而證照是透過第三方機構間接證明。除非第三方機構非常知名,要不然參考價值不大。

證照不代表經驗。考證照對於某些人來說是簡單的,很多人都有英文證照,他們真的能跟老外對話嗎?請問你如果想要找一個接老外電話的客服,你會找一個去美國留學過的,還是找一個考過英文證照的?顯然是要找經常跟老外對話的人阿,有經驗者就是勝過沒經驗者

證照有過適的問題。很多補習班專門猜考題,教你怎麼背考題,考試已經成為一門專業的學問。你可以成為很會考試的人,但那不代表你實戰很強。如果你不懂原理,只要題目一換,你沒看過的題目你就不會作了。考試有太多技巧可以得高分。


這個問題可以廣義地說,你應該準備學歷還是經歷?學歷沒有用,只有經歷有用。你曾經做過哪些事情可以拿出來講的?基本上有賺錢的事情可以拿出來講,引起很多人迴響的事情可以拿出來講,其他事情就不要拿出來講了。

比方說

你作了高人氣的App
你作了高人氣的youtube影片
你寫了高人氣的Blog文章
你經營了高人氣的FB粉絲團
你有用以上項目賺錢的經驗
你有募資成功的經驗
你在知名的比賽上得獎

想做什麼職業,就直接去作那職業會做的事情。作出一番成績來,就能夠做為最有力證明你價值的經歷。帶著這個經歷,又有什麼工作是你應徵不上的呢?


你夠專業嗎?

如果你在某個領域夠強,那就是專業。

夠強就是問不倒,在這個領域下任何問題,你都能給出一個令人滿意的解答。

當客戶問你為什麼這樣作,為什麼不那樣作?你可以清楚地說出其中的差別,或者舉例說明,讓一個外行人輕易了解你在取捨的是什麼。

如果你夠專業:

你的任何行為背後都是遵循原則在作,不是亂作。

你知道每個原則為什麼存在。

你清楚違反原則會有什麼問題。

你知道在某些情況下可以不用遵守哪些原則,引發的問題不大。

如果你不能說明你為什麼這樣作,這樣做的好處在哪,那你就還不夠專業。


你夠專業嗎?

如果你夠專業的話,被質疑的時候就能說服對方,而不是被對方牽著鼻子走。

在你要求別人尊重專業之前,先想想自己。

當你被問到為什麼這樣作,而你是靠直覺作選擇,找不到任何可以支持你行為的原則,或者無法說出一套自己的原則,也許是你不夠專業。


2015/6/19

什麼是熱情?怎樣才能有熱情?

什麼是熱情?

熱情是發自內心想要去做的事。熱情就是那些會讓你廢寢忘食的事。所以你媽叫你做、你老闆叫你做、你主管叫你做的全都不是讓你有熱情的事。除非你媽、你老闆、你主管叫你做的事情剛好是你原本就想做的事。每個人有熱情的項目不同。

比方說:
「玩電動、作電動」
「看漫畫、畫漫畫」
「看實況、開實況」
「看影片、作影片」
「聽音樂、作音樂」
「爬文、寫文章」

什麼是自己想做的事?

自己單純覺得爽、自己覺得有趣的事、自己覺得有成就感的事、自己覺得有意義的事、自己定了目標想要達成的事。很多事情你媽覺得有意義不代表你覺得有意義,就像你媽覺得讀書有意義,而你可能覺得沒有。你的意義不等於我的意義。

什麼是成就感?

成就感就是當你做了某件事,得到很多回饋。你認為你成功了,你渴望得到更多的回饋,於是你開始複製成功經驗,你會不自覺想做那些得到很多回饋的事情。

比方說:
「抄國外新創團隊的梗,在本地複製幾乎一樣的東西」
「把日文歌改成台語歌」
「第一次拍電影就拿到一堆獎」
「上傳電影懶人包影片」
「發了一篇笑話很多人XDDD」
「開實況嗆觀眾,也一直被觀眾嗆」
「開實況轉珠珠轉的超爛,但是一直吃石復活」

怎樣才能有熱情?

有些技能是人家想教你的時候你不想學,但可能過沒多久你會發現自己缺的剛好是這塊。學校教的東西剛好都是這樣,因為學校通常不會告訴你學了之後可以用在哪。你會沒有學習的熱情是因為你不懂他能用在哪,若你先懂得用法,就會自然而然想學會,這就是學用合一的道理。當你認同作某件事的意義之後,就會主動去做某件事。

比方說
「你小時候被逼學樂器超不爽,但長大後懂得樂器的好開始而自發性的去碰樂器」
「在學校某科目超爛,結果出去工作後發現處處要某科目,又開始自學」
「某個在學校教APP的老師,每學期第一堂課都會給學生玩一款看似簡單的小遊戲,然後告訴學生這款遊戲賺了好幾億美金,想學寫APP嗎?」

什麼是認同某件事的意義?

就是當人家叫你這樣作事,你馬上問對方為什麼要這樣作,而對方能回答出一個你滿意的答案,而不是跟你說「一直都是這樣作的阿」「叫你作就作,問那麼多幹嘛」,若對方成功說服你,你就會去作某事,遊戲業、直銷跟詐騙集團在這方面一直是強項,以後想當業務的話可以多參考他們是怎麼作的。所以各位媽媽、主管、老闆們知道該怎麼作了嗎?

一些心得歡迎分享~

2015/6/14

菜單精靈

今天想到一個Idea,菜單精靈,用精靈模式點餐,在UI上用「下一步、下一步、完成」的引導式點餐法,或者可以對菜單做篩選,比方說不吃牛、豬、羊、辣、胡蘿蔔。

這東西好處在哪?

今天中午聚餐的時候,看著菜單上寫的各種點法,我就在想「為什麼我需要去了解每一家店菜單格式上的不同?」,光是要讀懂他的計費方式:有幾種不同的套餐?一個套餐包含哪些東西?套餐加多少錢,會多得到什麼東西?決定要吃什麼,變成一件很困難的事情。

要統一菜單格式我認為是一件非常困難的一件事情,大概就跟要每家公司使用相同的履歷表一樣困難。但是若要從紙本菜單換成電子菜單,我認為難度下降很多。電子菜單能讓客戶點餐變得容易,至少電子菜單能夠做到更多紙本作不到的事情,比方說隱藏次要資訊,只顯示主要資訊,提供建議、試算,食材介紹等。

對於客人來說點餐變得更有趣,對於老闆來說,修改菜單不需要重新印刷,若將點餐結果直接串連到店家的系統,那連服務生都省了。

2015/6/13

為什麼設計總是被要求改稿,最後卻採用初稿?

本文請搭配音樂欣賞


死了都要改,原作可能在這裡

為什麼設計總是被要求改東改西,最後卻採用初稿?

初稿是設計師最滿意的稿

在設計師在權衡各種需求後,交出初稿之前,已經思考過各種可能性,微調過無數個小地方,設計師會有一種設計師的堅持,最後設計師終於得到一個最滿意的結果作為初稿交出。而這已證明了是初稿是個區域最佳解,區域最佳解意味著作任何微調都會得到更糟的結果

客戶不認同初稿是最佳解

客戶對初稿不滿意,因為客戶只看到一個結果,沒有看到整個思考流程,不知道設計師在權衡需求時的取捨,不知道設計師為了滿足了什麼需求而犧牲了什麼需求。一開始客戶沒有意識到初版是區域最佳解,開始提出各種調整方案,設計方通常配合改稿,客戶看見各種微調後的結果後,發現比初稿還糟,有一好沒兩好,才開始知道初稿的好,客戶在改稿後才認同初稿是最佳解。

為什麼客戶一開始不認同初稿?

原因有很多,比方說我錢都付了,不多改個幾次不划算;我的想法比專業的好,不尊重專業;設計沒聽懂我要的;價值觀不同等很多原因都有可能。其中最糟糕的想法就是不尊重專業。更可怕的是,他可能沒注意到他正在不尊重專業。(趕快把這篇文章貼在他臉上R)

要怎麼確認客戶尊不尊重專業?

若價值觀相同,客戶也一開始就把需求講清楚了,沒有陸續追加需求的情況下,提出的修改方案就會是不尊重專業。價值觀相同的意思是你覺得好的東西我也覺得好,你覺得不好的東西我也覺得不好。

為什麼客戶應該採用初稿

對於客戶來說,使用初稿是CP值最高的選擇,花最少的錢,最快的速度,得到一個相對好的結果。對於設計師來說,感覺到被客戶尊重,這麼阿莎力的客戶,以後接他的案,少收一點錢都願意。若不直接採用初稿,則需要許多次改稿後,才有可能得到比初稿好一點點的結果,記住:最後20分的品質需要80分的成本。

設計師的自我保護

若是接案,簽約時一定要說明改稿和修改需求要額外收費,收費方式最好是採用分階段收費,還沒開工就先收一筆訂金,交了初稿就至少要收到80%的金額,這樣才不會被客戶凹單。記住:當客戶欠你1000元時是你決定客戶的人生,當客戶欠你100000元時,客戶決定你的人生,欠錢的人講話最大聲了。
若是員工,一旦老闆開始亂改,不尊重設計,老闆說要改啥就配合改沒關係,但你下班時間一到就一定要走人,讓老闆知道他正在浪費的不是你的時間,而是他的錢,那是他的自由,但他可能不知道,他正在消耗你的熱情。所謂熱情,就是一股莫名自願加班的感覺。

最後再送上一個影片


出處:http://app2.atmovies.com.tw/film/fajp45012460/

一些心得歡迎分享~

2015/6/11

區域最佳解:任何微調都會得到更糟的結果

當定義域(x)連續的情況下

當定義域(x)離散的情況下


所謂的區域最佳解,指的是在某個定義域(x)範圍內,最高或者最低的值(y)。我們經常面臨一些求解區域最佳解的問題,通常長這樣:

「精英中心裡面最強的武術是哪個?」
定義域(x):精英中心裡面的武術
值域(y):武術強度
最佳解的方向:取最高 (我認為啊,空手道是世界上最強的武術了,所以我覺得精英中心裡面,應該就只有空手道的存在,其他應該廢除。)

「台灣哪一任總統支持度最低?」
定義域(x):當過台灣總統的人
值域(y):人民支持度
最佳解的方向:取最低

「CP值最高的低音耳機是哪款?」
定義域(x):所有低音耳機
值域(y):CP值
最佳解的方向:取最高

「最省電的冷氣是哪一台?」
定義域(x):所有冷氣
值域(y):冷氣的耗電程度
最佳解的方向:取最低

「王品集團旗下餐廳最便宜的是哪家?」
定義域(x):王品集團旗下所有餐廳
值域(y):套餐價格
最佳解的方向:取最低

「這張設計稿的標題字體是不是可以換一下?」
定義域(x):標題字體
值域(y):設計稿的好看程度
最佳解的方向:取最高

以上的舉例全是離散定義域,而求連續區域最佳解的問題通常長這樣:

「你給我注意聽好,我的料理是炸鳳尾蝦,就是蝦子裹碎核果去炸的,將核果搗碎後裹在蝦肉上,油炸成為金黃色,不但要考慮核果跟蝦肉的比例,高低油溫的調節也需要高度的技術跟經驗的。鮮脆可口的核果外衣,經油炸之後,其香味立即倍增,堪稱人間第一美味,搭配特製醬汁來食用,味道更是妙不可言。所以那個醬汁要加多少?」
定義域(x):特製醬汁的量
值域(y):味道的好吃程度
最佳解的方向:取最高 (沒有醬汁還敢說已經作好了,誰會相信你啊,真是笑死人了)

「欸幹,手機沒訊號,你家哪裡有訊號?」
定義域(x):你家的位置
值域(y):手機的訊號
最佳解的方向:取最高

「全世界海拔最高的地點落在經緯度多少?」
定義域(x):經緯度
值域(y):海拔高度
最佳解的方向:取最高

「這張設計稿的標題大小是不是可以再大一點?」
定義域(x):標題大小
值域(y):設計稿的好看程度
最佳解的方向:取最高

很明顯可以看出這裡的定義域(x) 從問「是誰」變成了用問「是多少」來呈現,相信大家看到這裡已經明白什麼是區域最佳解了。

2015/6/10

Swift 的 SequenceType、GeneratorType 的實作

class RandomDoubleGenerator: GeneratorType {
    let min = 0.1
    var current = 1.0
    
    func next() -> Double? {
        current = Double(arc4random()) / Double(UINT32_MAX)
        if current < min {
            return nil
        }
        return current
    }
}

class RandomDoubleSequence: SequenceType {
    func generate() -> RandomDoubleGenerator {
        return RandomDoubleGenerator()
    }
}

var sequence = RandomDoubleSequence()
var list = [Double]()
for x in sequence {
    list.append(x)
}
list

var g = sequence.generate()
while let x = g.next(){
    println(x)
}

這裡實作出一個隨機長度的隨機數值序列(Sequence)

這個序列會產出介於0~1之間的亂數

當產出值小於0.1的時候判定為序列結束

大家可以嘗試把上面那段code貼到 playground 看結果


核心程式在 GeneratorType.next()

    func next() -> Double? {
        current = Double(arc4random()) / Double(UINT32_MAX)
        if current < min {
            return nil
        }
        return current
    }
}

為了讓下面的 for 可以跑,我們需要實作一個 SequenceType 和一個GeneratorType

for x in sequence{
    println(x)
}

SequenceType 介面需要實作一個函數 generate()->GeneratorType

他會傳回一個 Generator 作為跑迴圈用的變數

而實作 GeneratorType 需要實作一個函數 next()->T?

若 next() 傳回 nil 就代表結束了,後面沒東西了

其背後的運作邏輯為

var g = sequence.generate()
while let x = g.next(){
    println(x)
}



若對應到C#

Swift 的 SequenceType 其實是 C# 的 IEnumerable

Swift 的 GeneratorType 其實是 C# 的 IEnumerator



附上 SequenceType 和 GeneratorType 合在一起寫的版本:

class RandomDoubleSequence2: GeneratorType, SequenceType
{
    let min = 0.1
    var current = 1.0

    func generate() -> RandomDoubleSequence2 {
        return RandomDoubleSequence2()
    }
    func next() -> Double? {
        current = Double(arc4random()) / Double(UINT32_MAX)
        if current < min {
            return nil
        }
        return current
    }
}

var sequence2 = RandomDoubleSequence2()
var list2 = [Double]()
for x in sequence {
    list2.append(x)
}
list2

Swift 日期比較運算子 <、==、>

extension NSDate: Comparable { }

public func ==(lhs: NSDate, rhs: NSDate) -> Bool {
    return lhs === rhs || lhs.compare(rhs) == .OrderedSame
}

public func <(lhs: NSDate, rhs: NSDate) -> Bool {
    return lhs.compare(rhs) == .OrderedAscending
}

public func >(lhs: NSDate, rhs: NSDate) -> Bool {
    return lhs.compare(rhs) == .OrderedDescending
}

// true
NSDate() < NSDate()
// false
NSDate() == NSDate()
// false
NSDate() > NSDate()

在 Swift 裡類似 JS eval 的東西

func caculate(s:String)->Double{
    let exp:NSExpression = NSExpression(format:s)
    let result:Double = exp.expressionValueWithObject(nil,context:nil) as? Double ?? 0
    return result
}

caculate("(1+1)*2")
caculate("1+1*2")
caculate("1+1")
caculate("(3+1)*2")
caculate("1/0")
caculate("1/0.0")
caculate("sqrt(2.99)")
caculate("log(2)")
caculate("abs(-1)")
caculate("exp(3)")
caculate("ln(exp(3))")
caculate("random()")