自学C++以后走编程道路上的障碍和困难三字有多困难


· 繁杂信息太多你要学会辨别

夲回答由南京网博计算机软件系统提供

自学编程需要:需85e5aeb565要有信心和决心、兴趣和坚持、方法和习惯

我接触的第一门编程语言是 C 语言C 語言是一门古老的语言,是一门跟底层打交道的语言也是大学很多科班出身必学的一门课程,应该很多人都会 C之后我用 C++ java go python js 都写过代码,泹是至今我最喜欢的还是 C不因为别的,就因为它是我学习的第一门编程语言先入为主,对我的影响很大开启了我的编程先河。

现在國内的程序员会使用 C/C++ 的人到是不少,但是真正掌握的 C/C++ 的高手就太少了有时间有兴趣的话,Linux C/C++ 我还是很推荐去学学对于系统底层,逻辑思维的提升都很有帮助

学习任何一件事情,如果没有兴趣强迫自己去学,学起来会极其的痛苦也不会学的太好,也很难坚持长远的赱下去如果遇到困难,没有解决会极其的有挫败感,很容易让你产生放弃的感觉所以新入门学习编程的,先学语法在实践,慢慢嘚要找到学习编程的兴趣

所以学习编程,不是因为你有多喜欢编程有兴趣才去学的,而是因为当你学过一段时间用技术解决问题,莋出了一些东西而引发你极大的兴趣,从而更深入的去学习去研究,这种兴奋这种兴趣,经历过的人都懂

刚开始学习编程的时候,选定一门语言先学习这门语言的基础语法,找找编程的感觉与手感还是比较重要的培养自己的学习方法 + 合理的规划时间很重要,新掱建议多看视频 + 多动手敲,一定要有自己学习编程的三步走战略我的战略就是:视频 + 书 + 项目。

如何自学编程要这样2113做:

1、认真地观看5261伱的学习资料:一4102个常见的错误1653没有彻底阅读解释材料直接去编写代码示例,而不阅读有关代码是如何工作的解释这是一个失敗的方法。你购买一本计算机图书的理由应该是是为了获得示例代码以及代码的解释

计算机书籍通常包含额外的信息,这些信息可能需偠在你阅读的过程中重点关注或者标记比如参考资料,你需要花大量的时间来研究你可以使用参考资料来发现代码的其他实现方式,戓者使用其他类型的输入来测试你在示例中所做的工作

3、下载代码:学习资料通常都有可下载的源代码。下载这个源代码把它加载到編译器中,然后构建它看看它做了什么,这一点很重要这些工作示例对于理解编码技术至关重要。这个源代码可以确保你看到一个没囿问题的工作示例比如输入错误或其他问题。

4、在调试器中单步运行:通过单步执行这些示例程序可以帮助你详细了解它们。当你逐步执行时检查变量的值,验证它们是如何变化的并确定它们为什么会以特定的方式发生变化。使用调试器特性来改变变量值这样你僦可以看到这些变化是如何影响应用程序的。

5、实践才是检验真理的方式

在学习编程的时候一边看视频一边看书,然后一定要动手实操只有你b893e5b19e33自己打代码才能够提升自己。不然只是看书看视频一定很难有所增进如果你不这样做,你会发现自己面对编辑器会无从下手

知识等待使用的时间越长,知识这把斧头就越钝等待学习新知识的时间越久,你就越难以将其融入到代码中毕竟其实你编程的能力其實就很大程度上看你能写出什么代码。

学习编程的一个很好的方法就是和其他的程序员交谈不必谈论任何特定的内容。可以是你正在学習的东西也可以是你认为很酷的东西,更可以是你正在工作的东西皆可。

互相学习互相讨论能够加深你对编程的兴趣,你们也能够互相解决问题一个好的老师对你的帮助更是很大。一个恰到好处的指点能让你迅速得到成长

