2013年9月28日 星期六
2013年9月24日 星期二
2013年9月12日 星期四
2013年9月11日 星期三
薪水是用談出來的
薪水絕對是談出來的(在你有貢獻的前提下),而且在 35 歲前跳槽也的確是每次
加薪最快的方式,很多老闆認為這是觀念偏差,但其實在台灣這是鐵錚錚的事實
,至於能夠一邊跳槽、一邊加薪、一邊還有中長期(40歲之後)的職涯穩定發展,
這就幾乎是一門藝術,很多時候還要靠機運和人脈,這是需要長期自我投資和布
局的,畢竟跳槽也不能跳一輩子,即使是奸雄曹操也不用叛將呂布。
沒有一家公司會養你一輩子,即使這家公司告訴你,能兼顧家庭、準時上下班、
薪資還可以,只要它有一天不賺錢的風險,解雇你時都是不會客氣的,我在 08
年自己身邊和朋友身上看過太多例子。在職時的確應該盡心用力貢獻,儲備好談
判薪水的籌碼,但請不要覺得公司是慈善事業,誓死效忠,企業的目的是獲利,
但企業不賺錢時,它是沒能力談「善待」所有員工的。
如果有人覺得薪水很難談出來,其實他是忽略了一個問題的答案:「你知道自己
在市場上的價值嗎?」這個問題看起來很像是資方刁難勞方的問題,但其實是一
個很好的自我評量。
知道自己的價值,你才有談判的基礎,也才有「工作自由」的權利,如何知道自
己在市場上的價值?底下有幾種自己覺得不錯的參考:
1. 定期整理自己的工作成果,紀錄量化指標
量化指標包括各種工作上的數據,比如負責產品的發行量、你的開發方式節省團
隊多少時間等等,這不但是你履歷上比較能引人注意的部分,也是你發覺自我貢
獻程度的方式。
2. 每 1~2 年由朋友的人脈或就業市場(類104、Hunter)去超頻面試看看
所謂超頻面試,是定期尋找相關產業公司,比現有職位稍高一點的職位,一方面
了解外面的世界,不會被自己的公司井底之蛙,也可以練習薪資談判的技巧。
3. 如果你工作的目標是錢,請準備一份 LinkedIn 的履歷
台灣的薪資水準普遍落後北京、上海、香港、新加坡是不爭的事實,更不要說是
本土廠商和外商的差距,現在甚至連在台灣的外商都有低薪化趨勢。準備一份
LinkedIn的履歷可以增加你被海外工作機會的 HR 或獵人更多接觸的機會。如果
你單身、年輕,我鼓勵你向外發展,錢和視野都會有很好的累積,征戰過程中你
再一步一步去想職涯規劃的問題,30/35/40的目標在哪。如果你被迫不能離開台
灣,台灣的外商或本土廠商能跟外商、外地客戶應對的核心單位,那就是你累積
錢和視野的地方。
如果你有特定想去的地方,調查當地職涯常用的類 LinkedIn 網站,比如
BrachOut、微人脈、Monster.com 準備一份 Profile 也是必備的。
4. 維持幾個你覺得不錯的 head hunter 的關係
所謂不錯的 head hunter,不是只會拿你的履歷去亂槍打鳥的顧問,而是跟你當
面聊過,給過你職涯建議,甚至對你的履歷提出過建議的人。這些比較用心的
head hunter 通常人脈廣,對產業消息和職缺異動很靈敏,有空去聊聊,可以得
到一些有用的情報作為自己的參考。
從以上這四件事,你會對你自己在工作市場上的價值心裡有個底,也才會定期知
道自己不足之處,設定目標投資自己或鞭策自己學習,才不會漫無目的的只是犧
牲時間,日復一日做公司給你做的無成長性事務還認為很有貢獻,等到有一天你
抬頭了才發現,40歲了但什麼都不知道才大夢初醒。
當然工作的目的不會只是為了錢,自己的職涯發展才是最重要的。但現在很多職
涯專家往往告訴你,「不要因為貪戀高薪而犧牲了發展」,其實這是很奇怪的一
件事情。是什麼樣的工作讓你低薪、長期 underpay、工時每天超過 9 小時但卻
十分的有發展呢?往薪資成長之路邁進的第一件事情是,你不應該將自己的低薪
視為理所當然。如果你低薪,你必須理智地思索現況和羅列理由,比如:
1. 這是董事長特助,即使 22K 磨個兩年我就有廣大的人脈和視野
2. 這工作可以頻繁接觸外國客戶或供應商,33K操死我一年我就能去更好的地方
3. 對岸需要這樣的人才,44K 忍氣吞聲每天 12小時沒關係,很快我就知道我能
去哪
4. 55K 六日還在回 Email 沒關係,我正在建立自己在業界的 Credit 等人賞識
5. 即使每天 on call 也沒關係,66K 讓我建立未來跳槽百萬身價的基礎歷練
6. 我做夢夢到神明告訴我,5 年後這家公司就發了到時候我年薪一定 600 萬
等等等.....
如果你連一個能說服自己,或者讓別人覺得你的腦袋的確有在思考的理由都說不
出來,那證明一邊抱怨自己低薪,一邊卻還是只埋頭工作的自己只是維持生活和
浪費生命。工作絕對是需要一個關鍵因素滿足自己的理想或慾望,非常單純。當
你發現找不到的時候,就是你思考我為什麼還要在這裡的時候。職涯的發展也跟
你在業界的工作成果和人脈累積上很有關係,而這跟你的薪水則不太有關係。一
個正向的職涯工作一定是好的貢獻、好的累積、薪水談判、職涯轉換等一連串的
主動出擊,最後理智的自己會隨著生活變動和職涯發展找到一個平衡點,漸漸的
選擇一個穩定的最後之處落腳,或者大賺一筆後沒死退休享樂,或者回家種田等
,找到一個自己能安穩久待之處。
但相信我,做這些事情「低薪」不是必備的起點條件,願意給基本要求薪資的人
還是有的,願意在這個過程中不斷 20%、30% 給你加薪的人還是有的,給你高薪
又合理工時的人也還是有的;但重點是,你有沒有意識到這些,投資自己並為自
己主動尋找機會、把握機會,甚至在人脈或工作成果中創造機會?
薪水不但是談出來的,還是一個很好的驅動自己、衡量自己的元素。願意主動積
極的人一定會往好的路前進。當然,請記得,潑你老闆冷水的時候,希望你身後
已經有超過兩份以上的備案,那是你辛勤貢獻給公司拿薪水之外的更大收穫--來
自更多其他人對你的肯定和賞識。
[JAVA]final 宣告
成員 (member) 宣告時若使用關鍵字 final 修飾,表示該成員為常數 (constant) ,屬性 (field) 或區域變數 (local variable) 都不能重新給值,而方法 (method) 繼承 (inherit) 後不可被改寫 (overload)
2013年9月8日 星期日
[轉]正面思考(Positive thinking)與開放心胸(Open mind)
撰文:劉義漢
近日接手的幾項專案皆處於危及垂死邊緣狀態,參予專案的幾位戰友少數具有正面
思考態度與開放的胸懷。回想過去十年來所參予的專案中,團隊成員抱持負面思考
者比比皆是, 或許因為台灣教育文化導致這樣的結果。如果以百分比來說,約略80%
成員是負面思考以 及自我封閉者。
我過去文章中提到資訊軟體設計這個行業相當特殊,不是其他產業的人員可以體會與
了解 。主要原因在於「軟體無法精準量化」,遇上電子硬體又是台灣近二十年來的主流
,多數 人的思維被硬體科技給綁架了。電子科技、代工或IC設計這類的產業收入來源
結構是由" 一顆又一顆、一片又一片"能夠「量化」的晶片或一台又一台的電腦組合而成,
其成本與 獲利清楚明顯。然而軟體卻讓大家感覺是無本生意而不願意付出任何一毛錢,
甚至免費觀 念充斥在大家的腦中。從上述可知,軟體從業人員更需要擁有比他人更多
的正面思考(情緒)與開放的心胸才能夠在這條路上順利走下去。
【有問題才會找你解決】 我最常遇上軟體設計工程師抱怨說,「為什麼都是爛專案?
有沒有正常的專案呢?怎麼我 都遇上這些爛人、爛事!」。沒錯,我在這行業十多年了
,沒見過好專案。這是一件合理 正常的事情,人家有職缺是因為有困難問題要處理,
否則既有的員工自己完成就好,幹嘛 找你呢?好的工作人家做了就不會走了,輪到你
時都是解決不了的大問題或是必需熬夜加 班趕工的狀況,因此走了這一行就要有心理
準備。話說回來,一家公司的工作都很輕鬆很 好混,這也要擔心。業績好的情況下,
爛攤子一定特別多,即使組織內的人絕對也不好混 。所以當你聽到人家說哪家公司哪
個位置好涼唷、好爽喔、沒事做喔,請您千萬別難過,因為絕對有問題。
【積極樂觀、開放心胸才能走完專案全程】 一個專案換了兩三批團隊是常見的事情,
愈晚進去愈是辛苦。道理很簡單,時間不夠了, 要寫的程式需求變多了,錢或許更少了
。在這樣情況下,你沒有正面思考的態度與熱情很 難熬的下去,這是現實狀況,如果要
從事資訊軟體設計工作就要體悟台灣這種不健康的產 業環境。前三年開始,我發現專案
中七年級成員日漸增多,感受到的負面情緒有;「我要 在程式裡面埋炸彈。」、「這麼爛的
專案經理怎麼做得起來。」、「程式超難寫,這個一 定做不完。」 ... 等等。這些說的其實沒
有錯,但是情緒上如果一直往這樣的負面方向 延伸不僅害了自己,也害了專案。假使您
有這樣的現象,請立即反省與改善,否則快點離開這份工作。
【開放心胸,快樂分享】 每個人在職場上都會經歷菜鳥、熟練與老鳥三個階段。當我
們處於老鳥階段千萬不要忘記 " Open mind "的提攜菜鳥,並且要有耐心與熱心。如果您
不願意展開胸懷的將所學教給 職場新鮮人,表示您這位老鳥害怕了,怕自己的競爭力被
人趕過去。不如趁這個機會省思 自己的方向,讓自己更深一層的提升。我也知道有一種
職場菜鳥是讓人無法提攜,因為自 己本身的態度就有了問題。以最近的一個專案而言其
中一位程式設計師剛畢業半年,工作 期間罵東罵西抱怨連連,但是遇到了問題不經摸索
就提問。這樣的態度經過我三番兩次的 暗示、明示糾正後仍然無法改正,這樣的職場菜
鳥我想無需浪費時間了。只能靠未來的環境慢慢讓他自我碰撞與改善,當下旁人的告誡
是無法立即有效用。 台灣因為歷史與文化背景因素養成了島國人民狹隘思維與負面思考
的人格特質。這塊美麗 的土地近三百年來多數時間皆是由外來政權統治,這樣的歷史背
景讓我們擁有堅韌性格卻 也同時產生了負面思考人格。從祖父母時代逆來順受的觀念直
到今日仍然在你我身上毫無 改變。希望讀者能夠在看完本文後,暫時先放下批判的衝動
,讓自己轉化出正面思考情緒 再行批判本文。這就是您的收穫了。
[Linux C]Reverse String Function
#include "stdio.h"
#include "stdlib.h"
#include "string.h"
void reverseStr(char *strPointer)
{
char temp;
char *p,*q;
p = strPointer;
q = &strPointer[strlen(strPointer)-1];
for(;p<=q;p++,q--)
{
temp =*p;
*p =*q;
*q=temp;
}
}
int main(void)
{
char s[] = "Hello, World!";
reverseStr(s);
printf("%s",s);
return 0;
}
=====Result=====
#include "stdlib.h"
#include "string.h"
void reverseStr(char *strPointer)
{
char temp;
char *p,*q;
p = strPointer;
q = &strPointer[strlen(strPointer)-1];
for(;p<=q;p++,q--)
{
temp =*p;
*p =*q;
*q=temp;
}
}
int main(void)
{
char s[] = "Hello, World!";
reverseStr(s);
printf("%s",s);
return 0;
}
=====Result=====
2013年9月3日 星期二
[GCC]bubble sort in function
#include "stdio.h"
void bubble_sort(long [], long);
int main()
{
long array[100], n, c, d, swap;
printf("Enter number of elements\n");
scanf("%ld", &n);
printf("Enter %ld integers\n", n);
for (c = 0; c < n; c++)
scanf("%ld", &array[c]);
bubble_sort(array, n);
printf("Sorted list in ascending order:\n");
for ( c = 0 ; c < n ; c++ )
printf("%ld\n", array[c]);
return 0;
}
void bubble_sort(long list[], long n)
{
long c, d, t;
for (c = 0 ; c < ( n - 1 ); c++)
{
for (d = 0 ; d < n - c - 1; d++)
{
if (list[d] > list[d+1])
{
/* Swapping */
t = list[d];
list[d] = list[d+1];
list[d+1] = t;
}
}
}
}
void bubble_sort(long [], long);
int main()
{
long array[100], n, c, d, swap;
printf("Enter number of elements\n");
scanf("%ld", &n);
printf("Enter %ld integers\n", n);
for (c = 0; c < n; c++)
scanf("%ld", &array[c]);
bubble_sort(array, n);
printf("Sorted list in ascending order:\n");
for ( c = 0 ; c < n ; c++ )
printf("%ld\n", array[c]);
return 0;
}
void bubble_sort(long list[], long n)
{
long c, d, t;
for (c = 0 ; c < ( n - 1 ); c++)
{
for (d = 0 ; d < n - c - 1; d++)
{
if (list[d] > list[d+1])
{
/* Swapping */
t = list[d];
list[d] = list[d+1];
list[d+1] = t;
}
}
}
}
[GCC]array_call_by_value
#include "stdio.h"
void array_call_by_value (int arr[])
{
arr[0] = 2;
printf("[in] function\n");
printf("%d %d %d\n", arr[0], arr[1], arr[2]);
}
int main()
{
int arr[] = {1, 2, 3};
printf("[before] function\n");
printf("%d %d %d\n", arr[0], arr[1], arr[2]);
array_call_by_value(arr);
printf("[after] function\n");
printf("%d %d %d\n", arr[0], arr[1], arr[2]);
}
=====Result=====
1.array是沒有pass by value
2.return arry by value(編譯會錯誤!!)
ex:
int [] array_call_by_value (int arr[])
{
arr[0] = 2;
printf("in function\n");
printf("%d %d %d\n", arr[0], arr[1], arr[2]);
}
void array_call_by_value (int arr[])
{
arr[0] = 2;
printf("[in] function\n");
printf("%d %d %d\n", arr[0], arr[1], arr[2]);
}
int main()
{
int arr[] = {1, 2, 3};
printf("[before] function\n");
printf("%d %d %d\n", arr[0], arr[1], arr[2]);
array_call_by_value(arr);
printf("[after] function\n");
printf("%d %d %d\n", arr[0], arr[1], arr[2]);
}
=====Result=====
1.array是沒有pass by value
2.return arry by value(編譯會錯誤!!)
ex:
int [] array_call_by_value (int arr[])
{
arr[0] = 2;
printf("in function\n");
printf("%d %d %d\n", arr[0], arr[1], arr[2]);
}
2013年9月2日 星期一
[GCC]struct_call_by_address
#include "stdio.h"
#include "string.h" // strcpy()
typedef struct
{
int no;
char name[10];
} student, *pstudent;
pstudent struct_call_by_address(pstudent pboy)
{
pboy->no = 10;
strcpy(pboy->name, "oomusou");
printf("[in] function:\n");
printf("no=%d, name=%s\n", pboy->no, pboy->name);
printf("=====================\n");
return pboy;
}
int main()
{
student boy = {20, "John"};
pstudent pboy = 0;
printf("[before] function\n");
printf("no=%d, name=%s\n", boy.no, boy.name);
printf("=====================\n");
pboy = struct_call_by_address(&boy);
printf("[after] function\n");
printf("*boy* no=%d, name=%s\n", boy.no, boy.name);
printf("*pboy* no=%d, name=%s\n", pboy->no, pboy->name);
printf("=====================\n");
}
=====Result=====
#include "string.h" // strcpy()
typedef struct
{
int no;
char name[10];
} student, *pstudent;
pstudent struct_call_by_address(pstudent pboy)
{
pboy->no = 10;
strcpy(pboy->name, "oomusou");
printf("[in] function:\n");
printf("no=%d, name=%s\n", pboy->no, pboy->name);
printf("=====================\n");
return pboy;
}
int main()
{
student boy = {20, "John"};
pstudent pboy = 0;
printf("[before] function\n");
printf("no=%d, name=%s\n", boy.no, boy.name);
printf("=====================\n");
pboy = struct_call_by_address(&boy);
printf("[after] function\n");
printf("*boy* no=%d, name=%s\n", boy.no, boy.name);
printf("*pboy* no=%d, name=%s\n", pboy->no, pboy->name);
printf("=====================\n");
}
=====Result=====
[GCC] array sum function
#include "stdio.h"
#include "stdlib.h"
int sum (int *,int);
int main()
{
int i[]={10,20,30,40,50};
int total;
total = sum (i ,sizeof(i)/sizeof(i[0]));
printf("Sum of Array i is %d\r\n",total);
return 0;
}
int sum(int *p,int n)
{
int k,total=0;
for(k=0; k < n; k++)
total +=*(p+k);
return total;
}
#include "stdlib.h"
int sum (int *,int);
int main()
{
int i[]={10,20,30,40,50};
int total;
total = sum (i ,sizeof(i)/sizeof(i[0]));
printf("Sum of Array i is %d\r\n",total);
return 0;
}
int sum(int *p,int n)
{
int k,total=0;
for(k=0; k < n; k++)
total +=*(p+k);
return total;
}
=====Result=====
Sum of Array i is 150
[G++]Call by Reference (ps: C無此功能)
#include "stdio.h"
#include "stdlib.h"
void swap(int &, int &);
void swap(int &a, int &b)
{
int x;
x = a;
a = b;
b = x;
}
int main()
{
int m, n;
m = 5;
n = 7;
printf("[Before] m = %d <-> n = %d \n", m, n);->
swap(m, n);
printf("[After] m = %d <-> n = %d \n", m, n);->
return 0;
}
=====Result=====
[Before] m =5 <-> n = 7 ->
[After] m =7 <-> n = 5->
(ps: C無call by reference 所以 **.c檔是無法編譯,需使用cpp檔)
#include "stdlib.h"
void swap(int &, int &);
void swap(int &a, int &b)
{
int x;
x = a;
a = b;
b = x;
}
int main()
{
int m, n;
m = 5;
n = 7;
printf("[Before] m = %d <-> n = %d \n", m, n);->
swap(m, n);
printf("[After] m = %d <-> n = %d \n", m, n);->
return 0;
}
=====Result=====
[Before] m =5 <-> n = 7 ->
[After] m =7 <-> n = 5->
(ps: C無call by reference 所以 **.c檔是無法編譯,需使用cpp檔)
2013年9月1日 星期日
ubuntu 12.04 快捷鍵
1. 窗口拖移與最大化、最小化:Ctrl + super + 方向鍵
2. 工作區切換 super + s
3. 工作區瀏覽 super + w
4. 工作區切換2 Alt + Tab (此時按上下左右可以預覽)
5. 看更多快捷鍵使用 長按 super
至於可能會找不到工作管理員,可以在命令列打上 "System" 應該會看到 "系統監控" 的選項。
[轉錄]Ubuntu 11.04 Unity最常用的31個快捷鍵
1、超級鍵(Win鍵) – 打開dash。
2、長按超級鍵 – 啟動Launcher。
3、按住超級鍵,再按1,2,3等數字鍵 – 從Launcher打開一個應用程序,當你按住超級鍵時,每個應用程序圖標上都會顯示一個數字,按下對應的數字就會打開蓋應用程序。
4、Alt+F1 – 將鍵槃焦點移到Launcher上,使用箭頭鍵進行移動,按回車即可啟動一個應用程序,按下右箭頭鍵顯示Quicklist。
5、Alt+F2 – 以特殊模式打開dash,以便運行任何命令。
6、超級鍵+A – 從Launcher打開應用程序窗口。
7、超級鍵+F – 從Launcher打開文件和文件夾窗口。
8、超級鍵+W – 伸展模式,縮小所有工作空間中的窗口。
9、超級鍵+D – 最小化所有窗口(即顯示桌面),再按一次恢復所有窗口。
10、超級鍵+T – 打開回收站。
11、超級鍵+S – Expo模式,縮小所有工作空間,允許你管理窗口。
12、Ctrl+Alt+T – 啟動Terminal。
13、Ctrl+Alt+L – 鎖住屏幕。
14、Ctrl+Alt+上/下/左/右鍵 – 移動到新的工作空間。
15、Ctrl+Alt+Shift+上/下/左/右鍵 – 將窗口放入新的工作空間。
16、F10 – 打開頂部面板的第一個菜單,使用箭頭鍵瀏覽菜單項。
下面是Ubuntu Unity支持的一些鼠標快捷鍵:
1、在Launcher中,可以拖動圖標對應用程序重新排序。
2、可以直接從Launcher將圖標拖動到回收站,將應用程序從Launcher中移除。
3、光標移到屏幕左側,停止不動几秒,將會啟動Unity Dock。
4、將光標移到左上角(接近Ubuntu圖標),也會啟動Unity Dock。
5、如果Launcher中的應用程序太多,可以滾動鼠標滾輪快速移動。
6、當光標在頂部面板的“聲音”圖標上時,可以通過鼠標滾輪來調整系統音量(放大或降低)。
7、在一個應用程序的Launcher圖標上點擊鼠標中鍵(按一下滾輪),將在一個新的窗口中打開應用程序,有時這個功能非常有用,在筆記本上,衕時按下左/右方向鍵也會達到衕樣的效果。
8、最大化 – 拖動窗口靠近頂部面板會自動最大化。
9、恢復窗口大小 – 向下拖動窗口或雙擊窗口。
10、平鋪 – 將窗口拖向左/右側。
下面是一個有用的窗口管理快捷鍵:
1、Alt+F10 – 在最大化/非最大化之間切換當前窗口。
2、Alt+F9 – 最小化當前窗口。
3、Alt+Tab – 在當前打開的窗口之間切換。
4、Alt+F4 – 關閉當前窗口。
5、Alt+F7 – 移動當前窗口(可以使用鍵槃或鼠標移動)。
升級ubuntu版本
%sudo apt-get update
%sudo apt-get upgrade
%sudo apt-get install update-manager-core
%sudo do-release-upgrade
%sudo apt-get upgrade
%sudo apt-get install update-manager-core
%sudo do-release-upgrade
訂閱:
文章 (Atom)