“编程胜于性别”



在我职业生涯的曙光中,我曾听苏联一家工厂的ACS部门负责人说过这句话,当时他提议去自己部门工作。

自然,那时我没有想到,现在我不认为编程可以代替性爱。但是直到几年后,他才能够完全欣赏他用流行语表达的情感深度。包括因为我自己有时在创建完美的体系结构或漂亮的程序代码时会感到发抖。而且,尽管每个人对美的观念可能都有自己的看法,但对完美的渴望对每个人都是相同的。

然而,情感是一回事,工程师则是合理的,却是不同的。我一直对该问题感兴趣,但是为什么要使代码漂亮才是真正的原因呢?

我想问一下任何对在软件开发和其他技术领域中寻找美的理由感兴趣的人。

前言


撰写本文的动力是有关Habr的最新资料“ 不要再担心代码中的主观漂亮决定了-您不是机器人 ”,作者试图以此来证明他对创建漂亮代码的直觉渴望。

但是,从对该文章的评论来看,并不是所有的读者都在“工程浓汤”的水平上分享作者的观点。尽管有这样的说法有辅音:
“当然,代码应该漂亮。圣诞树,树枝,生活中的一切都应该美丽!否则,如果有些丑陋,您可以钢筋混凝土说“这是一个错误”(有时您必须忍受它,但这是一个错误!)”
的确,其他人则建议抵制内心的声音,不要拖延“病态完美主义的治疗”,这可能是一种强迫症,强迫症或强迫症。

但是,如果我们抛弃开玩笑和开玩笑的话,那么自古以来人们就已经注意到了对美的渴望现象,并且这与任何技术学科都不陌生。毕竟,不可能有人会争辩说建筑师或工程师在汽车设计方面的工作成果不能兼具技术和美学上的完美。





但是对我来说,软件开发更紧密,这将在后面讨论。

软件创建过程的圣礼


可以从不同角度进行软件开发。一方面,这是一门纯技术性的学科,不允许以自由,坚强和一贯的发展方法为基础。这是一个长期建立和调试的过程,其中包括需求的收集,技术规范的制定,计划,监视计划的执行,执行获得的结果等。

开发软件产品的另一种选择是鲁Ag的敏捷,它会遵循约定并赞美客户的需求。他准备至少每次迭代都重新构建软件产品的体系结构,以期获得所需的结果。此方法更像是在获取可用软件与完全耗尽客户的信任和资源之间取得平衡的技术。

只有随着时间的流逝,您才开始了解到,普通的真理要灵活得多。在清晰的瀑布中有一些灵活性,而在敏捷中则有计划和截止日期。因此,真相一如既往地介于两者之间。

但这仅适用于工作流程的外部。最可悲的是,创建漂亮的代码绝不取决于它。

而且,相同的代码可以同时被识别为美观和丑陋!这意味着美的概念纯粹是个人的(谁会怀疑)。什么是漂亮的代码,以及如何编写?第20届C未知代码国际比赛的结果

因此,我必须更深入地研究这个过程的基础。按照开发人员的个人身份,他们可以同时或在不同时间充当程序员,架构师,测试人员,分析师甚至是所有人。

那么,在小公司和大公司中,在软件行业毫无生气的机器中,这些齿轮的驱动力是什么?

当然,要寻找动力,离不开心理学。

推动力是什么?


不,我不会引用有关心理学或个人动机的科学论文。现在,如果需要,任何人都可以找到有关这些主题的许多文章。

我对激励开发人员创建程序代码的激励原因的分类感兴趣。既然有希望可以找到开发者渴望的原因,所以有时可以从美学的角度评估来源。

不幸的是,我没有达到这样的分类(也许我没有找到或不在那儿),因此,通过分析我自己的经验并与同事沟通,我决定独立确定具有常规名称的开发人员的以下动机:物质社会内部

物质动力


这种动机基于经济动机。开发人员不在乎什么以及如何编写。他将尝试遵守项目中批准的编码风格,并且不关心代码的美观。因此,对工作结果(包括他们自己和同事的工作结果)的评估将从正式的角度进行,而美学是没有地方的。

社会动机


在这种情况下,评估工作成果的主要标准是团队的意见,可能是工作同事,大学的朋友等。此外,不仅根据正式标准来评估编码风格。已经有情感成分,是美丽的抽象标准。

对于开发人员而言,其工作结果应首先获得团队的认可和认可已经变得越来越重要,而实质性的原因可能会被抛在一边。在最高级的情况下,开发人员准备编写代码,甚至“为了食物”,以便满足目标群体或他的社交环境中的自我价值感。

内在动机


