成为一名优秀的程序员:心态和学习策略
前言
软件正在不断吞噬世界,编程是未来许多人的必备技能。
如果你掌握了编程,它也包含很多乐趣。
在我的软件工程师生涯中,我遇到了一些非常优秀的程序员并从他们身上学到了很多东西。
这篇文章将为您提供成为一名优秀程序员的一些建议,特别是从思维方式和学习策略方面。
掌握编程需要花费很多时间,Peter Norvig 说十年可能就足够了,所以请保持耐心,让我们开始吧。
心智模型
每个人都可以编写代码,几岁的小男孩也可以编写出一些可运行的代码。
然而,成为一名优秀的程序员需要花费大量的时间和精力来磨练技能,也需要你有正确的心态,我总结如下:
终身学习
“我坚信,自学是唯一的教育方式。”——艾萨克·阿西莫夫
一切都瞬息万变,每年都有一些技术逐渐消亡,也有一些技术崭露头角。你不需要学习所有新奇的东西,但你需要了解趋势。同时,你还需要具备一些基本技能,以便在必要时能够快速跟上。
毁灭战士系列游戏的缔造者约翰·卡马克,在编程领域摸爬滚打了几十年,却还在努力学习一门新的编程语言,并尝试将其应用到产品中。要成为一名优秀的程序员,必须秉持终身学习的信念,为计算机行业的快速发展做好准备。
热情与坚持
编程并非易事,代码文档不完整、工作时间过长、产品发布压力巨大,这些都可能带来负面影响。如果你缺乏热情,调试就会把你的脑细胞彻底掏空。
从某种意义上来说,编程就是在创造一个全新的世界。一个热爱编程的程序员,即使花太多时间敲打键盘,也不会感到枯燥乏味,反而会感到享受和满足。
好奇心
要成为一名优秀的软件工程师,你需要对很多事情保持好奇心。
有很多问题需要回答。例如:
- 库中的函数是如何实现的,它有哪些缺点和局限性?
- Linux操作系统的内存管理是如何实现的,进程和线程是如何实现的?
- 当您使用浏览器发送 HTTP 请求时会发生什么?
好奇心会促使你了解每个角落的细节,磨练你的技能,并将你推向更高的水平。
保持高标准
通常情况下,编写仅能运行的代码并不需要花费太多的尝试,有时你会从网上找到一些代码片段,然后粘贴到编辑器中,幸运的是,它能正常工作。但是……,可运行的代码是一个低标准,你需要保持高标准。对你的工作保持高标准意味着你需要将你的工作打磨到完美。
尝试问自己以下这些问题:
- 你知道项目中每一行代码的含义吗?
- 您的架构是否能够灵活地满足不同的需求?
- 它适用于更大的数据量吗?
- 它是否足够易读且易于其他人维护?
要保持高标准需要解决的问题有很多,最终会导致问题的复杂化,这也是为什么像谷歌这样的科技巨头会以高标准雇佣工程师的原因。
合作
即使是傻瓜也能写出计算机能理解的代码。优秀的程序员能写出人类能理解的代码。——马丁·福勒
编码就是用代码和机器沟通,但是你的代码也会被别人读到,也就是说你是在通过代码和别人沟通!
当你进入一个开源项目或者在一些公司工作的时候,你需要讨论需求,与别人交流想法,向别人展示自己,写文档等等。当然,有些超级明星可以忽略这些,因为他们可以写出很棒的代码来告诉世界!
对于大多数程序员来说,表达能力在所有互动中都会起到很大的加分作用。这是与他人合作最重要的软技能。
你可以创建一个技术博客来练习写作,这是一个非常详细的指南:如何开始你的编程博客?我也受到了 afternerd.com 的启发,创建了这个网站。
如何学习
作为一名程序员,你需要不断学习,所以最重要的一课就是学会如何学习,高效地学习。如果你掌握了快速学习新事物的规律,你就能更快、更深入地了解很多领域,最终成为一名更优秀的程序员。
费曼技巧为掌握新知识提供了一种深刻、基础、直观的方法,它旨在帮助您更快地学习任何事物。
计算机科学中有很多常见的概念。几乎所有东西,如果你能用通俗易懂的语言解释给别人听,就意味着你已经完全掌握了,并且掌握了你自己的方法。换句话说,边教边学是一种有效的方法。别自欺欺人。
边做边学是另一个重要策略,编写软件并不是什么高深的科学,它更像是一种技能的磨练,就像绘画、跳舞、打篮球或弹钢琴一样。
要成为专家,您需要每天坚持练习,尤其是当您是初学者时,您需要花费大量时间来获得编码和调试的感觉。
然后,你需要做一些实际的项目来实现一些实际用途,以确保你理解编写代码是为了解决现实世界的问题。
步骤
掌握基础知识
就像中国功夫一样,初学者会花很多时间来掌握基本的力量,然后再学习一些花哨的东西。
计算机科学已有约50年的历史,工具(编程语言、编辑器、平台)和计算能力在这些年里发生了翻天覆地的变化,但基础理论的发展却较为缓慢。如今几乎所有编程语言都是图灵完备的。
以下是你必须掌握的科目:
- 数据结构与算法
- 操作系统
- 编译器和编程语言
- 计算机网络
- 数据库
如果可能的话,去大学获得计算机科学学位,这对申请工作很有帮助,但这不是必需的。
程序员不像科学家那样需要更正规的学术训练。相反,许多优秀的程序员只是高中毕业而已。
对于自学成才的人来说,你可以找到很多有用的资源和书籍,用于学习计算机科学和编程。有很多开源项目、教程和公开课程。
作为自学的初学者,不要孤军奋战,尝试与他人联系,或者找一位导师。这会加快学习速度,并帮助你避免犯错。
制定学习计划,不需要太详细。耐心一点,读完一本经典书籍,比如SICP ,可能要花一年左右的时间。
顺便说一句,《计算机程序的结构和解释》(SICP)是每一位真正的程序员都应该尝试读的一本书。
找到自己的轨迹
计算机行业有很多领域,你的职业生涯可能只专注于其中几个。游戏编程?Web开发?系统编程?机器人?所以,趁年轻,努力找到自己想深入的领域。如果你目前还不确定,那就继续寻找,不要止步于此。
你的目标是让你感到最快乐和最满意的目标。
确保你对某个领域有足够的深度,这将给你信心和你自己的学习模式。
创造一些有价值的东西
如果您还没有Github帐户,请创建一个,然后运行!
Github是程序员分享项目和想法的地方,目前托管了许多著名项目的代码。
您还应该学习如何将您的代码推送到服务器,以及如何克隆其他人的代码。
审查其他人的代码对你自己很有帮助,当你开始申请工作时,为其他开源项目做出贡献也会有所帮助。
找工作
顶尖程序员很少有机会申请工作,因为工作机会会主动找上门来。其他一些优秀的程序员甚至不需要申请工作,因为他们的开源项目本身就能赚到足够的钱维持生计。但大多数程序员在正常情况下都需要申请工作。
候选人需要经过几轮面试才能拿到offer。好消息是,软件工程师和其他IT职位仍然需求旺盛。
对于面试过程,《破解编码面试》这本书将为您节省大量时间,它是申请程序员职位的非常详细的指南。
至于简历,拥有或对伟大的开源项目做出贡献将是一个亮点,一些内核程序员只会在简历中列出补丁编号。
推荐是申请工作的有效渠道,因为许多公司信任员工的推荐,并为成功的推荐支付一定的奖金。
跳跃并扩展自己
在职业生涯的初期,如果你无法提高自己的工作时间,那就跳出来尝试寻找新的工作。
你的时间很宝贵,特别是在你职业生涯的早期,不要犹豫。
在你加入的每个乐队里,永远都要做最差的那个人——这样你才能学到东西。你周围的人会影响你的表现。明智地选择你的乐队。——查德·福勒
当你收到大公司和小公司的offer时,一定要认真考虑。记住,要找到一家真正符合你长期目标的公司,不要只考虑薪水,你的职业生涯是一条漫长的旅程。通常,小公司意味着高风险,也意味着潜在的高回报。
还有一件事
保持健康至关重要,一些上了年纪的程序员,由于长期坐着,身体疼痛难忍。手指受伤、心脏病、肥胖是程序员的主要健康问题。
保持良好的生活方式是对年轻程序员的第一条建议,保证充足的运动和休息时间。编程不是生活的全部,找个爱好,享受你的闲暇时光。