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

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

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