這裏顯示兩個版本的差異處。
Both sides previous revision 前次修改 下次修改 | 前次修改 | ||
society:programmer_chicken [2012/03/24 19:13] wenpei 成為編程高手的二十二條軍規 |
society:programmer_chicken [2013/01/12 11:16] (目前版本) wenpei |
||
---|---|---|---|
行 1: | 行 1: | ||
+ | ====== Other References ====== | ||
+ | [[http://www.kenming.idv.tw/cu_ao_a_ie_cui_af_er_el_a_pas_acl_archit|從軟體架構師(Architect)的觀點來看軟體開發流程]] | ||
+ | |||
+ | [[http://yetsai.blogspot.tw/2012/06/cs.html|給CS的你 - 從留學生到第一份工作]] | ||
+ | |||
====== 10001 件資工系畢業前一定要做的事 ====== | ====== 10001 件資工系畢業前一定要做的事 ====== | ||
出處:http://mrjamie.cc/2011/06/27/things-all-cs-students-should-do/ | 出處:http://mrjamie.cc/2011/06/27/things-all-cs-students-should-do/ | ||
行 104: | 行 109: | ||
「不會啊。很多人說自己有二十年經驗,但只是一年經驗,用了二十年,」「我是扎扎實實的學習上 去……,我試了幾百幾千條(方法),看了很多武功秘笈(網路與書的知識累積)。我不需要浪費時間在很多人已經證實的事情上面。」 | 「不會啊。很多人說自己有二十年經驗,但只是一年經驗,用了二十年,」「我是扎扎實實的學習上 去……,我試了幾百幾千條(方法),看了很多武功秘笈(網路與書的知識累積)。我不需要浪費時間在很多人已經證實的事情上面。」 | ||
+ | |||
+ | ====== 寫給即將入行的程式師的一封信 ====== | ||
+ | http://www.jobbole.com/entry.php/903 | ||
+ | |||
+ | 來源:伯樂線上 | ||
+ | |||
+ | 首先,歡迎來到程式師的世界。在這個世界上,不是有很多人想創造軟體並解決問題。你是一名hacker,屬於那些願意做一些有挑戰性的事情的人。 | ||
+ | |||
+ | “當你不創造東西時,你只會根據自己的感覺而不是能力去看待問題。” – WhyTheLuckyStiff | ||
+ | |||
+ | 對於下面的文字你不必完全接受,所有這些來自一個其貌不揚的程式師。我喜歡把事情做到最好,而不是對原來的東西修修補補。 | ||
+ | |||
+ | 僅僅是因為愛好開始做一些創新,這是一個很好的開始!如果你說“我要先學習一下再開始做”那麼你永遠不會真正開始。每個人都需要從某個地方開始,所以現在打開你的編輯器開始寫代碼吧。 | ||
+ | |||
+ | 下面是一些很重要的建議,雖然有人並不認同,但我保證你看完我的分析以後會站在我這一邊。一開始,先不要管演算法和資料結構。大多數簡單的程式不需要用到演算法和資料結構,所以當你真正需要時再去學習。程式設計一段時間以後,你就會知道在哪些地方用到他們。這時知道演算法的名字並瞭解它們的功能,然後找一些相關的論文去理解演算法並動手程式設計實踐。如果沒有現成的函式程式庫(其他程式師提供的可重用代碼),你用自己喜歡的程式設計語言來實現它。 | ||
+ | |||
+ | 0. 選擇一門好的程式設計語言,一門你自認為可以用它快速地做出一些有用東西的語言。 | ||
+ | |||
+ | 不要選擇C語言作為你第一門程式設計語言。也許選擇C語言會給你一種過時的滿足感。雖然它比早期的組合語言提供了更好語法描述,但是今天C(或者C++)不是能夠快速編寫軟體的語言。毫不偏袒的說,我建議你學習一種動態語言。選擇一種你覺得語法(文檔)讓你使用起來更舒服的程式設計。為此,你可能需要花費一些時間來在幾種不同的語言之間進行比較。這麼做目的不是為了讓你感覺更好或者讓程式設計更容易。更快地完成自己的作品並且能夠看到成果,才是激勵你程式設計的源動力。不要選擇一門需要某種重量級的IDE(IDE是一種能夠幫助你編寫並運行代碼的工具)才能輕鬆程式設計的語言。你所需要的僅僅是一個文字編輯器。(注:原文並沒有標號,是我們加上的,請大家別忘記了哦,我們是從零開始數數的。:) ) | ||
+ | |||
+ | 1. 選擇一個好的編輯器。 | ||
+ | |||
+ | 編輯器對程式師而言,就是像是弓對弓箭手一樣重要。這裡有一些推薦的編輯器: | ||
+ | • SublimeText 2 – 如果你剛開始程式設計,推薦使用SublimeText 2 | ||
+ | • Emacs – 學習曲線陡峭,快速鍵複雜。如果你想定制自己的使用習慣,需要學習Emacs Lisp. | ||
+ | • Vim – 不僅操作簡潔而且它默認包含在linux的發行版本中,所以深受大家歡迎。我開始使用了2年Emacs。由於Emacs的快速鍵操作過於複雜,我的雙手開始經常疼痛,這迫使我轉向了Vim陣營。瞭解Vim的快速鍵是非常有必要的。當你在遠端的伺服器上編輯代碼時,你唯一不需要安裝的編輯器就是Vim。 | ||
+ | |||
+ | 注意!Emacs和Vim可能已經成為成為古董了。但是,它們都具備一些現代編輯器多不具備的功能。 | ||
+ | |||
+ | 2. 選擇一個你可以從中學到東西的作業系統 | ||
+ | |||
+ | Windows不會教會你任何東西。使用Windows你唯一學會的就是打開一個exe(可執行)檔來安裝軟體和使用它。可能剛開始的時候你會覺得很酷,但是長遠來看,如果你立志成為一個web開發人員,可能還是要具備基本的linux知識,尤其是當你要發佈程式的時候。Linux也允許你根據自己的要求來定制程式。Macs也很酷,但是我認為你現在經濟上還負擔不起。 | ||
+ | |||
+ | 3. 不要通過複製粘貼來做備份 | ||
+ | |||
+ | 一個新手程式師通常會把檔複製粘貼到一個臨時目錄下麵來進行備份。這也許也是他們唯一知道的方法。不要那麼做!你需要使用版本控制軟體。我強烈推薦使用Git,它是個目前很流行的版本控制工具,而且使用起來非常簡單。對一個Git新手,有一個良好的社區和很多參考資源來學習。(除了Git之外,還有mercurial, darcs, fossil等等。但是我還是建議從Git開始,我有很多的理由來支持Git,這裡就不多費口舌了。) | ||
+ | |||
+ | 4. 知道去哪裡尋求幫助 | ||
+ | |||
+ | 參加一個和你相關的(你使用程式設計工具相關的)程式師社區。比如StackOverflow就是程式師的Facebook。那裡沒有消息狀態和回復,取而代之的是問題和答案。除此之外還要學會使用IRC。IRC是一種老式的聊天室,現在還在被大多數開發人員用來分享技術資訊和説明解決問題。 | ||
+ | |||
+ | 5. 培養你的禮儀 | ||
+ | |||
+ | 知道什麼時候問問題。你遇到的大多數問題都是別人碰到過並且在Internet上能夠找到解答的。在IRC或者任何論壇裡發問之前,先搜索一下google(或者blekko)來看看是不是有現成的答案。在IRC上問問題需要有耐心。永遠記住,人們只是處於好心來免費幫助你。有時你發問以後需要幾個小時才能有回復。所以,耐心等待。除此之外,記得問問題的時候要禮貌。世界很小,你怎麼對待別人,別人就會怎麼對待你。 | ||
+ | |||
+ | 6. 結交朋友,技術書籍只能教你解決常見的問題(他們說:書是死的) | ||
+ | |||
+ | 當你在搗鼓一些程式或者從程式的作者那裡學習,你能學到一些書本上沒有的東西。當你散步的時候,請和遇到的朋友打招呼。你肯定不是唯一的程式師。和其他的程式師一起交朋友一起工作。你會注意到,當一群技術愛好者在一起的時候,不論話題是從什麼地方開始,最後總是以技術話題收尾。這是必然的現象。所以你可以盡情參與。在你的黃金年齡努力程式設計,我能告訴你的是,我在開始6年前尋找朋友並開始討論程式設計,從那時起才學到那些書本和文章不會我的東西。所以我總是說,我的程式設計經驗有6年,因為只有那個時候開始,我才開始與人交流並開始感覺真正地開始學習程式設計。 | ||
+ | |||
+ | 7. 參加開源項目 | ||
+ | |||
+ | 為開源項目編寫代碼能帶來回報。這不僅僅是幫助別人,你留下的代碼會被其他人使用或(可能)改進。當別人給你的代碼添加功能或者提出修改意見時,也是在提高你的程式設計水準。開源軟體專案不一定要是一個大工程,編寫一個下載youtube視頻的小程式也是很有用的。更重要的是,你會驚奇地發現你編寫的代碼會成為與他人有效溝通的橋樑。其實關於參與開源專案,伯樂線上編譯的不少有關程式師的文章都是如此建議,比如Justin James 的《程式師開始程式設計生涯的5個建議》。 | ||
+ | |||
+ | 最後,若干年之後如果本文的內容曾經對你有一點點的幫助,作為回報請寫一封類似的信給希望開始程式設計並不知如何入手的朋友,有可能的話請糾正本文中過時的內容。 | ||
+ | |||
+ | 智者說過,掌握某個東西需要10年或10000個小時,也就是漢語中的“十年磨一劍”,所以不用著急。 | ||
====== 成為編程高手的二十二條軍規 ====== | ====== 成為編程高手的二十二條軍規 ====== | ||
行 1705: | 行 1766: | ||
本文作者:蔡學鏞 | 本文作者:蔡學鏞 | ||
張貼日期:01/01/2002 | 張貼日期:01/01/2002 | ||
+ | |||
+ | ====== 畢業三年,同學基本都辭職了 ====== | ||
+ | 當時公司招了大批應屆本科和研究生畢業的新新人類。平均年齡25歲。那個新的助理,是經過多次面試後,我親自招回來的一個女孩。名牌大學本科畢業,聰明,性格活潑。私下裡我得承認,我招她的一個很重要的原因,除了她在大學裡優秀的表現之外,還因為她寫了一手漂亮的字。女孩能寫一手好字的不多,尤其像她,看起來長髮飄飄,多麼女性化的一個姑娘,一手字卻寫的鏗鏘倜儻,讓我對她不由多了很多好感。 | ||
+ | |||
+ | 手把手的教。從工作流程到待人接物。她也學的快。很多工作一教就上手。一上手就熟練。跟各位同事也相處的頗融洽。我開始慢慢的給她一些協調的工作,各部門之間以及各分公司之間的業務聯繫和溝通讓她嘗試著去處理。 | ||
+ | |||
+ | 開始經常出錯。她很緊張,來找我談。我告訴她:錯了沒關係,你且放心按照你的想法去做。遇到問題了,來問我,我會告訴你該怎麼辦。仍然錯。又來找我,這次談的比較深入,她的困惑是,為什麼總是讓她做這些瑣碎的事情?我當時問她:什麼叫做不瑣碎的工作呢? | ||
+ | |||
+ | 她答不上來,想了半天,跟我說:我總覺得,我的能力不僅僅能做這些,我還能做一些更加重要的事情。那次談話,進行了1小時。我知道,我說的話,她沒聽進去多少。後來我說,先把手頭的工作做好,先避免常識性錯誤的發生。然後循序漸進罷。 | ||
+ | |||
+ | 半年以後,她來找我,第一次提出辭職。我推掉了約會,跟她談辭職的問題。問起辭職的原因,她跟我直言:本科四年,功課優秀,沒想到畢業後找到了工作,卻每天處理的都是些瑣碎的事情。沒有成就感。我又問她:你覺得,在你現在所有的工作中,最沒有意義的最浪費你的時間精力的工作,是什麼?她馬上答我:幫您貼發票,然後報銷,然後到財務去走流程,然後把現金拿回來給您。 | ||
+ | |||
+ | 我笑著問她:你幫我貼發票報銷有半年了吧?通過這件事兒,你總結出了一些什麼資訊? | ||
+ | |||
+ | 她呆了半天,答我:貼發票就是貼發票,只要財務上不出錯,不就行了唄,能有什麼資訊? | ||
+ | |||
+ | 我說,我來跟你講講,當年我的做法吧:98年的時候,我從財務被調到了總經理辦公室,擔任總經理助理的工作。其中有一項工作,就是跟你現在做的一樣,幫總經理報銷他所有的票據。本來這個工作就像你你剛才說的,把票據貼好,然後完成財務上的流程,就可以了。 | ||
+ | |||
+ | 其實票據是一種資料記錄,它記錄了和總經理乃至整個公司營運有關的費用情況。看起來沒有意義的一堆資料,其實它們涉及到了公司各方面的經營和運作。於是我建立了一個表格,將所有總經理在我這裡報銷的資料按照時間,數額,消費場所,連絡人,電話等等記錄下來。 | ||
+ | |||
+ | 我起初建立這個表格的目的很簡單,我是想在財務上有據可循,同時萬一我的上司有情況來詢問我的時候,我會有準確的資料告訴他。通過這樣的一份資料統計,漸漸的我發現了一些上級在商務活動中的規律,比如,哪一類的商務活動,經常在什麼樣的場合,費用預算大概是多少;總經理的公共關係常規和非常規的處理方式。等等等等。 | ||
+ | |||
+ | 當我的上級發現,他佈置工作給我的時候,我會處理的很妥貼。有一些資訊是他根本沒有告訴我的,我也能及時準確的處理。他問我為什麼,我告訴了他我的工作方法和資訊來源。 | ||
+ | |||
+ | 漸漸的,他基於這種良性積累,越來越多的交待更加重要的工作。再漸漸的,一種信任和默契就此產生,我升職的時候,他說我是他用過的最好用的助理。 | ||
+ | |||
+ | 說完這些長篇大論,我看著這個姑娘,她愣愣的看著我。我跟她直言:我覺得你最大的問題,是你沒有用心。在看似簡單不動腦子就能完成的工作裡,你沒有把你的心沉下去,所以,半年了,你覺得自己沒有進步。她不出聲。但是收回了辭職報告。 | ||
+ | |||
+ | 又堅持了3個月,她還是辭職了。這次我沒有留她。讓她走了。 | ||
+ | |||
+ | 後來她經常在MSN上跟我聊天。告訴我她的新工作的情況。一年內,她換了三份工作。每一次都堅持不了多久。每一次她都說新的工作不是她想要的工作。05年的時候,她又一次辭職了。很苦惱,跑來找我,要跟我吃飯。我請她去寫字樓後面的商場吃日本料理。吃到中途,忽然跟我說:我有些明白你以前說的話是什麼意思了。 | ||
+ | |||
+ | 所謂的職業生涯,其實你很難預測到你將來真正要從事什麼工作,將來所要從事的工作,是否跟你在大學裡學的專業有關。大多數人,很有可能將來所作的工作,跟他當初所學的專業一點關係都沒有。從22歲大學畢業在26歲之間這四年,重要的不是你做了什麼,重要的是你在工作中養成了怎麼樣的良好的工作習慣。這個良好的工作習慣,指的是:認真,踏實的工作作風,以及是否學會了如何用最快的時間接受新的事物,發現新事物的內在規律,比別人更短時間內掌握這些規律並且處理好它們。具備了以上的要素,你就成長為一個被人信任的工作的人。 | ||
+ | |||
+ | 人都有惰性,也都願意用那些用起來順手的人。當你具備了被人信任的基礎,並且在日常的工作中逐漸表現出你的踏實,聰明,和細緻的時候,越來越多的工作機會就會提供到你面前。原因很簡單,用一句話就能交代清楚並且能被你順利完成的工作,誰願意說三句話甚至半小時交待一個怎麼都不明白的人呢?溝通也是一種成本,溝通的時間越少,內耗越少,這是作為管理者最清楚的一件事。 | ||
+ | |||
+ | 當你有比別人更多的工作機會去接觸那些你沒有接觸過的工作的時候,你就有了比別人多的學習機會,人人都喜歡聰明勤奮的學生,作為管理者,大概更是如此。 | ||
+ | |||
+ | 一個新手,大多數新手,在這四年裡,是看不出太大的差距的。但是這四年的經歷,為以後的職業生涯的發展奠定的基礎,是至關重要的。很多人不在乎年輕時走彎路,很多人覺得日常的工作人人都能做好沒什麼了不起。然而就是這些簡單的工作,循序漸進的、隱約的,成為今後發展的分水嶺。 | ||
+ | |||
+ | 漫不經心的對待基層工作的最大的損失,就是將看似簡單的事物性處理方式,分界成為長遠發展的能力問題。 | ||
+ | |||
+ | 聰明的人,總是不認為自己的能力有問題。時間長了,他會抱怨自己運氣不好,抱怨那些看起來資質普通的人,總能比自己更能走狗屎運。抱怨她容貌比自己好,或者他更會討領導歡心。等等等等。慢慢的,影響心態。所謂的懷才不遇,有時是這種情況。 | ||
+ | |||
+ | 工作需要一個聰明人,工作其實更需要一個踏實的人。在聰明和踏實之間,我更願意選擇後者。 | ||
+ | |||
+ | 而踏實,是人人都能做到的。和先天條件沒有太大關係。 | ||
====== 暴強的程式師考題 ====== | ====== 暴強的程式師考題 ====== |