我從編程教室畢業

這篇文章在我的草稿箱裏躺了有一年多,今天總算是發出來了。本文的作者是之前編程教室的實訓生之一,原本在汽車製造車間裏工作,後來成功轉行爲一名程序員,從事車載語音識別相關軟件的開發。這是他個人轉行過程中的一些經驗分享。

今天發這篇文章的另一個原因,是文中的這個實訓生計劃,又開啓了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的編程實驗室

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的編程教室

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章