各位前辈好。从大一接触课本上的C++到现在,感觉并没有太大长进,水平停留在语法阶段,要提笔写应用就苦手。例如说,实现一个多项式计算的类,再应用到复杂公式的计算上;或是对稍复杂的二叉树算法进行改进;遇到这样的问题,脑子一片空白,完全没有形成本人的编程思想。
本人知道应该多实际编代码去练习,但是真的感到特别迷茫,不知道怎么有实质性的开始。
希望能有前辈指点一二,或带带本人,告诉本人接下来应该怎么做。
本人知道应该多实际编代码去练习,但是真的感到特别迷茫,不知道怎么有实质性的开始。
希望能有前辈指点一二,或带带本人,告诉本人接下来应该怎么做。
解决方案:10分
解决方案:10分
一边学理论,一边实践
理论就是书本了,一般的都行,实践就是去写算法。www.leetcode.com
理论就是书本了,一般的都行,实践就是去写算法。www.leetcode.com
解决方案:50分
1、多做练习,没有什么捷径的。
本人以前也是一看书本就会,一做练习就无从何下手。例如一个三层循环直接晕了。
楼上有人建议ACM,这个提议不错。先把c++语言基础打扎实,做满200题就有感觉了
2.尽量买国外的书籍,谭浩强之类的国内书籍挺害人的(虽然不可否认他把许多人带入编程路),
但是满篇的int a,b,c之类的,谭老是典型的书生,估计他也没做过什么项目的,害苦了一代C语言程序员。
c++ primer是经典书籍,但是不适合作为入门。即使primer的中文意思是刚开始学者。尤其新版本,作者想绕开C,基础直接不讲了。
本人更推荐一本书 c++ primer plus
《数据结构与算法分析(c++描述)》,Mark Allen Weiss写的。里面有句话很经典,大致意思是说:做过的事情,不做第二遍
《算法导论》 经典。
《stl源码剖析》侯捷 STL就是标准模板库,别人都把常用的数据结构和算法实现好了,熟悉后直接拿来用就可以了。
3.嵌入式用到数据结构机会不是很多。linux编程挺吃香的,目前Java也是比较火的,而且薪水比较丰厚。
学硬件的,可以上淘宝弄套开发版来玩玩。
5.假如不知道本人该怎么样学习,最简单的做法就是打开招聘网站。看招聘软件工程师的要求。
6.要么热爱它,要么离开它,共勉!
本人以前也是一看书本就会,一做练习就无从何下手。例如一个三层循环直接晕了。
楼上有人建议ACM,这个提议不错。先把c++语言基础打扎实,做满200题就有感觉了
2.尽量买国外的书籍,谭浩强之类的国内书籍挺害人的(虽然不可否认他把许多人带入编程路),
但是满篇的int a,b,c之类的,谭老是典型的书生,估计他也没做过什么项目的,害苦了一代C语言程序员。
c++ primer是经典书籍,但是不适合作为入门。即使primer的中文意思是刚开始学者。尤其新版本,作者想绕开C,基础直接不讲了。
本人更推荐一本书 c++ primer plus
《数据结构与算法分析(c++描述)》,Mark Allen Weiss写的。里面有句话很经典,大致意思是说:做过的事情,不做第二遍
《算法导论》 经典。
《stl源码剖析》侯捷 STL就是标准模板库,别人都把常用的数据结构和算法实现好了,熟悉后直接拿来用就可以了。
3.嵌入式用到数据结构机会不是很多。linux编程挺吃香的,目前Java也是比较火的,而且薪水比较丰厚。
学硬件的,可以上淘宝弄套开发版来玩玩。
5.假如不知道本人该怎么样学习,最简单的做法就是打开招聘网站。看招聘软件工程师的要求。
6.要么热爱它,要么离开它,共勉!
解决方案:10分
《数据结构(C语言描述)》
《算法精解(C语言描述)》
《算法精解(C语言描述)》
解决方案:20分
记不得哪位C++大神在哪本学习C++的书的前言里面说过
“用C语言1000行源码能完成的工作千万不要用C++重写!”
做个可能不太恰当的比喻:
人想让狗帮忙逮只兔子,可是人说话狗听不懂,于是人发明了一种介乎人言和狗语之间的语言,即口令。
人想让电脑帮忙做计算,可是人话电脑听不懂,于是人发明了一种介乎人言和汇编机器码之间的语言,即C语言。
人对狗的口令得让人容易学、也得让狗容易懂。
C语言同样得让人容易学、也得让电脑容易懂。
相比之下C++、Java就是人学得费劲、电脑也经常闹不懂。
请牢记:源代码本身的书写能否结构化或面向对象或符合设计模式或敏捷…并不重要,重要的是你能否使用结构化或面向对象或符合设计模式或敏捷…的方法命名标识符、阅读、修改、检查、测试源代码。
意思是你程序结构看上去再合理,再简洁,也不一定比看上去一团乱麻的程序结构在运行或修改时更不易出错,更方便修改,出错了更容易找到哪里出错和具体出错的原因,更容易改正错误。
试对比
图书馆(对图书的分类够结构化了吧)
和
搜索引擎(可看作是扁平化任何结构数据,仅支持全文检索)
哪个处理信息更方便、更高效。
所以
与其费劲去重构代码让其看上去更简洁、更合理
不如费劲学习grep、sed、awk、……这类全文搜索和批处理编辑的工具。
结构越复杂,越难修改,越难除错。
有时(甚至大多数时候),看上去越合理、越简洁的代码,运行起来性能越差,出错时查找原因越难,找到出错原因后改正越费劲。
程序员要做的不是尽力避免错误,而是聚焦在快速发现并改正错误。真正以快速方式轻易解决错误,“快速的失败”远胜过“预防错误”。Fred George
“用C语言1000行源码能完成的工作千万不要用C++重写!”
做个可能不太恰当的比喻:
人想让狗帮忙逮只兔子,可是人说话狗听不懂,于是人发明了一种介乎人言和狗语之间的语言,即口令。
人想让电脑帮忙做计算,可是人话电脑听不懂,于是人发明了一种介乎人言和汇编机器码之间的语言,即C语言。
人对狗的口令得让人容易学、也得让狗容易懂。
C语言同样得让人容易学、也得让电脑容易懂。
相比之下C++、Java就是人学得费劲、电脑也经常闹不懂。
请牢记:源代码本身的书写能否结构化或面向对象或符合设计模式或敏捷…并不重要,重要的是你能否使用结构化或面向对象或符合设计模式或敏捷…的方法命名标识符、阅读、修改、检查、测试源代码。
意思是你程序结构看上去再合理,再简洁,也不一定比看上去一团乱麻的程序结构在运行或修改时更不易出错,更方便修改,出错了更容易找到哪里出错和具体出错的原因,更容易改正错误。
试对比
图书馆(对图书的分类够结构化了吧)
和
搜索引擎(可看作是扁平化任何结构数据,仅支持全文检索)
哪个处理信息更方便、更高效。
所以
与其费劲去重构代码让其看上去更简洁、更合理
不如费劲学习grep、sed、awk、……这类全文搜索和批处理编辑的工具。
结构越复杂,越难修改,越难除错。
有时(甚至大多数时候),看上去越合理、越简洁的代码,运行起来性能越差,出错时查找原因越难,找到出错原因后改正越费劲。
程序员要做的不是尽力避免错误,而是聚焦在快速发现并改正错误。真正以快速方式轻易解决错误,“快速的失败”远胜过“预防错误”。Fred George