[讨论]如何学习程序设计

baihacker 2009-12-04 03:13:25
看到http://topic.csdn.net/u/20091126/20/7551a170-2015-4e75-8c6d-72fe70efc227.html
感觉不如讨论一下如何学习程序设计.

首先我还是比较推荐看看
http://hi.baidu.com/feixue/blog/item/0fd82f2eb092d0584fc226df.html
说得比较"虚",但是也是比较实在的话.可能对具体学习不会有直接帮助,但是具有一定的导向作用.

其次,每个人有不同的适合自己的路,不必又犯老毛病,去敌视别人的路.
关于别人的路,前不久有一篇贴子:
三个月的学习历程

再次,不赞同老的模板化的路:"小学,中学的时候,老师把东西讲得烂了,然后给例题,做题,布置作业,完成作业,有时还要背书..."
我父母以前经常问我,万一你记忆力不行了怎么办啊,怎么读书啊.我就解释,读书不是背东西啊.
对于这个问题也一样,学编程不是像完成任务似地把这个流程走完.(不是反对通过做练习来巩固知识,不是反对必要的记忆,而是不赞同机械的流程式的学习).
和这路相关的问题有:
1.喜欢去找答案,知道了解答,就像完成了任务,也像一种自我暗示:我懂了.(不是反对找答案,而是带着这种心理的找答案)
2.盲目信书.书上有错误是灰常正常的事.但是这个模板化的路,在一定程度上扼杀了去怀疑去思考的能力.
3.进一步达到的状态就是,快期末了,把代码抄到电脑上.每个单词,字,都认识,但是连成这一串就不知道干什么了.一编译,一大堆错误,然后就急了,哭了...上论坛求助了...最后考试结束,把书一扔,大叫:"解放了,终于不用碰这东西了",几年后,为了找工作,迫不得已,又得和程序打交道...常上CSDN,从菜鸟混到高手...

然后,一些小建议:

1.是什么?
今天学到的是什么东西,能不能简单概括一下.
比如类:把一些数据及其相关的操作封装在一起,并加上访问权限,形成一个整体.


2.为什么?
为什么语言要提供这种东西?为什么要有权限?
用类可以更确切地去模拟现实世界中的事物.加上权限,可以避免不必要的破坏,或者是可能正确的访问,但是不在控制中.


3.怎么办?
如何使用类?
首先给出声明及其定义.
class 类名
{
public:...;
protected:...;
private:...;
};
对函数的定义的方式.
然后在需要用到这个类所模拟的事物的时候就:
通过 类名 类对象名; 来定义一个类对象.
通过 类对象名.数据成员名 可以获取或者修改这个数据成员.
通过 类对象名.成员函数名(参数列表) 可以实现某个操作.
有什么要注意的吗?
}后面不要忘了;
当成员不是public的时候不可以在外部以类对象名.数据成员名 或者 类对象名.成员函数名(参数列表)的使用.
(在刚开始的时候,可能更注重在怎么办上,有哪些需要注意的上,但是只要知道基本的就行,不必太抠)

如何将类应用到问题中?
比如要用两个坐标描述一个点,坐标是浮点数还是整数?
浮点数的话,用float还是double?
如果是整数的话,坐标可能的范围是多少,并提醒自己可能在计算过程中溢出.
是应该把这两个暴露在外面:public还是藏在里面:protected,private?
在自己的问题中,应该提供哪些操作?
求两点间的距离?边界检测(应用于描述一个矩形内的整点)?

在学了基本类型,数组,控制语句,输入输出,之后.
其实就能解决很多问题了.
这个模式的解决问题无非就是,输入数据,用一些变量表示数据,在这些数据上进行操作,输出结果.
比如,输入一个非负整数,输出其阶乘值.
首先需要一个变量来保存这个输出,还需要一个变量保存结果.
要注意,保存结果的变量应该初始化为1.
然后分别把1到n乘到这个结果上.
最后输出结果.
在这里,分别把1到n乘到这个结果,就要用循环语句.
对于新手,应该考虑,应该有哪些变量,其作用是什么.经过什么样的操作达到目标?然后实现.

以上三点都是说要思考,当然需要思考的不仅仅局限于此.

4.大局观
对语言要有整体把握.(其实,看看书的目录是好习惯)

5.语言细节与设计技术
对于C++,再次引用《C++语言的设计与演化》的部分摘录:

首先强调一些概念,随后再强调概念之间的关系和主要的语言特征。把各个单独语言特征的细节先放下,直到人们需要知道它们的时候再去学习。在这种方式不行的那些地方就修改语言本身去支持它。这种相互作用使语言逐渐成长为一种适宜用于设计的好工具。
请注意,学习C++,最根本的是学习编程和设计技术而不是语言的细节.
在学习C++时,最根本的应该是牢记关键性的设计概念,使自己不在语言的技术细节中迷失了方向.如果能做到这一点,学习和使用C++就会是非常有趣的和收效显著的.

6.其它
不必惧怕编译错误,大胆地去读.如果太多的话,只读第一个错误,一些IDE可以在这个错误报告上双击,就可以跳到出错的行,观察这一行及其附近以及这行涉及的东西.慢慢修改,直到最后没错误的时候,这个过程就像慢慢把美女的衣服脱光,最后全部脱光的时候,赤裸裸在你面前...(我邪恶了)

