小白經(jīng)驗(yàn)貼:思考問(wèn)題的方式比“經(jīng)驗(yàn)”之說(shuō)更重要
本文轉(zhuǎn)載自公眾號(hào)“讀芯術(shù)”(ID:AI_Discovery)
不要僅以經(jīng)驗(yàn)去評(píng)判一名開(kāi)發(fā)人員,這遠(yuǎn)遠(yuǎn)不夠。正如谷歌CEO所說(shuō):“我雇傭了比你們更有經(jīng)驗(yàn)的開(kāi)發(fā)人員,但你們?cè)谶@里的工作效率比我雇傭的任何人都要高,取得的成就也更多。”
不管你是有20年的實(shí)際工作經(jīng)驗(yàn),還是剛剛進(jìn)入科技行業(yè),沒(méi)有實(shí)習(xí)經(jīng)驗(yàn)只有一個(gè)大學(xué)學(xué)位。無(wú)論是過(guò)去還是現(xiàn)在,當(dāng)涉及到效率、生產(chǎn)力和原始編程天賦時(shí),多年來(lái)積累的知識(shí)并不絕對(duì)重要。以資歷去判斷一名開(kāi)發(fā)人員的聰慧程度或他是否值得尊重,這并不科學(xué)。
筆者剛進(jìn)入Salesforce開(kāi)發(fā)顧問(wèn)行業(yè)時(shí),完全不知道如何為這個(gè)平臺(tái)實(shí)現(xiàn)解決和集成方案?,F(xiàn)在,筆者正在創(chuàng)造公司的記錄,我被認(rèn)為是行業(yè)中最有前途的開(kāi)發(fā)人員之一,經(jīng)常被招聘人員和其他企業(yè)主聯(lián)系,幾乎完全依靠自己的力量來(lái)設(shè)計(jì)解決方案,并且沒(méi)有失敗過(guò)。
在進(jìn)入這個(gè)行業(yè)后,筆者只用了三個(gè)月的時(shí)間就超越了同行。在最初的三個(gè)月里,我們幾乎都在堅(jiān)持不懈地訓(xùn)練和學(xué)習(xí)。
- 我沒(méi)有天分,不算是有天賦的開(kāi)發(fā)人員。· 我不是很懂編程。
- 我無(wú)法憑直覺(jué)在一瞬間找到解決方案。
- 我還有很多要學(xué)。 以上這些大多數(shù)人擁有的特質(zhì),我都具備。
在本文中,筆者將確切地告訴你,是什么讓我脫穎而出成為一名開(kāi)發(fā)人員,并最終以驚人的速度完成編程任務(wù)和項(xiàng)目——其他更有經(jīng)驗(yàn)的開(kāi)發(fā)人員無(wú)法跟上的速度。
盡早建立最佳編碼實(shí)踐
回顧為獲得計(jì)算機(jī)科學(xué)學(xué)位所花的全部時(shí)間,筆者認(rèn)為自己是一個(gè)不合格的程序員,我?guī)缀醪恢廊绾谓鉀Q實(shí)際的編程問(wèn)題。
筆者非常想解決編程項(xiàng)目分配的任務(wù),現(xiàn)在我可以輕松用一個(gè)晚上的時(shí)間完成。對(duì)筆者來(lái)說(shuō),理解實(shí)現(xiàn)一個(gè)解決方案所需要的邏輯,甚至理解完成一項(xiàng)任務(wù)所需要的面向?qū)ο笤瓌t,都是非常困難的。如果沒(méi)有谷歌,筆者肯定不會(huì)繼續(xù)鉆研計(jì)算機(jī),而是會(huì)去攻讀哲學(xué)或商業(yè)學(xué)位。
但某一個(gè)時(shí)刻,筆者開(kāi)始發(fā)現(xiàn)自己的技能出現(xiàn)轉(zhuǎn)變。通過(guò)開(kāi)始觀察編程語(yǔ)言實(shí)際工作的方式、具體設(shè)計(jì)原則的使用和實(shí)現(xiàn)方式、設(shè)計(jì)代碼時(shí)要避免的事情以及所采用的最佳實(shí)踐,筆者注意到了自己處理問(wèn)題方式發(fā)生的轉(zhuǎn)變。
筆者開(kāi)始用所學(xué)到的原則來(lái)設(shè)計(jì)和思考解決方案,這讓我以一種更有目的性和方向性的方式來(lái)組織我的想法。
圖源:unsplash
從編程的角度來(lái)說(shuō),對(duì)筆者最重要的書籍是Robert C. Martin的《干凈代碼:敏捷軟件工藝手冊(cè)》,強(qiáng)化了這些原則并將它們深記于心。
其中函數(shù)命名、簡(jiǎn)化代碼以及構(gòu)造類的方式,在開(kāi)發(fā)方式中發(fā)揮了很大的作用。讓我真正地退后一步,思考所寫的內(nèi)容,思考該如何組織代碼的——注意內(nèi)容是否合乎邏輯,是否具有可讀性。
關(guān)于可讀性、設(shè)計(jì)簡(jiǎn)單性,更重要的是解決一個(gè)需求往往引發(fā)快速生產(chǎn)不會(huì)過(guò)時(shí)、可重用、可擴(kuò)展的代碼。也就是說(shuō),作為一名程序員,我們應(yīng)該了解最佳編碼實(shí)踐、所使用的語(yǔ)言或框架的限制、可靠的原則、設(shè)計(jì)模式和快速應(yīng)用。
僅僅編寫有效的代碼是不夠的,還需要編寫容易理解的、模塊化的、能夠經(jīng)受時(shí)間考驗(yàn)的代碼。這需要更多的思考,但它將會(huì)使你不斷地構(gòu)建并為你創(chuàng)建的應(yīng)用程序產(chǎn)生更多的價(jià)值。
將編程視為創(chuàng)作藝術(shù)的工具
編程常常被視為一種神話般的技術(shù)——幾乎就像一種外語(yǔ),很難翻譯,只有受過(guò)良好訓(xùn)練的人才能優(yōu)美地書寫它。但事實(shí)并非如此,你需要重建對(duì)編程的看法,不僅僅把它看作是一門技術(shù)工藝。
我看待代碼的角度,與畫家看待畫筆、機(jī)械師看待它的扳手、木匠看待它的錘子一般。代碼是一種工具,可以通過(guò)它推動(dòng)實(shí)現(xiàn)最終目標(biāo)和架構(gòu)解決方案。
偉大的藝術(shù)家區(qū)別于常人的是他們運(yùn)用工具的能力,這些工具與他們的思想和想象力相結(jié)合。那個(gè)藝術(shù)家和一個(gè)藝術(shù)家在同一個(gè)位置開(kāi)始,使用同樣的工具——空白畫布、顏料和畫筆。請(qǐng)記住,當(dāng)你茫然地盯著空白的IDE時(shí),試著編寫第一行代碼。
重要的是如何使用這個(gè)工具,對(duì)筆者而言,有效的不是簡(jiǎn)單地理解代碼的語(yǔ)法和理論術(shù)語(yǔ),而是做一些事情,不斷提高使用這個(gè)工具的技能。
思考能做什么、能完成什么、應(yīng)該走什么路以及想要達(dá)到的目標(biāo),這些恰恰會(huì)激發(fā)筆者將代碼視為使用工具,專注地設(shè)計(jì)出最終解決方案。在這一點(diǎn)上,唯一能限制我的是使用代碼解決所面對(duì)的特殊解決方案的思維和個(gè)人能力。
這就是為什么筆者不會(huì)浪費(fèi)時(shí)間去學(xué)習(xí)一種語(yǔ)言的所有語(yǔ)法,也不會(huì)無(wú)休止地閱讀文檔,只是試圖記住一種語(yǔ)言或框架必須提供的所有內(nèi)容。筆者發(fā)現(xiàn)最大的價(jià)值在于理解基于經(jīng)過(guò)測(cè)試的原則、設(shè)計(jì)規(guī)則和理論來(lái)構(gòu)建和設(shè)計(jì)代碼的不同方法。
圖源:unsplash
我不是什么都會(huì),但可以進(jìn)行學(xué)習(xí) 這也是我不浪費(fèi)時(shí)間去瀏覽和記憶文檔、不去看學(xué)習(xí)編程語(yǔ)言的綜合教程、不去花大量的時(shí)間去學(xué)習(xí)的另一個(gè)原因。
如果筆者真的有超能力,就能以最快速度進(jìn)行學(xué)習(xí)和模仿。但事實(shí)是,我也確實(shí)會(huì)失敗,徹底失敗。但我經(jīng)常能夠通過(guò)失敗總結(jié)經(jīng)驗(yàn),豐富自己的知識(shí),直到對(duì)一個(gè)主題有一個(gè)完整的理解。
筆者通常不需要用一堆技術(shù)和初步信息來(lái)開(kāi)始工作,我能通過(guò)大量研究、在過(guò)去處理類似問(wèn)題和失敗時(shí)積累的經(jīng)驗(yàn)來(lái)推動(dòng)編程。我按照計(jì)劃學(xué)習(xí),用具體的細(xì)節(jié)和方法來(lái)填滿腦袋。我們處理的每一項(xiàng)任務(wù)對(duì)于想要達(dá)到的目標(biāo)都是完全主觀的。
如果有的話,谷歌搜索引擎問(wèn)題就是我需要立即試圖解決的問(wèn)題。如果不能通過(guò)谷歌搜索找到需要的所有東西,筆者就會(huì)向CEO提出一些問(wèn)題,試圖解決一些更復(fù)雜的問(wèn)題。然后,將以定制的方式調(diào)整發(fā)現(xiàn)的信息以滿足當(dāng)前需求。
我不會(huì)因?yàn)椴恢澜鉀Q辦法而放棄。相反,我會(huì)盡他所能去弄清楚什么是可能的。這種思維模式和方法與將代碼插入筆者自己理解的特定設(shè)計(jì)原則密切相關(guān),并且我還會(huì)用代碼作提出解決方案。
筆者不是什么都知道,也不想知道所有的事情。編程令人興奮的部分原因在于它是一段不斷學(xué)習(xí)和不斷創(chuàng)造與思考的旅程,只看得到特別的方式或方法。而筆者可以看到阻礙你作為一名程序員所需得想象力和潛力的事情。
圖源:unsplash
筆者堅(jiān)信,無(wú)論其技能、天賦或經(jīng)驗(yàn),任何人都有能力被認(rèn)為是獨(dú)一無(wú)二的偉大程序員。真正需要做的是轉(zhuǎn)變思維方式和方法,以建立自己專屬的解決方案,并在職業(yè)生涯中保持謙遜。謙遜會(huì)讓我們保持初學(xué)者的心態(tài),充滿渴望和好奇心,不斷學(xué)習(xí)和適應(yīng)日新月異的編程環(huán)境。
作為程序員,我們?cè)谏钪畜w現(xiàn)了不斷學(xué)習(xí)的精神,打破了以前認(rèn)為不可能的障礙。如果你沒(méi)有這一理念,那么你可能將無(wú)法在現(xiàn)有基礎(chǔ)上提升技能。
請(qǐng)謹(jǐn)記,任何人都有能力成為偉大的人,不管你已經(jīng)在這個(gè)領(lǐng)域干了20年,還是才剛剛開(kāi)始。