你可能想举个例子。如果您的代码过于关注不属于算法的语言细节,那么可以理解的是,您可以说您的算法中混入了非算法,导致结果不正确。
我觉得推理,学习的全部目的是表明你理解这个概念,而不是弯腰并勾选所有正确的框。
可以教计算机通过大学,但还不能教计算机真正独立思考和应用知识。
吃饭反刍的心态是我一直没毕业的原因。
关于您最近的评论,实现伪代码未定义很重要。它通常有重用的术语,但它不是一种严格的语言,而不是英语(否则它将是一种编程语言,可以逐字解析和执行)
伪代码的重要性在于充实系统的逻辑部分,而不必过度担心“它有意义”之外的语法
通常这可以使伪代码更简洁 和更易于理解。
伪代码也不依赖于读者理解语言中的“神奇语法”来处理它,他们只需要理解所使用的术语。
例如,如果你要给普通人一个 perl 算法,大多数人会死于恐惧,因为他们看不到线噪音的长板。
尽管:
sub foo {
my @args = @_ ;
my( $a, $b )=(@args[0],@args[1]);
for( @{ $a } ){
$b .= $_ ;
s/id//g;
}
return [$b,$a];
}
对于精通 perl 的人来说,可能会产生一些连贯的感觉,对于普通的代码阅读器来说,他们得到的只是“你刚才到底说了什么”的回应。记录它也没有多大帮助。
| there is a subroute foo which can take a list of strings, and a default string,
\- which then iterates all items in that list,
| \- and for each item in that list
| 1. appends the contents of that item to the end of the default string
| 2. removes all instances of the string "id" in that item
|
\ and returns a list, which contains
1. the concatentated default string
2. the modified input list
突然间,它变得不那么模棱两可了,更多的人可以理解它。
所以可能,编写算法的一半练习是“你不仅要证明你理解它,你还必须证明你可以向对问题一无所知的其他人解释你的推理”,这是一个至关重要的练习。你需要的能力。如果你不能传达你所做的事情,那么没有人可以使用它。
代码还有一个讨厌的小问题,它不存在于算法中,那就是代码可能看起来正确,但可能不会做你认为它做的事情,如果它做错了,你就不会没有意识到,阅读代码逆向工程的人会弄乱它并复制一个损坏的算法。不好。人类形式的算法更好地翻译“这就是我想要它做的”