如果有想法的话,可以设计一些程序去验证自己的想法.
比如int arr[100];
arr = 0;
其实通过这样想全部赋值为0完全正常,但是要完全回答为什么却并不容易,可以先记住这样不行.
在我完全不懂程序的时候
FOR I = 1 TO 100 STEP 2
PRINT I
NEXT I
通过改上面的程序大概知道了这几行的意思.(小学的时候,小霸王学习机,当时学习机的参考资料还比较厚,我什么都看不懂,但是能改,改改数字,把加法改成减法总行吧)
现在学程序,有资料可查,但资料上的例子是有限的,于是可以根据自己的理解,改改...

...

紧接着,还是推荐那本老书吧:
推荐一本初学C++的书

PS:如果只是为了混过60分,可以忽略我上面说的所有话.

大家各抒己见吧...
...全文
883 61 打赏 收藏 转发到动态 举报
写回复
用AI写文章
61 条回复
切换为时间正序
请发表友善的回复…
发表回复
jamseyang 2010-05-26
  • 打赏
  • 举报
回复
收藏。。。
davelv 2010-01-06
  • 打赏
  • 举报
回复
[Quote=引用 43 楼 jackyjkchen 的回复:]
只要大学不网游,不沉迷魔兽、CS,就凭这份毅力,日后也是栋梁之才
[/Quote]
赞同
baihacker 2009-12-07
  • 打赏
  • 举报
回复
...木有人关心此类问题,就结贴了吧,除了22楼,按楼平分的分...

看来还是自己研究自己的问题,偶尔刷点分得了.
xixisongsong 2009-12-05
  • 打赏
  • 举报
回复
嗯,很有深意!
hslinux 2009-12-05
  • 打赏
  • 举报
回复
多动手多动脑。
diablox0147 2009-12-05
  • 打赏
  • 举报
回复
我能得多少分呢。。。
飞天御剑流 2009-12-05
  • 打赏
  • 举报
回复
心静,自然凉.....
lizzoe 2009-12-04
  • 打赏
  • 举报
回复
路过,顶过
chin_chen 2009-12-04
  • 打赏
  • 举报
回复
精华帖?ding
plee1037 2009-12-04
  • 打赏
  • 举报
回复
必须顶!
雨过白鹭洲 2009-12-04
  • 打赏
  • 举报
回复
哥哥还是在校学生啊。。。

有这份心不错,不过技术这东西,范围太广
a452325305 2009-12-04
  • 打赏
  • 举报
回复
态度决定成败
打好基础 将来才能飞得更高
ryfdizuo 2009-12-04
  • 打赏
  • 举报
回复
日有所想,日有所进~~~
小小攻城师 2009-12-04
  • 打赏
  • 举报
回复
说实话我很迷茫 我真的不知道该如何的学下去
我天天抱着c++primer 还加一本accelerated c++
看了刘未鹏的 如何学习c++
可是依然找不到什么好的方法
看了楼主的帖子 依然是迷茫
可能是智商太低。理解力不行吧。
yangaihong 2009-12-04
  • 打赏
  • 举报
回复
多谢楼主,学习了。
myhder 2009-12-04
  • 打赏
  • 举报
回复
有深度
先顶再看
whg01 2009-12-04
  • 打赏
  • 举报
回复
其次,每个人有不同的适合自己的路...
正解。关键要找到适合自己的方法,才能事半功倍。
AvalonZST 2009-12-04
  • 打赏
  • 举报
回复
感谢楼主的提醒!!
wolflion 2009-12-04
  • 打赏
  • 举报
回复
这个蛮好的,尤其是总结方面的,唉

我只知道看,看完忘,要多练习和多想,呵呵
starcat 2009-12-04
  • 打赏
  • 举报
回复
先mark
留待慢慢看
加载更多回复(42)
  在有关算法的书中,有一些叙述非常严谨,但不够全面;另一些涉及了大量的题材,但又缺乏严谨性。本书将严谨性和全面性融为一体,深入讨论各类算法,并着力使这些算法的设计和分析能为各个层次的读者接受。全书各章自成体系,可以作为独立的学习单元;算法以英语和伪代码的形式描述,具备初步程序设计经验的人就能看懂;说明和解释力求浅显易懂,不失深度和数学严谨性。 《算法导论(原书第3版)》选材经典、内容丰富、结构合理、逻辑清晰,对本科生的数据结构课程和研究生的算法课程都是非常实用的教材,在it专业人员的职业生涯中,本书也是一本案头必备的参考书或工程实践手册。    第3版的主要变化:    新增了van emde boas树和多线程算法,并且将矩阵基础移至附录。    修订了递归式(现在称为“分治策略”)那一章的内容,更广泛地覆盖分治法。    移除两章很少讲授的内容:二项堆和排序网络。    修订了动态规划和贪心算法相关内容。    流网络相关材料现在基于边上的全部流。    由于关于矩阵基础和strassen算法的材料移到了其他章,矩阵运算这一章的内容所占篇幅更小。    修改了对knuth-morris-pratt字符串匹配算法的讨论。    新增100道练习和28道思考题,还更新并补充了参考文献。

64,637

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