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