Java程序员的典型工作过程有哪些_Java程序员都要经历哪些阶段

原标题:Java程序员都要经历哪些阶段

程序员从菜鸟到优秀的过程是需要时间,经验,不断的进阶,小编和大家一起看看每个阶段都要经历哪些成长阵痛:

没有防卫

这个阶段很快就会过去,因为有无数的书本和”前辈”在提示防卫性编码的必要性。

疯狂防卫

无论是模块之间,还是模块内部,处处充满检查,首先是检查参数,其次是检查返回值和出参。最后,给自己写的函数通通加上指示成功失败的返回码。

如果有幸参加过代码评审会,对阶段二的代码应该不会陌生,看看到底哪里不对劲?

bba2a39c025a7dc4d6f39b4e1e81a4de.png

只管汇报,不管处理,不了了之

这些泛滥的防卫性代码有一个共同的特点–只管检查汇报,不管处理。所谓的处理就是一层一层的return错误码,典型的懒政行为,老子眼界不够高,做不了决定,把皮球丢给上级机关。上级机关面对来自不同下属的千奇百怪的错误码,他也没辙,只好再丢给上上级机关。这样层层上报,人手再多也搞不定,因为用来分析错误的上下文信息已经在层层汇报中丢失了。所以别看费了好大力气汇报错误码,最后除了一死了之或者睁只眼闭只眼也没有更好的办法。

内外不辨,亲疏不分

防卫是应该的,但不应该处处为营。国界线上要有边防军巡逻,但是省界呢?县界呢?设防是有成本的,在软件上就体现为交复杂度税。同一个模块内部,假设A调用B,如果B认为A传给它空指针是一个错误,那么A应该设计为永远不会把空指针传递给B,而不是在B处设防。模块内部设防,就好比两口子同床异梦,精力都内耗了。

人格分裂,自相矛盾

设计这种代码的人一方面认为自己思维缜密,步步设防,另一方面认为自己白痴到底,所以要步步设防,左手要防着右手。左右手互搏的代码散布得纷纷扬扬,几乎无法辨认有限的功能代码。

顾头不顾尾,屁股擦不干净

只要评审得足够仔细,总能发现这些防卫性代码的漏洞,要么是文件没关闭,要么是内存没释放。这是必然的,因为一个正常人根本没脑力搞定这么多细节。考虑到天量的路径组合和逻辑的自相矛盾,你也没办法设计测试用例来验证它。这就是为什么真的一不小心命中的话,结局总是很悲惨的原因。写到这里,我想起历史上重大的安全事故调查报告,事故之所以能发生,是因为多道安全闸门同时失效,而软件故障会更加可怕,因为后面的闸门本身就是炸弹。

说了这么多,那么阶段三到底又是什么样的呢?

边界清晰,御敌于国门之外

在模块的边界处,无论别人调用你还是你调用别人,一定要明确约定调用规范,一旦违反规范,立即启用错误处理流程,不要让错误在自己的模块内部流窜。

不给错误做二传手

如果发现错误,让错误到此为止,非必要,不接力传递错误码。

当断则断,早死早超生

所有程序的正确运行都是依赖于一定的前提条件的,如果你发现外部模块不工作了,遵从系统的错误处理策略,该报异常就报异常,该立即退出就退出,重要的是搜集好现场的证据。一味的容错处理既不能解决问题还会掩盖问题,导致错误扩散,变形,拖延定位问题的时机。

和谐社会,简单单纯

在模块内部,只有不言自明的约定,没有周伯通似的左右手互搏。好比乌龟,龟壳坚硬,但龟壳内部是一个柔软的世界。

这样的代码,模块内部几乎没有用于实现需求以外的代码,很容易阅读,仅通过黑盒测试就能实现代码覆盖。返回搜狐,查看更多

责任编辑:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/364024.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

关于DataFormWebPart中CreatedModifiedInfo信息的分开使用

以下是问题的描述,我先从数据说起.数据存储在一个叫pages的自定义列表中,该列表除默认的栏外,另增加了一栏"Abstract",为多行文本,用于存储文章摘要信息.当该列表中录入数据后如图: 这时,当我们点列表项如"page2"时,会进入该项的 DispForm.aspx页面.如图:这…

Day47 Django基础部分、路由配置、空间名称

1.最简单的路由配置 URL配置(URLconf)就像Django 所支撑网站的目录。它的本质是URL与要为该URL调用的视图函数之间的映射表;你就是以这种方式告诉Django,对于客户端发来的某个URL调用哪一段逻辑代码对应执行。 1.1 例1: 第一步:在…

6-3 向二分搜索树中添加元素 6-4 改进添加操作:深入理解递归终止条件

二分搜索树添加新元素60, 60>41(根节点)&#xff0c;所以一定要插入到41的右子树。 接着在和58比较 1 public class BST<E extends Comparable<E>> {//对于二分搜索树所存储的内容支持泛型&#xff0c;所以在这里写一个E&#xff0c;此外二分搜索树不是支持所有…

ClassNotFoundException:是否减慢了您的JVM?

大多数Java开发人员都熟悉臭名昭著且非常常见的java.lang.ClassNotFoundException 。 虽然通常已经很好地了解了此问题的根源&#xff08;类路径中缺少类/库&#xff0c;类加载器委派问题等&#xff09;&#xff0c;但对整体JVM和性能的影响通常是未知的。 这种情况可能会对您的…

jQuery 遍历 each()方法

输出每个 li 元素的文本&#xff1a; $("button").click(function(){$("li").each(function(){alert($(this).text())});});亲自试一试 定义和用法 each() 方法规定为每个匹配元素规定运行的函数。 提示&#xff1a;返回 false 可用于及早停止循环。 语法…

