花一辈子时间成为一个优秀的(和快乐的)程序员

花一辈子时间成为一个优秀的(和快乐的)程序员
一个快乐的程序员知道他们擅长什么,以及他或她想要的天上掉馅饼的工作真正涉及什么。受到一篇关于普通程序员急于学习编程实践的文章的启发,作者分享了他对这个话题的看法。
快速车道与旅程
有一篇关于编程实践的优秀文章,名为《十年自学编程》,作者是谷歌计算机科学博士兼搜索质量总监彼得·诺维格(Peter Norvig)。那篇文章提出的一个大问题是,为什么人们如此急于学习编程?是因为他们想匆忙学习,还是认为计算机比其他任何东西都更容易学习?无论如何,成为一名优秀的程序员不是快速学习的结果,而是学习得好并且对你选择学习的内容保持聪明的结果。有了这个,这里有六条建议给那些开始(或已经在)成为优秀程序员的毕生追求的人。
通过(好的)例子
学习 一些程序员是幸运的。他们有很好的老师或导师,他们引导他们以成功的方式解决软件设计和编码问题。他们学会了如何区分好的设计和坏的设计,以及稳健的实现和不稳定的实现。他们的向导还给了他们关于如何推进编程事业的好建议,他们了解了哪些途径可以通往成功和认可,哪些项目要处理,哪些项目要避免。
指导是强大而势在必行的。如果你选择两个平等的程序员,并给一个好的导师,那么被指导的程序员会成长,而没有辅导的程序员可能会挣扎。
过(坏的)例子
学习 然而,如果无师自通的程序员有很好的生存意识,那么学习编程实践的替代方法将变得明显。通过阅读他人的代码来学习是所有程序员在整个职业生涯中都可以使用的方法 - 并且以代码维护的形式强加给几乎所有新程序员。
在我最初的一份编程工作中,我学会了在维护新老板编写的代码时不该做什么。这位老板是一家快速发展的小型公司的共同所有者,是一个反导师。那时我们主要用FORTRAN编写,当我到达时,他正在制作大量代码。他使用了变量名称,如 a、b、c、aa、bb、cc 等;我只是在学习FORTRAN,但即使在那时,我也很明显这很糟糕。然后,他将这些变量放在FORTRAN公共块中,从而使这些变量成为全局变量;很明显,这真的非常非常糟糕。这使得无法对变量进行 grep 源代码树以重命名它们 - 或者对它们做任何事情。当时我知道 FORTRAN 没有好的集成开发环境来帮助解决这种情况,所以我手动清理了很多旧代码,并发誓要编写更好的新代码——从好的变量名开始。
(坏的)示例的经验教训:编写人类阅读的代码能;使包、类、方法和变量名称反映它们的全部内容;避免时髦的命名约定,仅举几例。在90年代早期,我在C++工作时尝试了匈牙利符号,今天当我看到Java™标识符前面m_时,我会畏缩。这些工件的好名称是好代码的基础。除了优雅而健壮的架构之外,好的名字将使其他人可以理解您的代码。但想出好名字并不容易。Tim Ottinger提供了一些很好的建议。
认识到铁三角
的影响 当然,程序员可以做一些事情来对项目产生积极影响。但也有一些事情往往是我们无法控制的,可能会使项目成功变得具有挑战性。记住铁三角,即使您的管理链没有。铁三角形描绘了项目的三个维度,通常定义为时间、资源和功能,它们共同影响质量。程序员通常无法控制这三个项目维度,而这三个维度通常由营销部门、企业利益相关者、重要客户和其他人决定。虽然与设置项目维度的过程相去甚远,但随着项目的进展,程序员需要意识到项目的铁三角,尤其是在习惯性地出现问题的情况下。这些知识可以通过以下方式提供帮助:

