如题

回复内容:

一百多人关注这个问题,没有一个人来回答。给了我一个抛砖引玉的机会。

首先一个合格的 Python 程序员是一个很模糊的概念,并没有一个量化的标准可以检测每个人的技能水平,每个人对于合格的定义也不一样,我自己心里面也没有对合格有一个准确的标准。我大概说下自己对于 Python 技能成长的阶段吧,因为是从创宇出来的,所以其实也是拾人牙慧,从老杨那边偷来的。

0. 听说过 Python。

听说过 Python 这门语言,知道哪些公司(Google,Dropbox,Douban)在用他,可以用 Python 做哪些东西(Web开发,科学计算,日志处理,平时的脚本)。

1. 用过 Python

使用 Python 写过一些简单的东西,比如写一个简单爬虫,爬取自己想听的音乐。
大概的标准就是写过一些小工具,但是对于 Python 还不是特别熟悉,参考文档能写写东西。

2. 会用 Python

对一个项目,能够用 Python 快速完成,在上一个(用过 Python)基础上,使用 Python 的次数有一个增加,可以说成是会用 Python。
对于 Python 的常用库都有一定的了解,对于 Python 的一些缺陷能够了解并且避免。比如被人诟病的多线程,在什么情景下可以使用 Python 的多线程?

比如列表的性能开销略大,有些时候可以用数组来代替?

比如操作dict 的时候尽量用迭代器?

3. 熟悉 Python

熟悉 Python,了解 Python 的缺陷,并且知道为什么有这种缺陷。
熟悉 Python 大概就是在`会用 Python` 的基础上,不仅仅是 `know how`,还要 `know why`。

对 Python 的运行机制更加了解,为什么 CPython 被人说慢,而 PyPy 更快?

为什么使用 list 对内存开销那么大?

了解 Python 的内存管理以及垃圾回收的细节?


4. 精通 Python

接触的人中,我认为可以说是精通 Python 的真是少之又少。Q.yuhen 算是一个。
所以这一部分没法写,我得等我敢跟人吹牛说自己精通 Python 的时候,再回来补充一下什么叫精通。



先写到这里,要干活了。

按照上面说的达到会用 Python 大概可以称之为一个合格的 Python 程序员。

-----------------------------------------------------------------------------------------

到家之后给猫洗了个澡,太残忍了。

上面列出的仅仅是对于 Python 的进阶,但是在正常的工作过程中,仅仅专注于一门编程语言而不了解其他的东西,很难完成日常的工作,所以一个合格的 Python 程序员,除了在对于 Python 的了解比其他的要更好之外,还需要掌握其他的技术:
  • 操作系统
  • TCP/IP 等网络协议知识

  • 数据库
  • 算法
  • 等等等等
上面罗列出来仅仅是我想到,觉得自己需要去完善的知识面,至于一个 Python 是不是要全部了解,我也不能给出合理的说法,毕竟每个人的工作场景不同。还是希望有前辈或者后浪,来给出一个精彩的答案。python应用这么广,每个领域都要求不一样。对于数据挖掘、机器学习这块,pandas、numpy这么优秀的文档至少要读过几遍,groupby、apply、merge总要会用,处理数据的时候能少写多少个for。进一步,sklearn的文档写的图文并茂,读起来通俗易懂(统计蓝,表示R的文档看的我心伤~)。说这些都没啥用,赶紧做个东西,入坑先。用Python通关(或暂时通关)几个OJ,绝对是精通使用Python的最快路径.
逼着你去竭尽全力优化代码效率,完善程序结构,无尽的NA尝试可以让你把python的内部原理都猜个八九不离十

另一方面,OJ可以把Python运行效率低下的缺点暴露出来,比如同样一个没经过优化的算法,用C/C++,可以在700ms内跑完通过OJ,但如果是Python来做会需要更多的时间比如5s,于是超时TLE,Python不得不寻求更快的算法来AC,所以用Python也是提高算法水平的最好选择。由于人的惰性,用C的普通算法过了OJ就不去考虑优化和改进原先的算法,这样会就错失很多提升算法水平的机会。The Hitchhiker’s Guide to Python!能完成任务,能完成需求,能提出解决方案并实现完成,这个是一个程序员应该具备的基本能力
Python程序员也不能例外一眼看出行缩进值

给你一个通用性的参考。

首先是硬知识:
语言应用要熟练,特别是调试和排错。这是写代码的基础。
类库的选择和可用性判断要有经验,这是加速开发,偷懒的关键。
OS相关的文件系统,UI知识要熟悉,这是做UI和部署等基础。
网络相关知识要精通,现在大部分软件都和网络有关,不懂不行。

接着就是团队合作,学习能力这些软实力了。

高大上的东西,留给别人说吧,我就说几个小点吧。

  1. 不这么写:
    from xxx import *
    
    登录后复制
09-08 15:43