今天在知乎上看到这样一个问题:"在做程序员的道路上,你掌握了什么概念或技术使你感觉自我提升突飞猛进?"
![]()
问题地址:
https://www.zhihu.com/question/
回答" Type="normal"@@-->
整理了几个不错的回答,分享一下。
顾轶灵的回答
找到合适的搜索关键词。
张铎的回答
我来正经回答一下吧。
首先就是别觉得自己能发明什么新东西,你现在能想到的大部分早就有人想过了,还给你总结好了,并不是只有你聪明前人都是笨蛋,多抽象概念然后擅用搜索,能少走很多弯路。
第二看到垃圾代码别急着改,还是那句话,并不是别人都笨蛋只有你聪明,很多时候垃圾代码是有他的理由的,要改必须从根上改起,需要大量的前期准备和设计,急急忙忙跳进去只能越改越垃圾。
微调的回答
虽然我的本职不是搞开发的,但开发工具和写码也是生活的重要组成部分。作为一个获得了近万GitHub星标和几百万次下载的业余开发者,我来分享一下自己的野路子心得。
1.跟完一个完整的项目后,以后的项目都只是在重复上创新。如果你还没有参与过一个完整的开发项目,从功能设计,封装重构,写测试,部署和优化,应该想尽一切方法参与一个。之后你再做什么项目,用什么语言,大概都只是在搜索引擎上寻找对应的模块和示例代码。
2.知道该搜索什么关键词,不要尝试造轮子。要学会读懂API文档,知道现成的轮子怎么用。尽量把未知的问题转化为已知的问题,规避重复解决已有的问题。我举几个简单的例子,如果要去找一个list里面第k个值,该怎么做?
可能有的语言会直接返回第k个值,甚至前k个值,比如pytorch的topk
有的语言没有直接的功能,但你可以通过排序,再取第k个值,比如numpy
有的时候你想得到前k个值,无需排序,那还可以更快
有的语言支持返回k个最大或者最小值,有的只支持最大值,那么可以返回(n-k)个值转化为求最大。或者直接乘以-1求解~
3.掌握几个基本的数据结构,基本够吃半辈子。最重要的无外乎就是list,dictionary,和一些tree。我在实际场景中用到stack,heap啥的机会也不多,因为标准库基本都实现了我们的需求。你大概知道什么问题该用什么轮子即可,而且套路真的不多。
4.先设计再动手,不断重构。最好是在开始的时候就有一个大概的设计出来,需要什么模块,每个的输入输出。相信我,就算设计的再好,也会需要不断重构,但有一个大概正确的初步设计不至于迷失在开发中。而且每完成一个小的模块都可以获得一些正反馈,能够感到快乐!
5.善用各种IDE,比如PyCharm或者Spyder啥的。在我开发过的十几个工具库上,基本都是PyCharm负责复杂调试,Spyder进行快速开发,配合Kite完成各种各样的补全。写出新的工具之后,交给各种continuous integration的平台去进行测试(circle ci,travis ci)等。我打字速度挺慢的,但开发效率挺高的,要感谢越来越智能的工具。
6.敢写,去写就完事了。这是最重要的一条。很多人觉得自己不行,写的跟shi一样,所以不敢开源扔到github上。但编程是个需要反馈的事情,除了实现新功能的自我实现,还有被其他同行点赞的快乐,搞开发的人都懂。相信我,只要你敢写,就有人敢用,说不定你就能搞出点什么。
最后吧,编程是个行胜于言的行当。大部分时候方法翻来覆去就那么几条,更多的还是喜欢创新不怕麻烦、能和寂寞与困难做伴的性格。
总有人问我"你看我适不适合编程?"