不要想着学习完就可以赚1w+这样很容易放弃編程,编程语言是一个很大的知识库需要你不断的学习。最好是奔着一个小项目而学习编程当你把作品做出来了,有了成就感同时基本上具备找工作的能力,就找个初级的开发岗位再进阶,你的自学之路功与名都有了

刚开始学习的时候你可以找一个自己很感兴趣嘚项目之类的,一点一点去实现那么你的成就感必然很大,而且提升也快

下载百度知道APP,抢鲜体验

使用百度知道APP立即抢鲜体验。你嘚手机镜头里或许有别人想知道的答案

不过我知道大家肯定是不想看英攵的了所以我给大家找了。所有试图自学编程的人都应该发自内心的同意它的说法(除去少数过时的具体技术部分)



随意步入一家书店,满目都是《7天搞定Java编程》这种速成书目同样的书籍还包括Visual Basic、Window系统、Internet互联网等等,它们都承诺在几天甚至几小时之内就让你能够学會相关技术。我在亚马逊网站上做了如下的条件检索:

出版日期:1992年以后题目关键字:“天”,“学会”或者“自学”

然后得到了248条搜索结果头78条都是计算机类书籍(第79条记录是《30天学会孟加拉语》)。我将“天”关键字换成了“小时”不出意外地搜索到了253条记录,其中头77条记录是计算机书籍第78条的搜索记录是《24小时语法和样式自学手册》。在总共搜索到的头200条记录中有96%是计算机书籍。

从上面的搜索结果可以看出来要么就是人们对计算机技术的学习如饥似渴,要么就是计算机技术实在太简单不费吹灰之力就能学会。相比于计算机技术书籍的如此“速成”在其他领域的书籍里,你却很难找到诸如:“三天学会贝多芬”或者“五天搞定量子力学”,这种速成敎材甚至连《狗狗喂养手册》这种宠物指南,都鲜有“几天搞定”的说法Felleisen et al.在他们的著作《如何设计程序》一书中明确指出了这种“速荿”的趋势,并评论到:“垃圾的编程技术当然非常容易傻子都能在21天之内学会,哪怕他天生就是个白痴”

让我们来仔细看看《》这種速成教材实际上意味着什么:

●学会:在3天时间里你几乎没有时间去写任何有意义的程序,就更不要谈什么从编程中获得经验和教训这種事情了你也不可能有时间和有经验的程序员一起工作和交流,也不会体验到在真正的C++环境下工作是什么感觉长话短说吧,你就是没時间也学不到什么。所以这种书籍最多也就让你有个粗浅的印象但是绝对不可能有深入的理解。就像亚历山大教皇说的那样“浅尝輒止是很危险的”。

如果你有其他编程语言的基础那3天之内你也许可以学到C++的一些语法,但即使是这样你还是无法了解如何使用该語言编程。简言之如果你之前是一个Basic程序员,那么经过3天的学习你会成为一个“能使用C++语法编写Basic风格程序的程序员”,不过这样是没法发挥出C++语言本身的优势的(说句不好听的你连怎么犯C++的典型错误都不会)。仅仅知道一点语法意味着什么呢Allan Perlis曾经说过:“一个无法妀变你思维方式的编程语言是不值得学习的。”;另一种可能性是你可以只学一点点C++知识(类似的,或者一点点JavaScript,或者一点点Flex Script)然后就可以利用现有的工具制作应用接口,完成特定的编程任务了但是这样的行为并不意味着你“会”编程了,你只是会使用这个工具完成任务而巳

●3天:很不幸,3天是远远不够的往下看你就知道了。

的一系列调查研究显示在各个领域内,要想获得专业级别的水平大约需要10姩时间的努力。参与此项调查的领域包括:国际象棋作曲,发报绘画,钢琴演奏游泳,网球等科学家们从神经心理学和拓扑学的角度对这些领域进行研究,并得出结论若要在某一领域内达到专家级的水平,其关键在于“审慎地重复”也就是说,并非是机械地┅遍又一遍地练习,而是要不断地挑战自我试图超越自身当前的水平,通过不断的尝试挑战并在尝试的过程中和尝试之后对自身的表現进行分析和总结,吸取经验纠正之前犯过的各种错误。把这一“审慎”的过程不断重复才能取得成功。

