摘写如何成为一个更好的程序员

为了成为一个更好的程序员,你需要决定去关注掌握。每一天都是一个比前一天好的新机会。每行代码都是一个改进的机会。你是怎样做的?

  • 当您必须处理现有代码时,请保留比您找到的代码更好的代码。
  • 尝试每天完成一个快速的解决问题的挑战。
  • 寻找机会与程序员比你更好的人(开源项目是伟大的)。
  • 注重刻意练习。
  • 实践系统思考,只要你能找到一个借口。
  • 收集和分析心理模型。
  • 掌握你的工具,了解他们的优点和不应该用的东西。

慎重的实践

安德斯·埃里克森博士(Dr. Anders Erickson)研究了达到我们称之为掌握水平的人。他发现这些人有一些共同点。第一,正如马尔科姆·格拉德威尔(Malcolm Gladwell)的“ 异常者”(Outliers)中所普及的那样,这些人似乎都花了相当多的时间去研究这个技巧。实际数字有所不同,但投入的时间接近10000小时左右。这是一个相当长的时间,但仅仅花费10,000小时,或者十年练习是不够的。有一个非常具体的实践类型被证明是所需要的硕士级的表现。世界主导技巧的关键是刻意练习。

我们现在来看看这是如何与编程相关的,但我们先来看看有意的练习是什么。

刻意练习缓慢,停顿,反流。如果你练习小提琴,那么刻意的练习就会非常缓慢地演奏,确保你完美地弹奏每一个音符。如果你故意练习打网球,这可能意味着一次又一次地和教练做同样的射门,做一些小小的调整,直到你能够一次又一次地在那个位置完成那个射门。

知识工作的问题在于标准的刻意练习协议似乎是外来的。与参与编程的过程相比,运动任务或演奏乐器相当简单。解构设计和开发软件解决方案的过程要困难得多。很难想出如何练习一种思维方式。其中一个原因就是解决的问题往往会得到解决。我的意思是,作为一名开发人员,你很少会被要求写一个已经写好的软件。找到“枪”来反复练习是很难的。

在编程中,你想学习不同的方法来解决问题。你想找到不同的挑战,迫使你用不同的约束来攻击相同类型的问题。继续工作,直到你理解了问题和可能的解决方案。

从本质上讲,有意识的实践有这些组成部分:

  • 每个练习都有一个重点。
  • 尝试和反馈之间的距离(时间)尽可能短。
  • 做一些你还不能做的事情。
  • 沿着走在你面前的人前进。

单一焦点

在特定的培训课程中,您只想专注于一件事情的原因是,您希望将所有的注意力都放在您希望改进的元素上。你想尽一切办法,即使只有一次。然后,你想重复这个过程来获得另一个完美的答案,然后再一个。每一次练习都是对技能的单一强化。你想加强导致完美结果的模式,而不是那些结果不太理想的模式。

在本书中,我希望您一次只能针对一种设计模式。真的不仅要了解这个模式是如何工作的,还要了解它为什么被使用,以及它如何适用于当前的问题。另外,考虑一下你可能使用这种设计模式解决的其他问题。接下来,尝试使用您正在处理的模式来解决其中的一些问题。

你想为问题和解决问题的模式创建一个心理盒子。理想情况下,您会发现什么时候问题适合您所掌握的某个框,然后能够快速轻松地解决问题。

快速反馈

快速反馈回路常常被忽略的故意做法之一。反馈越快,连接越强,越容易从中学习。这就是为什么营销和写作这样的东西很难掌握的原因。将信件放在页面上并从市场获得反馈之间的时间太短,实际上无法看到实验的效果。通过编程,情况并非如此; 您可以编写一段代码,然后运行以获得即时反馈。这使您能够正确并最终达到可接受的解决方案。如果您更进一步,为您的代码编写可靠的测试,您将得到更多的反馈,并且您可以比每次更改时手动测试过程更快地到达解决方案。

另一个帮助你更快学习的技巧就是预测你想写的代码块的结果。记下你为什么期待这个特定的结果。现在编写代码并根据预期结果检查结果。如果不匹配,请尝试解释为什么会出现这种情况,以及如何使用另一个代码块验证您的解释。那么,测试一下。继续这样做,直到你掌握了。

你会发现自己得到不同层次的反馈,每个人都有自己的优点。

一级就是解决方案是否工作。接下来,您可能会开始考虑诸如“解决方案实施起来有多容易”或“这个解决方案是否适合解决这个问题?”等问题。之后,您可能会寻求外部反馈,这可以采取简单的代码审查,开展项目或与志同道合的人讨论解决方案。

伸展自己

