当前位置:首页 > 公众号精选 > 架构师社区
[导读] 程序员最怕读别人的代码,比这个更可怕的是什么? 从别人那里接手一个老项目 前任程序员或者是编码能力不行,或者是跳槽之前故意摆烂……

今天愚人节,可以皮一下,可以开点玩笑,所以我决定这篇文章开启嘲讽模式。

程序员最怕读别人的代码,比这个更可怕的是什么?

从别人那里接手一个老项目

前任程序员或者是编码能力不行,或者是跳槽之前故意摆烂……于是,一个隐藏着一堆烂摊子的项目,扔给了后来接手的人。

本来以前是代码里夹翔,后来就是翔夹代码了。

这些翔有各种各样的风味,其中就有那么十八种味道最是冲人。

1. 块里堆上我满满的翔

Java 中有着无数的语句块,这些语句块可以嵌套。于是我们有很多优秀的产翔大师会在这些语句块中不断地嵌套,犹如无数层的俄罗斯套娃。

2. 把翔藏在注释里,有时候它会“惊艳”了世界

有些哥们儿很鸡贼的把一些代码藏在注释里,这些代码可以随时成为定时炸弹。

public static void main(String[] args) {
  String a = "Hello"; // \u000d a="world"; System.out.println(a); // \u000a a="hello world!"; System.out.println(a);
}

上面这段代码运行之后,说好的“Hello”呢?

world
hello world!

3. 我家大门常打开,欢迎错误走进来

在 Java 中,如果你想接手一个项目,看到一个父类的字段是非 private 的,而子类还存在同名字段,要注意了,这个项目的前任可能比较渣,你可能会恼火的想给他烧纸。比如:

public class Base { public int field = 0; public int getField() { return field;
  }
}
public class Sub extends Base { public int field = 1; public int getField() { return field;
  }
}

你这样测试下看看

public static void main(String[] args) {
  Sub s = new Sub();
  Base b = s;

  System.out.println(s.field);

  System.out.println(b.field);

  System.out.println(((Sub) b).field);

  System.out.println(((Base) s).field);
}

4. 我抓到了异常,但是我不想处理了,因为我要离职了

有些哥们儿走之前可能人未动心已远,也可能是懒的处理异常,他会给你留下一个谜之空白。

