如何教女朋友一起編程
若干年前,在我還是一個(gè)小小的軟件開(kāi)發(fā)人員的時(shí)候,我就夢(mèng)想有一個(gè)女孩能讓我與之暢談我喜歡的東西。我想和她談?wù)撐易隽耸裁?。不是?jiǎn)單地說(shuō)我在做與 電腦相關(guān)的東西,而是能夠更深層次地暢所欲言。就像和同事一起的那種談話。我希望當(dāng)我發(fā)現(xiàn)了什么令人興奮的新玩意兒的時(shí)候,當(dāng)我興致勃勃地講給她聽(tīng)的時(shí) 候,她能理解我。
回想我還在上大學(xué)的時(shí)候,我也經(jīng)常將我這個(gè)夢(mèng)想說(shuō)給朋友聽(tīng)。我以為他們會(huì)和我想的一樣,但讓我吃驚的是,我是這群極客中唯一一個(gè)這么想的人。他們中的每一個(gè)人都告訴我,他們不想找一個(gè)女程序員做女朋友,他們說(shuō)這會(huì)讓他們會(huì)發(fā)瘋。但我認(rèn)為他們是在自欺欺人。
他們內(nèi)心真正的想法是,要找到一個(gè)既好看、聰明,又對(duì)編程感興趣,以及最重要的是,對(duì)你有意思的女孩,那是不可能的。概率微乎其微???!
讓我告訴你一個(gè)秘密,兄弟,她其實(shí)并不需要知道編程。生活中的一切東西都是可以學(xué)習(xí)的。的確,有些人可能更擅長(zhǎng)于編程這些理科類的東西,但這并不意 味著其他人就無(wú)法學(xué)習(xí)和理解這些內(nèi)容了。我們能驕傲地宣稱自己是個(gè)程序員,是軟件工程師,那是因?yàn)槲覀冇昧撕芏嗄甑臅r(shí)間去學(xué)習(xí)和掌握這些知識(shí)。但是我要告 訴你一個(gè)真相,許多你花了一年時(shí)間才明白的東西,其實(shí)可以在5分鐘內(nèi)被解釋得清清楚楚,如果你知道怎么解釋的話。
指針運(yùn)算真的很難嗎,還是我們需要這么說(shuō)以便于自吹自擂,炫耀自己的能耐,因?yàn)槲覀冏约菏呛貌蝗菀撞琶靼姿侨绾喂ぷ鞯??理解多態(tài)性困難嗎?是真的很難理解,還是我們自己理解的角度不對(duì)?
思維角度相當(dāng)于80分智商。
你完全能在短短幾個(gè)小時(shí)內(nèi)就將指針,手動(dòng)內(nèi)存管理,棧和堆分配,垃圾收集等等等等解釋得一清二楚,如果你選擇了正確的形容和比喻方式。
算法難嗎?我敢打賭,你肯定不希望有人半夜吵醒你要你寫(xiě)一個(gè)快速排序。但是,如果你有很多小刀,然后教你的女朋友如何對(duì)它們進(jìn)行排序(明顯是按大小來(lái))?你可能依然需要示范個(gè)兩三次,才能讓她真正認(rèn)同這種排序方法是有效的,但其實(shí)這個(gè)算法本身不要太簡(jiǎn)單。
如果你有一個(gè)問(wèn)題,想了幾個(gè)小時(shí)還是搞不明白,那么不妨試試解釋給你的女朋友聽(tīng)。不要以為這是在對(duì)“牛”彈琴(各位美眉勿噴),如果你在句子中突然 有所發(fā)現(xiàn),可以中斷談話。試著真正地解釋給她聽(tīng),就算她一點(diǎn)兒也不懂技術(shù)。如果你能用一個(gè)正確的比喻手段來(lái)解釋的話,她理解起來(lái)其實(shí)是很容易的。
記住得是她自愿學(xué)習(xí)這些東西,你不能強(qiáng)迫灌輸知識(shí)給她,自己想學(xué)才能學(xué)得進(jìn)去。你需要打破的***障礙是,克服她“我永遠(yuǎn)不會(huì)明白”的憂慮。
這并不難,只是需要時(shí)間
大約6個(gè)月前,我的女朋友還正在學(xué)習(xí)政治學(xué),攻讀她的碩士學(xué)位。她真的沒(méi)有任何技術(shù)經(jīng)驗(yàn)。
然而突然有一天,她決定要學(xué)一些很酷的東西,以便于用JavaScript在我給她制作的個(gè)人網(wǎng)站上面放一些動(dòng)畫(huà)。于是我開(kāi)始教她Ruby on Rails。兩周之后,她建立了自己的web app。幾個(gè)星期后,她意識(shí)到,她需要一些更深層次的知識(shí),于是我開(kāi)始教她更多基本的東西。
我們學(xué)習(xí)了如計(jì)算機(jī)如何工作,如何手動(dòng)分配內(nèi)存,棧和堆分配之間的差異,如何在Objective-C做到正確地引用計(jì)數(shù),垃圾收集器是如何工作的,函數(shù)式編程(此處指Haskell),網(wǎng)絡(luò)協(xié)議以及更多。她甚至知道了我在一年前還不知道的東西。
基本上我采取的方式是,對(duì)于我知道的內(nèi)容,提取重要的東西,扔掉99.5%用于說(shuō)明什么重要的浪費(fèi)時(shí)間的玩意兒,只教她需要知道的東西。
不過(guò)這還不足以讓人成為一個(gè)程序員,她還需要了解硬件部分,但即使這樣,她已經(jīng)比大多數(shù)在學(xué)校中學(xué)習(xí)軟件工程的人懂得更多了,僅僅學(xué)了6個(gè)月之后。
你是一個(gè)專業(yè)的老師
作為一個(gè)專業(yè)的開(kāi)發(fā)人員,也意味著在一定程度上你是一個(gè)專業(yè)的老師,因?yàn)槲覀兊墓ぷ髌仁刮覀冃枰粩嗟亟忉尳o其他人聽(tīng)。我們必須將自己代入閱讀者的 角色以便于讓我們的代碼更易于理解。我們必須解釋我們做的事情,當(dāng)別人不知道這有什么用的時(shí)候。我們必須教實(shí)習(xí)生如何邁向自己的偉大之路。
我們?cè)诠ぷ髦心茏龅木褪菍?fù)雜的事情簡(jiǎn)單化(話說(shuō),有些人恰喜歡反其道而行)。之所以需要這么長(zhǎng)的學(xué)習(xí)時(shí)間,其原因之一就是因?yàn)槲覀兘?jīng)常迷路。你可能有一個(gè)偶爾會(huì)給你解釋一些東西的教授,但是很遺憾每周只有一節(jié)課。
但是話說(shuō)回來(lái),如果你教你的女朋友——因?yàn)槭亲≡谝黄鸬?mdash;—那么她隨時(shí)就可以問(wèn)你,因?yàn)槟汶S傳隨到,立馬可以給她解答問(wèn)題。
開(kāi)發(fā)人員通常之所以非常擅于谷歌搜索,是因?yàn)榻?jīng)常陷入迷途。總是需要自己去尋找答案。但是,如果在同一個(gè)房間里,對(duì)方隨時(shí)能提供答案的話,那生產(chǎn)效率還能不高嗎?
譯文鏈接:http://www.codeceo.com/article/how-tech-girlfriend-programming.html
英文原文:How to Teach Your Girlfriend Programming































