2009-02-04 24 views
4

現在我已經變得非常流利地使用幾種不同的語言,但我似乎很難找出解決特定問題的最佳方法。有什麼方法可以更好地解決編程的實際問題。如何才能更好地實現如何解決特定問題?

+0

感謝您的所有偉大的建議。我目前從事網絡開發工作,我發現自己正在挖掘其他人如何做到這一點。如果他們把它分解成最小的一點,我可以把它編碼得很好,這就是我想要更好的「如何攻擊」部分。再次感謝! – patricksweeney 2009-02-04 03:42:10

回答

10

經驗。解決全新的事情很難。解決問題的最佳方式是嘗試找到一個您之前解決的問題,而且這種問題是相似的,並使您的解決方案適應新問題。所以,除非你有許多不同類型問題的經驗,否則很難解決你遇到的新問題。像這樣訪問網站,閱讀問題和他們的答案是瞭解別人如何解決他們遇到的問題的好方法。

1

通過解決實際問題。實踐使得完美。

如果你有時間流利語言,我的猜測是,你沒有花很多時間做任何實際工作。如果你有工作,那可能是換一個新工作的時候了。如果你仍然在學校,你是否有興趣爲自己開始一個項目或爲你經常使用的項目做出貢獻?

這可能有助於瞭解哪些問題難以解決。

0
  1. 練習解決問題。

  2. 採取算法或離散數學課程。

4

基本上,「就這樣做」。當你必須做出選擇時,只需做出任何選擇(除了翻轉硬幣)。

一旦你有了一些可行的方法,然後坐下來回頭想想你做錯了什麼,以及如何做得更好。

如果你完全不知道如何做到這一點,只需完全解決問題的一部分,繼續前進。我建議您查看this book。他們不是最好的孩子,儘管他們希望我們認爲他們是......但他們在Basecamp中表現出色。

1

去找一個開源或免費的項目,你可以興奮和貢獻。通過註冊我最喜歡的視頻遊戲修改代碼,我學到了很多東西。

1

經驗。

學習真的只有這麼遠。找到一些有趣而小巧的東西做到這一點。

1

似乎適用於很多人的方法之一是選擇使用像Programming Challenges這樣的書作爲指導,並專注於解決特定類型的問題。例如,如果你在圖形問題或動態編程等領域薄弱,可以在網上裁判找到一系列問題並通過它們解決問題。你會開始識別模式並能夠分類問題。

1
  • Google尋求答案。有機會之前,別人已經解決了同樣的問題或類似的問題。
  • 詢問SO。 :)
  • 閱讀有關設計模式的一些教科書或在線文章。
  • 問題可能有許多解決方案,一些更簡單,一些更復雜。不要因爲只有一個解決方案而陷入困境。只需使用最適合您應用環境的最簡單的解決方案即可。
  • 經過多年的經驗,您將能夠爲大多數問題考慮自己的解決方案。 :)
1

研究Algorithms

搜索,並獲得儘可能多的例子保持,關於這個問題的編程或以其他方式等書籍

解決問題的能力,也可以通過玩遊戲戰術提高。

這使我在解決問題的享受解決問題,併成爲更好的(不一定好):

Chessigo

2
  • 問問別人。有人在你的辦公室,Twitter或SO,甚至你的妻子。沒有技術知識的人通常會想出更簡單的解決方案。

如果必須解決它自己,嘗試這些人之一:

  • 做另一個人或項目,試圖解決您的問題進行快速搜索。如果他們有博客,文檔或源代碼,您可以從他們的實施中學習。

  • 拿出至少兩個解決方案,並選擇最好的一個。

  • 假裝你有15分鐘的時間解決這個問題,在文明世界被核戰爭/天網/永久無休止的重新運行的沙恩菲爾德摧毀之前,你可能會想到更簡單的事情,它可以完成99%的工作。

0

