关于码农:码农如何提高自己的品味

作者:京东科技 文涛 前言软件研发工程师俗称程序员常常对业界外的人自谦作码农,一来给本人不菲的支出找个不错的说辞(像农民伯伯那样辛勤耕耘挣来的血汗钱),二来也是自嘲这个行业的确辛苦,辛苦得没工夫捯饬,甚至没有驼背、脱发加持都说不过去。不过工夫久了,行外人还真就置信了程序员就是一帮没品尝,木讷的low货,大部分的文艺作品中也都是这么体现程序员的。可是我明天要说一下我的感触,编程是个艺术活,程序员是最聪慧的一群人,咱们的品尝也能够像艺术家一样。 言归正转,你是不是认为我明天要教你穿搭?不不不,这仍然是一篇技术文章,想学穿搭女士学陈舒婷(《狂飙》中的大嫂),男士找陈舒婷那样的女朋友就好了。笔者明天教你怎么有“品尝”的写代码。 以下几点可晋升“品尝”阐明:以下是笔者的经验之谈具备局部主观性,不同意的欢送拍砖,要想体系化晋升编码功底倡议读《XX公司Java编码标准》、《Effective Java》、《代码整洁之道》。以下几点局部具备通用性,局部仅限于java语言,其它语言的同学绕过即可。 优雅防重对于成体系的防重解说,笔者之后打算写一篇文章介绍,明天只讲一种优雅的形式: 如果你的业务场景满足以下两个条件: 1 业务接口反复调用的概率不是很高 2 入参有明确业务主键如:订单ID,商品ID,文章ID,运单ID等 在这种场景下,非常适合乐观防重,思路就是代码解决不被动做防重,只在监测到反复提交后做相应解决。 如何监测到反复提交呢?MySQL惟一索引 + org.springframework.dao.DuplicateKeyException 代码如下: public int createContent(ContentOverviewEntity contentEntity) { try{ return contentOverviewRepository.createContent(contentEntity); }catch (DuplicateKeyException dke){ log.warn("repeat content:{}",contentEntity.toString()); } return 0;}用好lambda表达式lambda表达式曾经是一个陈词滥调的话题了,笔者认为,高级程序员向中级进阶的必经之路就是攻克lambda表达式,lambda表达式和面向对象编程是两个编程理念,《架构整洁之道》里曾提到有三种编程范式,结构化编程(面向过程编程)、面向对象编程、函数式编程。首次接触lambda表达式必定特地不适应,但如果相熟当前你将关上一个编程形式的新思路。本文不讲lambda,只讲如下例子: 比方你想把一个二维表数据进行分组,可采纳以下一行代码实现 List<ActionAggregation> actAggs = ....Map<String, List<ActionAggregation>> collect = actAggs.stream() .collect(Collectors.groupingBy(ActionAggregation :: containWoNosStr,LinkedHashMap::new,Collectors.toList()));用好卫语句各个大场的JAVA编程标准里根本都有这条倡议,但我见过的代码里,把它用好的不多,卫语句对晋升代码的可维护性有着很大的作用,想像一下,在一个10层if 缩进的接口里找代码逻辑是一件如许苦楚的事件,有人说,哪有10层的缩进啊,别说,笔者还真的在一个微服务里的一个外围接口看到了这种代码,该接口被过多的人接手导致了这样的场面。零碎接手人过多当前,代码腐化的速度超出你的想像。 上面举例说明: 没有用卫语句的代码,很多层缩进 if (title.equals(newTitle)){ if (...) { if (...) { if (...) { } }else{ } }else{ }}应用了卫语句的代码,缩进很少 if (!title.equals(newTitle)) { return xxx;}if (...) { return xxx;}else{ return yyy;}if (...) { return zzz;}防止双重循环简略说双重循环会将代码逻辑的工夫复杂度扩充至O(n^2) ...

February 8, 2023 · 2 min · jiezi

2大学里刚入坑的新生码农们注意了上

