今天在技术群里看到关于优秀程序员特质的话题,让我想起多年前的一个同事,一个我最鄙视的程序员。
他的名字叫李伟(化名),是入职没多久的员工,我所在的开发二组和他在的一组,以前没有过工作交集。某一天上级安排我们两组人合作开发一个小额贷款项目,在基础服务上构建一个可以灵活对接多个贷款渠道的系统。

渠道对接层:承接渠道的原始数据,解密并解析为我方可以处理的格式和字段。每个渠道对应一个独立的微服务,调用业务融合层的接口,完成业务流程。
业务融合层:处理渠道编号和订单、还款等业务映射关系。融合多个流程整合到一个接口中,对外提供标准化的接口,类似中台的概念。
一组的组长安排他做了几个重要的事情,具体是定义订单、还款等接口,调用更底层的业务接口实现自己的接口业务。我们对接流量渠道,调用他定义的接口完成业务流程。通常新人做事难免磕磕碰碰,但是项目的时间很充裕,做一些重要的事情也能更好的展示自己的水平。我认为他的组长的安排没有问题。
我们先开会学习和讨论了产品流程,目的是让每一位开发人员都知道数据结构和走向。为了确保我们的进度,我建议他先给出接口定义,再找个会议室,双方评审一下接口,确认无误后通过maven发布依赖包,这样我们就可以填充代码了。他答应了先给接口定义,但是拒绝评审接口,理由是这个东西很简单,不用大费周章。我考虑了一下,等他给出接口定义,我们认为有问题就指出来,算是非正式评审。整整过了一周,他的接口终于来了,总共4个接口,每个接口里面有6、7个方法。这个事情拖延了一周,让我有点不快了。
他给接口的方式让人耳目一新,直接把接口源文件甩了过来。公司有一套采用RAP2搭建的API管理系统,还是他们一组牵头做的。作为一个新人,应该先熟悉公司有哪些辅助开发的系统,就算同事不告诉你,也要主动问。更妙的是,他的源码一行注释也没有,好在代码的英文单词都是常见的,我们勉强能看懂。
我们内部评审之后,发现有几个方法的入参有9个之多,于是建议他封装在一个JavaBean里面。
List<LoanOrder> queryLoanOrder(String channelId, String orderId, Integer userId, Bigdecimal minAmount, Bigdecimal maxAmount, Date startTime, Date endTime, Integer pageSize, Integer pageNo);
他有些不悦,认为意义不大,缺了参数继续加就行。毕竟不是我管理的人,我不想花心思教育,只说这是公司代码规范,希望他务必改一下。他不情愿地改了入参,结果都变成了JSONObject。
List<LoanOrder> queryLoanOrder(JSONObject jsonObject);
我问他为什么要用JSONObject,得到的回复是:这样更灵活,往JSONObject里面 put key / value 就能增加参数。我直接来个灵魂三问:1. 必须要看文档才知道key是什么,value的类型是什么,而你又不给文档;2.采用不明确的入参,Hibernate Validator肯定用不了,打算怎么做参数校验;3. JSONObject有什么特别之处?用Map也是一样的。在我的拷问之下,他又屈服了,改成了JavaBean。如果他有足够的理由说服我,我倒是敬他是条汉子。
进入接口联调阶段,我们的同事事先跟他约好周二下午四点联调订单接口。到了周二下午,我们调了几次订单接口,发现返回结果不理想,把数据发给他看看。
“接口实现我还没写好呢,结果当然不正确。”
“那你为什么答应联调呢?”
“只是联调,调通了就行,为什么一定要完全正确?”
“什么时候可以完全正确呢?”
“提测之后,测试人员测出问题了,我就改改。”
我意识这个人不行,马上跟他的组长反馈了问题。再与他沟通的时候,表现的更不积极了,无论事情大小,都要一催再催。我有查阅所有相关项目代码的权限,闲来无事看了看他的代码。在一个订单接口实现里面发现这样的写法:
if(orderId == null || orderId.length == 0) {
throws XXXX;
}
我友好的提醒了他:StringUtils的运用是基本功,这个写法可以改成StringUtils.isBlank(orderId)。
"不是一回事吗?"他淡淡的回了一句。
"代码能跑,只是底线,不是及格线",我终于愤怒了。
后来,一组组长让他走人了,没过试用期。这是我见过基本功最差、态度最不端正的程序员。我不知道他怎么被招聘进来的,招聘流程肯定有问题,他的组长也有失职之处。
我需要在客户计算机上运行Ruby应用程序。通常需要几天才能完成(复制大备份文件)。问题是如果启用sleep,它会中断应用程序。否则,计算机将持续运行数周,直到我下次访问为止。有什么方法可以防止执行期间休眠并让Windows在执行后休眠吗?欢迎任何疯狂的想法;-) 最佳答案 Here建议使用SetThreadExecutionStateWinAPI函数,使应用程序能够通知系统它正在使用中,从而防止系统在应用程序运行时进入休眠状态或关闭显示。像这样的东西:require'Win32API'ES_AWAYMODE_REQUIRED=0x0
Rackup通过Rack的默认处理程序成功运行任何Rack应用程序。例如:classRackAppdefcall(environment)['200',{'Content-Type'=>'text/html'},["Helloworld"]]endendrunRackApp.new但是当最后一行更改为使用Rack的内置CGI处理程序时,rackup给出“NoMethodErrorat/undefinedmethod`call'fornil:NilClass”:Rack::Handler::CGI.runRackApp.newRack的其他内置处理程序也提出了同样的反对意见。例如Rack
我想用ruby编写一个小的命令行实用程序并将其作为gem分发。我知道安装后,Guard、Sass和Thor等某些gem可以从命令行自行运行。为了让gem像二进制文件一样可用,我需要在我的gemspec中指定什么。 最佳答案 Gem::Specification.newdo|s|...s.executable='name_of_executable'...endhttp://docs.rubygems.org/read/chapter/20 关于ruby-在Ruby中编写命令行实用程序
我构建了两个需要相互通信和发送文件的Rails应用程序。例如,一个Rails应用程序会发送请求以查看其他应用程序数据库中的表。然后另一个应用程序将呈现该表的json并将其发回。我还希望一个应用程序将存储在其公共(public)目录中的文本文件发送到另一个应用程序的公共(public)目录。我从来没有做过这样的事情,所以我什至不知道从哪里开始。任何帮助,将不胜感激。谢谢! 最佳答案 无论Rails是什么,几乎所有Web应用程序都有您的要求,大多数现代Web应用程序都需要相互通信。但是有一个小小的理解需要你坚持下去,网站不应直接访问彼此
我尝试运行2.x应用程序。我使用rvm并为此应用程序设置其他版本的ruby:$rvmuseree-1.8.7-head我尝试运行服务器,然后出现很多错误:$script/serverNOTE:Gem.source_indexisdeprecated,useSpecification.Itwillberemovedonorafter2011-11-01.Gem.source_indexcalledfrom/Users/serg/rails_projects_terminal/work_proj/spohelp/config/../vendor/rails/railties/lib/r
刚入门rails,开始慢慢理解。有人可以解释或给我一些关于在application_controller中编码的好处或时间和原因的想法吗?有哪些用例。您如何为Rails应用程序使用应用程序Controller?我不想在那里放太多代码,因为据我了解,每个请求都会调用此Controller。这是真的? 最佳答案 ApplicationController实际上是您应用程序中的每个其他Controller都将从中继承的类(尽管这不是强制性的)。我同意不要用太多代码弄乱它并保持干净整洁的态度,尽管在某些情况下ApplicationContr
我是一个Rails初学者,但我想从我的RailsView(html.haml文件)中查看Ruby变量的内容。我试图在ruby中打印出变量(认为它会在终端中出现),但没有得到任何结果。有什么建议吗?我知道Rails调试器,但更喜欢使用inspect来打印我的变量。 最佳答案 您可以在View中使用puts方法将信息输出到服务器控制台。您应该能够在View中的任何位置使用Haml执行以下操作:-puts@my_variable.inspect 关于ruby-on-rails-如何在我的R
如何检查Ruby文件是否是通过“require”或“load”导入的,而不是简单地从命令行执行的?例如:foo.rb的内容:puts"Hello"bar.rb的内容require'foo'输出:$./foo.rbHello$./bar.rbHello基本上,我想调用bar.rb以不执行puts调用。 最佳答案 将foo.rb改为:if__FILE__==$0puts"Hello"end检查__FILE__-当前ruby文件的名称-与$0-正在运行的脚本的名称。 关于ruby-检查是否
是否可以在应用程序中包含的gem代码中知道应用程序的Rails文件系统根目录?这是gem来源的示例:moduleMyGemdefself.included(base)putsRails.root#returnnilendendActionController::Base.send:include,MyGem谢谢,抱歉我的英语不好 最佳答案 我发现解决类似问题的解决方案是使用railtie初始化程序包含我的模块。所以,在你的/lib/mygem/railtie.rbmoduleMyGemclassRailtie使用此代码,您的模块将在
前言作为一名程序员,自己的本质工作就是做程序开发,那么程序开发的时候最直接的体现就是代码,检验一个程序员技术水平的一个核心环节就是开发时候的代码能力。众所周知,程序开发的水平提升是一个循序渐进的过程,每一位程序员都是从“菜鸟”变成“大神”的,所以程序员在程序开发过程中的代码能力也是根据平时开发中的业务实践来积累和提升的。提高代码能力核心要素程序员要想提高自身代码能力,尤其是新晋程序员的代码能力有很大的提升空间的时候,需要针对性的去提高自己的代码能力。提高代码能力其实有几个比较关键的点,只要把握住这些方面,就能很好的、快速的提高自己的一部分代码能力。1、多去阅读开源项目,如有机会可以亲自参与开源