我对行业失去信心,精疲力尽,但是对工具的狂热救了我



我经常嘲笑我发现不足的技术,作为回应,我收到(伴随着论据)纯粹的愤怒和痛苦。 有时是身体上的。

由于某种原因,开发人员非常个人地批评自己喜欢的技术。 这种“工具迷”是一种奇怪的现象,我无法从逻辑上加以解释。 有人说每个人都倾向于这样做,因为编码人员的思维过程与他的编程语言交织在一起很深。 有人说这是大三学生的谬论-您第一次写东西就可以了,然后您开始像对待神一样对待语言。

不管是什么,我都不了解。

我一直认为信徒是卑鄙的。 但是我总是试图理解为什么卑鄙的人成为了他们,为什么我避免了这种命运。 我开始思考,ba! -原来我也是个傻瓜。 我是崇拜F#的信徒。 当然,它背后还有一个故事。



我最初是一名初级C#开发人员。 当时的Xamarin,Android开发,整个过程。 我上班的第一步充满了痛苦。 我不得不根据iOS版本的屏幕截图和GIF单独编写一个Android应用程序。 它每隔一次编译一次,到处都是buga,而我得到的唯一反馈是-“为什么不如屏幕截图所示?”。 那是一场噩梦,我很快就离开了。

然后,我花了半年的时间在家里学习编码,然后在一大笔工作中找到了一份工作。 那里更有组织性-团队,导师,考试,模式,代码审查,严格的要求,代码质量,可读性和性能的高标准。 一言以蔽之,一切都成熟了。 我认为那是应该起作用的方式。 但是,事实证明,这是一场更大的噩梦。

一年多来,我们的整个团队一直在为工具创建模块,该模块与用于制造其他工具的工具一起使用。 大概和我们用来制作模块的一样。 每天我们都必须打电话给印第安人和美国人,并向上帝报告情况。

在某个时候,我意识到自己做的越来越少,但是什么都没有改变。 我用断断续续的英语撒谎:“整个星期我都在寻找错误。 仍然没有成功。 将继续。”

“ Ok Phil,听起来不错”-我的跨大西洋伙伴回答。

有一次,我绝望而又可耻的去了管理层,并要求解雇我,但由于某种原因,他们给了我加薪。 我已经讲过这个故事了。 我既不开心也不难过-感觉就像是一个超现实的笑话,就像这个世界的逻辑正在瓦解一样。

够奇怪的是,出于无聊和野心勃勃,我决定在家中开发东西,并“适当地”做所有事情。 我有很多想法如何使用软件项目来改善世界和我的钱包。 我按书完成了所有工作:设计文档,体系结构,系统要求,VSTS项目。 就像公司一样,一切都井井有条。

没有到任何地方。

自然的结论-这个想法很废话。 旧代码进入垃圾桶,新思路。 结果相同。 重新开始。 这持续了几次。 我告诉我的同事,他们很困惑。 我做错了什么? 我这样做的方式与那些已经从背后赚钱的人完全一样。

具有(高度)自尊心的人通常比其他人更好,但有时必须为此付出代价。 您需要对自己撒谎以应对失败。 我告诉自己:任何开发人员都有能力。 这都是关于如何完成的,而我对“如何”的要求太高了。 它们不适合家庭创业,也不值得进行毫无意义的业务任务。 接下来的想法是:“我还不准备放弃质量标准。” 即使我需要制作一个在您点击屏幕时会放屁的应用程序,我也会尽可能让它变得美观和深思熟虑。

因此,我在家中建立了一个本地商业货运部门。 带来了一切-仪式,流程,标准-但不是东西的实际内容。 我玩过没有企业的业务开发人员,例如一个穴居人,他用稻草做成跑道和钟楼,并期望有钢鸟落在上面。

我写了一堆堆正式的严格代码,这些代码并没有使我更接近最终结果,但恰恰相反。 如果您考虑一下,我的职业就是失败和失望的故事。 我完全放弃了它,只是每天工作时边喝16杯咖啡边看电视节目。

在最底层,我注意到Habr上有关F#的文章,尝试了一下,然后想到“嗯,还不错!”。 我的老板高兴地付了我一个月的学费(尽管他不知道)。

F#并不难学习,因为它与C#具有相同的运行时,并且我已经每天使用函数式方法在TypeScript中进行编程。 我意识到我可以将我的任何项目转移到F#中。 让我暂时忽略我的技术技能,因为这都是相对的。 在我工作的团队中我很棒,但是在一个由F#开发人员组成的团队中,我只不过是管理员。

但是我可以从根本上解决问题,尽管我深知:我什么也解决不了。 我将继续把知识扔进垃圾桶。 我完全对编程失去了信心。

有一天,我认为足够了。 我要戒烟了。 那是一个寒冷,黑暗的冬天。 我离开办公室,上了车-它没有启动。 一段时间后,引擎终于恢复了活力。 我不知道我是否早些时候注意到了燃烧塑料的气味,但是随后引擎盖下起了火。 几秒钟后,我在停车场附近跑来跑去,告诉所有人把车从我的车上移开。