所谓的“捷径”是不存在的即使对于莫扎特这种天才来说,也没有捷径可走尽管4岁就开始作曲,可是他也花了13年的时间才真正地写出了世界级的作品。再举一個例子甲壳虫乐队(The Beatles),他们似乎在1964年凭借一系列热门单曲和其在艾德沙利文秀(The Ed Sullivan show)上的演出一炮而红,但是你也许不知道他们早在1957年僦在利物浦和汉堡两地进行小规模演出了,而在此之前的非正式演出更是不计其数甲壳虫乐队的主要成名曲《Sgt. Peppers》,则是1967年才发行的公咘了他对柏林音乐学院所作的一项研究的报告,该研究对比了一个班里的学习成绩为上、中下三个档次的学生并逐一询问他们进行音乐練习的时间

这三个档次中的所有人,大约都是在5岁的时候开始练习音乐的一开始的时候大家练习音乐的时间都差不多,大约一周2到3小时但是到了八岁左右,大家的区别就开始体现了后来成为班里最好的那一部分学生开始比别的学生练习得更多,大概每周6到9小时12岁的時候每周8小时,14岁的时候每周16小时往后则越来越多,直到20岁左右他们每周练习音乐的时间已经超过30小时了。在20岁的年纪那些精英级別的演奏家们都有累计超过10000小时的音乐练习时间。相比之下仅有部分优等生能达到8000小时的累计练习时间,而那些音乐教师级别的学生怹们的累计练习时间只有4000小时左右。

所以也许这个让你能达到专业等级的神奇时间应该是10000小时,而不是10年(Henri Cartier-Bresson ()说过,“(作为摄影师)你所拍摄的头10000张照片都是垃圾”,但即使是垃圾作品他拍一张照片也要花接近一小时。)Samuel Johnson ()认为这个时间应该更长:“在任何一个领域偠想做到极好,势必穷尽一生的精力否则根本无法企及。” Chaucer 这段话翻译成英语就是:“生命很短暂但是技艺却很高深,机遇转瞬即逝探索难以捉摸,抉择困难重重”这段话是用拉丁文写的。在拉丁文里ars可以翻译为“技艺”或者“艺术”,但是在古希腊文里ars只能做“技能”的意思,而没有“艺术”的意思

下面是我列举的程序员成功“食谱”

●沉醉于编程,编程是为了兴趣保持这种充满兴趣的感覺,以便于你能将其投入到你的10年/10000小时的编程时间中

●程序. 最好的学习方式是“”。更技术一些地说:“一个人在某个专业领域方面能夠达到最高水平并不是因为这个人经验增长了以后而自动获得的,而是这个人为了进步所做出了专门的努力之后产生的结果”“最有效的学习包括如下几个要素:明确并且难度适当的任务,适应学习者个人情况及时的信息反馈,有重新开始和改正错误的机会)(p. 20-21) 《》这夲书提供了上述有趣的观点

同其他程序员交流多阅读其他人写的程序。这些远比你看书或者上培训班重要

如果你愿意的话就选择詓读一个计算机科学专业吧(当然你还可以去念这个专业的研究生)。如果你能做到这点那么你就有机会找到一些需要计算机学位认证嘚工作,也会让你对这个行业有更深的理解不过,如果你不是上学的料那么你可以(当然需要有足够的毅力)靠自己学习,或者通过笁作来积累经验无论你采用哪种途径,光依靠书本是远远不够的“如果说仅仅靠学习油画和调色技术无法创造出顶尖的画家的话,那麼光学习计算机科学课程更不能造就顶尖的程序员”,Eric Raymond这样说过他著有《新黑客字典》一书。我所聘用过的最好的程序员仅仅只有高Φ文凭; 他写了很多伟大的软件他有他自己的新闻组,并且通过股权赚够了钱还开了家属于自己的夜店。(作者说的这个人是Jamie Zawinski他是网景浏览器(Netscape)的早期开发这者之一,也是开源项目Mozilla和的主要贡献者他开了一家叫做DNA_lounge的夜店,位于旧金山的SoMa区——译者注)

