English Русский Español Deutsch 日本語 Português 한국어 Français Italiano Türkçe
更好的程序员(第 05 部分):如何成为更迅捷的开发人员

更好的程序员(第 05 部分):如何成为更迅捷的开发人员

MetaTrader 5示例 | 18 十一月 2021, 10:04
1 763 0
Omega J Msigwa
Omega J Msigwa


概述

作为开发人员,我们总是希望能够更迅捷地构建程序,且在交付任务时质量更高。 无论您的编码经验、算力和工作空间中的工具如何,或者您的键盘打字速度如何,任何开发人员都可通过习掌握这种能力。

这篇文章是之前篇幅的扩展文章,如果您还没有阅读过以往文章,请考虑先阅读它们。

         如何更迅捷地编码


内容:

  1. 规划您的工作
  2. 不要重新发明轮子
  3. 只做需要做的事
  4. 迎接更大的挑战
  5. 健康生活
  6. 现在就行动
  7. 不要过度劳累自己
  8. 质量不是一成不变的
  9. 总会有最后期限
  10. 了解您的高峰时刻
  11. 反思是关键
  12. 客观衡量
  13. 工作之外的探索
  14. 更迅捷的测试


01: 规划您的工作

“如果您疏于规划,您就正在迈向失败” — 本杰明·富兰克林

作为开发人员,我们倾向于认为冲向键盘并开始高速编写代码,如此就会让我们更快地完成我们的项目;然而,这个想法是非常错误的,因为拖累我们速度的一个重要原因不是我们敲代码的速度,而在于大多数时候是因为我们并没有针对项目的规划,或规划不周。


为什么规划您的工作如此重要

  1. 它能提升注意力。 缺乏专注,即使是简单的项目也需要花费很长时间才能完成。 您越专注于自己的项目,您完成它的速度就越快。
  2. 它提供了清晰度。 您将更好地了解您需要做什么,以及急迫的程度。
  3. 它令模糊思维最小化。 由于大多数情况下我们正在针对世界上最难预测的事情之一外汇市场创建程序,一旦我们最初打算采用的想法失败,那么我们就会被更多不同的想法轰炸。 本质上,如果我们想要更快地完成我们的项目,坚持我们早期的规划是一件好事。

在您开始任何旅程之前,您需要知道自己欲往何处,如此给您的项目足够的时间准备,以确保您不会遗漏任何东西,当您非常清楚自己的需求,那么就是开始在键盘上敲代码的时候了。


02: 不要重新发明轮子

在大型项目中,尝试从头开始可能既困难又令人沮丧,因此开始工作的最佳方法之一是考虑在 代码库里、市场或其他任何地方挑选其他人过去完成的作品。

可能已有人完成了您尝试进行的相同项目,若以它们为起点,可能会有助于我们快速地开始,比之我们从头开始,肯定会领先几步。

注意:不是所有以前的作品都很好用,您必须筛选正确的项目

筛选正确项目时需要考虑的事项

筛选正确的工作可以帮助您快速工作,但筛选错误的工作会让事情变得痛苦,以下是一些需要考虑的事项。

  • 确保它有更少或没有错误。 想必您不愿带着初始错误开始您的项目(检查/调试它)。
  • 它应该有清晰且解释清楚的文档,因为您需要了解刚刚筛选出的工作中的几乎所有内容。 它需要有良好的文档供您阅读,就像我们在萌新时阅读 MQL5 基础知识一样。
  • 代码也要最新的; MQL5 语言一次又一次地更新,去年编译并运行的一些方法和实现,今年不一定能一样运行,这是由于语言更新。 因此,请始终确保该项目中使用的代码是最新的。 验证这一点的最佳方法是在 MetaEditor 中编译代码,检查它是否没出现错误。

例如,您想要基于移动平均线和其它一些计算来创建一个绘制指标线的指标。 您可以从代码库下载移动平均线指标,然后对其进行修改,或添加一些缓冲区,从而能按照您希望的方式对其进行调整。

代码库里几乎包含所有您可能想要执行的基本任务的代码; 所以,从中筛选适合您的。


03: 只做需要做的事

作为开发人员,我们经常忘记我们应该在项目中做什么,我们倾向于优先编写那些不会直接影响我们项目中主要实现目标的东西。

例如:智能交易系统中的花式图表动画、图表对象和按钮。

如您所见,所有提到的项目对我们的任何交易活动都没有直接影响,且在大多数情况下,我们的 EA 没有它们会更好。

由于对象是在 ObjectCreate() 内置方法下创建的,因此可能需要花费大量时间对它们进行编码,更不用说为了更好地在图表上显示而排列它们,故此,流程占用了我们很多时间

