羅子雄:如何成爲一名優秀設計師javascript
董明偉基於本身實踐講的知乎live爲Python新人提供了不少實用建議,他推薦的羅子雄:如何成爲一名優秀設計師的演講講的很是好,總結了設計師從入門到提升的優秀實踐。
羅子雄的演講我看了三遍,再結合本身的程序員生涯,我想我也能夠爲Python新人提供一些建議,開了如何成爲一名優秀的程序員一題,講講個人Python工程師之路。java
一個非科班出生的程序員入門老是困難的,找到正確的學習方法,纔是這一階段最重要的目標。如羅子雄總結的設計師之路,程序員也須要看,作,想。python
書:linux
《Python核心編程》git
《Python Cookbook》程序員
《SQL必知必會》github
這是我入門Python選擇的書,很厚,硬着頭皮讀下來,作了不少筆記,有不少東西一時都不會懂,可是沒有關係,不少時候我讀書不是爲了理解書裏面全部的東西,而僅僅只要知道書裏面有哪些東西,等到用到的時候能夠再回來學習,再來查,《Python核心編程》能夠做爲一本Python語法,基本數據結構用法的參考書。數據庫
《Python Cookbook》提供了不少經典的解決現實問題的代碼片斷,建議把每個片斷都本身寫一遍,能夠加深對Python的理解,也爲下一步作提供不少解決問題的思路。這本書也能夠做爲參考書,碰到與書中相似的問題均可以參考一下那些代碼。編程
《SQL必知必會》是一本SQL入門書,能快速幫助你掌握基礎的SQL語法。做爲一名Web開發工程師,掌握SQL是必需的技能。
在學習了一些Python語法,瞭解了一些解決問題的思路後,下一步就是實踐了。
這裏推薦廖雪峯的實戰篇教程,實現一個完整的Web APP。雖然教程只有16天,可是我卻花了2個月。做爲一個新手,我會發現不少章節根本不可能1天搞定。可能某一天我面對的不是一個問題,而是像洪水同樣衝向個人一堆問題,這個時候我須要作的是分解問題,把1天的內容分解到1個星期來完成。
HTTP,database,MVC,javascript
以上這些姿式都是我完成教程的過程當中學到的。不少時候我會發現即便看過了教程,仍是不能按照教程的思路去寫本身版本的代碼,我須要的是去抄,教程提供了參考代碼,我會把代碼抄下來,在抄的過程當中去想爲何要這麼實現,同時學習http協議,db的相關姿式。能讀懂代碼而且能模仿寫出本身的代碼這就是我實踐的目標。
爲了管理個人代碼,還須要瞭解下Github相關姿式,以上就是我入門Python最重要的一個項目,找到一個適合本身的入門項目確實能夠事半功倍。
基於教程我實現一個內容發佈系統,下一步我想在這個項目的基礎上把它改形成我想要的樣子,好比一個Blog:https://github.com/zhu327/blog
回過頭來看看本身寫的代碼,須要去思考有沒有更好的實現方法,代碼如何能寫的更簡潔,以及一些必備的註釋,日誌信息。在思考的過程當中更重要的是認識本身的不足,只有正確的評估本身,才能準確的定製下一階段的目標。
如今我已經入門了,能夠開始考慮如何找到一份Python Web開發的工做了。
我須要去了解招聘企業對於Python工程師的要求是什麼。
從以上分析我能夠看到幾個比較重要的關鍵字:
linux, Django, tornado
因此我須要學習如下姿式:
安裝ubuntu學習linux使用
閱讀Django教程
閱讀tornado教程
這裏有我整理的一份Python中文資源存檔
Django是招聘企業需求最多的框架,因此個人第二個實踐項目會實現一個Django的論壇。
F2E是一個Tornado實現的論壇,在學習了Torando的基礎教程後,我就能夠開始閱讀這份F2E論壇的代碼。首先我要列出我須要瞭解的部分:
數據庫的設計,建立須要的表
URL路由的設計,整理一份URL功能清單
如今我已經拿到一個論壇的需求了,下一步就是用Django來實現這個論壇,說得更low一點:用Django翻譯一下這個Tornado實現的論壇。
以上就是我最終實現的論壇,經過這個論壇,我基本上學到了Django開發的方方面面。對Django有了一個比較深入認識。而後拿着這份代碼我找到了本身的第一份Python開發工做。
開始了新的工做,須要想的就更多了,考慮到本身的不足,可能須要列出一個成長的書單來彌補自身的短板。這裏列出一些關注點:
代碼質量
面向對象
設計模式
數據庫優化
從入門到找到第一份開發工做,可能須要3~4個月的時間,考慮到不是脫產學習,須要的時間就更久了。在這個過程當中我會遇到各類各樣的問題,而每一個問題均可能會打擊到我想要放棄。
我想這個時候我須要考慮的是爲何要作程序員,爲了加薪,爲了興趣,爲了更好的生活等等。我是以成爲程序員爲目標開始學習的,因此我必須堅持,直到達成本身的目標。
軟件開發的過程實際就是解決問題的過程,一個大的系統通過架構設計被分解成一個個小的部分。而分配給個人需求也會被我再次分解成更多的小問題,在這些問題中有咱們能直接解決的,也有我可能解決不了的。對於這些解決不了的問題,個人處理路徑:
分析問題
找同事商量(通常在Google找不到的狀況下)
正確的Google方式是用英文搜索,不須要正確的語法,只須要幾個能清晰表達本身問題的關鍵字就夠了,英語實在很差怎麼辦?能夠先在Google翻譯查好單詞再搜索。
如下有幾個搜索技巧:
Django group by site:stackoverflow.com // 只搜索stackoverflow的問答 Django doc Filetype:pdf // 只搜索pdf格式文檔
在向同事提問以前,須要有本身的思考,能詳細的描述問題出在哪裏,大概引出問題的緣由,以及本身分析的問題解決方式(若是有),表達出了這些之後,被問同事才能根據你提供的上下文來分析問題。
必定要避免這麼問:
xx問題怎麼弄(沒有本身的分析,沒有Google)
幫我看一下這個異常(沒有本身的分析,沒有Google)
我作的想的越多就越以爲本身的知道的太少,爲了擴展視野,我訂閱了一些站點:
董明偉的Python訂閱列表:https://zhuanlan.zhihu.com/p/...
Awesome Python: https://github.com/vinta/awes...
工做的時間久了,摸索出一套適合本身的時間管理方式。因爲需求的不肯定,我不會定製周計劃。基本上天天早上到公司會看一下郵件,列一下當天須要處理的事情,大概分析一下每件事情須要的時間,而後分配一下時間到各個時段,固定天天下午5點分配一個小時的時間用來看收藏的還沒來的及看的技術文章。
在項目空窗期,會找一本能迅速提高本身某方面能力的書讀讀,好比我意識到須要優化MySQL的性能的時候,去看了《高性能MySQL》。
人都是有惰性的,學習也是枯燥的,可是成爲一名優秀程序員的目標會驅動我去不斷補齊本身的短板。