<address id="bztp3"><nobr id="bztp3"></nobr></address>

      <sub id="bztp3"><listing id="bztp3"><menuitem id="bztp3"></menuitem></listing></sub>

        <form id="bztp3"></form>

        <address id="bztp3"></address>
        <sub id="bztp3"></sub>

          <form id="bztp3"></form>

              參加Python培訓前應該做哪些準備?

              在選擇進行Python培訓之前,很多同學都會比較糾結。一方面是因為Python培訓機構良莠不齊,另一方面Python培訓的脫產、學費又是一個比較高的代價。為了讓自己的學習達到最佳效果,很多同學都會選擇七天做好培訓準備,自己進行復習、預習等,這樣才能保證自己的每一分學費都不浪費。

              人生苦短,很高興你選擇了python,這是我比較喜歡的語言。如果你是想做python web相關的話,可以看看這個指南python web 入坑指南 – python-web-guide 0.1 文檔,都是根據我的工作經(cai)驗(keng)總結的。主要涉及python網站和爬蟲相關的開發,還有一些工程性的東西。入行不久,經驗有限,希望能給你指條路。下邊列舉了計算機基礎、開發工具、代碼規范、軟件工程相關的東西,恕我沒法像李笑來老師那樣讓你倆月速成,不過這些知識都掌握(或者大部分入個門)找個工作應該是沒問題的。

              python語法:《python核心編程》

              算法和數據結構: 隨便一本參考書,了解基礎概念,幫你寫出高效程序

              http協議:做web http協議是基礎,推薦個入門的《圖解HTTP》

              linux:《鳥哥的linux私房菜》,因為項目部署一般用linux系統,所以需要了解linux

              mysql:隨便一本參考書都可以。做后端項目肯定需要數據庫

              版本控制:git,目前最流行的版本控制工具

              代碼風格:pep8標準

              測試:pytest,正規項目需要單元測試

              開發工具:Pycharm等。

              web框架:django/flask/tornado等。實際上如果可以參照flask文檔教程獨立寫個博客就算入門了,至少基本的知識都涉及了。數據庫什么的最好親自安裝,善用google、stackoverflow、github。就算去培訓班估計知識點也不會超過我以上列舉的這些,這些都是工作中最緊密相關的部分。我之前練習tornado寫了個簡單的小網站微閱讀,專門閱讀我感興趣的微信號,爬蟲和網站都涉及到了。學有所用就是最好的練習方式。初學者一開始不要害怕,我列舉的很多也是我工作中才慢慢學到的,一開始學python的時候我sql語句都不怎么會,隨著你的學習做出成果了會不斷給你正反饋,入門可能會有一段困難期需要你克服(比方說編碼問題、包導入問題、性能問題)。python相對其他語言入門算是容易的,而且生產力高,又能干很多事(自動化、web開發、爬蟲、數據分析等等),算是性價比很高的一門語言,號稱偽代碼語言(易讀)和黑客語言(黑客工具),隨著大數據和人工智能火起來,python再次展現出活力。

               

              上面這些列舉我覺得這已經是一個合格開發者比較基礎的東西了,如果這個你還覺得掌握不了,那我覺得你可能不太適合入行(這些知識至少要有入門級的水平)。說python很簡單的人可能只是把它當個玩具或者業余用用,而我是要靠它吃飯的。如果你希望深入學習,下邊我引用了很多書籍和參考資料。正像很多知乎技術牛人說的,語言只是個工具,你要掌握的是相關技術棧(數據、后端、運維、爬蟲等),而不是僅僅會使用一些python語法糖。另外我只是個技術一般的python后端(工作一年多點的初級工程師),我不是技術牛人,我的優點在于我持續學習總結吧。我覺得編程有時候不需要特殊的天賦,但是興趣和學習能力還是很重要的。除非你天賦異稟,不然沒有捷徑(要靠持續看書和針對性練習),這一行里牛人、聰明人、勤奮者太多了,你要怎么與他們協作or競爭?公司里的也不都是技術牛人,很多是靠編程手藝混個飯吃(所以要靠規范、流程、測試、codereview防止程序員捅婁子)。我發現現在python慢慢火了,很多人開始學習,但是業余選手太多,正規軍比較少,而目前關于python工程實踐方面的資料并不多,我記錄了很多工程相關的東西只是希望國內的python學習者可以越來越專業,有越來越多有才智的人為python社區貢獻力量。python web入門一年(附python web入坑指南)最后這個是我大四開始學習python找工作的經歷和一些學習方法論,有興趣的可以看看。

               

              以下是長文,慎入,高手請無視。沒毅力或沒興趣的建議還是跟著輪子哥看看美胸和大腿吧,程序員可能不適合你:

               

              入門基礎

              編程語言: Python

              Python入門相對容易又可以干很多事(網站,運維,數據,爬蟲等),是一門方便的工具語言。2016年TIOBE排名顯示Python已經名列第四,成為腳本語言之首。 國外的Youtube,Instagram,Pinterest,Reddit, Quora等知名應用一開始都是基于Python構建,國內的豆瓣,知乎,果殼,餓了么等也是Python應用的典型。這也給了國內Python開發者一陣強心劑,Python的生態環境可以支撐起重量級的 產品。這里不想挑起語言之爭,php,nodejs,java,ruby等都有豐富的生態環境。不過目前來看,技術選型用Python在招聘、學習、培訓、敏捷開發等方面還是一個比較折中的選擇(主要在于人,而不是語言)。 python,ruby之類的語言優勢在于其生產力,你能在極短時間內就搭建出原型從而贏得產品競爭。當然python也有其缺點,比如python2編碼問題,性能問題,易開發,難維護,python3激進地舍去了很多語言不好的特性導致無法兼容python2等。 推薦一下幾本個人認為比較好的Python書籍:

              • 《python-guide》 requests作者寫的guide
              • 《A Byte of Python》 一百多頁的小書,可以快速熟悉Python語言。
              • 《Python核心編程》 比較全面的Python書籍,介紹了Python語言的方方面面。
              • 《Fluent Python》 Python進階,涉及了很多Python高級主題。
              • 《Python3 Cookbook》 Python進階讀物。
              • 《Python高級編程》 小明明的python高級編程

              當然還有Python的官方文檔作為參考,不過有些文檔有些地方比較晦澀,還是推薦書籍入門。網上目前也可以搜到很多免費的電子書。 如果有時間可以看看國內廖學峰寫的Python教程。

               

              算法與數據結構

              編寫良好的代碼需要了解常用的算法和數據結構,雖然你可能很少會自己實現,但是對于Python語言中一些常用數據結構如list, tuple, set, frozenset, dict和collections模塊中的OrderedDict, defaultdict, deque, namedtuple, Counter等應該知道什么時候用。最主要的還是了解算法中遞歸,二分等常用思想,寫出高效易用的代碼。如果你想在線練習,可以做一些Acm基礎題或者去leetcode等網站刷題。 推薦書籍:

              • 《算法導論》 你可以挑選感興趣的章節啃一啃,也可以去網易公開課看下視頻教程。如果不是計算機專業的可以看下《計算機科學導論》這門公開課,正好也是以Python語言講解的。

              計算機網絡

              對于應用開發者來說大部分時間可能不太會接觸特別底層的問題,但是了解網絡的運行原理還是必要的。網上有個面試題 從輸入URL 到頁面加載完成的過程中都發生了什么事情? 如果對其中大部分的概念都了解就算是入門了。網絡相關書籍可以隨便找一本看看。Http協議對于web開發者來說比較重要,需要深入了解。推薦書籍:

              • 《圖解Http》 一本小白入門Http協議的好書,有大量圖片示例。
              • 《Http權威指南》 Http協議最權威的講解,大部頭著作,可以看看最基礎的部分。

              Linux系統

              大部分Python應用都是跑在Linux服務器上的,大部分開源軟件使用的也是linux系統,即使日常工作不使用linux,一些基本的linux命令也要了解。 比如常用的文件操作,目錄操作,進程操作等。你可以使用類unix系統mac或者linux版本ubuntu作為學習環境。 推薦:

              • 《Linux工具快速教程》
              • 《CONQUERING THE COMMAND LINE》 掌握這上面的命令基本就可以滿足日常需求了。
              • 《鳥哥的Linux私房菜.基礎學習篇》 淺顯易懂,入門Linux命令的好書。

              數據庫

              現在用得比較多的有三種類型的數據庫,關系型數據庫(mysql等),文檔型數據庫(mongodb等),和內存型數據庫(redis等)。三種數據庫各有優勢和特色,后端程序員需要了解下不同類型數據庫的使用方法和應用場景,靈活應用到后端代碼中。關于各種數據庫網上已經有不少資料,讀者可以自行搜索學習。

               

              版本控制

              目前最流行的應該就是git了。版本控制工具是多人協作必不可少的工具,入門的程序員需要掌握基本的git命令,可以把github作為個人練習的工具。

               

              專業性

              公司做項目不是自己過家家,需要你具備寫文檔,注釋,單元測試的能力。如果你現在還不了解一個正規python項目都有哪些組件構成,請去github克隆一份知名的代碼倉庫,花點時間仔細分析下它的項目結構和源代碼。github上很多優秀資源你可以自己去探索。

               

              軟技能

              程序員和計算機打交道比較多,我在大學的時候就喜歡一個人悶頭啃書。但是工作了你會和很多人交流協作,你的同事(前端、測試、運維、產品經理、客戶等)、上司甚至老板,你要學會如何有效溝通和表達,拋棄一些學生思維,從一個學生轉到職場人士,這其實是一次很好的鍛煉。筆者剛入職場的時候就不太會表達協作,而且情緒易激動,甚至一意孤行導致項目延誤過,這些虧我都是吃過的。希望后來人吸取教訓,代碼之外還有很多需要學習的。

               

              后端技術棧

              對于技能需求可以在拉勾上搜一下Python的職位,看看各個公司對Python的要求。或者你可以寫個拉勾網的爬蟲,對數據做一個簡單的統計,筆者當初找工作就是這么干的。 另外,真正做項目還需要你熟悉python的各種庫和框架,比如django/flask/tornado/requests/sqlalchemy/unittest/pytest/celery等等,掌握了合適的工具才能快速上手做東西,公司恨不得你第一天入職第二天就能寫項目。 所以,在你入了門以后請盡快熟悉python web的技術棧。公司不管你會什么算法,只在乎你的生產力。 推薦一些文章供參考:

              • 《全棧增長工程師指南》
              • 《web開發路線圖》
              • 《后端都要學習什么?》
              • 《PYTHON招聘需求與技能體系》
              • 《PYTHON后端相關技術/工具棧》

              代碼風格

              不一致的開發風格會給協作開發帶來困難,同時也妨礙代碼閱讀,讀代碼的時間是多于寫代碼的,所以有必要統一編碼規范。推薦使用pep8或者其子集作為代碼規范,使用vim插件python-mode開啟pep8和pylint對代碼就行檢測。如果使用其他編輯器或者IDE工具最好也使用相關插件使代碼符合規范。工程上的代碼應該盡可能保持清晰易懂,推薦看看requests等優秀的開源庫學習下。強烈建議新手看看以下參考寫出格式規范的代碼,強烈建議打開pep8和pylint,pylint可以幫助你干掉很多低級錯誤。建議使用py的公司都指定好自己的代碼規范并且嚴格遵守,同時做好code review,防止造成以后的維護噩夢。

              • 《PEP8.org》
              • 《PEP 8 – Style Guide for Python Code》
              • 《Google開源項目風格指南-Python風格指南》 google風格的docstring比較贊
              • 《API_coding_style》
              • 《code-example》
              • 《編寫優雅代碼》 新浪微博的培訓課程,可以學習一下
              • 《爛代碼的那些事》 Axb的自我修養,大神的文章
              • 《三種docstring示例》

              一個簡潔的代碼規范:

              • 格式請遵守pep8,務必開啟編輯器的pylint和pep8檢測。vim請試試python-mode插件。
              • 模塊、類和函數請使用docstring格式注釋,除顯而易見的代碼,每個函數應該簡潔地說明函數作用,函數參數說明和類型,返回值和類型。對于復雜的傳入參數和返回值最好把示例附上。如有引用,可以把jira,github,stackoverflow,需求文檔地址附上。 良好的文檔和注釋很考驗人的判斷(何時注釋)和表達能力(注釋什么)。
              • 動態語言的變量命名盡量可以從名稱就知道其類型,比如url_list, info_dict_list,降低閱讀和理解的難度。(我的感覺就是動態語言易編寫,寫不好后期更難維護)。比如經常用date命名,有時它是個datetime.date對象,有時候是個字符串,還有人喜歡用info結尾,有時候是個dict,時候是個string,看得我暈頭轉向,總不能所有地方都用instance判斷吧,怪不得python3加上了type hint。沒有注釋和文檔看得我想罵人。命名在動態語言里頭十分考究,希望你可以注意。
              • 風格上衡量不了請參考知名開源項目的做法。以可讀性和維護性作為標準。

              編程范式

              Python支持多重編程范式,過程式(Procedural),面向對象(OOP),簡單函數式(Functional)編程。不同人,不同語言轉過來的人,Python老鳥和菜鳥等寫出來的代碼風格迥異。筆者之前的同事有對OOP挖掘較深的,一般習慣寫OOP風格的,但現在的項目卻很少用類,之前的代碼都是用一個個函數來實現各種功能。對個人風格喜好不予評判,但是個人感覺還是需要深挖一些Python的特性,雖然Python容易入門,但是有些語言特性還是需要一段時間才能了解深入的。使用各種風格的時候要酌情判斷,比如一個過程需要維護大量的中間狀態時,單純的使用函數會寫得很冗長,這時候可以用類和子函數的形式簡化它。當你無法判斷哪種方式比較好的時候,請在解釋器里邊 import this看看。當可以實現一樣的功能時,往往簡單易懂的方式就是最好的。一些參考:

              • 《requests》 requests庫是接口設計的典范,可以參考參考。
              • 《Python3 面向對象編程》 關于Python面向對象和一些設計模式。
              • 《OOP vs Functional Programming vs Procedural》

              何謂Pythonic?

              Python的世界里你會聽到這個詞”Pythonic”,大概就是指代碼符合Python的慣用法,使用的都是Python的語法糖。比如從其他語言轉到Python 的寫出來的代碼很可能受到以前思維方式的影響,寫出來的代碼不夠Pythonic: 比如:

               

              # 不夠Pythonic
              if a < b and a > c:
                  pass
              
              # python里卻可以這么寫
              if c < a < b:
                  pass
              
              # bad
              i = 0
              while i < mylist_length:
                  do_something(mylist[i])
                  i += 1
              
              # good
              for element in mylist:
                 do_something(element)
              
              # bad, 不要使用默認可變對象作為默認參數
              def f(a, b=[])
                  pass
              
              # good
              def f(a, b=None):
                  if b is None:
                      b = []
              

              Python有一些語法上的坑,比如默認參數只計算一次,不要使用可變類型作為默認參數等,看多了寫多了就知道了。尤其是可變類型作為函數參數傳入后被改變的情況(函數盡量不要有副作用),尤其要注意。 一些參考幫助寫出Pythonic的代碼:

              • 《Pythonic到底是什么玩意兒?》 賴勇浩的博客
              • 《python-guide Code Style》 python-guide關于代碼風格的介紹
              • 《Learning the Pythonic Way》 一個cmu的課件
              • 《Writing Idiomatic Python3》 一本免費小書
              • 《編寫高質量代碼:改善Python程序的91個建議》 給國人的書捧捧場^_^,類似《Effective python》
              • 《好好寫代碼》 豆瓣工程師董偉明的文章

              敏捷與TDD

              筆者非計算機科班出身,對于軟件工程的東西也不是很懂,最近掃了一本《敏捷軟件開發-原則、模式與實踐》,感覺有些東西還是挺有啟發的。在這里稍微提一下敏捷中的TDD(Test-driven development)吧。因為Python是動態類型語言,不像靜態語言可以編譯期檢查,很多問題運行時暴露出來,而且動態語言語法靈活也容易刨坑。用TDD是可以提升代碼質量的,雖然有時候完全用TDD可能有些死板,但是TDD的一些思想還是很值得借鑒:

              • 測試最重要的是對架構和設計的影響,不是為了測試而測試。一般難以測試的代碼往往是設計不好,耦合嚴重的代碼。沒有測試的代碼同時也給重構帶來壓力和隱患。

              編碼的時候想著如何測試它,甚至都可以改善設計。對于動態語言,一直有『動態語言一時爽,代碼重構火葬場』這種說法,說明動態語言如果沒有良好的設計和測試,以后是會埋下不少隱患的。 當你發現debug的時間甚至比寫代碼長很多的時候,當你發現總是返工對代碼修修補補的時候,或者可嘗試下TDD。 你可以學習使用下python的unittest或者pytest等進行單元測試,以保證代碼質量。個人工作經驗也表明,難以測試的代碼往往是設計不太好的代碼。 update: 經驗表明,TDD未必是必要的,但是單元測試是很必要的。如果是新項目建議為所有的復雜函數寫單元測試,為項目質量保證。 下邊是一些參考書籍:

              • 《Tips for agile developers》
              • 《pytest: helps you write better programs》
              • 《代碼整潔之道》
              • 《編寫可讀代碼的藝術》
              • 《重構-改善既有代碼設計》
              • 《軟件調試修煉之道》 了解下調試和跟蹤技術
              • 《代碼大全 (豆瓣) 》板磚書,從小白快速邁入職業程序員
              • A simple example of Python OOP development (with TDD) – Part 1

               

              開發工具(很多只列舉個名字,具體使用請自行google)開發和編程工具 – python-web-guide 0.1 文檔

              • Pycharm。專業的python ide,功能很強大,特別喜歡它的代碼merge工具,不想被編輯器折騰死的推薦直接使用。
              • vim。本人比較喜歡,配上各種插件編輯效率很高。Vim Awesome 可以到這個上面安裝排名靠前的那些插件,能夠大大提高編輯效率,替代IDE。其他編輯器sublime,atom,vscode,emacs等不熟,根據個人喜好來吧。(在google搜索python awesome等可以在github上搜索到一些awesome項目,總結了該語言很多技術工具)。炫酷的效果圖:7ktuty.com1.z0.glb.clouddn.com
              • 使用vim+tmux+zsh+autojump高效工作
              • tmux。比screen好用,可以用來分屏等,ubuntu下基本就不用使用terminator之類的分屏工具了
              • zsh。替代原生的bash shell,提供了好多方便的特性。linux/mac下vim+tmux+zsh簡直是絕配,甚至可以直接在服務器上方便地擼代碼。
              • item2(mac)。替代原生的終端。
              • brew(mac)。類似ubuntu下的apt-get,可以方便安轉各種軟件和工具。
              • autojump。方便在命令行里來回跳轉。

              日志收集工具

              • Sentry.
              • Fluentd

              管理及運維工具

              • Supervisor.進程管理
              • Fabric.應用部署
              • docker.最近比較火的容器技術
              • SaltStack和Ansible. 配置管理
              • StatsDGraphite等web監控

              調試工具

              • curl
              • http
              • postman

               

              一些常見原則

              對于什么是好代碼,什么是壞代碼我現在還沒有太多經驗,但是最近工作接手別人的代碼感覺困難重重,還是too naive啊。每個人實力不同,風格不同,一起協作的時候確實會遇到很多問題和分歧。感覺code review啥的還是很有必要的,可以讓菜鳥學習下老鳥的經驗,也可以讓老鳥指導下菜鳥的失誤,同時避免過于個人化的糟糕風格(比如讓人想立馬離職的高達成百上千行的復雜函數,比如上來一堆不知道干啥的幻數,比如上來就 form shit import * 導致俺的編輯工具找不到定義,比如整個項目沒有一行測試代碼,比如不知道用logger,全用print+眼珠子瞅,一個bug找半天,比如沒有pep8檢測導致你的環境打開別人的代碼彪了一堆警告……)。說好的規范呢,說好的設計模式呢,說好的高內聚低耦合呢?說好的KISS原則呢?說好的DYR原則呢?其實俺只是想多活幾年,至少不要到三十歲頭發掉光。啥設計模式的可以不用,能干活的代碼就行,牢記幾個原則,沒事的時候對復雜的東西重構下,代碼不能自解釋的搞搞文檔,不被隊友坑同時不坑隊友,俺就心滿意足了。最后還是列舉一下常用原則、思想和注意事項吧(最好import this看看python之禪,很多思想是通用的):

              • KISS原則,Keep It Simple, Stupid。能簡單的絕對不要復雜,不要炫耀代碼技巧,簡單可讀最重要,后人會感謝你的。
              • DRY原則。就算咱不懂設計模式,只要代碼復雜重復了就及時抽取出來,至少不會碰到大問題。
              • YAGNI(You Aren’t Gonna Need It),不要猜測性編碼。
              • 快速失敗,靈活使用斷言。契約式編程(先驗條件和后置條件)
              • 及時清理技術債務,防止『破窗』。
              • 一次只做一件事。盡量避免復雜度過高的邏輯,盡量做到代碼簡單,意圖明確。
              • 高內聚,低耦合。意義相近的東西應該放到同一個地方。寫代碼的時候想著怎么測試它就能避免過度復雜,耦合嚴重的代碼。
              • 代碼應當易于理解。 《代碼大全》、《編寫可讀代碼的藝術》、《代碼整潔之道》啥的都是告訴你代碼最好自解釋,好理解。記住代碼首先是給人看的,其次才是讓機器執行的,不要過度設計。
              • 不要過早優化,最小可用原則。先測量,后優化。根據二八定律,大部分性能瓶頸只在20%的部分,這些才是真正需要優化的地方。
              • 不要炫技,可讀性最重要。合適的地方使用合適的技巧,不要過度炫耀語法糖導致維護和理解困難。
              • Think about future, design with flexibility, but only implement for production. 盡量設計良好,避免繁雜和冗余。好的架構和設計都是不斷演進的。
              • 文檔化。哪些東西該文檔化,哪些該注釋需要做好,以便新手可以盡快上手。盡量做到代碼即文檔,tornado的文檔和代碼就是典范。
              • 不要直接吞掉任何錯誤和異常,一定要做好記錄。血淚教訓,使用Sentry或其他工具記錄好異常發生的信息,為定位bug提供便利,web端的bug一般不好復現。
              • ……還有的大家可以自己補充

              還有OOP那一套:

              • 開閉原則(Open-Closed Principle)
              • 依賴倒置原則(Dependence Inversion Principle)
              • 接口隔離原則(Interface Segregation Principle)
              • 里氏代換原則(Liskov Substitution Principle)
              • 迪米特原則(Law of Demeter)
              • 合成復用原則(Composite/Aggregate Reuse Principle)
              • 單一職責原則(Single-Responsibility Principle)

              python代碼壞味道(新手經常犯的錯誤)

              • 不pythonic,寫得很業余,真就信了半天學會python
              • 上來就整一個不知道啥意思的magic number,大學老師沒教你不要濫用幻數?
              • 上來就from shit import *
              • 復雜函數沒有docstring,傳入了一個嵌套字典都不注釋,娘來
              • 變量名亂起,看不出類型,加重理解負擔。我在想是不是動態語言用匈牙利命名法要好一些
              • 不遵守pep8,沒有pylint檢測,打開代碼一堆語法警告,老子的編輯器滿眼都是warnning,編輯器用不好就老老實實用pycharm,用編輯器就老老實實裝好語法檢測和pylint檢測插件,沒有插件請考慮換一個editor
              • 沒有單元測試,不知道怎么寫測試(print大法好?)
              • 超長函數,沒有復用和拆分,我智商低,不能理解好幾屏都翻不完的,見諒。這么長居然還tm能工作,牛逼
              • 到處print,debug的時候加上,上線再刪除(累不累親?),logging模塊很受冷落
              • 上來就try/except了,把異常都捕獲了,吞掉異常導致排錯困難
              • 沒注意可變類型和非可變類型,傳入可變類型并在函數里修改了參數,坑。。。
              • 沒有邏輯分塊,沒有美感(這個就算了),就算不限制一行超過80列,也不能寫一行寫幾百列吧,左右轉頭腦瓜子疼

              嗯,一開始就開啟pep8和pylint檢測能顯著提升代碼質量(各種錯誤警告逼著你寫出高質量代碼)。咱寫不了詩一樣的代碼,也不能寫shǐ 一樣的代碼。 可能很多東西對老鳥來說都是顯而易見的,不過菜鳥和高級菜鳥們還是需要多多練習積累經驗。慢慢摸索吧騷年。。。。。。

               

              小白的踩坑記錄

              文檔化

              很多程序員是懶得寫文檔的,仿佛牛逼的程序員不需要寫。但是看人家真正牛逼的開源項目比如flask和tornado等,無論是代碼還是文檔都做得相當棒。對于一些項目,有些東西如部署步驟;常用命令等還是可以記錄下來的,可以使用wiki或者readthedoc,gitbooks等文檔工具記錄一下,方便新人上手。如果不知道記錄啥,就把你發現不止一次會用到的東西文檔化。個人認為需求文檔也應該有歷史記錄,方便接手的人可以快速了解業務和需求變更。數據庫字段的含義也應該及時記錄和更新。

               

              注釋

              有經驗的人都知道看別人的代碼是一件很痛苦的事情,尤其是沒有任何注釋的代碼。代碼除了完成需求外,最重要的就是維護和協作,除非你覺得你做的項目活不過仨月(或你自己玩玩的項目隨便你怎么艸),否則就一定要重視代碼質量,防止代碼腐化(破窗)以至難以協作和維護。有時候比寫注釋更難的是知道何時寫,寫什么注釋?python里有規范的docstring用來給類和函數進行注釋,除了說明功能外,關于github,stackoverflow鏈接、復雜的傳入傳出參數(比如嵌套字典作為參數這種你都不注釋就很不合適了),類型說明、需求文檔和bug的jira地址等都可以注釋。凡是你回頭看代碼一眼看不出來干啥的,都應該有適當的注釋,方便自己也方便別人。當然,最重要的是代碼清晰易讀,好的命名和編寫風格的代碼往往是自解釋的,看代碼大致就可以看出功能。建議就是給所有的模塊、類和函數都加上注釋,除非一眼能看出來這個東西干啥,否則都應該簡潔注釋下,讓別人不用一行行看你的代碼就大概知道你這個東西是干啥的。最后注意的就是一旦函數更改及時更新注釋。qiniu的sdk寫得就不錯,可以去github看看。總之,”Explicit is better than implicit.”, 代碼里不要有隱晦的東西,一時偷懶將來可能會付出幾倍的維護代價,請對將來的自己和他人負責。

              • 《python docstring》

              Code Review

              筆者認為code review是一件非常重要的事情,可以有效防止代碼腐化,同時方便同事了解業務。可以在公司搭建Phabricator(facebook在用)類似工具進行代碼review。

               

               

              相關新聞

              聯系我們

              400-080-6560

              在線咨詢:點擊這里給我發消息

              郵件:work@magedu.com

              工作時間:周一至周日,09:00-18:30

              QR code
              656彩票平台656彩票主页656彩票网站656彩票官网656彩票娱乐 www.340388.com | www.1368s.cc | www.c526688.com | 1315559.com | 51200uu.com | www.0270z.com | www.56520d.com | mmm5682.com | www.621316.com | www.gf518.com | www.798878.com | 4880g.com | www.607316.com | www.109115.com | www.57799vv.com | 7340111.com | www.29277v.com | www.902cq.com | www.666bu.com | blhvip15.com | 4880e.com | www.607663.com | www.220518.com | www.js7888.co | 3665yh.com | 234906.com | www.785382.com | www.5446j.com | www.1597sss.com | 00uu8331.com | qq365h.com | www.99677o.com | www.61233b.com | www.1106488.com | www.wns8848.com | 53262x.com | 7720o.net | www.2632o.com | www.00778x.com | www.pj990.com | 23800v.com | 皇冠娱乐场.com | www.652932.com | www.1100ra8.com | www.668cp11.com | www.235892.com | www.4323b.com | www.klcp009.com | www.900566.com | 3136mm.com | ooo0022.com | 0033.cc | www.16001.com | www.sha2288.com | www.365v06.com | 预览6830y.com | 9646q.com | 8894vip2.com | www.591032.com | www.820808.com | www.06820y.com | www.888423.net | 4255ttt.com | d3405.com | 914910.com | www.186972.com | www.1368v.cc | www.6889781.com | www.c46.com | www.4107r.com | abc7570.com | js22888.com | JS777.la | www.369499.com | www.22270.com | www.361148.com | www.088tyc.com | www.8694z.com | 2267k.com | 4231.com | 4270bb.com | 3435l.com | www.33598i.com | www.983699.com | www.113744.com | www.z063801.com | www.678309.com | www.56520s.com | 56988n.vip | 7240m.com | 1bet2.com | 500000377.com | www.326477.com | www.098wy.com | www.ihg5588.com | www.4196u.com | www.1299js.com | www.7171msc.com | www.111xpj22.com | 2017.net | 44cc8331.com | 85722.com | 7003e.com | 33318m.com | 0789.com | 2338090.com | 3aobo.com | www.436106.com | www.wn0006.com | 3202j.com | 55810.com | 992222v.com | 9522dd.com | www.526411.com | www.hm5688.com | www.26163b.com | www.9646w.com | www.1449.com | www.087r.com | www.pj5958.com | www.803kj.com | www.cp08e.com | www.1348-5.com | 99567s.com | 55331gg.com | 4060vv.com | 3534n.com | k67890.com | 9rui8888.com | yuhe.ooo | nn1915.com | youfa560.com | 4461s.com | 89777g.com | eee5682.com | 2490o.com | 58539999.com | 4182j.com | 0615014.com | dh0638.com | 81366j.com | 3412233.com | dzj.tw | 6199344.com | y6660.com | vip145b.com | hg008.am | 01234uu.com | 3467v.cc | 6261v.com | 8905r.com | hg91668.com | xj001g.com | 78110066.com | www.zzzz0263.com | www.sb276.com | www.3a332.com | www.8898hg.com | www.4455444.com | www.3171110.com | www.z7793.com | www.779626.com | www.65066hh.com | www.55060a.com | www.31361.com | www.h36524.com | www.win1238.com | www.bet73c.com | www.6832t.com | www.hr3888.com | www.630675.com | www.178271.com | 6647k.com | baihu188.com | 1168c.com | 67890j.com | ahga008.com | 22003885.com | www.00618v.com | www.24075.com | www.138136.com | www.9978bb.com | www.772875.com | www.15355d.com | www.674007.com | www.033826.com | 88899.com | mgm3242b.com | 34x35.com | 0088buyu.com | www.v0060.com | www.142058.com | www.1168u.com | www.63606o.com | www.js02345.com | www.2350i.com | www.550284.com | 70118x.com | 44339193.com | b9957.com | 1407v.com | www.a80047.com | www.hjcp8.com | www.56011v.com | www.41518p.com | www.570323.com | 52599h.com | 6002b.com | 55552007.com | www.bet1600.com | www.js936.com | www.7225u.com | www.3a435.com | www.805595.com | 5647s.com | hg0266.com | 38886508.com | www.55002055.com | www.163a5.com | www.5958199.com | www.950665.com | 29918bb.com | 6002b.com | 3522c.vip | www.sun000.com | www.laocaipiao.com | www.4833044.com | www.cb3188.com | 35252s.com | ww8159.cc | 11161188.com | www.53322888.com | www.t98478.com | www.c9221.com | vn258.com | 4556y.com | bcylc55.com | www.xpj180.com | www.63606x.com | www.2373e.com | zzylc8.com | 91019p.net | c388w.com | www.76775a.com | www.n63568.com | www.840774.com | 3807uu.com | 835a.cc | www.2833555.com | www.33111155.com | www.916730.com | 50067j.com | feicai0412.com | www.77605u.com | www.38775qq.com | www.661661a.com | 01234rr.com | 8547xx.com | www.yl66u.com | www.2607777.com | www.895030.com | 3678l.com | 258702.com | www.456131.com | www.8998766.com | www.324577.com | 3657.net | www.76543i.com | www.sha2211.com | www.976381.com | bet99331.com | 02w66.vip | www.3846p.com | www.68689d.com | zz6199.com | dzhcp9.com | www.xpj395.com | www.js520988.cn | www.52072q.com | 992222e.com | www.xpj4494.com | www.06660.com | www.136503.com | 40033iii.com | www.539suncity.com | www.55676y.com | www.177524.com | 5856rr.com | www.tyc658.com | www.981095.com | 3049m.com | 2677uuu.com | www.kj639.com | www.3416v.com | 55822.com | pj677k.com | www.7415vv.com | www.c6097.com | 79964t.com | www.c6635.net | www.xpj11008.com | www.50074i.com | 6150l.com | www.28557.com | www.9149e.com | pj88488.com | www.1818618.com | www.129088.com | www.489770.com | 4541d.com | www.72tk.com | www.2350f.com | lecaih.com | www.87680y.com | www.5856865.com | 188qq999.com | www.090009.com | www.6880cc.com | www.43131w.com | 3178h.com | www.00618i.com | www.685053.com | 3421x.com | www.h4042.com | www.913075.com | 23599v.com | www.tw8888.net | www.hf1680.com | c4389.com | www.0409.com | www.652162.com | 4255aaa.com | www.cai51.vip | www.608389.com | 3685l.com | www.3846q.com | www.506731.com | 4647v.com | www.3157e.com | www.330297.com | 20160913.pw | www.4058gg.com | woaidrf.com | 5001f.com | www.e94600.com | 1168x.com | www.8694l.com | www.71399p.com | 20055500.com | www.csh365.com | www.452803.com | 2247o.com | www.653263.com | 55557893.com | www.38200u.com | www.290227.com | jr9933.com | www.js00369.com | www.c9667.com | 205500853.com | www.24xjw.com | www.866269.com | 08820088com | www.6880mm.com | y2894.com | www.00829i.com | www.24020.cc | amhg044.com | www.89677h.com | 5003025.com | www.88807m.com | www.2875f.com | hbs104.com | www.mgm868007.com | hh697.cn | www.0003yh.com | www.911059.com | bet577w.com | www.221313.com | 47749h.com | www.358vns.com | www.156506.com | www.8124v.com | www.33112t.com | j3405.com | www.377666z.com | zb6288.com | www.766411.com | www.286967.com | www.hmgj05.com | www.33997c.com | b08199.com | www.y8853.com | 12742w.com | www.888365q.com | k00351.com | www.3643t.com | www.865807.com | jc3122.com | www.66376p.com | 3242i.com | www.js89w.vip | cp088g.com | www.19019i.com | 3267.com | www.166663.com | 2381jj.com | www.6834j.com | www.332910.com | www.xpjdc.com | www.923887.com | 23233f.com | www.2875y.com | 2643b.com | www.60123x.com | qq365y.com | www.13633.com | 98955f.com | www.293853.com | 40033r.com | www.1449.com | 3640jj.com | www.55676t.com | 9068mm.com | www.55676q.com | 3421c.com | www.087j.com | 3778uu.com | www.9989587.com | 3388777.com | www.bet3651688.com | 9068j.com | www.v556677.com | 7003z.com | www.66655.com | wz11939.com | www.15.net | 33318h.com | www.50026w.com | 6220ff.com | www.2373e.com | www.033033m.com | www.858776.com | www.ven0000.com | www.593500.com | www.2061368.com | www.072211.com | www.xhf5555.com | 2613n.com | www.2945d.com | hg986.com | www.377666y.com | 4167j.com | www.48283333.com | 7989.com | www.975627.com | www.79884.com | www.52303u.com | www.12162.com | 9980.com | www.5700666.com | 8159bbb.cc | www.99788l.com | hpzx88.com | www.819770.com | www.25288o.com | 0906vip2.com | www.5049k.com | 91019l.com | www.789zr.net | j3144.com | www.915056.com | www.y1818.cc | 59859.com | www.80188h.com | 87680h.com | www.5095d.com | www.7669g.net | 33tt8332.com | www.356063.com | lll444000.com | www.6653d.com | www.033033a.com | www.256968.com | www.303365.com | 4880w.com | www.js8600 | 5651.com | www.rcw321.com | www.l4042.com | 0419g.com | www.80075y.com | www.5588hg.com | 23800y.com | www.z32939.com | 3640pp.com | www.5854i.cc | www.dy1199.com | 1591www.com | www.vns118.me | 923250.com | www.233896.com | www.d9478.com | 37111w.com | www.02022.com | www.09569e.com | 0853dh.com | www.81608h.com | www.wn2098.com | 44488a.com | www.69567r.com | 33115h.com | hg3211.com | www.a30666.vip | 998b.cc | www.621361.com | www.hjcp7.com | 51133vvv.com | www.757988.com | www.6766msc.com | 2214zz.com | www.937150.com | www.hg7659.com | 51133jj.com | www.hx1116.com | www.087hg.com | pj00ee.com | www.810917.com | www.2945f.com | 20055522.com | www.312660.com | www.848777f.com | 7779f.cc | 3936z.com | www.jsggb02.com | www.56733m.com | jdwxs.com | www.0028229.com | www.56520a.com | 53262bb.com | www.8816o.com | www.12345699.com | 15856s.com | www.403552.com | www.hg8qq.com | 55899z.com | 2820g.com | www.js27666.com | www.8694q.com | 3522q.vip | www.c144.vip | www.844218.com | 37570y.com | tt5443.com | www.ihg5533.com | www.v688.tv | bbinsupport.com | www.826556.com | www.g32939.com | 56988q.com | 87665b.com | www.66598b.com | www.2323006.com | 777659111.com | www.177348.com | www.7036c.com | www.alpk77.com | 69446666.com | www.673290.com | www.00778v.com | www.737.am | 7357.com | www.cp7777p.com | www.4996yx.com | www.hg252.com | 7508v.com | www.748767.com | www.7366001.com | www.25673d.com | 30177755.com | www.394677.com | www.42070014.com | www.88021ii.com | 3656vv.com | www.77114v.com | www.6678573.com | www.21033.com | 6766vv.com | 074f7.com | www.6364d.com | www.8967x.com | www.ylg35.com | 83377g.com | www.498266.com | www.97828o.vip | www.88993h.com | 2078d.com | 058789.com | www.hw7890.com | www.377666g.com | www.8085js.com | 3846zzz.com | 55818a.com | www.5091r.com | www.9737aa.me | www.066119.com | 4167z.com | f61653.com | www.6832v.com | www.57800g.com | www.67797w.com | 49964.com | 99567z.com | www.fcff1.com | www.z2894.com | www.70088444.com | ff555y.com | 6322.com | www.126730.com | www.97655y.com | www.kmk.com | www.4972zz.com | duch015.com | 22883.com | www.683037.com | www.6889796.com | www.111ee9.com | www.1112xj.com | 3467v.cc | 3405aaa.com | www.729133.com | www.x2788.com | www.jxcp5555.com | www.yinhe9507e.com | kbf6688.com | 2455o.com | www.502433.com | www.pjzxyl.cc | www.7334g.com | www.js9997.com | 2418p.com | 83138n.com | 89777o.com | www.660686.com | www.93777.com | www.333jyh.com | www.hg70999.com | 1624zz.com | ii4119.com | 111122.com | www.178615.com | www.2934x.com | www.852225.com | www.2945g.com | www.pj7666.com | 2306l.com | 86611h.com | hg088.cc | b2490.com | www.937160.com | www.xj112233.com | www.bwinyz48.com | www.11139l.com | www.yh05678.com | 2595t.com | 22098r.com | 66300vip38.com | 19991t.com | www.676477.com | www.26878j.com | www.495.com | www.9737bb.com | www.yiyao12.com | www.hg226.cm | xpj588.com | 85686.com | l444000.com | 00778r.com | ceeger.com | www.701545.com | www.9818l.cc | www.86008.com | www.a3410.com | www.1168f.com | www.289333.com | www.3643s.com | 7736f.com | 8290e.com | 3656rr.com | 496ss.com | 9484.com | gbhs.AM | www.106260.com | www.910882.com | www.50052w.com | www.hg873.com | www.11888js.com | www.55060k.com | www.370175.com | www.381818.com | www.xh4477.com | www.tyc8588.com | 97297k.com | bb2649.com | 496uu.com | 3775i.com | xpj5009.com | 83377g.com | w3298.com | 33382c.com | p6662019.com | xg5111.com | 38989u.com | www.150882.com | www.578960.com | www.878743.com | www.12czj.com | www.00840l.com | www.77801d.com | www.3978h.com | www.81608d.com | www.55676c.com | www.69567t.com | www.87708b.com | www.0082737.com | www.9737rr.me | www.55545r.com | www.177158.com | www.77731q.com | www.239872.com | dh742.com | 0245z.com | 0015cc.com | k2146.com | bb0666.com | 00778g.com | 31325o.com | 9694.com | 364870.com | y6660.com | swtyfff.com | 4255jjj.com | 36402211.com | 86811ww.com | ee7742.com | 88am.cc | 88807k.com | 5446dd.com | www.veb188.com | www.pjchongqing.com | www.63877c.com | www.67797z.com | www.25288s.com | www.888vip7.com | www.hg005.com | www.58atv.com | www.n4042.com | www.f3065.com | www.53097777.com | www.2021r.com | www.802sun.com | www.11mgm777.com | www.81520s.com | www.3933i.cc | www.976500.com | www.530861.com | www.89894i.com | 55899h.com | k8381.com | 5443w.com | 3967k.com | bet36500600.com | xg6111.com | www.38200m.com | www.09569q.com | www.xpj661199.com | www.a98886.com | www.255817.com | www.q2894.com | www.714445.com | www.36788m.com | www.flcb1.com | www.376369.com | 8203ccc.com | 1294z.com | 3983004.com | 82365b.com | 635230.com | www.10061006.com | www.1770500.com | www.939168.com | www.55070i.com | www.4j5.com | www.50052t.com | www.844141.com | www.51515u.com | 4323i.com | 453.com | t72227.com | vns0044.com | www.81866v.com | www.88807m.com | www.am4567.com | www.4828228.com | www.3844a.com | www.566652.com | www.j3123.com | www.03035.com | www.ct6676.com | www.068639.com | 36405522.com | 4107m.com | 2418y.com | www.vylc6.com | www.55526v.com | www.40288o.com | www.54400q.com | www.641638.com | 5004nn.com | 80567g.com | 55899i.com | www.3643a.com | www.56655d.com | www.blr5544.com | www.2875e.com | www.035989.com | 44qq8332.com | 3668yh.com | www.7754j.com | www.hg3882.com | www.178633.com | www.8499g.com | www.178670.com | 0363a.com | 24670044.com | www.848xpj.com | www.85966.com | www.742488.com | www.8424.com | 8827sss.com | 5504q.com | hg0000.com | www.32925.com | www.673888w.com | www.86267p.com | www.332807.com | 943a9.com | k353.com | www.0860f.com | www.8883hj.com | www.81678j.com | www.208990.com | hr1811.com | zhcptt.com | www.vns8489.com | www.00772o.com | www.0270p.com | www.395477.com | 1434i.com | yth15.net | www.2078d.com | www.wns123a.com | www.hy5501.com | 2222k15.com | 22883j.com | www.h7788l.com | www.8473f.com | www.87096.com | youfa99.vip | 2214c.com | www.pjbet333.com | www.b3065.com | www.50052f.com | 8547w.com | 3513002.com | www.98599.com | www.8313w.com | www.84499.cc | 44119193.com | wns3.net | www.89hghg.com | www.7920z.com | www.585065.com | l3405.com | www.1869j.com | www.tc8804.com | www.23579c.com | 500000816.com | youfa55.vip | www.729666.com | www.jsc044.com | www.235387.com | 22933s.com | www.c6635.net | www.70976.cc | www.810526.com | 4441779.com | www.86611s.com | www.e3065.com | www.65yb.com | 6667009.com | 909263.com | www.hf9019.com | www.08588r.com | 18438444.com | 365225d.com | www.7779856.com | www.5095m.com | 67877q.com | ybcai.com | www.2018fh.com | www.fh1188.com | 58222s.com | 5437t.com | www.19019z.com | www.cai345.cc | 9694c.com | www.6807788.com | www.63606f.com | www.345512.com | 3435y.com | www.308878.com | www.0601a.com | 588sss.cc | zhcp30.com | www.79500q.com | www.czg7.com | yh888k.com | www.56520x.com | www.hg8.vip | 11qq8331.com | 9995x.cc | www.808888d.com | www.960777a.com | 1331aa.com | www.77449.com | www.87480.com | 5369p.com | 2846e.com | www.38138j.com | www.395477.com | 3416b.com | www.548666.com | www.3tdc.com | 4007893.com | www.vns76999.com | www.80065w.com | feicai0931.com | www.76060m.com | www.087m.com | 2544b1.com | 6641kk.com | www.1754t.com | www.50026u.com | 4997d.com | www.4058a.com | www.501349.com | www.89894r.com | hgw168n.com | www.88807h.com | www.js18600.com | 7335x.com | www.3236544.com | www.6678573.com | 61789u.com | www.wnsr848.com | www.ihg5522.com | 3356.com | www.995o.net | www.hg09d.com | js07.app | www.js5666.com | www.29277g.com | 6002t.com | www.6410a.com | www.qml3.com | o40033.com | www.1389hh.com | www.591799.com | evere168.cn | www.bwinyz22.com | 827720.com | 5478p.com | www.x66789.com | 80850ee.com | www.58777u.com | www.9818w.cc | 00773aa.com | www.9611h.com | www.513550.com | 7779d.cc | www.0600o.cc | ly8004.com | www.88837k.com | www.8839d.com | 4488cc.com | www.sj52088.com | www.097079.com | 78110066.com | www.538445.com | 81005.com | www.679suncity.com | www.927576.com | 8449qq.com | www.2000c.cc | 4052ii.com | www.0860y.com | www.022yn.cc | 1483zz.com | www.89677i.com | 47749q.com | www.7111r.com | www.fhfh8.com | 492uu.com | www.sss2848.com | 5005w.com | www.6uu6uu.com | www.587810.com | 588rrr.cc | www.141615.com | shen5588.com | www.249559.com | hck222.com | www.00829g.com | www.29czj.com | 00774zz.com | www.5886oo.com | 1775ww.com | www.178222a.com | www.89894d.com | www.8124s.com | www.5091v.com | 00uu8331.com | www.r999992.com | 3552o.com | www.999c31.com | 0234q.com | hhhhh222.com | www.870884.com | 8569811e.com | www.vns6607.com | 1125.com | www.80879.com | www.52072m.com | www.4625j.com | www.918681.com | 30006u.com | www.71233h.com | lq0578.net | www.1764w.com | 0332y.com | www.4078r.com | 7249o.com | www.133004.com | 30006dz.com | www.41230599.com | www.433112.com | www.617705.com | www.okw8.com | 0600o.cc | www.87668.cc | 228888z.com | www.bet73h.com | 983888p.com | www.y07a.com | www40033.com | www.33678rr.com | kbj7268.com | www.26123aa.com | 1216.com | www.gg55826.com | 56987mm.com | www.614548.com | 112y.net | www.163a3.com | 01234j.com | www.356063.com | j2976.com | www.71071g.com | 37amjs.com |