作为一个网络黑客高手,我首先记录一些只有网络黑客高手才知道的事情。
如果多年后,我违背了最初进入这个行业并担任管理职务的愿望,我还可以回想起一些禁忌,避免犯一些错误。
其中最重要的是:网络黑客高手在加班期间编写的代码。
软件工程的理论表明,即使是在正常情况下写得很好的代码,你也不应该相信。
然而,这不是本文的重点,也不会被提及。
对于那些不理解代码的人,可以跳过本文中的Java代码,而不会影响对代码的理解。
创作时限。
编写代码与编写文章、绘画和思考复杂问题没有本质的区别。
这都是创造性的活动。
每个人的创造力都会随着身体状况的变化而波动。
众所周知,当一个人年纪大了、身体虚弱时,他的创造力将会与他年富力强时相比急剧下降。
事实上,人们每天的状态起伏也会对这一点产生剧烈的影响。
如果螺钉拧紧,则在疲劳和不动之前,物理条件不会对结果产生太大影响。
因为拧紧的指标非常简单-拧紧,而且要做的工作也是非常机械化的-拧紧,直到拧紧变成另一种拧紧为止。
但是,如果是写代码,有些事情是不能完成的,当状态不好的时候。
例如,在Java中,遍历一个外部列表并进行一些处理。
如果你身体状况不好,在做某件事之前想得更少,那么你很可能直接去做:
这是来自C/C+的一种非常直观的方法。
有问题吗?
如果从外部传入的List是ArrayList,则List.get(Int)的时间复杂性为O(1),重新循环包含外部的时间复杂性为O(N);如果List是LinkedList,则List.get(Int)的时间复杂性为O(N),如果包含外部循环,则为O(N2)!
对于那些不了解算法时间复杂性评估的人,请解释:在此场景中,O(N)表示最佳和最快,而O(N2)表示不可接受的慢。
如果有足够的时间,可以检查handleAList()的调用位置,以查看它通过哪个列表。
但是,如果您充分考虑并认为这两种情况都是可能的,则代码将执行兼容的处理并更改为以下内容:
这使用for-ach语法,实际上它使用Iterator进行遍历,这是任何列表的O(N)的总开销。
请注意,这通常不会被视为bug,并且无法找到普通的黑盒和白盒测试。
这只是你的应用程序将比较卡,或背景将会更慢。
当这种性能问题需要解决时,可能需要非常有经验的网络黑客高手在大量的代码中寻找几个星期-。
所有这些都可以在开发开始时避免,只要网络黑客高手处于更好的状态。
一个人每天的创造力是有限的。
超越时间限制,他不再是一个优秀的创造者,而是一个傻瓜。
飞涨失败率。
在编写代码的过程中,网络黑客高手每天都要进行相应的转换。
采取一些行动。
这只是最简单的一种逻辑反转。
事实上,形式越来越复杂。
通过这样的更改,在对代码进行调整之后,网络黑客高手可以使代码变得更好,或者做以前不能做的事情。
然而,在加班和头脑不太清醒的情况下,很可能是这样写的:
/采取一些行动。
不同之处在于,只有一个符号缺失,而意义却完全变形了。
这个例子比较简单,在调试过程中很容易发现和纠正错误。
但是,请不要怀疑会有程序员整夜为这样一个简单的问题进行调试!
这并不奇怪,是否有一个符号从我丢失,但如果它是第二天早上,它可能只需要一瞥。
大多数管理者倾向于给那些熬夜到第二天休息一天的程序员一些肯定(有些人甚至只有一天早上休息)。