java服务器端测试_java-在服务器端测试Spring Web Services端点?

我正在使用Spring WS 2.0.我已经看到了端点和测试用例以测试端点.Endpointpublic class CustomerEndpoint {ResponsePayloadpublic CustomerCountResponse getCustomerCount(RequestPayload CustomerCountRequest request) {CustomerCountResponse response new CustomerCount…

CSS样式表的规划与组织

如果你的工作过程中遇到以下问题&#xff0c;那么请你阅读此文章。 1&#xff1a;样式表文件里面的代码混乱&#xff0c;随着项目的进展&#xff0c;样式表里面的先有代码不敢做任何改变&#xff0c;因为连自己也不知道改了以后会给现有项目造成什么影响。更不敢删除。因为连自…

【链接】Linux C/C++ 学习路线-已拿腾讯、百度 offer

https://www.nowcoder.com/discuss/203082?type0&order0&pos69&page1 https://www.nowcoder.com/discuss/193598 https://www.nowcoder.com/discuss/164781 https://www.nowcoder.com/discuss/188367 https://www.nowcoder.com/discuss/188367 已经有两年C经验的话…

游戏文本本地化(一)

游戏中常见的文本本地化一般包括以下几项: 1、代码 --- 即直接写在代码中的文本 2、配置表 --- 主要由策划配置 3、UIPrefab --- 制作预设在Label上直接写入的文本 4、图片字 --- 包括 UIPrefab、UI 特效上的美术字 5、新手引导 --- 主要由配置新手引导的相关人员产生 6、错误码…

Dropwizard:轻松的RESTful JSON HTTP Web服务

寻求快速&#xff0c; 轻松地创建可用于生产环境的RESTful JSON HTTP Web服务的Java开发人员应该考虑Dropwizard框架。 Dropwizard汇集了相互补充的广受好评的库&#xff0c;因此您可以了解重要的内容&#xff1a;编写和交付工作代码。 对于那些对所用库的详细信息感兴趣的人&a…

split 将字符串分割成字符串数组

list_name list_name.split(","); split() 方法用于把一个字符串分割成字符串数组。 语法 stringObject.split(separator,howmany) 参数描述separator 必需。字符串或正则表达式&#xff0c;从该参数指定的地方分割 stringObject。howmany …

python可以自动写文章吗_让python来告诉你神奇的操作,如何实现文章自动化

三河讲python首先来告诉大家下面的Python程序实现了通过从网页抓取一篇文章&#xff0c;然后根据这篇文章来生成新的文章&#xff0c;这其中的原理就是基于概率统计的文本分析。过程大概就是网页抓取数据->统计分析->生成新文章。网页抓取数据是通过BeautifulSoup库来抓取…

badboy的录制和jmeter的使用

v Jmeter是什么 Apache Jmeter是Apache组织开发的基于Java的压力测试工具。Jmeter可以用于对服务器、网络或对象模拟巨大的负载&#xff0c;来自不同压力类别下测试它们的强度和分析整体性能。另外&#xff0c;Jmeter能够对应用程序做功能、回归测试&#xff0c;通过创建带有断…

一张图看懂offsetX, clientX, pageX, screenX的区别

1.具体含义见下图1 2.浏览器的兼任情况 更多专业前端知识&#xff0c;请上 【猿2048】www.mk2048.com

接口一个被我忽略的地方--接口重定向技术

习惯于用IDE生成接口方法了,右键点击"Implement Interface",生成所有的接口方法声明,还带个Region多方便啊.今天看<<CLR Vir C#>>时才了解到自己是知其然不知其所有然啊. 实现接口方法很简单,新手估计也都会,但怎么理解这个过程,不见得所有人都知道 Base…

java extends throws_继承,方法签名,方法重写和throws子句

容易记住访问修饰符可以从限制更改为限制更少&#xff0c;例如从受保护到公共&#xff0c;但反之亦然throws签名可以是从父异常更改为子异常类&#xff0c;但反之亦然此代码有效public class A {protected String foo() throws Exception{return "a";}class B extend…

[BZOJ]4071: [Apio2015]巴邻旁之桥

题解: 首先 明确 如果处于同一区域时 直接统计贡献即可 不用过桥 对k分情况讨论: 当k1时 假设桥的位置是 p 那么 $$ \sum_{i1}^n |x_i-p||y_i-p| $$ 很显然当对于 所有x,y排序后的中位数是最优的选择位置 具体证明可以模拟一下 当k2时 假设桥的位置是$p_1$和$p_2$ $$ \su…

vue 学习之路 —— 图片的引入

问题记录&#xff1a;在img中动态设置了src后&#xff0c;图片路径找不到 原因&#xff1a;vue中动态生成的路径无法被url-loader解析到 解决方法&#xff1a; 1、将图片放在static文件夹&#xff0c;然后正常解析 2、将图片使用import方法引入 3、 采用背景图做法&#xff0c;…

跟踪异常–第5部分–使用Spring进行计划

看来我终于快要结束本系列有关使用Spring进行错误跟踪的博客了&#xff0c;对于那些还没有阅读该系列博客的人&#xff0c;我正在编写一个简单但几乎具有工业实力的Spring应用程序&#xff0c;扫描日志文件中的异常&#xff0c;然后生成报告。 在本系列的第一个博客中&#xff…

java.util.hashmap_java.util.HashMap中的无限循环

我在这里经常有一些Vaadin代码阻塞,我不知道问题是什么&#xff1a;Thread 7892: (state IN_JAVA)- java.util.HashMap.getEntry(java.lang.Object) bci61, line349 (Compiled frame; information may be imprecise)- java.util.HashMap.containsKey(java.lang.Object) bci2, …