与其他程序員一起做项目在某些项目中要尽量做到最好,在某些项目中却别做那么好当你是最好的时候,你的领导能力就会得到锻炼并激发你高瞻远瞩的视野。当你做得不好的时候你就能知道你的领导怎么做事,以及他们不喜欢哪些事(因为领导总是把那些他们不爱做的杂事丟给他们认为不得力的人去做)

尝试跟随其他程序员一起做项目尝试去理解其他人所写的代码。看看如果你无法找到代码的作者本人嘚情况下理解和修正他写的代码需要花费什么样的代价。同时也思考如何规划你自己的程序代码,让它们更容易被其他人理解和维护

至少学习半打编程语言。包括一种支持类抽象的语言(例如Java或者C++)一种支持函数抽象的语言(例如Lisp或者ML),一种支持语法抽象的语言(例如Lisp),一种支持声明式编程的语言(例如Prolog或者C++模板),一种支持协同程序的语言(例如Icon或者Scheme),一种支持平行并发编程的语言(例如Sial)

牢记“计算机科学”中包含着“计算机”这个词了解计算机需要花多长的时间执行一条指令,花多长时间从内存中获取一个字(word)(包括缓存命中和不命中两种情况)如果连续从磁盘中获取数据,时间消耗如何以及需要花多少时间才能再磁盘上定位一个新的位置?

尽量參与语言的标准化过程往大了说,你可以试着加入ANSI C++委员会这样的专业组织往小了讲,你也可以从自己的代码规范入手限定代码缩进昰需要2个空格宽还是4个空格宽。无论采用哪种方式你都需要了解其他人对于语言的喜好,以及他们的喜好的程度甚至你要知道他们为什么产生这样的喜好的原因。

有良好的意识能尽快适应语言标准化的成果。

要掌握上面所说的所有内容光靠看书学习应该是很难做箌的。当我的第一个孩子出生的时候我几乎阅读了市面上所有的《如何…》指南书籍,但是我读完了以后还是觉得自己是个菜鸟30个月鉯后,我的第二个孩子快出生时我难道还要做一个书虫么?不!相反我此时更依赖我的个人经验,这些经验相比于那些上千页的书籍则更加有效和让我放心。

Fred Brooks所著的著名的论文《| 没有银弹》里向我们揭示了发现和培养软件设计人才的三步骤:

1.有组织地辨认顶尖的软件設计人才越早越好

2.安排一个职业导师,为其职业前景指点迷津并谨慎对待自己的职业履历

3.为成长中的设计师们提供机会,让他们能够互相激发促进

即使一部分人已经具备了成为优秀软件设计人员的潜质,也需要经历工作的慢慢琢磨方可展现才华。则说得更加直接:“任何人都可以被‘教’成一个雕塑匠但米开朗基罗则被‘教’如何不要成为一个雕塑匠,因为他要做的是雕塑大师。这个道理放到編程大师身上同样管用”Perlis认为,伟大的软件开发人员都有一种内在的特质这种特质往往比他们所接受的训练更重要。但是这些特质是從哪里来的呢是与生俱来的?还是通过后天勤奋而来正如Auguste Gusteau(动画电影《料理鼠王》里的幻象大厨)所说,“谁都能做饭但只有那些無所畏惧的人才能成为大厨!”我很情愿地说,将你生命中的大部分时间花在审慎地练习和提高上这很重要!但是“无所畏惧”的精神,才是将促使这些练习成果凝聚成形的途径或者,就像是《料理鼠王》里那个与Gusteau作对的刻薄的美食评论家Anton Ego说的那样:“不是任何人都能荿为伟大的艺术家不过,伟大的艺术家在成名前可能是任何人”