本文是《程序猿叨叨叨》系列文章中的其中一篇,想要了解更多相关的文章,欢迎猛戳蓝字前往阅读。上一篇章,咖啡君给各位介绍了程序猿必备的基本装备。这一篇,我们来聊聊大学里刚入坑的新生码农们需要注意哪些? 1. 珍惜每一门课,不要止步于及格入坑后,新来的小伙伴们普遍会遇到一些或有经验或虚度光阴的老猿们,我们或多或少会从他们口中听到这样的话:“五十九分遭罪,六十一分浪费,六十分万岁!”如果各位以后想进入BAT这样的名企,或是以后想带着几个弟兄姐妹,组建自己的团队闯荡江湖,那么这句60分定理对于你来说就是彻彻底底的伪命题。 从软件过程管理的角度讲:将关注点放到过程上,可以达到效率的最大化!反之,如果只求得60分及格,我们从一开始就已经输了这场课程的竞赛。 或许新报到的童鞋们还会遇到这类一瓶不满半瓶晃的老猿(咖啡君就属于这类),他们崇拜技术,眼里只有编程,与编程无关的课一律filter掉,这类老司机往往偏科很严重。 拿咖啡君自己举个例子:大一大二一味地追求编程实践的学习,忽略了世界观决定方法论,因而轻视了理论的学习,最终荣获了如下的嘉奖: 大二《计算机组成原理》挂科,大三申请免听,在实验室一边做项目,一边补重修的课程大二《数据结构》课后没有认真复习,找工作前,知识点基本遗忘了一大半,花整整一个星期重拾《数据结构》大二《算法分析》上课不认真听课,至今对算法没有进一步的掌握或许看到这里的童鞋们会认为,重新学一下以前的知识也挺好的,而且花不了多少时间。但是这样的观点是形而上的,对于即将迈入工作岗位的老司机来说,时间就是资本。时间真的没有我们想象中的那样充裕,而且大学已经接近夕阳期,没有了当初大家一起学相同知识的那种氛围,没有了新知识的新鲜感,到那时候,你真的还能以把酒当歌之态去学习已经逝去的课程吗? 失去了,就真的很难回头了,请各位好好珍惜大学时光里学到的每一门课! 2. 不要等着老师来推进你的学习进度在大学这个挨踢圈里,流传着这样语句经典的话: 上大学前,看到电视剧里的大学生自学完大学的课程,感觉真的好厉害啊!如今回想起来,之前的自己真的是too young too simple!特么的哪个大学生不是自己自学大学里的课程的!入坑以后,最大的感触就是,大学的学习真的是靠自己的,不再有老师撵着说:“高考还有100天了,再不努力就来不及了。”我们不再是孩子了,自己的事情老师也不再会多做过问,学习是自己的事,真的需要靠自己!同理,如果各位童鞋们的志向不只是做一名搬砖工,在学习上,千万不能等着老师给我们讲书本上的知识。 举个例子,刚入坑的小伙伴们会学到《C语言程序设计》,如果老师开始讲基本数据类型的知识点,你就应该自学到函数和指针的知识点了! 挨踢圈的竞争是一场没有硝烟的战争,唯有快人一步,方能干掉千人! 同时强大的自学能力是必不可少的,各种百度、Google的搜索引擎是伴随你一生的自学工具! 3. 技术才是王道记得之前,在一篇博文中看到类似于这样的话:在腾讯百度,技术就是权威。 这样的观点其实在大学里就已经可见一斑。刚进大学的新生们往往会发现,一个班级里最受欢迎的往往是在班群里聊得最欢的那帮人;但是随着时间的流逝,那个曾经很受欢迎的童鞋们渐渐地不在群里发言里,为什么呢? 因为技术能力的不足使他失去了曾经谈笑风生的那份勇气和自信!转而之前不常说话的技术宅在班群里开启了一个个高格调的IT峰会论坛。而且猿猿们会发现,越接近毕业,班级里童鞋们的技术能力分化越大,最后造成这样的局面: 从截图中,我们可以发现,在班群里,一旦聊到技术,聊来聊去的总是那几只猿;甚至你聊的东西我听不懂,我聊的东西你没有接触过。 在大学里时间久了,我们还会遇到这样的情况:班级里总有那么几只学霸,每个学期绩点成绩总是在班级名列前茅,回回评奖三好学生优秀干部,但是到了真正做开发写代码的时候,就只能对着屏幕干瞪眼,或者两只学霸大眼瞪小眼。这样毕业的程序猿,与神舟笔记本电脑的高配低能如出一辙。 为什么会有这样的情况出现?因为还没有从高中的学习状态转换过来!这真的不得不归功于应试教育在广大学子心中的根深蒂固!送各位一句话: 纸上得来终觉浅,绝知此事要躬行!想提高技术,需要从实践抓起,多码代码! 4. 谦虚低调是常态或许你已经掌握了前3条的要领,或许你已经在学习的道路上领先他人,但是你需要知道人外有人,天外有天!挨踢圈是绝对不允许狂妄自大的无能者长存的,即使是C++的创始人——本贾尼·斯特劳斯特卢普也不敢自称自己完全掌握了C++这门语言,因此谦虚低调是我们深入学习IT技术的常态,引用乔老帮主在斯坦福大学演讲中的一句话送给各位: Stay hungry, stay foolish! 5. 规划好自己的技术路线在此之前,本猿想和各位分享一下自己所在院校的课程学习路线: 大一:C、C++大二:数据结构、算法、数据库、Web程序设计大三:Java、Android、Objective-C、IOS、.Net、C#、Oracle、软件工程、软件过程管理、软件交互设计、软件架构设计咖啡君根据自己所在环境,主观臆断,将技术路线分为如下几种:ACM算法、Web前端开发、后台、Android开发、IOS开发、C# PC端开发、.Net开发。比较热门的为上述前5种技术路线。 【ACM算法】算法的技术路线群体多见于高中有计算机基础的童鞋们,也有进入大学以后才接触计算机的童鞋们。想要在该技术路线上有所建树,需要该群体的小伙伴们有耐得住寂寞的沉稳;此路线入门容易,坚持不容易,有很多慕名而来的童鞋们因其“枯燥”中途放弃,能坚持下来的都具有做大事的意志。技术出路:BAT、网易等大公司的算法研发。 【Web前端开发】Web前端开发最基本的要求是对html、CSS、javascript的掌握,其特点是:入门容易、实现容易、优化不易、对知识面要求广。该技术路线要求童鞋们有较好的审美力,有对新技术的渴求以及对新框架的快速学习能力,因为Web前端开发迭代速度快,框架丰富,且每年都会有新的框架诞生。技术出路:各类大中小型企业,需求广。 【后台】后台主要为Web前段和移动端提供接口或数据源的服务和处理,该技术路线要求童鞋们对系统优化有很好的嗅觉,有一定的算法基础,且了解Linux操作系统及服务中间件等知识,因咖啡君对后台不熟,暂且不做过多讲解。技术出路:各类企业,需求根据企业自身业务逻辑变动,大型企业对后台技术要求较高。 【Android开发】Android开发学习成本高于Web前端开发,因其需要小伙伴们对Java基本知识有很好的了解和掌握。Android开发要求小伙伴们主要对如下模块有很好的运用:Java基本知识语法、文件存储、网络请求、多媒体、UI界面等;其学习难度不大,但是因为Android手机市场杂乱,手机生产商生产各类尺寸屏幕的手机,所以Android屏幕适配成了开发者们面临的一个头疼的难题。同时,优化也是Android开发者们需要面对的一个挑战。技术出路:各类需要手机APP产品的企业,需求一般。PS: 咖啡君从事Android开发,刚入职不久。 【IOS开发】IOS开发基于Objective-C或swift语言,其学习成本高于Android开发,因为APPLE公司的独家垄断,开发IOS需要小伙伴们有一台Mac电脑,但是中国的Mac电脑的价格并不是每一名小伙伴都能承受得起,因此很多对IOS感兴趣的小伙伴们,因为设备的原因,与IOS开发无缘。但是值得注意的是,IOS开发薪水普遍比Android开发的高。技术路线:各类需要手机APP产品的企业, 需求较大。 以上是咖啡君对列举的5类技术路线的简单介绍,刚入坑的小伙伴们可以在平时的学习生活中好好思考自己的出路,切记学习IT,在精不在广,贵在坚持! 在咖啡君的学习生活中,包括自己,有时候也会有东学学,西学学的现象,这周决定从此以后累死在Android开发的道路上;过几天突然对个人技术博客建站感兴趣,想要从事Web端开发;不久项目中有用到php写接口,觉得php语言不错,于是想转行后台开发。 其实这样的想法是很危险的,不坚定的立场和没有坚持下去的定力,到最后会一事无成! 还是那句话:在精不在广,贵在坚持! 6. 像猪吃东西一样学习知识看到这一条,可能有童鞋会提出这样的疑问:刚刚还说着在精不在广,如果像猪吃东西一样学习知识,看到什么学什么,精力就会散掉,到最后必然会一事无成啊? 其实这里强调的是:不要将自己的认识面局限于当前专注的领域。我们当然需要将自己的技术路线执行到底,但是我们不能因为自己学习的是Android就对Web开发漠不关心,各个技术路线之间都是相通的,之前出来的Native React看似Web开发方面的技术,但是其同样可以运用于Android的混合式开发。 或者说,如果有一天Android开发被另一项技术取代了,而我们对那一项技术浑然不知,我们就很可能被时代淘汰掉!因此,像猪吃东西一样学习知识,不求甚解,但求在需要用到的时候不至于太茫然。 PS: 当然,对于自己专攻的技术方向,不仅要知其然,更要知其所以然。 7. 薪水不代表你的能力终有一天,各位刚刚入坑的童鞋们也会有实习就职的那一刻。在大天朝,程序猿通过跳槽加薪的现象屡见不鲜。挂羊头,埋头肉,写着两年工作经验的简历,结果连优化都没有接触过,这样的现象不在少数。心浮气躁,追求个人经济利益的最大化,是如今大部分程序猿的通病。 咖啡君说这些话并不是看不惯跳槽加薪的现象,相反,如今房价那么高,想要过有房有车的生活,争取经济利益的最大化是理所应当,但是咖啡君想要强调的是,希望各位小伙伴不要被自己的薪水冲昏头脑,你拿着5K的月薪,不一定代表你能力不过关;你拿着15K的月薪,也不一定代表你真的有BAT那样的技术能力。 咖啡君想说的是,不要将自己的目光局限于拿到多少高的薪水,而是将关注点放在我的能力可以创造多少价值。 用《三傻大闹宝莱坞》中兰彻导师说的一句话与大家共勉: 追求卓越,成功就会跟着你走!