我一般都问他们一个小问题:"假设你自己开发了个好玩的小程序,但里面出了个小bug。你会不会选择牺牲吃饭和睡觉时间去解决它?"不用回答我,自己琢磨一下~
大博的回答
面向离职编程,把你每一行代码,每个文档,都当做离职交接文档。配置文件的详细描述,代码的打包,部署,测试环境和正式环境的配置,TODO,如何扩展,如何让下一个接手你代码的人看你的代码的时候被你的代码惊艳到哭。
黄宇的回答
看了很多高手的答案,感觉大家都是天才,现在我来说一个蠢材的感悟:继承。
鄙人化工毕业,毕业之前基本上只懂一点点C和模电数电,毕业之后从事单片机硬件类编程,突然面对工作其实是心里没底的,编程也不知道从何下手。
直到我入职了一家公司,哪家公司前任n届程序员离职留下了数十个项目全套资料,涵盖方方面面的硬件驱动,通讯基础代码,我就看懂,学习,整理,消化为自己的代码库,其间博采众长,再花了功夫吃透硬件方面知识。
然后。。。我就马上水涨船高加薪飞起,比入职头两年自己瞎摸快了不知数倍!
所以现在为了节约时间,我愿意买成熟的代码历程来加速学习,仅仅花很小代价即可很快获得别人数年研发经验。
我这点感悟是典型的取巧之法,适合天赋平凡如我之辈。
泛程序员的回答
转行程序员,6 年码龄,后端。前两年一直浑浑噩噩,直到我第三次拿起这本书,真的读完了(前两次放弃了):
《Computer Systems A Programmer’s Perspective》 - CSAPP - 深入理解计算机系统
一切都变了。
计算机从此不再是黑箱,建立了正确的硬件 Mental model,我知道当我执行 `python hello.py` 发生的一切(概念上);我知道一个程序崩溃后应该如何溯源。
从以后,我编程不在恐惧;看到异常不在不安。一切那么自然,计算机真的是直来直往的生物。
这书,对于转码的人来说,真的太重要了。
dboy的回答
你学会了做功能,用各种库,各种框架,项目形形**,需求千姿百态,变化莫测。
但你都过来了,凭借着优秀的搜索素养,复制黏贴,拿来主义的能力(我不是在讽刺,这是一种编程必须的能力),成功地解决了一个又一个陌生的需求。
你觉得自java入门 基础职业己走过了很长的路。这时候大概三年过去了,确实不短。
但也渐渐意识到似乎缺了什么东西,有一种不满足感,以前你只追求高效率地完成工作,现在你想追求得更多一点。
你也许想知道用过的某个库的实现原理,也许想实现自己的版本,你想理解框架的架构模式,想获得这种能力,你想把语言本身用得更自如更生动,想真正拥有它,而不是使用它。
这是你从developer到engineer的关键时刻。你将要学会的程序设计能力,而不是为功能而代码的能力,你越来越多关注质量,而不是数量。
如果你是PHP程序员,你将理解的这个概念可能是"data driven",你尝试让数据来驱动程序,而不是层层嵌套的逻辑,无休无止的if else,你想把程序变短变平,你想把复杂的逻辑编程简单的"配置",你想让这些配置来帮你写逻辑,而不是自己手动去敲逻辑代码。理解它以后,你会发现原来这么多的程序其实可以有更好的写法,更"快好省"的结构设计。你不再觉得"业务逻辑"是浪费时间,你看到了把任何业务逻辑转化为数据驱动的设计的途径,这时候你不再是原来那个PHP程序员了packagist上的库你看过去,都是你的朋友,因为你知道在某个时候,你需要他们支撑(简化)你的一个设计,以前你看到一个包,看它的API,找到一个,require进来,发现可以,完了;现在你想看看它的"设计",想的是"可以怎么用",对我的项目有什么意义。
如果你是JS程序员,这个概念也许是事件驱动也许是异步编程,你懂得了以事件为中心来设计一个完成的架构,你驾驭了异步程序的技巧,以前你总是觉得驾驭不了复杂的项目,感到恐惧,错综复杂的事件流,异步程序写起来各种不自然,UI交互,因为你总是追着每个具体的功能跑,而没有想过高一两个层次的设计,事件如何统一起来管理,而不是让它们乱窜,UI的模块怎么分割,分割以后怎么交互,对你的要求不是去设计一个具体的模块,而是为设计任意多模块提供一种可扩展可维护的机制,你需要设计规则,决定程序的结构、层次、模式。这时候你不再只是document.getElementByld那时候的JS程序员,这时候你具备了编程的"元"能力:剖析问题,设计程序。你会觉得即使不给你任何框架和库,自己也能设计出一套方案来。你选择库或者什么技术开始处于非常具体的"需要",而不是听说它"很好用",那时候是它在选择你,你很被动。"我想用A,因为这时候A是**选择",你有一种清晰感,也开始有了品位,判断力。
你不再是"码农"了,你是Engineer,你做事开始有了逻辑(你不确定以前做的事对不对好不好,只管做,现在你比较清楚了),很多东西在你脑子里开始有了主次,你用设计、架构来解决问题,而不是光用代码和搜索引擎。"你"开始真正成为解决问题的主角,而不是你"用到的东西"。你真正地驾驭了语言,这个语言可以怎么用,应该怎么用,而不是写成什么样算什么样。你能比较轻松的从别人的东西里看出苗头来。
这个时候,你走上了技术能力的phase 2。
**的回答
最大的突飞猛进,来自于心态。
在我意识到,IT和编码领域,越难的东西其实越有意思的时候,我觉得我瞬间进入了另一个层次。。。
自从有了这种想法,越难的东西我越有兴趣把它搞定,同时,你搞定的东西越难,满足感也就越大。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/10141.html