QCon 演讲火热征集中,快来分享技术实践与洞见! 了解详情
写点什么

如何成为优秀的程序员?

  • 2020-02-03
  • 本文字数:2309 字

    阅读完需:约 8 分钟

如何成为优秀的程序员?

今天关注了一个很有意思的问题“中国目前最优秀的程序员有哪些?”。和小时候有人问“你的理想是什么?”,你说想当科学家一样,作为程序员的理想就是成为最优秀的程序员。当然这个问题更加宽泛,生活中有很多事情不是自己想做就能够做到的。你不再是一个单独个体,往小里说,需要养家糊口,往大里说,每个人都生活在时代的洪流中。


有时候回顾过去,我往往会产生一些不切实际的想法。可能会觉得没有生活在马拉多纳的时代,一睹球王的风采;还有可能觉得没生活在冷战时期,人类登月成功;也没有看到第一台电脑问世。但仔细想想,有的时候反而庆幸,我们生活的时代,没有战乱,也没有饥荒,这已经非常幸运了。人类茹毛饮血,之前几千年的物质十分匮乏,每隔一段时间就会为了生存而发动战争。目前已经很少有人因为饥饿而身亡,也很少有人因为战争而送命了。细细数来也见证了不少历史,没有马拉多纳,但是梅西已经拿了 6 个金球奖了;没有见证登月,但是有幸看到 spacex 火箭回收;没有见过第一台电脑问世,但是经历了第一台智能机问世。如果我从未来回忆过去,可能也会羡慕过去能够见证如此多的东西。


再回到之前的问题,如何在有限的范围内朝着优秀的程序员这个方向努力呢


我们可以大致将这些顶尖的程序员分为 3 类:


第一类 ACM 类。这类程序员最重要的就是基础好,算法等基础知识比较扎实,这是很多程序员欠缺的,并且需要一定的刻意练习。为什么这么说呢?由于程序员大部分时候使用的都是库函数,不用自己造轮子,所以大部分人对算法的实现了解的没那么清楚。再加上 python 的流行,对 c++了解的程序员也越来越稀少,也就是说理解计算机底层的程序员越来越少了。在基础不扎实的情况下,遇到简单的问题可以解决,遇到稍微复杂一点的问题就会花费很长的时间,并且效率低下。这方面我很欠缺,虽然学的多,但是理解的少,并且不成系统,都是零敲碎打的学一下,基本功不是很扎实。有 ACM 经验的程序员,一是逻辑思维比较强,二是实现代码的基础比较好。


第二类开源社区类。这类程序员一般都是各大公司的核心开发成员,也酷爱写代码,真正做到了兴趣和工作相结合。作为开源社区的维护者和贡献者,这类程序员都比较专注,也乐于实现自己的想法,并且一直在某一领域深根细作,长期坚持输出。开源精神代表了兴趣,贡献和专注。


第三类博客类。这类程序员是真正的骇客,从来都是空杯心态,能够长期坚持学习,并且有自己的思考、理解和感悟。输出的想法和知识都比较接地气,是书本中学不来的。这类程序员真正的影响了一大批程序员,因为目前的工作中的很多问题都是 google 搜索来解决的。乔布斯说求知若渴,对知识和思想的渴望可以超越一切,言传身教也不过如此了。


根据上述的总结,那么我们应该如何提高呢?


  1. 持续的练习。基础的提升是最难的,俗话说台上一分钟,台下十年功,基础的提高是需要日积月累的。有的时候为了应付考试和面试,突击式的学习算法和数据结构,结果很容易忘记。有的时候往往觉得自己理解了对应的算法,结果过一段时间又忘记了。针对这种情况我也没太多好方法,也是突击学一阵,然后就聚焦于工作中具体的问题和业务了,很少能够沉下心来持续的学习算法、数据结构和设计模式等。再加上这部分知识的作用很难有立竿见影的效果,往往花费大量的时间和精力,有的时候还用不上,短期内很难收到回报,所以经常会有挫败感。