June 18, 2019 · 1 min · jiezi

码农如何学设计-Web-UI-设计学习心得

我的本职工作是后端开发工程师,记不清从什么时候开始对「设计」产生了兴趣,可是对「设计」领域知识的学习由于从小就受到固有思维的影响,甚至受到很多不正确教学方法的误导,在学习的过程中很容易让人产生自我怀疑,特别是对天赋的自我怀疑,从而慢慢的主动放弃。 本文结合自己的学习经历,从「什么是设计」开始切入,引出何选择设计工具,如何画下设计的第一笔以及随之而来的其他基础设计问题。希望这篇关于学习设计最初级的心得体会能给那些曾经跟我有类似兴趣的朋友们一些学习上的参考。 如果想成为一名高级的、或者艺术家级别的设计师肯定需要天赋。但是,对于大多数为了完成工作或者实现自己想法的基本设计能力完全可以通过自学学会的。 什么是设计?“设计是努力使现况接近期望的探索过程”,- by 著名建筑设计师:姚仁禄。与百科词条中对于“设计”的解释相比,我更喜欢姚先生的版本,言简意赅,直击重点。 好的思想都是相通的,不管是建筑领域还是互联网领域,对我们学习 Web UI 设计同样受用。设计并没有标准答案,通常也不是一步到位,好的设计作品大多是不断演化而成的。因此先认清现况是一个很有必要的步骤,能够帮助我们制定出更合理的期望/目标,避免好高骛远。 本文以「如何学习 Web UI 设计」为例子: 假定我们的现况/水平:新手制定出具体的期望/目标:设计一个博客网站最后,也是最重要的过程就是:付出实际行动,一步步将这个目标实现如何选择设计工具上一步已经确定了目标,下一个随之而来的问题就是:选择什么样的设计工具? 我很喜欢”随之而来“这个词,有些东西不需要刻意,只要你把当下想清楚之后,未来会主动找上门。设计工具有很多,Photoshop,Sketch,Adobe XD 等等甚至还可以直接用纸笔。 对于初学者的建议是:以最快的速度确定一款设计工具,哪怕是通过点兵点将、扔筛子的方式,重点是快速做出选择,然后付出行动,动手操作。 初学设计的时候我也很纠结,看了很多工具对比文章,甚至去看国外分享的工具对比视频。但是,当我真正开始动手去做一个实实在在作品的时候,发现设计的思想才是重点,工具之间无非就是有些软件对某些操作比较方便而已,等你亲自动手做过一次完完整整的设计作品之后就会发现,即使下一次做设计想换到其他工具也是很容易上手的。 如何在空白页面画下第一笔我们将要设计的博客网站最终需要在浏览器上显示,由于显示器屏幕有非常多的规格大小,小到手机上的浏览器、主流桌面浏览器、大到接近电视的超宽屏显示器 面对这么多的载体,会有很多问题随之而来: 如何让我们的网页能够在不同尺寸上都有比较理想的显示效果?页面上的内容应该居中对齐,还是左对齐,右对齐?如果是左对齐,应该距离左边多少?如果是右对齐,应该距离右边多少?...... 等等这些问题可以通过开启网格辅助线的方式解决,辅助我们做设计 随之而来的其他问题有了网格系统辅助我们做设计,可以大胆的画下第一笔。 可是,第一笔之后又有很多问题随之而来: 如果你第一笔写的文字,文字的字体、字号、颜色等等问题随之而来 如果你第一笔画的是形状,形状边框样式,背景颜色,阴影等等问题也会随之而来 一旦你开始第二笔,两笔元素之间的间距、对齐方式等等问题立刻紧随其后 这些问题是新手做设计最头疼的问题,是最容易产生自我怀疑的设计阶段。我在自学设计的过程中,也是参考了无数资料,做了大量练习,总体的解决思路无非下面一张图所示: 以颜色为例: 如果你有经验,这里说的有经验包括以下几种情况 不管经验是来自以往的设计经验,还是衣服搭配等等,只要你可以确定出自己最想用的颜色,就可以尝试用这种颜色及其衍生色做设计中的主要颜色公司的产品已经有品牌色来自其他的,任何可以让你不需要纠结就能确定出颜色的都属于有经验如果你没有任何经验 从现在开始,养成一个习惯:将平时看到的,自己喜欢的网站,收藏起来。收集资源是一个长期的过程,不一定等到要用了才去找从上一步收集的资源中,挑选出你最想要的配色或者变体色如果你不想参考任何其他网站的配色,那就用最简单的白底黑字去设计,但是记住一点:并不是只有纯净的黑与白,黑白之间还有很多不同等级的灰度色可以使用 动手操作设计是一门需要持续动手实践的技能,意淫多少篇都不如亲自动手实操一遍来的实在。 当你真正亲自动手做一次设计之后就会发现,哪怕只是设计一个简单的博客网站,也会遇到设计过程中90%的常见问题,而且这些问题跟你选择什么样的设计工具没有任何关系,重点在思想。有了想法之后,通过不断练习丰富自己的经验,同时完善自己的设计思想。 我已经将文章开头定下的「设计一个博客网站」的目标实现了,点击下方的链接查看完整实现过程 从 0 开始学设计、并将设计稿转成 HTML + CSS + JS 同时学习「设计」与「前端开发」基本技能

