编程大牛都有哪些基本功

第一部分:什么是基本功

先说说我所理解的基本功是什么:在讨论,计划,工作,策略以及其他一切相关于这个事物的活动时候,可以不用拿出来讨论的“技能”,但是却又是必须一定拥有的“技能”,而这个“技能”的好坏也直接影响到你所进行活动的质量高低。这个“技能”就是基本功,而且基本功也是随着水平的提高而变化,原来在水平低下时候所谓的技巧会在水平高的时候编程基本功。就比如说写小说,一般来说,用词造句,如何开头如何结尾可能都是小说技巧。但是这个前提是你必须会写字,或者会打字,这个写字和打字的技术就是基本功。当你小说水平升级了,已经写小说的过程中,不在讨论遣词造句了,而是要选择讨论哪种哲学意义的话,那么遣词造句,如何开头结尾就不再是技巧,而是基本功了。或者说在水平低的时候,如果写个完整的故事,那个是技巧,而打字写字是基本功;当水平高的时候,故事情节的发展是技巧,而写个完整的故事就变成了基本功。

第二部分:什么是编程的基本功

重复第一部分的内容:在你讨论编程活动过程中,什么东西非常必要,却不用讨论的技术,就是基本功。

1、查询和阅读文档能力

你使用编程来解决问题的时候,基本上最终的东西是代码,但是编程的知识太广,总有你不会的,总有你不了解的,总有你记不住的。这个时候,有文档作为资料参考,就是你快速把别人的经验知识转化为自己的生产力和自己的代码。

查询阅读文档是可以分成很多部分。主要是一下几个部分:

  1. 教程文档;
  2. 技术参考文档;
  3. 第一手的英语文档;
  4. 代码例子;

教程文档,是手把手教会你如何使用这个编程技术的重要文档之一,入门一个技术的重要教学资料,如果这个都会不看,那么就已经丧失了自学编程技术的能力了。

技术参考文档,一般来说API的技术文档我们说的比较多,很多API都没有教程给出,要自己靠查询文档,再根据需求特点来使用API。这个相对教程文档枯燥。而且这个水平我认为还分几种情况(当然有能力自己编写一个,不靠文档的情况不在这里的考虑范围之内):

  • 知道哪个API符合需求;
  • 知道哪个API接近自己需求,但需要进行数据转换;
  • 不知道有没有API符合自己需求的,但能找到一个API接近自己需求的;
  • 不知道有没有API符合自己需求的,也不知道怎么找的;

2、自己阅读文档的能力

读第一手英语资料也是很重要的。我最愿意读的文档资料是PHP的官网和jQuery的官网。php的官网的文档非常有意思,不但自己写详细的API说明,有例子,底下还有很多用户在提供很多相关的信息和使用API的技巧。英语资料的好处是细致,理解简单,而且更新快,甚至你可以和写文档的人进行交流。

3、英语能力

如果英语能力好,再结合英语版的教程文档和英语版技术参考文档,那么这个基本功会给你的编程水平提高,是有很大的帮助的。

4、 数学

编程到处都是数学的表现形式。就算你不懂数学,但当你编码了,就是在做数学做的事情。

电脑其实就是数学的现实产物,方方面面都有着数学的元素在里面,上面有人说了,数学是蓝瓶的最大值,这点我很认同。

正是前人的努力,我们现在的编程才会如此的容易。但不代表数学现在不重要,编程就不要数学了。在编程中,处处可以看到数学的东西再里面.如果有了数学基础,这些东西理解起来就会更加容易。

先说说,编程基础中的数学:

  • 函数/方法,数学就有函数概念 y=f(x),f就是函数,x就是输入,y就是输出;
  • 逻辑布尔值,if和while都需要有一定的逻辑判定,而数学的逻辑学在这里很有用;
  • 数学运算,这个和数学就一样了;
  • 递归,也有一套自己的数学法则;

数学的应用的地方也就更多了:

  • 2d/3d矢量制图绘画
  • 加密解密算法
  • 视频图片压缩算法
  • 文件压缩算法
  • 物理引擎

等等等等。

那么学好数学有什么好处呢:

(1)理解

比如现在流行的函数式编程,里面的概念就是数学中的函数积分的概念,如果数学学好的话,函数式里面的调用,运算,组合等概念会非常容易理解了

(2)转化

把一些算法转化成代码,想RSA的数学加密解密算法,都是先有理论,让后有人用代码实现的。把数学算法看懂,转化成可以应用的电脑代码或是API

(3)优化

一些算法其实用数学公式就可以完成,而不需要逻辑流程。最近的有一个例子就很明显了,我编写了两个比特单位转化程序,第一次是用while和if写成的,第二次是用数学公式写成的,数学的优化特性里面显示出来了。

(4)逻辑

编程中充满了逻辑,逻辑不好就无法编程。正是由于编程中逻辑很多很重要,所以好好学习数学的逻辑运算,会对编程特别有帮助。因为可以通过运算,简化你的逻辑条件,使得程序更高效,也可能更加容易读懂,逻辑更加清晰。

(5) 分析

有了数学工具,可以进行数据分析,进行数据挖掘。当然也可以对代码本身进行分析,分析其时间复杂度和空间复杂度,作为参考,进行更好的代码优化。