老实说,除非您想创建一个智能助手,否则我不建议在智能交易系统上使用图表对象和花哨的动画(若您想要更迅捷地开发时)。

比方说,自由职业者的客户希望您编写一款拥有其它一些功能(例如尾随止损)的布林带智能交易系统。 只做这些,即不要多也不要少

把您所有的精力都用在不太重要的事情上是极不明智的,您可能直到最后期限来临才意识到自己一直在浪费时间,因为程序当中充满了垃圾。

当您的大脑处于兴奋和有创造力的时候,先开始不太重要的事情;然后在您感到疲惫的时候,再开始重要的事情;或者只是因为您的项目已经接近、到了最后期限、故而匆匆忙忙地完成您的项目;这些都是不明智的。

“学会区分资深和萌新。 很多人做不好仅仅因为他们主攻次要事情” — 吉姆·罗恩

总是从主要的、有时是复杂的任务开始,这些任务会直接影响您的需求;之后如果您还没有到最后期限,则可以开始做那些次要但很花哨的所有事情。


04: 迎接更大的挑战

正如我在第一篇文章中所说的那样,更迅捷的开发人员是那些做什么事情都灵活和舒适的人士。 这一点的关键是我们作为开发人员需要感到舒服,这样我们才能变得更迅捷。

那么,怎样才能令人舒适呢?

我相信您以前可能玩过电子游戏。 如果您玩过最难的关卡,并在该特定游戏中成功通关最难级别、或击败了最难的玩家,那么再战中等水平玩家/中等关卡就变得容易了,当然更容易击败普通玩家。

这条原理很好,不仅适用于玩电子游戏,也适用于编码。

选择一个您想擅长的领域,然后为您以前从未做过的复杂程序做规划。 例如,若要擅长 EA,就规划多策略、多指标、图表对象过多、多次交易修改、等等诸多功能。 在您刚刚完成那个核心项目的规划后不久,设定一个紧迫的截止日期,并尝试在此之前完成。

如果您成功了,您将来可能面临的许多项目就能变得轻松驾驭;您会感到更舒适,最终您的开发速度得以提高。

“迎接最困难的挑战,其余的就会变得轻而易举” — 史蒂夫·钱德勒

此处的目的不是伤害您自己,而是令您面对职业生涯中可能遇到的困难挑战时更自信,因为这些挑战可能需要您快速解决。


05: 健康生活

如果您想在这个职业中富有成效,那么健康是您必须确保不会出错的事情之一。

编码职业需要在学习代码、记忆、创造性、保持专注等方面进行大量脑力劳动。

  • 学而不记,则您一无所学
  • 缺乏注意力进行编码就是浪费时间。
  • 缺乏创造力就没有创新、差异化、没有机会,复杂的问题终究难以解决

我不是健康专家,对于那些希望深入研究该主题的人,我建议您阅读此博客里的帖子

以下是我的健康小贴士,可提高您的生产力,进而加速开发

了解远离您的代码的价值。

如果我们坚持 24/7 全天候编码,我们可能不会注意到我们并非一直保持创造力和专注力,因为对于这个 21 世纪的普通人来说,保持专注是一个主要问题。

一些 1990 年代的研究建议,由于我们自身警觉周期的自然演化,我们每休息 15 分钟才能集中注意力不超过 90 分钟。

健康专家则建议编码时段为期 90 分钟,但是,

我的编码时段是随机的,这要取决于我如何看待自己的生产力效能。 有时我可能会连续写好几个小时而不休息,但有些时候我无法集中注意力,发现自己需要随机休息来提神醒脑。 我相信我们有不同的注意力跨度,因此请规划并设置适合您的正确编码时段。

获得足够的睡眠,令您的大脑发挥最大功能。

为此,您每天至少需要 7 个小时的睡眠。

吃得更好并锻炼。

早上起来跑步是改善一整天心情的最佳方式。 如果您还未曾尝试过,请尝试一下,看看您一整天的工作效率是如何提高的。

过世之人不写代码,生病之人会写糟糕的代码,所以要照顾好自己


06: 现在就行动

当您在下一个大项目中的任意时刻触发一个新思路时,不要掐灭它,立刻开始规划启动开始完成它,就像我在第一点当中所说的那样。 除非您手头有比它更重要的事情,否则您需要立即开始行动。

现在就行动,有时拖延就意味着永远错过

立即开始不仅可以帮助您快速达到最后期限,而且可以避免不必要的延迟;这些延迟也许并不碍事,但可能会导致您的大脑在延迟时间范围内开始淡忘这个想法。

