從小開始學編程的小姐姐自述:我變成更好程序員的三點心得體會
本文經AI新媒體量子位(公眾號ID:QbitAI)授權轉載,轉載請聯系出處。
編者按:最近,國外一名小姐姐分享了自己的編程學習經驗,引起了不少關注。她名為Keri Savoca,小時候就學了HTML并開發了網站。之后又學習了SQL語言以及JavaScript和Ruby等。在這個過程中,她也積累了不少感悟與經驗,并分享了出來。有人閱讀了之后稱,文章里面的確有比較扎實的干貨。希望能夠給你帶來啟發。

編程并不是要你告訴計算機做某事
很多人都以為,編程就是要告訴計算機去做某事,就只需要編寫一個命令,就像 do X一樣,問題就解決了。
這其實是一個很大的誤解,編程需要的不是do X,而是:
- Do X to Y
- Get X from Y
- Get X from Y, and put it in Z
- Create X in Y
- Create X in Y, and make it do Z
等等。
只有開始寫代碼來解決實際問題,才能意識到這一點。
比如說,從BigQuery 中提取一組數據,并將其連接到Data Studio中做條形圖。
一般情況下,可以通過點擊按鈕對X軸上的參數進行升序或降序排序,但你想要根據BigQuery中的維度進行自定義排序的手,就需要代碼來解決這個問題了。
假設想要完成的X軸上的排序順序是:A, D, E, B, C, F,排序順序與其在“table001”中“location”維度有關系,可以這樣解決:
- ELECT *,
- CASE
- WHEN location = ‘A’ then 1
- WHEN location = ‘D’ then 2
- WHEN location = ‘E’ then 3
- WHEN location = ‘B’ then 4
- WHEN location = ‘C’ then 5
- WHEN location = ‘F’ then 6
- ELSE 0
- END as SortOrder
- FROM
- table001
現在可以根據 SortOrder 進行排序,這是自定義的,而不是升序或降序。
這就是所謂的do X,但編程遠遠沒有結束。因為這些只存在于控制臺中,而沒有實際應用。
編程到這個階段,才剛剛完成了一半。
這聽起來像是一個常識,但對于剛開始編程的人來說,可能需要過一段時間才能夠在概念上有所理解與體會。
寫代碼是為了解決問題,不要太依賴教程
但根據說明性教程學習編程的時候,卻很難學到這一點。
因為你不是在真正解決一個問題,而是在遵循一系列的指令。
當你正確的遵循這些指令的時候,就會產生一個特定的結果。
但如果你要去解決一個尚未解決的問題時呢?就沒有任何指令可以遵循了。
在學習編程的時候要注意到,學習到的技能應該是可以轉換的。如果你不能把你練習的技能應用到不同的場景中,跟著教程學習就沒有意義。
基于這方面考慮,上面的示例應該要加上because這個詞:
- Do X to Y because …
- Get X from Y because …
- Get X from Y, and put it in Z because …
- Create X in Y because …
- Create X in Y, and make it do Z because …
當你學會了制作一個待辦事項列表應用程序的時候,你應該學到的是,如何使用相同的概念來使應用程序以類似的方式運行。
多試試偽代碼,可以提升算法思維
當寫出來的代碼沒法運行的時候,你要怎么做?
很多人的方式是試錯,嘗試不同的方法來解決問題。
結果無非兩種:要么終于起作用了,要么不起作用。
這并不是在于對編程語言缺乏理解,而是算法思維上的問題。
比如你想寫一段代碼,從Y那里得到X,然后放到Z里面。
卻發現不知道從哪里得到了Z,然后試著把它放到了X中。
該怎么辦?只是試錯可能解決問題,但很難知道到底哪里錯了。
一種英國學校學生經常玩的游戲“FizzBuzz問題”通常被用來當做編程面試中的題目,也可以作為練習“偽代碼”的測試:
寫一個程序打印1到100這些數字。但是遇到數字為3的倍數的時候,打印“Fizz”替代數字,5的倍數用“Buzz”代替,既是3的倍數又是5的倍數打印“FizzBuzz”。

技術博主聞波(webary)在過去的一篇博文中說,就這樣的一個小問題,很多優秀程序員順手就能寫出來方式,但很多計算機專業的畢業生都不會做或者花費更多的時間去做。
背后的原因,就是忽略了如何想出解決問題的辦法,而是一上來就想代碼實現的問題。
而偽代碼是一個比較好的方式,會引導你從算法開始思考。
這不需要你去考慮用什么語言來解決問題,而是先想出解決問題的辦法。
原文鏈接:
https://medium.com/better-programming/the-3-realizations-that-made-me-a-better-programmer-af7d1bcab4d3
簡單卻又復雜的FizzBuzz面試編程問題
https://www.cnblogs.com/webary/p/6507413.html