如何成为一名出色的程序员:意识,理解和责任

成为或成为优秀程序员有三个关键因素:意识,理解和责任。

我已经谈了很多关于理解的话题。哎呀,我甚至把我最近出版的书“ *理解软件”*命名为。特别是,我多次指出,你越了解某事,你就会越好。

但是,还有另外两个因素可以让人们成为优秀的软件开发人员。简而言之,如果你没有意识到问题,那就没有理解了。如果你不采取行动来解决问题(首先要对此负责),那么你就无法采取任何措施。

但是,关于这些要点中有很多要了解,当人们看到如何成为更好的软件开发人员时,它们是关键点。所以我想在这里与你更深入地探讨每一个。

意识

在某种程度上,这是一种特殊的理解形式。“意识”本质上意味着你可以感知某些东西并知道它存在。这有很多方法适用于编程。

让我们采取最简单的方法之一:如果你不知道一个bug,你就不可能修复它。

有时,人们会使用它来摆脱对某个问题的某些需求。如果他们不知道,他们认为,那么他们就不必对此做任何事情。这可能是也可能不是真的,但什么真正的是,这个问题存在,你是否没有亲自了解它。如果您的系统有一个影响数百万用户的错误,那么您应该了解它。否则你的用户将受苦。你不知道自己遭受的苦难也不能证明他们的痛苦 - 也就是说,只是因为你不知道它,它在宇宙中不会突然变得好起来。

有更微妙的意识形式。例如,有些人实际上并不了解代码复杂性。他们没有意识到他们刚写的代码很复杂。有时他们并不知道复杂性甚至是一个问题,或者意识到另一个程序员必须阅读他们刚写的代码的观点。他们没有看到代码缺少评论,难以阅读,或者有其他方法可以解决问题。所有这些都是程序员意识的方面。

提高程序员意识的最简单方法是愿意出去读取超出正常控制范围的代码。也就是说,可能每天都在处理编码视频的代码。但该视频也来自某个地方 - 用户将其上传到您的系统中。如果您遇到视频进入编码器的问题,那么您应该选择查看该代码的实际工作方式。

这听起来很简单,但对于很多人来说,情感可能非常困难,有时甚至包括我。很容易想到,“他们都是白痴,这很糟糕,我只需要解决它。”但是你怎么知道如果你没看过他们的代码呢?也许你会学到一些可以帮助你的东西。

意识还可以是了解可以在代码中使用的库,框架或工具的存在。也许您对最新的Web开发库一无所知,但如果您是Web开发人员,至少应该意识到它们存在。然后,当您需要决定使用哪个框架时,您就会知道要查看哪些框架。

一般来说,人们可以通过愿意体验新的编程语言,新的设计模式,测试的想法,新的框架等来提高意识。我个人知道新的系统和编程方法。当我听到一种风靡一时的新语言时,我至少会阅读其网站的首页,有时甚至会深入研究其文档。这样我至少知道存在的东西,如果需要,我可以更多地了解它。如果我不知道解决问题的不同方法,那么我作为软件工程师可以使用的工具少得多。当我遇到困难时,以这种方式提高我的意识会增加我的选择。

这一切听起来都过于简单,但这是真的:

您可以通过提高编程和程序的意识来提高您作为程序员的能力。

理解

正如我在别处提到的那样:

你理解的东西越多,你做得越好。

意识是第一步 - 你知道存在的东西。在那之后,你想了解它,以便做得好。让我举一个伪造的伪代码语言的例子:

function print_hello(){
   clear_screen()
   display_hello()}

你觉得这个程序怎么样?看起来它清除终端然后打印“你好”这个词。但说实话,我只是在猜测。我没有看过的文件或代码clear_screenwrite_hello。如果我查看代码,我会看到clear_screen实际上将整个屏幕变为白色,并write_hello在屏幕上以十五种不同的语言和颜色打印“HELLO”一词。但是,如果不实际看到某些东西以便理解它,我就无法知道。

这似乎是一个过于简单的例子,但这种情况一直在编程中发生。既然我知道clear_screen的作用,我可以在其他地方使用它,而不必考虑它或花时间重写它。我可以编写一个程序来完成我打算做的事情,而不是一个有缺陷的程序。我可以为它编写一个有意义的测试。所有这些都增加了简单性,稳定性以及我们认为是“良好编程”的所有其他品质。所有这些都源于理解。

还有其他形式的理解,我在几篇文章中已经讨论了很多,特别是“ 为什么程序员会吮吸。”它确实是制造或打破程序员关键点。还有其他有用的技能 - 快速打字,沟通良好,适当管理优先级等等。但关键是理解。如果没有这个,你可能会成为世界上速度最快的程序员,但只能写出糟糕,不可维护的系统。你可能是团队中最迷人的人,但完全没有写出一行代码。我并不是说快速或迷人是不好的 - 那些也是有用的技能 - 但如果没有理解,它们不会让你成为一个伟大的开发者。