public class EmptyCatchBlockTest { public static void main(String[] args) { try { int a = 4, b = 0; int c = a/b;
    } catch(ArithmeticException ae) { // ??? }
  }
}

对不起,兄弟,你留下这种薛定谔的处理是想让人帮你掀桌吗?

5. 只要我不考虑任何意外的情况,那么项目就一定会出意外

有些直性子的人,认为天下万物都可以直来直去,就好像直男只会让女生“多喝热水”一样。所以,他们写的代码非常直率,直接就不考虑意外情况。

public static void main(String[] args) { int a = args.length; int b = 42 / a; if (a == 1) {
      a = a / (a - a);
    } if (a == 2) { int c[] = {1};
      c[42] = 99;
    }
}

上边的代码很直率,既不考虑 a 可能为 0 的情况,也不考虑数组越界。直来直去,就好像“我不尴尬,尴尬的就是别人”。

6. 我要把方法里可能的异常藏起来不告诉任何人

还有些哥们也不知道是不是有什么见不得人的事情,该抛出来的异常从来不抛出来,导致你根本不知道发生了什么事情。

InputStream is = null; try {
  is = new FileInputStream("一个文件.txt");
} catch (FileNotFoundException e) {

} int b; try { while ((b = is.read()) != -1) {
  }
} catch (IOException e) {
  e.printStackTrace();
} finally { try {
    is.close();
  } catch (IOException e) {
    e.printStackTrace();
  }
}

上面的代码里,如果文件找不到,接手人要撞墙的。

7. 我不走正道,因为我是个光荣的产翔侠

还有些人,不知道从哪里学会的邪门歪道,喜欢通过在捕获异常里写业务逻辑。对这种人,你九阴真经练成了梅超风啊。

public DateTime override Add(TimeSpan ts) { try { return base.Add(ts);
  } catch (ArgumentOutOfRangeException nb) { // calculate how much the MaxValue is exceeded // regular program flow TimeSpan saldo = ts - (base.MaxValue - this); return DateTime.MinValue.Add(saldo)
  } catch(Exception anyOther) { // 'real' exception handling. }
}

我就想问问,如果以异常来控制流程,那么如何在这些异常中寻找真正的异常情况?

8. 为了我走之前不出意外,我要捕获所有的 NPE

有些哥们儿会把 NPE 捕获住,恩,不解决问题,但是把提出问题的人给解决了。

private static void callInstanceMethodOfNull() { try {
    Integer age = null;
    age.toString();
  } catch (NullPointerException exception) {
    Logging.log(exception);
  } catch (Throwable exception) {
    Logging.log(exception, false);
  }
}

但是呢,这在正常的业务逻辑里很可能就把别人坑了,因为 Null 本身就是代表着一种非法状态。拿着前朝的剑斩今朝的官,包大人干的好啊。

9. 一个方法我如果写成一万行,公司一定会倒闭的

有些朋友可能有分离焦虑症,一个方法里能写上 1 万行代码。对不起,读书读几页都会犯困,读你这一万行代码……

10. 我要把所有业务逻辑都揉进几个类里,就好像女友第一次来我家

有些哥们,你看看他负责的项目,你发现整个项目没几个类。你很纳闷,觉得业务很复杂,竟然可以实现的如此简单吗?你再打开他的类看源码,哦豁,这就是个垃圾箱啊,什么都能往里塞啊。

哥们儿,这不是女朋友去你租的房子里,你为了显得干净,把你那些垃圾到处塞啊。

11. 是男人就来看我继承一百层类

有些爷爷不知道怎么想的,在他们眼里可能只有儿子和老子,一个类很不得搞一百层的类继承。你这样继承,您家万贯家财还能遭得住吗?

12. 如果我不用缓存,我就能多浪费公司的几台服务器

还有些哥们儿,明明知道他这个功能可能被频繁访问,比如登录的时候查相关的白名单、黑名单。哥儿们儿知道并发量大,可从来不想套个缓存,就是死从数据库里要数据。数据库想:生产队的驴也没我这么忙啊。

13. 线程安全?那是什么?能吃吗?

有些号称老程序员的老司机们,经年有余的不管线程安全。上来口吐异步同步,可是到手上了,线程就是个后娘养的,不管人家的数据安全了。合着身前叫人家小甜甜,落地了叫人家牛夫人了?

14. 在我手中无物不锁

还有些哥们儿,怕线程跟怕老婆一样,一旦可能多线程了,上来先上个同步锁。你打开他写的代码,十个方法十把锁。于谦儿这种大户人家也不带这样上锁的啊。

15. 我只知道 ArrayList,LinkedList 它配我用吗?

有些兄弟可能只知道 ArrayList 能放东西。就算需要动态调整的场景,哥们儿也从不考虑 LinkedList。系统慢的跟龟爬一样,愣是说系统遇到瓶颈。

16. 我的方法里有无数的参数,也许里面需要一个宇宙

有些程序大师,他需求可能比较多,性格比较贪婪。写的方法也跟性格一样邪恶,一个方法需要的参数,从天上到地下,什么都需要。你要调他的方法,就跟有个黑洞吸住你不放一样,陷进去你就出不来了。放我去飞好不好?

17. 递归里偷偷抹掉出口条件,就让服务器的 CPU 燃烧殆尽吧

有时候看到没有出口的递归方法,你就知道,写这段代码的人的人生是多么悲催,他悲惨的连测试都不敢,生怕碰伤了自己。没有出口的递归,就跟没有出路的人生一样。

18. 如果我不关闭资源,那么我就能让公司多花些内存钱

用了资源您不释放,您是嫌山上的笋不够采,下山来夺笋了吧。行行好,放了那个资源吧。

得,看到了这里,列位看官看个乐就行了,希望诸位千万别使用这十八般兵器。

免责声明:本文内容由21ic获得授权后发布,版权归原作者所有,本平台仅提供信息存储服务。文章仅代表作者个人观点,不代表本平台立场,如有问题,请联系我们,谢谢!

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

业内消息,近日在央视播出的《对话》・开年说节目上,百度创始人、董事长兼首席执行官李彦宏表示,以后不会存在“程序员”这种职业了,因为只要会说话,所有人都能具备程序员的能力。李彦宏认为,未来的编程语言只会剩下两种,一种叫做英...

关键字: 百度 李彦宏 程序员 AI

近日,某厂一名员工爆料称,由于Bug事故,公司要求他返还去年发放的年终奖,共计4万余元;如果逾期不还,将以每天万分之5的利息收取滞纳金,即每天20元左右;甚至公司HR还扬言,如果三个月内仍不还,就免费开除。

关键字: 程序员 互联网

近日某厂员工爆料,公司程序员因线上流量异常BUG事故,被公司进行处罚。处罚的结果是被要求将去年发的 4 万多年终奖归还给公司,否则就收取滞纳金并辞退,逾期将以每天万分之 5 的利息收取滞纳金。

关键字: 程序员 BUG 事故 年终奖 工程师

据昨天外媒报道,OpenAI首席执行官、Y Combinator前总裁山姆·奥特曼(Sam·Altman)结婚了,男友为前Meta程序员奥利弗·穆尔赫林(Oliver·Mulherin),婚礼在夏威夷举行,整个仪式非常低...

关键字: ChatGPT Meta 程序员 OpenAI 山姆·奥特曼

今后,鸿蒙和安卓应用将不再兼容。眼下,越来越多的互联网公司开始招聘鸿蒙开发相关的人才,以适应市场的变化和用户的需求。

关键字: 程序员 嵌入式

近日,一则“中国程序员在越南遭受残酷虐待”的新闻,引发了国内外的关注和震惊。

关键字: 程序员 互联网

近日,上海公安局普陀分局成功破获一起案件,并在程序员圈内引起了不小轰动。因为该案件涉及的金额高达1.5亿元,而这仅仅是在半年时间内的非法获利。要知道,这样的赚钱速度放在整个互联网界也都是相当炸裂的!

关键字: 代码 程序员

在微型计算机中,所有信息(如数值、符号和图像等)均以二进制形式存储、传输和计算。由于二进制数冗长、不方便读写和辨认,因此,现代微型计算机也支持编程时使用书写长度更短的十六进制数和十进制数,同时也为各种非数值信息提供了相应...

关键字: 微型计算机 数制 编码

巴林麦纳麦2023年1月12日 /美通社/ -- 巴林花旗银行庆祝其全球技术中心成立一周年,该中心有望在十年内雇用1000名巴林编码员。目前,该中心由110名巴林员工组成,其中91名巴林员工已经开始在花旗银行Seef办事...

关键字: 编码 TI AI ST

近日,一位清华大学应届硕士生在网上发布的帖子火了,引起了众多网友的“围观”热议。

关键字: 互联网 程序员
关闭
关闭