关于学习基础学科与培养编程能力的问答

有学姐即将去往UCSD读CS的master,她本科是学EE的,正在提前补充知识。今天她向我请教了一些问题,我将我的回答贴在这,希望对其他人也有用。

 

问:

打扰又要请教下,你觉得编程能力的培养是需要按部就班系统学习操作系统、数据结构、算法这些之后才能进行,还是可以像本科我们学C那样,直接看这类语言然后参照一些样例就可以开始自行写程序了呢。
那边听课还好,可是做作业有不少要实际写程序的,所以我觉得有必要再锻炼一些写程序的能力,操原算法我已经开始听视频课了,也看了一些书,可是这距离实际编程还有不少距离,见效慢,所以想看看有没有可能尽量抄捷径

 

我的回答:

我先分别说一下这几门课吧:

操作系统:这个主要是讲操作系统的实现原理。据大部分专家称,如果想在计算机领域有很好的发展,这是必不可少的一门课。但是,就我个人的浅薄经验看来,这门课与大部分实际编程工作没有太大关系,因为现在比较流行的程序设计语言都是想方设法地屏蔽掉计算机的底层实现,让使用者感到自然、方便。所以我想专家们所说的“计算机领域”可能是指计算机科研领域以及一些计算机底层开发领域。

数据结构:个人感觉,这个对实际编程最有用。有计算机大牛说过“程序=数据结构+算法”,是个程序都离不了数据结构,而数据结构选择的合理性会直接影响你的开发效率和程序质量。另外,数据结构方面的知识是研究算法的最重要基础之一,故其重要性不言而喻。

算法:从“程序=数据结构+算法”可以看出算法也是计算机程序的重要组成部分。但这个公式所说的“算法”是非常广义的——任何一小段逻辑(哪怕只是一个条件分支)都可以被称为“算法”。这不同于我们算法课所传授的算法知识——算法课所授大都是动态规划等比较复杂的算法——因为简单的逻辑正常人都懂。就我三年本科学习的情况看来,除了算法课的作业,其他课的作业几乎不涉及到算法课所授的算法知识。这也是为什么很多在校学生对算法这门课的实用性表示怀疑的原因。而老师们面对学生的怀疑,往往回答:“等将来你们就会觉得算法是最有用的课了”。就我目前的经验看来,如果你想搞科研,算法课的内容很重要,因为你要经常利用一些复杂的算法或其思想去优化一些已有模型。但是如果你想搞应用,也就是IT行业中一般进行的软件开发,算法也该有所涉猎,但不必深究,需要用到时网上一搜都有现成的可以copy。当然,在你将来找工作之前一定要把算法的基础夯实了,因为找工作时的面试和机试几乎必考算法。

 

由上面的分析可以看出:

基础学科对编程能力的培养有一定的作用(其中又以数据结构最为重要),但是不起主导作用(起码在初期是这样的)。编程能力的培养主要是靠多写代码,这点是没有人会否认的。想想著名的北大青鸟IT培训,他们的一些学员原本所学专业跟计算机毫无关系(也就是没有计算机基础学科的知识储备),但是几个月培训下来一样能成为编程高手。他们在培训期间主要做什么呢?不是听课,而是做项目,一个接一个的软件项目,每天不停地敲代码。编程是技术活,技术活做的好的都是“无他,唯手熟耳”。

 

你说需要一些捷径,我在这里给你一些建议:

1.你可以在集中学完数据结构后就开始锻炼编程能力。

2.你有了C语言的基础就成功了一半了,如果C语言生疏了的话,建议先试着动手开发一个“智力问答闯关”之类的控制台小游戏。这样可以熟悉C语言,同时锻炼编程能力。不必为此先专门复习一遍C语言,要善用搜索引擎,不会的现查现学,这是现代程序员最重要的能力。

3.目前最主流的程序设计语言分为两类:面向过程的和面向对象的。C是面向过程程序设计语言的典型,我觉得你很有必要学一门面向对象的。而我推荐你学习Java,就是我当初给你们开发门禁系统PC端时用到的那个语言。有了C语言的基础,你学Java应该会觉得很简单(可能只是有些观念需要从面向过程转变成面向对象)。你可以先粗略过一下某本Java入门教程,大致了解这个语言能做什么、大概怎么做,不用了解太细。之后你可以试着用Java做一个简化版的QQ(能支持两个人通过网络聊天即可)。做到哪里不会了,就现查现学。等这个小项目做完,你也就学会Java了,同时编程能力也得到了锻炼。

4.学会了C语言和Java就相当于你掌握了大部分程序设计语言,今后需要用到什么新的语言,你可以在三四天内学会它。这时你可以试着做一个小型论坛网站——先了解需要用到什么语言和软件工具,然后边学边做。这是非常好的锻炼编程能力的方法。

 

我这里说的是比较普遍的情况,不太具有针对性,如果你能向学长学姐要到你们将要学习的课程清单,也许我可以帮你制定出更有针对性的方案。

发布了35 篇原创文章 · 获赞 2 · 访问量 7万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章