责任

我在第一本书出版后不久写的关于O’Reilly博客的一篇文章中谈到了这一点,但我不确定有多少个codeimplicity.com读者已经阅读了这篇文章,尽管它实际上是一个非常关键的关于成为一名出色的程序员。

现在,首先,我想澄清一些事情。在这里,“责任”,我并不是说,“把责任归咎于错误。”这是责任的共同定义,而不是我正在使用的责任。在这种情况下,我的意思是“责任”是“愿意在某种事情上对某事物进行控制或控制。”例如,如果我对我的房间负责,我愿意清理它。这并不意味着我清理它,只是我完全愿意。而且不只是一个关于“哦,是的,我完全愿意打扫我的房间”的大型公关声明,然后在乱七八糟的小时里躺下来。不,我的意思是,真的愿意。比如,你愿意吃你最喜欢的甜点吗?那是愿意的。我并不是说你必须像对待你最喜欢的甜点一样对所有事情感到兴奋,我只是说必须有实际的意愿

那么这如何适用于编程呢?好吧,我经常遇到这个负面的例子:

“我不想重构那段代码,因为我不拥有它。”

那太傻了。你有能力编辑吗?你能看一下源代码吗?您是否可以向所有者发送更改?那么你理论上能够修复它。现在,这并不意味着你应该一直在修复整个世界的所有代码,因为有时候根据你的发展目标,这不是正确的时间权衡。但即使是那句话,我也不愿意说,因为人们常常以此为借口不清理东西,同时:

“我不能花时间清理该团队的代码,因为这会让我的项目花费更长时间。”或者,“好吧,清理我所依赖的代码并不是我团队目标的一部分。”

好的,这些理论存在两个缺陷。(相信我,他们真的是理论 - 而不是事实。)

首先,通常,当您依赖于糟糕,疯狂或复杂的代码时,需要更长时间才能正确地执行某些操作。通常,它实际上最终花费更少的时间来重构然后编写您的功能,而不是尝试在一些杂乱或可怕的库上编写您的功能,而这些库并不是按照您需要的方式工作。所以你通常不会为你的目标增加很多额外的时间。你可能看起来像是因为你没有考虑获得“完成”和实际完成某些事情之间的区别。

我的意思是“实际完成了什么?”嗯,我的意思是它有效,它不是一直充满了bug,你可以很容易地维护它,它不会像开发人员那样吮吸你的整个生命,你可以移动做其他富有成效的事情。

以这种方式思考问题。让我们想象你正在建造一堵墙,然后从底部开始用一些伪劣的砖块。然后你在它们上面放几层砖。但是当你到达第四层砖后,底部的劣质砖开始破碎。那么你去吧,你可以在他们身上添加一些伪劣的木头来修补劣质砖。你添加了几层砖,现在墙壁开始倒塌了。所以你用一些生锈的铁棒支撑它并继续你的工作。如果你以这种方式继续下去,那么你将一辈子都只是在维持隔离墙。它将成为你生活中的一个巨大问题。你可能最终会离开它,让别人知道他们现在必须维持的这种可怕的墙壁灾难,但是他们甚至都没有*理解,*因为它看起来像是伪劣建筑材料的疯狂融合,没有人在他们正确的思想中永远结合在一起。说实话,这很残酷。

当您“破解”或“修补”底层依赖项中的错误代码时,您构建软件的方式与构建该墙的方式相同。它不太明显,因为程序没有庞大的物理结构可以落在你的脸上。但是,同样的构建原则适用 - 当您通过在其上添加复杂性来解决底层复杂性时,会增加系统的复杂性。当您改为解决底层复杂性时,会降低系统的复杂性。

我想指出的是,它并不重要在第一时间做出的事情复杂。“其他人这样做”的事实并没有改变上述任何规则。现在谁拥有复杂性并不重要。如果你破解它,你将使系统更复杂。如果你修复它,你将使系统不那么复杂。你正在做出选择 - 你拥有这种力量,你可以负责任。是的,有时这涉及到让其他人来解决它。但根据我的经验,更常见的是你愿意自己做出改变。

当然,也许你知道这一切。但是,你可能会想,“哦,好吧,我这一次可以把这一小块变得更复杂一点,因为这只是我正在做的一件事。”你知道,有时,你可能会是对的,特别是如果你有某种合法的紧急情况,你必须在短时间内解决问题。但更多的时候,你实际上是在为一块破碎的墙壁造成巨大的混乱,这将成为你和其他人维持的噩梦。正是这些小小的复杂性,这些小的选择不负责任,最终加起来没有人想要处理的巨大破碎的混乱。

