我從程式設計教室畢業
這篇文章在我的草稿箱裡躺了有一年多,今天總算是發出來了。本文的作者是之前程式設計教室的實訓生之一,原本在汽車製造車間裡工作,後來成功轉行為一名程式員,從事車載語音識別相關軟體的開發。這是他個人轉行過程中的一些經驗分享。
今天發這篇文章的另一個原因,是文中的這個 實訓生計劃,又開啟了 。 Crossin 本人線下指導,不收費用。 如果你對此有興趣,在看完前人的經驗之後,可 移步公眾號(Crossin的程式設計教室)瞭解一下 。
希望程式設計教室的存在可以讓更多人走上自己想要的路。
2017.9.27 我從程式設計教室畢業
我叫周鑫鑫,如果你經常關注“ crossin的程式設計教 室”公眾號的話,那你應該對我有印象,程式設計教室一些文章出自我手,2017.9.27 我從程式設計教室畢業,去到一家語音識別相關的公司,開始新的征程。
2016.9 通過程式設計教室的公眾號看到 Crossin 先生招實訓生的公告,毛遂自薦之後拿到 offer, 然後從就職的車企辭職,來到上海。
經過一年的學習,機緣巧合通過獵頭知道目前的公司產業跟汽車有一定關係,個人非常感興趣,最終也順利拿到 offer,Crossin 先生了解之後也非常尊重我的意願,然後讓我總結一下這一年,給程式設計教室的學員以及想轉行的同學一個參考。
說實話,我是很幸運的,在 Crossin 先生的指導下完成從新手程式設計師到初級程式設計師的過程。有工作經驗的同學都應該清楚,在新手階段有大神帶會成長得非常快,事實也是如此,每當遇到困難的時候,寫程式碼沒有頭緒的時候,找 bug 找的心累的時候,Crossin 總會給出適時的建議,真的是說不完的感謝。
還在程式設計教室學習的同學,請好好珍惜手上的資源,好好利用起來。
接下來是正文
這一年,都做了什麼
憑著記憶我大概回憶一下,這一年我都學習了哪些內容:
Python 基礎:
- 笨辦法學 Python
- Crossin的程式設計教室 圖文教程
- 廖雪峰 Python 教程
- Python標準庫保守估計 10% 內容
- 伯克利 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% 的內容
- bs4 官方文件 3 遍
- pyquery 官方文件
其中 web 和爬蟲知識大部分轉化為了專案:
Crossin的程式設計實驗室
ofollow,noindex"> http:// lab.crossincode.com/
其他:
- peewee 官方文件 60% 的內容
- jieba 官方文件
- leetcode 刷題 60+
- Mysql 必知必會
- google + stackoverflow
- Crossin 先生的言傳身教
其實可以看出,我是個忠於官方文件的開發者,以上提到的官方文件並不只是走馬觀花的一掠而過,而是實實在在的 把文件中給出的示例程式碼都敲過一遍 ,雖然費時費力,但的確物有所值。這一年算努力,不算拼命,這是自己對自己的評價。
基礎,程式設計師的立身之本
因為針對的是 Python,所以這裡講的基礎至少為 資料結構與演算法 + 熟練使用Python 。其實在日常的開發中,很少會遇到高深的演算法或者複雜的資料結構,但還是得抽出時間學習。
有兩本進階書籍切切實實的幫助到了我,不管是在找工作方面還是學習程式設計方面。一是 Data Structures and Algorithms Using Python, 然後是 Fluent Python ,看完前者可以去 leetcode 開始刷題,看完後者你會對 Python 這門語言有一個全新的認識。
以我目前的基礎知識,還遠遠談不上紮實,只是說應付普通的開發工作足矣。在接下來的日子裡,還需要花時間精力深入下去。
一些方法
在這一年的學習過程中,個人認為一些好用有價值的方法:
1. 不停地寫程式碼
快速提高程式設計水平的方法就是不停的寫程式碼 。
程式設計一年,我在 github 上建立了 26 個倉庫,近 300 次 commit 。不停的做一些小的專案,不管是 django 也好,爬蟲也好,小程式也好,前端也好,都在不停的學習,不停的寫。這對我在程式設計方面的成長非常重要。
以下的幾個方法都是在勤寫程式碼的基礎上總結出來的。
2. 擴充套件閱讀
這一年我讀了很多文件 ,其中一些比如 bs4 / requests 文件是一次性從頭到尾讀一遍,另外還有一些是不可能一次性讀完的,比如 Python 標準庫, Django官方文件,scrapy官方文件等等。
對於某些龐大文件,要抱著打持久戰的準備, 一個很好的方法就是一次讀完一個 topic , 比如有一次 Crossin 先生讓我寫一篇關於有序字典(OrderedDict) 的文章,瞭解到 OrderedDict 是 collections 下的一個數據型別後,我順便就把 collections 下的所有資料型別簡單過了一遍。之所以提到這個是因為在面試中,我用 collections.Counter 解決了一道程式設計題,面試官繼續問我關於 collections 還了解哪些內容?我反手就開始如數家珍地講起 namedtuple/Userdict/DefaultDict/ChainMap 等等。
同樣的道理適用於 Python 標準庫中的 re 模組,functools 模組,itertools 模組,random模組等等, 不用每次都詳細地過一遍,這很費時費力,但至少有個印象 ,之後再次遇到的時候,再仔細閱讀,反覆幾次下來,自然而然就可以信手拈來了。
3. Pythonic
來自知乎: Pythonic 就是以 Python 的方式寫出簡潔優美的程式碼。
來自我: 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 沒有止境,這應該作為日常積累的一部分。不用刻意的去收集,而是在閱讀他人的程式碼的時候,看到好的片段,立馬模仿一遍,轉為自己的知識即可, 積矽步,至千里 。
4. 養成良好的編碼規範
編碼規範對我來說意味著兩方面, 一是書寫規範,二是文件規範。
說來慚愧,我自己是近兩三個月才開始慢慢注意到這方面,權當給初學的同學的忠告,請 從一開始就遵照 PEP8 規範寫程式碼 ,嫌麻煩可以使用 PyCharm,這個編輯器自帶規範檢查。
文件儘可能寫的詳細些 ,一是可以邊寫程式碼邊整理自己的思路,二是之後不管是自己維護還是其他人閱讀,都能很快的理解你寫的程式碼。
從一開始就把事情做好,這總是沒錯的。
轉行,容易也不容易
辭職,就是一念之間。
2016.9.12 我給 crossin 發的郵件,2016.9.18 拿到 offer 當天就口頭辭職,2016.10.4 來到上海。完成從汽車工程師到碼農的心態轉變只用了 6 天。
果斷的前提是想清楚:
- 想清楚自己是否對程式設計有興趣?
- 想清楚自己是否對目前的工作失去了信心?
- 想清楚自己是否可以拋棄之前的積累?
- 想清楚自己是否能夠將姿態放到最低,從 0 開始學習一門新事物?
- ……
一年的時間說短不短,說長不長,經過了很多曲折,也收穫了很多樂趣。對我來說,是值得的。
最後
到上海第 8 個月的時候,一次偶然的機會,從路邊的草叢裡撿回了 小白 ,小傢伙長得很快,讓我榮幸成為了一名有貓的程式設計師。
奉上幾張貓片:




════
其他文章及回答:
如何自學Python |新手引導 |精選 Python 問答 |Python單詞表 |人工智慧 |嘻哈 |爬蟲 |我用Python |高考 |requests |AI平臺 |計算機視覺
歡迎搜尋及關注: Crossin的程式設計教室