转载

我的 Python 经验分享

我的 Python 经验分享 在三个月前,受邀在编程派微信群做过一次Python 方面、以QA的形式为主分享。为了方便本公众号的读者,我整理了一下分享的内容,希望对大家有帮助。

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

A:主要是纯粹看书而没有实践少, 代码写的不够多。那 给自己定一个大的目标,如从 0 到完整干个大活儿, 比如自己写个知乎,注册登录退出、可发表问题和回答、可对问题和回答评论、有个人资料页等等。做多了业务逻辑,会渐渐得心应手,然后就会懈怠,随意要不断的做自我突破。我是纯靠工作上使用和不断的学习别人,学习公司现有的项目代码中提高的。 在这里非常推荐费曼学习法,简单说就是「 通过向别人清楚地解说一件事,来确认自己真的弄懂了这件事」。

Q:Python如何进阶

A:之前在知乎答过一些问题,大家有空可以去翻翻。也可以通过如下二维码进入Python回答页:

我的 Python 经验分享 进阶对我来说就是一点点的积累,首先不要不舍得花时间。个人很推荐读优秀的开源项目源码 以及自己「造轮子」这2种方法。这个过程中不断的反思和积累各种经验。有了问题就用google、stackoverflow、github等渠道去找解决办法。

我在整个学习Python的过程中,会看别人的博客和书,书面上出的Python相关的书我基本都看过。不过再获取信息时,要掌握一些过滤不好信息的技巧。还有就是去看python标准库的代码,有实力的还可以看Python的C的部分。剩下的就是有勇气给开源社区提一些issue和pr。

Q:如果分成初级、中级、高级Python工程师,你怎么看?

A:根据我的理解:

初级的基本就是够工作,买2-3本Python 的书看,掌握里面的50%,熟悉Python常用的模块,就可以工作了。

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

高级就是明确的知道什么时候该用什么,什么场景该用什么,怎么用。恰到好处。万事在我胸,出了问题不慌,一言不合就翻源码呗。

Q:刚才聊到如何进阶时提到自己造轮子。能否详细说下具体的经验和方法?

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

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

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

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

但是最后也就是 5% 的人能坚持下来。

最后要说的是,造轮子不要重复,也不要造一个没有意义的轮子,比如说现在市面上有一个更好的选择,你非要自己造,这就有点KPI导向了,别说说服别人用你的这个轮子,就是你自己都不愿意用,造出来有什么意义?如果是纯为了了解和熟悉一块内容,其实我更推荐看这个领域内最好的轮子,深入的去用看它有什么不满足你的需求,或者缺点等等,然后想清楚了再自己弄。

Q:实际项目开发,只管当前跑通,但写程序整体观总是比较欠缺,功能耦合越多的时候,问题就会越积累越严重。搞的后来几乎每个模块都要重构过。这个你觉得是属于能力问题?还是态度问题呢?

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

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

A:代码质量,可以看我的知乎专栏文章:  https://zhuanlan.zhihu.com/p/22338225:

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

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

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

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

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

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

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

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

我之前学习的时候是先学的django,并且在工作中用到,后来才了解的flask,不过由于有django的基础学flask没有压力。

有人说 django 是企业级的,其实 pyramid 更合适。我们组现在有一些产品就是使用 pyramid 做的。我挺喜欢。但是不推荐,因为对新手不咋友好,出了一些问题或者不知道怎么解决一些django/falsk上有明确的解决方案的问题,还得去翻源码。

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

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

问:老师,你的书主要有那些内容,什么程度适合看呢?

答:Web开发常见的一些方面的书,这个可以看书的目录。如果Python 写过代码,基本就可以,其实书不难,单看了我的书,还得看官方文档。我那个类似于大学老师划重点和理解。

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

答: Pythonic 没法帮你,只能靠你长期的积累,学习别人的实现,然后你思考。你要不断地对自己有要求,比如效率,比如代码可读性。而且通过同事也能学到一些。凡是你觉得写的比你现在写的美的,就值得学习,等你积累到一定程度了,写起来代码被新人看起来就是简洁和优美的了。

问:你觉得 requests 作者代码什么水平?

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

关于requests的作者还有一个非常励志的故事,可以搜「程序员才是最牛逼的潜力股!一个胖纸到男神的蜕变之路」或者通过下面的二维码本文了解 requests 作者从胖子到男神的蜕变之路:

我的 Python 经验分享

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

答:面试请看 https://www.zhihu.com/question/33398583/answer/122435737 这只代表个人观点,我现在已经不面试了,所以才出来回答下。

问:招聘会看学历这方面的吗~

答:据我了解,只要够厉害,学历不重要。BAT可能不太行,但是类似豆瓣这样的公司更看重能力,比如我就是专科非计算机专业。

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

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

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

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

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

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

群里有人八卦了我做的铺垫,如下:

各种了解 酱厂在用什么技术,学习之;豆瓣关注酱厂产品开发,跟踪状态,万一是我的面试官了,虽然没有用;提高我的Python能力,担心人家看不上我,所以没事去吐槽他们代码,然后我面试的时候 很多工程师已经认识我了;当你发现,你竟然能吐槽他们的代码,他们还说你的对,你就知道有戏了。

BTW,这些铺垫只适用于当时的环境,现在应该无效了。但是大家可以发散一些。

我的 Python 经验分享

原文  http://mp.weixin.qq.com/s/uLKHMaKPoetprAmdHho09A
正文到此结束
Loading...