“时间在流逝,所以无论您要做什么,现在就要行动” - 罗伯特·德尼罗

放到开发方面,延迟会产生不良后果。 当您触发某个想法并第一次规划如何行动时,很容易忘记自己打算做什么(特别是如果您还没有把它写下来),进而会延迟产品的使用和改进。


07: 不要过度劳累自己

编码职业充满了无穷无尽的我们需要学习的不同种类的东西,诚恳地说,您不可能擅长所有这些特殊东西,因为它们太多了。

即使您并不擅长项目内含的所有领域,但加快开发的关键是不要尝试自己完成所有事情。 我在第三篇文章中提到了这一点:要点 #05 把您的项目开源,以便人们可以分享他们对该特定项目的看法。

但是这个过程本身需要曝光(有些人可能不需要),并且可能需要一点时间才会有人开始献策献力,特别是如果遇到它的人对此不感兴趣。

假设您想很快完成它,最好的方式可能是从 自由职业者聘请一些人。 这里的重点是您聘请某些人作为合作伙伴(在您不擅长的领域为您提供帮助)。

例如,

我个人在指标领域并不擅长。 有关指标的缓冲区和其它类型的东西,我罕有涉及,因为我不喜欢它们(由于个人问题),但是,我是智能交易系统、脚本和许多其它方面的专家。 若在我的项目中发生这样的情况,即我觉得需要一个指标,那么我需要雇聘请某些人来为我做这件事,而我来做其余的事情。

如果项目很庞大,就把它切分成几个部分,聘请更多的开发人员。 参与其中的自由开发人员越多,您完成的速度就越快。

这种方式相当昂贵,但值得。 我相信这大概是所有方式当中最快的。 这就是为什么科技或创新公司从不会只雇用一位程序员(有时甚至不低于 1000 位)的原因,因为他们熟知这一原则。


08: 质量不是一成不变的

与其急于完成项目,您尚需考虑优良品质产品在结束那天还需要什么。

劣质产品并不是工作的终点,因为随着时间的推移,它总会迫使我们做出一些改进,因此,工作是没有终点的。

在进行下一步之前,请确保您正在编写更好的代码、实现想法、良好的架构、设计、无错误代码、等等。 如此,一旦您完工,就不必返工。

创建高品质产品的过程可能看起来很缓慢,但事实并非如此,大多数开发人员没有意识到糟糕的代码和糟糕的架构总是困扰着我们,故希望我们能把它做得更好。

优质产品并不意味着它是圣杯,它只是一种简意

  • 按计划完成
  • 没有漏洞
  • 精心设计,结构清晰,解释清楚
  • 易于使用且易于交付给其他人

我非常同意“罗伯特·C.鲍勃叔叔”的说法

“走得快的唯一方式就是要走好。 每次您屈服于牺牲质量换取速度的诱惑时,您反而会放慢速度...... 每次”。


09: 总会有最后期限

如果足球比赛没有结局,球员们会怎样?

他们将会丧失热情、放弃努力,游戏就丧失了乐趣,根本就不是比赛!

我们在生活中所做的一切都必须有一个结局,这样我们才能认真对待它。

一旦您为工作做好了规划,为项目设置一个您希望的完工截止日期;一旦您到达项目终点时,截止日期也可衡量您的编码速度。

此外,设定截止日期是成熟开发人员的标志,表明您对完成该特定项目的认真程度。

自由职业板块里 的任何任务都有一个截止日期(虽然并未严格遵守),您必须在自己的项目上做同样的事情,它不一定是完美的,但您会有时间来改进。

记住

如果没有截止日期,您的项目也不会有终点。


10: 了解您的高峰时刻

每个人都有自己的高峰期;即您的生产力和学习效率处于高水平的时刻。 它可能在一周中的某些天,或一天中的某些时刻。 这是因为我们的大脑在不同时刻处于不同的状态。 例如,我最高效的时间是从早上 4 点起床到早上 7 点或 8 点。 这些时间是我用来学习新事物,和执行艰巨任务的时间。

对其他人来说,可能是早上、下午、午夜、等等。 找到您的生产效率最高的时间,并有效地利用它们来推进您的项目。

比之那些利用此段时间忙于做其它事情,譬如花费在上班路上,且仅能挤出一点时间从事编程项目的人来说,在这些最有生产效率的时间工作会更见成效。


11: 反思是关键

您需要花时间检查您的代码。 这样做的目的是确保您从错误中吸取教训,且在下次您就不会被卡住,或因犯下之前已成功解决的旧错而浪费时间。

