成为一名硅谷的工程师可能是很多中国程序员的梦想。硅谷被公认是目前世界上云集了最多优秀工程师和知名科技公司、创业公司的地方,吸引了全球无数投资者、创业者和工程师的目光。在那里工作的工程师,有着令人羡慕的职业发展前景,薪酬待遇。此外,他们出众的教育背景,扎实的专业能力,创新的思维,专注的敬业精神也成为了其他工程师们学习的标杆。
下面总结的10条建议,来自一些有关编程的网站、社交平台和博客,给出这些建议的人大多数也是工程师(当中包括在硅谷工作的),以及一些专门研究计算机科学的学者。如果你有志成为一名出色的程序员,不妨借鉴一下这些宝贵的建议和他们在工作中的经验和心得,从而令自己在编程的学习和工作中不断提高。虽然不是每个程序员都可以有机会在硅谷工作,但每个人都可以通过努力,让自己变得更出色,甚至有一天,你会比在硅谷的工程师更加优秀。
1. 精通一种编程语言
编程语言是一种用来对计算机进行操控的工具。精通一种编程语言要比对一堆编程语言都只是略懂皮毛要好。编程是一门专业性很强的工作,它对程序员的要求也是很严格的。优秀的程序员必须精通至少一种编程语言,能够轻松地解决所碰到的问题。
2. 成为一名系统的调试员
成为一名系统的调试员,这意味着当你在进行调试的时候,你对你的代码有一个很好的构思模型。这就是说,当你的程序出了问题时,你可以对一些出错的程序作出假定,而不是盲目地进行修改直到你的程序正常为止。
3. 有一个出色的编程环境构思模型和硬件构思模型
大多数的程序员都需要与外界互动,因此了解你的编程环境是很重要的。这个包括了输入/输出,以及你的编程语言所提供的并发原语,你的程序获得外界信息的方式(例如环境变量和命令行参数等),还有就是你的操作系统处理文件访问,设备访问,搜索路径等等。
了解你所使用的硬件是如何工作的,这可以帮助你更有效地写代码。即使你正在使用一种更高级的编程语言,你仍然需要了解很多东西,例如调用堆、MMU、上下文切换的成本、记忆库的层次结构,以及你所连接的网络特性等等,这些将让你在做出编程决定时得到预示。
4. 拥有很好的数学思维
虽然编程并不像行外人所想的那样,需要很深奥的数学知识,但是当你着手处理一些比较棘手的问题时,你会发现如果拥有很好的数学思维会让你的工作方便很多。很多有趣的编程领域,例如计算机图形、信号处理和密码使用法都要求要有深厚的数学知识。即使你只是在评估代码的性能,它同样需要一些统计思维。
5. 能够从零开始写一个程序和快速写代码
从零开始写一个程序是一个优秀程序员必须具备的能力。很多时候,尝试一些不同的解决方案并从中选择最有效的,这样比只是不停地思考一种解决方法更有效。优秀的程序员还具有能够快速写代码的能力。这种能力是通过不断地学习,思考和实践积累而来的。
6. 拥有团队合作精神
很多时候程序员要做的项目并不是从零开始的,而是要与其他人一起合作,共同开发一个项目,每个人负责部分工作,因此拥有团队合作精神十分重要。和比自己优秀的人一起工作,树立一个共同的目标,尽力帮助别人,而不是害怕竞争,这不仅有利于项目的顺利完成,也有助个人能力的提升。对于团队工作经验不多的程序员,可以多参与一些社交平台或社区的活动,看看那些大牛们如何写代码,还可以通过参与讨论,观看编程直播,在线交流等方式来提高自己的能力和团队意识。 Livecoding.tv 就是一个不错的社交平台,那里聚集了世界各地的程序员,大家可以在线交流,讨论如何写代码,还可以全程直播写码。
livecoding.tv上也有很多来自国内、台湾和香港的程序员通过平台直播写码。
7. 通过实用的工具提高效率
这不是说一个优秀的程序员必须懂得使用所有工具,而是选择适合自己和项目开发所需要的工具。很多程序员会在他们自己个人的社交帐号或社交平台上推荐一些他们经常使用的编程工具和编程实例,多浏览这些信息,从中你会得到很多启发。笔者在livecoding.tv上,看到有应用于各种程序设计语言的工具介绍。感兴趣的朋友,可以浏览他们的博客空间。
8.通过开发实际的项目积累经验
进行实际的项目开发是最好的让一个程序员变得更优秀的方法。尤其是你要在压力下开发一个项目,面对变化无常的客户以及真实的多变的开发环境,还有很多真实发生的问题,这些困难会让你快迅成长成为一个优秀程序员。
每年开发一个自己喜爱的项目,直至它完成为止。这样可以让你突破自己的界限和让你对开发项目保持兴趣。这个项目可以是你有过体验的并且是喜爱的,也可以是你不知道的一些事情。例如如果你已经懂得了游戏开发,但不懂Ruby,那么你可以尝试用Ruby来开发一个游戏软件。
9. 站在终端用户的角度来看待你的应用程序
优秀的程序员并不会是在封闭的空间里编写代码就可以了,而是要站在终端用户的角度去评估自己所编写的软件。终端用户不是专业人员,他们通常会把软件看作是一件神奇的工具,而在程序员的眼中,软件是一个逻辑的步骤。也可以说,在程序员看来一件简单而逻辑性的事情,在普通的用户看来是很难理解的事情。因此,优秀的程序员会摆脱程序员的身份,用普通用户的角度去看待在软件中可能存在的“令人讨厌”的问题。这样也有利程序员更好地进行测试。
10.永远不要停止学习和阅读
计算机世界变化的速度是惊人的。程序员被认为是最接近计算机世界的职业,几乎所有的科技新产品都得由程序员来写代码。因此一个优秀的程序员应该具有渊博的知识,狭窄的知识面会让你的技能停滞不前,跟不上技术发展的步伐而最终被淘汰。你今天还在引以为豪的技能,可能突然会成为一种“过时”的技能了。因此,在编程领域中那些知识渊博的工程师,无一不具有这样的特质:不断地学习新的技能,并且铭记在过往使用那些技能时得到的经验。
一个真正优秀的程序员是从来不会停止学习的。在硅谷中的工程师也不例外。很多公司在招聘工程师的时候,也会很重视候选人对学习的态度。保持学习的态度可以体现在:阅读大量的书籍,而不仅仅是浏览网站;以一种要提升自我的心态来阅读,而不是只是为了最新的项目;同样的,广泛地阅读,而不是只是关注最新的技术。此外,你还可以每年学习一种新的编程语言,了解这种语言的基本知识。这会有助你了解这种语言有哪些优势,让你在编程时会有更多新的想法。
最后,想和大家分享一些对程序员很有帮助的网站或社区:
- Stack Overflow: 这个网站相信大家都很熟悉了,这是一个为程序工程师提供技术交流的平台。无论你在开发设计时遇到什么问题,都可以在网站上提出来,你会获得很有帮助的答案。
- Toppcoder.com: 这里聚集的是世界各地的来自软件开发,数据科学和设计领域的优秀人才。会员可以以自由职业者的身份接工作。该网站还会定期举办各种专业比赛。
- Livecoding.tv: 这个网站是2015年才上线的,但成长速度很快。最大的特色是程序员可以在线实时直播编写代码,互相交流学习。它有别于其它的教育平台,因为这里所开发的都是真实的产品,而且表现出色的工程师还可以有机会被一些公司聘用。