开发的意义

让人想犯罪 __ 提交于 2019-12-16 12:57:33

身为一名程序员,如果不在某个领域一直专研下去,是很难得到质的提升的。

今年最大的技术收获就是有幸能够用springcloud开发一个车联网的项目,之前一直止步于理论层面,一直没有真正接触过springcloud的项目,不得不说,新东西确实有她的实用价值,不过要求我们懂的更多,学的更多,做的也更加精细,才能在合适的时机利用她。细节我就不多说了,摘用玥姐的一句话“巨人,很高,但难翻身”

其次今年更多做的是业务层面的,项目多、但不精,没有一个超过三年的项目,扪心自问,自己这几年都是这样,都仅仅是做业务需求,焦点都在某个产品的实现,在和客户、测试们沟通,用的更多的也都是直接拿开源的项目,甚至付费的项目,这点也挺无奈的

三、经验的累积
今年真正安安心心踏踏实实的做了一个上线的app(名字我就不说了),并一路维护版本的迭代更新,除了业务领域的深度认识以外,还累积了很多做人做事的经验;

产品经理完全站在客户的角度出发:新需求下来了,主要是这几个大的模块,你们先把功能拆分一下,评估一下工时。

第二天:我们能不能这样做点改动,这样便于推广。

第三天:最终定的需求还是最开始一样,因为客户说月底要做活动,我们两个周就要交出去。

我猜你根本没看我写的开发计划?
实际上留给我们开发的时间算上周末也只就有十天,你以为完了吗,太年轻,测试也不是省油的灯

第四天测试leader发话了:你们出个提测计划吧,下周我们就要测,不然我们测不完!
姐姐,你都说下周就要测了,我还计划什么?

原来你们这里的游戏规则是这样的,好吧,既然大家这么有心,我们也不是不解风情,这几个简单的功能就不用设计了吧,我们把一个人算两个人用,直接撸代码开干呗,边开发边设计,996就是这么来的,先把功能做完吧,剩下的让测试提bug。
于是真的两个周就交出去了,过程之煎熬,不过庆幸的是软件市场的版本更新过审后还是到了下个月

这下你们知道我为啥这么久都没更新博客了吧,根本不拿我们开发当人啊,见识了两次迭代之后,我觉得是时候开始搞点事情了

我就一直在思考这其中的核心问题出在哪呢?
抱歉,该问题超出认知,无法回答

这也不是一两句话就说清楚了的,反正也是经过了我几次的试错,三番五折的跑腿之后,又经过了两个迭代后,测试们态度也好了许多,产品经理也变得不那么像“客户”了,而目前的迭代计划也主要由我来主导了,具体的过程有兴趣的可以私聊博主哦,这里就不细说了。

四、得与失
回想一下,2019过的好快(其实还有一个月才到2020年),今年没有存钱,没有升职加薪,没有一夜暴富,但也没有流落街头,最喜欢的早餐还是小区北门一块五两个的白馒头,朋友们,继续加油,你我所能做的,除了工作,请一定始终保持那颗炽热的心,偶尔失落也没关系,但时刻记得提醒自己,坚持下去,谁知道明天会发生什么呢,这就是生活的意义。

别撤那些运行效率
比如开发个人 web,公司小的网站,就算是一个中小型的商城
我觉得 django 完全能对付
哪有那么多并发啊
你们公司做什么的啊
有那么大的需求吗?
但开发效率完胜 go
现在 go 有哪个框架能跟 django 这样开箱即用匹敌的
一大堆第 3 方开源的库,自己慢慢组合起来
这就是为什么你在网上看到最多的关于用 go 开发的文章
都是写 api,restful
因为用它来开发个传统 web
真要人命
反观 django,开发一个传统型,也就是说不是那种前后端分离的网站
太轻松了
所有的工具 django 都帮你做的好好的
只要把数据模型构建好
基本网站就算做完了
就算写接口
不复杂的话,django 也是能很轻松完成
复杂的话,go 一样做起来麻烦
本来写逻辑,用 python 就是有优势
所有 go 的优势就是在大并发的时候
哪有那么多大并发
全国才几个淘宝,微信啊
一般的需求我完全不知道 python django 哪些不能满足
其实一大部分用 go 的情况
都是那些人在炫耀
炫耀自己用上了所谓的高大上的 go
因为现在 python 太普及了
自己也跟着用,感觉不能提现自己的实力
反正老板也不懂技术
看到那些大公司很多用了 go
自己也要用
都是有病

从来发布置的角度来讲
你要 django 能跑起来
至少必须得有 django + uwsgi + nginx/Apache。

那么问题来了,uwsgi 的配置你要不要学着写? 写完后 nginx/Apache 的配置是不是也得要写?
这三者之间的交互搞错点东西就炸,初学者能在上面折腾死你,即便有经验的每次新环境配起来也是让你蛋疼

啥,你不会用 Docker 简化配置过程? 那么你 docker 用法要不要学? Dockerfile 怎么写要不要学? docker-compose 怎么写要不要学? 而且正重要的是 Dockerfile 这东西你写完必须得 build 跑起来才知道有没有写错有没有 bug。 相性我,你在没有前人项目的基础上徒手写个 Dockerfile,大部分的时间全都是消耗在了 build - run - 出错 回头改 继续 build 的循环中。
而且这特么还没考虑到你写 docker-compose 配置也有可能会有坑。。。。

然后这时候我们来看看 go,服务写好了? 编译出来,可执行文件直接扔到服务器,./hello_world 成了,跑起来了,不用 nginx 不用 uwsgi, 不用搞破 docker, 并发,性能极好,你说,哪个爽?

