随着时间的进展,在工作中又学到了django以及django-rest-framework,昨天也问了高手,怎么解决在工作中很努力的写代码,回到家就没动力去做和去学的问题,高手说生活就是生活,工作就是工作,要分开,回家了就好好享受工作。我听完后还是蛮震惊的,我一直以为高手都是回家也不停的学习的,看来有些事情确实要看天赋的。
今天脑海中对于Python的技术路线也变得慢慢清晰,现在梳理一下。
首先说两句“道”的层面,首先技术永远是为人服务的,所以考虑技术的实现的时候一点要考虑人这个因素,目前只了解这个层面,但是却无法深刻理解,因为目前工作还处于只编写代码层面,并没有更广泛的工作。第二,也是一个技术老大哥给我说的,学习任何技术前都要明白这门技术解决了什么问题,完成了什么样的功能,这句话看堪称是道出了编程的本质问题。编程的本质自认为就是解决实际问题,所以很多看似繁多的技术实际也就是为了解决各种各样的问题才发明的。
“道”说完了,就是具体的“技”方面了,从第二点我们知道技术是为了解决实际问题而存在的,所以目前python开发实际也是存在于三个方面。
一.网站开发:
目前最火的两个框架就是django和flask,其api的实现对应框架是django-rest-framework以及flask-restful,这两个框架就是解决了怎么快速开发网站的问题,没有这两个框架,你也可以用原生python写出来,但是复用性和性能方面和框架比就要差很多。我先说说这两个框架的区别,django,我一度很讨厌,原因是觉得很重,很麻烦,直到工作中用到,才明白自己的肤浅,举个例子,假如只给你一个礼拜时间开发网站,你会选择django还是flask?这个问题自然不言而喻,django作为python世界最重要的网站开发一站式解决方案,几乎从orm到前端,分页和邮件,甚至csv模板,都有配套的解决方案,你几乎会毫不犹豫的选择django进行网站开发,尤其最新的django2.0以上完美解决了之前奇葩的正则路由url的问题,所以2.0以上的django在我这里几乎是完美的。flask是不是就没必要存在了呢?flask在github上的星星数目是5万多,比django还要多一点,flask属于微框架,和django走的是完全不同的两条路,其实给工作中也存在很多小型项目,比如只是给微信小程序做api后台,或者自己写一个小博客,甚至只是做一个极简的网站,这个时候flask的优势就出来了,极简的代码,自由的选择,让你可以做到每一行代码都是清晰的,了解的,可以这么说,flask就是薄薄的一层,你完全可以在其上写出自己的框架,很多新手可能觉得理解不了,好好的Django都有了,为什么还要自己花时间写框架,其实答案很简单,如果你是汽车公司,你是愿意每一个零件都自己造呢?还是只是采购零件,自己只是做一个装配工作,如果代码全部是自己写的,那么出了问题,逐行debug的时候,你绝不会出现无法修改的情况,但是如果django出现了问题,或者你想修改源码符合需求,你可以保证正常修改和不出问题吗?所以,flask的出现是必然的,不过我个人经验是flask和django你二选一把一个学会就行了,因为我个人经验是这两个代码层面非常相似,学会一个另一个几乎是零障碍,但是个人觉得flask其实对于工作来说并不友好,因为虽然说代码都是自己写是最好的,但是每一个程序员水平是不同的,万一碰到菜鸟选手,可能用flask自己写大网站的结果就是bug满天飞,代码无法维护,无法后期扩展,这个代价真还不如直接用django,所以我个人觉得2.0后的django几乎是第一选择了。
python还有一个web框架,很特殊,boss直聘上对此要求的公司也不少,这个框架就是tornado,可以说其完全不同于django和flask,我对此并不是很熟悉,所以不多介绍,有兴趣的同学可以了解下。
二.爬虫
现在爬虫领域的第一语言毫无疑问就是python了,这个领域最牛逼的框架就是scrapy了。而爬虫其实本身融合了很多技术,前端和数据库知识要求也很高。个人一直很喜欢这个领域,但是工作中由于使用的是原生lib库爬取数据,所以这方面锻炼并不多。我觉得爬虫非常适合在家练习当个人项目使用,因为其学习曲线非常平滑,天花板高度也不低,所以对于想自学的同学,爬虫是个很好的切入点。学习爬虫的同时可以顺便学习下python的网络知识。
三.深度学习
我买过深度学习方面的基本书籍,卖了很多,最后只留下了入门的两本,这个方向给我感觉就是难,所以我特别理解为什么python是这个领域的第一语言,说真的,光是那些公式和算法就已经让人头大了,如果再弄个编译语言那种语法,估计ai的门槛就太高了。我觉得这个领域目前可以了解为主,但是由于其极高的门槛,估计非科班找工作的难度实在是太高了。
所以总结下,python开发的三个领域web开发、爬虫开发、深度学习三个方面就对应了三个工程师,web开发工程师、爬虫工程师和深度学习工程师。其中web开发工程师和爬虫工程师是可以互相转化的,而深度学习工程师目前个人经验是觉得只能依托于公司项目或者学校课程去学习,单纯的实践难度太大了。
其实观察boss直聘,很多招python工程师的都要求要会一门编译型语言,比如go,java或c++。其实我有想过这个问题,为什么会这样?其实这个答案在你写了几万行python工程代码后可能就明白了。动态语言python的优点是写起来快,语法简单,缺点也正是它优点的反面,写起来快就意味着封装多,只会调包就行,但是出现BUG调整也加大难度,语法简单也意味着门槛低,不用指定类型,自由度大,菜鸟进来会写出很多BUG。如果你会编译型语言,你会无形的想到这些并克服,其实软件最难的还是在维护和扩展,我也是最近才感悟出这个,所以学习编译语言,是一个必须之路,不过python作为我的第一门语言,特别喜爱它,js也学了,发现动态语言我就能接受python,后面第二门语言就是比编译语言了。
网友评论