日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

程序員該怎么做,才能成為 coding 王者?

 小天使_ag 2019-01-30

每當(dāng)做編程題目時(shí),大多數(shù)人都會(huì)靠基本的直覺(jué),遵循一些固定的步驟來(lái)有效地解題。不管是有意還是無(wú)意,在做編程題目的時(shí)你會(huì)下意識(shí)地遵循一些步驟,在閱讀完這篇文章后你就可以將這些步驟和這篇文章聯(lián)系起來(lái),從而就可以更高效地解題。

因此在這篇文章中,我將討論解編程題的五個(gè)步驟。

譯者 | 彎月

出品 | CSDN(ID:CSDNNews)

這個(gè)世界需要的是開(kāi)發(fā)者,我為什么要在編程競(jìng)賽上花時(shí)間呢?

我自己就是開(kāi)發(fā),但我發(fā)現(xiàn)大多數(shù)開(kāi)發(fā)者(包括許多“非?!庇心芰Φ拈_(kāi)發(fā)者)并不是太擅長(zhǎng)做數(shù)據(jù)結(jié)構(gòu)、算法以及一些通用的問(wèn)題。很可悲的是,許多人只不過(guò)是通過(guò)遵循一些基本的步驟來(lái)開(kāi)發(fā)應(yīng)用程序,或者做一些非常簡(jiǎn)單的軟件,然后稱自己為“程序員”。

這個(gè)時(shí)代人人都能編程,所以深入學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)和算法不再是當(dāng)今學(xué)生們的第一選擇,即使是那些本應(yīng)非常重視這些領(lǐng)域的學(xué)生。

即使是我,作為一個(gè)開(kāi)發(fā)者,也沒(méi)有參加過(guò)太多編程競(jìng)賽,但我還是會(huì)盡量在算法和數(shù)據(jù)結(jié)構(gòu)上多花些時(shí)間,學(xué)習(xí)如何編寫(xiě)高效的代碼,并鼓勵(lì)和推薦所有人都關(guān)注這個(gè)方面。

下面是一些例子,表明數(shù)據(jù)結(jié)構(gòu)、算法和編程競(jìng)賽(一般意義上的)的內(nèi)容能幫助學(xué)生們:

  1. 選擇好的大學(xué)

  2. 編寫(xiě)高質(zhì)量的代碼

  3. 編寫(xiě)高效率的代碼(時(shí)間和空間復(fù)雜度)

  4. 最優(yōu)地使用資源

  5. 邏輯推理

  6. 知名度(編程競(jìng)賽的學(xué)生可以接觸到巨大的社區(qū))

  7. 機(jī)遇(大量的編程競(jìng)賽)

  8. 編程的過(guò)程有無(wú)限的樂(lè)趣

“編程教你怎樣面對(duì)大問(wèn)題?!薄狫ack Dorsey

現(xiàn)在進(jìn)入正題。

做編程題時(shí)的五個(gè)步驟

幾天前在做一道編程題時(shí),我發(fā)現(xiàn)我在解題時(shí)都會(huì)遵循一個(gè)固定的模式。我又做了幾道題,并寫(xiě)下了解題前后我腦海中的步驟。很驚訝的是我發(fā)現(xiàn)竟然真的有規(guī)律可循,我甚至都不知道我用了五個(gè)步驟,但有了這五個(gè)步驟,我就能更高效地解題了。

正如我前面說(shuō)過(guò)的,很可能你也會(huì)下意識(shí)地使用這些步驟,但如果你進(jìn)行總結(jié),并意識(shí)地使用后,就會(huì)發(fā)現(xiàn)驚人的區(qū)別。

1.理解并分析問(wèn)題

閱讀題目,開(kāi)始思考題目,可能的話在紙上寫(xiě)下給出的條件和你需要找出的條件。

問(wèn)自己幾個(gè)問(wèn)題:

  • 能完全理解題目嗎?

  • 能給非專業(yè)人士解釋清楚問(wèn)題嗎?

  • 需要多少輸入,每個(gè)輸入都是什么?

  • 每個(gè)輸入帶來(lái)的輸出是什么?

  • 能從題目中分解出幾個(gè)模塊嗎?

  • 是否擁有足夠的信息?如果沒(méi)有,試著再理解一遍題目。

