(給資料分析與開發加星標)
轉自:CSDN(ID:CSDNnews),翻譯:蘇本如
【導讀】:毋庸置疑,未來的一切都會是自動化的,那麼一份從事自動化軟體開發的工作要穩妥得多——這一點,相信是很多程式員父母的考量。也因此,目前的市面上充斥著各色各樣的幼少兒程式設計書籍、程式設計夏令營、課外程式設計俱樂部等等。然而,這些雖然可以教會孩子們特定的程式語言,但是實際上它們與軟體開發工作沒有多大關係,反而會扼殺孩子們的好奇心——本文的作者 JOE MORGAN 就發表了自己的看法。
以下為譯文:
在最近一次的例行午夜小跑時,我看到一堆關於教孩子們寫程式碼的書。
教大家寫程式碼的書籍隨處可見,但從來沒有見過這麼多直接針對小學生的。這些程式設計書籍只是用來培訓孩子們“面向未來的技能”等龐大資源的一部分,還有程式設計夏令營、課外程式設計俱樂部,旨在教給幼兒園小朋友們 JavaScript 基礎知識的小程式等等。
很容易理解父母為什麼要求孩子學習程式設計——還有什麼比教會孩子寫程式碼更好的方法來讓我們的孩子為未來的自動化社會做好準備呢?如果未來的一切都是自動化的,那麼一份從事自動化軟體開發的工作要保險得多。如果學習程式設計是好的,那麼早點學習就更好了。然而,這些書籍雖然可以教會孩子們特定的程式語言,但是實際上它們與軟體開發工作沒有多大關係。
1、“不會程式設計就是新文盲”?
我的一位前同事曾經在程式設計訓練營接受訓練,而這個訓練營的口號就是“不會程式設計就是新文盲”。這種觀點是所有程式設計書籍和遊戲的核心。有一本暢銷書說儘早學會程式設計“對孩子的將來必不可少”。這等於告訴我們,不教孩子程式設計就等於不教他們閱讀。
當然這種觀點是很荒謬的,不會程式設計不等於文盲。雖然大多數父母都有文化和讀寫能力,但是大多數父母都不是程式員,也不知道程式員需要什麼樣的技能。針對孩子們的程式設計書籍給出的都是一些問題的“標準”答案。如果你的孩子能掌握程式語言,他們就能快速輕鬆地寫出這些程式碼。然而程式設計不僅僅是寫程式碼,程式設計是複雜的,需要同時具備創造性和明確性。作為一名程式員僅僅懂得程式語言是不夠的,某些技能只能在非常年輕時學習。
好的程式員不僅僅是讓程式碼工作,他們希望寫出好程式碼。
2、沒有書本會教你解決以前沒人碰到過的問題
在我的職業生涯早期,我寫了一些程式碼配置在一組遠端伺服器上執行。一開始程式碼似乎執行得很好,至少我是這樣認為的。直到18個小時後,電話在半夜響起,告訴我一些伺服器出了故障。我從床上爬起來,拿起我的膝上型電腦,在故障伺服器上再次執行程式碼。然而幾小時後,另外一些伺服器又報故障。
問題不是出在程式碼語法上。如果是語法問題,首先伺服器上編譯就不會成功。故障是由更深層的問題引起的,隔離和解決這個問題花了我幾個星期,經常半夜裡被叫醒。
程式設計就是這樣的,先試一試,看看程式碼能否工作,再試一次,如此反覆。簡單的問題應該會有現成的解決方案或者至少用開原始碼來解決,剩下的就是一些繁雜的而且獨特的問題。沒有書本教你如何解決以前無人碰到過的問題,這就是為什麼我不想讓我的孩子學習程式碼語法。我希望他們學習如何解決問題,深入研究問題,學會創新。那我們該怎麼教呢?
3、純粹地寫程式碼不可取,質量、創造性和程式碼美感同樣值得學習
有一天,我兒子擔心他的椅子搖搖晃晃。我們一起看了看後他找到了問題在哪裡,原來椅子的一個螺絲鬆了。我找出一把用過的六角扳手,告訴他如何擰緊。他很好奇如果他向相反方向擰螺絲,會發生什麼。他這樣試了直到把螺絲擰出來。後來我們把椅子拆開了,然後試著裝回來,我們一起裝了好幾次,有幾次裝錯位了,直到最後他滿意地把椅子裝好。就像程式設計一樣,試一試,看看它是如何工作的,再試一次。
當然,讓程式碼能夠工作只是軟體開發的第一步。下一步是使程式碼清晰、可重用和整潔。在我的職業生涯早期,有一次我完成了一個功能的編碼工作,並把它交給一位資深程式員檢查。他看了一眼我的程式碼,看到間距不一致,行也對不齊而且命名不規範,直接說一句“重做”就打回來了。儘管我的程式碼能夠工作而且語法也對,但這仍然是錯誤的。好的程式員不僅僅是讓程式碼工作,他們希望寫出好程式碼。
對質量的把握是很多程式員覺得最難的事情。設計良好的程式碼使用起來感覺很好,而亂七八糟的程式碼會使程式員敬而遠之。最好的程式員會將藝術家的敏感融入抽象邏輯中,他們相信程式碼的美感對程式設計來說,和所有的演演算法或編碼樣式一樣重要。
最近,我和妻子帶著兒子做曲奇餅幹。每次我們加入一種成分,我們都會停下來檢查一下麵團,討論一下麵團的手感和顏色。它夠軟嗎?所有成分都和勻了嗎?當我們把麵團攤開時,兒子摸了摸錶面,看著我妻子教他如何把一切都弄得又勻又薄。然而,最難的部分是切出餅幹形狀。像所有的孩子一樣,他本能地將餅幹模子放到麵團中間開始切,每次我們都試圖告訴他如何將餅幹模子在麵團上依次切出餅幹形狀,以便讓每個麵團做出最多的餅幹。
每一個步驟——精確測量每種成分,檢查麵團的柔軟度和是否和勻,精確放置餅幹模子以減少浪費——都是在教他關於質量的知識。僅僅教他做餅乾的步驟(比如按照一個餅幹食譜)很難讓他學會分辨質量的好壞並做出好餅幹,而這隻能透過感覺和經驗傳遞。每次你讓孩子參與到你所重視的事情中來,你就是在教他們如何把事情做好,你也是在為他們以後程式設計做準備。
但在過程中你教他們的不僅僅如此,你讓他們知道這世界充滿了有趣的事情等待他們去發現,你向他們展示如何充滿激情地在他們所做的每件事中尋找那種瞬間的質量感。最棒的是,即使他們不能成為程式員——當然這是大多數人不應該也不願看到的——同樣的技能幾乎可以在任何職業、每種愛好、每天的生活中使用。然而當我們強迫小孩僅僅學習程式碼語法時,我們就給他們灌輸這樣一種觀念:純粹地寫程式碼才是有用的,而那些關於質量、創造性和程式碼美感的知識不值得學習。
成年人可以直接去學習編碼,孩子們則需要發掘他們的好奇心。