2009-03-02 29 views
20

你如何找到有趣的問題來解決?你如何找到有趣的問題來解決?

我常常想學習新的編程語言。不過,我覺得,要真正瞭解它,我必須寫的東西是:

  • 實時應該解決一些實際問題。這個問題不一定是新的(事實上,有一個參考解決方案可能是一個好主意),但它必須是一些東西,迫使我去解決一些骯髒,骯髒的細節。我不想解決數學難題或實現各種算法和數據結構,因爲只有教我如何解決數學(或A & DS)問題'new-language

  • 的東西,我可以得到熱情,它需要時間來學習新的編程語言的來龍去脈。那意味着我必須投入那個時間。爲了幫助我保持積極性,我想解決在某種程度上吸引我的問題。我認爲這部分是最困難的,至少對我來說,我所有的一半完成的項目都是如此;這也是最重要的部分。無論現實世界存在多大的問題,如果你不用它,你也不會從中學習。

  • 機最終連接到充滿激情的方面,我想要的東西,我相信我可以給一個可交付狀態時,只有在我的業餘時間工作。即使「C編譯器」是非常的真實世界,我真的很喜歡編譯器,這是一個有點大嘴巴。即使是一個簡單的表達式評估器,當您不熟悉特定語言的習慣用法時,您可以重新設計,調試和優化多次。

那麼,您(或您)如何解決尋找有趣的工作問題?

特別的解決方案,也就是說,問題並予以解決,將不勝感激,但(原諒傲慢),他們只是「啞巴知識」。我最感興趣的是思考和攻擊問題的新方法(即算法>>數據:D)。

編輯:迄今爲止的獲勝者是「製作遊戲」和「修復令您惱火的東西(編程|使用comptuers)」。我可以重新實現許多合理簡單的遊戲(給我一大堆攻擊難度),他們絕對是真實的世界,而且我是一名玩家,對好遊戲充滿激情。

「解決煩人的事情」具有內在的激情和現實世界,但它要求我不會因爲事物的正常工作而被寵壞,而且修復不會修改某些未寫入的程序我想學習的語言。

(你們都贏得了給予好評。一個可以接受在它的途中)

+0

應該是社區wiki – Malfist 2009-03-02 21:45:22

回答

2

每當我看到一些正在做過來,我再次看到了機會創造一些片的可重用代碼。正是在我的DAL以及我所從事的其他許多項目中。

+0

達姆 - 這是我的答案...所以它是+1! – 2009-03-02 21:51:02

0

我經常發現,已經在那裏,我已經遇到的問題可以用不同的語言來更容易地完成。例如:使用多種語言的PDF。

3

我收集的,我用了幾次學習一門新語言這個「標準」的問題。

http://homepage.mac.com/s_lott/books/oodesign.html

這是真實的。它有一些有形的價值。它是完成的。

+0

這個問題可能很有趣,但是我得到了這種無法逃避的感覺,書中提出的設計包含了大量的YAGNI概括和大量簡單地誇大設計的類。 – 2009-03-03 07:29:56

+0

一些概括性有助於學習該語言的功能。有些人在那裏教OO設計原則。所以,你可以爭辯說他們「過於普遍」。一個人的「可擴展」總是另一個人的YAGNI。 Extensible在你真正需要它之前總是有爭議的。 – 2009-03-03 10:54:17

0

嗯。如果這是你的目標,那麼你可以在兩個階段嘗試它......對於算法方面,我強烈建議看看一些編程挑戰out there,並結合閱讀Skeina的書Programming Challenges。它提供了大量關於如何從算法和數據結構的角度來處理問題的理論,然後向您提供了一些示例問題,您可以嘗試將這些想法付諸實踐。這將非常好地讓你完成精神榨汁。非常類似於歐拉計劃,但是對於硬核算法和數據結構人員而言,而不是數學人員。

對於只是「學習語言,覺得你可以真正使用它」,好吧,有很多想法...對我來說,只是爲了使用一個例子,我喜歡建立一個數據庫驅動的網站。強迫我做很多事情,你將不得不做一些事情來深入一些語言。

如果您需要某個網站的特定示例,並且確實希望被迫去做一些真實的事情,您可以聯繫您喜歡的一些慈善機構,並查看需要爲他們完成的網站或其他應用程序自由。你被迫學習,並有理由在合理的時間內這樣做,他們可以免費獲得有用的應用程序。雙贏。

+0

「你可以聯繫你喜歡的一些慈善機構[...]」 - 我會更願意(比起內在的興趣來獲得更多的義務感(避免讓人失望的懲罰)我想出於個人原因)。 – 2009-03-03 00:29:47

+0

正是!如果這個人感覺他們需要一個很好的理由去闖過一些困難,那麼這將成爲一個出色的激勵者。當然,一旦他們完成了,他們會收穫既做了一件好事,也學會了他們想學的東西。 – Beska 2009-03-03 14:57:24

3

