最近正在完成師兄交代的任務(wù)骡尽,因為非常不熟練遣妥,所以,整個過程痛苦異常攀细。終于有了一些進展箫踩,把這段時間掙扎之后的心得總結(jié)如下。
一谭贪、低估困難
師兄交代下任務(wù)之后境钟,我感覺自己聽得很明白,似乎實現(xiàn)起來也應(yīng)該不那么費事俭识,結(jié)果卻大出意料慨削。
就拿我剛剛實現(xiàn)的一個功能來說明,求若干點所擬合出直線的擬合優(yōu)度問題套媚。思路其實非常簡單缚态,就是在一個存儲點數(shù)據(jù)的文件中逐行讀取每個點的橫縱坐標,當數(shù)量滿足初始設(shè)定條件時堤瘤,擬合出一條直線玫芦,并求出擬合直線的擬合優(yōu)度。就是這么簡單的一個問題本辐,我竟然用了將近兩周的時間才實現(xiàn)桥帆,這還是在python有非常強大的第三方庫作為支撐的情況下。用我們?nèi)祟惖恼Z言慎皱,似乎很容易就把這個問題說清楚环葵,但是換成編程語言,就需要將看似簡單的問題宝冕,變成一行一行的代碼张遭,逐步去實現(xiàn)一個一個的子功能,最后拼接成一個完整的程序地梨。
我低估了整個程序?qū)崿F(xiàn)的難度菊卷,是因為我對python的使用非常不熟練缔恳,再加上對基礎(chǔ)知識的掌握相對薄弱,沒有對實現(xiàn)程序的每一個步驟思考得非常清楚洁闰。這讓我想當然地認為程序?qū)崿F(xiàn)的過程就像我們用漢語將程序的功能表述清楚一樣簡單歉甚。
二、荊棘密布
當我開始著手做的時候扑眉,才發(fā)現(xiàn)困難遠超我的想象纸泄,實在是每前進一步都有困難,想實現(xiàn)任何功能都需要查詢腰素,真是荊棘密布啊聘裁。
首先,我需要解決的問題是“如何逐行讀取文檔中的數(shù)據(jù)”弓千。因為每個點的橫縱坐標都是以行的形式存儲在文件中的衡便,我需要逐行讀取數(shù)據(jù),然后提取出橫洋访、縱坐標的數(shù)據(jù)镣陕,作為擬合直線的初始數(shù)據(jù)。當我查詢“如何逐行提取數(shù)據(jù)”之后姻政,才發(fā)現(xiàn)呆抑,我需要使用一個之前未接觸過的叫做Dataframe的數(shù)據(jù)結(jié)構(gòu),于是便又在如何操作這個數(shù)據(jù)結(jié)構(gòu)上面花費了大量的時間汁展。
搞清楚如何使用Dataframe鹊碍,也實現(xiàn)了逐行讀取數(shù)據(jù),接下來要實現(xiàn)的是將讀取的橫善镰、縱坐標數(shù)據(jù)分別存儲在兩個變量之中妹萨,進行直線擬合年枕,并求出擬合優(yōu)度炫欺。本來這個步驟在網(wǎng)上有人已經(jīng)實現(xiàn)好了,我看到之后也非常開心熏兄,想到可以直接拿來使用品洛,可結(jié)果還是出現(xiàn)了問題。問題源于自己的粗心摩桶,在求擬合優(yōu)度的過程中桥状,函數(shù)只能處理固定格式的數(shù)據(jù),而因為我的粗心大意硝清,在改寫代碼的時候辅斟,少了一個“[]”符號,結(jié)果芦拿,函數(shù)因為不認識這個數(shù)據(jù)類型而導致報錯士飒。當我發(fā)現(xiàn)因為自己粗心導致錯誤時查邢,真想打自己一頓。
終于到了最后一步酵幕,將求出的擬合優(yōu)度存儲在一個指定的文件中扰藕。問題又來了,這一步需要掌握如何向文件中寫數(shù)據(jù)的功能芳撒,接著上網(wǎng)查詢邓深。這一步?jīng)]有太大的問題,只是查詢的過程中遇到很多類似的功能笔刹,一度讓我不知道選擇哪一個才好芥备。最終實現(xiàn)基本功能后,又想在列前面加一個“頭”徘熔,進一步完善文檔的表現(xiàn)形式门躯。實際完全實現(xiàn)也花了不少的時間。
三酷师、形成方法論
經(jīng)歷了這次挫折讶凉,我深感自己需要形成一套解決編程問題的方法論∩娇祝回想過去兩個星期自己所經(jīng)歷的一切懂讯,感受頗深,思慮再三台颠,得到如下結(jié)論:
第一褐望,在面對任務(wù)的時候,需要理清楚完成該任務(wù)的整體思路串前。
第二瘫里,將整個任務(wù)拆分成若干子任務(wù)(雷·達里奧的法門)。這一步非常關(guān)鍵荡碾,原因有三:
1谨读、面對一個整體任務(wù)時,我通常感覺到無從下手坛吁,這很容滋生拖延的情緒劳殖。將任務(wù)拆分成可以馬上執(zhí)行的若干子任務(wù),可以很好解決這個問題拨脉。
2哆姻、拆分子任務(wù)可以對任務(wù)的困難程度有更加直觀的了解。在完成本次任務(wù)的過程中玫膀,我之所以低估任務(wù)的難度矛缨,就是因為我對實現(xiàn)任務(wù)的逐項環(huán)節(jié)根本不熟悉,所謂無知者無畏,于是我就想當然地認為任務(wù)的實現(xiàn)非常簡單箕昭。
3誉简、拆分子任務(wù)可以更加直觀地了解任務(wù)完成的進展。在實現(xiàn)任務(wù)的過程中盟广,遇到困難在所難免闷串,不對任務(wù)進行拆分,就無法了解任務(wù)已經(jīng)完成了多少筋量。一旦遇到困難烹吵,往往會產(chǎn)生一種消極情緒:我都做這么長時間了,還沒完成桨武。實際上沒有完成很正常肋拔,因為自己不熟練。但是未完成并不代表沒有進展呀酸。這種情緒會給下一步工作造成不良影響凉蜂。
拆分完子任務(wù)之后,就可以照拆分的子任務(wù)逐個完成性誉,最終一個完整的任務(wù)就會隨著最后一個子任務(wù)的完成而完成窿吩。
第三,將完成該任務(wù)過程中所涉獵的新知識整理错览、分類纫雁,并保存實現(xiàn)的源代碼。長久的積累倾哺,會讓以后的工作變得越來越輕松轧邪。
這就是我在最近工作中所感悟到的一些心得,總結(jié)出的一些方法論羞海。細想來忌愚,不只是解決編程問題可以使用這樣一套方法論,解決工作和生活中所有的問題却邓,都可以嘗試使用這套方法論硕糊,相信會帶給我不一樣的收獲和驚喜。