我正在准备一场编程比赛,我们必须使用C ++进行编程,而这一切都是关于在短时间内生成有效的代码。一个例子是使用宏获取最少两个整数或使用内存集初始化数组(但是有人告诉我,您既不应该在这里使用它)。
这就引出了一个问题,在实际工作中要使用哪种编码技术?
我正在准备一场编程比赛,我们必须使用C ++进行编程,而这一切都是关于在短时间内生成有效的代码。一个例子是使用宏获取最少两个整数或使用内存集初始化数组(但是有人告诉我,您既不应该在这里使用它)。
这就引出了一个问题,在实际工作中要使用哪种编码技术?
Answers:
快速生成工作代码的方法是...放慢速度。采取非常小的步骤。确保您知道每个步骤的用途。确保在每个步骤之后,代码都可以编译并运行。
最重要的是,使用测试驱动开发。编写失败的测试。编写足够的代码以使测试通过。进行重构以使代码整洁,确保其仍通过所有测试。重复。
如果您不这样做,那么编写一大堆代码是很容易的,这是行不通的。然后,您将需要很长时间才能弄清楚为什么它不起作用。
仔细检查标准库,尤其是STL算法。这将节省许多代码行和大量时间。赢得编程比赛的关键是在尽可能高的水平上进行编程。在没有外部库的C ++中,这意味着STL调用而不是for循环。
我定期参加ACM竞赛,希望其中一些技巧对您有帮助:
正如其他人所说,要熟悉该语言,在C ++特别是STL中,它既具有您要使用的常用功能(binary_search,min,max),又具有健壮的数据结构以节省您的时间(堆栈,以避免直接递归) ,请为BFS排队,如果您喜欢的话,甚至可以为Dijkstra排队为priority_queue)。
确定问题的类别,例如数学,动态编程,图论等。问问自己:您对这种类型的问题有多熟悉?完成此操作后,您应该决定要解决的顺序,这与下一点密切相关...
您想在打字之前完全理解问题,解决正确的问题,在我的第一场比赛中,我认为如果我不打字,那是在浪费时间。后来我发现这是一个错误。
不要以为注释是浪费时间,至少在“聪明的”代码中,您不想去逐行调试以查看出了什么问题(这是真正的时间浪费),价值清晰。
有乐趣。
:)
好吧,对我来说听起来像您只了解C而根本不了解C ++。具有基本语言工作知识的人员可以轻松回答这些问题。
一个示例是使用宏获取至少两个整数
只是使用一个功能?std::min
已经存在。
或使用内存集初始化数组
std::array<T, N>
已经初始化了它的内容。
实际工作中使用哪种编码技术?
第一步是了解您使用的语言。
除了了解语言之外,还要了解您的工具,尤其是您的编辑器。我从事编码已经有15年以上的专业经验,而且我看到其他优秀的程序员也会放慢脚步,因为他们使用的唯一编辑器命令是光标键和crtl-x / c / v。
您的编辑器是否支持单个按键删除行?要重新缩进一行?在功能/方法之间移动?阻止选择/粘贴?书签?按字移动?编辑器可以自动生成类/方法/函数吗?它是否支持您可以提前创建的模板?快速重构?宏录制?
了解您的编辑器可以大大缩短开发时间。
已经有很多答案,但我仍然想补充一下我的看法。
为了加快编码速度,请以一定的速度成为触摸打字员,以使您在打字时能够专注于逻辑和代码。有很多学习打字的软件(例如,打字大师,快速打字,KTouch,gTypist),可以使用它们
我见过许多经验丰富的程序员,他们仍然是两指打字员。这导致没有文档的讨厌代码,以及带有宏和缩写类型名称的真正的隐秘代码。
软件开发是80-20项经典活动之一,即前80%的工作需要20%的时间,而后20%的工作则需要80%的时间。
因此,总体上加快工作速度的关键是在最后20%的工作中努力提高绩效。通常,这是调试阶段以及将所有内容捆绑在一起并使其可用的工作。
您可以通过在早期阶段多加注意来改善这一点。当您想进入硬核编程时,在项目一开始就进行规划和设计工作似乎是在浪费时间,但是以后可以节省大量时间。
人们将谈论诸如TDD或BDD之类的特定方法。这些很棒,但是如果您现在不这样做,它们会花费您一些时间来适应,因此,它们可能不是您想参加编程竞赛的起点。但是,无论您做什么,在潜水之前停止计划自己的工作都会收获很多。无论如何,它们是迈向TDD和BDD的第一步。这是您要开始的地方。
如果是为了进行实际的编程比赛,请不要使用C ++。使用快速的交互式RAD脚本语言。这是VB6绝对主导的东西。预备您预编写的库。字符串拆分,数组反转,搜索,排序,原始图形,控制台控件。
如果是为了工作,请执行相反的操作。了解其中的内容,使用扎实的语言(C ++很好),注释所有内容,等等。两种类型的环境离得更远。