首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何成为一名出色的程序员

众所周知,优秀的程序员可以构建出色的功能,网站,应用程序等。 但他们有什么共同之处呢?

在我的研究中,不仅仅是了解一种语言还是具有特定的教育背景。 真正有才华的程序员已经掌握了基础知识。 这个基础使他们能够建立伟大的事物并提出突破性的想法。

想想金字塔。 它有一个很大的底座,但逐渐变得更小,更薄。 学习基础编程形式的基础知识。 一切从那里起飞。

那些基本面是什么? 根据我的经验和我研究过背景的程序员,我认为编程基础是一个由两部分组成的方法。

非凡的问题解决者

首先,你必须是一个有效的问题解决者。这是一个重要的起点,因为编程是解决问题的方法。

虽然有很多方法可以解决问题,但这个过程的一些部分对我来说很突出。同时也是问题解决者的程序员将问题提炼到其本质,以便确定他们的总体目标并开始有目的的问题。然后,他们将每个问题分解成小的,易于管理的部分 - 依次攻击每个部分,有时通过绘制图片使其成为“现实世界”。

这个过程比听起来更难。当我开始编程时,我碰到了一堵墙:像许多其他人一样,我从未学过如何在学校解决问题;这是一项不容易教授的技能。我在数学课上遇到了一个问题,只是潜入,这就是我开始编程的时候所做的。不出所料,我不必要地转动轮子,在最简单的问题上遇到障碍。

当我开始学习解决问题的过程,以及如何有效解决问题时,事情开始发生变化。我现在开始有意图的问题。我有乔治波利亚的书,如何解决它,感谢你的建议。

我已经将Polya的一些想法改编成编程,比如理解问题。 “必须理解这个问题,”波利亚写道。这包括能够“指出问题的主要部分,未知,数据和条件。”对于每个问题,我拿出一张纸并写下这些问题的答案:我在解决或尝试的是什么? (未知);我给了什么? (数据);我需要注意哪些约束或细节? (条件)。

理解这个问题似乎很明显,但很明显很容易被忽视。在不止一次的情况下,我花了几个小时才解决了一个问题,但后来才意识到我在问题陈述中错过了一个小而重要的细节。写出问题细节会减慢我的心理,并帮助我思考我需要做什么,这是战斗的一半。

从那里,我制定了一个计划,这是Polya的另一个建议。这说得通。在写一篇文章之前我写了一个大纲。在绘画本身之前,艺术家会对绘画进行素描。建筑师使用图纸和蓝图来建造房屋。它与编程没什么不同。我不需要急于做,而是先考虑我要做的事情并制定攻击计划。

有很多方法可以解决这个问题。有时我会按照数字顺序概述我需要采取的步骤:首先执行此操作,然后再执行此操作。其他时候我把问题视为可见。当我学习for循环时,我拿出了一把杏仁,并在整个堆中进行了物理迭代。这是一个愚蠢的例子,但它帮助我思考问题。

我还会画画或图。对于递归问题,我将绘制每个递归调用发生的事情的图表,直到我遇到基本情况。但是,我几乎总能找到一种方法来简化问题,使其更易于管理,并帮助我发现一个模式。最重要的是,我的目标是有目的地进入问题,并始终保持这种目的感。

尽管制定了最好的计划,问题仍然很难,我仍然陷入困境。成为一个伟大的问题解决者需要时间;这是我仍在努力的技能,这绝对值得付出努力。这是你可以看到的差异。

当我阅读一个伟大的问题解决者编写的代码时,它很干净,易于理解。变量名称很好。功能短而清晰。每行代码都有特定的目的;绒毛被移除。代码的清晰度反映了程序员的思考过程:我可以从上到下阅读程序,并确切知道发生了什么。这是解决问题的绝佳方法,而这正是我所追求的目标。

你的电脑怎么样?

学习计算机科学是第二个编程基础。我最近开始学习计算机科学,并且喜欢它,因为我已经超越了表面层面。我将“在幕后”了解当我使用内置函数时会发生什么。我还在学习许多其他主题的内存和运行时间。简而言之,我正在学习为什么计算机能够完成它所做的事情。

了解“为什么”可以增强我的语境知识,使我成为一个更明智的程序员。结果,我对我编写的代码更加深思熟虑。例如,现在我对运行时有所了解,我会选择使用二进制搜索而不是遍历列表中的每个元素。

它也丰富了我对核心编程概念如何工作的理解。例如,我正在处理一个递归问题,而我没有得到我预期的解决方案。经过仔细检查,我了解到原因:它与调用堆栈的执行有关,这个想法几个月前就已经逃脱了。

或者上课。我花了很长时间与课程斗争,并害怕使用一个。我知道怎么写类,但不知道我何时以及为什么要用它。当我在创建实例和调用方法时了解计算机中实际发生的情况时,情况发生了变化。一旦我有了一些背景,它终于点击了。对于递归和课程,计算机科学弥补了我的知识空白。

通常,基本面被推到一边。进展可能很慢,人们倾向于选择更多“有趣”的东西来处理。真是太遗憾了。掌握基础知识的程序员似乎充满信心地编码:他们知道他们的编程选择的“如何”和“为什么”,这改善了他们的工作并建立了他人的可信度。

此外,对基础知识的扎实掌握使学习新语言和技术变得更容易。例如,花时间真正理解一种语言的迭代,递归和抽象等核心概念将有助于学习另一种语言。简而言之,通过掌握基础知识,可以获得很多收益并且几乎没有损失。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20190427A0GXWC00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券