【.com快译】业界有这样一个普遍的误解,认为要成为一名优秀的程序员,必须掌握多种编程语言和工具。是这样吗?或许下面给出的十二条建议,会让你或多或少地改变对此的认同感。1.研究数据结构计算机科学家NiklausWirth曾经有一句名言:“数据结构+算法=程序”。可见,数据结构是计算机程序的基础,就像盖房子的砖头。事实上,数据结构决定了程序解决问题的速度和效率。一旦你使用了正确的数据结构,你的程序方案就会更简单,耗时更少。那么,我们如何研究数据结构呢?首先,选择一本好书来理解和掌握如何设计和实现数据结构。在这里,推荐NarasimhaKarumanchi的书《轻松实现数据结构和算法》(DataStructuresandAlgorithmsMadeEasy,https://amzn.to/34DxomJ)。这是C/C++版本,你也可以通过链接找到对应的Java版本:https://amzn.to/2NZ3W4E。其次,尝试从头开始实现一些数据结构,例如:列表、堆栈和队列。您不仅可以深入了解它们的工作原理,还可以通过“重新发明”这些数据结构来提高您的编程技能。第三,试试你常用编程语言提供的内置数据结构(如果是Java,对应Collections框架)。例如:使用不同的列表,通过索引快速访问各种元素;使用集合来随机排列元素;使用队列进行生产者-消费者处理等。第四,在写代码之前,认真思考,选择最适合解决问题的数据结构。当然,你不必重新发明轮子,尽量使用当前编程语言提供的现有数据结构。2.学习算法如果说数据结构抽象了问题的输入输出,那么算法就决定了系统如何解决问题。优秀的程序员通常善于使用经过验证的算法并编写新算法。由于算法不仅需要良好的逻辑思维,还需要一定的数学能力,因此它是编程中最难学的部分之一。如果你能灵活运用各种你擅长的算法,你将很容易在编程人群中脱颖而出。不过,好消息是:您不必从头开始发明算法,只需学习和使用行之有效的可靠算法即可。我建议您至少了解一些基本算法的知识,例如:排序(快速排序、归并排序等)、二进制搜索、递归、图形检索、贪心算法、密码学基础知识和复杂的大O表示法。那么,我们应该如何学习算法呢?除了上面提到的数据结构书籍,我建议你读一本书《算法简介》(IntroductiontoAlgorithms,https://amzn.to/2NWOOyw)来获取相关概念并从头实现那些流行的算法。通常,您可以尝试通过自己编程来模拟算法的工作原理。例如,您可以编写一个程序来可视化快速排序算法的工作原理。这样,您不仅会学到很多相关概念,还会大大提高您的编码技能。3、研究设计模式虽然编程是解决一个问题,但解决方案本身可能会面临各种各样的问题和挑战。例如,我们经常想要更好的性能、更灵活的设计、更可靠的架构、更少的错误和更少的潜在瓶颈。因此,设计模式是解决软件设计中各种常见问题的有效方法。要成为一名优秀的程序员,您应该能够将适当的设计模式应用于程序的技术实现。那么我们应该如何学习设计模式呢?在这里,我建议大家从著名的设计书籍:《设计模式:可重用的面向对象软件的要素(C/C ++实现)》(DesignPatterns:ElementsofReusableObject-OrientedSoftware,https://amzn.to/2Q6B2Cy)入手。如果你经常使用Java,我推荐你阅读《深入浅出设计模式》(HeadFirstDesignPatterns,https://amzn.to/2LtXu44)。通过学习,你可以快速掌握各种基本设计模式,包括工厂、建造者、策略、命令、模板、门面、访问者、单例。当然,这是一个迭代的过程,只有通过阅读案例研究、研究设计模式、编写各种代码、测试不同的模式,你才能真正理解并自信地将自己的设计模式应用到你的程序中。4.阅读你会坚持每年读几本编程书籍吗?如果你的答案少于三个,那么你应该好好反思一下。毕竟,那些优秀的程序员会表现出对新知识的渴望。因此,我建议您每年至少阅读五本书。这些书籍不仅是对过去经验的总结,还能开阔你的视野,帮助你更快地获取新知识,告诉你如何以正确的方式实现软件和产品的功能。那么,我们应该读哪些书呢?我建议您从以下必读读物开始:ThePragmaticProgrammer(https://amzn.to/2Q6NUso)ThePragmaticProgrammer(https://amzn.to/2Q6NUso)CodeComplete(https://amzn.to/2IhRA4f)程序员职业规划(ThePassionateProgrammer,https://amzn.to/2NXF0uz)SoftwareCraftmanship(https://amzn.to/2Lv7kTv)Java编程爱好者,《Java 高效编程》(EffectiveJava,https://amzn.to/2Q82yzr)也是必读的。择日不如撞日。让我们开始计划一年内需要阅读的书籍吧。但是,在阅读时请记住以下两点:您不必从头到尾阅读一本书。那么你可能没有足够的时间和耐心。试着以一种明智的方式去做:首先只读你需要的,然后有空的时候再读剩下的。例如,如果需要应用策略模式,则应重点阅读与该模式相关的章节;如果需要编写servlet,请关注servlet相关章节。请认真做笔记和练习。好脑子不如烂笔头,才会加深你的阅读印象和效果。5.阅读各种博客和杂志众所周知,为了留住和吸引读者,博客总是比书籍更新得多。你可以在你的利基和领域找到一个权威的博客或网站,并继续阅读那里你感兴趣的各种帖子。示例:您可以通过每周阅读一篇新文章来了解当今瞬息万变的技术。在这里,我要推荐DZone.com,一个最初为Java开发人员建立的社区。今天,它是网络上最大的软件专业人员网络社区之一。您可以在DZone上找到几乎所有技术类别的实用文章、见解和建议,从Java到Javascript,从Web开发到敏捷(Agile)方法,从大数据到云计算等等。此外,您还可以订阅您所在领域的传统或电子杂志。例如:对于Java,我建议你阅读Oracle出版的双月刊Java杂志(https://www.oracle.com/technetwork/java/javamagazine/index.html),里面涉及到Java技术管理的方方面面。6.使用单元测试在编程项目中,你可能听说过“先写测试,后编码”的说法。我们需要将一般需求转化为非常具体的测试用例,然后编写代码来实现业务逻辑并确保它们通过所有测试。因此,我们应该通过编写代码的方式来测试每个程序的类和每个类的方法。在编程界,大家普遍采用单元测试的方式。它的好处包括:能够及早发现问题,促进代码更改和重构,简化各种集成测试,并为系统提供实时文档。单元测试直接导致了测试驱动开发(TDD)方法的出现。今天,TDD已经被许多编程语言的程序员所应用。那么,我们应该如何学习单元测试呢?我推荐你读一本书《单元测试的艺术》(单元测试的艺术,https://amzn.to/2NbbiCG)。这是一本关于单元测试和TDD的优秀书籍。至于Java,由于JUnit是Java开发中非常流行的测试框架之一,您可以参考《Junit教程:设置、编写与运行Java单元测试》(JUnitTutorial:SettingUp,Writing,andRunningJavaUnitTests,https://dzone.com/articles/junit-tutorial-setting-up-writing-and-running-java-1)开始。可以说,如果你从来没有使用过任何单元测试框架,那么你一定是在软件开发过程中少了一个利器。7.参与自由项目兼职或全职参与自由项目以提高编程技能是成为优秀程序员的最快途径之一。简而言之,自由项目意味着您可以在线查找项目并通过远程工作在线获得报酬。更妙的是,您可以选择自己喜欢的项目类型,例如:PC端、Web应用、移动应用、设计、编程、测试,甚至一些硬件项目。所有这些都可以让你积累和扩展你在各个领域的编程经验,提高你面对挑战的能力。与公司里那些正规的项目相比,免费的项目更丰富,也更精彩。但成为一名自由职业者绝非易事。自由职业者市场往往竞争激烈,你要面对成千上万的自由职业者的竞争和挑战。因此,我强烈建议大家在保住现有工作的前提下,逐步参与或接受自由项目。那么我们应该如何做一个自由职业者,开展自由职业项目呢?我建议您访问Freelancer.com网站。它是网络上最大的自由职业者市场之一,您可以在其中找到几乎任何类型的工作。自2009年以来,我继续参与本网站的各种项目,迄今已完成142个项目,平均评分为4.8/5。当然,我也从中积累了丰富的编程经验。8.做业余项目如果你不喜欢做自由项目,你可以通过接手一些有趣的小项目来打发空闲时间。从事此类项目可以帮助您提高各个阶段的编程技能,包括:编码、测试、设计、文档和部署。与你在公司的主要工作相比,这些副业项目为你提供软件开发的整个过程,而不仅仅是编码阶段。那么我们应该如何从事副业呢?俗话说:不积步不成千里。我的建议是“从小处着手”。由于您不具备开始的资源和经验,因此最好不要立即开始大型项目。此外,你需要管理好自己的时间。一般来说,最好在两到三个月内完成一个项目。9.参加编程竞赛也许这是激励自己成为一名优秀程序员的最具挑战性的方式。为了参加比赛,你不得不投入大量的时间和资源,在具体的开发方面投入大量的精力,但这对提高你的整体编程能力是非常有益的。记住:重要的不是赢球,而是在比赛中成长。我参加过几次移动应用程序和桌面游戏的比赛。虽然我没有获得任何奖项,但我承认在努力确保按时提交我的程序作品时我学到了很多东西。当然,你也可以尝试一些著名的编程比赛,比如:微软的ImagineCup(https://www.imaginecup.com/);ACM-ICPC由IBM(https://icpc.baylor.edu/)和TopCoder(https://www.topcoder.com/)赞助。前两个适用于学生,而最后一个适用于所有程序员。此外,您还可以找到并参加您所在国家、地区甚至我们公司组织的各种比赛。不用担心经验够不够,大胆报名,一切放手!10.进行规范审查代码审查应该在项目团队中定期进行。你可以对别人的代码进行规范的审查,也可以让其他程序员审查你的代码。一系列的review工作,不仅可以规范大家编写程序代码的习惯,还可以帮助团队成员取长补短,取长补短。我建议您使用像SonarQube(https://www.sonarqube.org/)这样的代码分析工具。该工具扫描整个代码库并根据各种代码质量标准生成详细报告。一般来说,您需要不断修复代码中的问题,直到该工具不再发出“危险信号”为止。当然,一些代码分析工具也可以很好的与你的IDE集成(比如Eclipse或者NetBeans),让代码检查过程更加顺畅自然。11.阅读代码不同于检查代码,我们还需要花时间仔细阅读其他程序员写的代码。通过这个过程,你会学到更多。俗话说:“一千个人心中有一千个哈姆雷特”。面对同样的软件需求,不同的编程高手会写出完全不同的代码方案。只要能潜下去仔细阅读,就能获得各种设计创新和编程经验。对于Java用户,我建议阅读JavaCollections框架的源代码(https://www.codejava.net/java-core/collections)。可以通过JDK安装目录下的src.zip文件找到。当然,你也可以尝试阅读Spring、Hibernate、Struts等流行框架的源码。12.教编程。俗话说:“最好的学法就是教书”。您可以通过录制视频、撰写文章、创作书籍甚至组织编程课程来帮助他人学习编码。通常,编程的纯粹目的是让程序代码“能用”,你倾向于研究与目标课程主题相关的一切,为教学做准备。“教学相长”是真理。在此,我强烈建议大家选择最适合自己的教学方式。例如:在创建自己的网站-CodeJava.net(https://www.codejava.net/)和JavaYoutube(https://www.youtube.com/codejava)频道之前,我曾经为一些编程网站做贡献编写了各种Java教程。此外,我还在Udemy上教授过一些Java课程。至此,我已经和大家探讨了成为一名优秀程序员的十二条自我修养。当然,这些只是我的经验,希望大家多多交流。原标题:让你成为优秀程序员的12个实践,作者:NamHaMinh
