我們都知道,每天的程式設計生活可能有時候會有些乏味。
看這個:
Joanna: Peter,你在哪工作呢?
Peter: Initech.
Joanna: 在哪……?好吧,你在那裡做什麼呢?
Peter: 我在一個小黑屋裡,給銀行的2000臺交換機更新軟體。
Joanna: 那是啥?
Peter: 明顯的問題,他們寫這些銀行軟體,額,為了節省空間,他們使用兩個數字替代4個數字來表示日期。比如,用98表示1998?啊!讓我去看這些成千上萬行的程式碼,額。。。這還沒什麼關係。我,額,我不喜歡我的工作,並且,額,我不會再去那裡了。*
好吧,儘管在我的辦公室裡沒有這麼沉悶,但是我依然喜歡在工作空餘的時間裡給大腦一些刺激。像大多數程式猿一樣,我喜歡練習那些有趣的程式碼問題和邏輯謎題。這比每週的辦公室娛樂活動便宜的多了,而且同樣有趣。我收集了以下我喜歡的程式和邏輯謎題網站,就是他們幫我的大腦一直處於活躍狀態,大家一起來看看吧:
1. Project Euler – 大量的數學邏輯程式,可以使用任何你喜歡的語言解答。很多問題根本不用程式設計就可以解決,但是大多數還是需要一臺電腦的。一旦你解決了一個問題之後,你就可以看到其他人的一些解決方案。這些解決方案往往有助於解決類似主題的其他一些問題。
2. The Python Challenge – 專門針對學習Python語言的一系列程式設計挑戰。儘管任何語言都可以解決這些謎題,但是如果你用Python,解決這些問題會更簡單一些。
3. Ruby Quiz – 一個可以使用任何語言解決程式挑戰問題的集合,但是如果你想檢視這些問題的評價,他們會預設的使用Ruby來解決。相對應的還會有一本書,《 最好的Ruby問答題》,討論所選擇問題可能的解決方案。
4. Top Coder – 定期的不同類別(演算法,測試,設計,組裝以及其他很多)程式設計比賽,同時會有來自微軟和NSA等贊助商為獲勝者提供的獎金。解決方案可以使用JAVA,C++,C#,或者VB。來看看比賽內容,感受一下你在比賽中可能遇到什麼樣型別的難題吧。同樣這裡還有大量,高水平的參賽者寫的不錯的指導教程。
5. UVa Online Judge – 數以百計來自過去程式設計比賽的問題,例如ACM國際程式設計大賽的題目。可以使用C,C++,Java或者Pascal提交解決方案。一定要看看這本書,《Programming Challenges | 挑戰程式設計:程式設計競賽訓練手冊 》,除此之外還有一本新書《From Baylor to Baylor》,收集了1991年到2006年期間 ,ACM-ICPC比賽決賽中所有的問題。
6. Sphere Online Judge – 數以百計的各種線上程式設計競賽中的問題。最好的地方在於,你可以使用十幾種不同的語言提交解決方案(參見網站難題列表的頂端,看看你最喜歡的語言是否包括在內)。
7. C Puzzles – 在這個頁面上的謎題都是關於C語言常見的陷阱和常犯錯誤等。C語言的專家型人才可能會在很短的時間內漂亮的完成這些問題,但如果你不知道C語言的本質,這些問題可能會有點挑戰。
8. Facebook Puzzles – 一個小型的程式設計問題網站,Facebook用來評估潛在僱員們的能力。你可以使用 C++、Erlang、Haskell、Java、OCaml、Perl、PHP、Python或者Ruby來提交解決方案。
9. Google Code Jam – 一個定期的程式設計比賽,參賽者使用指定的語言解決演算法問題。我不確定Google有沒有在2009年舉辦比賽的計劃,不過你可以看看2008年比賽中的問題,掂量掂量一下自己。
10. Microsoft Interview Questions – 首先,我先說明,我完全反對在面試中使用這類謎題。很多問題都需要“靈光一現”來解決,而不需要現實世界中的邏輯思考能力。如果你使用這類問題面試應聘者,需要警告你的是,你可能要先看看這個人以前看沒看過類似的問題。說到底,這些問題在面試之外做一做還是很有趣的。
11. wu:riddles – 數百個具有挑戰的邏輯謎題,各種各樣的難題。這些問題都標記了可能需要任何特殊的知識,例如:數學,物理,電腦科學或者國際象棋。
我忘記了什麼了沒?如果你在上邊的列表中沒看到你最喜歡的程式設計挑戰或邏輯謎題網站,可以給我在留言裡告訴我網站地址,我總是喜歡新的挑戰!
來自留言的更新
非常感謝大家留言讓我知道了新的謎題網站。下面這些是我以後會定期瀏覽的網站:
Programming Praxis 看起來是一個有希望的新部落格,充滿了程式設計練習讓你“磨刀不誤砍柴工”。看起來新的問題將會在二月份定期釋出。我已經收藏了網站的RSS。
Code Kata 是Dave Thomas在2007年發行的《The Pragmatic Programmer | 程式設計師修煉之道》這本書中的一系列簡短的問題。程式碼器是“簡單的實際練習,讓我們的試驗和學習更簡單的一個環境。”正是我要找的。
所有語言的程式設計師都將會想看看程式設計比賽的10大Prolog問題(免費的PDF電子書),還有99大Prolog問題。 (如果你不喜歡Prolog,你也可以用Haskell, Python, Scala, 或 Lisp做這99個題目。)
如果你對組織程式設計比賽感興趣,可能需要看看美國計算機奧林匹克或者ACM程式設計競賽題(在這裡能看到的問題你也能在前面提到的UVA線上中找到。)
Al Zimmermann’s Programming Contests (競賽名單) 目前比較經典的計算機程式設計問題,而且還有獎品哦。看起來競賽剛剛啟動幾個月不到一年,還有足夠時間參加本屆比賽。
Anarchy Golf 這裡有幾百個問題,還有一個伺服器,可以使用69種不同的語言提交解決方案。這個提醒了我,我忘記了Code Golf。跟任何其他網站不同,code golf是一個看誰的解決方案最短並且正確。JAVA程式設計人員可以去玩,但是Python和Perl在code golf更多一些。
最後,提醒一些讀者,不僅僅有程式設計和邏輯類的謎題。國際象棋和圍棋同樣可以非常有趣。Chess.com有一個每日一題,適合休閒玩家進行挑戰, GoGrinder是圍棋問題中一個優秀的開源程式練習網站。
再次感謝那些花費時間分享他們的謎題網站的人們。希望不會影響到下週大家的工作狀態。:)
*如果你不知道Office Space的那種感覺,跑出去到最近的磁帶店**直接拿起一份拷貝看吧。
(譯者注:Office Space是一部描寫在Initech公司上班的一位電腦工程師,在辦公室的那種崩潰的狀態的電影。 )
** 哈哈哈, “音像店”! 我怎麼了,像60歲嘛?看這裡吧 Netflix.