剔除应用范围内的盲点;有时您必须相信自己的直觉;当您实现了一些东西,但依然自我感觉不理解它时,您必须排查,因为它可能是真的,您已经实现了一些东西,但自我感觉它不是最佳实现方式。


12: 客观衡量

在您工作几天后,考虑抽时候做一个详细的自我检查,分析您的活动并问自己:我的时间都去哪儿了?

假设您意识到您的大部分时间都花在阅读代码而不是编写代码上...... 那么您必须学习如何更迅速地阅读代码。


13: 工作之外的探索

我想称之为热身,男女运动员在他们的职业生涯中都会这样做,我们当然也可以这样做。

当您并没有在项目上工作时,探索新的函数库、指标、脚本、工具和技术,从而帮助您提高工作效率。

您可以从事与您的项目有些类似、或者有几个相似之处的开源项目。

这会令您为实际的项目做好准备;如果您做得好,您会发现自己的项目变得比以前更容易,您的速度必将极大提高。


14: 更迅捷的测试

测试是您需要擅长的关键领域之一,这是因为您在编写一些新代码模块之后,必须确保一切按预期工作后,故此您需进行大量测试。

除了编写和阅读代码之外,测试是我们需要花费大部分时间的领域,除非您不会出错。

测试您的程序可能在某种程度上取决于您的 PC 硬件资源和一些软件设置。

例如,(在特定设置下)如果您的 CPU 有 5 个内核,则不要期望测试速度与拥有 7 个内核或 9 个内核的机器一样快。 更不用说其它因素,例如内存、策略测试器设置、代理配置,和您正在测试的程序。

这是一项涵盖本文所有内容的庞大主题,我建议您通过以下所有来源进行学习

下面是一些关于如何更快地进行测试的简单提示。

取消可视模式复选框,即不显示图表指标和交易

注意:取消选中此复选框,则测试时会在图表上隐藏所有原本可见的操作。 如果您已经确定(您知道)自己的程序如何在后台运行,那么就执行此操作。

选择建模选项:仅开盘价

注意:此方法适用于明确由柱线开盘价控制的 EA。 出于某种原因,这种方法在依据多品种和多时间帧信号提取策略的 EA 中不起作用。 在开盘价模式工作时,您可能会收到 CopyRates 错误,和 WRONG TIMEFRAME REQUEST。

选中按点数计算盈利复选框,以便更快地计算

注意:所有交易盈亏将以实际点数计算,而非以货币值计算。

长话短说。

更迅捷的 MT5 测试

在功能强大的机器上测试/优化您的策略,最快方式是利用 MQL5 云网络,且无需经历设置的麻烦,也无需担心 PC 上的硬件资源。


结束语

我希望您在成为一名优秀开发者的过程中一切顺利,这就是本文的全部内容。 如果您有一些技巧想与我或其他人分享,请随时将它们添加到本文的评论版面。

谢谢阅读。


本文由MetaQuotes Ltd译自英文
原文地址: https://www.mql5.com/en/articles/9840

DoEasy 函数库中的图形(第八十六部分):图形对象集合 - 管理属性修改 DoEasy 函数库中的图形(第八十六部分):图形对象集合 - 管理属性修改
在本文中,我将研究跟踪属性值的修改,以及删除和重命名函数库中的图形对象。
DoEasy 函数库中的图形(第八十五部分):图形对象集合 - 添加新创建的对象 DoEasy 函数库中的图形(第八十五部分):图形对象集合 - 添加新创建的对象
在本文中,我将完成抽象图形对象类的衍生后代类的开发,并开始实现将这些对象存储在集合类中的能力。 特别是,我将开发把新创建的标准图形对象添加到集合类的功能。
多层感知器和反向传播算法(第二部分):利用 Python 实现并与 MQL5 集成 多层感知器和反向传播算法(第二部分):利用 Python 实现并与 MQL5 集成
有一个 Python 程序包可用于开发与 MQL 的集成,它提供了大量机会,例如数据探索、创建和使用机器学习模型。 集成在 MQL5 内置的 Python,能够创建各种解决方案,从简单的线性回归、到深度学习模型。 我们来看看如何设置和准备开发环境,以及如何使用一些机器学习函数库。
DoEasy 函数库中的图形(第八十四部分):抽象标准图形对象的衍生后代类 DoEasy 函数库中的图形(第八十四部分):抽象标准图形对象的衍生后代类
在本文中,我将研究为终端的抽象标准图形对象创建衍生后代对象。 该类对象定义了所有图形对象通用的属性。 因此,它只是某个种类的图形对象。 为了阐明它与真实图形对象的从属关系,我们需要在衍生后代对象类中设置该图形对象特定的固有属性。