在自己的生活中發現一些可以通過編程解決的「問題」。雖然說起來容易做起來難,但我會舉一個例子。我收到了其中一個日曆,其中包含一年中的每一天(真實)。我喜歡文字拼圖等激情,當時我一直想要一個項目潛入蟒蛇。所以我創建了一個簡單的命令行腳本來解決sqlite後端的問題,並且從那以後我一直在用python做很多事情。該項目完成後,我仍然希望它能夠完成,並且繼續改進和增加它,但它對我來說是一個啓動項目。所以我真的覺得訣竅就是找到一些你可以在那裏工作的東西,它很容易和直接地連接到你的日常生活中。

12

爲了產生創意,我發現詢問「編程有什麼問題」以及「在計算機上工作有什麼問題」總是很有幫助。

完成的事情是另一回事。整理的東西是真的很難。我認爲,如果你接受了你將擁有一個項目組合,其中許多項目仍未完成,你會更開心。如果你完成了一切,你將有機會探索更少的想法和技術。

仔細選擇哪些項目要完成,並記住海恩的話:在一個地方豎起


它很容易地看到
隱祕訓誡

T. T. T. 

當你感到壓抑時
慢慢地你爬上,
是要記住,

Things Take Time. 
7

做一個遊戲。你會學到很多關於任何語言的知識。它不一定是花式的。製作地牢爬行什麼的。

1

我也不去尋找問題,在代碼或其他。相反,我儘可能地保持睜大眼睛,這樣我就不會錯過更簡單的老問題解決方案的靈感:)

有時我只是看人們是人......或者是蟑螂在忙着日常活動。

很多時候,如果你這樣做,你會遇到新的問題需要解決。不要試圖考慮複雜的問題,這樣做通常會導致複雜的解決方案。你想到的每一個想法都會訓練你的大腦,你和你想象的一樣多,你所吃的就是你的東西。

1

軟件開發(或者只是探索技術如何工作)的「靈感」的另一個來源是那些「爲什麼它不能處理這個問題?」或者「它應該與此一起工作!」時刻。我有一些像XSD的代碼生成那樣的時刻。

另一個來源是那些「必須有一個更優雅的方式來做到這一點!」時刻。簡單的小東西,如C#「if(x是typea)do_a else if(x是type_b)bo_b else ....」。讓我開始思考更好的方式去做事情。

有些人之前提到的另一個來源是「我可以寫一個系統來做到這一點嗎?」時刻(或修辭問題)。我認識一些曾經在ISAM系統上修過一年的程序員,因爲喜歡玩這個而在這裏和那裏調整。沒有想法甚至完成該項目,只是玩不同的想法和實施。

0

我維護一個項目/類/函數的列表,以創建「當我獲得時間和傾向」。我爲其他愛好保留了類似的名單。如果我覺得無聊或想要挑戰,總有一些事情要做。

1

雖然不是顯然現實世界,我有一個想法的是至少最終處理,並且可能是你應該動機做(話又說回來,你應該項目的良好來源每天使用牙線:p)。

爲了回顧和測試理解,實現您作爲CS教育一部分學到的各種算法。一些項目:

  • 實現有限狀態自動機庫,具有語言成員資格測試,產品構造和brzozowski最小化。
  • 實現最大流量,最小成本流量和線性程序求解器。
  • 實現選擇NP完全問題,多項式時間逼近和蠻力求解器之間的約簡。
  • 寫自己的實現加密算法(但不使用它們:d)

IIRC,mona是用來驗證電路的正確性有限狀態機的thingie; ISTR我的講師談論線性規劃在經濟學中的應用,而gcc確實記錄了分配(這是圖形着色,它是NP完全的)。加密當然可以保證所有的信用卡交易在線。所以它不是完全不真實的世界:)

1

我太遲了嗎? 這裏是一個「亞真實」的問題。既然你喜歡遊戲的事情。檢查這個Java4K,你應該只在4096字節的遊戲。 你會學到很多關於Java的知識,很多代碼優化和肯定,如何簡單思考。

,並在一天結束時,你將有一個新的遊戲:)

0

你可以嘗試編碼解決一個真正的問題的朋友或家庭成員都有一臺計算機上。如果您爲相對不熟悉計算機的人創建解決方案,這可能是一種練習編碼的特別好方法 - 這類人會問您另一個編碼員從來不會遇到的問題。關於你的解決方案的這些現實世界的問題可能是這樣的:「爲什麼這個會在所有這些寫作的黑色窗口中出現?」 - 參考從DOS命令提示符運行的腳本。當你遇到這樣的問題時,你需要牢牢把握自己對語言的理解,並且必須能夠以外行的語言迴應,以便能夠回答它們。

我現在正在學習perl的過程,我正在使用它來爲運行公寓大樓的家庭成員設計一個物業管理系統。

通過爲某人靠近你並期待你完成某件事情,你可能會發現自己更有動力寫出整個解決方案,而不是半途而廢。

相關問題