故天将降大任于是人也,必先苦其心志,劳其筋骨,饿其体肤,空乏其身,行拂乱其所为,所以动心忍性,曾益其所不能。      --《孟子》

我曾经很是厌倦敲代码的日子,因为觉得,我所写的程序,无论大小 ,其实都是拿别人的模块,按照自己的实际需要,稍微改动一下,再组合成来实现功能即可。我觉得这是一件没有意思的事情,就像反复的搬砖一样。曾经我以为这是因为我“喜新厌旧”的性格使然,对自己这种厌倦编程的想法很内疚,直到看到了下面这篇来自知乎的文章 ,我才明白,其实自己的编程能力,在以前所重复使用轮子的时候慢慢提高,在折除别人的代码中得到了潜移默化。这是一个菜鸟必经的过程,就像你从婴儿时期,模仿别人走路和讲话,到最后自己自由奔跑和演讲!以下是文章:

*********************************************************************************************************************************************************************

计算机科学有两类根本问题。一类是理论:算法,数据结构,复杂度,机器学习,模式识别,等等等。一类是系统:操作系统,网络系统,分布式系统,存储系统,游戏引擎,等等等等。

理论走的是深度,是在追问在给定的计算能力约束下如何把一个问题解决得更快更好。而系统走的是广度,是在追问对于一个现实的需求如何在众多的技术中设计出最多快好省的技术组合。
       搞ACM的人,只练第一类。像你这样的更偏向于第二类。其实挺难得的,但很可惜的是第二类能力没有简单高效的测量考察方法,不像算法和数据结构有ACM竞赛,所以很多系统的苗子都因为缺少激励和正确引导慢慢就消隐了。所以比尔盖茨才会说,看到现在学编程的人经常都把编程看作解各种脑筋急转弯的问题,他觉得很遗憾。
       做系统,确实不提倡“重复发明轮子”。但注意,是不提倡“重复发明”,不是不提倡“重新制造”。恰恰相反的,我以为,系统的编程能力正体现在“重新制造”的能力。能把已有的部件接起来,这很好。但当你恰好缺一种关键的胶水的时候,你能写出来吗?当一个已有的部件不完全符合你的需求的时候,你能改进它吗?如果你用的部件中有bug,你能把它修好吗?在网上繁多的类似功能的部件中,谁好谁坏?为什么?差别本质吗?一个开源代码库,你能把它从一个语言翻译到另一个语言吗?从一个平台移植到另一个平台吗?能准确估计自己翻译和移植的过程需要多少时间吗?能准确估计翻译和移植之后性能是会有提升还是会有所下降吗?
       系统编程能力体现在把已有的代码拿来并变成更好的代码,体现在把没用的代码拿来并变成有用的代码,体现在把一个做好的轮子拿来能画出来轮子的设计蓝图,并用道理解释出设计蓝图中哪些地方是关键的,哪些地方是次要的,哪些地方是不容触碰的,哪些地方是还可以改进的。 如果你一点不懂理论,还是应该学点的。对于系统性能的设计上,算法和数据结构就像在自己手头的钱一样,它们不是万能的,但不懂是万万不行的。
       怎么提高系统编程能力呢?土办法:多造轮子。就像学画画要画鸡蛋一样,不是这世界上没有人会画鸡蛋,但画鸡蛋能驯服手指,感受阴影线条和笔触。所以,自己多写点东西吧。写个编译器?渲染器?操作系统?web服务器?web浏览器?部件都一个个换成自己手写的,然后和已有的现成部件比一比,看看谁的性能好,谁的易用性好?好在哪儿?差在哪儿?为什么?
       更聪明一点的办法:多拆轮子。多研究别人的代码是怎么写的。然而这个实践起来经常很难。原因:大部分工业上用的轮子可能设计上的思想和技术是好的,都设计和制造过程都很烂,里面乱成一团,让人乍一看毫无头绪,导致其对新手来说非常难拆。这种状况其实非常糟糕。所以,此办法一般只对比较简单的轮子好使,对于复杂的轮子,请量力而行。
       轮子不好拆,其实是一个非常严重的问题。重复发明轮子固然是时间的浪费,但当轮子复杂而又不好拆的时候,尤其是原来造轮子的人已经不在场的时候,重新发明和建造轮子往往会成为无奈之下最好的选择。这是为什么工业界在明知道重复发明/制造轮子非常不好的情况下还在不断重复发明/制造轮子的根本原因。程序本质是逻辑演绎的形式化表达,记载的是人类对这个世界的数字化理解。不能拆的轮子就像那一篇篇丢了曲谱的宋词一样,能读,却不能唱。

文章来源:https://blog.csdn.net/jiangjieqazwsx/article/details/48057277

