学习C++一年半,现在突然有些困惑,求解答!该如何解决
学习C++一年半,现在突然有些困惑,求解答!!!
从上大学至今一年半,个人对C++一直都有比较浓厚的兴趣,因此相对于同学,我学得还不错。一直以来我的学习方法就是:编程,编程,编程。不看代码,也不看书,只听老师讲课,崇尚原创,各种算法都是根据老师所讲的原理自己些出来的。这种学习方法令我走在了一部分人的前面。
但是在前一次的课程设计中,我发现我好像到了一个瓶颈了。我受手机网页游戏(就是全文字的那种)的启发,决定用控制台实现——好吧,我承认我有点幼稚和多此一举了,但是我们还只学到了控制台——于是把想法跟老师说了,他同意后,我就立即开始了。
首先实现的是地图的链接和切换,然后是角色,敌人,道具,背包……本来还有装备啊,任务啊什么的,最终掐掉了。然后我就发现:我每添加一种元素,都会导致程序复杂度的级数增长,最后忍不住还重写了一次。
然后我就体会到了(我是这么想的)传说中的软件工程思想的意义了。一个结构比较复杂的程序似乎是不能直接在编译器中完成的,还要有纸笔和Word。
我现在的困惑又如下几点:
1、我是应该保持原有的学习方法(直接动手),还是要开始培养写分析过程的习惯?
2、如果要依工程思想来学习,具体步骤是?
3、像我这样学习的人,欠缺的是?急需补充和培养的是?
4、如果我现在计划要写的程序中还有我不会的东西,我应该在动手之前先查资料弄懂,还是先进行设计或实现的工作?
这几天闲在家里没事干,想写点什么又无法下手,希望各位能够解答我的疑惑……
------解决方案--------------------
不看代码,也不看书,只听老师讲课,崇尚原创,各种算法都是根据老师所讲的原理自己些出来的。这种学习方法令我走在了一部分人的前面。
这让我很惊讶!
看完之后给我的第一感觉是,你解决问题的能力不错。但这个编程并不仅仅是解决一个小问题,你的思维还不够开阔,不看书如何学到东西?老师讲的一点东西怎么够用?
这几天闲在家里没事干,想写点什么又无法下手,希望各位能够解答我的疑惑……
这很正常,你的思维局限了,你只限于在具体的问题下解决问题,而不能创造问题,描述问题并解决问题。
软件工程的思想何其重要,对于每一个不愿意当码农的人来说都必须有这种思想。
我很惊讶你不看书都能走在别人的前列,这只能说明你很努力,但方法确实不好,思考力的确很重要,但是看别人优秀的东西,拿过来达到融会贯通岂不是更要思考力。
------解决方案--------------------
首先,必须熟悉编程语言
1. 书是必须要看的,但要看经典的书籍,比如C++ Primer之类的,垃圾书就不用看了,看了反而误入歧途。看经典书,你就是在学习那些大师是怎么思考问题和解决问题的。
2. 动手练习是必不可少的。事实上看书的同时也必须动手。
其次,必须熟悉常用的算法和数据结构
熟悉了一门编程语言,对熟悉常用的算法和数据结构是非常有帮助的,因为在学习算法和数据结构的时候,可以自己尝试用编程语言来实现
最后,作为一个软件设计师,你就必须熟悉设计模式,注意这里所言之设计模式,并非GoF他们所说的23种设计模式。不过熟悉那23中设计模式,对你设计软件是非常有帮助的。在这方面,经验也是非常重要的,经验是怎么得来的?是靠时间换来的。比如你上面说“我每添加一种元素,都会导致程序复杂度的级数增长,最后忍不住还重写了一次”这个过程就是在基类经验,事实上,用Decorator设计模式(当然还可以混用其它的设计模式)一般来说就可以比较好地解决类似这样的问题,关于这一点可以参考拙作:C++实现Structural - Decorator模式
“最后忍不住还重写了一次”这是一个很有意思的问题,在业界有专门的术语"第二系统综合症",有兴趣可以到网上搜搜。绝大部分情况下,我们通常所碰到的问题,前人都碰到过,所以借鉴前人+牛人的做法是相当之必要的,只有这样我们才能踩着他们的肩膀,去攀登更高的顶点。
------解决方案--------------------
------解决方案--------------------
如果时间可以的话,小项目可以按下述过程进行:
1.需求分析----要做什么,包含哪些功能性的东西
2.概要设计----相对独立的功能是怎样做出来的,数据的表示和数据的操作是哪些
3.代码实现----写出功能模块代码并调试出来
4.实时测试----写出的代码要立即测试,发现潜在的错误
5.集成调试----将全部功能模块组合在一起调试运行,得到完整的程序
6.综合评价----将上述过程中发生的问题认真总结一下
------解决方案--------------------
1、要熟悉语言本身
2、要了解软件工程的基本流程。最起码的需求分析、概要设计这个两个想来在之前没有做过
3、经验。不管你在做什么,做下去。不管成功失败,都是经验
4、设计模式。你发现增加内容程序复杂度会上升,这个很好。等你学了设计模式,就知道如何解决了。但是在这之前,你需要多个项目的经验,就是说只要做过几个有很多类的比较复杂的程序。
在之后,就是继续积累经验,总结和提高了
从上大学至今一年半,个人对C++一直都有比较浓厚的兴趣,因此相对于同学,我学得还不错。一直以来我的学习方法就是:编程,编程,编程。不看代码,也不看书,只听老师讲课,崇尚原创,各种算法都是根据老师所讲的原理自己些出来的。这种学习方法令我走在了一部分人的前面。
但是在前一次的课程设计中,我发现我好像到了一个瓶颈了。我受手机网页游戏(就是全文字的那种)的启发,决定用控制台实现——好吧,我承认我有点幼稚和多此一举了,但是我们还只学到了控制台——于是把想法跟老师说了,他同意后,我就立即开始了。
首先实现的是地图的链接和切换,然后是角色,敌人,道具,背包……本来还有装备啊,任务啊什么的,最终掐掉了。然后我就发现:我每添加一种元素,都会导致程序复杂度的级数增长,最后忍不住还重写了一次。
然后我就体会到了(我是这么想的)传说中的软件工程思想的意义了。一个结构比较复杂的程序似乎是不能直接在编译器中完成的,还要有纸笔和Word。
我现在的困惑又如下几点:
1、我是应该保持原有的学习方法(直接动手),还是要开始培养写分析过程的习惯?
2、如果要依工程思想来学习,具体步骤是?
3、像我这样学习的人,欠缺的是?急需补充和培养的是?
4、如果我现在计划要写的程序中还有我不会的东西,我应该在动手之前先查资料弄懂,还是先进行设计或实现的工作?
这几天闲在家里没事干,想写点什么又无法下手,希望各位能够解答我的疑惑……
------解决方案--------------------
不看代码,也不看书,只听老师讲课,崇尚原创,各种算法都是根据老师所讲的原理自己些出来的。这种学习方法令我走在了一部分人的前面。
这让我很惊讶!
看完之后给我的第一感觉是,你解决问题的能力不错。但这个编程并不仅仅是解决一个小问题,你的思维还不够开阔,不看书如何学到东西?老师讲的一点东西怎么够用?
这几天闲在家里没事干,想写点什么又无法下手,希望各位能够解答我的疑惑……
这很正常,你的思维局限了,你只限于在具体的问题下解决问题,而不能创造问题,描述问题并解决问题。
软件工程的思想何其重要,对于每一个不愿意当码农的人来说都必须有这种思想。
我很惊讶你不看书都能走在别人的前列,这只能说明你很努力,但方法确实不好,思考力的确很重要,但是看别人优秀的东西,拿过来达到融会贯通岂不是更要思考力。
------解决方案--------------------
首先,必须熟悉编程语言
1. 书是必须要看的,但要看经典的书籍,比如C++ Primer之类的,垃圾书就不用看了,看了反而误入歧途。看经典书,你就是在学习那些大师是怎么思考问题和解决问题的。
2. 动手练习是必不可少的。事实上看书的同时也必须动手。
其次,必须熟悉常用的算法和数据结构
熟悉了一门编程语言,对熟悉常用的算法和数据结构是非常有帮助的,因为在学习算法和数据结构的时候,可以自己尝试用编程语言来实现
最后,作为一个软件设计师,你就必须熟悉设计模式,注意这里所言之设计模式,并非GoF他们所说的23种设计模式。不过熟悉那23中设计模式,对你设计软件是非常有帮助的。在这方面,经验也是非常重要的,经验是怎么得来的?是靠时间换来的。比如你上面说“我每添加一种元素,都会导致程序复杂度的级数增长,最后忍不住还重写了一次”这个过程就是在基类经验,事实上,用Decorator设计模式(当然还可以混用其它的设计模式)一般来说就可以比较好地解决类似这样的问题,关于这一点可以参考拙作:C++实现Structural - Decorator模式
“最后忍不住还重写了一次”这是一个很有意思的问题,在业界有专门的术语"第二系统综合症",有兴趣可以到网上搜搜。绝大部分情况下,我们通常所碰到的问题,前人都碰到过,所以借鉴前人+牛人的做法是相当之必要的,只有这样我们才能踩着他们的肩膀,去攀登更高的顶点。
------解决方案--------------------
------解决方案--------------------
如果时间可以的话,小项目可以按下述过程进行:
1.需求分析----要做什么,包含哪些功能性的东西
2.概要设计----相对独立的功能是怎样做出来的,数据的表示和数据的操作是哪些
3.代码实现----写出功能模块代码并调试出来
4.实时测试----写出的代码要立即测试,发现潜在的错误
5.集成调试----将全部功能模块组合在一起调试运行,得到完整的程序
6.综合评价----将上述过程中发生的问题认真总结一下
------解决方案--------------------
1、要熟悉语言本身
2、要了解软件工程的基本流程。最起码的需求分析、概要设计这个两个想来在之前没有做过
3、经验。不管你在做什么,做下去。不管成功失败,都是经验
4、设计模式。你发现增加内容程序复杂度会上升,这个很好。等你学了设计模式,就知道如何解决了。但是在这之前,你需要多个项目的经验,就是说只要做过几个有很多类的比较复杂的程序。
在之后,就是继续积累经验,总结和提高了