5、读代码

读代码不产生任何代码,如果不能很好的理解现有代码,又如何改进代码,修正错误呢?读代码是一件非常困难的事情,甚至可能比写代码还困难。很多人更喜欢自己重写,也不愿意去读别人的代码。但是实际工作中,可能更多的是维护旧代码,也公司没有时间和资源去支持你编写新的代码。而学习编程,更多的是在读别人代码过程中学习的。所以在编程过程中读懂代码却真的是一项非常重要,却容易忽视的能力。

(1)读懂自己过去的代码

是不是有这样的经历,代码放6个月后自己去读,可能都不知道当时为啥这样写。最好自己慢慢调试,最终明白自己当年写这段代码的思路是啥了. 先读懂自己过去的代码,试着优化重构,提高过去代码质量,就是提高了自己代码能力了

(2)读他人代码思路

自己写的都可能不记得思路了,那么从头开始看别人写的代码就更加困难了。

读别人代码,更多的是了解思考,为什么别人那么写,为什么这样写的好处。理清思路,画出流程图,可能会更好的理解他人的代码。

(3)学习他人的优秀代码结构

学习别人的代码结构,看看别人如何使用数据结构,数据模式的。这样可以转化成自己的知识

(4)读懂他人代码算法

如果别人是大牛,数学学得很好,很多数学公式,很多递归,如果自己没有一定的数学基础,可能就晕了,这个时候,数学的基本功可能就会在这里发挥作用了。

(5)破解纠错

如果读懂别人代码,发现代码有问题,有漏洞,可以破解,可以纠错,让然后把漏洞通知作者,也是提高自己能力的方法之一。当然在对付自己过去的代码时候,也会发现破绽,只有读懂了代码,才能进行修复或者改进。如果你是黑客,读懂代码,可以帮助你破解软件和网站。

总结一下读代码作为基本功的作用:在实际工作中,最先做的其实就是读代码了,可能对别人遗留下来的代码,可能是自己过去写的代码。在没有充足资源和时间的时候,重写代码是最最不好的选择,所以只有读懂这些遗留代码,才能更好的重构,优化和改进现有代码,可以使得代码更加安全,容易维护。

整理自知乎(caoglish)

原文发布于微信公众号 - 程序员互动联盟(coder_online)

原文发表时间:2015-05-18

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏java一日一条

如何掌握所有的程序语言

很多编程初学者至今还在给我写信请教,问我该学习什么程序语言,怎么学习。由于我知道标题问题的答案,所以总感觉这个问题是如此“低级”,一直没来得及回复 : P 可是...

340
来自专栏Python小屋

Python基于用户协同过滤算法的电影推荐代码demo

这是上午上课时即兴发挥并现场编写的一段小代码,稍微美化一下分享。 思路:假设已有若干用户名字及其喜欢的电影清单,现有某用户,已看过并喜欢一些电影,现在想找个新电...

3546
来自专栏调侃编程学

C语言小游戏编程,最详细教程

首先感谢百忙之中你能从万千文章中点小编得专属页面。这不是娱乐篇,这是学习道场。开始前,小编就做一个简单得自我介绍:(开启装逼模式)

894
来自专栏企鹅号快讯

加入 Python 科目,全国计算机等级考试迎来新调整

近日,教育部考试中心宣布将对全国计算机等级考试(NCRE)体系进行调整,从 2018 年 3 月开始,将实施 2018 版考试大纲,并按新体系开考各个考试级别,...

1837
来自专栏PPV课数据科学社区

一个数据挖掘大牛,用程序算法做人生选择

每年一到要找工作的时候,我就能收到很多人给我发来的邮件,总是问我怎么选择他们的 offer,去腾讯还是去豆瓣,去外企还是去国内的企业,去创业还是去考研,来北京还...

3899
来自专栏生信技能树

为什么要学习编程?

帮同学处理一下他从公司拿到的差异分析结果,当然,给我的是Excel表格,老规矩,导出csv然后读入R,然后准备顺手画个火山图,做个GO/KEGG富集分析。下意识...

3318
来自专栏申龙斌的程序人生

“零基础学编程”都需要哪些基础?

工作了20多年,学了Basic、C、C++、JAVA、C#、Objective-C、R、Go等一堆语言,可惜样样都不精。最近好像流行零基础学编程,我努力清空了我...

2858
来自专栏web前端教室

JS本身并不难,为什么前端学起来感觉很难?

image.png 这个问题我就不等大家的回答了,相信大家也明白,我并不是闲的无聊这么问。JS本身语法并不难,它困难的地方在哪呢?主要在于以下几点: ? 1,怎...

1909
来自专栏web前端教室

昨天有人留言给我说,“js难的是逻辑,不是基础知识”。我表示反对

js逻辑难? 留言的这位同学是指,true,false,什么 || && ==之类的么?再有什么位运算之类的我用的比较少,每次看完二进制的资料之后不到五分钟...

1609
来自专栏web前端教室

英语不好,数学也不好,能不能学WEB前端?

image.png ---困难多,办法更多。 开国太祖毛爷爷有句话,“万水千山只等闲”!这句话放在这里可能不太贴题,但从这句话的气魄来讲,却是非常贴题的。不管有...

1886

扫描关注云+社区