Python 进阶、求职必看的前辈经验分享

1,837 阅读10分钟
编程派(微信ID:codingpy),一个专注 Python 学习的微信公众号,经常分享国外最新教程和学习资源。

经过近两周的筹划和准备,「编程派」微信群的第一次技术分享总算成功结束了。

首先感谢董伟明接受我的邀请,在群里分享个人在 Python 方面的工作经验,并热情回答众多群友的提问。其次感谢大家对活动的支持和配合,其中特别感谢群友 @lwh 在分群的转播工作,感谢群友 @不良人 在活动结束后不久就整理出来的记录。

这次活动组织过程中有一些做的不够好的地方,希望下次能够改进,为大家带来更高效的分享。

分享嘉宾简介

董伟明,《Python Web开发实战》作者。之前做过运维,运维开发,现在是在豆瓣任职高级产品开发,主要负责豆瓣读书、电影、音乐、东西等产品线。

知乎首页:董伟明

问答实录

活动采用 QA 的形式进行,共回答了 20 多个问题。另外,友情提示,问题回答来自嘉宾个人经验的总结,属于个人观点,仅供大家参考

下面是此次活动的实录,已经过「编程派」编辑,并由分享者审校。

问:我们之前做过两次问题征集,也请大家投票选过最想了解的方向。请董老师先谈谈Python如何进阶这个话题吧。

答:我最近在刷知乎,回答过一些问题,大家有空可以去翻翻。进阶就是一点点的积累,首先不要不舍得花时间。你要舍得花时间。个人很推荐读优秀的开源项目源码 以及自己「造轮子」这2种方法。这个过程中不断的反思和积累各种经验。有了问题就要google stackoverflow github 去找。

其次是看别人的博客,多看书。但是要掌握一些过滤不好信息的技巧。有些订阅列表 我在专栏中也有写。大家有空可以去看看。我还订阅了python社区的一些邮件列表,说实话很烦。但是有时候你们看到一些社区开发者讨论,甚至是激烈讨论。我喜欢静静的看他们,学习他们对一些事情的看法,和思考的角度。

还有就是去看python标准库的代码。我还没有看过Python的C的部分。剩下的就是有勇气给开源社区提一些issue pr。

问:如果初级、中级、高级Python工程师分的话,你认为各自水平的工程师应该掌握哪些语言特性和用法?

答:根据我的理解,初级的基本就是够工作,那买 python 的书看2,3本,(掌握)里面的50%,熟悉Python常用的模块,就可以工作了。

中级,就是愿意花时间让代码写的好一些,比如今天学习了元类,用上。明天觉得类装饰器不错,也用上,不考虑用的恰不恰当,基本Python用到的东西都「熟悉」。

高级就是明确的知道什么时候该用什么,什么场景该用什么,怎么用。恰到好处。

问:董老师,你好,在公司实际的项目开发中,有些新人是Python基础功夫蛮好,各种 Python 试题都能回答的不错,但是遇到实际项目开发,只管当前跑通,但写程序整体观总是比较欠缺,功能耦合越多的时候,问题就会越积累越严重。搞的后来几乎每个模块都要重构过。这个你觉得是属于能力问题?还是态度问题呢?

答:我觉得这是一个工程师必进之路吧,前提是你知道它有问题,这很重要。有时候产品不是一个工程师能决定的,这个真靠个人节操了。知耻才能后勇。我以前也是,现在你让我看 2 年前的代码,我也不想承认那是我写的。我希望 2 年后我看今天的代码,也有这种感想。领导很重要,公司文化和团队文化很重要。

问:总感觉写代码没头绪呢?

答:逼自己,从 0 到完整干个大活儿 比如自己写个知乎。

问:从投票结果来看,怎么在工作中做好代码审查和协作也非常受关注。请分享一下豆瓣或自己在这方面的实践经验。

答:代码质量,可以看 保证代码质量二三事 - Python之美 - 知乎专栏

今天说几点,第一是一定要按照 PEP8 来,团队可以有妥协,大家同意即可。第二是尽量让代码写的 Pythonic 。这个是一个很长期的过程。

接着你有兴趣,你得各种方式影响别人,说服别人。这个是非技术能力了。注意表达的方式方法,比如不要指点,而是在咨询。有时候气氛不好了,发点搞笑图片。自己的话,本地可以试试 pre-commit 。可以让你的编辑器支持代码自动执行 flake8 。

问:除了纯做技术,还有其他的职业规划吗?

答:当你发展到一定地步,就会遇到瓶颈,有的选择做管理。有的说我要换个语言,比如不做产品开发,去做ios开发。当然最多的还是离开,换个新环境。这个还是看个人兴趣,我无法给建议啦。

问:刚才董老师聊到如何进阶时提到自己造轮子,目前至少有两个小伙伴希望就这方面多了解一下。能否详细说下具体的经验和方法?

答:造轮子嘛,2个原因,一个是现在的东西不满足你的需要,或者你不喜欢;第二个是你就是为了学习想造。这2点都是✔的。