五分钟的恐慌和混乱之后,只剩下一辆燃烧着的旧尸体和一部带有愚蠢YouTube视频的电话。 当时的温度是-30摄氏度,我穿着一件浅色外套,打算用一辆温暖的汽车开车回家。 完全耗尽并在道德上被摧毁。 出租车没有钱,而且我太在意自己上公共交通了。 我走了10公里左右的路程。 回家我需要帮助妻子和孩子一起吃饭,吃饭,让他们睡觉,做一千件事。 但是最终没有什么可以分散注意力的了,我仍然与失眠和认识面对面-我一文不值,我永远都不会成功。

在这个人生中最糟糕的夜晚,从寒冷的步行回家中仍然寒冷,我给了自己最后的机会。



我坐在F#上写了一个小型的数字生物群系,机器学习单元彼此互动并发展,同时我在玩弄参数并观察会发生什么。

是的,那天晚上我可能有点发疯了。

通常,我会混合使用升序和降序编程模型。 我用伪代码概述了一个粗略的解决方案,然后开始将最重要的细节编写为单独的模块。 从小到大。

从伪代码过渡到实际代码,我完成了一个或两个大模块,并检查是否有任何工作。 通常它不会,所以我开始进行迭代,从头到尾重复此过程,直到它起作用为止。 但是大多数情况下,我只是在第5次或第6次迭代后才放弃。

我用F#尝试了相同的方法。 我对项目有一个大致的了解,然后解决方案是在脑海中一砖一瓦地建造。 您提出了一个接一个的案例,然后在某个时候您意识到自己知道如何使它起作用。 然后您开始编码并意识到不,您没有。 即使您经常思考,思想也不会转化为编程语言。 我一直在发生这种情况。

但是这次不同了。 我在VSCode中创建了一个.txt文件,并为描述应用程序生命周期的函数编写了伪代码。 我意识到我的伪代码在F#中有效。 无需翻译任何内容,我只是编写了项目的主要功能。 好的,我更改了文件扩展名,将其添加到干净的解决方案中。 有我的生命周期功能。 它接受当前的世界状态,对其进行处理(世界本身)并吐出更新状态的事物,将其转换为一组AI参数并返回的事物,以及接受参数并吐出解决方案的AI本身。 。

然后很简单。 您获取状态,将其转换为AI参数,将其提供给AI,将结果转换回世界状态,将其提供给游戏,然后结果返回生命周期函数。 精美的递归,简单的算法,出色的代码,所有GoF均可使用。 剩下的就是使它工作。

但问题是,我不必再考虑体系结构。 我写了Java和Sharp开发人员称为“控制容器反转”的功能-该功能采用生命周期功能,并通过我的模块(II,Game)的功能。 VSCode用红色突出显示它,因为它既没有功能也没有模块,但是我有我需要的-红色突出显示消失后,我就可以构建项目并完成它。

我采用这些模块,并使它们以相同的方式一个接一个地工作。 整个项目为5个文件。 AI文件有500行-很多,但大多数情况下都可以很好地运行。 这种方法的优点在于,我可以编写一个工作生命周期函数(这是我应用程序的核心),而无需描述任何其他内容。

整个体系结构是10行代码,只需几分钟即可完成。 在我什至不了解要创建的内容之前,都无需使用C#进行接口,抽象结构,位置,所有这些DefaultInterfaceNameClasses和其他废话。 您编写的哑核仅能解决问题,并且比您在Java或Sharp中遭受企业级折磨的情况还要漂亮。

就像我在F#中思考时一样,我只是通过将思想输入编辑器来完成所有操作。 我没有在C#注释中概述计划,而是编写了工作函数。 除了描述数十个甚至数百个接口之外,还有一个带有应用程序域模型的小文件。 点击“构建”。 收到了有效的解决方案。 一晚上。 有了质量代码,我可以放心地进行审查。 就这么简单。



我不知道要怎么处理-如果F#是一项非常出色的技术,或者它完全适合我,或者是专门为这些任务而创建的-有什么区别? 重要的是那一刻我正在下沉,我需要一艘救生艇。 生活让我F#,我退出了生活。 现在,对我而言,这不仅是另一种无精打采的技术,而且还是一笔巨大的情感交易。

现在,当我听到有人责骂F#-“胎教! 一个怪胎玩具……”-我一直记得冬天寒冷的夜晚,燃烧的汽车,冻在我嘴里的香烟,抑郁症和F#把我从里面抽了出来。 好像有人向我最好的朋友扔了屎。

对于局外人来说,这可能看起来很奇怪,但是如果您那天住在我家,您的反应也会一样。 我认为这在任何技术专家中都是常见的。 他们爱上了他们的语言,因为他们对使他们发现它的情况有一种情感上的依恋。 然后我来吐口水进入他们的灵魂。 现在谁是白痴? 我是 我希望我不会再这样做了。

Source: https://habr.com/ru/post/zh-CN440914/


All Articles