Python 项目部署也是可以递进的。最原始就是直接纯裸跑,高级一点套个 uwsgi/gunicorn,再高级一点前面套 nginx,再高级一点前面套负载均衡,后面分布式数据库。这四层套下来,什么并发都不是事啦

1,一次开发,交叉编译,到处使用。( windows,linux,arm,物联网 )
2,没有魔法( Python 有多少让你惊奇,仍不住叫 WTF 的)
3,性能好(原生协程,编译速度快)
4,社区开源产品丰富( package 数目,GIT 开源项目数目上,除了 npm,pip,go 应该快赶上 composer 了)
5,背靠 GOOGLE,官方包质量高(相比 python 的 HTML 解析包你就得学 4 个)

看看 Github 上得 package star 排行,我认为 go 高质量库已经超过 Python 了。
Why?

瓶颈应该在数据库上,而不是并发上, 等哪天我有 10w 并发 在考虑换 go

如果只是 crud 的业务,go 没啥明显优势,看看 go 的明星项目,都是容器,网络中间件相关的,
比底层操作系统上层一些的领域是 golang 主场

go 的好处:
静态类型
编译出单个文件,基本可以不带运行时依赖
性能不错
风格上特别倾向于把外部代码 vendor 进来一起管理,对质量管控稍微有些好处(前提是你真的这么用了。我昨天还刚刚处理一起,在编译阶段使用 wget github master 下载外部代码一起来编译的事故)

不过这些优点其实主要是 python 的缺点衬托出来的

我爱 python

Python 的问题在于它是动态脚本语言,本身维护起来就比较困难,再加上语法上有一些技巧又没有和 java 一样强大的规范,导致初学者的代码风格迥异,在系统做大后往往变得难以维护。但是对于一般的 web 高并发场景底层都可以用 libuv 之类的库进行加速。总之需要运行效率的地方用 C 来实现,web 服务本身用 Python,开发效率完爆 java、go 之类的,而且性能也不错。

看 Python 和 go 的 star top 100。
v2 有一个中文的排行也可以参考下。

在网络和系统层,是 Go 的天下,
比如内网穿透:ngrok, frp, goproxy, nps…
比如 FQ:ssr, v2ray, lantern…
比如 db & search:influxdb ,bolt, bleve 等等.
比如分布式系统

物联网、云计算 go 占优势,
人工智能,数据分析 Python 占优势。
如果你要写一个小爬虫,用 Python 更好,
如果你要写一个大型分布式高并发爬虫,可能选 Go 更好,
如果你要写一个小 Web,用 Python 更好,
如果你要写一个大型项目,高并发,流媒体处理,微服务,可能用 Go 更好,
如果你要学习数据分析,人工智能,目前选择 Python,java 更好,
如果你要开发一个微信服务号,小商城,目前选择 PHP,java 最好,

每个领域都需要有深度,没有深度的会被方便的工具代替,而爬虫和数据分析领域正好是一个工具很成熟的领域…这种领域下如果没有深度其实不太好找工作,并不是会个 Python、能擦点边就能随便找工作的。

很多公司的需求都没那么复杂。爬虫方面需求简单的那些用个八爪鱼之类的都能解决问题(爬少量页面存到数据库),而难的那些跟 Python 根本就没多大关系了;数据分析方面需求简单的那些直接用各种云厂商提供的在线分析工具或者就 Excel 都能做,同样是跟语言无关的…

Python 对于大多数公司来说,就是玩具,
小项目还行,比如写个 html 转 pdf,pdf 合并,小爬虫,小项目数据分析等,
大型多人合作项目,
Python 力不从心,
Python 存在近乎先天的缺陷:性能问题,大量新手写的库导致库代码质量非常低,定位不明确,语法非主流,缺乏实力公司支持

Python 火是因为语法入门接单,国家作为入门级学习语言定位,如同大学学 C,便于学习编程思想,而不是作为工业应用。

Python 其实要精通非常难:
1,高级特性很多,导致 ide 支持不好;
2,各种库各种坑多,一不小心被带入坑里;
3,没有大型的稳定的组织长期支持做底层开发,导致很多东西看起来好像有一个库能干的事,一用发现不好用,熟悉的轮子越来愈多,发现最后可能还得自己再造轮子,Python 工程师大部分时间在造轮子和改轮子,而这时其他工程师在处理业务问题。

综上,除非你打算一直做数据相关工作(采集,分析,机器学习),不建议只学 Python。

我只能说说我那个程序的思路哈,毕竟不知道你的实际情况。
1.最开始我是硬循环嵌套强行做 if 匹配,后来优化当然第一件事就是干掉它,尽量在提取数据之初限定条件,这个条件一般是就是 where 条件,能极大减少循环次数。
2.如果有数据需要从别的地方拿,尽量先提取一次做成字典,把 if 条件之类的通过键的形式直接取值,这样做可以把 where 的匹配时间降到最低,还能去掉循环嵌套。
3.我当时数据是丢数据库的,设计库的时候字段也最好定好,可以以空间换时间,还得把 where 条件做索引,如果涉及到入库,最好先把要存的每条数据做成元组存进列表,通过数据库包的 executemany 方法来提交到数据库,能节省相当多的时间,数据库连接对象也要避免多次创建。
4.numpy 最好用 anaconda 来做,它会包含很多算法库,能极大提升性能,
当时我的数据并没有那么多,整合清洗完成大概 14000 条,但是需要的数据分离在不同的地方,相当于说需要用 where 条件来匹配数据,循环嵌套硬匹配,那循环次数好几亿就太多了,O(n^2)了。做成字典去对应数据,通过键直接去拿我要的,时间上只花了构造字典的循环以及拿数据匹配的循环。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!