你是如何自學 Python 的?
中國大學極少開設 Python 課程,故而國內 Python 程序員多屬自學,那麼你在自學 Python 的過程中有哪些值得分享的經驗或者有趣的體驗呢?
才發現,本回答收藏數是點贊數的3倍多……你們為何不順手再點個贊(╯‵□′)╯︵┻━┻ 光收藏不動手是學不好編程滴!!!
[更新 2016-01-26] 整理了零基礎python入門教程系列,並提供在線寫代碼的功能:
Crossin的編程教室 - 編程世界的新手村
歡迎來玩。
---------------------------------------
其實python非常適合初學者入門。相比較其他不少主流編程語言,有更好的可讀性,因此上手相對容易。自帶的各種模塊加上豐富的第三方模塊,免去了很多「重複造輪子」的工作,可以更快地寫出東西。配置開發環境也不是很複雜,mac和linux都內置了python。另外據我所知,不少學校也開始使用python來教授程序設計課程(比如本人的母校)。
我就是完全通過網上資源自學python的。
從在校時候用python接活賺零花錢,到在創業公司用python開發商業網站和遊戲後台。所有遇到的問題,幾乎都可以從互聯網上的公開資源找到答案。
關於自學python,個人最大的3點經驗:
- 找一本淺顯易懂,常式比較好的教程,從頭到尾看下去。不要看很多本,專註於一本。把裡面的常式都手打一遍,搞懂為什麼。我當時看的是《簡明python教程》,不過這本書不是非常適合零基礎初學者。
- 去找一個實際項目練手。我當時是因為要做一個網站,不得已要學python。這種條件下的效果比你平時學一門新語言要好很多。所以最好是要有真實的項目做。可以找幾個同學一起做個網站之類。注意,真實項目不一定非要是商業項目,你寫一個只是自己會用的博客網站也是真實項目,關鍵是要核心功能完整。
- 最好能找到一個已經會python的人。問他一點學習規劃的建議(上知乎也是個途徑),然後在遇到卡殼的地方找他指點。這樣會事半功倍。但是,要學會搜索,學會如何更好地提問。沒人願意幫你寫作業或是回答「一搜便知」的問題。
然而,別人的經驗未必能完全複製。比如我沒有說的是,在自學python之前,我已在學校系統學習過其他的編程語言。
對於完全沒有編程經驗的初學者,在學習python的時候,面對的不僅僅是python這門語言,還需要面臨「編程」的一些普遍問題,比如:
- 從零開始,不知道從何入手,找了本編程教材發現第二章開始就看不懂了
- 缺少計算機基礎知識,被一些教程略過的「常識性」問題卡住
- 遇到問題不知道怎麼尋找解決方案
- 看懂語法之後不知道拿來做什麼,學完一陣子就又忘了
- 缺少數據結構、設計模式等編程基礎知識,只能寫出小的程序片段
所以除了前面說的3點經驗,給初學編程者的額外建議:
- 首先要有信心。雖然可能你看了幾個小時也沒在屏幕上打出一個三角形,或者壓根兒就沒能把程序運行起來。但相信我,幾乎所有程序員一開始都是這麼折騰過來的。
- 選擇合適的教程。有些書很經典,但未必適合你,可能你寫了上萬行代碼之後再看它會比較好。
- 寫代碼,然後寫更多的代碼。光看教程,編不出程序。從書上的常式開始寫,再寫小程序片段,然後寫完整的項目。
- 除了學習編程語言,也兼顧補一點計算機基礎,和英語。
- 不但要學寫代碼,還要學會看代碼,更要會調試代碼。讀懂你自己程序的報錯信息。再去找些github上的程序,讀懂別人的代碼。
- 學會查官方文檔,用好搜索引擎和開發者社區。
推薦幾個網上的資源:
- 簡明Python教程
- 與孩子一起學編程
- Head First Python 中文版
- 笨辦法學Python
- Dive.Into.Python中文版(附課程源碼)
- Python核心編程
- 深入理解Python
- Python標準庫
- Python編程指南
- django_book中文版
(解壓密碼均為:http://crossin.me)
在線教程:
- 簡明 Python 教程
- Dive Into Python 中文版
以下喂自己袋鹽:
現在有很多人都想學一點編程,但是直接看教程又有點太難下手。
之前有幾個朋友都問我能不能指導他們一下入門學個語言,於是我就弄了個微信公眾號「Crossin的編程教室」(微信號crossincode,有個同名的山寨號,不要加錯了)。每天講一點點很簡單的內容。如果有0基礎想入門的新手,不如來跟著看看,歡迎加入我們共同學習的隊伍。
----------------
20160126更新
基礎內容早已講得差不多了,現在整理成了系列教程,可在公眾號里閱讀。定期推送一些專題,比如查天氣預報、搭建網站、數據採集之類的小項目,還有編程相關的知識和經驗文章。也可以直接訪問: Crossin的編程教室 - 編程世界的新手村
----------------
20160419更新
開通了知乎專欄:
Crossin的編程教室
主要發一些編程入門和科普向的文章:
- 編程初學者如何使用搜索引擎
- 如何安裝 Python 的第三方模塊
- 如何直觀地理解程序的運行過程?
- 給伸手黨的福利:Python 新手入門引導
內容不斷更新中...
QQ加群:657099683
微信加群:crossin123
http://weixin.qq.com/r/wXWGnqzEDfFyrej99yDT (二維碼自動識別)
.
學Python,看的第一篇文章來自42區,推薦大家看看網站開發 . 漫遊指南。
多關注下牛人,多實踐。
更新2013-12-17
前段時間整理了一篇博客,搜集了學習Python入門、資料庫和Web開發的一些資料,原文見 http://dylanninin.com/blog/2013/11/23/python_resource.html,這裡摘抄一下。
入門和基礎
Python有Python 2.x 和Python 3.x 之分,爭論很多,見Python2orPython3。初學者不用考慮這個問題,可以從Python 2.x入門,之後再討論會多一些理性。
洪強寧:Python於Web 2.0網站的應用:豆瓣網洪強寧在QCon北京2010中的技術分享,若不能訪問,請自備梯子;另外,豆瓣的阿北很值得關注。
A Byte of Python:即簡明Python教程,邊看邊練習就對Python有基本的了解,可以輕鬆存活。
Google"s Python Lessons:Google出品的Python教程,值得信賴。
Python Documentation:Python在線文檔,若嫌枯燥,可以直接看Python Standard Lib。
42區:python入門指引:江湖人稱張教主的Python入門指引,除開《Python核心編程》。嚴格來說,這是張教主的一份Python資料索引。
CS61A: SICP with Python:作為計算機相關人士,SICP都不了解,實在很慚愧,所以來還債了。這應該是起源於MIT的SICP教程,一個用Python,一個用Scheme。
看到一個有趣的python的招聘測試:同學發的一個貼,總結了一下應聘中遇到的問題,並給出了相應的資料來學習。如果想檢測下自己的Python水平,請自覺移步北京視訊天下的開發測試。
MOOC們:在線公開課很多,見課程圖譜;僅在Codecademy上學了一點;現在希望能夠每天跟進一些感興趣的課程,多多學習。
書:去年6月份一同事離職,我買了兩本黑客與畫家,一本送給他(博客一起去看海),另一本給部門老大;他回送了一本Python源代碼剖析,看書名就知道是講底層原理的,有機會啃啃。
源代碼:直接到Github上去找吧。
Python與資料庫
在項目開發中,資料庫應用必不可少。這裡匯總下目前接觸過的資料庫和使用教程。
SQL,計算機出身的人應該都學過,若有疑問可以參考Wikipedia SQL,並使用SQLite做下練習。
PEP249: DB API:資料庫訪問介面規範,當時還做了一份筆記。
SQLite:教程見SQLite Python Tutorial;若要深入了解,推薦The Definitive Guide to SQLite;看此書時,做了一些好句子、段落的摘要,見Sentences in SQLite 3。
MySQL:教程見Python MySQL Database Access。
Oracle Database:有可能這是最龐大的資料庫,所以需要專職的DBA。官方教程The Mastering Oracle+Python Series,快速入門教程cx_Oracle Quick Start。
SQLAlchemy:Python的ORM標準和框架,解決面向對象編程和關係資料庫模式不匹配的問題。
資料庫理論除了SQL,還有另一派NoSQL。
關於常見NoSQL產品的比較見Main NoSQL Database Comparison;若果需要一些NoSQL的理論知識和基本概念,見The NoSQL Ecosystem、Big Data與NoSQL。目前僅用過MongoDB和Redis。
MongoDB:如果熟悉SQL,MongDB的學習成本會很低;相關資料見Python Language Center in MongoDB;用過的兩個驅動:1)PyMongo,提供了類似Mongo Shell的介面;2)MongoEngine: A Python Object-Document-Mapper for working with MongoDB,即MongoDB的"ORM"框架,此時變成了"ODM",MongoEngine on Github。
Redis:Redis需要一些學習成本,入門推薦The Little Redis Book;用過的Python客戶端驅動Redis-py;更多客戶端見Redis Clients。
NoSQL建模:SQL發展了幾十年,有很成熟的建模技術,那麼NoSQL呢,見陳皓:NoSQL數據建模技術,原文NoSQL Data Modeling Techniques。
更多資料:NoSQL英文站點見NoSQL Database;NoSQL中文論壇見NoSQL Fan:關注NoSQl相關的新聞和技術。NoSQL Fan中,MongoDB和Redis資料很多,已經形成了資料專題,包括介紹、內部實現、應用與優化、新聞等,總能發現你想要的東西:1)NoSQL Fan:Redis資料匯總專題;2)NoSQL Fan: MongoDB資料匯總專題。
Python與Web開發
Python的Web框架眾多,見Web Frameworks for Python,總有一款適合你或你的項目,實在不行,請動手打造自己的框架;為什麼會有這麼多框架呢,見Why so many Python wen frameworks?。
Web.py:已故Aaron Swartz的框架。一句話介紹"web.py is a web framework for Python that is as simple as it is powerful. web.py is in the public domain; you can use it for whatever purpose with absolutely no restrictions."。接觸的第一個Web框架,後來模仿MovableType,寫了一個簡單的博客,見Blog on Github,在線demo Pastime Paradise;碰到的坑點是模板中嵌套Python代碼一直有縮進問題。
Flask:一句話介紹"Flask is a lightweight web application framework written in Python and based on the Werkzeug WSGI toolkit and Jinja2 template engine. It is BSD licensed. Flask is called a microframework because it keeps the core simple but extensible"。因為工作變動,練習過一段時間的Flask,以便熟悉開發的工具鏈;如果沒有Rails,我想這才是自己首選的Web開發框架: simple but extensible and for fun。實戰教程The Flask Mega-Tutorial。
Tornado:來自FriendFeed的非同步框架,FriendFeed被Facebook收購後開放了源代碼,見Tornado on Github。一句話介紹"Tornado is a Python web framework and asynchronous networking library, originally developed at FriendFeed"。Tornado主要特點是non-blocking,如果你想開發real-time的Web應用,Tornado是一個不錯的選擇。
Django:一句話介紹"Django is a high-level Python Web framework that encourages rapid development and clean, pragmatic design.",接觸不多,作為全棧式框架,聽說它的組件都是Made in Django。更多資料見Django資料。
IDE
- Vim + Python Mode。目前就用這個方案,很方便,直接引用同學的效果圖。關於Vim資料和討論,請移步Vim資料大全;關於Vim更多插件和演示,請移步k-vim on Github;關於Git,Github,請移步本站Free Blog with Github Pages。
社區
- 啄木鳥社區
- 42區:網站開發.漫遊指南
- Python on V2EX
- Python4cn
- 豆瓣Python小組
- 哲思社區
周刊
- Python Weekly:每周更新,包括Python相關的文章、教程、演講、書籍、項目、工作等。
- Pycoder"s Weekly:與Python Weekly類似,兩者可以互為補充,了解過去一周動態。
- 碼農周刊: developerWorks出品的周刊,來自國人的分享。可以先看為什麼要做《碼農周刊》?;接著《碼農周刊》用到的一些技術; 再接著周刊回顧。這裡不僅僅是Python。
更新 2016-03-06
Python 3
前面提到,『Python有Python 2.x 和Python 3.x 之分,爭論很多,見Python2orPython3。初學者不用考慮這個問題,可以從Python 2.x入門,之後再討論會多一些理性。』目前來看,已然不妥:對於新手,推薦直接學習 Python 3.x;對於還停留在 Python 2.x 的,則應儘快擁抱變化,與時俱進。
對於項目的開發維護來說,在新舊版本中來回穿梭/切換是一件痛苦的事兒,也會增加很多不必要的負擔,因此儘快推進將手頭的項目升級到 Python 3.x(當前最新版本為 3.5)。但升級絕不是拍拍腦袋就能決定的,具體參考 Porting Python 2 Code to Python 3。在 2015 年年底,便將一個開發維護近半年的 Web 項目順利從 2.7 升級到 3.5,這與單元測試覆蓋足夠、第三方依賴庫都支持 Python 3、團隊成員願意持續學習是分不開的。
- Key Differences between 2.7.x and 3.x
- Writing Python 2-3 compatible code
- Porting Python 2 Code to Python 3
- Python 3.5: What』s new
- Python 3 Glossory
- Python 3 Cookbook on Github
這是我在過去幾家公司招聘到工程師,Python入職培訓的過程。
時間分為4周,全部自學,僅提供大綱。適用於Web方向:
1、Week1:讀完《簡明Python教程》,適應Python開發環境
2、Week2:寫個爬蟲,需要深入了解re、urllib2、sqlite3、threading,Queue等幾個模塊。需要用上多線程抓取,正則表達式分析,並發資源控制,重新開啟程序自動繼續抓取和分析
3、Week3:學習一種Web開發框架,推薦Flask、webpy之類的,學個資料庫介面如sqlite3,寫個簡單的web應用如博客
4、Week4:給產品做個小功能並走完測試和上線流程,各個時期是不同的
我在之前的幾家公司招聘工程師時,學過Python的其實較少。更常見的情況是人聰明,招來再學Python。就是按照如上流程。這個流程安排的挺輕鬆的,我找到的所有人都成功完成了這個流程。並且之後工作也很順利。小白的Python入門教程:Python教程 - 廖雪峰的官方網站
從入門到精通,實戰項目還帶iOS App
附贈在線Python代碼解釋器,邊學邊在瀏覽器中敲代碼
給希望從事計算機視覺或者機器學習的初學者一些建議,也是我多年使用python的一點心得。
0. 安裝anaconda python,然後使用ipython(現在也叫jupyter了),anaconda是一個打包了很多庫的發行版,很方便。一個順手的發行版可以讓學習快樂很多。ipython自帶的自動補全、文檔查詢、調試等功能比默認的python解釋器人性化很多。anaconda還自帶spyder ide,讓喜歡ide的同學也能迅速上手。
1. 閱讀官方教程,即 http://python.org 裡面的tutorials。此教程簡潔準確,沒有廢話。一天之內就能讓你抓住這個語言最核心與最常用的東西。這個教程是英文的,但用的英語不難,看教程的同時可以練習英語。目前情況下,計算機方面很多好資料都是英文的,所以學好英語很有幫助。
2. 在目前的deep learning浪潮下挑選一個框架,我個人建議pytorch. 它的優勢在於所有代碼的寫法就像寫普通python代碼一樣,包括自定義layer. 舉個例子,當你定義一個新的運算元的時候,你可以直接用for寫循環語句,並且它的自動微分可以處理,而tensorflow不支持這種寫法,所以我認為pytorch更優雅一點
3. 把所有的example跑一遍,修改一些你想要實驗的,然後你就入門了
我是自學的Python。從對Python一無所知,到在博客上寫Python相關的系列文章(Python快速教程),前後有將近三年的時間。期間有不少門檻,但也充滿樂趣。樂趣是自學的最大動力。Python是一個容易編寫,又功能強大的動態語言。使用Python,可以在短短几行內實現相當強大的功能。通過自己寫一些小程序,迅速的看到效果,發現問題,這是學習Python最便利的地方。
在學習Python之前,可以了解一下Python的特點和設計理念(Python簡史)。在設計之初,Python就試圖在複雜、強大的C和方便、功能有限的bash之間,找到一個平衡點。Python的語法比較簡單,用起來很方便,因此有些人把它當作腳本語言使用。但Python要比普通的腳本語言功能強大很多。通過良好的可拓展性,Python的功能相當全面,應用面很廣:web伺服器,網路爬蟲,科學運算,機器學習,遊戲開發…… 當然,天下沒有免費的午餐,也沒有完美的語言,Python為了達到上述兩點,有意的犧牲了Python的運行速度。如果你是在編寫高業務量、運算量的程序,可能Python並不是最好的選擇。
-----
Python的主體內容大致可以分為以下幾個部分:- 面向過程。包括基本的表達式,if語句,循環,函數等。如果你有任何一個語言的基礎,特別是C語言的基礎,這一部分就是分分鐘了解下Python規定的事。如果你沒有語言基礎,建議從Python Programming為參考書。這本書是計算機導論性質的教材,不需要編程基礎。
- 面向對象,包括面向對象的基本概念,類,方法,屬性,繼承等。Python是面向對象的語言,「一切皆對象」。面向對象是很難迴避的。Python的面向對象機制是相對比較鬆散的,不像Java和C++那麼嚴格。好處是容易學,容易維護,壞處是容易犯錯。
- 應用功能,包括IO,數據容器如表和詞典,內置函數,模塊,格式化字元串等。這些在其它語言中也經常出現,有比較強的實用性。
- 高級語法,上下文管理器,列表推導,函數式編程,裝飾器,特殊方法等。這些語法並不是必須的,你可以用前面比較基礎的語法實現。學這些高級語法的主要原因是:它們太方便了。比如列表推導一行可以做到的事情,用循環結構要好幾行才行。
學習Python主體最好的參考書是Learning Python,它非常全面,滿滿的都是乾貨。雖然很厚,讀起來並不難讀。另一個是參考官網的教程Python.org
-----
Python號稱「Battery Included",也就是說,功能都已經包含在了語言中。這一自信,主要來自Python功能全面的標準庫。標準庫提供了許多功能模塊,每個模塊是某一方面功能的介面,比如文件管理,操作系統互動,字元處理,網路介面,編碼加密等等。
The Python Standard Library中,你可以看到標準庫模塊的列表。這裡也是標準庫最好的學習資料。如果想找書,我只看到過兩本關於標準庫的:
Python Essential Reference
The Python Standard Library by Example
說實話,這兩本都不算很好的標準庫教材,而標準庫的參考書也確實很難寫。因為標準庫只是調用功能的介面,最終實現的是Python和系統的互動。這需要很強的系統知識,比如文件系統知識,進程管理,http原理,socket編程,資料庫原理…… 如果這些知識都已經準備充分,那麼標準庫學起來完全沒有難度。然而,這些背景知識的學習並非一朝一夕的事情。
更深入的Python學習也是如此,需要大量的背景知識,而不是Python自身。如果你對Python的編譯和運行機制感興趣,你可以往Python底層這一深度挖。如果你對應用感興趣,你可以多學習幾個自己用的上的第三方包。學到這個時候,就是要自己探索的廣闊空間了。
-----
基本上,學過主體內容之後,Python還是要靠做項目來練習。有不少小練習題類型的資料,比如Python Cookbook。但更好的方式是自己去想一些應用場景,用Python來解決。Python功能全面,所以不要擔心自己想的問題Python解決不了 (基本上Python解決不了的問題,別的語言也沒戲)。比如我學習多線程的動力,就因為要並行的下載大量的文件。基本上一個項目下來,會用到Python好幾塊的內容,知識會特別鞏固。
最後,和其它任何知識的學習一樣,筆記和總結很重要。在看參考書和看網頁時,可以做一些筆記。等到學了一段時間後,可以把筆記整理成更有條理的參考卡片(reference card),或者寫博客。這也是我寫「Python快速教程」的主要原因。另外這個教程內容的順序,也是我認為的比較合理的學習順序,僅供參考。首先python是一門簡單的語言,不需要編程基礎也能很容易學會;我講下個人認為對於一個沒有任何基礎的人,應該如何學習python這門語言。
學習python的過程分為四個階段:了解python、找個例子練手、做項目、能力提升。
了解python
第一步肯定是先了解下什麼是python,它能做什麼;這個建議找個python入門的書籍看看:
- 《從零開始學 Python》(第二版)
- Python 之旅
推薦的這兩本入門書籍任選一本看就可以了,入門書籍的內容也不需要全部都看,只要了解python一些基礎知識:
- 數據類型:整型、字元串、列表、字典、元組
- 基礎語句:運算符、if語句、for語句、文件操作
- 函數
- 類
找個例子練手
對python有了一定的了解後,就可以去網上找幾個例子代碼,照著寫練練手,我推薦你可以從學習爬蟲開始練手,相比其他語言來說python寫爬蟲是最方便的,可以找些爬蟲的書看看,然後到github上找幾個例子照著學。
- 爬蟲書籍:Python 爬蟲學習系列教程
- github爬蟲:github搜索python爬蟲
在這個階段你肯定會遇到非常多問題,這是好事啊,說明你在慢慢的進步;遇到問題你可以通過搜索或者去python社區提問,關於python社區我這裡推薦一個:python開發者日常
做項目
這個時候你對python應該有一定的基礎了,可以試著做些項目,大部分人會選擇做個網站,python做網站常用的框架有三種:tornado、flask、django;對於初學者,我建議在flask和django之間選擇:
- Django 中文文檔 1.8
- Django 搭建簡易博客教程
- Flask 用戶指南
關於flask、django的項目例子,github上面一堆,可以自己去找吧。
能力提升
python是一門簡單的語言,加上擁有大量功能豐富的庫,容易讓人感覺自己什麼都會了,但其實他只是會調用庫而已;說到能力提升,這個階段我相信每個人的看法不一樣,我就說下我的看法:
- 看源碼
- 社區交流
- 看源碼
關於看源碼,需要有目的地去看,比如說現在你想了解python網路並發 ,那你可以去看tornado代碼裡面是怎麼實現高並發的;你想學習架構知識,那你可以去研究django的架構哲學,開源社區有很多優秀的項目,它們中的核心代碼是設計者的智慧結晶,學習過來對我們極有益處,不斷臨摹最終形成自己的風格,你的技術能力將得到極大提升。
2. 社區交流
程序學的再好也只是工具,決定價值的還不是最終實現出來的產品,這就要多混社區;技術社區對一個人的影響是多方面的,走出去看看其他人都在做什麼,擴展自己的知識面;將業餘做的產品和大家分享,互相交流;相信我,這個過程對你的影響絕對不僅限於技術能力,甚至對你將來如果創業會有很大幫助。
國內的技術社區並沒有國外那麼多,我推薦幾個:
- V2EX ? Python
- python開發者日常
最後
在這個快餐文化盛行的年代,很難找到一個集中高質量內容的地方,面對網路內容碎片化,我們要獲得知識時,經常是通過搜索最終在各種不同地方才找到想要的內容;所以我做了一個產品:北半球知識社區 算是這個快餐文化下的一股清流,有任何python問題可以在這裡交流:python開發者日常
階段一:前輩領進門。
第一眼是一個前輩給我看了看Python的代碼,因為自己最早學習的是Java語言,第一眼看到Python的時候,前輩說,「Python是面向對象的」,然後就 列印了幾句代碼。可我怎麼也看不出到底哪裡是「面向對象」的。前輩說「在Python里,一切皆對象」,我才有點領悟的說道:「原來把什麼看成對象,就是面向對象」,哈哈。
階段二:開始看的是《Dive into Python》、《Leaning python》、《Python Doc》。
因為有很多語言學習經歷,很快就完成了初步語法和使用學習。太複雜的特性還是在使用中逐步掌握的。
階段三:開始使用Python做自己的一些日常工作。
比如Python搜索文件,Python批量處理等,使用最多的還是re模塊和socket相關模塊。寫了大量的例子,讓自己對Python更加喜愛,也更加熟悉。此時翻閱最多的是《Python Doc》的指南。不管是語言參考、庫參考、Demo參考,都有大量可使用的內容,內容質量很高堪比JDK。
階段四:生產上馬。
開始使用Django,Flask,Tornado開發一些web應用,寫一些日常使用的工具包等。逐步提升設計能力,和整體代碼的管理能力。
階段五:更合理的分配好C,Java,Python三門語言各自擅長的部分。
把合適的語言用到合適的地方。儘管一門語言有時候可以搞定所有的,但用擅長的語言解決合適的問題才是效率最高的。這也是「Python的大道至簡」的理念帶給我的幫助和認識。
1、看書。學習的基礎。
2、自己本地練習。編程還是要實踐出真知。
3、資料查詢。google,stackoverflow等多關注。
4、交流。各種論壇上的python group,論壇。最早去的CU,JavaEye,不過現在貌似去的少了。google group 必須訂閱。
學習+實踐+總結,掌握語言的法寶。
在眾多高大上的自學指導中,嘗試做一股清流,把要講清楚的都講清楚,除了一堆資料之外,你能在學之前就有一個非常明顯的結果傾向。
如果你對職業或者規劃還有疑問,請你查看下:https://www.zhihu.com/question/20039623/answer/201115937
本文以《小白帶你學Python》為內容方向,試圖在繁雜的信息里,給你找到你學習Python的動力和路徑,本文更新於2017年7月21日17:30;
========================正文分割線==========================
在前文中我們提到:
Python崗位有哪些呢?主要的崗位有這些:
Python全棧開發工程師(10k-20K)
Python運維開發工程師(15k-20K)
Python高級開發工程師(15k-30K)
Python大數據工程師(15K-30K)
Python機器學習工程師(15k-30K)
Python架構師(20k-40k)
目前應用最多的:全棧開發、數據分析、運維開發,今天我們就以這三個重點的崗位來做一下自學Python的規劃,希望你在學之前就能有結果的來走得更遠。
在這裡我們建議大家用知識投資的《道、法、器、術、勢》五個工具來完美的執行和落地自學Python,好了,廢話不多書,我們來開始:
————————
第一:道——明確目標
其實很多人在學習Python之前很少想這個,因為很多人說:現在Python很火呀,所以我么需要學。這個其實跟你自己沒有什麼關係,例如:你曾經想做一個網站不會開發,現在可以做了,現在Python很火併且你也要學來找工作,未來Python很火,我具備了Python的技能會不錯。
在一生中,我們或多或少總會卡到目標上。在一些我們擅長的領域,我們會有明確的目標,並且積極指導別人:親!幹事之前,你要先定目標啊!
王健林的小目標,大家在朋友圈也都看過了,他會定先掙它一個億。
第二:法——做好你學習Python的系統規劃
1.目前市場需求主流的崗位里,你得選擇一個其中你目前看來可以學,並且最敢興趣學習的方向;
2.在方向選擇好後,對照招聘網站:拉勾、智聯、Boss直聘等網站的崗位要求,進行學習內容的統計與大概的記錄;
3.分模塊的計劃你學習這個模塊的時間和完成的大概目標;
4.列出你可能出現的學習誤差與為之準備的應對方案;
好了,你發現沒有,其實任何學習重要的不是有什麼資料,核心是如何學,學多久,有沒有時間限制,遇到過自己多次學習某個內容或者其他人學習某個內容,最關鍵的一點是在起步階段,開始屬於激情期,激情在前面釋放越多,後面的持續力就很弱,好了這就是關於學習計劃。
廢話說多了,那我們來看看一個普適性的學習Python的流程;
1天——下載並安裝好學習環境:到www.python.org網站上下載一個python3.0以上的版本。我建議初學者,不要下載具有IDE功能的集成開發環境,比如Eclipse插件等。
4周——下載一些python的學習文檔,比如《簡明Python教程》,《笨辦法學Python》等等。通過學習語法,掌握python中的關鍵字語法,函數語法,數學表達式、變數、數據結構、語法等等等
1. 了解Python是什麼,都能做些什麼?
2. 知道什麼是變數、演算法、解釋器
3. Python基本數據類型
4. 列表和元組的操作方法
5. 字元串操作方法
6. 基本的字典操作方法
7.任何知識它的基礎知識都是有些枯燥的,現在我們就可以動手來做一些邏輯層面的東西了。掌握 if、else、elif、while、for、continue、break和列表推導式等這些語句的使用,還有程序中的異常處理。
2周——看完基礎後,就是做一些小項目鞏固基礎,python具備很好的交互學習模式,對於書本上的例子我們可以通過交互平台進行操練,通過練習加深印象,達到學習掌握的目的。
2周——通過以上三個步驟的學習後,我們大致掌握了python的常用方法、關鍵字用法以及函數語法等。接下去的學習上,我們就可以著手學習常用模塊的使用, 比如os,os.path,sys,string模塊等。我們可以在交互環境中先熟悉使用其中的函數,如果遇到函數的使用上的問題,可以參考python 安裝後的自帶chm幫助文件。
2周——為了更好得掌握python,我們的學習不能只是停留在學習一些語法或者api階段。在此階段中,我們可以嘗試用python解決我們項目中遇到的一 些問題,如果項目不是用python開發的,那我們可以想想能不能用python製作一些項目組可以使用的一些工具(utility),通過這些工具簡化 項目組成員的任務,提高我們的工作效率。如果沒有項目,我們也可以自己找些題目來自己練習練習。
2周——Python庫是Python的精華所在,可以說Python庫組成並且造就了Python,Python庫是Python開發者的利器,所以學習Python庫就顯得尤為重要:
2周——經過以上鍛煉後,我們的python知識水平肯定是越來越高。接下去的學習,我們就要更上一層樓。為了學以致用,真正能應用於項目開發或產品開發,我 們還必須學習企業應用開發中必須要掌握的網路和資料庫的知識。在此的學習就不光是python語言本身的學習了,如果之前沒有學習和掌握很網路和資料庫知 識,在此階段我們可以藉此機會補習一把。
3周——到此階段,我們已經是真正入門了。在接下去的工作中,就是要快速地通過我們的所學來服務項目了。在此階段,我們除了掌握python自帶的模塊外,我 們最好在掌握一些業界廣泛使用的開源框架,比如twisted、peak、django、xml等。通過熟練使用它們,達到閃電開發,大大節省項目寶貴時間。
《Python 核心編程》,介紹了 Python 的一些具體領域的開發方法;
《Python 網路數據採集》,很簡單的爬蟲入門書;
《利用 Python 進行數據分析》,介紹了 Pandas 和 NumPy 的用法;
《Flask Web 開發》,如何用 Flask 寫一個博客。
第三:術——你具體的學習手段
1.每天你計劃學習多少時間?例如一天必須學2小時,每天堅持;
2.每個階段的計劃拖延時間不能高於多少時間?
3.如果一個階段不順利如何調整?
其實很多時候,並不是資料不夠多,而是本身的學習思路和計划出現了問題,那麼其實最後學習Python的結果會變成:懂得了很多道理,收集了很多資料,依然學不好Python。
第四:器——學習的工具和素材
在知乎的所有學習的評中,出來最多的就是書、視頻、網站一大堆,很多人覺得非常的贊,確實如此,但是回頭看,你的網盤裡躺著的500G視頻,還是沒有讓你學會Python,我給大家的建議是:少為多,學為多,做為多,完成為多,而不要做伸手黨。
在主流的學習中,按照學習素材來分,我們分為這幾大類:
——真人:有人給你準備好素材,過程計劃,內容,讓後你只要用心學就行,這個就是大家常說的培訓,屬於懶人成長式。(線下培訓班)
PS:不做任何推薦
——視頻:有人把學習的過程錄製好,你只要按照要求跟著做就行,出現問題你無法及時找到。(真人視頻、代碼視頻)
Python入門_Python入門教程_python入門視頻教程-慕課網
http://blog.fishc.com/category/python
https://ke.qq.com/course/134017#tuin=cd72585
——書本:有人把學習過程幫你寫出來,你只需要跟著書本的過程過就行,然後按照要求學習(實體書籍、電子書)
《簡明Python教程》
《笨辦法學Python》
https://learnpythonthehardway.org/
https://www.kancloud.cn/kancloud/python-basic
https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000
——新聞:關於學習的碎片化的諮詢和知識,來用於你的個人成長(微信、知乎、諮詢流)
https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000
http://python.jobbole.com/
http://www.magedu.com/pythonxx
http://www.pythontab.com/
第四:勢——學習的心態和狀態
1.任何一個學習的過程,看起來很爽,但是做起來就未必了,老掉牙的堅持是必備的。
2.教程選擇一到兩個就OK了,不要求多;
3.多寫代碼,盡量讓代碼擼爽你;
4.盡量多出錯;
————————————
最後給大家貢獻個一月學會Python基礎開發的訓練計劃:
時間分為4周,全部自學,僅提供大綱,適用於Web方向:
1、第一周:讀完《笨辦法學Python》;
2、第二周:寫個爬蟲,需要深入了解re、sqlite3、Queue等幾個模塊,做個簡單爬取;
3、第三周:學習一種Web開發框架,推薦Flask、webpy、Django之類的,學個資料庫,寫個簡單的web應用如博客;
4、第四周:給博客做個小功能並走完測試和伺服器上架;
————————
以上為關於如何自學的一個流程,希望大家拍磚!
如果你已經掌握了一門其他的編程語言,這個問題就等同於說:「在你已經熟悉編程的基本思路、腳本工作的基本流程這個前提下,如何學習一門新的語言python」 ?
我的感受是,你只需要
1. 裝好python
2. 然後想一個有趣的小任務。舉一些例子:1).因為我是個臭美的女生,我曾經用python寫過一個給淘寶店家的所有評論自然語言處理的小腳本,看看我在哪家買化妝品比較好哈哈。2).另外因為每次吃飯都很難決定吃什麼,我就簡單的寫了一個按概率隨機抽樣的腳本,幫我擲骰子。
可能對於大部分程序員來說,這些都是小小小case,但是自己覺得有趣的問題總是驅動我一直去完善、去學習,比起我在看一本python入門書的時候循序漸進要更有意思,更激發我的樂趣。
3. 打開編輯器,用你自己的思路和原先掌握的編程方式去編寫
4. 用google,用一切辦法去解決腳本里的錯誤和bug。google一段時間後,你自己就會發現大神門推薦的stack overflow通常很有幫助,「a byte of python」這本書看起來很不錯,原來這個還有一個社區大有牛人在,原來python在這裡的用法是不同的……你會覺得它很優雅很易學,或者你會覺得它不夠高效,但是你已經擁有自己的經驗,有了最主觀的學習。
通常在學習新技術、新知識的時候,我們就叫這種經驗和感覺為直覺(intuition),我個人覺得這是最最最難的的一扇門,而多少大牛也無法指給你的一扇門。
5. 然後你可以參考其他答案里推薦的各種資料、論壇、經驗,開始事半功倍的,有針對性的學習。
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
如果你從來沒有接觸過編程語言,沒關係,只要你有解決問題的清晰邏輯(大部分人一定都有的)也可以。
1. 同樣的,裝好python
2. 想想自己用它來做點啥呢?假如你要找到asasasssasas中的sss在什麼位置,也許你不知道程序怎麼運行,可是如果讓你來做這項工作呢?
從左往右,一個一個的比對,如果看到了一個s,接著往下比對,如果第二個不是,很遺憾,繼續往後,直到我看到了三個s!找到了……。
然後你就可以開始寫了:
&> string=「asasasssasas」
&> 如果string(1位置~3位置)=「sss」
&> 就說「找到了!」
&> 不然的話去看string(2位置~4位置)=「sss」
&> ……
你寫出來了,成功了一半,可是完全無法運行。
3. 你去google,歸納一下問題:「1).python里的如果怎麼寫?2).python中 (你可能也不知道這是字元串)的位置如何表示……」 如果耐心,你總能找到答案。
最後你學會了用循環、用if...else,幾個有趣的編程體驗之後,你開始有了自己對編程和python的感覺。
4. 然後你可以去看書,細細咀嚼,逐漸提升,你有了intuition,看書的時候不經意的地方有了』似曾相識「、」溫故知新「帶給你的鼓勵,你懷著熱情,走上成為python高手的道路。
我真是啰嗦且業餘,各位大神不要笑話我 &>D&< 。你是如何自學 Python 的?
中國大學極少開設 Python 課程,故而國內 Python 程序員多屬自學,那麼你在自學 Python 的過程中有哪些值得分享的經驗或者有趣的體驗呢?
其實python非常適合初學者入門。相比較其他不少主流編程語言,有更好的可讀性,因此上手相對容易。自帶的各種模塊加上豐富的第三方模塊,免去了很多「重複造輪子」的工作,可以更快地寫出東西。配置開發環境也不是很複雜,mac和linux都內置了python。另外據我所知,不少學校也開始使用python來教授程序設計課程
從在校時候用python接活賺零花錢,到在創業公司用python開發商業網站和遊戲後台。所有遇到的問題,幾乎都可以從互聯網上的公開資源找到答案。
關於自學python,個人最大的3點經驗:
找一本淺顯易懂,常式比較好的教程,從頭到尾看下去。不要看很多本,專註於一本。把裡面的常式都手打一遍,搞懂為什麼。我當時看的是《簡明python教程》,不過這本書不是非常適合零基礎初學者。
去找一個實際項目練手。我當時是因為要做一個網站,不得已要學python。這種條件下的效果比你平時學一門新語言要好很多。所以最好是要有真實的項目做。可以找幾個同學一起做個網站之類。注意,真實項目不一定非要是商業項目,你寫一個只是自己會用的博客網站也是真實項目,關鍵是要核心功能完整。
最好能找到一個已經會python的人。問他一點學習規劃的建議(上知乎也是個途徑),然後在遇到卡殼的地方找他指點。這樣會事半功倍。但是,要學會搜索,學會如何更好地提問。沒人願意幫你寫作業或是回答「一搜便知」的問題。
然而,別人的經驗未必能完全複製。比如我沒有說的是,在自學python之前,我已在學校系統學習過其他的編程語言。
對於完全沒有編程經驗的初學者,在學習python的時候,面對的不僅僅是python這門語言,還需要面臨「編程」的一些普遍問題,比如:
從零開始,不知道從何入手,找了本編程教材發現第二章開始就看不懂了
缺少計算機基礎知識,被一些教程略過的「常識性」問題卡住
遇到問題不知道怎麼尋找解決方案
看懂語法之後不知道拿來做什麼,學完一陣子就又忘了
缺少數據結構、設計模式等編程基礎知識,只能寫出小的程序片段
所以除了前面說的3點經驗,給初學編程者的額外建議:
首先要有信心。雖然可能你看了幾個小時也沒在屏幕上打出一個三角形,或者壓根兒就沒能把程序運行起來。但相信我,幾乎所有程序員一開始都是這麼折騰過來的。
選擇合適的教程。有些書很經典,但未必適合你,可能你寫了上萬行代碼之後再看它會比較好。
寫代碼,然後寫更多的代碼。光看教程,編不出程序。從書上的常式開始寫,再寫小程序片段,然後寫完整的項目。
除了學習編程語言,也兼顧補一點計算機基礎,和英語。
不但要學寫代碼,還要學會看代碼,更要會調試代碼。讀懂你自己程序的報錯信息。再去找些github上的程序,讀懂別人的代碼。
學會查官方文檔,用好搜索引擎和開發者社區。
如果一門語言沒有改變你的編程思維,那麼它不值得你去學習」。如果這麼說,我們大學的時候,學習了c,c++,java,C#,算是值得學習么?很多時候是不值得,我覺得我們大學的課程就是用java,c#,c++把"C程序設計"又上了一遍.
這是因為,學校的老師會C和java之類的,所以要跟著規矩開這門課,(這也就是為什麼,許多學校還在教vb,),這也就是為什麼,你所以為的一樣就是大家都有For都有while,都有switch..都有Class...都有int 都有float,所謂的不一樣就是用C有指針,java沒有,這就是為什麼教育是失敗的,這也就是為什麼,我目前認識的幾個編程大牛
python的優點:簡單 我所說的簡單,是相比於象C和C++這樣的語言,你為了編程,要學習許多偏底層的東西.在比如,你在學習一個新的編程範式,或者想要馬上做個例子看看,試驗某個API,如果你是寫java的,你不得不去寫一個main,寫一些構造,即使有IDE這樣的東西,能夠為你帶來代碼生成器,而我做得就是寫一段「腳本」,或者打開python互動式解釋器就行了。
自己認識的python朋友出去工作,工資比較高,然後自己又剛剛好是會python所以選擇學習python,這樣的人比較危險但是也比較有激勵,還有就是覺得python比其他開發語言好用。
學完python前景會咋樣
其實我個人是很看好python未來的就業前景的,因為我認識太多的工程師都已經在學python,很多都是月收入大幾萬的
我個人也並非一直用python。前些年主要用c/c++以及java開發一些通信,移動系統,互聯網通信。近3年開始才轉向python。坦白的說,這可能與你相處的公司以及環境不大一樣。隨便舉個例子,google的protocol buffer協議一出來就具有c++/python/java三種語言支持。google的廣告系統早在03,04年左右就一併對python進行了webservice支持,大部分涉及基礎核心系統的公司,都開始對python進行了擴展支持。甚至開源社區的postgresql資料庫,除了自身的ansi SQL,pgsql,pg/TCL,PG/PERL之外對python進行了內嵌支持,唯獨卻沒有呼聲很高的java。在FREEBSD(MIT)/LINUX(GPL)平台上,對java可能排斥性比較大,但綜合而言,目前python發展還沒有java那種普及,主要是python大部分工作仍然是在較為深入地系統層和框架層做設計開發,例如django,SQLAlchemy,fail2ban,mail郵件系統,twisted等等。這部分對於那種習慣應用前輩們框架的編碼人員而言,缺乏創造力的他們根本無法適用這種開發。尤其在python涉及一些系統層面需要有較強的c/c++能力,這部分人在國內要麼就累得要死沒時間,要麼就啥都不會就會拷貝代碼,而國內公司也鮮有主動去做這部分基礎勞動的,大多都是等別人做好了在直接拿來用,所以造就了任何技術性的東西出來,國內都是先等等看,然後抄襲應用。
大環境如此,但千萬誤認為先等等看吧。對於一個技術人員而言,缺乏對新技術的渴望與熱情,這是一種非常危險的事情。我工作8年了,按照國內很多的人的說法早已不做代碼了,但又一次在聽一個老外的演講,他說他50多歲仍然每天堅持寫代碼,了解最新的動態,所以他才能做到他們公司的首席科學家,因此它才能時刻指導項目團隊前進並保證項目的質量。他坦言對於一個不寫代碼並且不了解最新的技術動態的技術人員或者技術團隊的負責人而言,這種團隊也就足夠做作小項目,一旦壓力和項目過大,就會有很多問題漏出來。
對於新人而言,無論學習什麼技術,都要以鼓勵的姿態出現。太多用薪水和你個人所看到的現狀去衡量一門技術,那絕對是欠缺眼光的。任何一門技術,一旦有人學習,他有可能逐漸成為這個領域的專家,即便再濫再沒有人用的開發語言技術,他也有可能就是明日的奠基者或者大師。
對於入門階段,對知識水平的要求並不算高,或者說很低,大家都應該聽說過xxx小學生編程如何如何這般這般怎麼樣之類的話題,這裡,我們不談長期發展,只談如何入門。首先,我覺得你應該具備計算機的基本操作能力,如果說你連新建一個文件夾或者說從網上下載資料都不會,那麼你應該再考慮編程這件事,如果你覺得對計算機的基本操作已經熟練後,請繼續向下看。
2.學編程應具備哪些條件?
硬體保證,首先你應該具備一台電腦,不管是筆記本還是台式,也不管性能高低,性能對前期學習編程幾乎無任何影響,就入門來看,操作系統還是首選windwos。
時間保證,如果你每天都有一大堆事等著你去處理,先去處理那些事吧,處理完後把剩餘時間划出一整塊的給編程,進行隨時可能被打斷的學習,在編程這塊,我不認為這是在用功學習,零碎時間去背單詞?應該是個不錯的選擇。
3.你確定要學編程?
這個問題看起來有點多餘,但為什麼要提出這個問題?要知道,編程不是一朝一夕的事,如果你只是一時的衝動,或者僅僅是要完成心目中的某個小工具,並沒有長期寫程序的打算,這樣的話,編程不學也罷,畢竟編程從入門到能獨立寫軟體會有很長的一段路要走,中途一旦放棄就前功盡棄,並且已經浪費了你大把的寶貴時間,實在是得不償失。不過,你儘管吐槽說是這是你的業餘愛好,有個愛好也挺好,那麼,繼續往下看吧。
4.如何才能入門?
到底怎樣才能入門?其實,只要你有毅力,慢慢折騰個一年半載,肯定能入門,但寫這篇文章的目的就是為了把這個周期縮短些,不是嗎?所以,下面我就以個人的觀點來談談怎麼才能更快的入門,這裡先籠統的介紹下,對於每點,後面單獨介紹。
了解一些編程的實質遠比知道如何編程更有意義,不要在編程是怎麼回事的情況下就去學習編程,這樣對你的學習是十分不利的,作為一個編程愛好者,知道計算機的工作原理,這應該是一件再正常不過的事,你難道不想去知道嗎?
4.2&>.選擇入門語言:
這個問題在入門階段一直是爭議十分大的問題,n多語言,n多推薦,到最後搞到新手一會聽說這種語言適合新手,於是學習這種語言,一會又有人說xx語言是垃圾、弱爆了,學了也沒用,之類的話,開始推薦你xxx語言,於是新手們又開始學習這種語言,搞到最後,什麼語言都沒搞懂,時間大把大把的流失,熱情消耗殆盡。要解決這個問題,首先要明白一個根本問題,怎樣挑選適合入門的編程語言?我推薦從難度這個角度來考慮,這門語言必須簡單易學,有趣,而且要有一定的熱度,有熱度才能有更多的人一起交流討論,翻開編程語言列表,發現有100多種編程語言,而且這個數還是在不斷增加的,這裡我們一起來看下2012年5月份的編程語言排行榜,能進排行榜前20的,首先在熱度上都已經差不多了,現在要做的就是從排行榜里找到一門簡單有趣的語言。
2012年5月編程語言排行
對於上述的語言,這裡不可能一個個詳細介紹,篇幅有限,最主要的是,這些語言的介紹只需要你打開搜索引擎(百度?谷歌?還是其他?隨便你嘍。),輸入這項語言的名字,搜索一下,就能看到他的詳細介紹了,如果你說你不會搜索,那麼,請返回第一個問題,一般來說,如果你去論壇提問什麼語言適合入門,得到最多的結果應該是C語言,沒錯,就是上述排行榜排行第一的那個,強烈推薦C語言入門的同學如果看到這篇文章可能會很想吐槽,因為這裡筆者要推薦的不是C語言,筆者認為,Python語言對於零基礎更適合入門,很多人推薦C語言原因我猜測可能有兩個,一是全國大部分的高校的編程課C語言是都有開設的,也可以說是學習過C語言的用戶基數大,第二是C語言自身的強大,可謂是口碑好。基數大+口碑好,足以讓你得到的結果是C語言居多。
筆者是Python語言入門,接觸編程時完全是零基礎,現在接觸了C、接觸了C++、JAVA,Visual Basic 6,回味了下,如果讓我再次選擇一門入門語言,我絕對不會後悔選擇Python,建議每位同學去百科搜索下Python,看下是否真的簡單易學,並且強大,如果你想快速寫GUI(圖形用戶界面 )的軟體,Python有一大把圖形庫供你選擇,不像C語言,半年下來,還是停留在黑框框里,大大打擊了初學者對軟體開發的信心,對於寫遊戲,Python也是絕對不會讓你失望的,pygame模塊為你提供簡單快速的遊戲開發,Pygame是 跨平台 Python模塊,專為電子遊戲設計。 包含圖像、聲音。 雖說沒法和Direct X相比,但對於新手來說,獨立寫個2D遊戲不也是一件很愉快的事嗎?
對於Python就不再詳細介紹了,只是推薦,具體選擇什麼語言,決定權還是在你手裡,無論是C語言也好,Python語言也罷,下面所介紹的學習方法都是適用的。
4.3&>.學會使用搜索引擎:
之所以推薦使用搜索引擎的目的是培養更好的獨立解決問題的能力,通常來說,剛學編程時,可能我們有時候連使用什麼軟體作為編程環境都不知,或者下載安裝了編程環境卻不知如何使用,這時搜索就派上大用場了,跑到搜索引擎里輸入」xxx 使用教程」,結果就出來了,簡直太方便了。
而且,新人都喜歡加很多xx語言的編程群,而且大都是挑人多的加,一旦編程中出現了一點小錯誤,就立馬到群里提問,這是一個很不好的習慣,假如說群里有人在線,為你解決了這個問題,那麼你獨立解決問題的能力就降低了一分,假如沒人在線,你就可能面臨著等待,或者把問題放這,不去管它,這樣積累的後果你是知道的,最好的方式就是動用搜索引擎,不需要等待,還可以鍛煉獨立解決問題的能力,何樂而不為?還有一點,許多新人反應說許多知識搜索不到,我很負責任的說,不是搜索不到,是你不會使用搜索引擎,至少我現在在編程上還沒有遇到過搜索不到某個知識點的情況,對於搜索的使用技巧,如果你還不知道,去搜索吧。
總之,有問題,就要去搜索。
自己如何確定目標
在生活中學會不斷挖掘自己的潛力。我們都是一個普通人,可能並不清楚自己到底在哪方面佔有優勢。所以,學著在生活中找到自己的優勢,並根據優勢選擇一定的就業方向。
不隨波逐流。不要看周圍的人做什麼,自己就做什麼,也許別人做的並不適合你。別人的優勢很可能會成為你的劣勢。所以,堅定自己的想法,讓自己知道那些方面適合自己,自己可以勝任。
不斷嘗試可能成為自己的優勢。你不知道什麼適合自己,所以才要大膽、勇敢地嘗試。找到一種可以屬於你的獨特的優勢。
堅定信念。一旦你堅定了自己的信念,就不要被別人的意見或是諷刺或是嘲笑所干擾。別人不是你,不懂的你在想什麼,不清楚你開始這件事的源頭。你的事情,不了解你的人,沒有資格輕易評說。
不茫然,不多想。別讓太多的事干擾到你奮鬥下去的信念。夢想不容許太多的雜念。那些雜念只會讓你的心愈來愈脆弱,多為一個人考慮,到頭來,傷害的還是自己。
選擇自己學習方法
每個人都有適合自己的方法,有的人去選擇自學,有的人選擇看視頻學習,有的人選擇報名培訓班,那在這個時候,你就要自己考慮清楚,到底那樣對的幫助是最大的,個人覺得是跟著培訓班最好的,畢竟人家的實戰項目多,我們學軟體開發的都知道實戰項目對於學好一門語言是 很重要的。
學習python有那些誤區
具體裡面的誤區非常的多,那些就不需要我去寫出來,我給你說的一般都是心態的問題,首先一個覺得自己會java和c++,然後我學習python就很牛,但是你要知道語言是有很多相同的地方,但是不是通用,一定要自己學習的仔細。還有一種就是覺得我不會英語,我要先去把英語學習好在來學python。因為自己想還壞主意然後學習,這樣的都是容易找進誤區的。
怎麼樣才能學好python學好python你需要一個良好的環境,一個優質的開發交流群,群里都是那種相互幫助的人才是可以的,我有建立一個python學習交流群,在群里我們相互幫助,相互關心,相互分享內容,這樣出問題幫助你的人就比較多,群號是301,還有056,最後是051,這樣就可以找到大神聚合的群,如果你只願意別人幫助你,不願意分享或者幫助別人,那就請不要加了,你把你會的告訴別人這是一種分享。
學習是對自己最好的投資,而機會屬於有準備的人,這是一個看臉的時代,但最終拼的是實力。人和人之間的差距不在於智商,而在於如何利用業餘時間,所以沒有等出來的輝煌,只有干出來的精彩。其實只要你想學習,什麼時候開始都不晚,不要擔心這擔心那,你只需努力,剩下的交給時間,而你之所以還沒有變強,只因你還不夠努力,要記得付出不亞於任何人的努力。
轉載自網路
我最先看的是《簡明 Python 教程》來熟悉一下語法,自己敲了一下代碼,發現 Python 很容易上手,漸漸喜歡上它。接著買了一本《 Python 基礎教程》,跟著書中的例子深入學習。這本書講得很詳細,淺顯易懂。
當開始熟悉 Python 的時候,嘗試自己寫一些腳本或軟體來干一些有趣的事情。後來圖像處理課程作業我也用 Python 來完成。
與此同時,我堅持寫博客來記錄一下自己的學習心得。
現在我開始學慣用 Python 的 web 應用。它有很多好用的框架例如 Django, Tornado等,可以輕鬆地做一個網站,用 Python 做網站後端也是一個近年來流行的趨勢。
學習 Python,最重要的是要寫出 pythonic 的代碼,這不是一朝一夕的事情。我喜歡 Python,就是因為它的簡潔和強大。不要重複造輪子,學會優雅地使用 Python。Pythonic到底是什麼玩意兒?
附我看過的覺得不錯資料PyCoder』s Weekly 中文翻譯
學好Python必讀的幾篇文章
也應該訂閱一些python大牛的博客有哪些 Python 大牛的 blog 推薦?
和郵件列表http://groups.google.com/group/python-cn/topics
去找一個實際項目練手。我當時是因為要做一個網站,不得已要學python。這種條件下的效果比你平時學一門新語言要好很多。所以最好是要有真實的項目做。可以找幾個同學一起做個網站之類。注意,真實項目不一定非要是商業項目,你寫一個只是自己會用的博客網站也是真實項目,關鍵是要核心功能完整。
自己多問下為什麼學python
如果一門語言沒有改變你的編程思維,那麼它不值得你去學習」。如果這麼說,我們大學的時候,學習了c,c++,java,C#,算是值得學習么?很多時候是不值得,我覺得我們大學的課程就是用java,c#,c++把"C程序設計"又上了一遍.
這是因為,學校的老師會C和java之類的,所以要跟著規矩開這門課,(這也就是為什麼,許多學校還在教vb,),這也就是為什麼,你所以為的一樣就是大家都有For都有while,都有switch..都有Class...都有int 都有float,所謂的不一樣就是用C有指針,java沒有,這就是為什麼教育是失敗的,這也就是為什麼,我目前認識的幾個編程大牛
python的優點:簡單 我所說的簡單,是相比於象C和C++這樣的語言,你為了編程,要學習許多偏底層的東西.在比如,你在學習一個新的編程範式,或者想要馬上做個例子看看,試驗某個API,如果你是寫java的,你不得不去寫一個main,寫一些構造,即使有IDE這樣的東西,能夠為你帶來代碼生成器,而我做得就是寫一段「腳本」,或者打開python互動式解釋器就行了。
自己認識的python朋友出去工作,工資比較高,然後自己又剛剛好是會python所以選擇學習python,這樣的人比較危險但是也比較有激勵,還有就是覺得python比其他開發語言好用。
學完python前景會咋樣
其實我個人是很看好python未來的就業前景的,因為我認識太多的工程師都已經在學python,很多都是月收入大幾萬的
我個人也並非一直用python。前些年主要用c/c++以及java開發一些通信,移動系統,互聯網通信。近3年開始才轉向python。坦白的說,這可能與你相處的公司以及環境不大一樣。隨便舉個例子,google的protocol buffer協議一出來就具有c++/python/java三種語言支持。google的廣告系統早在03,04年左右就一併對python進行了webservice支持,大部分涉及基礎核心系統的公司,都開始對python進行了擴展支持。甚至開源社區的postgresql資料庫,除了自身的ansi SQL,pgsql,pg/TCL,PG/PERL之外對python進行了內嵌支持,唯獨卻沒有呼聲很高的java。在FREEBSD(MIT)/LINUX(GPL)平台上,對java可能排斥性比較大,但綜合而言,目前python發展還沒有java那種普及,主要是python大部分工作仍然是在較為深入地系統層和框架層做設計開發,例如django,SQLAlchemy,fail2ban,mail郵件系統,twisted等等。這部分對於那種習慣應用前輩們框架的編碼人員而言,缺乏創造力的他們根本無法適用這種開發。尤其在python涉及一些系統層面需要有較強的c/c++能力,這部分人在國內要麼就累得要死沒時間,要麼就啥都不會就會拷貝代碼,而國內公司也鮮有主動去做這部分基礎勞動的,大多都是等別人做好了在直接拿來用,所以造就了任何技術性的東西出來,國內都是先等等看,然後抄襲應用。
大環境如此,但千萬誤認為先等等看吧。對於一個技術人員而言,缺乏對新技術的渴望與熱情,這是一種非常危險的事情。我工作8年了,按照國內很多的人的說法早已不做代碼了,但又一次在聽一個老外的演講,他說他50多歲仍然每天堅持寫代碼,了解最新的動態,所以他才能做到他們公司的首席科學家,因此它才能時刻指導項目團隊前進並保證項目的質量。他坦言對於一個不寫代碼並且不了解最新的技術動態的技術人員或者技術團隊的負責人而言,這種團隊也就足夠做作小項目,一旦壓力和項目過大,就會有很多問題漏出來。
對於新人而言,無論學習什麼技術,都要以鼓勵的姿態出現。太多用薪水和你個人所看到的現狀去衡量一門技術,那絕對是欠缺眼光的。任何一門技術,一旦有人學習,他有可能逐漸成為這個領域的專家,即便再濫再沒有人用的開發語言技術,他也有可能就是明日的奠基者或者大師。
自己如何確定目標
在生活中學會不斷挖掘自己的潛力。我們都是一個普通人,可能並不清楚自己到底在哪方面佔有優勢。所以,學著在生活中找到自己的優勢,並根據優勢選擇一定的就業方向。
不隨波逐流。不要看周圍的人做什麼,自己就做什麼,也許別人做的並不適合你。別人的優勢很可能會成為你的劣勢。所以,堅定自己的想法,讓自己知道那些方面適合自己,自己可以勝任。
不斷嘗試可能成為自己的優勢。你不知道什麼適合自己,所以才要大膽、勇敢地嘗試。找到一種可以屬於你的獨特的優勢。
堅定信念。一旦你堅定了自己的信念,就不要被別人的意見或是諷刺或是嘲笑所干擾。別人不是你,不懂的你在想什麼,不清楚你開始這件事的源頭。你的事情,不了解你的人,沒有資格輕易評說。
不茫然,不多想。別讓太多的事干擾到你奮鬥下去的信念。夢想不容許太多的雜念。那些雜念只會讓你的心愈來愈脆弱,多為一個人考慮,到頭來,傷害的還是自己。
選擇自己學習方法
每個人都有適合自己的方法,有的人去選擇自學,有的人選擇看視頻學習,有的人選擇報名培訓班,那在這個時候,你就要自己考慮清楚,到底那樣對的幫助是最大的,個人覺得是跟著培訓班最好的,畢竟人家的實戰項目多,我們學軟體開發的都知道實戰項目對於學好一門語言是 很重要的。
學習python有那些誤區
具體裡面的誤區非常的多,那些就不需要我去寫出來,我給你說的一般都是心態的問題,首先一個覺得自己會java和c++,然後我學習python就很牛,但是你要知道語言是有很多相同的地方,但是不是通用,一定要自己學習的仔細。還有一種就是覺得我不會英語,我要先去把英語學習好在來學python。因為自己想還壞主意然後學習,這樣的都是容易找進誤區的。
怎麼樣才能學好python
學好python你需要一個良好的環境,一個優質的開發交流群,群里都是那種相互幫助的人才是可以的,我有建立一個python學習交流群,在群里我們相互幫助,相互關心,相互分享內容,這樣出問題幫助你的人就比較多,群號是483,還有546,最後是416,這樣就可以找到大神聚合的群,如果你只願意別人幫助你,不願意分享或者幫助別人,那就請不要加了,你把你會的告訴別人這是一種分享。
現在大致算是入門 Python 了吧。
大致說下自己的入門路線吧。
背景:16年初決定入門,之前寫了兩年單片機,但是國賽後發現自己並不適合走這條路。於是決定開始學習 Python
好了背景介紹完。來正式說一下吧。
首先入門An Introduction to Interactive Programming in Python 這門課,萊斯大學的公開課,從0基礎到寫一個雷霆戰機,不過這門課的槽點是環境有點噁心,當初百度最多的問題是 64 位 Python 解釋器中怎麼安裝這門課所需的一個依賴,Hhhhh
在入門之後,便是可以自己寫一些小爬蟲了。比如之前畢業設計做微博爬蟲(此處手動艾特小航航)。
有了一些項目經驗之後,你便會積累一些疑惑。比如函數的簽名怎麼寫很優雅,為什麼一些代碼會出現「意料」之外的情況。比如這樣
a=[1,2,3]
b=a
b.append(4)
# 為什麼 a 裡面的元素會變化
以及這樣的日常水文 Part1 : 月經問題之類屬性與實例屬性之間的轉換
這些「日經」問題會困惑你很久,所以這個時候你需要去閱讀以下 Python 的官方文檔。Python 做的很好的一點就是文檔很新手友好,很相近,比如經典的 Language Reference 第三章 Data Model。同時 Python 官方會對一些「日經」或者難點問題進行著重講解比如,經典的字元串拼接的時候推薦使用 join 而不是 + (Reference Sequence Types — str, unicode, list, tuple, bytearray, buffer, xrange) 或者是針對描述符/編碼這樣對於新手不友好的內容,都會有專門的單張 How to Guide (比如經典的 Descriptor HowTo Guide ,Unicode HOWTO)
所以,文檔文檔再文檔,當你積累很多問題的時候,去複習,不,預習一遍官方文檔,你的收穫絕對是滿滿的。
至於 Web 的框架吧,其實自己並沒有專門花時間去看過某一個框架,無論是 Flask 還是 Django ,因為這些其實並不是重點,或者說相對於一個入門者來說,其重要性並沒有其他的東西那麼重。
不過如果要說的話,我的建議是,少些選擇,多一些專註。誠然 Flask / Django 都有自己的設計哲學。但是這些東西對於新手來說都太過於遙遠。我們這群菜雞需要做的不是過多的選擇,而是大量的專註練習。所以,對於學習某一種 Web 框架而言,背文檔 去 Gayhub 上找別人寫過的例子,是非常重要的事情。
說到這裡,初學者可能最常犯的一個錯誤就是不調試,不總結。大家一遇到問題,就喜歡去 QQ 群上問,大佬們,這個什麼原因呀?大佬們這又是為了什麼啊?然後呢,問完之後就直接拋之腦後,以後遇到再繼續。先祭出一個表情包吧
emmm,是的最低效手段,很多東西,你不去一步步debug是沒法印在腦子裡的。聊聊 Python 中生成器和協程那點事兒 比如之前遇到的這個文章里的最後面的思考題。人丑且笨,只能一個斷點一個斷點去調試最後才能記住。所以任何不想調試就入門一門語言的想法都是在耍流氓(大佬,巨佬,神犇們除外)
好了,前面的最枯燥痛苦期你已經過了。現在可以稍微舒服一些了。於是你就會有一些很奇怪的問題,嗯?一個框架是怎麼工作的呢?標準庫裡面的一些東西是怎麼實現的呢?於是你需要去拆一些箱子,啃一些源碼,比如 collection 裡面很常用的一些數據結構的實現。某個框架裡面某個小功能的實現。嗯,在啃的過程中,你會有不斷的有「挖槽,還有這種操作?」的感覺,然後你會發現,嗯?我之前寫的代碼為什麼那麼臟,那麼爛,恭喜你,你的能力有了新的提高。至於怎麼啃源碼,可以參考這裡的回答關於閱讀開源項目的源碼,有哪些經驗值得分享?
嗯,有了啃源碼,拆箱子的習慣後。你可能需要去常常關注一些業界最新的資訊,比如 董偉明:Python 有哪些好的學習資料或者博客? 這個問題下的若干回答。你也可以去看看新版本發布時的 What"s new in Python xxx ?自己寫點 Demo 練練手。或者是去刷一些簡單且重要的提案,python 的眾多PEP 之中,除了PEP8 ,還有哪一些是值得閱讀的?了解下 Python 的發展脈絡。
這上面的一些東西便是窩之前入門的一些總結和經驗吧。然後下面說一些我覺得很重要的點吧。
- 善用搜索,很多新人最開始的時候,總是下意識的逃避去搜索,總是覺得有人問才是最快的方法。但是就如同上面的 鳥哥語錄.jpg 一樣,這實際上是選擇了最笨拙的方法來學習。搜索引擎真的很強大,而且不需要你有太強的描述問題的能力,基本就是你把你的問題關鍵詞,或者報錯信息,往搜索引擎里一放。就可以得到很多高質量的答案。與此同時,你可能會遇到一些相對比較冷門的問題,這個時候,並沒有太多人能夠路幫助你。比如我之前遇到的一個問題 numpy array 最高只支持 32 維,但是我想支持更大的怎麼辦?我在這裡找到了答案 Using numpy.array with large number of dimensions 通過修改源碼解決問題。所以說,善用搜索等於成功了一半。
- 數據結構計算機基礎,能看到這個答案的,估計都以像我這樣的轉行黨居多。演算法,數據結構,計算機基礎這些東西是非常重要的,但不是最為重要的。作為一個轉行黨,首先要保證的是,自己的 API 調用能力以及複製粘貼代碼的能力能夠達到勝任一份工作的程度(畢竟 API 調用工程師嘛 Hhhhh)。所以我的建議是,最開始的時候這些東西是可以適當放棄不看的,但是保證一些基礎的刷題量確保你能通過筆試。然後在你找到一份工作後,這些東西是逃不開地坎,只能硬著頭皮肛,當然前提是你想在計算機這行走的很深,很遠。
- 問問題的技術,常年在新手群混,幫助新手,身經百戰見的多了。基本各路新人都有一個問題就是,經常莫名其妙的拋出半句話,「大佬們,我這代碼怎麼這樣了啊,為啥啊?」然後一群人一臉懵逼的看著他。正如同企業中有SMART這樣的方法論,我覺得問問題也有一定方法論,大概可以這麼歸納
- 清晰,請清晰準確的描述出你的問題,你想幹什麼,你寫了什麼代碼,你遇到了什麼問題,報錯信息是什麼?你的環境是什麼?你需要我們給你提供怎麼樣的幫助?
- 結果反饋, 描述完問題後,請告訴對你伸出援手的人確定你想要的結果,同時在解決問題後向提供幫助的人給出一個正向的反饋,比如,你這個問題最後解決沒有,是不是用幫忙人解決的,你還有什麼補充疑問和建議沒有
- 禮節,本來不想把這個單列出來說的,我以為這是個文明社會,但是我遇到很多問問題的是大爺,回答問題的是孫子的情況,所以我想強調禮節在問問題中的重要性,請務必用請字提問,請務必在得到答案後說聲謝謝(當然紅包更好Hhhhh)
- 總結:一個好的問問題的方法,不僅是為了幫助你們人節約時間,而是更多的幫你節約時間。
- 總結分享,我經常感受到的一點就是,如果學了新的東西不有一次總結,會遺忘的很快,所以養成了寫博客的習慣。記錄自己前行的點點滴滴以便於回顧。同時,我們要用於分享,我經常秉承的一個觀點就是,一個東西,當你能給人講清楚,你才是真的學懂了,而且在分享的過程中,你會收穫很多東西,朋友,知識點上的缺陷等。所以吧,大膽的分享。
以上就是我想說的話,祝大家在計算機這條不歸路上順順利利的走的越來越遠。
哎對了,Python 碼坊 這是我的專欄,一個辣雞選手自娛自樂的地方,大家有興趣的話,關注點個贊,打賞一下什麼的都可以~
祝好~
Learn Python The Hard Way
http://learnpythonthehardway.org/book/
零編程基礎學python,淺顯易懂,操作性強。中文翻譯版本:
笨辦法學 Python
http://lpthw-cn.ducktypist.com/en/latest/index.html
我學Python以前學過C/C++,所以編程的基本知識已經具備了,就是Python變數沒有類型這一點讓我感到比較新奇。最開始看了一遍語法就用了,但寫的基本上是用C來思考的的Python。
後來我漸漸開始掌握Python的思考方式是在Codeforces上刷題——這上面有些非常簡單的模擬題,用Python做正合適,而且在這上面還可以看到別的給這道題提交程序的人的代碼。我先自己用Python寫一個,等到Accepted以後,再看看那些同樣Accepted的、同樣用Python做這一題的人的程序是怎麼寫的,然後嘗試按照他們的思路簡化自己的程序,到後來甚至嘗試能不能進一步簡化他們的程序。「簡化」指的不是追求影響可讀性的短碼,短碼和簡潔之間,自己嘗試著把握。總之就是寫一個程序,體會別人的,不斷改進自己的。
再後來我寫Python程序的時候,有時候需要什麼功能,我覺得應該有很簡單的寫法(這個時候已經漸漸掌握Python的思考方式了,所以很多時候可以判斷出來什麼時候Python該有簡單的寫法),但我自己不會,我就google,通常情況下是找到Python的文檔(Python本身有實現這一功能的情況下),還有時候會找到一些StackOverflow或者什麼網站上的trick(Python本身沒有對應實現的時候)。
對了,後來我又讀了《Python源碼剖析》,這本書不是講Python的,主要是講Python實現的,但會讓你對Python的內部機制更加了解,從而寫出效率上更高的Python程序。
我是一個堅定的看書黨,當然,Python的話也有很多實戰,我堅決反對從網上東抄一點,西學一點的方式學習Python。我堅定的認為學東西還是要系統性的學習比較好。
這裡給大家推薦幾本書:
入門階段
1. A Byte of Python(用以快速入門)
2. Python CookBook(用以提高)
3. Python Module of the Week 學習標準庫
實戰階段
有了上面三部分知識以後,相信Python已經入門了,然後,多做一些練習。比如:Intermediate Python Workshop/Projects
也可以做一些爬蟲,或者Web開發。建議學習Flask,因為Flask代碼量少,學完以後,你還可以看一下Flask的源碼,了解一下Web服務的整個運作原理。Flask源碼剖析。
提高階段
有了上面的基礎以後,你的Python已經不錯了,但是,還是不夠的。你至少還需要下面這兩本書:
1. Effective Python (豆瓣)
2. Python學習手冊(第4版) (豆瓣)
這裡的第一本書豆瓣評分9.0分,我想不用我再多說什麼了。對於第二本書,我簡短書評:
我對本著書的評價是不適合新手的入門書。大家可能疑惑我的評價,什麼叫做「不適合新手的入門書」,不是自相矛盾嗎,然而,並沒有,請聽我解釋。
之所以說,不適合新手,是因為這本書太厚了,中譯本紙質版將近九百頁,加上電子版的部分一千多頁,拿來當磚頭用完全不成問題。新手一上來就看這麼厚的書,一定會打擊積極性,所以,不適合新手。
之所以說是入門書,是因為這本書講的內容很基礎,而且淺顯易懂,就講Python的語法,連標準庫都不涉及。大家想想看,一本講Python語法的書,能寫一千多頁,這是為什麼,如果不是因為廢話多,那肯定因為全面、細緻啊。全書廢話並不多,翻譯的也挺好(那些說翻譯的差的人想必是噴子吧),讀起來不費勁。學完以後,會明顯感覺到對Python的掌握更加(非常)深入、全面、系統。所以,這是一本入門書。這也是我力推,且打五分的原因。特別適合已經有一兩年工作經驗,覺得自己Python不錯的同學進行查漏補缺,進行深入學習。這本書是成為Python高手的必經之路。必讀!!!
不斷學習
好了,有了上面的知識儲備以後,你的Python已經算是高手水平了。不過,還不能懈怠,你還需要關注(訂閱):
1. GitHub - vinta/awesome-python: A curated list of awesome Python frameworks, libraries, software and resources
2. Pycoder"s Weekly
其他
其實,光學習Python是不能成為高手的,所謂吾生也有涯而知也無涯。要想成為高手,我還有2本書想推薦,一本幫助你以後更高效的學習其他書籍,一本幫助你快速提高編程水平(這裡說的水平是代碼可讀性和可維護性):
1. 如何閱讀一本書 (豆瓣)
2. 代碼整潔之道 (豆瓣)
另外,也推薦看一下我這裡的幾個回答:
1. 怎麼樣才算是精通 Python? - 知乎用戶的回答2. 怎樣才能寫出pythonic的代碼? - 知乎用戶的回答
3. Python 有哪些優雅的代碼實現?讓自己的代碼更pythonic - 知乎用戶的回答
先介紹下背景: 非理工本科畢業生一枚, 大學過了計算機三級(怎麼過的大家都懂的), 除此之外沒有任何計算機基礎, 工作也與計算機無關...
0x00--遇到真愛前
畢業第一年, 女朋友出國了, 業餘時間一大把, 說起興趣還是喜歡搗鼓電腦, 就諮詢了學計算機專業的一批高中同學:
"現在計算機都是什麼編程語言啊.....???"
"JAVA C#...."
當時我還是知道點 C語言和C++的, 這一看到C#感到無比親切啊, 這不就是嫡系嘛!!!於是搜羅一堆C#的資料, 開始學習, 至今只記得Console.WriteLine()..了, 學了一段時間, 按照資料做了一些例子, 後來工作忙就不了了之了....那些按照教材寫的例子也都通通還給教材了...光寫例子是學不會編程的....黑了教材的例子....C#不是我的真愛!!!
0x01--通過媒人結識真愛
後來工作又清閑了, 閑著沒事逛逛知乎, 經常看到Python的各種"軟文"....他媽的就這麼上鉤了(結果現在我又在知乎上寫Python的"軟文", 可見Python真是個邪教).....於是我開始廣泛搜集關於Python的各種資料, 就像喜歡一個姑娘就想要知道關於她的一切.....
0x02--摩擦出愛的火花
媳婦剛入門的那幾天, 我主要是靠簡明 Python 教程來愛撫她的, 了解了書中的主要姿勢, 沒過多久, 我就能夠利用已掌握的姿勢, 舉一反三地跟她玩出新花樣來, 那些日子真可謂夜夜笙歌,欲罷不能啊....
0x03--步入婚姻殿堂
經過時間和實踐的檢驗, 我決定下半輩子就跟她一塊過了...
0x04--幸福生活
我用Evernote記錄下我和Python的所有記憶, 當我記不得一些重要的"紀念日"的時候, Python她就會沖我發飆, 愛答不理的, 於是我偷偷翻一下Evernote, 我就記起來了, Python她又是那麼的溫柔體貼了^_^
平時, 訂閱並關注著一些前輩:
酷殼 – CoolShell.cn
阮一峰的網路日誌
EVILCOS | 懶人在思考,安全(黑客)、架構、團隊的各種觀點與分享
學習他們對生活的感悟和最新的姿勢, 運用到我的生活中來
0x05--創造價值
在某寶上兼職程序代寫了一段時間, 排名第一的店裡的所有Python單子都是我的完成的, 還有很多本來客戶要求用C/C++或C#的訂單, 都被我忽悠成Python的了....Python的開發效率讓我兼職第一個月的收入就甩開我本職工作薪水好幾條街....好幾倍好么..實在是太快了...在兼職的這段時間裡, 我的姿勢長進速度迅猛, 比那書上的例子.......(不黑書上的例子了, 沒有家裡的黃臉婆你哪傍的上小三啊)...在實踐中學習是最快的, 也是最好的.
現在我想把學習Python的經歷做個總結, 如果有精力和時間, 我會去開一個網路課程連載, 幫助大家學習Python, 到時候歡迎大家捧場
我是自學的Python。從對Python一無所知,到在博客上寫Python相關的系列文章(Python快速教程),前後有將近三年的時間。期間有不少門檻,但也充滿樂趣。樂趣是自學的最大動力。Python是一個容易編寫,又功能強大的動態語言。使用Python,可以在短短几行內實現相當強大的功能。通過自己寫一些小程序,迅速的看到效果,發現問題,這是學習Python最便利的地方。在學習Python之前,可以了解一下Python的特點和設計理念(Python簡史)。在設計之初,Python就試圖在複雜、強大的C和方便、功能有限的bash之間,找到一個平衡點。Python的語法比較簡單,用起來很方便,因此有些人把它當作腳本語言使用。但Python要比普通的腳本語言功能強大很多。通過良好的可拓展性,Python的功能相當全面,應用面很廣:web伺服器,網路爬蟲,科學運算,機器學習,遊戲開發…… 當然,天下沒有免費的午餐,也沒有完美的語言,Python為了達到上述兩點,有意的犧牲了Python的運行速度。如果你是在編寫高業務量、運算量的程序,可能Python並不是最好的選擇。-----Python的主體內容大致可以分為以下幾個部分:面向過程。包括基本的表達式,if語句,循環,函數等。如果你有任何一個語言的基礎,特別是C語言的基礎,這一部分就是分分鐘了解下Python規定的事。如果你沒有語言基礎,建議從Python Programming為參考書。這本書是計算機導論性質的教材,不需要編程基礎。面向對象,包括面向對象的基本概念,類,方法,屬性,繼承等。Python是面向對象的語言,「一切皆對象」。面向對象是很難迴避的。Python的面向對象機制是相對比較鬆散的,不像Java和C++那麼嚴格。好處是容易學,容易維護,壞處是容易犯錯。應用功能,包括IO,數據容器如表和詞典,內置函數,模塊,格式化字元串等。這些在其它語言中也經常出現,有比較強的實用性。高級語法,上下文管理器,列表推導,函數式編程,裝飾器,特殊方法等。這些語法並不是必須的,你可以用前面比較基礎的語法實現。學這些高級語法的主要原因是:它們太方便了。比如列表推導一行可以做到的事情,用循環結構要好幾行才行。學習Python主體最好的參考書是Learning Python,它非常全面,滿滿的都是乾貨。雖然很厚,讀起來並不難讀。另一個是參考官網的教程Python.org-----Python號稱「Battery Included",也就是說,功能都已經包含在了語言中。這一自信,主要來自Python功能全面的標準庫。標準庫提供了許多功能模塊,每個模塊是某一方面功能的介面,比如文件管理,操作系統互動,字元處理,網路介面,編碼加密等等。The Python Standard Library中,你可以看到標準庫模塊的列表。這裡也是標準庫最好的學習資料。如果想找書,我只看到過兩本關於標準庫的:Python Essential ReferenceThe Python Standard Library by Example說實話,這兩本都不算很好的標準庫教材,而標準庫的參考書也確實很難寫。因為標準庫只是調用功能的介面,最終實現的是Python和系統的互動。這需要很強的系統知識,比如文件系統知識,進程管理,http原理,socket編程,資料庫原理…… 如果這些知識都已經準備充分,那麼標準庫學起來完全沒有難度。然而,這些背景知識的學習並非一朝一夕的事情。更深入的Python學習也是如此,需要大量的背景知識,而不是Python自身。如果你對Python的編譯和運行機制感興趣,你可以往Python底層這一深度挖。如果你對應用感興趣,你可以多學習幾個自己用的上的第三方包。學到這個時候,就是要自己探索的廣闊空間了。-----基本上,學過主體內容之後,Python還是要靠做項目來練習。有不少小練習題類型的資料,比如Python Cookbook。但更好的方式是自己去想一些應用場景,用Python來解決。Python功能全面,所以不要擔心自己想的問題Python解決不了 (基本上Python解決不了的問題,別的語言也沒戲)。比如我學習多線程的動力,就因為要並行的下載大量的文件。基本上一個項目下來,會用到Python好幾塊的內容,知識會特別鞏固。最後,和其它任何知識的學習一樣,筆記和總結很重要。在看參考書和看網頁時,可以做一些筆記。等到學了一段時間後,可以把筆記整理成更有條理的參考卡片(reference card),或者寫博客。這也是我寫「Python快速教程」的主要原因。
然後:
1,找到合適的入門書籍,大致讀一次,循環啊判斷啊,常用類啊,搞懂(太難的跳過)
2,做些簡單習題,字元串比較,讀取日期之類 Python Cookbook不錯(太難太無趣的,再次跳過,保持興趣是最重要的,不會的以後可以再學)
3,加入Python討論群,態度友好笑眯眯(很重要,這樣高手才會耐心糾正你錯誤常識)。很多小問題,糾結許久,對方一句話點播思路,真的節約你很多時間。耐心指教我的好人,超級超級多謝。
4,解決自己電腦問題。比如下載美劇,零散下載了2,4,5,8集,而美劇共12集,怎樣找出漏下的那幾集?然後問題分解,1讀取全部下載文件名,2提取集的數字,3數字排序和(1--12)對比,找出漏下的。
5,時刻記住目的,不是為了當程序員,是為了解決問題。比如,想偷懶抓網頁內容,用urllib不行,用request也不行,才發現抓取內容涉及那麼多方面(cookie,header,SSL,url,javascript等等),當然可以聽人家勸,回去好好讀書,從頭讀。
或者,不求效率,只求解決,用ie打開網頁再另存為行不行?ie已經渲染過全部結果了。
問題變成:1--打開指定的10個網頁(一行代碼就行)。更複雜的想保存呢?利用已經存在的包,比如PAM30(我的是Python3),直接打開ie,用函數outHTML另存為文本,再用搜索函數(str搜索也行,re正則也行)找到數據。簡單吧?而且代碼超級短。
6,保持興趣,用最簡單的方式解決問題,什麼底層驅動,各種交換,留給大牛去寫吧。我們利用已經有的包完成。
7,耐心讀文檔,並且練習快速讀文檔。拿到新包,找到自己所需要的函數,是需要快速讀一次的。這個不難,讀函數名,大概能猜到是幹嘛的,然後看看返回值,能判斷是不是自己需要的。
8,寫幫助文件和學習筆記,並發布共享。教別人的時候,其實你已經自己再次思考一次了。
我覺得學程序就像學英文,把高頻率的詞(循環,判斷,常用包,常用函數)搞懂,就能拼裝成自己想要的軟體。
最後:
自己多問下為什麼學python
如果一門語言沒有改變你的編程思維,那麼它不值得你去學習」。如果這麼說,我們大學的時候,學習了c,c++,java,C#,算是值得學習么?很多時候是不值得,我覺得我們大學的課程就是用java,c#,c++把"C程序設計"又上了一遍.
這是因為,學校的老師會C和java之類的,所以要跟著規矩開這門課,(這也就是為什麼,許多學校還在教vb,),這也就是為什麼,你所以為的一樣就是大家都有For都有while,都有switch..都有Class...都有int 都有float,所謂的不一樣就是用C有指針,java沒有,這就是為什麼教育是失敗的,這也就是為什麼,我目前認識的幾個編程大牛
python的優點:簡單 我所說的簡單,是相比於象C和C++這樣的語言,你為了編程,要學習許多偏底層的東西.在比如,你在學習一個新的編程範式,或者想要馬上做個例子看看,試驗某個API,如果你是寫java的,你不得不去寫一個main,寫一些構造,即使有IDE這樣的東西,能夠為你帶來代碼生成器,而我做得就是寫一段「腳本」,或者打開python互動式解釋器就行了。
自己認識的python朋友出去工作,工資比較高,然後自己又剛剛好是會python所以選擇學習python,這樣的人比較危險但是也比較有激勵,還有就是覺得python比其他開發語言好用。
學完python前景會咋樣
其實我個人是很看好python未來的就業前景的,因為我認識太多的工程師都已經在學python,很多都是月收入大幾萬的
我個人也並非一直用python。前些年主要用c/c++以及java開發一些通信,移動系統,互聯網通信。近3年開始才轉向python。坦白的說,這可能與你相處的公司以及環境不大一樣。隨便舉個例子,google的protocol buffer協議一出來就具有c++/python/java三種語言支持。google的廣告系統早在03,04年左右就一併對python進行了webservice支持,大部分涉及基礎核心系統的公司,都開始對python進行了擴展支持。甚至開源社區的postgresql資料庫,除了自身的ansi SQL,pgsql,pg/TCL,PG/PERL之外對python進行了內嵌支持,唯獨卻沒有呼聲很高的java。在FREEBSD(MIT)/LINUX(GPL)平台上,對java可能排斥性比較大,但綜合而言,目前python發展還沒有java那種普及,主要是python大部分工作仍然是在較為深入地系統層和框架層做設計開發,例如django,SQLAlchemy,fail2ban,mail郵件系統,twisted等等。這部分對於那種習慣應用前輩們框架的編碼人員而言,缺乏創造力的他們根本無法適用這種開發。尤其在python涉及一些系統層面需要有較強的c/c++能力,這部分人在國內要麼就累得要死沒時間,要麼就啥都不會就會拷貝代碼,而國內公司也鮮有主動去做這部分基礎勞動的,大多都是等別人做好了在直接拿來用,所以造就了任何技術性的東西出來,國內都是先等等看,然後抄襲應用。
大環境如此,但千萬誤認為先等等看吧。對於一個技術人員而言,缺乏對新技術的渴望與熱情,這是一種非常危險的事情。我工作8年了,按照國內很多的人的說法早已不做代碼了,但又一次在聽一個老外的演講,他說他50多歲仍然每天堅持寫代碼,了解最新的動態,所以他才能做到他們公司的首席科學家,因此它才能時刻指導項目團隊前進並保證項目的質量。他坦言對於一個不寫代碼並且不了解最新的技術動態的技術人員或者技術團隊的負責人而言,這種團隊也就足夠做作小項目,一旦壓力和項目過大,就會有很多問題漏出來。
對於新人而言,無論學習什麼技術,都要以鼓勵的姿態出現。太多用薪水和你個人所看到的現狀去衡量一門技術,那絕對是欠缺眼光的。任何一門技術,一旦有人學習,他有可能逐漸成為這個領域的專家,即便再濫再沒有人用的開發語言技術,他也有可能就是明日的奠基者或者大師。
自己如何確定目標
在生活中學會不斷挖掘自己的潛力。我們都是一個普通人,可能並不清楚自己到底在哪方面佔有優勢。所以,學著在生活中找到自己的優勢,並根據優勢選擇一定的就業方向。
不隨波逐流。不要看周圍的人做什麼,自己就做什麼,也許別人做的並不適合你。別人的優勢很可能會成為你的劣勢。所以,堅定自己的想法,讓自己知道那些方面適合自己,自己可以勝任。
不斷嘗試可能成為自己的優勢。你不知道什麼適合自己,所以才要大膽、勇敢地嘗試。找到一種可以屬於你的獨特的優勢。
堅定信念。一旦你堅定了自己的信念,就不要被別人的意見或是諷刺或是嘲笑所干擾。別人不是你,不懂的你在想什麼,不清楚你開始這件事的源頭。你的事情,不了解你的人,沒有資格輕易評說。
不茫然,不多想。別讓太多的事干擾到你奮鬥下去的信念。夢想不容許太多的雜念。那些雜念只會讓你的心愈來愈脆弱,多為一個人考慮,到頭來,傷害的還是自己。
選擇自己學習方法
每個人都有適合自己的方法,有的人去選擇自學,有的人選擇看視頻學習,有的人選擇報名培訓班,那在這個時候,你就要自己考慮清楚,到底那樣對的幫助是最大的,個人覺得是跟著培訓班最好的,畢竟人家的實戰項目多,我們學軟體開發的都知道實戰項目對於學好一門語言是 很重要的。
學習python有那些誤區
具體裡面的誤區非常的多,那些就不需要我去寫出來,我給你說的一般都是心態的問題,首先一個覺得自己會java和c++,然後我學習python就很牛,但是你要知道語言是有很多相同的地方,但是不是通用,一定要自己學習的仔細。還有一種就是覺得我不會英語,我要先去把英語學習好在來學python。因為自己想還壞主意然後學習,這樣的都是容易找進誤區的。
怎麼樣才能學好python
學好python你需要一個良好的環境,一個優質的開發交流群,群里都是那種相互幫助的人才是可以的,我有建立一個python學習交流群,在群里我們相互幫助,相互關心,相互分享內容,這樣出問題幫助你的人就比較多,群號是304加上050最後799,這樣就可以找到大神聚合的群,如果你只願意別人幫助你,不願意分享或者幫助別人,那就請不要加了,你把你會的告訴別人這是一種分享。
感覺寫的好,對你有幫助,就點個讚唄,別光只收藏哈.~( ̄▽ ̄)~
?
我開始學python時看的是python編程金典,這本書很好,但內容比較舊大約是python1.5還是2.0。一個暑假在家讀完了,然後——沒學會。
大約又過了半年,一個星期把Python簡明教程看完了,還是沒學會。
後來約過了一年,迷上了telnet bbs,用python給cterm寫bbs掛站刷小遊戲外掛,沒兩天就基本掌握了這門語言。
所以python這門語言很簡單,但不能光看書,多動手才能學的快。推薦閱讀:
※編程零基礎應當如何開始學習 Python ?
※如何確定自己是否適合做程序員?
※為什麼尾遞歸優化似乎不常出現在非函數式語言的解釋器、編譯器中?
※怎樣讀《C++ 編程思想》?
※本人從事前端,想學習一門後端語言,求大神推薦?