有人刚刚开始编程生涯时,常常在思考什么是编程的正确方式,但自己无法确定正确答案。不过,我觉得方法不止一种,但其中有些方法并不是很好。这就是笔者想要阐述的。你可能已经发现了方法的重要性,并且想知道如何优化自己的学习过程。那么,以下这些误区,你一定要及时避开。
不要执着于学习尽可能多的语言/技术
初学者常常误以为掌握很多语言和技术会给人留下深刻的印象。虽然的确是这样,但更重要的是证明你可以应用它们。
通过项目展示不同的编程语言/技术技能是个不错的主意。它既显示了你的适应性,也考虑到了编程技术不断变化的本质。但是,如果只专注于学习现有的一切编程语言的语法和操作方法,那就错了。每当你学习一门新语言或新技术时,一定要加以应用,不要一味地急着去学下一个。
编程很像数学,你需要不断地练习。每当学习一种新工具/技术时,确保你在应用它,并在此过程中建立自己的作品集。在这个过程中,你的编程能力将会得到提升,从而提高自己的竞争力,这是双赢。
不要掩饰工作
确保你在展示自己的作品,并且不仅仅要展示你最好的作品,还要展示你是否能改进不那么自豪的工作,笔者已经能够推动多个老项目从平庸到令人印象深刻。有时,我却会完全忘记它们的存在。因此,建立作品集,首先要浏览你过去的项目,看看是否可以整理利用之前的东西,这可以节省很多时间。
其次,学会推销你的作品。充满激情地讲述你的创作过程,比如你为什么选择这个特定的项目,你为什么以这种方式做,等等。个人风格会让你的作品更令人难忘。当然,别忘了把作品放在GitHub上。
不要忽视任何设计
好的设计等于好的工程。简明、高效的编写不仅使代码可重复使用和更易读,而且会使你创建的任何东西都变得更好。在构建时不应用合适的设计原则最终会导致性能和/或扩展性方面的问题。此外,代码的设计和优化经常在面试中考到,所以最好尽早养成良好的编码习惯。
前端/用户界面/用户体验的设计也很重要,这往往决定了你的用户是否会坚持使用。精心打磨过的前端设计的项目更令人印象深刻,这会使你的工作看起来更完善、更专业。挑选一本关于代码设计的好书,学习用户体验设计的基本概念,你能开发出更好的产品。
不要只关注编码
编程技术在不断变化,但它们蕴含的计算机科学概念却没有变。学习算法、数学和计算机科学的概念并不是毫无用处的,即使它们看起来并不能立即见效。这些核心概念会在你的思维过程中发挥作用,通过加强你的计算机科学基础知识,帮助你成为一名更好的工程师。
事实上,算法和数据结构的知识经常在面试中被考到。理想情况下,你的目标是在编码和理论之间取得良好的平衡,进而成为一名全面发展的程序员。
不要孤军奋战
找一个同样在自学编程的人作为学习伙伴,这对于初学者来说会有很大的不同。你们可以分享进步,也可以从彼此的错误中学习。你们还可以在项目上合作,如果分工合作的话,完成工作的时间会缩短。结伴学习的另一个主要优势是能够练习结对编程和模拟面试,这样可以帮助彼此认清并改进自己的弱点。
平心而论,这适用于每个领域,但是由于编程的内向性,人们很容易忽视合作的价值。即便你觉得自己不需要学习伙伴,请记住,将来在大多数的职业场合会与其他开发人员合作。因此,在团队环境中正常工作的技能是必不可少的。
虽然软技能可能对于一名程序员来说不是第一位的,但从长远来看,它们肯定会对你的职业轨迹有所帮助。
不要只为了钱
要因为热爱而去做。听起来很残酷,但编程的确不适合所有人。编程需要相当多的投入,但它确实有潜力成为前途光明的职业道路。笔者见过很多人在学习的过程中放弃了,那是因为他们一开始就没有足够坚定。没有人希望在自己根本不喜欢的职业中度过一生,它最终会让人感到不满足。
随时记录
在构建作品集时,请记得不要省略对代码进行注解和对项目适当地批注。因为这表明你熟悉行业标准,并且能使你的代码流更容易被用户理解。
高质量的文件记载还可以突出你的技术写作能力,让你脱颖而出。在专业环境中,做记录通常是工作的一个基本方面,因此从长远来看,培养这项技能也是有益的。许多工程师经常使用相同的代码库,适当的记录可以帮助相关人员及时了解项目的最新进展。
投入使用前先确定新技术是否符合需求
花时间做些调查,可能有更好的框架或语言适用于你要做的事情。笔者喜欢阅读文献,查找使用上述技术构建的项目,然后再做出选择。例如,一些库/框架可能具备满足需求的函数,而另一些库/框架可能需要你编写复杂的代码。即使某些技术不够普及,它们也可以节省大量时间,并可能创建更强大的功能。
总之,在决定使用哪种工具之前先做一些研究。笔者曾见过程序员不眠不休地试图找到一个解决方案,但有时退一步着眼于全局更有效。如果你的项目比较大,那么使用你能想到的技术构建较小的模型是一种很好的方法,可以以此评估你的作品是如何结合在一起的,来查看它们是否符合需要,以及是否在正确的道路上。
记得测试
笔者不仅仅关注项目是否可以执行预期的功能,对于更重要的项目,应该要求更高。如果可能的话,要在多种设备、操作系统、浏览器和每种极端情况下进行测试。一定要做好准备,因为你永远不知道别人会在什么情况下评估你的工作。
最好养成单元测试的习惯,并在GitHub上为项目编写全面的测试套件。这表明你对工作质量非常重视,并且重视零漏洞、稳定的软件开发。通过这种方式,你还会学到很多模块化的重要性,反过来又有助于提高自己的专业水平。
最后,不要妄想你能攻克所有的人和事。要有切实的期望,乐观的态度,并保持谦逊。最重要的是,永远不要停止构建和学习。