發(fā)布于:2020-12-31 14:38:25
0
133
0
這可能聽起來很熟悉:您處于項(xiàng)目的中間,并且您意識到自己正在解決從未見過的問題。也許您的搜索功能查詢返回的結(jié)果太多,這使您的網(wǎng)站變慢。您認(rèn)為不應(yīng)該一次顯示所有數(shù)據(jù),而您已經(jīng)聽說過一種叫做“分頁”的東西,聽起來很接近。因此,您快速瀏覽了代碼庫以查找類似的示例,然后使用Google“分頁” +“ [您的堆棧]”。一個(gè)小時(shí)后,您打開了17個(gè)選項(xiàng)卡,頭疼越來越大,項(xiàng)目沒有任何實(shí)際進(jìn)展。恭喜,您已經(jīng)正式進(jìn)入研究兔子洞!
隨著新的一天開始太陽升起,您偶然發(fā)現(xiàn)了一些似乎相關(guān)的庫代碼,因此您將其復(fù)制過來,并且似乎可以正常工作。您不完全理解為什么,但是代碼運(yùn)行并通過了測試。因此,您繼續(xù)前進(jìn),一切都很好–直到幾天后,其他人推動了更改,一切都崩潰了。
作為開發(fā)人員,我們一直在研究新方法,處理新信息并在截止日期之前選擇最佳解決方案。必須進(jìn)行研究并不能說明您還不夠了解-這是工作的關(guān)鍵部分。特里·奧謝,Etsy的軟件工程師說,她“每天要查詢數(shù)十次……我花了超過半個(gè)小時(shí)的時(shí)間來措辭和重新定義搜索查詢?!?有效學(xué)習(xí)研究是提升開發(fā)人員水平的重要組成部分。
許多初學(xué)者陷入的陷阱正在遵循一種似乎足夠接近的解決方案。如果您僅對所需要的東西含糊不清,就很容易迷路。充其量,您會在沒有真正理解的情況下偶然發(fā)現(xiàn)可行的解決方案。在最壞的情況下,您會發(fā)現(xiàn)自己感到沮喪并偏離了航向。在Bonus.ly和紐約市市長辦公室擔(dān)任軟件工程師時(shí),我一直在那里。。沒有完美的過程,不同的方法對不同的人起作用。但是,我發(fā)現(xiàn)非常有助于有效研究的一個(gè)技巧是在整個(gè)過程中保持正念。
步驟1:了解景觀
在開始瀏覽搜索結(jié)果之前,請以最清楚的方式定義問題。旨在廣泛地理解高級移動件是什么。剛開始時(shí)這可能會有些棘手,但是考慮如何措辭您的問題將幫助您理解,記住并與他人交流。The Muse的產(chǎn)品經(jīng)理James Mayr認(rèn)為,提前完成此過程會有所幫助:“我在進(jìn)行實(shí)際編碼之前就努力進(jìn)行研究;如果我必須在編碼過程的中間查找某些內(nèi)容,那完全使我脫離了流程?!?/span>
在前面的示例中,分頁只是頁面加載緩慢的一種可能解決方案。如果您花時(shí)間探索您所面臨的根本問題(服務(wù)器響應(yīng)緩慢,速度慢),您會發(fā)現(xiàn)其他可能性。您可能實(shí)現(xiàn)無限滾動,重構(gòu)數(shù)據(jù)庫查詢,緩存搜索結(jié)果,甚至重新設(shè)計(jì)UX,以便用戶最初請求更多特定數(shù)據(jù)。形成一種景觀感將幫助您縮小范圍,尋求一個(gè)合適,有效的解決方案,而不是追求足夠接近的解決方案。
當(dāng)心XY問題-在這里,您不問自己的實(shí)際問題,而是詢問您的最佳假設(shè),并獲得其他所有問題的答案。當(dāng)您進(jìn)行研究時(shí),請問自己:“此資源是否可以幫助我完成X,即我剛剛定義的問題?” 聽起來可能有些陳詞濫調(diào),但是如果答案是:“嗯,它可以幫助我做Z,而對Y則有幫助,這就是我可以做X的方式”,您可能走得太遠(yuǎn)了。
步驟2:對資源有選擇性
在研究過程的不同階段,您將需要不同的資源,因此請了解所需資源的類型。例如,如果您在努力理解哈希的概念(通常用于模糊敏感數(shù)據(jù)的加密技術(shù)),那么閱讀有關(guān)bcrypt(一種流行的哈希庫)的教程可能不是您最好的時(shí)間選擇。
搜索互聯(lián)網(wǎng)時(shí),您會發(fā)現(xiàn)大約四種類型的資源:
技術(shù)文檔(MDN,API文檔)
教程(中,F(xiàn)reeCodeCamp,特定于工具)
在線討論(堆棧溢出,Reddit,HackerNews)
來自教程和論壇的代碼示例
從寬泛入手-查找Wikipedia文章,MDN文檔或W3Schools。當(dāng)我學(xué)習(xí)研究時(shí),我創(chuàng)建了一個(gè)完整的網(wǎng)站Hackterms,以眾包編碼有時(shí)可能是絆腳石的術(shù)語。然后,一旦您從高層次理解了該概念,就可以搜索相關(guān)的博客文章,教程和Stack Overflow響應(yīng),以幫助您編寫代碼。如果您瀏覽留言板,請?jiān)诹私馄鋵?shí)際功能之前不要陷入有關(guān)哪種工具最佳的爭論。
這似乎是一個(gè)很小的變化,但是不斷評估您是否在尋找正確的資源類型將使您更具洞察力,并節(jié)省大量時(shí)間。閱讀某種有意義的教程很容易分心,但請記住:您的目標(biāo)不僅僅是使代碼正常運(yùn)行;編寫您可以理解和維護(hù)的代碼。
盡管互聯(lián)網(wǎng)上知識淵博,但有時(shí)在工作中獲得答案的最有效方法可能是來自您的同事。Betterment的全職開發(fā)人員Esther Leytush說,她的經(jīng)驗(yàn)法則是“用谷歌搜索我可以描述為“我如何……”的任何內(nèi)容,并詢問同事,技術(shù)負(fù)責(zé)人或經(jīng)理何時(shí)只能將問題描述為“我們應(yīng)該嗎…?' 您的同事是有關(guān)特定領(lǐng)域和特定過程的知識的最佳資源,并且通常可以幫助您解決問題。Etsy的O'Shea說:“如果有一個(gè)障礙使您的工作停止了半個(gè)小時(shí),那么絕對可以把它帶給同事–也許他們會知道解決方案的;也許他們只會同情?!?/span>
步驟3:編寫代碼
當(dāng)您根據(jù)實(shí)際需要選擇解決方案時(shí),可以開始尋找特定的教程或文檔?,F(xiàn)在,您可以從嘗試了解環(huán)境轉(zhuǎn)變?yōu)椴檎液途帉懡鉀Q問題的代碼。
在此階段,請確保不要在不理解每一行的情況下復(fù)制代碼塊。為了簡潔和清楚起見,許多教程都簡化了問題,但是它們使用的示例代碼通常不適合生產(chǎn)。當(dāng)您無法解釋或維護(hù)您的工作時(shí),復(fù)制代碼塊將導(dǎo)致技術(shù)問題,以及涉及竊和知識產(chǎn)權(quán)的道德問題。此外,通過花時(shí)間重寫和自定義解決方案,您將發(fā)現(xiàn)下一次更容易理解類似問題。
步驟4:現(xiàn)在進(jìn)行認(rèn)真的研究=未來的障礙更少
與生活中的其他一切一樣,您將在實(shí)踐研究方面變得更好。您會發(fā)現(xiàn)使用正確的單詞更容易獲得正確的資源,而您從正念研究中獲得的知識將闡明曾經(jīng)看起來令人生畏的編程領(lǐng)域。O'Shea說:“我對找到的解決方案更具洞察力。” “我將繼續(xù)搜索,直到找到最慣用,最高性能,最簡潔或最優(yōu)雅的方式來實(shí)現(xiàn)我想要的功能,而不是僅僅復(fù)制和粘貼某人的hacky CSS。”
因此,下次遇到新的可怕問題時(shí),請不要立即接觸Google。定義問題,確定所需的資源,保持正念并記住-這不僅是您擺在面前解決問題的方式,而且是您成為更好的開發(fā)人員的方式。
作者介紹