更好的程序员(第 07 部分):变为一名成功的自由职业开发者的注意事项
概述
自由职业者是 MQL5 中值得称道的领域之一,因为许多开发人员希望凭借他们的编程能力来获益,而其他人也希望获得挑战和经验。 这些都是我和其他人在自由职业生涯中所经历的成功和失败观点。 经由分享这些经验,本文旨在帮助任何人都能在自由职业领域成为更好的程序员。 在本文中,您将会看到对于我和其他人来说,哪些能做或不能做,从而对您的独立旅程有个深刻洞察。
"除非您对一半的结果满意,否则不要只付出一半的努力"
内容目录
- 不要申领一件您不了解的任务
- 进行研究
- 避免让客户承担太多工作
- 紧贴 MQL5.com
- 避免对客户宣扬技术
- 自律且对客户诚实
- 从干净的代码开始
- 您不仅是一名编码者,也是一名问题解决者
- 谨防那些试图与您斗智的客户
- 把任务做好
- 少量选择
- 成为他们的朋友
01: 不要申领一件您不了解的任务
不要仅仅因为报酬高就申领一件您不确定该怎样完成的任务。 由于金钱很甜蜜诱人,我相信这是您决定成为一名自由职业开发者的首要原因,所以很容易自我膨胀,认为在工作过程中,能轻松厘清事情,并加以解决。 根据我的经验,这种心态在自由职业者身上是行不通的,尤其对于那些清醒了解自己所需的严谨客户,以及那些期限很紧的任务。
看看,编程中的大多数领域都需要大量的工作和努力来学习掌握它们,所以您所认为的只要学习一些东西,就能够在若干小时内有效地实现它是令人反感的。
我在《自由职业者》中完成的第二项任务是创建若干个指标,把一些指标从 MQL4 转换为 MQL5,并创建一个使用所有指标的智能交易系统。 这件任务只有 30 美元,但我依然决定接受它。 老实说,当他在任务讨论板向我充分解释了所需指标的所有逻辑和需求之后,我明白这个指标对我来说将是困难的,因为我对该题材指标尚是菜鸟(直到今天),因为我从未学习、编码、或使用过它们。 我接受了这件任务,结果呢我最终用了 81 天完成了这件任务。
如果我们计算一下我在这整段时间里每天的工资是多少。
30 / 81 = 0.37 $
在这整段时间里,我每天挣了 37 美分。 真是浪费时间! 我知道 81 天听起来很长,但相信我,您不会每天都这么做。 其中有几周我什么都没做,因为那很难、且很无聊,它不是我想做的事情。 我也不希望仲裁,因为接受这件任务是我犯下的一个错误,我无论如何都想完成它。
如果您看到一件您不曾了解其题材的任务,但您想学习;先把它记下,并在工作之余的正常例行学习中去学习。 同样的任务将来大概率还会出现。
02: 进行研究
我强烈同意我朋友阿卜杜勒·瓦哈布(Abdul Wahab)的观点,他最近是一位成功的开发者。
您可能一眼就能理解这件任务的全部要求,但您不可能那么容易就理解所有内容。 这就是为什么您要研究欲申领的每一件任务的需求总归是一个好主意。 这样做也许有助于您详细了解正尝试进行工作,同时您也能掌握正确的信息,帮助您回答严谨客户可能提出的问题,从而确认您是该任务的正确人选。
例如:
若因为这件任务看似简单且价格昂贵,就试图急于完成之前;先做一些简单的研究,从而辨别以下两件重要的事情:
- 依据自己在 MQL5 或 MQL4 方面的经验,是否有可能实现客户的需求
- 它值得吗(经验和金钱)。
进行研究并不一定意味着只在谷歌上进行搜索。 它还意味着通过实践自我尝试,以及后果的危机预判。
03: 避免让客户承担太多工作
我们看看我上周在论坛上看到的帖子 https://www.mql5.com/zh/forum/371968
一切都从这里开始:
一位医生想从一名对治疗一无所知的患者那里彻底了解疾病及其治疗方法,这是如何的匪夷所思。 就像一位开发人员想知道为什么代码不能如同客户期望的那样工作一样。
我喜欢费尔南多·卡雷罗(Fernando Carreiro)针对这个话题的回应方式
如果您作为一名开发人员,都被某个问题难倒却无力解决;而客户能够自行研究,并找出问题所在,那么他首先就不需要所谓的开发人员。 想想这对客户来说有多困难。 事实上,如果客户知道答案,并意识到这是一个与编码相关的问题,那么他可以为此做什么?
您要对客的任务中发生的任何事情负全责,因为这是您理应要做的,且您是申领这件任务的人,不是客户自己。
04: 紧贴 MQL5.com
在自由职业者中,有人发布超越 MQL5.com 界定范围之外任务的情况时有发生。 比如转换脚本、Web 授权 EA 系统,以及其它许多与之相关的任务。 我不建议您承接这些类型的任务,除非您是这些领域的专家,且这些正是您在 MQL5 自由职业者中想要做的。
这些任务通常在某种程度上没有竞争,以至于您也许被诱惑去学习这些领域,这样您就可以成为下一次从事这些任务的少数人选之一。
无论这些任务的报酬如何,它们都不值得接受。
原因在此
因为它们超出 MQL5.com(MQL5、MQL4 和 Python)编程语言,它们需要您学习新的东西。 作为一名网页开发人员,我也不建议您去学习可能会遇到的所有框架、函数库、等等,因为它们太多了,更不用说这些类型的任务在自由职业者中非常罕见,您花时间去学习一些只是偶尔要用到的东西是一个坏主意。
另一件事是,这些任务最终不仅是编写代码,它们尚需要额外的工作。 例如:
我之前给您的,在 web 服务器表单中为智能交易系统授权的示例。
如果您走完整个解决方案,您需要一个云端环境来托管一个安全的数据库,比如 PostgreSQL(托管不是免费的,记住这一点);您需要从数据库读写,这可能需要额外的 web 后端框架,比如 Flask、express、或者 Node js…,以及许多介于安全措施和有效性两者之间的过程。
长话短说。
在实现所有之后,它可能仍然无法工作,或您希望它如同在 MetaTrader 平台上的工作方式。
05: 避免对客户宣扬技术
自由职业者中 90% 的客户对交易和自动交易系统中涉及的代码或技术层面一无所知。 所以,当您试图向他们解释您的所作所为时,始终避免过分宣扬技术。 始终用他们熟悉的友好语言,您的语言表达应该简明扼要地解释他们想要什么,以及您将如何帮助他们实现这一目标。
与客户对话时的糟糕方式示例:
(这次对话不是 100% 真实的,我在 Photoshop 中编辑了一些文本)
恰到好处地向您的客户谈及并展示他们想听和看的内容,不多不少。 这会让他们更喜欢您,因为您似乎用他们熟悉的语言来表达对他们的理解。
与客户良好对话的示例。
(这次对话也不是 100% 真实的,我在 Photoshop 上编辑过)
永远不要和您的客户这样对话:好像他是您的开发伙伴,或者您试图教他如何编码。
06: 自律且对客户诚实
对于大多数开发人员来说,这是最困难的部分。 当我说,您需要自律之时,我的意思是您需要真诚对待所申领任务的报酬,对应您愿意为自由职业者某项任务付出的天数。
若以最小报酬和尽可能短的期限,很容易在竞争中获胜。 但这是拉低您的身价的最佳方法,这会潜意识地驱使您寻找报酬较低的任务,和对价格敏感的客户;我能说的是,这些任务在大多数时候都不会有好结局。
我不会鼓励无缘无故地以更高的报酬申领任务(别误会我)。 但我认为,对您来说,评估一件任务,以及它可能耗费的时间是件好事。 如果您认定这件任务值 100 美元,那就做吧。 我认为 MQL5 开发人员理应想到这一点:为什么他们要给我们开发人员机会,遵照我们认定的任务所值价格支付给我们,而非客户的报价。
我曾记得,我申领了一件任务,为一款制作完毕的智能交易系统添加神经网络。 客户愿意支付的价格从 50 美元到 300 美元。 我以三天 250 美元申领该任务。 后来我被客户拒绝了,在他给我发了这样的信息后,我意识到他是诚实的。
"很抱歉,我不能与你合作,我要找一位最佳报价的程序员,我已经找到了"
我很好奇,想知道是什么样的报价赢得了客户,所以我问别人的报价多少?客户回答
"他说 40 美元,而且今天他就能交付这项任务"。
这件任务让我觉得自己是个不称职的程序员。 但令我惊讶的是,一周后,我在任务板块收到了一条通知,客户正在寻找另一位开发人员来完成这件任务。 我不知道为何这件任务最终会执行仲裁,但显然什么事走入歧途。
对于您来说,仅仅为了中标最艰难的任务而把最便宜、最快速交付作为投标选项,绝不是一个好主意,您迟早会后悔的。
当我说,要对您的客户诚实时,我的意思是告诉他们您的长项,他们能从您那里得到什么,若您似乎不明白他们想要您做什么时,要坦诚地告诉他们。 诚实将帮助您赢得客户的信任,因为您向他们展示出您是一个可以值得信任的开发者。
07: 从干净的代码开始
不要仅仅出于向客户演示目的而创建一个垃圾软件,指望这样他们就可以立即雇佣您。 不要仅仅为了应付手头任务,然后转移到其它任务,就快速地进行编码。 这样做会让您的客户意识到您为他们创造的产品是垃圾,那么下一次他们就会竭力避开您。
无论一件任务看起来有多微不足道,都要把它做好,就好像您以后没机会再做一样。 精心考虑最佳代码实现,并编写代码,处理发生的异常情况,以及最重要的异常调试。
从始至终编写干净的代码。
此外,不要只是为了演示一个产品,而迷失在编写非干净代码的过程中,且自认为以后会清理它。 这是一个坏习惯,可能会导致产品质量低劣,因为您很可能在任务结束时忘记清理。
08: 您不仅是一名编码者,也是一名问题解决者
作为一名开发人员,您在很多方面都比您的客户更有经验。 您不必只根据给定的任务规范来编写程序,您还能帮助客户,为他们提出实现理想结果的最佳方法。
例如,您可以建议采用 ATR 指标来设定交易目标(止损和止盈),这比泛泛的目标更好。
您有时会认为他们做出了错误的决策,那么您可以客气地告之他们,并建议他们尝试更好的方法来实现他们想要的产品;例如,当您发现客户的智能交易系统缺乏资金管理规则时,您可以建议他/她加入相应规则。
指责您客户的想法是愚蠢的,这是最终进入仲裁流程的最佳途径;也是今后与您合作的客户为零(0)的可靠方式,避免这样做。
精心阐述您的解决方案和观点。 确保它们不会偏离客户最初的需求太远。 坚持他们曾经想要的。
此外,确认您不会保证您的方式能在短时间内带来可盈利交易和较高的回报。 您应该始终站在开发者一边,同时认可交易者这一边。
09: 谨防那些试图与您斗智的客户
有时,您会遇到比您更了解任务的客户。 他们当中有些人可能是开发人员同类,或者掌握一点别种语言或其它领域的编码知识。
出于一些怪癖,有些客户总想与您斗智,教育您除了任务规范之外,您还应该做什么或不应该做什么。 就像是您应该如何编写函数,您应该采用哪些函数库,等等。
因为他们是您所申领的特定任务中的客户,故您不应该忽视他们,也许他们是对的;但要确保他们不会阻碍您做正确的事情;因为您不能确定他们是否知道他们想要您做什么。
想象一位医生尝试给病人做手术,当他开始洗手时,病人突然对医生说:“你不需要做那些小事,只要做手术,我就会好了”。 我相信医生知道他所做事情的后果,所以他对自己应做的事情有最终决定权。
代码中有很多东西并不能直接为交易做出贡献,但它们令我们的程序更容易、更安全地使用;知识不太渊博的客户也许会指使您不要将它们包含在他的程序之中。
而每当客户指使您不要做某事或以另一种方式做某事时,告诉他/她您所做之事的重要性,并要求他/她解释为什么您不应该那样做。 当客户指使您做一些您认为没必要做的事情时,如果在双方互不认同的情况下,在您遵照客户想法去做之前给予警告。
10: 把任务做好
我相信这对任何想成为一名成功的自由职业者的程序员来说都是最重要的。
如果您把任务做好,您会得到顾客的重视,自然而然您就会得到更多顾客。
这不仅是因为您的个人资料会显示一份不错的履历和开发者评级,而且客户也会希望再次与您合作,他们很可能会把您推荐给他们的朋友,因为没有客户希望冒着风险,盲目地寻找合适的人选来完成他们的任务。
遍览所有成功的自由职业开发者,我发现没有人会把任务做砸。
确保您在任何承接的任务机会中做到最好,如此您将领先于大多数只专注于应付任务的开发人员。
11: 少量选择
"你只需要在生活中做一些正确的事情,而不要做太多错误的事情。"
-- 沃伦·巴菲特(Warren Buffett)
一次申领/从事太多任务会降低您交付任务及与客户沟通的效率,您很可能会放弃任何看起来不顺利、或不符合预期的任务,因为您有太多的选择。
在自由职业者版面申领任务的上限是每 24 小时 10 件。 我记得我第一天尝试自由职业者之时,我申领了 10 件任务,并期望至少中标其中的 8 件任务。 在那段时间里,我总想每周都能赚点快钱,所以我想尝试做自由职业者。 而结果是,我都被拒绝了。 于是我改变了方式,我只申领了一件任务,若干天后就中标了。
为何误入歧途?
由于我申领了太多的任务,而我无法向每一位客户承诺,并说服他/她我是这件任务的合适人选,因为也没有履历在背后支持我。 我为说服客户而发送给他们的技术长文根本无效。
这不仅仅适用于任务申领,它对您中标的任务更重要;如果同时不只一件任务的话,一次只做少量任务是一个好习惯。 先完成一项任务,然后再做另一项任务。 这样做导致了高质量的交付,强于高数量交付但并不符合客户需求的劣质产品。
选择少量任务不仅仅是为了精选任务,它也适用于选择您将要处理的工作。
作为程序员,我在自己的大部分文章中都谈到了专业化,所以当谈到自由职业者时,您也应该选择那些您擅长,且仍然渴望更多提升领域的专业任务。
12: 成为他们的朋友
若无经常购买其商品或服务的忠诚客户,就不配作为成功的企业。
如果您想作为一名成功的自由职业者,从长远来看,您必须考虑与客户建立友好关系,从而让他们下次更容易雇佣你。
我希望您能在现实生活中体会到这一点,在现实生活中,您购买的大部分东西、享受的服务和所去的地方都是您信任的。 您最有可能在朋友的商店购物,而非外人的商店里购物。
把客户添加到 MQL5 个人资料上的好友列表中,如此您就可以轻松地与客户建立友谊。 你也可以让他们知道,只要他们想雇用你,你随时待命。
创建“首选雇佣我”链接,让他们更容易雇佣你,格式如此 https://www.mql5.com/zh/job/new?prefered=yourusername
结束语
本文到此为止。 我相信您已经获得了一些积极的东西,这将帮助您变为一名成功的自由职业者。 如果您感觉本文还有缺漏,请随意添加您的智慧之珠。
本文由MetaQuotes Ltd译自英文
原文地址: https://www.mql5.com/en/articles/9995