使程序员和编程团队能够通过利用软件开发过程中的低效率来取得成功 - 尽管有严格的要求和资源不足。
向程序员发出信号,表明可能是时候继续专业地前进了。
至少,解释为什么成功完成项目似乎如此难以捉摸,即使每个人都在努力工作并尽其所能。
当我为那家小公司工作时,管理层与世界上最知名的医疗保健公司之一达成了一项大交易。我们将在一年内交付所需的软件功能;将雇用一些新的程序员;那是一个激动人心的时刻。但随后该项目的现实开始陷入困境。在分析要求后,很明显一年是不够的。然后我们了解到,我们的要求是不完整的——它们将“随着时间的推移而敲定”。该公司确实雇佣了更多的新程序员,但也带来了额外的项目要求,员工根本无法处理所有工作。

我决定在那笔大交易完成后三年继续前进;四年后 - 总共七年 - 最初计划的最后一部分功能终于交付。在宣布大交易一年后,这家小公司被卖给了一家大公司;医疗保健项目在交易前是投资组合中的李子,但由于铁三角,之后的几年里都是臭鸡蛋。

保持简单 使您的软件设计尽可能简单
,同时满足项目要求。这可能意味着放弃初始工作,重新开始你在早期迭代中学到的东西。这并不意味着在时间用完之前进行设计。边工作边写代码在设计上。感受一下实施,即使您不打算对此负责。理解和编码过于复杂的设计需要额外的时间和精力。作为程序员,我们被困在岩石和艰难的地方之间,在坚定的业务需求和创建优雅设计和编写优秀代码的愿望之间。为您的编程工作付费的公司需要尽快掌握您的软件,以便完成交易并带来收入。有效简化软件设计的能力需要实践。但这是值得努力的,因为从长远来看,它可以节省时间和精力。
与他人
合作良好 程序员是团队成员,成功的程序员与他人合作良好;无法做到这一点会阻碍一些非常聪明的人的职业道路,因为他们很可能会被排除在更高级别的决策之外。当然,高级程序员和决策者并不总是那么容易相处,但他们带来的东西需要超过他们的组织愚蠢、痛苦的害羞或彻头彻尾的令人讨厌。对于我们大多数人来说,我们的才能不会超过这些缺点,所以我们必须培养团队合作技能:
首先在本地编译代码,这样你就不会破坏生产构建。
继续要求代码审查并优雅地接受批评,并实际实施这些审查中的最佳想法。
让团队合作更进一步,在被要求的时候提出批评,而不是在你想给予批评的时候。
通过表扬某人做得好的工作,将团队合作提升到一个新的水平(因为其他人也可以做得很好)。
通过提出在一段时间内做一些不愉快的工作来成长为最终的团队合作者 - 你已经注意到高级开发人员会这样做 - 特别是如果这意味着早起(你是一个深夜的人)或熬夜(如果你是一个早起的人)。组织喜欢他们的员工有时会感到痛苦。
知道什么让你快乐 - 真的

如今,软件架构师的角色被许多程序员梦寐以求。如果你面试年轻的程序员的入门级工作,问他们想做什么,你会发现他们想成为架构领导者,用数以亿计的软件开发经验确定整个软件组织的方向。为什么一个初级程序员认为他们可以成为一名架构师,无论是主管还是初级?因为他们不知道成为其中一员的真正含义。
人们的看法是,软件架构师以纯粹的技术实力领导一个团队或更大的组织,以正确的方式设计软件,选择正确的技术工具,等等。但架构师既是一个技术角色,也是一个政治角色。作为架构师,许多技术人员不会高兴,因为他们必须谈判、妥协、达成交易、每天回复 200 封电子邮件,并完全放弃低头编程的乐趣。
类似的命运等待着被要求成为人事经理的程序员。当这种情况发生时,真正的编程爱好者必须停下来并认真评估情况。他们是分流到管理层,因为他们不是一个好的程序员?提出这个提议是因为他们擅长编程,希望他们能赢得编程团队的尊重吗?当他们成为编程经理时,他们的日常工作将带来什么?最重要的是,他们会乐意这样做吗?
学习技能,学习角色,了解您喜欢什么以及适合哪里。然后,开辟一条道路。

 

你可能感兴趣的:(杂谈,LabVIEW)