所以尽管去书店大买Java/Ruby/Javascript/PHP书籍吧;你也许会发现他们真的挺管用。但是这樣做不会改变你的人生也不会让你在整体经验上有什么提高。24小时几天,几周做一个真正的程序员?光靠读书可读不出来你尝试過连续24个月不懈努力提高自己么?呵呵如果你做到了,好吧那么你开始上路了……

典型PC系统各种操作指令的大概时间

从内存中顺序读取1MB数据

从新的磁盘位置获取数据(随机读取)

从磁盘中顺序读取1MB数据

从美国发送一个报文包到欧洲再返回

很多人曾经问过我,他们应该选擇什么编程语言作为入门之用我想这个问题很难有一个确切的答案,但是下面几点可以用来作为选择的参考

●随大流。当被问到“我應该使用什么系统呢Windows, Unix还是Mac?”,我的回答通常是:“看你的朋友们用什么你就用什么。”这么做的好处是有了你朋友的帮助,你就能有效哋回避操作系统固有的一些差异对于选择编程语言来说,也是同样道理同时,你还要有点儿战略眼光:如果选择了一种编程语言并荿为其编程社区的一员,那么你选择的语言和社区是正在不断壮大还是奄奄一息?如果你有编程方面的问题能不能从相关的书籍,网站以及在线论坛中得到解答你是不是跟论坛里的人合得来?这些都是要考虑的

●简单实用。诸如C++以及Java这样的编程语言都是非常专业的開发语言适用于有经验的大型团队进行开发,需要时常考虑代码的运行效率所以,这类的编程语言就适合于那样(复杂)的编程环境如果你是一个初学者,那么就不要搞那么复杂你所需要的是一种简单易学的编程语言,你靠你自己就可以搞定的语言

●交互。给你兩种选择去学钢琴:第一种常规做法,也是互动的做法也就是你每敲一下琴键就能听到琴音;第二种,批量模式等你把所有该按的琴键都按了一遍,然后再一次性放给你听你选择哪一个呢?显然交互式的方式对于钢琴学习来说更容易,对于编程学习也是如此那麼就坚持使用交互式模式学习编程吧。

基于上述的观点我所推荐的编程入门语言应该是Phyton或者Scheme.但是读者自身的环境是非常复杂多变的,所鉯你们也许会其他更好的选择如果你的年龄还不到两位数,那么你们应该考虑Alice语言或者Squeak语言(很多成年的初学者也认为他们很有趣)當然,做出选择并开始行动这个最重要。

这本书或许是计算机科学最好的入门书籍本书从计算机科学的角度入手,教你如何进行编程你可以在观看本书的在线视频教程,以及的在线文字版 学习本书是需要一些挑战的,相信该书会让一部分人望而却步的

Scheme:《 | 》是┅本好书,该书介绍了如何用优雅并且有效的方式进行程序设

Python: 官方网站上提供了一些在线教程 .

Oz: 被看做是Abelson & Sussman(经典计算机教程《》的作者——译者注)的当代传承者该书绘制了一幅关于计算机编程的宏观蓝图,它囊括了比Abelson & Sussman的经典教材更广泛的知识领域也更加通俗易懂。此书中使用了一种编程语言Oz, 这种语言在工业领域内几乎不被使用,其主要目的就是针对于教学

T. Capey指出Amazon网页上那个页面把《21天搞定孟加拉語》以及《21天学会语法》这两本书移到了“购买此书的用户还购买过这些产品”这个区域内。我估计大部分人就是从这个区域看到这本书嘚感谢Ross Cohen的帮助。

下面是前辈们的谆谆教诲我在

找到的,希望对你有帮助:

学习C++的50条忠告 也适合

1.把C++当成一门新的语言学习(和C没啥关系!真的);

2.看《Thinking In C++》不要看《C++变成死相》(C++编程思想,翻译的非常差);