但学习基础知识的好处是能够锻炼人的思维,因为很多方法都是相通的,解决的问题多了,思维能力也上来了。无论是看开源代码,还是看专业书籍,都可以归结为提高基础的能力,这一部分需要持续的练习,才能收获,可以类比为练内功。


  1. 足够的专注。对所做的事情充满热爱,能够找到自己的方向,并且能够一直坚持在某一个方向持续的努力,这其实需要自己考虑清楚自己要什么,并且愿意长期坚持,这个领域可能是比较热门的,也有可能也没那么热门,就比如计算器一类的项目,或者一些基础的库函数,哪怕只有少量的人关注,也可以把它实现的很优美。

  2. 求知若渴。能够坚持持之以恒的学习,学习能力包括 2 方面,一方面是学习知识,另一方面是提炼并且输出知识,这 2 方面都做好了才叫学习。有的时候听课,发现有些人理解的很好,公式证明过程也回答的很好,但是真正做题的时候却不是很好。也就是说理解之后,还需要对知识分类形成知识体系,思考并且输出知识,这样才叫学习能力。这也是非常推荐的“费曼学习法”。

  3. 善于思考。我们遇到问题,往往就是直接去解决,而有些人会对问题做分类,把问题归为哪一类,然后针对这一类问题去找对应的方法解决。遇到问题能把问题抽象,类比到相同领域的问题,针对这类问题,业界可能有很经典的解法了,只要按照对应的方法就可以解决问题。思考还包括提问题,通过提问题来理解,为什么要这么设计,以及这么设计的原因,从而从根本上理解原理。

  4. 乐于分享。自己学习很简单,能够长期的输出知识却很难,看一本英文书很简单,但是翻译它却很难,能够把自己的想法知识贡献出来,让更多的人学习和讨论,分享知识的同时,自己也收获了很多知识。


如果能够长期坚持以上一点或者几点,我相信你一定会成为一名优秀的程序员,至少比以前优秀。


今天的分享就到这里,欢迎小伙伴在留言区留言,谈谈你的感想~~


原文链接:https://zhuanlan.zhihu.com/p/103485647


作者介绍


王方浩,前蚂蚁金服高级软件工程师。一直从事软件相关工作,是操作系统、大数据、自动驾驶相关技术的爱好者。


本文来自 DataFunTalk


原文链接


https://mp.weixin.qq.com/s?__biz=MzU1NTMyOTI4Mw==&mid=2247497017&idx=1&sn=488522cd89ca0a68bf4e55cdfe513d36&chksm=fbd74755cca0ce43879c6131556725b4c3fc06d4ed0232db0bc0465ae5a596b0d6e75dadcb1c&scene=27#wechat_redirect


2020-02-03 10:002030

评论

发布
暂无评论
发现更多内容

GPUStack v0.4:文生图模型、语音模型、推理引擎版本管理、离线支持和部署本地模型

GPUStack

Stable Diffusion LLM Whisper Speech-to-Text Text-to-Speech

极限科技三周年庆典:追求极致,共创未来科技新篇章

极限实验室

极限科技 周年庆典 极限科技三周年 周年庆

喜报!极限科技(INFINI Labs)通过国家高新技术企业认定

极限实验室

科技 极限科技 高新企业认定

LlamaIndex工作流可视化的AI助手分析探索

代码忍者

API 接口 pinduoduo API

数字赋能制造:赛力斯汽车的零代码创新实践

明道云

收藏品NFT的开发流程

北京木奇移动技术有限公司

NFT数字藏品系统 NFT开发 软件外包公司

制造业数字化演进历程中的创新与HAP 赋能

明道云

探索1688商品详情API:轻松解锁商品信息的全面视角

代码忍者

API 接口 pinduoduo API

七牛云荣获「2024 鸿蒙生态 SDK 星河奖」

七牛云

Navicat Premium for Mac(专业数据库管理工具)

Mac相关知识分享

Photoshop 2023 (ps 2023) for Mac图像编辑设计软件

Mac相关知识分享

AutoCAD 2024 for Mac(cad设计绘图工具)

Mac相关知识分享

MacDroid pro for mac(安卓设备文件传输助手)

Mac相关知识分享

让零代码系统界面体验更优秀

明道云

GPUStack v0.4:文生图模型、语音模型、推理引擎版本管理、离线支持和部署本地模型

SEAL安全

Stable Diffusion LLM Whisper Speech-to-Text Text-to-Speech

Mac系统上常用的9款甘特图软件,哪个最适合你?

爱吃小舅的鱼

mac系统 甘特图软件

企业数字化转型的矛与盾

明道云

Final Cut Pro for Mac(fcp专业视频后期制作)

Mac相关知识分享

集团企业分级管理授权能力建设

芯盾时代

iam 权限管理系统 授权访问

火山引擎数据飞轮最新活动:结合大模型能力,探索金融行业数智化落地新可能

字节跳动数据平台

数据飞轮

大数据平台Bug Bash大扫除最佳实践

京东科技开发者

探索效率工具:国内企业常用的8大工作计划管理软件分享

爱吃小舅的鱼

项目管理软件 工作计划管理软件 工作计划软件

工作计划进度表如何高效创建?主流8款软件分享

爱吃小舅的鱼

项目管理软件 工作计划管理软件 工作计划

Elasticsearch vs 向量数据库:寻找最佳混合检索方案

Zilliz

全文检索 elasticsearch 向量检索 Milvus 混合检索

最新前端架构设计:中央仓库管理-基于工作空间和git-submodule实现共用和管理

京东科技开发者

从MySQL JOIN 算法角度看如何优化SQL

京东科技开发者

如何成为优秀的程序员?_开源_DataFunTalk_InfoQ精选文章