如同 Steve Jobs 所說過,「不要什麼」比「要什麼」還重要。
若妄以為自已什麼都要學會,未免太太太太過自大!!!
謹記
長文會放在 Medium ( https://medium.com/@will.wang/ )
這個標題可以說得很大,不過這裡只是有幾個小感想而已
最近越來越感覺到時間不夠用,想做的事情太多卻沒時間,而人說的「限制更會帶來進步」(差不多是這樣講吧...(汗))倒是真的,所以開始發現一些我早該領悟到的時間使用方式,其中之一就是標題
時間的使用效率是一個關鍵就沒什麼好說的,在錯的時間做事,真的很浪費,例如:
現在想到的大概是這些,雖然說我現在應該在睡覺...但是我真的很想講,我有多白痴~
先提一下,這篇同樣充滿對職場上的臆測。一個不想面對論文的學生通常會開始思考一些奇怪而且還不會碰到的議題。
我想寫一點對公司考績制度的疑惑,疑惑開始於在噗浪上看到 @avhacker 的公司(後來知道是鼎鼎有名的...(消音XD))有所謂的「依程式行數」之類的評比制度,和在PTT programming版看到的「有BUG就扣考績」這兩件事。
然後ddavid@PTT提到 Joel 的三篇文章:
Ch21 激勵是有害的(2000)
Ch28 測量(2002)
Ch32 兩則故事(2000)
(我開始懶得幫文章上連結了,原諒我...)
先抄幾句來當大意,混個篇幅
第一篇,Joel講了一個他認為是污辱人的獎勵制度(在微軟),然後說,有些人的貢獻不一定會被看出來,所以有負面考績,導致士氣下降。有趣的是,就算給某人正面評價,但是如果不如那個人的預期,一樣還是士氣下降。更有趣的是,就算有一個公正的考績系統(而且這很難做到),大部分的人還是會失望,因為每個人都覺得自己應該有更好的考績。總之都會讓士氣低落、憂鬱、離職、嫉妒...甚至導致所謂的團隊自殺。他建議軟體經理在考績上做做樣子就好,如果沒有其他選擇的話。
第二篇,大意就是當管理的人想要測量知識工作者的績效時,總是下有對策。下面總是有辦法變出花樣來迎合測量系統就對了,而實質的工作品質可能還因此變得更糟。這裡有好幾個例子不只是軟體領域的。
第三篇說了兩個故事,描述管理良好的科技公司和一團亂的公司的差別。微軟在這裡是好的,「在微軟這家公司裡,如果你是Excel巨集策略的專案經理,即使來公司還不到半年也不要緊,你就是Excel巨集策略之神,連員工代碼六號的老員工也不能擋你的路。事情就是這樣。」另一家風格是「不管你多麼努力工作又有多聰明,也不管你是否在「負責」,你對再微小不過的事都沒有權力。把你該死的點子訓練以及聰明睿智放一邊...」Joel認為「最終的差異在於相信員工並讓他們把事情做好,還是把他們視為作業員對待,必須不停監視控制以免偏離主題並造成破壞。」
ddavid說:
「簡單的結論是,不要想用某種死板固定的規則來打程式人員的考績並做獎懲,只
會造成上有政策下有對策的反效果。你該做的事是一開始就選到對的人(在其它篇章
中有清楚的說明),然後讓他們有真正能做好事情的環境(同樣在其它篇章中有清楚
的說明),而不是用他們寫了多幾行程式或改了幾個Bug就獎勵他,反之就處罰。」
我自己看完三篇的感覺是,我認同Joel說的,但還是不禁冒出一堆疑問,所以不用打考績了嗎?主管只要「找對的人+能做好事的環境」就夠了?那台灣的軟體管理大多是什麼方式?我想,對於這些問題我實在是素材不足無法思考,還是要等真正進了業界才會有更進一步的想法吧?有什麼想法歡迎討論 :p
...If you wish, you can specify a static variable in a particular function or file, using the colon-colon (::) notation:
file::variable
function::variable
Here file or function is the name of the context for the static variable....
一直以來都滿喜歡這家飲料店。
這家有很多特殊而且好喝的茶,例如有些微酒味的白蘭地奶茶和其他店比較沒有的花草茶;然後在去年低潮的時候,常常離開實驗室已經很晚,心情都不會太好,那時候就常午夜去買一杯,加上店長和店員比其他店都還親切,感覺很溫暖;而且記得以前在東吳的時候,偶爾會被現在已經是波麗士大人的威志帶去當時還沒轉型的乾杯買喝的,有點懷念。
最近突然想喝焦糖奶茶,昨天去全家沒看到,剛才去85度C也沒看到,去乾杯果然找到了,小小的開心一下。
買完之後,剛好有看到乾杯的義賣活動,+10塊可以買一杯桂圓八寶茶而且乾杯會把義賣所得全數捐出去當營養早餐基金,於是就買了一杯然後把身上剩下的零錢都丟到伊甸的零錢箱。開心又加了一點。
我偶爾會丟零錢到便利商店或飲料店的零錢箱,想到就會丟,其實不多,每次也才幾十塊,而且又簡單方便。我發現我丟的多寡會跟我對那家店的喜好有關係,像乾杯就比較常丟,而且會多一點。
故事就這麼結束了,沒錯…這是一篇很雜的雜記。大三元新開的燉飯很好吃,剛點的是奶油雞肉燉飯。下次我想吃中央羊肉 :D
昨天自己把很多事情做到一個段落覺得很開心,包括論文看的paper還有看很久的金字塔原理,而且最近都堅持沒吃宵夜加上昨天只吃一餐有夠餓,所以決定要吃個豐盛的早餐激勵自己一下…睡覺前一直在想要吃以下哪一個:
所以今天早上就全部都吃了(爆)
科科…既然決定不了就通吃XD 真是有史以來最誇張的早餐
比較可惜的是到摩斯時剛好過了早餐時段,所以只好自己升級成冰鱈鱈魚堡,沒達到三家早餐大聯合。而且付賬才發現儲值卡不見了(驚)還好之前是掉在這家店,囧…
下次要吃新竹著名的饅頭肉排蛋+蔥抓餅 :D
腦海裡,滿滿的 盧廣仲 - oh yeah!!!
只要大聲說~OH YEAH!!!
(台灣出的圖解) | (原作) |
下星期三(12/9)的聚會很高興邀請到 Google 的 Chrome OS 工程師 Louis Lo 來為各位介紹 Chromium OS 專案及 Google Chrome OS 產品概念,如果您已經錯過了 tossug 舉辦的演講,或是來不及解答心中對此專案的疑惑,那就不能再錯過這次在 GTUG 演講。會參加這次的聚會也是因緣際會,本來名額有限沒報名到,卻剛好有人退出而搶到最後一個XD 但報名到了反而猶豫要不要從新竹上去,花車錢又花時間,不過後來證明不虛此行!還抓到 clyde 一起去,謝謝這位型男當我今晚的司機和豐富此行的討論!
精采的 Talk
因為怕無意間講出不能說的祕密,presentation 用的 slide 是之前就公開的,所以 slide 本身沒有太多新意,大抵是在說 Chrome 推出的原因、目的和在 speed/simplicity/security 的優勢和架構等等。Louis 有特別強調一個特性,Chrome OS 會在背景偷偷地下載新版本的 OS image,當使用者重開機就會自動執行新版(前提是下載成功而且image的signature正確),使用者不會察覺。個人覺得新東西大多在 demo 和精采的 QA。
有時候在用printf(),例如debug,會發現前面一句printf()的輸出反而會比後面一句printf()的輸出還慢,例如:
printf("111");
printf("222");
有時會先印出222
這種情況會造成很多的不確定性和debug困擾。
但如果在 printf() 後面加上 fflush(stdout); 就解決了。(這是在C,和C++的 flush 不太相同)
也就是改成以下就沒問題:
printf("111");
fflush(stdout);
printf("222");
fflush(stdout);
因為 fflush() 能把 stdout 這個 stream 的 buffer 強制沖(flush)出,也就是先寫出再說(write)。
講的可能不是很清楚,有興趣的話可以man fflush,或是google 「printf fflush」。
以下是我自己的摘錄:
NAME
fflush - flush a streamSYNOPSIS
#include <stdio.h>
int fflush(FILE *stream);DESCRIPTION
The function fflush() forces a write of all user-space buffered data for the given output or update stream via the stream's underlying write function. The open status of the stream is unaffected.
If the stream argument is NULL, fflush() flushes all open output streams.NOTES
Note that fflush() only flushes the user space buffers provided by the C library. To ensure that the data is physically stored on disk the kernel buffers must be flushed too, for example, with sync(2) or fsync(2).
順帶一提,google時有看到另一個不太一樣的問題,有人會用fflush(stdin) 來刷新scanf,這是沒定義的行為,不能亂用。
僅以此圖紀念 一個 無數個勇敢無比、為了信念而站的血肉之軀。
也以此自勉,讓我有面對一切的勇氣,Be Brave.
附上一部由美國公共電視台 [PBS] 製作的 [著名紀錄片]。
UPDATE:
最近又看了一些紀錄片,更認識這件事後,在激情和感動之外,會更認知到一件事的發生要從很多個面向去看,尤其是如此複雜的事。
學生充滿理想,但也要懂得考慮實際的問題,何時收何時放,可行的目標是什麼,如何面對意見紛爭和內部一天三四次的政變,這些都是關鍵。
軍隊也不是完全沒人性,有一開始和人民同心的,也有司令等級抗令或不出兵或不開槍、自己棄械的,當然也有只顧升官殘忍屠殺學生的。
政府,也有溫和改革派,結果反而被學生弄下台,讓想要操弄的鷹派得勢,當時相對開放的風氣也被壓抑。
人民,群眾聚在一起還是需要提高智商和自制力。
媒體,即使是黨的發聲機器也在關鍵時刻干冒風險用迂迴的方式婊了黨一頓。
所以說,事情可能不是表面的那樣,而越開放、越了解就更能知道從中能獲得什麼教訓。不過看來中國還是有個悲慘的既定前提:不要挑戰我的絕對權力。
再附上 [香港的長篇紀錄片] 和 [逃亡海外人訪問影片] ,還有一片夠雞歪夠帥氣的 [短片] ,6/4當天在北京大學到處問學生今天是幾號,學生的經典回答我給五顆星。
開了blog以來一直沒有認真的寫過文章,最主要的原因有二
所以反而跑去玩plurk這樣的micro blog打打嘴砲聊聊天,把這邊都放著。
當初曾經很認真的想過,開一個blog要幹嘛?要給誰看?定位是什麼?該寫些什麼?版面風格要表達什麼?我想一個blog主要是用文字傳達自己的想法,要有內容、有思想才值得別人花時間來看。想了想,自己沒什麼料也就不寫了。再者,如果真有什麼想分享的,要組織出一篇像樣的文章,感覺就很花時間,似乎沒什麼好處。
今天看了一個對岸網友寫的文章覺得很有道理,也讓我有再試試寫blog的動力,文章在此:「[BetterExplained]為什麼你應該(從現在開始就)寫博客」
我不寫的第一個原因:沒墨水
作者說的很有道理,寫出來的文章一定會有人覺得沒用(以前就知道了)、但也會有人覺得有價值(如果發的文章有認真思考過),所以不必太在意文章是否是最好的,重點在於記錄自己的思考過程,養成思考的習慣,培養思考能力。而如此一來也會因為思考能力進步而寫的文章越來越好。
第二個原因:太花時間
這就要看寫blog帶來什麼好處,看是不是值得了。看到作者提出的其中幾個好處就覺得也許可以一試:
結識同領域的朋友:很多人是透過閱讀別人的blog知道對方的興趣、專長,進而認識有同樣愛好的彼此。寫出來的文章可以一再的被閱讀,就好像是一份簡歷,每篇文章構成了這個人(部分)的想法、經歷,這些都可以被更輕易的發送出去、被接觸到,而不必一再複誦。
自己把思考貫穿一次:在把想法化為文字的同時,也幫助自己把想法再清楚地組織整理一次,確定自己真的瞭解,發現邏輯上的可能錯誤,也練習怎麼用文字的結構表達想法。
寫blog花時間這件事,其實也可能包含了因為怕被人覺得文章差所以花很多時間去修改,但如果能坦然接受這點,就可以減少花費的時間,另外也帶出另一個好處:
既然我不寫blog的兩大原因看起來不是問題,我就試著走走看,過一段時間後,再來檢視一下是否有達到目標吧!
SAP,Schedule, Action, Performance!
UPDATE: 2010-06-18
最近在PTT的C_and_CPP版上問了一些關於C的array initialization問題,討論之後的整理筆記如下(以下用 gcc 4.3.4 + gdb 7.0 測試)
(1) array沒初始:初始值是垃圾值
int num[10];
或
char array[10];
(2a) array部份初始版本1(不是用大括弧):除了有被初始的以外,都是垃圾值
int num[10];
num[0] = 999; //num[0]以外都是垃圾值
或
char array[10];
array[0]='a'; //array[0]以外都是垃圾值
(2b) array部份初始版本2(用大括弧):沒初始的部份會自動補成0
int num[10] = {1,2,3};
或
int num[10] ={};
ps. char array[10] = ""; //也會自動補0,我猜是因為這相當於char array[10] = {'\0'};
會自動補0的原因如下:
(節錄自tinlans大,英文是C99的一段)
[...If there are fewer initializers in a brace-enclosed list than there are elements or members of an aggregate, or fewer characters in a string literal used to initialize an array of known size than there are elements in the array, the remainder of the aggregate shall be initialized implicitly the same as objects that have static storage duration.
array 和 struct 這類東西在程式語言裡都被歸類為 aggregate (聚合資料)...]
粗略的總結就是:
如果aggregate型別(如array/struct)初始不完全,而且又是用大括弧方式初始,compiler就會像對static變數一樣,自動把沒初始到的補0
所以,我們可以用以下初始方式把array初值都設為0:
int num[10] = {0};
但是要觀念上要清楚,不要誤解成所有元素都會設成同樣的值,以下就是可能的誤用:
int num[10] = {255}; //這樣其實只有第一個是255,其他元素是會自動補0,不是全部都設成255。
以上如果有錯,請留下您的意見一起討論!