這裏有一些工具,我以前用它來幫助我理解特定問題及其解決方案。我今天並不總是使用它們,但他們幫助我學習如何思考如何解決問題並提出解決方案。每類

  1. Class-Responsibility-Collaboratio N(CRC)卡 一卡,詳細介紹了類和什麼其他類與它合作的責任。使用卡片,您可以爲解決方案佈局您的設計,並查看您有太多耦合或太多責任的位置。它們允許您在提交代碼之前以輕量級的方式考慮設計。

  2. Use cases 描述用戶與系統交互的真實結構化用例,甚至更簡潔的故事或故事卡片。我仍然使用故事,但我用維基捕捉它們。這允許您以非正式的方式捕獲與系統的交互。故事基本上是您需要與客戶就應該完成的對話進行對話的佔位符。使用收集的故事,您開始掌握代碼的總體意圖。你也可以開始看到事物如何相互作用,以及與其他事物有什麼關係。這真是設計的開始。

  3. UML Diagrams - 特別是交互圖 有一段時間我用了很多。它真的幫助瞭解事情在底層實際上如何協同工作。我仍然會非正式地繪製一些複雜的相互作用,以確保我不會錯過任何重要的事情。經歷了很多這些,真的幫助我思考我的對象是如何相互作用的,現在從交互的角度來看,這是第二種性質。

  4. 類圖 - 一個真正的高層次的代碼視圖。 這些允許你在結構上看到你的代碼,特別是如果你可以將圖解分解成組件或層次的體系結構。大多數情況下,我現在使用這些來在必要時向其他人解釋代碼。當開始時,這些提供了一個非常好的可視化,但是,如果你正在爲代碼的鳥瞰而苦苦掙扎。

如果您嘗試這些,我可以給您的最好建議是遵循「規則」,直到您真正掌握了正在發生的事情。一旦你覺得你對自己提供的東西有了更好的理解,你可以使用它們,或者修改你使用它們的方式,只保留有用的東西,讓其他東西去。

2

alt text

該書是一組試探解決問題時要經過的。在Wikipedia上閱讀。在Amazon上購買。

1

我喜歡這種一般方法:

  1. 名單與自己的長處和弱點可能的解決方案
    (這將推動你簡單地品嚐所有的人)
  2. 之所以選擇最好的一個,讓你的設計它
    (如果你發現任何重障礙,重新考慮其他選項)
  3. 實施

最重要的是,每走一步,學習

1

最好的辦法可能是學習形成如果這是一個選項。特別是如果你能找到熟悉你的問題的人。

通常,我們手頭上的工具越多,解決問題的選擇就越多。我同意這一點對於始終編碼並始終提供有用的東西(無論它是多麼愚蠢)都很重要。但我認爲,我們需要提高我們的技能/知識是多方面的:

  • 語言技能(知道你的語言(S)的深度)
  • 編程範式(勢在必行,對象,功能)
  • 框架知識
  • 算法
  • 模式
  • 日期-結構
  • 方法論(敏捷,DDD,BDD,?DD)
  • 工具

你可以得到很多的技巧,通過在工作中剛剛在時間學習,但我通常可以在任何時候寵物主題,我試圖以獲得更深入的瞭解,通常這意味着獲得該書並閱讀它覆蓋。

4

當你只有一把錘子時,所有東西看起來都像釘子。

因此,確保您熟悉算法和數據結構。當你研究它們時,要認真思考一下特定算法的優點。

+0

@dicroce - 我只是喜歡你說的方式:-)!得到我的+1(更多,如果我有他們的) – 2010-03-27 00:04:42

1

通過Project Euler工作,並查看其他人對問題的解決方案。幾乎所有問題都將以您不會遇到的方式解決,而且通常效率更高。

1

我認爲,成爲一名優秀的問題解決者所涉及的原始經驗遠遠不止於此 - 因爲我已經看到差的有很多經驗的問題解決者。

這裏有一些提示,但你可以在網上找到更多。

  • 看許多問題和 搞清楚他們有什麼在 共同。您瞭解 問題的解決方案的通用性越高 可以將其應用於其他問題的方式越多。
  • 嘗試發現解決方案用於解決問題的好問題的方法。但不要以爲任何人有解決問題
  • 如果你讀過理查德·費曼的 books,你會發現,他 考慮許多不同的路線,以 得到他的目標壟斷。不要過於縮小您的 方法
  • 要積極。假設你可以找到 解決任何問題。你的心態很重要。享受解決問題的過程使其更容易
  • 不要把頭撞在牆上。如果你不 似乎正在用一種方法的進步,嘗試新的方法
  • 總是在尋找的 解決問題,更多的見解 到的問題的過程中更多的方式解決自身
  • 要願意工作。它仍然需要很多努力來解決一些問題
  • 你知道的研究領域越多,你的觀點越多。我有一個強大的數學背景,我發現它對許多問題非常有用。物理,音樂或任何不同的觀點可能是有用的