4.不要被VC、BCB、BC、MC、TC等词汇所迷惑——他们都是集成开发环境而我们要学的是一门语言;

5.不要放过任何一个看上去很簡单的小编程问题——他们往往并不那么简单,或者可以引伸出很多知识点;

8.如果不是天才的话想学编程就不要想玩游戏——你以为你莋到了,其实你的C++水平并没有和你通关的能力一起变高——其实可以时刻记住:学C++是为了编游戏的;

10.浮躁的人容易说:XX语言不行了应该學YY;——是你自己不行了吧!?

11.浮躁的人容易问:我到底该学什么;——别问学就对了;

12.浮躁的人容易问:XX有钱途吗;——建议你去抢銀行;

13.浮躁的人容易说:我要中文版!我英文不行!——不行?学呀!

14.浮躁的人容易问:XX和YY哪个好;——告诉你吧都好——只要你学就荇;

15.浮躁的人分两种:a)只观望而不学的人;b)只学而不坚持的人;

16.把时髦的技术挂在嘴边,还不如把过时的技术记在心里;

17.C++不仅仅是支持面姠对象的程序设计语言;

18.学习编程最好的方法之一就是阅读源代码;

19.在任何时刻都不要认为自己手中的书已经足够了;

21.看得懂的书请仔細看;看不懂的书,请硬着头皮看;

22.别指望看第一遍书就能记住和掌握什么——请看第二遍、第三遍;

24.不要停留在集成开发环境的摇篮上要学会控制集成开发环境,还要学会用命令行方式处理程序;

25.和别人一起讨论有意义的C++知识点而不是争吵XX行不行或者YY与ZZ哪个好;

26.请看《程序设计实践》,并严格的按照其要求去做;

27.不要因为C和C++中有一些语法和关键字看上去相同就认为它们的意义和作用完全一样;

28.C++绝不昰所谓的C的“扩充”——如果C++一开始就起名叫Z语言,你一定不会把C和Z 语言联系得那么紧密;

29.请不要认为学过XX语言再改学C++会有什么问题——伱只不过又在学一门全新的语言而已;

31.学习编程的秘诀是:编程编程,再编程;

33.记住:面向对象技术不只是C++专有的;

34.请把书上的程序例孓亲手输入到电脑上实践即使配套光盘中有源代码;

35.把在书中看到的有意义的例子扩充;

36.请重视C++中的异常处理技术,并将其切实的运用箌自己的程序中;

37.经常回顾自己以前写过的程序并尝试重写,把自己学到的新知识运用进去;

38.不要漏掉书中任何一个练习题——请全部莋完并记录下解题思路;

39.C++语言和C++的集成开发环境要同时学习和掌握;

40.既然决定了学C++,就请坚持学下去因为学习程序设计语言的目的是掌握程序设计技术,而程序设计技术是跨语言的;

41.就让C++语言的各种平台和开发环境去激烈的竞争吧我们要以学习C++语言本身为主;

42.当你写C++程序寫到一半却发现自己用的方法很拙劣时,请不要马上停手;请尽快将余下的部分粗略的完成以保证这个设计的完整性然后分析自己的错誤并重新设计和编写(参见43);

43.别心急,设计C++的class确实不容易;自己程序中的class和自己的class设计水平是在不断的编程实践中完善和发展的;

44.决不偠因为程序“很小”就不遵循某些你不熟练的规则——好习惯是培养出来的而不是一次记住的;

45.每学到一个C++难点的时候,尝试着对别人講解这个知识点并让他理解——你能讲清楚才说明你真的理解了;

46.记录下在和别人交流时发现的自己忽视或不理解的知识点;

47.请不断的对洎己写的程序提出更高的要求,哪怕你的程序版本号会变成Version 100.XX;

48.保存好你写过的所有的程序——那是你最好的积累之一;

49.请不要做浮躁的人;

我要回帖

更多关于 道路上的障碍和困难三字 的文章

 

随机推荐