
在我眼里,也经常会把程序员分成两类:一种是我等这种写业务代码的程序员,另外一种是研究高深算法、造“轮子”的“科学家”
将他们称之为科学家是有些夸张,第一次冒出这样的想法是参加一个技术大会,当别的嘉宾都在分享开发、设计、架构、管理方面的经验时,一名在腾讯工作的算法工程师(应该已经是一个小领导了),他上台分享了一些诸如:滑动平均自回归模型、神经网络基因表达式编程、SVM回归机集成学习坐在台下的我第一次冒出这样的念头:“这是科学家研究的东西吧。”
当然,倒也不能说写业务代码就很 low,写业务代码也不是想象中那么简单的。
写业务相关的代码,必须了解业务流程,还需要了解业务人员心里是怎么想的,也就是业务出发点是什么样子的。
比如我最近遇到一个需求,过程大概是这样的:销售人员在卖一款产品,这款产品非常火,有些优秀的销售人员一周可能能卖出去几百上千单;结果我们接到一个需求,要限制每个代理人的销售数量,比如每人只能卖 10 个(之前已经卖掉的不算);这就让我们非常奇怪,本来卖的好好的,为什么要做这个限制呢?这个需求看起来就非常的不合理。
后来业务人员和我们解释了一下原因:因为这款产品公司不挣钱,销售人员为了推这个产品,花在别的产品上的时间就少了,所以出这个功能,就是让销售人员“收收心”,把精力放在其他产品上。
这么一解释,我们就立刻明白了;所以如果你不明白业务的时候,看着需求敲代码也是非常容易出错的。
有些人会认为业务逻辑就是一堆 if-else,但是我认为在实际工作中,这些 if-else 也是非常难做到的。
业务逻辑是人设计的,业务逻辑难不可怕,可怕的是它不严谨和变化快;业务逻辑和那些确定性的东西不一样,比如我们写好的代码 if-else 两个分支,那么再怎么也不会跳出这个范围,业务逻辑就不一样了,它是非常灵活的、不确定的,业务机会来的快消失的也快,我们很难开发出来一套全面的、完善的、灵活的的系统,去应对将来可能会发生的需求。
所以在开发过程中,如果可以将业务流程拆分成多个组件模型,组件和组件配合完成一个完成的业务流程;当业务发生变化或有新业务的时候,只需要重新编排这些组件,或对某一个组件做少量更改,就可以满足业务变化;如果能做到这个程度,也是非常不容易的。
在这个过程中,你需要做到高内聚低耦合,避免过度抽象,从业务流程和动机出发,已满足业务需要为主;既然做不了“科学家”,我们就努力把业务代码写好把。
我将持续分享Java开发、架构设计、程序员职业发展等方面的见解,希望能得到你的关注。
首先,我认为写业务代码不“low”,但是大部分不假思索拷贝粘贴的业务代码比较“low”,换句话说就是所谓的五年工作经验就是把第一年的工作重复了五遍。
技术人员成长一般有两条线,一条是成为技术专家,一条是成为领域专家。所谓的转管理我理解也就是领域专家,毕竟不懂得领域知识是无法做好管理的,比如说你是互联网金融某个业务部门的leader,那么你肯定要懂金融。领域知识就是在不断的写业务代码和思考中积累起来。
还有一个问题就是如何定义业务,比如说“实现一个修改订单功能”,这是一个业务需求,看起来很low,但是如果业务需求改成“实现一个修改订单功能,要求在有限资源的情况下并发10k,响应时间不高于10ms”,那这个需求就有挑战。说这个问题想说明白一件事情,如果做业务不要停留的在业务表面,仅仅满足于实现功能,要主动思考。
最后总结一下,没有最好的技术,只有最适合业务的技术。技术是内功,业务是招式,内功不足,后续成长乏力,没有招式,内功也不能发挥威力。这是也很多互联网创业公司做大了之后要技术转型的原因。
作为一个程序员,我也是写代码的,我不觉得写业务代码很low。
1首先大家所认为的业务代码就是一些和业务相关的增删改查,涉及到的技术点相对来说是固定的,写熟了之后,就是复制,粘贴,不存在什么技术阻碍,很多人就觉得非常的简单,没有技术含量,做这些工作的人也显得非常的low,如果你也是这样认为的,那你就错了,因为写业务代码的基本都是初级,中级的程序员,工作经验有限,不具备写一些公共方法和接口的能力,但是并不代表以后能力不会提升,如果持续努力,也会成长为高级程序员或是架构师,谁天生就是高级程序员呢,不都是一点点积累起来的吗?而且就算是写业务代码也不能就是low呀,有些业务场景是非常复杂的,逻辑必须十分严谨,稍有差错可能就会出现bug,对公司造成巨大的损失,不是写业务代码就是很容易的。
2除了业务代码就是非业务代码了,比如开发数据库,开发框架,或是写一些公共的方法或是接口,供初级开发者调用。写非业务代码的人技术也不一定就非常的厉害,因为就算是开发框架或是数据库之类的项目,也不一定都是高级开发,也会有一些水平较低的开发,因为写业务代码还是非业务代码和项目也有关系,如果你们团队开发的是开发框架或是数据库这种的项目,那么你们团队没有人写业务代码,也不能说明你们团队每个人技术都很厉害,只是项目性质不一样罢了。
3业务代码这个词看你的理解吧,我认为其实所有的代码都可以成为是业务代码,无论开发什么产品,都是有业务需求的,有了需求才有开发的动力,对于开发数据库来说,数据库的需求就是业务,对于开发框架来说,框架的功能就是业务,所以我认为广义上来讲都是业务代码,没有非业务代码这一说,所以具体看你认为业务的定义是什么了。不过无论如何也不应该去嘲笑或是去贬低别人吧,嘲笑或是贬低一类人就更不应该了。
业务程序开发相对于底层基础架构层的程序开发有所不同:
业务开发的时间比较紧,变化快。
这个特点导致程序员没有时间重构代码,或者不愿意重构代码,而是用最简单粗暴的复制黏贴的方式快速实现业务逻辑。其实所有的复制黏贴都意味着需要重构。
底层系统的开发,一般是架构师和高级程序员来设计和控制项目时间。相对来说,开发周期长,变化缓慢。会更加注重架构的合理性和稳定性,而且会不断重构和改进。
业务开发一旦完成,只要平稳运行就不会有人再回来补技术债务,不会把它写得更好。除非这个业务爆发了,不得不从新架构以支持更高的并发。如果上线之后表现不佳,很可能下线不再维护。所以公司也不太愿意花太多精力在一个还没有被市场认可的产品项目上。
而底层架构框架的项目会在不同的产品项目中不断应用。不断地进化。就像Spring之类的开源框架一样,不断的升级和完善。
相对来说,业务开发程序员会花大量的时间学习和理解业务知识;而底层框架程序员更多的时间在学习技术架构。如果业务知识在行业内通用,比如财务,金融行业知识。那么长期的积累对业务开发也是很有帮助的。如果业务是很小众的,甚至,这几个月做这个业务,下半年又做另一个业务,做的时候也一知半解,就像很多外包一样,那就没有什么业务沉淀了。
不要太在意所谓low与不low,需要在意的是做了这个项目或业务后,对自己的能力有没有长进,如果有,那说明不low。如果没有,那说明你只是在机械的劳动而已。
每个大佬都是从业务代码做起的,大佬们注重的是能否成长,学习实践的机会,以及平台的大小和未来是否和自己的目标相匹配。
总结来说,只要能提升自己能力的任何工作,都是值得的。
我觉得首先大家要理解什么是“业务代码”,业务代码是一个相对的概念。
1对于一个一般的物联网应用型公司来说,业务代码就是根据客户需求基于一个MCU或者MPU的应用控制逻辑的实现。
2对于一个做纯上层应用的公司来说,业务代码就是基于一个 *** 作系统为客户量身定制对应的app,并实现对应的应用逻辑。
3对于一个微型控制器设计厂商,业务代码就是底层架构裸机的具体实现和各个外设驱动的框架设计。
4对于一个设计 *** 作系统的开发人员来说,业务代码就是架构设计、内存管理、调度机制优化、优先级管理、进程间通信机制优化、线程管理和内核完善等等。
所谓”业务代码”都是相对的,没有参考系怎么谈。像 *** 作系统,站在 *** 作系统内核提供方的角度看,上层所有的应用框架,进程服务,都是业务代码,我是为他们服务的。技术只是工具,业务实现才是目的,站在不同供应商的角度,只要涉及代码的地方都可以称之为业务代码。所以站在这个维度,如果要说业务代码“LOW”,那就没有代码是不"LOW"的了。
不过,真正接触底层或者实现RTOS底层业务框架的工程师其实是很少的。大部分工程师基本上都是对于客户需求做一些非驱动底层非 *** 作系统框架的应用型的开发,所以大多时候“业务代码“又单一的被指向了那些只是对客户的上层应用的需求做开发、调整或者迭代的代码。
而这部分代码究竟"LOW"还是不"LOW"呢,我的答案是:不"LOW"。但是现实却是很“LOW”,之所以会被想成LOW,是因为:
1判断一个程序员的优秀程度已经不单单看你写了多少应用型的代码,设计了多少应用框架,而是你懂不懂底层驱动逻辑,懂不懂 *** 作系统内核,懂不懂内核裁减等等。所以这种情况会经常出现在面试过程中,面试官会因为你不懂底层驱动、不懂内核而给你比较低的薪水。
2懂得写业务代码的人,他的程序员基础并不一定就牢固。因为上层应用可能对业务比较看重,但是对于一些特定的语言的编程并没有那么严谨。能用就可以,所以会自然而然的认为这样的程序员“LOW”。而一个会写底层驱动的人,他考虑更多的是基础代码的安全、严谨性和容量问题等等,他们的语言基础相对来说要牢固很多。
3技术负责人一般都是全能型的人。会写底层驱动或者更懂 *** 作系统内核的人更容易成为技术的领头人。而那些只会“业务代码”的人,放在大部分公司,一般都不会有太多的上升空间。
根据以上分析过后呢,做“业务代码”的程序员基本上会被想的很“LOW”,但是结合我的亲身经历,不同的人对于这个事情却会有不同的看法。
比如对于领导来说,那就不一样了。你将“业务代码”的需求迭代了,完善了,提前任务完成了,客户很满意。那领导不会认为你是一个很“LOW”的程序员。你很高级,领导很欣赏,“后果”很舒服。但是对于一个面试官来说,你就会点上层应用的调用和设计。我为什么要给你这么多薪水?虽然会被想成很"LOW",但是也是现实。
业务代码不一定low,能完成用户需求的代码就是好代码。
另外,对于我们搞嵌入式软件、EDA工具软件的来说,业务软件反而是更有技术含量的,更具科学意义的代码,而软件可能只是载体,你啥时候透过代码理解了它们背后的物理概念、数学公式,你就超越了程序员,能向科学家又迈进一步。
互联网软件其实也一样,软件实现的是一个业务流程的自动化,你完全可以透过你写的程序还原甲方用户的业务流程,而这种流程是老板制订的,认识会上一个层次,将来可以向老板迈进
我发现很多程序员对于处理业务逻辑都是「嗤之以鼻」。感觉自己天天写业务逻辑代码,改 Bug 都没有时间学习,没有时间实现个人成长?
但是,作为程序员来讲,如果不是做底层基础技术研发的话,大部分的工作不就是做这些拧螺丝的工作吗?其实拧螺丝有那么容易吗?可能拧螺丝很容易,但是拧好螺丝就不那么简单了。
别小瞧业务逻辑代码,如果真正写好,要把逻辑写得清晰简单易用,功能健壮稳定,性能同时达到要求的话,其实是挺难的。
其实很多程序员都跟他一样,都在痛苦的编程,一方面对自己有更高的要求,一方面又嫌弃现在写的代码没有技术含量。又有更高的要去和希望,又嫌弃现在的工作,就是不思考出现的原因,不去付诸行动。还不停的抱怨: 感觉自己天天写业务逻辑代码,改 Bug 都没有时间学习,没有时间实现个人成长?
到这里,我们不禁一问:那我们该如何摆脱这种现状呢?其实很简单,我们应该摆正自己的态度和观点,正确看待写业务逻辑这些代码就行了。
坚持不懈的写好业务逻辑代码
就像我在上面说的: 别小瞧业务逻辑代码,如果真正写好,要把逻辑写得清晰简单易用,功能健壮稳定,性能同时达到要求的话,其实是挺难的。
所以,我们要正确看待写业务逻辑的代码,应该摆正心态,坚持不懈的去写,所谓量变引起质变,就是这个道理。写业务代码,积累代码量,一力降十会,在积累了巨量的代码量之后,几乎任何所谓的有技术含量的东西都构不成挑战性。当然,要想真正的通过自己写业务代码,写好业务代码还应该有接下来的这个思考。
业务逻辑代码同样可以玩出很多花样
其实业务逻辑代码一样可以玩出很多花样,而这才是能够提升你能力的本质。比如:你写了一个处理单任务的业务逻辑,虽然满足了用户的需求,但是你这时能不能对自己有一个更高的要求呢?单任务虽然是功能实现了,但是效率可能不行,处理慢,那搞个多任务处理的逻辑怎么样?任务池、线程池、内存池、并发、同步等等这些技术点都来了。如果你对自己有这样的要求,而你自己有追求的话,就会进一步思考如何去做到这些,你做到了,你能力就提升了。
同样,很多人感觉处理业务逻辑,就是一些各种循环,条件判断,只要逻辑稍微严谨点,功能就都没问题,就都实现了,确实是这样的。这就是你对于业务逻辑没有兴趣的根点所在。
那你为什么不想想: 如何使用循环和条件判断可以提升效率呢?满足了功能的那些需求,是不是有些地方可以优化一下呢?是不是可以提升一下性能呢?
其实,这个技术的进步和积累,就在于自己内心对自己有没有更高的要求和追求。这是大实话,也是大白话。很多人就感觉只要实现了功能需求就够了,满足了用户就行了。然后,这个项目完事了,下个项目遇到差不多的逻辑,还是这么处理,又完事了,每个项目,每个功能都是这样重复的处理,从来不思考最优的实现方式,你感觉能够进步吗?你能不烦气吗?十年如一日的工作,10 年也就积累了一年的工作经验,在重复使用。
业务逻辑的最优方式,就是思考如何大道至简
通过一个业务逻辑实现一个功能,基本上只要是程序员,脑子不笨,都能做出来,做出来是一回事,但是做好是另外一回事。大道至简,我们要做就得想办法做到最好。这里的好有很多层意思。
比如: 你写的业务逻辑代码 是否能够做到准确,稳定,高效,易读,易扩展,易维护,兼容性强呢? 问自己一句,如果你能做到这些,那确实是好。如果做不到,你还是处理初级水平,当然不行,这就是你在工作中提升能力的机会。别说没时间,都是借口。
精益求精是对代码大道至简的永恒的追求,也是我们在处理业务逻辑代码中不断提高自己能力的过程。
明明自己水平初级,就容易骄傲自满,感觉可以了,我想学更高的技术,那么更高的技术是自己在处理业务逻辑中一步一步积累出来的,不是干了初级的活,不用积累,直接学高级的技术,就能高级了。
我特别喜欢网上有个网友写的一段话:
其实很多技术大牛和技术专家,都是从业务逻辑做起,慢慢积累思考起来的。比如:在处理业务逻辑之前,会思考如何设计这个架构,可以让代码更好的扩展和维护。在处理业务逻辑的时候,思考如何的处理才能提高性能和效率?一步一步的实验和总结,积累,才成就了今天的成绩。
所以,不要对处理业务逻辑嗤之以鼻,不要以为能够满足需求就够了。你重复不思考的粘贴和复制肯定是不行的,必然会对编程失去兴趣,自然无法更好的成长和进步。应该在编程的过程中追求更高的要求,寻找更高的兴趣,这样才能让你持续进步,从而进阶。
林子大了什么鸟都有,不知道你说的有人是指多少比例的人。我的理解代码可以分为两类:1:工具栏或者框架类2:业务类。写工具类偏重于健壮可拓展可复用;写业务类偏重于逻辑严谨没有漏洞,化繁为简。毕竟有些时候需求或者业务都不甚清楚他们想要的逻辑。有时候复杂的业务流程你捋都不顺,更别说代码写的好了。当然,工具类到高深,工具好用,框架优秀确实需要的技术功底深厚,比业务类要考虑的东西也多,但不代表写业务类代码很low。当然,不管写什么代码,完全复制黏贴而不去考虑与实际场景结合,不去想为什么?有没有更好的处理方案是比较low的
天天给我讲技术栈,让你这个业务代码,半个月搞不定,然后又bug一大堆。业务代码培养人的逻辑思维和全局控制,这个是基础没有捷径。至于技术,外面一大堆,看你怎么选择。
1 安装JDK 下载 jdk-6u24-windows-i586exe 然后双击安装,选择默认位置安装即可 默认安装C:\Program Files\Java\jdk160_24 2 配置jdk 安装完成以后,在桌面右键点击“我的电脑”,选择“属性” 然后选择“高级系统设置”,选择“环境变量”新建系统变量: 变量名(N):JAVA_HOME 变量值(V):C:\Program Files\Java\jdk160_24 变量名和变量值按照上面的,对于路径的选择最好打开电脑中的路径后复制过去,防止输入有误: 找到安装路径复制地址栏的路径,然后黏贴到变量值即可。对于这一点,下面凡是涉及到路径的必须如此,否则因为人为输入造成的痛苦自负O(∩_∩)O~ 选择path变量,如果没有的话请自己新建,一般会有path变量 对于添加的路径(变量值):对于不同的路径务必加上:“;”这个分号是不同路径的隔开符号,如果缺少的话,jdk配置也许可以成功,但是后面的jar调用将面临灾难O(∩_∩)O~ 这里要添加的路径为: ;%JAVA_HOME%\bin;%JAVA_HOME%\jre6\bin; 如果在添加前 已经有别的路径 那么前面一个;必须要有,对于最后一个; 可有可无。 新建变量:CLASSPATH 这里的变量值如下: ;%JAVA_HOME%\lib\dtjar;%JAVA_HOME%\lib\toolsjar; 注意这里的每一个符号 最前面的 代表当前目录,不能缺少 到此为止,我们已经完成jdk配置前期工作 接下来需要验证是否配置成功 Win7 下 输入cmd 回车后会出现DOS界面 然后 输入javac 如果出现如下界面 那么恭喜你,jdk配置成功 这里提醒一下,虽然在这里jdk配置成功,但是我们在最后编写helloworld程序的时候还需要验证这一步环节。 如何出现其他情况,请你仔细检查上面的环节是否出现问题,核实之。 1 安装Android SDK 下载android-sdk-windows_331-allrar然后直接解压到以上目录下 点击"我的电脑" ->"属性"->"系统属性"->"高级"->"环境变量"(这步跟配置JDK环境类似)->"系统变量" 然后点击下方的"新建" 然后在对话框中的"变量名"中输入SDK_HOME,在"变量值"中舒服刚才目录也就是 D:\sdx\jobInstall\android 这个目录 3找到path的变量然后点"编辑"在变量最前端中加"%SDK_HOME%tools;" 记得分号一定要加上!相对于一个完结符号!其实 这个路径指的也就是D:\sdx\jobInstall\android\tools 一样!(我个人理解) 4选择[开始]|[运行]命令 在[运行]中输入cmd 并按回车键 然后在窗口输入android -h 如果出现下面的图一样的数据那恭喜你已经配置完成了,并成功了! 反之! 下载eclipse-SDK-352-win32zip,解压到D:\android下,下载 ADT100。 然后运行eclipse,接着离线安装ADT100 选择help-----install new software 选择add 然后出现一下对话框 路径选择好了以后 接下来安装,选择下一步安装即可 创建子目录d:\android\workspace,用于保存Eclipse的工程。在第一次启动Eclipse时,将此目录设置为workspace的默认目录。 配置ADT插件:启动Eclipse,点菜单Windows-->Preferences-->Android,在SDK Location中添加上一步的Android SDK的存储路径d:\android\android-sdk-windows 现在Eclipse工具栏中多了一些东西: ,这就是我们安装插件的效果。点击模拟器(向下箭头的按钮)的按钮,出现配置界面,今后的软件更新也可以在此处进行: 选择Virtual Devices-->New就可以新建一个新的Android模拟器,因为手机版本不同,版本提供的服务也不同,所以要建立多个模拟器来测试: 然后Create AVD就可以了。随后选中模拟器的版本,点击Start就会出现模拟出来的手机界面了
你是说通知里别人回答你的提问的系统提示通知无法点进去?
很多你看到回答提示却打不开 回答,是因为他回答你了
但系统判定他的回答为伪归所以删除了。所以你看不到
通常是min感内容,词语有伪归嫌疑, 或者复制黏贴别人的回答所以被过滤掉了
所以只是暂时看不到,等人工审核后没问题的话你就能看到
不确定。
因为paperpass跟知网收录的论文库是有差别的,有可能paperpass未收录的论文,在知网却被收录了,这种情况是很常见的,有很多同学在paperpass查重得到的数据是低于20%,而在知网上却大于60%,这些都是常事。
paperpass是以句子为单位,而且不能识别目录、标题、参考文献,会通通标红,并且的确会如你所说,出现你根本没有抄过的、无关的文章;知网是以段落为单位,目录、标题、参考文献可以自动识别。两者算法也不同。因此,paperpass的重复率一定是高于知网的。
也就是说paperpass比知网严格。用paperpass测出来18%,学校用知网要求20%,肯定能过的。即使没有把参考文献贴进去。因为知网不会把参考文献作为抄袭率。
扩展资料:
由于存在引注格式不统一、参考文献格式不规范、虚假引用等问题,PaperPass为了给用户提供最严格、最负责的检测结果,将不再区分“相似”和“引用”。PaperPass检测系统是在论文修改环节为用户提供修改依据的工具,系统所显示的相似部分(红字)是否属于正常引用将保留给用户自行审定。
另外PaperPass也是全国最大的论文检测技术提供商,已经为众多的机构和检测系统提供技术方案。所以通过PaperPass的检测后,可以通过其它检测系统的检测。
参考资料来源:百度百科-PaperPass
1、终端
mac能把ctrl+c和command+c(mac上的copy快捷键)分开,这个体验比windows终端舒服太多。
mac上可以直接用ssh跟服务器传递文件,在服务器上使用scp反过来远程连接自己的mac,可以绕开jump机,然后可以正则传文件。brew装点东西比windows方便,不过这个不太重要,毕竟环境搞好了,不太经常需要brew。
2、Terminal & TotalTerminal & Zsh & Ohmyzsh
程序猿用Mac的一个很关键原因就是MacOS是一个UNIX系统,可以很方便的模拟Linux服务器环境。配合zsh 和 ohmyzsh,在同事面前不要太炫酷。
配合TotalTerminal is a system-wide terminal accessible via a hot-key 的快捷键呼出功能,简直是如虎添翼。
3、kerbores
不在时需要开客户端,开kerbores客户端,然后开终端连接服务器。mac上的话,kerbores直接脚本解决了,不用鼠标点来点去。
Mac下写C、C++的系统程序一般情况下都可以直接移植到Linux下运行,这点非常的方便,当时 auxten/gingko · GitHub 、auxten/gko_pool · GitHub就是在Mac下写好才放到Linux运行的。
Mac的 *** 作系统是macOS,这个基于Darwin的核心系统增强了系统的稳定性、性能以及响应能力。它能通过对称多处理技术充分发挥双处理器的优势,提供无与伦比的2D、3D和多媒体图形性能以及广泛的字体支持和集成的PDA功能。
OS X通过Classic环境几乎可以支持所有的Mac OS 9应用程序,直观的Aqua用户界面使Macintosh的易用性又达到了一个全新的水平。
一、先列三个常见的开发场景:
1、拿到一个模块详细设计文档,大部分程序员的通常做法就是开始搭建界面代码,然后从第一个按钮点击事件或页面Load事件开始写第一行业务代码。写的差不多了,就运行一下,发现哪里不是自己想的那样,就改改,直到改到是自己预想的那样。
2、做完了一个功能模块或几块相关联的功能模块,输入111asd,发现新建正常、保存正常,就提交给测试人员。测试员用测试用数据、测试场景用例来测试,发现有问题,就登记bug。对于严重的影响下一步测试的BUG,测试员就用内部IM通知这个开发人员。对于不影响继续往下测试的BUG,测试员就登记下来,等程序员有空时处理。
3、程序员一般工作不希望大家打扰,所以开发起来就是开发。等手头开发告一段落,就看看BUG库。发现有与自己有关的BUG,就从第一个BUG开始看起。就开始通过IM和测试员掰扯起来(这不是个BUG啊、业务逻辑不是你想的那样啊、我这里不能重现啊、你给的信息描述不清晰啊),于是IM几来几往,甚至跑过去当面交流一番,甚至会拉扯上产品经理一起讨论,更甚者需要项目经理或产品经理发起一个会议来集体讨论一下
这是不是很熟悉呢看这就是大部分程序员开发的三个步骤:写代码、自测、修复BUG。
二、说好的代码设计、代码测试呢看
代码设计看那不是都有开发平台么,已经固化了啊。那不是维护旧功能做完善修改呢么,又不是写新代码,只能在现有代码基础上修改啊,你又不能大幅重构。
代码测试看你丫需求讨论期、产品设计期、设计评审期那么长,都把研发项目时间占光了,就留下2个星期让我们写代码,我们哪里有时间搞那么深的测试。还想让我们搞结对编程看还想让我们搞测试驱动开发看
而且你看测试,什么功能测试、集成测试、性能测试、安全测试、安装部署测试、升级测试、迁移测试、UAT测试,一大堆测试,测试也需要很多时间。
一个项目,需求讨论、产品范围规划与评审、产品设计与设计评审占了一个半月,开发+自测就一个月,测试占了一个半月,这就4个月了啊。
三、为啥程序员写代码总是写写测测看
刚才大家也都看到了,大部分程序员都是从界面代码开始写起,而且写一写,就运行一下看看。为什么会是这种开发方式看
那是因为大部分程序员缺乏在脑子中的整体建模能力。只能做出来一点,真实的感觉一下,然后再往下。
有些是产品经理的上游就有问题,没给出业务流程图(因为产品经理也没做过业务),也没画清楚产品功能 *** 作流程图。
为啥没给出业务流程图看因为产品经理不熟悉业务,另外,产品经理也没有流程建模能力啊。为啥没画清楚产品功能 *** 作流程图啊看因为不会清晰表达流程啊。
很多产品经理、程序员,都缺乏分类、分层、相关、先后能力,更别说总结、洞察能力。
这是基本训练,是一个做事头脑清醒的人必备的技能,这不是一个程序员或产品经理或测试员的特定技能要求。
我经常看书就梳理书的脉络,每看一本就写一篇总结。我过去闲扯淡还梳理过水浒传、红楼梦的人物关系图呢,其实就在事事上训练自己的关联性、层次性、洞察性。
我经常面试一个人时,我会问这样的问题:逗你把我刚才说的话复述一遍,另外你再回答一下我为什么会这样看地,其实,我就在看一个人的细心记忆、完整梳理、重现能力,我也在看一个人的梳理、总结、洞察能力。
我个人写代码就喜欢先理解业务流,然后理解数据表关系,然后理解产品功能 *** 作流,大致对功能为何这样设计、功能这样 *** 作会取什么表、插入或更新哪些表,哪些表的状态字段是关键。
然后我写代码的时候,就根据我所理解的业务流、功能 *** 作流、数据输入输出流,定义函数,定义函数的输入与输出。
然后,我会给函数的输入值,赋上一些固定值,跑下来看看能否跑通这几个关联函数,看看还需要怎样的新增函数,或者看看函数的输入输出参数是否满足跑通。
剩下的事,就是我填肉写详细逻辑代码了。
当然,大部分人没我这样的逻辑建模能力。怎么阅读理解也想象不出来,也没法定义函数。毕竟有逻辑建模能力的程序员都很少,100个人里有10个,已经是求爷爷告奶奶好幸运了。
那怎么办呢看
我建议是分离分工配合,这就是现实中没办法的办法。让有逻辑建模能力的人来设计函数框架、来设计工具来设计代码模板,然后让没有逻辑建模能力的人来填肉写详细逻辑代码。
我们可以先从最紧要的模块开始这么做。不紧要的模块,还让它放任自流,让熟练手程序员继续涂抹。
我曾经还让有头脑的程序员做榜样,给大家分享他是怎么规划函数的,怎么做维护性代码的代码结构改善的。但是发现效果并不佳,其他人并没有因此能做代码设计。可能逻辑建模能力是个人的基本素质,是从小到大训练成型的,不是你一个大学已经几年的人能够短时间内可以训练的。
所以啊,还是让能走的人先走,让从最紧要的模块开始这么做。
不必担心这样做后,因为过去一件事被分工(一个做代码框架一个填肉)成两个人做了会降低工作效率。我们很多的工作效率低就是因为半瓶子醋搞出来的,来回反复修改。
真是应了刘德华在**里说的那句话:说你又不听,听又听不懂,听懂了又不做,做又做不好,做不好还不服气。
四、为什么大部分程序员不做代码测试或白盒测试或单元测试呢看
还是因为没有代码设计。因为没有函数啊。所以,一个按钮功能有多复杂,代码就有多长。我见过2000行的函数,我也见过1000多行的存储过程和视图SQL。怎么做白盒测试啊,这些代码都粘在一起呢,要测,就得从头到尾都得测。
所以啊,先学会设计函数,先写好函数,这就求爷爷告奶奶了。很多开发了5年的熟练手程序员,可能都未必会写函数。
函数的输入输出值就很有讲究。很多人都写死了,随着版本迭代,发现过去定义的函数参数不够用了,于是就新增了一个参数。然后,相关性异常就爆发了,其他关联的地方忘改了,到底哪些有关联,怎么查啊,本系统没有,没准其他系统就调用你了,你根本不知道哪个神经人曾经COPY过你的代码修吧修吧就改成了他的功能呢,而且里面的很多代码他看不懂也不敢删,只要他实现的功能正常了他也不管了。于是,你改了你这个函数,他的系统就莫名出错了。
所以,我一般会定义几个对象来做参数。另外,我也很注重函数的日志、函数的异常保护、异常抛出、异常返回。另外,我也很注重参数输入值的合法性校验。
所以啊,应该开发Leader们先制定函数编写规范最佳实践,输入输出参数怎么定义比较好,函数的返回值如何定义比较好,函数的日志记录应该怎么写比较好,函数的异常保护、异常抛出、异常返回如何写比较好。先教会一般程序员,先从会写函数开始啊。
当然,你光有一份规范,程序员们还是不理解、不实际应用啊。所以,还得Leader们做好典型的代码模板,里面是符合函数规范的代码框架,只有这样,一般程序员们才会照猫画虎适应了函数设计的编程习惯。
所以啊,我专门重新定义了leader的明确职责,其中第一个重要职责就是:负责工具/框架/模板/规范的制定,并且负责推广且普及应用落地。
你不明确定义Leader的这个重要职责,你不对这个职责做明确的KPI考核,谁尿你啊。你以为好的工具/框架/模板/规范是靠人们的热情、自发产生的么看我们还没有那么自觉高尚啊。
五、为什么大部分程序员不写注释啊看
我经常说一句话,千万别多写注释。为啥看
因为我们经常遇到的问题不是没有注释,而是更糟的是,注释和事实代码逻辑是不相符的。这就出现常见问题了:残存下来的设计文档是一个逻辑、注释是一个逻辑说明、真实代码逻辑又是一个,钟表多了,你也不知道正确时间了。
所以啊,产品文档、注释、真实代码,三者总是很难一致同步。我为了几百人研发团队能做到这个同步花了大量心血和办法,但我最终也没解决了这个问题,还把Leader们、总监们、我都搞的精疲力尽。
索性回归到一切一切的本源,代码,就是程序员的唯一产出,是最有效的产出。那么,让代码写的不用注释也能看懂,咱得奔着这个目的走啊。
为啥看不懂,不就是意大利面条式代码么,又长又互相交杂。
OK,我就规定了,每个函数不能超过50行。用这一个简单规定和静态代码检查插件,来逼迫大家尝试着写函数。有的函数属于流程函数,是串起其他函数的,有的函数就是详细实现函数,实现一个且唯一一个明确作用的。
有了流程函数和功能函数,而且每个函数不超过50行,这就比过去容易看懂了。
六、为什么大部分程序员不抽象公共函数啊看
我经常说一句话:千万别抽象公共函数啊。为啥看
因为大部分程序员缺乏抽象洞察能力。特别是有些积极热情有余、爱学习爱看书、半瓶子醋晃悠的二杆子,看了几本UML、重构、设计模式、整洁代码之道,就跃跃欲试了,还真敢给你抽象公共函数了。
一开始,他觉得80%相似,20%不相似,于是在公共函数里面简单写几个ifelse做个区隔就可以。没想到,越随着版本迭代,这些功能渐渐越变越不一样了,但是这个代码已经几经人手了,而且这是一个公共函数,谁也不知道牵扯多少,所以谁也不敢大改,发现问题了就加一个ifelse判断。
没想到啊没想到,这个本来当初公共的函数,现在变成了系统最大的毒瘤,最复杂的地方,谁也不敢动,除非实在万不得已,手起刀落。
所以,我平时告诫程序员,纯技术的、纯通用的,你们可以尝试搞搞抽象公共函数,对于业务的,你们还是简单粗暴的根据Leader们做的代码模板代码框架,乖乖的复制、修改、填肉吧。
你们啊,先从做模板做代码片段开始吧,咱们放到咱们内部代码片段开源库里,看谁的代码片段被别人复制的多,说明你的代码抽象设计能力越好了。那时候,我就大胆放心让你撒丫子跑了。在没有学会跑之前,给老子乖乖的复制、修改、填肉吧。
我觉得33的年龄不算大。我猜大概工作了七八年。也积累了很多的工作经验。每天加班到两点不是一种可持续的工作生活节奏。需要先分析一下原因。
1 锻炼身体,劳逸结合,保持头脑清醒,提高工作效率。
2 理清楚思路,避免重复劳动和返工。很多加班都是因为时间紧,来不及想清楚就开干。干了半天发现不对,又重来。所以不管怎么样要先想清楚。
3 及时解决技术债务。在很忙的情况下来不及重构代码。到处复制黏贴,会让你的项目越来越难维护。需要建个jira计划时间来清理代码,可以读读clean code这本书。清理代码也是在清理思路。
4 需要和产品经理充分沟通需求,确保需求的一致性,确定需求的重要性和紧急程度,估计需要的开发测试时间。利用jira管理好自己的task。可以尝试kanban来管理项目和资源。整个小组相互帮助,平衡工作,集中力量完成最重要和最紧急的任务。
5 学习和沉淀技术,熟练的使用工作中需要的工具。比如intellij比eclipse高效很多,要学会熟练的使用快捷键,提高效率。
6 深入理解原理,可以提高学习新技术的效率。我分享了一些分布式系统原理的视频和文章,欢迎讨论。理解了原理也可以帮你转型成为架构师甚至cto。或者去做培训讲师。做自媒体分享技术和经验。至少可以锻炼你的设计思维,改善你的代码的设计。
慢就是快,少就是多。
33岁对于互联网行业中的年轻力量来说,确实算不上小,蒋凡在成为阿里的副总裁时,年纪也就是33岁。但是,我们并不能说33岁的程序员就不行了,对于程序员来说,更重要的还是能力,年龄虽然也是一个参考,但是并不绝对。
就我个人的经历而言,我肯定是大于33岁的,虽然现在不怎么写代码了,但有些时候还是会上场练那么一两下。不说我就比所有人强吧,但是也肯定强过不少人。
而且,程序员是一个不断学习积累的过程,很多的解决方案也是基于业务场景来设计的,所以,当你在技术和业务上的积累越来越多时,其实你能够解决的问题还是多过于年轻的程序员的。
33岁的程序员的价值,更多的是在于你自己比别人(特别是那些年轻一代的程序员)强出多少。你可以写代码写得少了,但是你懂的一定要比别人多,而且当遇到问题需要你亲自下场的时候,那一定是要破门得分的。
所以,如果你在20多岁的时候,觉得自己年轻,觉得自己学习能力强、技术好,就在学习的道路上三天打鱼两天晒网,那么到了30多岁的时候,确实就会出现能力不济、精力也不济的情况,可能真的就只有早早的改行了。
但如果你年轻的时候不断学习,不断积累,其实到了30多岁时,正是你将自己的所学所想用到实处的时候。也不必去担心你的思维是不是慢了,说真的,只要你学习得够多,理解的够多,那么你的思维就不可能会慢。因此,“改行”至少也是10年后的事情,现在完全不用考虑。
至于身体,30多岁的人肯定是比不了20多岁的人。但是也不是说就熬不了了,就算我现在没有写代码了,但是身处这个行业,不可能说就不熬夜、不加班了。
而且,并不是只有程序员才会熬夜加班,测试、产品、项目实施、运营基本都是在项目紧急的时候连轴转。这里面有年轻人,但是也有比我年纪还大的人。曾经我在国外工作的时候,我的一位领导,每年从他手里批出去的项目资金上亿元。但是,每天2-3点都在给发邮件,上班也从来没有迟到过,那时候他已经50岁了。
看到50岁的人还这么努力,当时还不到30岁的我,真的是有什么理由说我身体受不了?
当然,我并不是说加班就是正常的,就需要没日没夜的工作。我只是想说,我们别把身体受不了这种理由当成了自己懒惰的借口,只要我们是正常人,那么就应该不需要说我30岁了,做程序员我身体受不了的话。
因此,如果你觉得程序员是你的爱好,是你喜欢的职业,你想要未来做得更好,那么30岁只是开始。如果你觉得受不了了、累了、坚持不下去了、不再爱了,那确实,可以考虑改行了。
谈谈我的看法。
本人已步入不惑之年,30岁之前编码,后十年从事业务咨询和系统交付。题主这个问题,我结合我周围的情况谈 一下。
首先,关于技术能否可以干一辈子,这个答案我认为是肯定无疑的。虽然年龄大了精力上不去年轻人充沛,但是在这个年纪也不用每天加班编码了,主要工作是负责架构选型、疑难问题排查、效率优化、新技术跟踪和预研等工作。我很多还在编码的哥们儿,都是这种技术专家或者开发组长的角色,从事的就是类似评审,选型,攻坚等工作。
其次,对于题主提的思维逻辑迟钝的事,我认为还是经验导致,这个阶段,题主除了一线日常工作,得安排一定时间学习编码的一些方法和技巧,所谓磨刀不误砍柴工,就是这个意思。框架学习、数据库知识、构建工具、开发工具、中间件等,都要逐步学习,要是觉得记忆力不好,就做笔记!我本人不算聪明,学东西就喜欢做笔记。
再次,关于总是加班,前几年由于产出比较低,肯定是如此,后续要多看案例程序和泡泡技术论坛,也可以公司内拜师或者跟小伙伴结对开发,这样才能提升效率和质量。
最后,要说一句,任何的坚持一定源于热爱,如果题主热爱开发,那就努力做下去。如果兴趣一般,尽早转行也不失为一个好的选择。现在的技术,种类众多,一个项目或者产品涉及的各种技术很多,所以肯定要不断学习和深入,还得紧跟潮流才行。
以上就是我个人的一点看法,如有不对请大家指正。
还是早做打算吧,程序员在中国的情况,你是知道的。
先不谈职业生涯,你数数头上的头发还剩多少,你就知道还能撑多久[泪奔]
虽然我是学机械的,但是毕业后在16年也接触过JAVA开发,那时候我以为我可以坚持做下去,最终放弃了。程序员吃的是青春饭,生活就是这样很现实,虽然程序开发工资高,工作环境美好,但是时间久了,就会发现,年龄大了,如果不考虑转方向,我觉得以后的路可能会难走。不管怎么样,趁现在多挣点钱,这样的话,为以后做准备。加油
要撑就看自己的精神强度,要投入就看自己的未来选择。
如果你真正热爱程序开发,不管年龄多大,总是充满激情,如果你只是简单的把他作为谋生工具,那不管什么时候都是煎熬,而且随着年龄增长,这种煎熬会越来越明显,越来越刻骨。本来挺好的一个技术人才, 社会 需求量也蛮大,而现在却被戏称为码农,只是我们自己把他给做瞎了,一抓一大把的程序开发,可是精通的,专业的没几个,大部分都是蜻蜓点水,而大部分企业也不够重视对程序的培养,只是简单的把他作为流水线工人,要年轻能加班,工资少的,使得大部分人的路越走越窄
你怎么老的那么快,这就快报废了,我比你大点觉得自己技术越来越牛逼了,我平时除了工作学习也很注意锻炼身体,我感觉我能一直干下去,我编程也有十多年了,正是牛逼的时候。
不好撑了,年纪大了,除非去做主管
你好,社恐即社会恐惧症。这类人可以适合创造性工作,设计类工作,研究性工作,群体性工作。如果你把选择工作只是当做逃避社交的一种方式的话,那么你注定会失败,有的人的地方就有社交,我们都活在一个大社会中,没有人能够逃离。只有克服自己的社交恐惧,提升自信与能力,才能更好的适应社会。
以上就是关于大家怎么理解“业务代码”为什么有人觉得写业务代码很low全部的内容,包括:大家怎么理解“业务代码”为什么有人觉得写业务代码很low、如何安装一个完整的android开发环境、我百度知道最近老是点进回答里面没有对话全空的(外面可以看到答案,就是没对话)等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)