我们应该怎样来提高自己的编程能力?相关推荐

  1. 计算机学院的学生该怎样提高自己的编程能力?

    链接:https://www.zhihu.com/question/423764018 编辑:深度学习与计算机视觉 声明:仅做学术分享,侵删 感觉国内的大学计算机专业本科教授的都是基础概念类的知识,实 ...

  2. 怎么提升自己的c语言算法,如何快速提高自己的编程能力

    如何快速提升自己的编码nneg li 如何快速提高自己的编程能力 大家在学习完C语言之后,可能会感觉自己还是处于一个懵懂的状态.C语言的语法规则倒是记住了,但是一旦到了实际的写代码环节就容易断片,不知 ...

  3. 计算机专业的学生应该怎样提高自己的编程能力?

    本人国内某重点大学渣渣专业大一在读,专业对编程要求较高. 大一刚学编程(C/C++),感觉有点吃力,求指点.我们平时练习都是做的OJ(老师负责选一些题让我们做,也可以自己随便刷),一些题还好,可是有些 ...

  4. 程序员怎么提高自己的编程能力?大厂技术总监的建议

    在我看来,成为编程高手其实是一场体力.脑力.心力的修仙之路. 我基于个人以及身边同事的案例展开说一下我的建议,希望让你有所启发. 1.首先何谓 "编程高手" ? 我觉得能分成这样 ...

  5. 初学者怎么样提高c/c++编程能力?

          首先.什么算你所谓的编程能力? 我们对一项技能的掌握程度往往很难量化,对于编程能力的考量可能比较抽象,我们来类比比较直观的其他技能.比如说什么叫会弹吉他?我们说一个人吉他玩的好,这个人会弹 ...

  6. 如何提高自己的编程能力

    编程数年载,遭遇诸多项目,变态奇葩的需求奇多 序: 天下武功,唯快不破. 神雕侠侣中 金轮法王 对 杨过说:杨兄弟,你的武功花样甚多,不是我倚老卖老说一句,博采众家固然甚妙,但也不免驳而不纯. 你最擅 ...

  7. 程序员提高编程能力万无一失的办法

    那就是去读别人写的代码.读那些你常用的库.编程框架的源代码,读那些你景仰的大牛的源代码,读代码里的测试(测试本身就是一种有效的文档):读代码.改代码.运行代码. 其实,所谓写程序,大部分的时间都是花在 ...

  8. python记忆口诀-学妹问我: 如何提高编程能力

    聊天截图 聊天截图 前言 开局两张图,剩下全靠吹了. 上面这两张图便是写这篇文章的原由. 对话框的另一边,是一位大二计算机科班在读的小姐姐,看似平静的文字背后透露着迷茫与困惑,还对未来的焦虑. 透过屏 ...

  9. python记忆口诀-学妹问我:如何提高编程能力

    聊天截图 聊天截图前言 开局两张图,剩下全靠吹了. 上面这两张图便是写这篇文章的原由. 对话框的另一边,是一位大二计算机科班在读的小姐姐,看似平静的文字背后透露着迷茫与困惑,还对未来的焦虑. 透过屏幕 ...

  10. 提高计算机编程水平,写程序10大习惯和如何提高编程能力

    如何提高自己的编程能力 1. 扎实的基础.数据结构.离散数学.编译原理,这些是所有计算机科学的基础,如果不掌握他们,很难写出高水平的程序.据我的观察,学计算机专业的人比学其他专业的人更能写出高质量的软 ...

最新文章

  1. 《算法竞赛中的初等数论》(三)正文 0x30 积性函数(ACM / OI / MO)(十五万字符数论书)
  2. firefox.exe not found problem (VS2005 website)
  3. Python_note8 程序设计方法学+Python第三方库安装+os库
  4. 幼儿园计算机知识培训内容,幼儿园教师计算机培训计划
  5. CODEVS 1172 Hankson 的趣味题
  6. 为Web程序员解毒:9个IE常见Bug的解决方案
  7. Raspberry PI 系列 —— 裸机点亮LED灯
  8. 工业设计对计算机技术的应用,计算机在产品设计的应用
  9. C语言 指针 p++ / p-- - C语言零基础入门教程
  10. python不用模块调用麦克风_python调用pyaudio使用麦克风录制wav声音文件的教程
  11. springboot 2.0版本自定义ReidsCacheManager的改变
  12. 理解 LruCache 机制
  13. 工作中常用的Linux命令(不断更新中)
  14. 微信开发者工具在线调试
  15. C#实现调用第三方接口进行短信验证码验证
  16. 计算机一级演示文稿知识点,计算机一级考试ppt演示文稿及上网题考点
  17. systemd 服务使用
  18. CTO 说公司的 ES 性能不够好、集群不够稳定!直到我用了这些调优技巧后。。。...
  19. 常用手机尺寸以及分辨率
  20. Linux ACLs

热门文章

  1. springcloud搭建以及集成tx-lcn分布式事务解决框架
  2. Android ANR日志分析总结
  3. linux找不到安装命令,linux命令行为什么输入sudo ./configure提示找不到命令
  4. [已解决]你的支付授权失败。请核对你的信息并重试,或尝试其他支付方式。请联系你的银行了解更多信息
  5. 黑色沙漠选择服务器无响应,黑色沙漠无法连接服务器是什么原因
  6. SEO优化基础知识大全 SEO新手入门必备知识
  7. Transition组件
  8. 记录贴:学习Andorid开发
  9. 什么是Base64 编码,Base64 编码有哪些优缺点?
  10. linux中wps默认安装目录,在Linux系统中安装使用WPS的方法