因此,当我以这种方式说“责任”时,我所说的很大一部分是“愿意改变正常范围之外的东西。”它不一定是无限的边界。你可以在某个地方划一条线,然后说:“除了这一点,它确实是别人的问题。”例如,在我的项目中,我经常画一条线说:“好吧,我不打算做那么多工作完全来自公司外部的代码,因为这并不能充分利用我的时间。“但我不时甚至对编程语言提出错误或者在我认为它们时向开发人员工具发送修补程序导致复杂性或使我的生活更加困难。我的意思是,我实际上成了Bugzilla的主要架构师因为我认为有很多事情需要修复。我并不是说每个人都应该走得那么远。但是我说通过接受超出项目范围的某些代码的责任,你将成为一个更好的程序员。而且你扩展这个范围越广泛,你将成为一个程序员越好。

哦顺便说一句,我说上面的理论存在两个缺陷。第二个是你实际上属于一个群体,即使那个群体只是人性。你不是唯一的人。可以为其他人的代码做出贡献。我们实际上都是同一个团队。

如果你在一家公司工作,那么当你碰到这些东西时,你就会通过修理这些东西来帮助整个公司。如果你只是世界上一个独立的开发人员,当你修复一些广泛使用的库,一些流行的工具或一些不好的示例代码时,你正在让每个其他程序员的世界变得更好一点。网络的某个地方。老实说,它让你成为一个更好的程序员。这就是我在这里所说的全部内容。我所知道的最好的程序员是谁是最愿意承担一切在朝好的方向发展,无论广泛责任的那些东西,他们有一段代码触摸或什么球队,他们必须跟把事情做好。我告诉你这个,因为它会帮助

顺便说一句,作为库或API的使用者,通常您处于重构的最佳位置,因为您比作者更了解应该如何使用该库或API。至少,提交一个错误代码,说明你有什么问题。否则,作者将如何知道存在一些问题?你可能只是期望他们神奇地知道,但相信我,他们经常知道。你知道,你的经历对他们来说非常有价值!

摘要

总的来说,如果你想成为一名更好的程序员,那么问自己的是你是应该提高意识,理解还是责任,然后再关注这一点。如果您不确定,请从意识开始,然后继续理解,最后承担更多责任。在另一个方向上做这件事非常困难 - 你不能轻易地对你不理解的东西负责(这会让你感到非常困惑,你也不会很擅长),并且不可能理解某些东西你不知道。因此,意识,理解和责任是正确的顺序。

如果它意识到你应该改进,只需阅读一些新代码,找到一个新的编程博客,四处寻找书名,与其他程序员讨论最新技术 - 任何可以帮助你更加了解问题,解决方案,知识的东西,模式,人员,组织,原则或任何其他可以帮助您完成工作的东西。

如果理解你想要专注,那么阅读更多文档,花更多时间了解每个函数的工作原理,向同事们提出更多问题,在字典中查找一些单词,阅读一些关于你的技术的文章重新使用或阅读书籍 - 完全和完全理解与您的工作相关的一些知识的任何方法。

最后,责任主要是通过决定承担更多责任来实现的。遇到问题时,决定解决问题而不是解决问题。如果团队外部存在困难,请决定帮助解决问题,而不是成为问题的一部分。还有一种特殊的责任 - 当别人有问题要解决时,愿意帮助他们,或者,如果他们应该做的话,愿意让他们自己解决。责任并不仅仅意味着你必须做所有事情。它也意味着愿意帮助其他人完成任务。

只要你在简单的单个步骤中完成上述操作,就不难做到这一点。你不必一夜之间就意识到整个宇宙。明天你不必理解所写的每个程序的每个字。而且你不必因为阅读这篇博文而愿意改变现有的每一个软件。从小事开始。然后继续下一件事,下一件事,接下来的事情,及时,你将成为一个程序员,就像你想成为一样好。

关于Python学习指南

学好 Python 不论是就业还是做副业赚钱都不错,但要学会 Python 还是要有一个学习规划。最后给大家分享一份全套的 Python 学习资料,给那些想学习 Python 的小伙伴们一点帮助!

包括:Python激活码+安装包、Python web开发,Python爬虫,Python数据分析,人工智能、自动化办公等学习教程。带你从零基础系统性的学好Python!

👉Python所有方向的学习路线👈

Python所有方向路线就是把Python常用的技术点做整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。(全套教程文末领取)

在这里插入图片描述

👉Python学习视频600合集👈

观看零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。

在这里插入图片描述

温馨提示:篇幅有限,已打包文件夹,获取方式在:文末

👉Python70个实战练手案例&源码👈

光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

在这里插入图片描述

👉Python大厂面试资料👈

我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

在这里插入图片描述

在这里插入图片描述

👉Python副业兼职路线&方法👈

学好 Python 不论是就业还是做副业赚钱都不错,但要学会兼职接单还是要有一个学习规划。

在这里插入图片描述

👉 这份完整版的Python全套学习资料已经上传,朋友们如果需要可以扫描下方CSDN官方认证二维码或者点击链接免费领取保证100%免费

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值