你害羞的东西是什么?这些是编程领域,导致你轻微的不适。它可能是从磁盘上的文件读取或连接到远程API。如果它是一些图形库或机器学习设置,那就没有什么区别了,我们都拥有一些不舒服的工艺。这些通常是你最需要处理的事情。这些地方会拉扯你,迫使你面对自己的弱点和盲点。解决这个难题的唯一方法就是深入研究,多次使用这个工具,并且以这么多的方式来开始感受它。您必须对此感到满意,您不必再在堆栈溢出时查找该文件打开协议; 事实上,你写了一个更好的。

这种掌握程度没有捷径; 唯一的办法就是穿山而过。这就是为什么很少有人成为真正的主人。到达那里意味着花费大量的时间在那些不容易的事情上,不要让你觉得自己是无敌的。你在这些自我毁灭的地区度过了这么多时间,很少有任何工匠的主人有很多的傲慢自大。

那么,你应该先做些什么?你在阅读前两段时想到的那件事。

按照本书中的设计模式进行工作是寻找潜在增长领域的另一个好方法。从单身模式开始,一路顺风顺水。

站在巨人的肩膀上

有些人在编程领域做了很棒的事情。这些人经常在开发者会议上发表演讲,有时还会在网上发表演讲。看看这些人在谈论什么。尝试了解他们如何解决一个新的问题。随着他们演示解决方案,与他们一起打字 进入他们的头,找出是什么使他们打勾。试着解决一个像你想象中的问题就可以解决的问题; 你用这种方式提出的解决方案与你自己提出的解决方案有什么不同?

真正优秀的开发人员对编程充满热情,不应该花费大量的精力来让他们谈论工艺的细节。找出这类开发者所在的用户组,并进行大量的对话。开放并不断学习。

选择强迫你使用你尚未掌握的设计模式的个人项目。玩得开心。最重要的是,要学着去爱上这个过程,不要被某些感觉到的结果所困扰,而不是花时间成为一个更好的程序员。

你怎么做到这一点?

当达芬奇决定将绘画作为自己的职业时,他开始以同样的方式开始。

复制!

那是对的。首先确定一个有趣的问题,一个已经解决的问题,然后公然地复制解决方案。不要复制/粘贴。通过自己输入来复制解决方案。让你的副本工作。一旦完成,将其全部删除。现在试着从内存中解决问题,只有在你的内存失效的时候才提到原来的解决方案。做到这一点,直到你能够完美地重现解决方案,而不用考虑原来的解决方案。如果您正在寻找可以复制和学习的问题的解决方案,那么GitHub就是一个金矿。

一旦您对解决方案感到满意,请尝试改进原始解决方案。你需要学习思考你在那里找到的解决方案 - 什么使他们好?你怎么能让他们更优雅,更习惯,更简单?总是寻找机会,以这些方式之一来改善代码。

接下来,你想把你的新解决方案放在外面。找到要使用该解决方案的位置。在现实世界中练习会迫使你处理不同的约束,这是你永远不会为自己梦想的。这将迫使你以自己从未打算过的方式弯曲你的漂亮,干净的解决方案。有时候,你的代码会被破坏,你将会学习到最初解决问题的方法。其他时候,你可能会发现你的解决方案比原来的更好。问自己为什么一个解决方案胜过另一个解决方案,以及什么教你关于这个问题和解决方案。

尝试使用不同范式的语言来解决类似的问题,从每个问题中抽取出自己的解决方案。如果你像处理这个问题一样注意这个过程,那么没有任何项目会使你不受影响。

在开源项目上工作的美妙之处在于,通常只有合适的人员可以帮助您,而其他人则会告诉您代码中的错误。评估他们的反馈,学习你所能做的,并放弃其他的。

课程正确的能力

当探究一个问题时,你有两种选择:继续这样做,或者放弃一切,重新开始学习。丹尼尔·卡内曼(Daniel Kahnemann)在他的“快速思考,慢速思考”一书中解释了沉没成本谬误。因为你已经投入了很多资金,所以你一直在投资于糟糕的投资。这对开发者来说是一个致命的陷阱。做一个为期两天的项目需要花费几个月的最快捷的方法是尝试通过一个糟糕的解决方案。通常情况下,如果我们要放弃一天,一周或一个月的工作,并从一无所有开始,这将是一个巨大的损失。

实际情况是,我们从来没有从头开始,有时候你最后删除的10,000行代码是你需要编写的10,000行代码成为你需要用100行代码解决问题的程序员一个惊人的优雅的解决方案。

你需要发展心智刚毅,说足够了,重新开始,使用你所学到的建立一个新的解决方案。

如果解决方案错误,解决方案花费的时间就意味着什么。你越早意识到越好。

这种自我意识让你有能力知道什么时候再尝试一件事,什么时候朝不同的方向前进。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值