我一般造轮子是因为要学东西,比如最近我在写一个应用,最近几天就可以出了。是因为我们组的用法一直是 react+redux,但是我不喜欢 redux,正好听人推荐,想用用 mobx ,通过做项目真的深入了解它。

「造」嘛,其实不是抄袭,比如知乎,经常用,大概他是什么也就是知道了。但是实际真的做出来很难。你要解决的问题可能千个。真的把它造出来了,对你的技术提高,对web开发的理解有非常大的提升。

假如担心知乎这个活太大,可以简化需求的。比如不要搜索。只用 oauth 登录。你就是一个产品经理+开发+测试+运维。而且说不定,会火。

但是最后也就是 5% 的人能坚持下来。但是再造一个就没意思了。比如 你可以用 go 做个豆瓣。

问:前端开发和 web 开发一样吗?

答:在豆瓣不一样,但是是重合的,比如我们组内的前端工作都是我们组的后端工程师消化。我们组的前端实力灰常强。

问:关于招人

答:你会发现很多公司常年招聘,其实不一定缺人,只是做储备。只要你够厉害,随时都可以啦。

问:如果是学习 web 应该造什么是有帮助的呢?

答:学习 web 那肯定是自己从零做一个功能齐全的网站。

问:很多人想了解下,Python web 开发方面,框架如何选择?django or flask?如何学习框架?学完是不是就可以工作了?

答:我个人不喜欢django, 这句话,大家谨慎的看。这个和个人写代码,或者性格有关。我不喜欢耦合度太高,束缚太重的东西。

有人说 django 是企业级的,其实 pyramid 更合适。我们组现在有一些产品就是使用 pyramid 做的。我挺喜欢。但是不推荐,因为对新手不咋友好。

django 还是 flask, 我没法建议。但是新人学习建议 flask,学的差不多了(如果工作中有用 django 更好,没有的话自己学些),自己给自己个答案。但是离找工作还挺远的。

框架只是一个工具而已。就算是 django, 吭哧吭哧一个月你也能学个差不多。关键还是使用 python 的熟悉程度,还有对 web 开发工作的经验了。

问:老师,怎样才能把代码写的 Pythonic 呢?

答: Pythonic 没法帮你,靠你积累,看别人的实现你思考,自己不断地对自己有要求,比如效率,比如代码可读性。

问:同时还请推荐一些豆瓣和自己个人最常用的库

答:豆瓣用的最多的是 mako。你们知道 flask 的模板库吧…酱厂没有人用 jinja2 。

问:老师,什么程度适合看你刚出的书?

答:用 Python 写过代码,基本就可以,其实书不难。

问:董老师,你觉得 requests 作者代码什么水平?

答:requests 的作者在我心中是大神。flask 的作者次之。kennethreitz (Kenneth Reitz) · GitHub ,就是这个帅哥。他的代码写的风格是我喜欢的类型。我好多代码用法和习惯,都是看他的代码获得的灵感。celery 和 fabric 的作者,也很厉害。

程序员才是最牛逼的潜力股!一个胖纸到男神的蜕变之路:本文介绍了 requests 作者从胖子到男神的蜕变之路。

问:董老师,我想问一个面试的问题。如果是你面试新人,技术方面你最看重哪一点 ?

答:面试请看 如何面试Python后端工程师? - 董伟明的回答 (回答仅代表董老师个人观点,仅供参考。)。你们不要把我当榜样,还是向他们看齐。我现在已经不面试了,所以才出来回答下。

问:董老师,python 和会计结合,类似帐套的数据处理,可以实现吗?

答:python 和会计结合,虽然不明觉厉,但是应该可以。

问:董老师,招聘会看学历这方面的吗~

答:豆瓣招聘会么? 我没参与过。据我了解,只要够厉害,学历不重要。比如我是专科 非计算机专业。

问:那 web 以后是不是一定会主流?

答:这个不敢说,之前我觉得 ios 和安卓要上天了,最近不是微信还搞个小程序。这个不敢妄谈。都还一切未定呢。

问:所以作为一个非计算机专业的学生,然后要达到什么标准才可以找工作?需要拿的出手项目?但是一直是个人学习,学习里面,团队要么搞安卓,要么搞 ios,这样让我们这些人很难看到希望。

答:我先说其他方面,有时候看机会,看运气,甚至面相。对你深爱的东西要坚持就对了。

一定要有目标,再说工作。你说你要找个一个月 3k 的工作,不用学。你说你想找个月薪 2w, 名企,你就要有配得上能力。

​我去豆瓣之前做了很多铺垫,并不是想当然就去面试,而是为了那个机会准备了一年。念书时,不要辜负那段时间,做点有用的项目。多学习算法,linux,SQL,Python(其他语言也行)。

问:关于董老师的书。(参考:荐书 | 跟着豆瓣工程师学Web开发

答:看了我的书,还得看官方文档。我那个类似于大学老师划重点和理解。

本文首发于微信公众号「编程派」(ID:codingpy),如需转载,请联系「编程派」获得授权。