首页 > 编程基础指的是什么?

编程基础指的是什么?

排序算法(Sorting algorithm)是计算机科学最古老、最基本的课题之一。要想成为合格的程序员,就必须理解和掌握各种排序算法,摘自阮一峰日志。
那什么才是编程基础呢?
真正的程序员要去修炼和学习哪些?


赞同@joyqi的说法。

我所理解的基础是:你对编程有没有感觉,你是不是发自心底的热爱?其它都是浮云。

那感觉从何而来呢?难以用语言表达,举个简单例子,就拿快速排序算法来说吧,传统教育模式下通常你可能会先读到其设计思路,然后再去读源码,现实中通常是反过来的,在你没有了解这个算法原理、设计思路的情况下,你读代码能不能领悟到?代码是死的,代码背后的思想是活的。“惺惺相惜,神交已久”说的就是这样一种感觉。

我感觉我已经有点跑题了,什么才是编程基础呢?似乎我没有给出答案,但有一点是肯定的,你不喜欢她,就别去追她,别违背自己的内心。

真正的程序员要去修炼和学习哪些?这其实取决于两个方向:工作需要?兴趣所在?当然如果你有幸合二为一,那是再好不过了。也就是说在修炼和学习之前,你先要有一个大致的方向。“吾生也有涯,而知也无涯”。

每一个方向遇到的问题会不一样,解决问题需要的知识结构也不同,这个知识结构也可以理解为你前面问到的基础。

从工作需要的角度,你可以先关注一下招聘岗位描述信息,通常这会给你一个大致的知识结构。你可以有针对性的修炼。

从兴趣的角度,我建议你找机会参与一个开源项目,或者发起一个开源项目,正所谓“独学而无友,则孤陋而寡闻”。当你尝试去实现一个项目、一个产品的时候,(注意,项目和产品可是不一样的)你需要修炼什么自然就会知道。

好了,说了这么多,我自己都不知道在说什么。最后总结一下吧,没有所谓的基础,别太在意,你应该在意你的能力,这其实就是一种感觉,并且你真的喜欢她。有点像谈恋爱:-)另外我建议你先关注一下工作需要的吧,有能力照顾自己并照顾自己所在乎的人,你才有资本去搞你的兴趣爱好。


其实不同年龄段的程序员对这个问题都有不同的理解,有人说算法对程序员很重要,有人甚至说好的程序员数学要好,还有人会说要当好程序员就要理解整个操作系统的底层实现,等等

这些是很重要,但这些只是一个程序员的基础知识。就好像要当作家,有的人告诉你要通读四书五经,有的人告诉你要熟悉各种描述笔法,但是是不是知道了这些你就能当作家呢?当然不是,当好作家是需要灵感的,那么程序员如何修炼属于自己的灵感呢。

要我说,如果你是一个初学者,汲取基础知识的过程必不可少,这是你以后成长的基石,直接决定了你以后能够思考问题的深度以及高度。所以一般面试官在面试刚踏入职场者,都以基础知识为主。

但这个过程持续几年之后你会到达一个瓶颈,你会发现无论你再学习多少新知识,都无法再有前几年那种飞速提高的过程了,无非是多会几种语言,或者多掌握几种框架而已,成就感已经与当初不可同日而语。那么恭喜你,你已经站在了一扇从coder成长为developer的门前。

很多人一生都在编程匠这个层级止步不前,或者转岗做其他的事情,但是有些人却能够一朝顿悟成为名副其实的工程师。工程师是有创造性前瞻性的一群人,程序员中只有少部分人才能称为工程师。他们写的代码,他们的思想就是不一样,很多人想着很复杂的东西,他们只要几句话就可以理清楚,回想起来你会觉得很简单的样子,但是当时你就是不知道要这么想。他们似乎已经洞悉了整个系统的本质,就像黑夜中的萤火虫闪闪发光(当我没说。。。)

说了这么多,你会觉得我好像说了很多,又好像什么都没说。当然这是因为我偏题了:),我写的是一些自己理解的程序员需要具备的基本素质,是要告诉你不要一叶障目。这些知识就像一个人的身体,而自己的思想才是灵魂,两者缺一不可,两者都要修炼。只有前者就只能成为码农,只有后者呢?呵呵,现在很多这种人了,我称之为空想家,他们的思想都是建立在虚无之上,根本经不起推敲。


作为编程的『基础』,并不是说你现在的能力有多高,而是说你的习惯、解决问题的方法和思路,会不会在未来几年内让你的能力大幅提升。

野生程序员心中的『编程基础』

  1. 知道常见的设计模式。你不一定系统地知道什么是『设计模式』,但是在代码编写过程中不自觉地使用了一些设计模式
  2. 能快速理解一门语言的基础语法并能快速读懂以这门语言写的软件的大致逻辑。简单地说就是需要解决问题时能monkey-patching一个现有开源程序
  3. 理解常见算法。我反对『掌握排序算法』这种说法。算法本身的代码实现并不是重点,参考现成代码是程序员美德。我要说的是理解算法。比如说,为什么『快速排序』并不是最快的但是仍然广泛使用?为什么一个排序算法的复杂度不能突破O(n log(n))?在给定的前提下是否知道应该选择什么排序算法?
  4. 知道怎么做trouble shooting。这里的trouble shooting很广泛:快速准确地debug手头的代码,知道如何评估并找到一个更高效的数据结构,会准确描述手头遇到的问题并在合适的网站、邮件列表、IRC求助。
【热门文章】
【热门文章】