这种动机与社交非常相似,只是评估因素不是团队,而是开发人员本人。有了内部动力,就根本没有物质动力,而且工作的结果可能根本不会公开,因为他仅仅因为他的存在就已经使他的作者满意(或继续给他带来满意),并且不需要外界的任何确认性评估。

当然,程序员的动机分离是有条件的,可以从一种类型流向另一种类型,甚至可以是多种激励因素的组合。

但是,如果您从这种角度来看程序员的工作成果,那么在这样的分类系统中,您已经可以找到一些逻辑,并尝试在几乎所有源代码中找到美感(来自IOCCC竞赛的程序):

typedef unsigned char t;t*F="%c",l[]="|\\/=_ \n](.\0(),*(.(=(}*.)[[*.",N='\n',*
r;typedef(*H)();extern H Ar;Q(a){return(a|-a)>>31;}H S(c,a){return(H)(a&~c|(int
)Ar&c);}extern t*ist;V(t*u){*u^=*u&2^(*u>>7)*185;}Z(t*u,t n){*u-=n;}e(t c,H h){
R(h,Q(*                                                                 r^c));}
I(){r=l                                                                 +7-4*Q(
getchar                                                                 ()^*l);
}R(H h,                int                                              c){Ar=S
(c,h);-                main()                                           ;}P(){r
++;}z()                {                                                O(&N);}
O(t*c){                    printf(                                      F,+*c);
}T(){r=                        "This is not a function\n"               ;}w(U){
U=Z(r,8                    );                                           r-=~Q(*
r/8-4);	                   return 0;                                    }M(){r=
ist-68;                }                                                h(){t G
=r[1]-r                                                                 [2]^*r;
G^=30;V                                                                 (&G);e(
0,(O(&G                                                                 ),P(P(*
r++)),z));}g(){M();R(h,0);}f(){P(O(r));e('f',g);}p(){P();e('a',f);}d(){P(O(r));
e('n',p);}c(u){u=r[-2];T(Ar=d);R(f,Q(u^'"'));}n(){e(w(O(l+*r%8)),c);}a(){I();R(
n,0);}main(){S(Q(Ar),a)();}H              Ar;t*ist="Rene Magritte"-(1898-1967);

当一个玩笑让你思考


最初,这篇文章是开个玩笑,它的名字不言而喻,因此相应地选择了图片。

当我意识到对程序员渴望美丽的动机的分类表使我想起很多东西时,请想像一下我的惊讶。这些图案非常清晰地投射到马斯洛著名的需求金字塔上。



物质动机使人们不再需要金字塔的基础。这些是生理和安全需求。社会动机落在金字塔中间,导致满足归属感,爱和认可的需求。最后,内在动机 非常清楚地投射到金字塔的最高处,并关闭了对知识,美学和自我实现的需求。

这不是在开玩笑吗?


由于没有认真研究程序员对美的渴望,结果获得了相当合理的结论,如果需要,可以将其用于软件开发行业。

确实,从动机的角度来看,出现了一种评估代码美的真正方法的情况下,将它添加到各种用于评估编码样式的实用程序(如pylint,cpplint和其他皮棉)中将不难。之后,无需进行任何心理测试和填写无聊的问卷,就可以评估特定开发人员的动机。通过分析器传递代码就足够了。

也许我什至不让精灵从瓶子里出来,因为 如果有可能通过创建的代码来衡量动机,那么下一个自然步骤将是过渡到其管理。实际上,这种评估动力的方法非常容易实现自动化,并且在存在进行操作测量的机会的地方,也存在对测量参数进行操作管理的机会。

换句话说,让项目经理了解团队成员的心理状态的最新信息将有助于他们评估将动机转换为社会动机或内部动机的尝试结果,自然可以节省经济激励。;-)

更新1:我将保留从链接到草图扬瓦列夫关于文章的话题:谢尔盖和“编程比性生活要好”

更新2:
根据投票的最初结果,一种投票倾向主要是出于内在动机(145-60.3%)。但是在投票时选择第三个选项之前,请考虑以下问题:谁为您的项目设置质量(或美观)标准?

如果您是团队负责人,架构师或接受或严重影响确定此类评估规则的其他人,那么您的选择就是正确的选择。

但是,如果您对形成代码质量标准的贡献微不足道(例如,甚至在您加入项目之前就已经确定了这样的标准),但是一切都完全适合您,那么很可能您与内部和社会动机保持一致,但是在接受采访时,正确的选择是正确的为第二个选项投票,即社会动机。

为了明确验证这一点,请设想一下您有一种“黑”心情不好并且工作结果(当时编写的程序代码)与此相对应的情况。您的提交会被批准吗?如果是的话,即使您没有完全遵守公认的质量标准,您的动机也实际上是内部的。但是,如果您的代码被拒绝,那么您的动机仍然是社交的,尽管通常这与内部动机协调一致。

All Articles