古人曾经说过文人相轻
,最近愈来愈发现,程序员其实也没有啥不一样。戾气,鄙视链一点也很多。很久没更新了,就想谈谈我最近作项目里面的一些感觉,关于程序员里面一些很差的心态。写这篇文章不是为了标榜我本身有多么清高,偏偏相反,而是为了自省。就在文章动笔以前,我才发现戾气是多么容易传播,本身也成了程序员内的害群之马。前端
就在上个周,我无心间发现掘金的一篇文章。java
一看,是一篇关于java教程的文章,github博主宣传了一下本身的教程repo。当时还不自知,可是一瞬间一股酸意就蔓延我全身,以为这种教程类的东西看的太多了,还每次当github开源来宣传,有点骗人的感受。再加上看到一条和我想法差很少的评论,就顺势的再添油加醋了一下:git
一不当心,我变成了我最讨厌的那种人。过后三天,我又再仔细想了想本身的所做所为,实在很不妥。看看别人60k star的repo,再看看我本身空荡荡的github。。。shame on me。因而我立刻在原文下面给博主道了歉,若是他能看到我这篇文章,也但愿他真的感觉到个人愧疚。程序员
无论是否是程序员,人,都是很容易被本身的既定思惟所禁锢的。 并且给予否认比确定更容易。说白了,就是断定对方是sb比由衷佩服要简单。github
坊间流传的鄙视链,干人工智能的瞧不起作后端的,作后端的瞧不起作前端的,作前端的瞧不起作客户端的。相信你们都有所耳闻。我之前也曾经由于是作安卓开发,总以为本身很low,相比于本身作云计算的朋友们,好像说话的底气就少了一些。 直到前些时间,我才发现一我的的聪明和智慧,并不会由于他身处哪一端
而被掩盖。web
最近很流行一个大中台
的概念。可是说的比较多的都是后端。好比阿里的中间件等等。可是其实不少人都没想过,其实客户端开发也是有中台的。面试
举个例子,前段时间字节跳动组织了一次flutter的分享。袁辉辉和李梦云老师就分享了他们在flutter技术上的一些突破和创新。值得注意的是,他们两个都是来自移动平台部
。编程
这个平台部所作的就是相似于中台
的开发模式。 字节跳动包括今日头条和西瓜视频在内,有至少20-30+款产品。每个产品的基础架构都由该部门负责。 好比,图片加载在flutter上的高效实现,动态化等等。下到flutter engine级别的优化,上到与业务对接的flutter application,都会有方案落地。这不就是至关于移动开发的中台么?后端
在李梦云的分享中,我看到了他们团队的细致,能深刻到机器码和编译原理的角度去分析包大小,去给谷歌fire issue。我不以为像他这样的人若是换岗位换方向会搞不定。说白了,聪明,勤奋,有思考能力,无论是作哪一端都不是问题,更不要谈什么鄙视不鄙视的了。api
可能会有人说,那毕竟这种移动平台端的团队,也不是每一个人都能去的了。如今大部分移动开发岗位仍是面向业务的,我这么分析属于站着说话不腰疼。
可是你们有没有想过,别的方向,好比后端开发,难道就没有这种困境么?据我所了解,哪怕是大厂,后端开发岗也有天天CRUD的机械化工做。。。。每一个后端都想成为架构师,都想作设计,可是到头来还不是大部分状况要和业务逻辑打交道。尤为是我司AWS部门的朋友们,流传着一条金句:抱着作架构师的心进来,带着作support的技术栈离职
。调侃归调侃,可是这样的困局是每一个”端“都会遇到的。只有让本身少点戾气,多学习,才可能更进一步。 可是除了本身闷头苦学,还要学会睁眼看世界,扩大本身思惟的格局。这就引入第二点:
我在这里举个实际的例子。你们作安卓的,应该都听过所谓的什么网络的三级缓存
.其实无非就是RAM Cache和Disk Cache。尤为是如今不少HTTP框架的源码分析都喜欢强调这一点。这可能会让移动开发的朋友们以为作Disk Cache是理所应当的。
前几天和咱们一个部门后端的朋友无心中聊天,他说最近在想着怎么提升他们调用微服务rest api 的 RAM缓存命中率。我随意问了一句,大家Disk Cache的命中率难道有啥不同么?朋友说,咱们后端不会cache到disk上的。。。当时我就震惊了,还有不缓存到disk上面的?远古的HTTP框架Volley不就是会把api call的response缓存到设备的private folder里面么?这是面试必备的知识点啊。。。大家难道不遵照max-age这个http header的么。朋友说那是针对浏览器而言,后端微服务直接互调又不是浏览器。。。
仔细了解了以后我才知道,后端的逻辑部署在服务器上,服务器的性能,好比RAM大小要比移动设备强得多,这也是为何后端的in ram的队列中间件这么流行的缘由 (Kafka、ActiveMQ、RabbitMQ、RocketMQ, 可能移动端的小伙伴就以为不就是一个队列嘛,很普通的数据结构而已) 。 再加上微服务直接互相的api call,可能时间上要比服务器访问本身的硬盘速度还要快的多,据这位朋友说是1ms与6-10ms的区别,因此从时间成本的角度来讲还不如直接在call一次api 或者调用RAM Cache。
移动设备,由于涉及到用户流量这个问题,尤为是如今大多数app的页面是以展现图片为主,因此把api call缓存到设备上很是合理,这是一种用空间换流量的思惟,后端就不同了,他们没有这样的须要,api call有时候甚至是微服务直接互相调用,也没有节省流量(固然load balancing这种是另外一回事了)这样的需求,采用用流量换速度的方式固然没毛病。
这只是一个简单的例子,个人中心思想是,不管是哪一端的程序员,都须要拓展本身的知识面,不能只护着本身的那一亩三分地,觉得那才是真理。而应该走出去,多和同一端不一样的实现,或者是不一样端的同行多交流才能让本身掌握的只是更加夯实。前端的朋友多和后端的朋友交流,才能知道线程池调优是有多么重要,后端的朋友和前端的朋友多交流,才能了解前端开发的一些业务需求和限制,给本身的工做也添砖加瓦。
甚至是同端之间,也须要多参加一些交流会,多看看网上的资料和博客,看看如今的发展趋势。(我就不说我司某朋友到如今2019年了还每天抱着AsyncTask不放。。。。。)
更有甚者,会由于偏见和傲慢致使本身没法进步。本身喜欢使用的一个框架或者编程语言被人嫌弃而在论坛上互喷。好比本身用了RxJava,就以为这个是最厉害的多线程框架。一旦有人说几句很差的就疯狂攻击。却不知若是用善意的态度和对方交流,说不定能收获更多。
举个例子,我一直是很看不上所谓的跨平台开发的框架,好比之前我还在IBM支持Cordova的时候,就以为这种靠webview的开发模式实在是辣鸡。。。等你们开始用React Native了,我也是同样的态度,以为这种中间转换层的方法不高效。等到去年出了flutter,我也是抱着同样的想法,因此也一直没接触和了解。直到今年看到了袁辉辉老师的博客,我才知道flutter的跨平台原理完彻底全不同。对跨平台的偏见让我一年内都没有学习这个优秀的框架。
相信不少程序员刚刚入职,了解产品代码的时候都会有下面这种心情:
咱们常常习惯性的去吐槽,去抱怨。而后到本身离职的时候,公司新人同样可能会吐槽你写的代码,从而陷入一个循环。。。。
在我看来,不给解决方案的吐槽都是耍流氓。你们都知道,破坏比建设简单,一样的,改进也比吐槽难。
程序员有时候很容易陷入一种自视甚高的幻觉之中,总以为本身写的代码就是屌,一旦稍微有点看不懂别人的代码就以为是垃圾。其实却不知本身的代码在别人眼中也多是垃圾,可是咱们互相又不接受这个事实。我在如今的组里面有一些类似的体验,有些同事往往本身的代码有bug了,最后都不忘挖苦一下前人,说到是由于前面的代码结构太乱了,我这边很差改而致使的。最后问改进意见呢,hmm,说不出来。每周开小组讨论会,探讨代码质量的改进方案和benchmark的时候,也不出声。。。。
一个优秀的程序员,首先应该看到别人代码的闪光点,对于不一样的意见,应该再想一想为何当初对方要作出这样的决定,若是是符合当时状况的一个work around,想一想换了是本身应该作什么样的决定。若是对方作的不对,再想一想若是换了是本身之后怎么避免一样的错误,而不是在一句句”垃圾“中,关掉你的代码编辑器。。。。
写在最后,也是一点点总结,虽然这篇文章不是什么技术类型的东西,可是我以为这是我最近作项目的一些收获,也是属于自我检讨。望与你们共勉。