原标题:python web入坑指南
Invest regularly in your knowledge portfolio. Make learning a habit.
自学python web相关的东西也一年多了,写一下自己的经历帮助希望想要入门python web的同学吧,同时也希望国内的python可以发展的更好,有更多喜欢python的同学能加入到python程序员的世界里。
why python?
都说牛逼的程序员是不能按照语言来分的,但是没办法,作为菜鸟的我有语言洁癖。自从我接触了python,就再也不想写别的语言了。写了java再写python,让我感觉就像学了汇编之后再学c,估计用了c之后再也不想写汇编了。于是买了一本《python学习手册》我的python入坑之路就开始了。
入门python web
一开始进入一家创业公司,这个项目要做网站,我学了django,但是我的表现十分糟糕,一开始使用nodejs写,无奈我什么都不会,调试的时候连chrome浏览器开发工具我都没用过,什么nginx/mongdb/redis我都没听过,每天就边查文档边写点代码,好多时候老大亲自把我写的都给改了,因为写得实在是太烂,每天过得很惶恐,甚至我怀疑我不是做web开发的料。不过既然入了web开发的门,就不能轻易放弃。
从python写爬虫学起
后来做项目需要爬虫,告别了nodej开始写起来python爬虫。期间学习了python的request库,beautifulsoup解析库,tornado异步爬虫等东西。其实做web写爬虫算是一个很好的入门方式,爬虫需要你对http协议(http图解),前端基础知识(html/css/js),python基本用法(多线程,多进程,异步等),浏览器开发者工具,nginx服务器,mongdb/redis等nosql,数据处理等等都有所了解,在写了一段时间爬虫之后,算是对python web加深了理解。
入门python web框架
写网站毕竟还是需要web框架来快速做东西,『天下武功,唯快不破』,这也是很多创业公司选择python/ruby/nodejs之类敏捷开发语言的理由。python的web框架实在是太多了,各有各的优势,不过公司用了tornado,我就学起了tornado。业余就自己用工作中学到的一些东西,比如leancloud/mongodb/redis等东西做点小玩意,比如做了一个小的瀑布流图片网站,图片抓的tumblr;写了个微博机器人;用tornado写了博客;最近写了一个微信阅读聚合方便看自己平常订阅的公众号;用nodejs的博客ghost搭建了一个网站收集了很多python的文章。慢慢也算是对web开发入了一个门。这时候可能需要了解的就是一些web相关的东西,比如用户密码加密,表单验证,数据库设计,业务逻辑等东西,还有前端一框架jquery,avalon,工具gulp,webpack等东西。python的轮子很多,几乎都有现成的东西可以直接拿来用,开发效率还是很高的。缺点就是可能慢慢就成了api工程师,基本的东西就忘记了。
面试受挫
遗憾的是公司做的python项目终止了。公司逐渐迁移到java,我也就想到了跳槽,并不是觉得java不好,java有很多自己的优势,但是自己还是想继续做python。年前面试了礼物说和手机搜狐两家,自己感觉就不太好,结果都跪了。礼物说用的flask,笔试题只有三道题,第一题谁都会,第二题是数据库设计和手写sql,最后是思维发散题。题目没什么区分度,自己数据库没有多少设计经验,而且一般是用的nosql,回答很烂,直接跪了。手机搜狐直接聊了聊,涉及基础算法,数据结构,学校经历等,后来和thefire聊了一会,感觉自己某些知识掌握确实很肤浅,计算机网络也没学好,最后就没有然后了。
拿到offer
上周又面试了两家新浪微博搜索部门测试开发和mg移动的python后端。微博测试开发笔试题不少是测试相关的,python涉及到基础的语法和类,linux命令等。题目还是比较中规中矩的,和面试官聊了下,也学到了测试用例设计等问题。之前小公司测试上确实做得太差,几乎没有测试。不过还是喜欢web开发吧,最终mg移动拿了offer,正好离得近,直接走过去上班,mg 08年开始用python,算是国内比较早的。木瓜笔试也比较中规中矩,都是acm涉及到的基础问题,虽然没任何准备,还是写出来了。最终聊的感觉还可以,马上要入职了,还是有些忐忑吧,希望自己可以胜任。面试有时候还是很靠运气的,短时间内很难全方位衡量一个人的能力,如果正好合口味可能回答不错,不合口味可能就会跪,当然跪了也未必是坏事,至少知道了自己的欠缺。最重要的应该是持续学习的能力和动机。
python的优点与缺点
这是我搞python一年多的浅见吧:
优点:容易上手,开发效率高,代码易读,轮子多,应用范围广(数据,运维,爬虫,web),性价比高。
缺点:招人不好招(学校不教的同学们就不深入学啊),效率问题(解释型语言的通病),项目管理问题(动态语言一时爽,代码重构火葬场), 2和3不兼容(不过果断舍弃不好的特性才是python的未来)。
还好对于web应用这种io密集型应用,python的运行效率是可以接受的,真正遇到了瓶颈可以再继续优化。
入门与提高:
python是一门易学易用的语言(但是我感觉很容易写出烂代码),so,你的竞争力在哪呢?实际上学一门语言成本不高,难的在于技术栈,比如后端需要对linux/mysql/nosql/web framework/数据结构/算法/网络/git/操作系统等都需要了解。
很多东西都是慢慢积累的。有时候我也在想,自己跟那些大牛差距在哪。我是个承认智商的人,我一直觉得智商决定上限,努力决定下限。
我可能成不了牛人,但是至少要做一个合格的pythoner。想说下学习方法吧,除了智商之外,就是学习方式和练习的问题了(更多学习方法论可以看看《程序员的思维修炼》):
刻意练习,多写。看书的时候边看边写,哪怕照着书敲一遍,看的效率记忆率非常低。我看过很多之后脑子基本记不住多少,真正自己用过了才有感觉。编程无他,唯手熟尔。
看源码。如果不想只是做api工程师,就开始看各个模块的实现。尝试模仿使用一些高级用法,有的代码实现非常精巧,像高手多学习提升编码能力。当然也不是刻意玩弄语言技巧,还是要遵守KEEP原则,语言技巧只在适当的时候用在合适的地方。
做自己的小项目。学了很快就忘记了,不断做项目,不断练习所学的东西。你可以把学到的东西都用上,比如我会爬虫,就写过拉勾的职位分析,写过微博机器人,写过微信公众号聚合。用自己学到的东西解决问题是比较有成就感的事情。不过到现在前端也学得很艰难,囧。。。
跟牛人学习。如果你的周围你是最厉害的,那恐怕你该换个地方了。同事很多是行业里比较厉害的牛人,多和他们接触能学到很多东西。我这一年跟着老大和同事学到了不少新玩意。。。
善用工具。前辈们开发了很多好用的工具,比如前端的gulp,webpack;linux上的vi和命令行工具; mac上的dash文档查询,iterm终端,tmux, zsh等。
社区交流。github,stackoverflow是非常好用的网站,各种牛人混迹于此。还可以参加一些技术分享,订阅一些技术博客,时刻关注下社区的最新动态。
反思总结。看看问题出在哪了,怎么去改善。技术,沟通,需求理解,工程管理,思维方式等等很多环节都会出问题,不断总结反馈,改善自己。
记录。写博客或者用gitbooks等工具构建自己的知识体系。好的博客也是别人快速了解你的工具
知识点
如果你想做python web相关的东西,下边这些东西可以参考学习:
基础:linux命令,计算机网络,python语言,http协议,基础算法数据结构
python: 内置库,爬虫库,web框架,数据库接口等。
代码: pep8,代码组织,文档注释,TDD,敏捷等。markdown/sphinx/docstring/readthedoc等
(使用vim的话推荐python-mode插件,或者直接用IDE工具pycharm)
相关框架(库):django/flask/tornado/requests/sqlalchemy/unittest/celery等等
数据库:mysql/mongodb/redis/memcached
前端基础:html/css/js/jQuery/mvvm框架/coffee/gulp/webpack
版本控制:git/github使用
服务器运维: ssh/docker/nginx/linux命令/CI工具
善用工具:vim/pycharm/sublime/atom/tmux/zsh/
ipython/jupyter/mysql-workbench/mongochef/postman/curl
很多东西稍微了解下就可以,感兴趣的可以自己钻研。不过基础的开发能力还是要有的。
以上是自己的入门和学习经验,希望可以给非科班人士提供一些建议,目前资历尚浅,希望大家多多指教。
觉得本文有帮助?请分享给更多人
关注「猿助猿」成就顶级开发
技术交流QQ群:517877452返回搜狐,查看更多
责任编辑: