程序员不要沦为各种“框架”“工具”的奴隶
Posted 支付技术那些事
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了程序员不要沦为各种“框架”“工具”的奴隶相关的知识,希望对你有一定的参考价值。
今天想聊点技术相关的,很长时间不写都快忘记自己是个程序员了。
最近有个同事在抱怨,最开发太难了,要学的东西太多的,更可怕的一点呢,学过的,了解过的没过多久又忘记了。
一个码农程序员,各种框架,各种组件,新技术,层出不穷,今天这个出了新版本,上了什么新功能,明天哪个组件升级,性能提高了多少多少,心不心动,要不要去了解,时间上还不是很充沛,可能每天拖着疲倦的身体,只有坐地铁等班车的时间能有一点阅读时间了,打开手机诱惑太多,能有几个人能利用这短短的几十分钟去充电?
尤其是做java方向的,很多人以为自己入门了,写个hello world,等待他的是后排着队的组件和框架,简单梳理看一些有多少?以一个网路请求举例,DNS、LVS、Ngnix、tomcat,到了我们自己开发的应用上,什么spring、持久化框架、mvc框架,到数据层,内存数据库redis、关系型数据库mysql,各种池化技术,连接池啊,线程池啊,通信组件netty\dubbo\等等。
在实现业务的同时,还要在可用性、并发性、稳定性上下功夫,也就是互联网开发追求的“三高”:高并发、高可用、高拓展性。又是一个学习维度。
还有各种开源业务组件,MQ\ZK\等等。
如果我在告诉你,我还没有提出大数据用的那些技术,就普通的开发程序员,听到我上面这些,如果都了解或者熟悉使用,都值得佩服,如果不熟悉的,我再告诉你,每一种组件可能有一两个同类,是不是在学习的路上已经打了退堂鼓?
有没有什么捷径去学习?或者更快的学习方法?
首先我告诉大家,把这些东西全部学会并且全部熟悉使用,还能把原理都讲清楚的,我想在阿里至少是个p7的级别了,所以大家不要自怨自哀,学习后忘了,本就是正常的。
关于捷径,不管是学习还是生活,我比较喜欢的一句话送给大家:“每个人的成长并没有"直线式"的捷径,也许不走弯路就是捷径。”
有人该问了,上面说了这么多,都是不痛不痒的话,你有没有什么好的经验分享呢?还真有,也是我经过上面提到的那种学习混沌的过程中,自己慢慢想明白的。
在战略上对各种技术作出藐视。
学不过来,学了就忘的痛苦过程,我感觉感觉大家还是”面向工具“学习,对层出不穷的”工具“,感到困惑。
但是归根结底,这些工具本身还是计算机科学中很多基础概念的具象化,因此,“面向思想“学习应该是更好的一种做法。先对一种最原始的实现透彻的研究,理解其背后的思想和设计理念,然后再逐步学习后期更为先进的技术,这种学习路径应该更为有效。
举个例子,同样是具备存储功能的组件或者框架,比如mysql、zk、kafka的性能是怎么保证的呢?其实原理很简单,各种软件的底层还是利用操作系统,不管怎么存储都需要落盘,那落盘的瓶颈在哪里?一个是寻址时间,另一个是内核态用户态的切换以及数据拷贝。
所以改进点就在于,减少寻址时间,对应的就是顺序的写,很多人不相信,说内存和硬盘比就是天上一天,地下多少年,那我在告诉你,对硬盘的顺序写,加上操作系统的缓存技术,跟写内存没有数量级的差别,几乎可以相当,所以我们看到mysql中使用了顺序落盘,kafka等也使用了。
对于内核态用户态的切换,数据多次拷贝,硬件的提升,操作系统的改进,这个短板不断的在减少,什么零copy,sendfile等等,所谓的上层组件,不过是充分利用了操作系统已有的功能。
说到利用操作系统,尤其是netty的出现,底层不过是对操作系统从IO模型进行了有效的封装,没有操作系统层面上从select到poll再到epoll的进步,哪来的它能处理海量的网络请求?
上学时老师不断提醒我们“基础不牢、地动山摇”,也许真有到真正工作使用中,你才会体验出这句话的真谛,如果让我给师弟师妹们提出一个建议,我肯定会说,学好基础。
随着大数据,云计算、区块链技术的兴起,每个程序员心里既高兴又害怕,高兴的是技术的出现说明互联网的蓬勃发展,没有业务上的繁荣,哪有技术的进步?至少说明程序员这碗饭,暂时还不错,饿不死自己。
害怕的是,怕自己被淘汰,人的智力我觉得和身体一样,随着年龄的增长是不断减损的,哪怕你有很强的学习动力,也会被现实打破,很多中年人的梦想就是有一个自己的书房,前提是有属于自己的那么一丁点的学习时间。
今天写的有点啰嗦,索性多啰嗦一些。
关于学习的速度赶不上技术更新的速度,这个问题怎么解决?
无法回避,不过我有自己的一点感悟,不知道正确不正确,反正我自己是这么实践的。
总结起来就一句话:广度是深度的附属品。
自从我坚信这句话后,我不再追求什么“广度”。
XX是XX的附属品,放在技术上也是一样的。
拿你们最关心的什么高并发、高可用、高性能、高拓展来说,我自己的观点是,所有的高XXX都是高可用的附属品,换个角度就能理解了。
比如,面对海量请求,怎么保证系统的高可用,一般会经过从垂直优化到水平拓展,如果能不断水平拓展,带来的副产品是什么?高性能,高并发。
面对业务不断的调整或者更新,系统又怎么保证高可用?什么系统拆分,干掉“烟筒式”系统、微服务啊,带来的副产品是什么?高拓展性,可维护性高。
概念太多,太杂,只能自己去摸索,去找适合自己的方法,上面不过是自己的一点心得,希望对你有所帮助。
最后说一句:运气是努力的附属品。
本文完。
相关:
以上是关于程序员不要沦为各种“框架”“工具”的奴隶的主要内容,如果未能解决你的问题,请参考以下文章
面试官沦为听众!十五年开发程序员面试只顾展现自己的战绩,不愿回答具体问题
面试官沦为听众!十五年开发程序员面试只顾展现自己的战绩,不愿回答具体问题