2.仔細(xì)閱讀示例輸入

仔細(xì)閱讀示例輸入,試著想出更多的示例輸入,這樣能幫你更好地理解題目,而且,這樣能讓你想清楚你的代碼需要處理多少種情況,可能的輸出或輸出范圍是什么。

這里我建議:

  • 選擇非常簡(jiǎn)單的輸入并找出輸出

  • 選擇更復(fù)雜、更大的輸入,看看輸出是什么,需要多少種用例

然后開(kāi)始處理邊界條件:

  • 不提供任何輸入,輸出應(yīng)該是什么

  • 提供非法輸入,輸出應(yīng)該是什么

3.分解題目

對(duì)于大型問(wèn)題來(lái)說(shuō)這一步非常非常有幫助。這種情況下我建議遵循以下步驟:

  • 試著手繪一份流程圖或 UML

  • 將問(wèn)題分解成模塊,或子問(wèn)題

  • 試著為每個(gè)子問(wèn)題建立獨(dú)立的功能

  • 按順序或按需要調(diào)用子問(wèn)題(很可能一個(gè)函數(shù)會(huì)調(diào)用另一個(gè)函數(shù)),將它們連接起來(lái)

  • 如果是真實(shí)世界的問(wèn)題(如管理系統(tǒng)等),試著用類和對(duì)象來(lái)實(shí)現(xiàn)

4.開(kāi)始解題和寫(xiě)代碼

現(xiàn)在題目已經(jīng)分析完,可以真正編寫(xiě)代碼了。如果不能一次性解完,那么可以先給一個(gè)簡(jiǎn)單的部分寫(xiě)代碼,隨著解決問(wèn)題的深入,你會(huì)逐步發(fā)現(xiàn)更多細(xì)節(jié),從而找出更多的思路。

只需要記住這三點(diǎn),就一定能找到解法:

  • 你的起點(diǎn)

  • 你的位置

  • 你的目標(biāo)

而且,如果你是在面試中,不要浪費(fèi)時(shí)間去解決整個(gè)題目再告訴面試官,應(yīng)該不斷簡(jiǎn)化問(wèn)題,不斷告訴面試官你解決問(wèn)題的方法。

  • 告訴面試官你從哪里入手

  • 告訴他你在思考什么方法

  • 找出你在問(wèn)題中面臨的最難的部分

  • 有時(shí)可以忽略“最難”的部分,從簡(jiǎn)單的子問(wèn)題入手,這樣能給你帶來(lái)更多的時(shí)間去思考前者

  • 解決完簡(jiǎn)單的子問(wèn)題后,試著用類似的方式解決困難的部分

  • 解題時(shí)可能會(huì)想出更好的方法,要告訴面試官

5.回顧并學(xué)習(xí)

這部分是最重要的!解題完成后,一定要回顧下:代碼能否改進(jìn)?有沒(méi)有另一種解題的方法?

不要做完就放棄了!這樣等于放棄你找出其他解法的可能性,也放棄了完整地探索問(wèn)題的機(jī)會(huì)!

下面是在寫(xiě)完代碼之后應(yīng)該問(wèn)自己的問(wèn)題:

  1. 這段代碼是否能處理任何輸入(包括邊界情況)?

  2. 有沒(méi)有其他方法解決問(wèn)題?

  3. 代碼是否有效?能否更有效?

  4. 代碼是否可讀?

  5. 如果別人給你這段代碼,你能否理解?

  6. 性能能否提高?

  7. 能否利用其他算法達(dá)到更好的結(jié)果?

除了這些問(wèn)題之外,還要檢查同一題目其他人的解答,看看別人是怎樣完成的,這個(gè)過(guò)程中你會(huì)學(xué)到很多。

總結(jié)

本文討論了以下五個(gè)步驟:

  1. 分析并理解問(wèn)題

  2. 仔細(xì)閱讀示例輸入和用例

  3. 將問(wèn)題分解成子問(wèn)題,或函數(shù),或模塊

  4. 開(kāi)始解題和編程

  5. 解題完成后,回顧代碼是否可以改進(jìn),是否有其他解題方法

以上,希望這篇文章可以提高你的解題技巧。

原文:https:///how-to-approach-any-coding-problem-9230f3ad6f9

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買(mǎi)等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多