May 22, 2019 · 1 min · jiezi

码农深夜骑车逆行被拦后爆发大哭,称压力好大!

阅读本文大概需要 2.3 分钟。今天本来是准备发面经文章的,无意看到“小伙骑车逆行被拦后爆发”的视频,心里面堵堵的,挺心酸。事件大概经过如下:杭州一小伙骑单车逆行,被交警拦下后,小伙接了一个电话。没想到打完电话,小伙子当即摔了手机,彻底崩溃了。他情绪非常激动,大声喊着自己每天要加班到十一二点,自己的女朋友忘了带钥匙了,让他送钥匙,公司也在催他,两边都在催他,他真的觉得好累。暖心的交警们,一直陪在小伙身边,直到他情绪稳定后才离开。前几天的 996ICU 事件似乎无任何波澜,反正该通宵还是要通宵,该加班的还是要加班,似乎改变不了什么。码农,虽拿着高于其他行业的薪资,却终究还是底层人员!愿大家的孩子不是“码二代”!而是富二代!不管你们有没有感触,反正对我感触很大。完整视频(网上可搜索下,无法上传上来)网友们纷纷表示,太不容易了视频原文大致如下:3月25日,视频中的一幕发生在杭州文一路文菁路口附近,当时傅警官正带队整治电动车的交通违法行为,一位小伙因骑单车逆行被交警拦下。拦下男子的民警傅朝刚说,骑车逆行的小伙子看上去20岁出头,戴着眼镜,斯斯文文,凭他的经验,像是附近IT公司的“码农”。(躺着中枪)被拦下后,小伙子很平静的先给女朋友打电话“我逆向行车被抓了,现在走不了,你在那儿等我吧”。讲电话的时候还很平静,没想到挂了电话,意外的一幕却发生了……他一下子把手机摔在了地上!交警上前问小伙怎么了,小伙子当场崩溃大喊:“我第一次做这种事(骑车逆行),这边一直在催着我,我加班,我赶回去有事啊!”然后,小伙子突然跪倒在地,“求你们了,让我干嘛都可以,要罚款我交钱,我认了,身份证也给你……”。小伙失声痛哭!接下来,情绪愈发激动的小伙冲向了不远处的桥!因为担心他有轻生的念头,交警们赶紧放下手头的事,跑到河边把他拉了下来,劝小伙冷静下来,告诉他“没什么事的”。乍一看,估计这又是什么雷人男子要开始“卖惨”,但万万没想到,真相却让人感到心酸。原来,小伙崩溃中称自己压力好大,每天加班到十一二点,因为女朋友回家没带钥匙,他骑车是要给女去送钥匙,单位和女朋友都在催着他,他真的好烦,只想哭一下。暖心的交警说,“你发泄一下也可以的,我们可以在这里守着你”。小伙子蹲在桥边抱头痛哭了好几分钟,交警则蹲在一旁默默陪在他身边。几分钟后,待到小伙子情绪逐渐冷静下来后,民警对他说,“可以辞职,换一个轻松点的,都是要靠自己调节的,觉得累了就请假,上班不就是为了生活!”。小伙仍然是带着哭腔,说:“你们去工作吧 对不起你们,我真的只是想要发泄一下,我太烦了……”在大家的开导下,小伙的情绪也慢慢平复下来,还向交警道歉,称自己“平常也特别讨厌别人逆行”,并表示愿意接受逆向行车的处罚。一旁的交警最后拍拍小伙子的肩膀,“生活大家都一样,都是负重前行!”。最后,交警觉得小伙子没有骗他,也愿意相信小伙子是第一次骑车逆行,所以只对小伙子进行了教育,没有对他进行处罚。有人说,这样的女朋友还留着干嘛?也有人说,这样的公司还呆着干嘛?生活不易,且行且珍惜,我们不要用自己的眼光去吐槽他人,你所看到的永远只是冰山一角,少些吐槽,多些温暖~!也许他女朋友也很累!也许这份薪水是对他来说很重要!这样的文章你们不留言不点在看不转发朋友圈还愣着干嘛?·END·程序员的成长之路路虽远,行则必至微信ID:cxydczzl往期精彩回顾程序员接私活的7大平台利器Java程序员的成长之路白话TCP为什么需要进行三次握手Java性能优化的50个细节(珍藏版) 设计电商平台优惠券系统一个对话让你明白架构师是做什么的? 教你一招用 IDE 编程提升效率的骚操作!送给程序员们的经典电子书大礼包

April 3, 2019 · 1 min · jiezi

找了几天工作,发现好难,难道只想骂,草泥马的比

这些公司招人也不用脑袋想想,草泥马的3到五年都能成高级工程师,你麻痹的满大街都是高级工程师了,你们整天招人招人面试面试,草泥马的你们不用脑袋瓜子想一下能找到你这样要求的人才吗,三到五年能做到高级工程师的那他妈的要天天做项目而且是不重复的做,才有可能达到这个高级的水平,全中国这样的人才都很少……码农何必为难码农啊,更有公司狂到写代码不了看百度的,你他妈的逼的狂啥呀

March 19, 2019 · 1 min · jiezi