程序员怎么成为一个优秀的程序员和怎么保持优秀?
众所周知,卓越的程序员能够创造出令人赞叹的功能、网站和应用程序等。但他们的共同之处究竟是什么呢?
通过我的研究,我发现这不仅仅是因为他们熟练掌握了某种编程语言或拥有特定的教育背景。真正有天赋的程序员已经掌握了基础要素,这些基础要素使他们能够构建伟大事物,并产生突破性的想法。
想象一个金字塔,它的底座宽广,随着向上延伸,变得越来越小、越来越薄。学习编程的基础知识就像建造金字塔的底部,一切都是从基础开始的。
那么,这些基础要素包括哪些呢?根据我的经验和对优秀程序员的观察与研究,我认为编程基础要素主要包括以下两部分。
你需要具备高效解决问题的能力。这是一个关键的起点,因为编程本质上就是解决问题。
优秀的程序员在解决问题时,会先将问题的本质提炼出来,以便确认整体策略,然后着手解决问题。他们将问题分解成更小的部分,依次解决每个小问题,有时还会通过制作导图来实现可视化。
这个过程说起来容易做起来难。当我开始学习编程的时候,我也曾遇到过瓶颈。和大多数人一样,我从未学会如何有效地解决问题,这并不是一项可以轻易教授的技能。记得我在数学课上做习题时,曾陷入困境,就像我刚开始编程时一样。毫无疑问,我曾陷入僵局,无法在最简单的问题上取得进展。
当我开始学习如何有效地解决问题时,情况开始发生变化。我开始关注问题的最终目的,并得益于乔治·波利亚的书籍《如何解决这个问题》。
我将波利亚的一些主张应用到编程中,例如如何理解问题。波利亚写道:“这个问题需要被理解。”这包括能够“指出问题的关键部分、未知、数据和条件。”对于每个问题,我都会拿出一张纸,写下这些问题的答案:我正在处理什么问题,我在寻找什么(未知)?我现在有什么已知?(数据)?我需要关注哪些约束条件或细节?(条件)。
理解这个问题对我们似乎很清晰,但清晰的问题很容易被忽视。我曾不止一次在一个问题上投入数小时却毫无收获,过了一会儿才意识到我错过了问题陈述中的一个小而关键的细节。虽然写下问题的细节可能会让我的思维变慢,但它也帮助我精确地思考我需要做什么,这已经是成功的一半。
在此基础上,我还会制定计划,这也是乔治·波利亚的另一个建议。在编写代码之前,我会先列出提纲。画家在正式作画之前会画一幅草图,建筑商用图纸和蓝图来建造房子。与其急于去做,不如先想好要做什么,然后制定一个计划。
具体的实施方法有很多种。有时我会按照数字的顺序列出需要采取的步骤:首先做这个,然后做那个。有时我也会将问题进行可视化。例如当我学习循环时,我会想象一把杏仁,在这堆杏仁中进行物理循环。虽然这个比喻听起来很简单,但它能很好地帮助我理解问题。
我也会制作一些目的图表。对于递归问题,我会制作图表来说明每次递归调用时发生的情况,直到递归结束为止。我会寻找如何简化问题的方法,使其更容易处理,并帮助我发现合适的解决方案。最重要的是带着明确的目的进入问题并在解决问题的过程中始终保持这种目的感。
即使制定了最好的计划,有时问题仍然很难解决。成为一个高效的问题解决者需要时间;我仍在努力学习这项技能并且这绝对值得。当我阅读优秀程序员编写的代码时直观的感觉就是它很干净易于理解变量命名清晰函数简洁明了每一行代码都有特定的作用。代码的清晰性反映了程序员的思考过程我可以从头到尾阅读程序并准确地知道发生了什么这是很棒的问题解决方法也是我所追求的境界。此外我还需做到以下几点:
1. 选择一些有用的技能深入透彻地学习它们然后不断扩展自己的技能范围。
2. 了解各种数据结构的优缺点包括它们在内存中和硬盘上的表现。
3. 了解各种算法的优势和不足。
4. 了解自己的工作领域。离开电脑去做用户们正在做的事。
5. 有准备有希望在任何时候都能投入到多种技能层面中你必须了解表象下的技能原理。“掌握各种技能的程度”与“编程才能”之间有着密切的联系。
追求卓越编程之路:我与数据的舞蹈
在这个不断变化和发展的编程世界里,成为优秀的程序员意味着不断挑战自我,超越常规,始终追求更高的标准。
我优化代码,这是基础。但我规划数据,这是进阶。那么,最优秀的程序员与他们的不同之处又是什么呢?
理解数据结构的深层含义,是编程的核心所在。任何疏忽都可能导致代码的“技能债务”,如同无穷的负担。构建清晰、无懈可击的数据结构至关重要。
命名事物同样重要。采用“动词-形容词-名词”的格式来命名程序和函数,既清晰又直观。变量名既要简短又要富有意义。如果其他程序员无法理解你的代码,那么你的代码就失去了价值。始终为下一个程序员而编码,而非仅仅针对当前环境。
剖析与编程是两种截然不同的活动。它们需要不同类型的资源和关注力,因此应当分别进行。试图同时兼顾两者,往往会导致两者都无法得到妥善处理。我喜欢在一天的结束时专注于不涉及技能的剖析,而在第二天早晨进行编程。
永远不要贪图省事而走近道。避免重复相同的代码,也不要将一个变量命名为另一个变量名的一部分。或许你会对这些规则有所不解,甚至会想要辩解。但遵守这些规则会帮助你正确地构建程序,避免陷入低水平的编程陷阱。
学会评估程序功能,你会惊奇地发现其中蕴含的丰富知识。区分问题细节和问题效果至关重要,因为问题效果可能导致严重后果,而细节则不会导致太大的不同。
重视你的用户、客户和管理人员,帮助他们明确他们的“what”,这比解释“how”更为重要。编写框架,即使你并不打算使用它,因为从中你可以学到很多其他途径无法获取的知识。
将你的知识传授给他人,无论是通过口头沟通还是写作。这最终将成为教育自己的机会。永远对你的客户/用户说“Yes”,即使在你内心并不承认的情况下。90%的情况下,你会找到解决问题的方法;10%的时候,你需要向他们道歉。这是个人成长中付出的小小代价。
寻找那些工作混乱但代码清晰的案例。重构这些代码,然后抛弃它,发誓自己永远不要再犯同样的错误(这样的程序案例其实有很多)。
数据永远大于理论和观念。通过开发工具来学习数据,这将帮助你更深入地理解编程的本质。
如果有机会,尝试开创自己的业务(服务或产品)。这将让你学到许多作为雇员无法获得的编程知识。在这条追求卓越编程之路,你将会不断舞动与数据的华尔兹,永无止境。
文章从网络整理,文章内容不代表本站观点,转账请注明【蓑衣网】