這篇文章在我的草稿箱里躺了有一年多,今天總算是發(fā)出來了。本文的作者是之前編程教室的實訓生之一,原本在汽車制造車間里工作,后來成功轉(zhuǎn)行為一名程序員,從事車載語音識別相關軟件的開發(fā)。這是他個人轉(zhuǎn)行過程中的一些經(jīng)驗分享。
今天發(fā)這篇文章的另一個原因,是文中的這個實訓生計劃,又開啟了。Crossin 本人線下指導,不收費用。如果你對此有興趣,在看完前人的經(jīng)驗之后,可移步第二條推送了解一下。
希望編程教室的存在可以讓更多人走上自己想要的路。
2017.9.27 我從編程教室畢業(yè)
我叫周鑫鑫,如果你經(jīng)常關注“crossin的編程教室”公眾號的話,那你應該對我有印象,編程教室一些文章出自我手,2017.9.27 我從編程教室畢業(yè),去到一家語音識別相關的公司,開始新的征程。
2016.9 通過編程教室的公眾號看到 Crossin 先生招實訓生的公告,毛遂自薦之后拿到 offer, 然后從就職的車企辭職,來到上海。
經(jīng)過一年的學習,機緣巧合通過獵頭知道目前的公司產(chǎn)業(yè)跟汽車有一定關系,個人非常感興趣,最終也順利拿到 offer,Crossin 先生了解之后也非常尊重我的意愿,然后讓我總結(jié)一下這一年,給編程教室的學員以及想轉(zhuǎn)行的同學一個參考。
說實話,我是很幸運的,在 Crossin 先生的指導下完成從新手程序員到初級程序員的過程。有工作經(jīng)驗的同學都應該清楚,在新手階段有大神帶會成長得非???,事實也是如此,每當遇到困難的時候,寫代碼沒有頭緒的時候,找 bug 找的心累的時候,Crossin 總會給出適時的建議,真的是說不完的感謝。
還在編程教室學習的同學,請好好珍惜手上的資源,好好利用起來。
接下來是正文
這一年,都做了什么
憑著記憶我大概回憶一下,這一年我都學習了哪些內(nèi)容:
Python 基礎:
笨辦法學 Python
Crossin的編程教室 圖文教程
廖雪峰 Python 教程
Python標準庫保守估計 10% 內(nèi)容
伯克利 cs51 課程
SICP 前 3 章
Python 核心編程前 5 章
Data Structures and Algorithms Using Python
Fluent Python
Web 端:
Django 1.10 60% 的官方文檔
W3S Css 教程
W3S Html 教程
W3S Javascript 教程
W3S jQuery 教程 3 遍
Bootstrap 官方文檔 3 遍
微信小程序官方文檔
echarts 官方文檔 3 遍
爬蟲端:
requests 官方文檔
scrapy 官方文檔 60% 的內(nèi)容
bs4 官方文檔 3 遍
pyquery 官方文檔
其中 web 和爬蟲知識大部分轉(zhuǎn)化為了項目:
Crossin的編程實驗室
http://lab.crossincode.com/
其他:
peewee 官方文檔 60% 的內(nèi)容
jieba 官方文檔
leetcode 刷題 60+
Mysql 必知必會
google + stackoverflow
Crossin 先生的言傳身教
其實可以看出,我是個忠于官方文檔的開發(fā)者,以上提到的官方文檔并不只是走馬觀花的一掠而過,而是實實在在的把文檔中給出的示例代碼都敲過一遍,雖然費時費力,但的確物有所值。這一年算努力,不算拼命,這是自己對自己的評價。
基礎,程序員的立身之本
因為針對的是 Python,所以這里講的基礎至少為 數(shù)據(jù)結(jié)構(gòu)與算法 + 熟練使用Python。其實在日常的開發(fā)中,很少會遇到高深的算法或者復雜的數(shù)據(jù)結(jié)構(gòu),但還是得抽出時間學習。
有兩本進階書籍切切實實的幫助到了我,不管是在找工作方面還是學習編程方面。一是 Data Structures and Algorithms Using Python, 然后是 Fluent Python ,看完前者可以去 leetcode 開始刷題,看完后者你會對 Python 這門語言有一個全新的認識。
以我目前的基礎知識,還遠遠談不上扎實,只是說應付普通的開發(fā)工作足矣。在接下來的日子里,還需要花時間精力深入下去。
一些方法
在這一年的學習過程中,個人認為一些好用有價值的方法:
1. 不停地寫代碼
快速提高編程水平的方法就是不停的寫代碼。
編程一年,我在 github 上建立了 26 個倉庫,近 300 次 commit。不停的做一些小的項目,不管是 django 也好,爬蟲也好,小程序也好,前端也好,都在不停的學習,不停的寫。這對我在編程方面的成長非常重要。
以下的幾個方法都是在勤寫代碼的基礎上總結(jié)出來的。
2. 擴展閱讀
這一年我讀了很多文檔,其中一些比如 bs4 / requests 文檔是一次性從頭到尾讀一遍,另外還有一些是不可能一次性讀完的,比如 Python 標準庫, Django官方文檔,scrapy官方文檔等等。
對于某些龐大文檔,要抱著打持久戰(zhàn)的準備,一個很好的方法就是一次讀完一個 topic, 比如有一次 Crossin 先生讓我寫一篇關于有序字典(OrderedDict) 的文章,了解到 OrderedDict 是 collections 下的一個數(shù)據(jù)類型后,我順便就把 collections 下的所有數(shù)據(jù)類型簡單過了一遍。之所以提到這個是因為在面試中,我用 collections.Counter 解決了一道編程題,面試官繼續(xù)問我關于 collections 還了解哪些內(nèi)容?我反手就開始如數(shù)家珍地講起 namedtuple/Userdict/DefaultDict/ChainMap 等等。
同樣的道理適用于 Python 標準庫中的 re 模塊,functools 模塊,itertools 模塊,random模塊等等,不用每次都詳細地過一遍,這很費時費力,但至少有個印象,之后再次遇到的時候,再仔細閱讀,反復幾次下來,自然而然就可以信手拈來了。
3. Pythonic
來自知乎: Pythonic 就是以 Python 的方式寫出簡潔優(yōu)美的代碼。
來自我: Pythonic 的程度就是對 Python 的熟悉程度。
舉幾個簡單的例子,就可以體會到:
1、1 到 100 求和:
# 普通方法
total = 0
for i in range(1,101):
total += i
print(total)
# Pythonic 的寫法:
print(sum(range(101)))
2、 兩個列表以鍵值的形式生成字典:
s1 = ['a', 'b', 'c']
s2 = [1, 2, 3]
# 普通方法
dct = {}
for i in range(len(s1)):
dct[s1[i]] = s2[i]
print(dct)
# Pythonic 的寫法
print(dict(zip(s1, s2)))
這兩個例子只是拋磚引玉。對于普通的寫法來說,任何一個學習Python一個月的同學都能寫出來,但 Pythonic 的寫法就需要對 Python 了解得深入一些才行了。知識本身不難,但需要時間去學習掌握。
Pythonic 沒有止境,這應該作為日常積累的一部分。不用刻意的去收集,而是在閱讀他人的代碼的時候,看到好的片段,立馬模仿一遍,轉(zhuǎn)為自己的知識即可,積硅步,至千里。
4. 養(yǎng)成良好的編碼規(guī)范
編碼規(guī)范對我來說意味著兩方面,一是書寫規(guī)范,二是文檔規(guī)范。
說來慚愧,我自己是近兩三個月才開始慢慢注意到這方面,權(quán)當給初學的同學的忠告,請從一開始就遵照 PEP8 規(guī)范寫代碼,嫌麻煩可以使用 PyCharm,這個編輯器自帶規(guī)范檢查。
文檔盡可能寫的詳細些,一是可以邊寫代碼邊整理自己的思路,二是之后不管是自己維護還是其他人閱讀,都能很快的理解你寫的代碼。
從一開始就把事情做好,這總是沒錯的。
轉(zhuǎn)行,容易也不容易
辭職,就是一念之間。
2016.9.12 我給 crossin 發(fā)的郵件,2016.9.18 拿到 offer 當天就口頭辭職,2016.10.4 來到上海。完成從汽車工程師到碼農(nóng)的心態(tài)轉(zhuǎn)變只用了 6 天。
果斷的前提是想清楚:
想清楚自己是否對編程有興趣?
想清楚自己是否對目前的工作失去了信心?
想清楚自己是否可以拋棄之前的積累?
想清楚自己是否能夠?qū)⒆藨B(tài)放到最低,從 0 開始學習一門新事物?
等等
一年的時間說短不短,說長不長,經(jīng)過了很多曲折,也收獲了很多樂趣。對我來說,是值得的。
最后
到上海第 8 個月的時候,一次偶然的機會,從路邊的草叢里撿回了小白,小家伙長得很快,讓我榮幸成為了一名有貓的程序員。
奉上幾張貓片:
聯(lián)系客服