程序員如何提升算法思維?
持續學習,持續開發,是目前主流 IT 業界程序員的一個生活常規,在現代技術迭代速度非常快的情況下,只有不斷保持自我學習和探索才不會與時代脫節。無論是專業的 IT 從業者還是 IT 小白,都需要培養自己的算法思維。擁有良好算法思維后的直接好處有: 更高的面試成功機會,和更快的日常問題處理能力。
何為算法思維,并不是對一些已經設計好的優秀代碼的反復背誦和背板,而是自己對于問題的抽象能力的練習,即 從抽象問題到實際進行編碼或者設計程序解決問題的一個能力 ,如果單純對于一些算法進行背誦的話,我們的思維能力不會得到提升,最多就是熟練的碼農而已。所以,當看到別人設計的優秀算法后,我們一定要探尋算法背后那“曲徑通幽”的思維之路。只有經歷了思維之路的磨難,才能永遠占有一個算法,并有可能舉一反三,或者是設計一個巧妙算法。
個人認為,對于提升算法思維的方法,首先我們需要深入思考各種苦惱的問題,例如:
-
假設我喜歡租車出行,那么對于某一個地方的停車點一般在什么時候有車的機率最大?有車的概率是否與天氣,溫度等因素有關?
-
我希望可以在回家之前通過手機 APP 讓家里的空調提前工作起來,但是我非常 Geek ,不想使用現成的產品而想自己實現一個,和同學吹牛的時候可以更加脫穎而出?
在明確了這些問題以后我們就可以開始思考如何嘗試寫一個小的程序來幫助自己解決,這個時候如果手頭有一個習慣的語言就非常合適了(比如我個人就喜歡 Python,有很多庫可以使用,而且入門非常容易),如果沒有的話,可以去看看各個語言合適的場景,不過對于 爬蟲、數據分析 相關個人認為更加貼合日常生活的項目來看,還是考慮直接從 Python 3 起步比較好,后期如果想用樹莓派做點智能家居相關的項目的話 Python 也是非常合適的。
對于 Python 的學習,目前有很多非常成熟的課程,可以覆蓋各個不同的能力范圍,這里著重推薦 Coursera 的視頻課程,配合本地 IPython 或者 LeetCode Playground 一起調試和練習,可以獲得很好的效果。
舉個栗子
找思路
我們以第一個問題為例,如果你希望了解一個停車點的車輛情況,你需要有一些網絡知識,了解 APP 和相關軟件服務器之間的通訊協議,當了解了具體的接口之后就可以寫一個包含循環的程序來定時判斷某一個點的車輛數量信息,這個程序可以用 Python 來完成,涉及到的庫不會超過 2 個,基本就是 requests
json
庫。
一般來說如果要獲取一個數據,代碼類似如下(通過遞歸的方式獲取一個點的車輛信息):
對于這樣的操作來說,真的只需要 import requests
和 import json
就可以啦~
存數據
在得到了對應的數據之后可以考慮用文件或者數據庫的方式把內容持久化下來方便之后的分析,此時可以使用 pymongo
庫,寥寥幾行代碼,數據就已經很好地存儲下來。(此處可參考我們公眾號中之前的文章 《Python+MongoDB——小型程序的利器》 )
在 Python 中引入:
指定數據表并連接:
增刪改查:
插入一條記錄:
對外展示
最后,我們考慮對數據進行可視化(畢竟這些內容是要給別人看的),如果只是練習用的話可以簡單一點,考慮 Matplotlib,如果需要對外展示的話,可以試試 Chart.js~
最后,當我們完成了這些操作,就可以寫一篇文章記錄一下整個過程,這么做的好處有如下:
-
證明自己的能力可以獨立從分析到實際實現完成一個小的項目
-
吸引相關同好,通過評論得到一些發展意見從而優化自己的流程
-
記錄這次探索,相當于積累了自己的文檔庫
此外,如果你認為這類問題具有通用性,可以考慮同時將代碼放到世界最大的同性交友網站——GitHub 上面,不僅能獲得相關用戶討論,還能在個人社交媒體上進行自我宣傳,如果可以吸引到有類似需求的用戶,既可以提升自己 GitHub 帳號的知名度,還可以結識更多的朋友,激勵自己去創建更多的項目,增加更多的相關項目經驗,完成一個正向的循環,讓自己更加熟悉:發現問題,尋找思路,并且解決問題的一個具有算法思維的流程。