怎么如何学习编程语言程

自学编程的人,都是怎么找到第一份软件开发工作的?
来源:互联网
【非计算机专业,毕业两三年之后才开始自学编程的人,都是怎么找到第一份编程工作的? 招聘要求中有很多学历,专业和n年工作经验的要求,感觉会很难的样子。 从零基础自学到获得第一份编程工作又需要大概多久? 我现在在自学.net,想转行做程序员,目标很明确,也有兴趣,不过迫于生计问题只能边工作边业余时间学习,问这个问题并不是因为急于求成,而是希望能对未来状况,这个目标的可实施性以及我目前最担心的问题:能否顺利获得入行工作的机会有一个大概的了解。 希望能得到各位行业内前辈的帮助指点!先谢!!!】
招聘要求中的那些什么多少年工作经验啊,都是为了压低你的工资用的,你愿意被压低工资的话,你就直接投简历,然后被压低,然后就进去了。多容易。
自学--学完了去招聘站--关键字.net--选好城市--搜索职位--全选投递简历(翻页继续)--接电话--面试--面试的问题不会--翻书、百度、提问解决之--学完了去招聘站......
13年前,机械专业的我应聘面试的时候,我说:我会做网站,ASP、FLASH都会然后给他们看网址然后就OK了。。。
说下自身经历仅供参考,以前国企干的文员,31岁自学半年找到现在的工作,面试5家,有家公司直接要了但是要我做实施,没去;有一家二面失败了,但是回头给我打电话又让我去,估计是招不上人;现在这家公司我面了两次都失败了,但是各种机缘巧合又进来了。下面是一点体会1简历写好,不要全些精通也不要全写熟悉,尽量写细些方便面试提问。2定位精确点,比如我最早找工作,什么职位都觉得可以,什么方向都想要,最后HR可能都直接pass这种简历3以前的工作经历公司会很详细问,像非本专业的,尽量强调相关性跟特长吧,比如我强调的是英语水平不错,可以轻松阅读文档,在国企锻炼的沟通能力比较好,工作有条理,适合团队合作。了解下你公司有的项目,看以前工作内容上有什么比较贴近的地方多靠下4项目经验这个是我这种外行的硬伤,我这次是运气好,有时间有条件的尽量熟悉些简单项目,这家公司一面的时候项目经理十分想问这方面问题发现我基本为零,最后给我提意见,尽量做个简单项目,哪怕是JDBC写的论坛这样也行5一定要自信,其实好多干了几年的人未必水平很牛,跟我一起来的说是干了5年,带项目,后来发现太水,给的任务完不成,自己跑了6你看到的招聘广告好多是HR从别的公司复制粘贴的,有点唬人,有时候在IT群里有人会贴出来笑话,这种条件招的绝对是大牛,实际上能对半就已经不错了。7面试最后一般都谈待遇,网上教的反问的办法基本行不通,人家人事见那么多人了不会上当的,老老实实说出来就行,不要太低,太低会让人怀疑你能力8如果有公司愿意给实施的岗位我觉得也不错,实施要求低些,但是杂一些,可以曲线救国//注:此条一年后更正下,我感觉还是不要曲线救国了,喜欢编程有条件一定直接搞研发。
Elendil Zheng:
大学专业是纺织工程。。。然后热爱编程。。。然后机缘巧合帮学校做了个网站 而且还是有人看有人用的网站(想想学校这么抠也是醉了)。。然后拿着这个网站找实习进了某500强。。。然后走上正轨期间学习的路径是这样:国产XX小时精通c#教程》CSS,HTML,等等网页设计课程》c#高级教程》数据结构/操作系统/算法导论(很抱歉这本我只看了个开头。。。智商捉急)》设计模式》深入理解计算机系统(这本书真的很好 据说是MIT还是哪个牛校的大一教程)》CLR VIA C#/.NET设计模式/C# IN DEEPTH仅供参考
沉默的大多数:
关于这个问题,一般都这样回答没学历不要紧,没经验不要紧,技术差不要紧。。。万一他瞎呢?
如果学历不能证明你的价值,就用工作成果,开源项目也好,低价打工也好。我以前有个同事,十多岁在重庆某工厂焊电路板的同时自学编程,利用每天下班后的时间免费帮一个公司干活,后来顺利获得该公司的职位。90年代重庆最早一批通过高级程序员资格考试的人(是的,那时程序员是一种职称,有证的)。之后读了北大计算机硕士,进微软,在阿里云带团队负责计算平台网络模块,yy上市前两年加入该公司,昨晚还用他团队刚做的网络电话跟我聊天。
想起来曾经的N个同学和同事,编程这行只要你会写代码,写的好,面试的时候算法编程题你能过的了,很多时候学历经历可以无视。别学.NET了,学Java吧,然后去投个移动开发的职位。有一年的经验以后,再去找个年薪30w的工作,只要能过面试是绝对么问题的。
语言基础学好,然后做一个产品。很容易找到工作的。
5年前面试的时候我说我会ASP,我会PS,然后给他们看了几个跟我一毛钱关系没有的网址然后就OK了……现在我说我是园林专业的,别人根本就不care。
对游戏开发感兴趣
自学两年 delphi c c艹 刚开始请教一位大神。大神给了我代码和文档。两年后再请教大神 大神问我现在做什么 有兴趣和他一起做项目吗?如今做游戏后端一年了
跳槽到一家创业公司做后端主程。很感谢大神带我入门!
不要被招聘上面的什么什么学历,什么经验所吓到,编程不是很难,有点脑子的学学就能做东西了。不要去什么培训机构,不如不要钱去公司帮别人打下手学的东西多。简历其实可以胡诌,但是最好是自己的懂的东西相匹配,省的到时候面试官问起来一问三不知。简历要写好,这是别人让你去面试的关键。
我给你点实际建议吧但是我不鼓励这种做法就是你自己打好基础,然后多看一些开源框架和面试题,熟练了以后呢简历直接写有1-2年经验,然后就好找工作了
大学专业是汽车工程,偏机械方向,毕业(14年6月)找了两个月工作才找到一个很偏远的小机械厂(南京,学校在天津),无奈工资实在太低(到手2166)。好想转行。。。。自己学java好几个月,,效果好差啊,陆陆续续才学到对象、方法那,报班好贵没存款感觉也不划算,又怕学不精学完工作同样难找,,,真是迷茫。
因为热心帮一个朋友免费写了一点很紧急、很重要的程序,在他的推荐下获得了一次面试机会。将自己的作品刻录成光盘,直接带过去面试,遇到了一个脾气特别好的老美面试官,搞定。
简单说下自己的经历吧,仅供参考。毕业时一心想做计算机网络相关的工作,但无奈技术有限,毕业院校也很烂,求职四处碰壁,最后只进了一家10人的小公司,当然设备也少的可怜,技术根本谈不上能得到提升,虽然参加了ccna的培训,但仍然像一只没头苍蝇一样,看不到方向。后来打算转行,自学asp(不是.net),当时php和jsp很流行,只因为asp学起来简单,就选择了它。买了很多书,照着书上的例子,一行一行的敲代码,为了逼自己手写代码,就用记事本来写,这样写了半年,做了一个非常简单的函数查询系统,然后就拿着它到处去面试。一个多月后,得到了一份asp开发的工作,就是在这里,开发了几个小系统,算是得到了提升。之后跳槽到一家小的游戏公司,在这里遇到了一位好领导,技术非常强悍,他带着我做.net开发,让我从此开始了.net生涯。刚到他的手下时,我对.net还只处于照着书写代码的阶段,但领导给了我一周的时间,让我用.net做出一个能用的简单功能,我照着书上的教程,按照asp的思路,一周后交了差,然后正式进入他的开发团队,他手把手教我用他搭建的开发框架,就这样一步一步,一行一行的代码,一个一个的小功能模块,到最后一套完整的系统,算是正式成为了一名程序员。当然,这都是2008年的事了,今天我和这位领导都跳槽了,我们依旧是同事,依旧一起并肩做开发,我们来到了一个更优秀的团队和更广阔的平台。手机打字,所以说得比较乱,希望对你有帮助。总结起来就是,想要做好开发,就不要怕吃苦,不要怕枯燥,路是一步一步走的,饭是一口一口吃的,代码是一行一行写的,多学习,多研究,多敲代码,多用脑子。祝你一切顺利!
黄鑫,珍爱网算法和数据挖掘部技术总监。黄鑫大学的时候一直做.NET方向的Web开发,他做过ERP、做过互联网,而后机缘巧合地做了爬虫,来到算法领域。他在豆瓣算法组做了三年的算法,从初级算法工程师一直到后来的算法组Tech Leader。黄鑫现在加入了珍爱网,他希望能在这里实现自己的愿望,并让更多的人获得幸福。你是什么时候开始编程的?如果严格地说开始编程应该是大三上学期。大一的时候我是法律系的学生,然后大二转到了计算机。但是我发现这里和想象中的计算机系完全不一样,我以前一直认为学计算机是学Windows操作,所以大二的时候几乎一行代码都没写过。到了大三,我发现我宿舍的哥们都已经可以写简单的JSP页面了,我还连Hello world都写不顺。当时我就请教一个当时在哈工大读软件的朋友,他说他现在在学.NET,我觉得特别高级(因为当时我只知道C, C++和Java,第一次听说.NET),然后他寄给了我几张学习的光盘,于是我就开始真正地写代码了。大学学习的最大收获是什么?有什么建议吗?我觉得可以分成两个层面来说,大学给我最重要的能力是自学的能力。因为大学的主要专业方向是Java,但是我学的是C#,所以几乎所有编程相关的知识,包括Web开发这些都是我自己学的,这些是留给我最大的财富。其次就是一些专业的基础课,现在每当有一些学弟学妹让我给一些建议的时候,我都会给他们讲,在校所有的课都是非常有用的,你觉得没有用只是因为你还没有站在一定的高度去来看这些。比如说编译原理,数据结构,操作系统,甚至汇编语言。这也是我近几年才认识到的,当然,我觉得这也算是中国教育的一些瑕疵吧。是一个什么样的机会让你进入到算法领域?为什么决定把数据挖掘和算法坚持做下去?刚刚毕业的前两年一直是做Web开发,后来换了一份工作是在一个外包公司做Python,但是刚刚做了半个多月就觉得特别不适应这种气氛,我还是对互联网更感兴趣。然后前同事和我说他们需要用Python来做爬虫,就把我叫回了以前的公司。做了几个月的爬虫后,我觉得蛮无聊的,恰巧公司需要做一个商品的关联推荐,我就自告奋勇地做了。我去看了一些数据挖掘的基本知识,觉得特别有趣,这也是我第一次觉得大学学的数学原来是真的有用,于是就把自己的方向定位到了算法和数据挖掘。至于为什么坚持,这个简要地说有两个方面,第一就是自己真正的兴趣,另外,我喜欢做互联网的初衷就是希望能帮助到更多的人,我觉得这比技术重要得多。我觉得推荐系统能够帮助更多的人找到合适的东西,发现他原本不知道的事,这很有成就感。======后面内容, 请看原文=======来源:
哈哈,这个有时候"演“”还真是一招!我老公当时就是自学,没白天没黑夜的学了3个月,自己看视频,找工作的时候,做了一个网站,说自己有1年经验,然后录用。不过他说最头疼的不是入职,是你进去以后怎样让人觉得,你不是非专业的。虚心一点向人多请教,现在跳槽离职,公司好几个中层留他,但还是决心要走。做一个小的成品,展示一下,对非专业的人,很有用的。加油!
去年毕业,培训ing,这半年从一个啥也不懂的菜鸟,到现在多少摸到了行业的边边,学会了如何提升自己,而不仅仅是培训机构教的速成知识。私以为要有自己的方向和方法。坚持敲代码,一段时间后你就能算入门了。
系统学一下C#基础,熟悉SQL Server基础,写完一个数据库增删改查的Demo,就可以去投简历了。C#面试好多都涉及SQL Server,至少要会用
免责声明:本站部分内容、图片、文字、视频等来自于互联网,仅供大家学习与交流。相关内容如涉嫌侵犯您的知识产权或其他合法权益,请向本站发送有效通知,我们会及时处理。反馈邮箱&&&&。
学生服务号
在线咨询,奖学金返现,名师点评,等你来互动> 怎么学习编程,新手如何学编程
怎么学习编程,新手如何学编程
luyinjuan & &
发布时间: & &
浏览:5 & &
回复:0 & &
悬赏:0.0希赛币
如何学习编程,新手怎么学编程大家第一次接触编程的时候我想很多人都会在那些Q群啊之类的地方不断的问,怎么学习编程,要看些那些书。甚至在百度,谷歌里搜索如何学习编程。
& & 这篇文章,我会从我自己学习编程的角度去描述,如何学习,可能不是最好的学习方法,但是我想对于一些朋友总会有帮助的,因为方法是源自你个人。我在这里说一下我的格言:别去想别人怎么做,首先应该想自己怎么做。别去想别人怎么帮助你。首先想自己帮助自己。
& & 想想我自己学习编程也有好多年啦。初三开始小打小闹的用C语言写个无聊的printf()到用HTML写几个个人网站。虽然没啥技术含量不过都是自己的劳动,那时候真的很激动,现在回想起来,其实那时候很幼稚。不过也造就了我的兴趣吧!好了闲话就少说了,我们入正题。
& & 在学习之前,请允许自己先问下自己:我为什么要做这样的事。对于编程,我会先问一下,你为什么要学习编程?你会怎么回答?
& & A:兴趣;
& & B:读书需要;
& & C:传闻是高薪职业;
& & D:容易就业;
& & E:被逼的;
& & F:无聊学学;
& & 这个你会怎么选择;什么样的目的,得到什么样的结果。如果你选择(A)我会开心,兴趣就是动力,就算没有人教,你也会鼓足勇气去学习,就我个人来说,我是那种屁股坐不稳的人,你叫我坐在那里什么都不做半个小时,我会全身都不舒服的。但是一说到计算机,编程我可以一坐就是7,8个小时自己还没感觉。兴趣第一,很好,你以这个为目的我相信你一定能学好。相信你也有自己的一套学习方式。
& & 如果你选择的是B:那么你也有一定的成功几率,首先你要是一个会读书的人,可以说读书就是你的兴趣,那么你也可以学好。当然如果只是随潮流大家都读所以我也要读,那么你只能学不好了。
& & 如果你选择的是C:那么你还是早点放弃吧,那些拥有高薪的都是十分牛的人,其实的广大程序员还是挣扎在生活的水平线上。混饭吃而已,所以如果你抱着高薪去学习编程,你一定肯痛苦。这类也是最能有成就的一类,编程是技术需要的是一份执着,但是你的执着只是金钱。技术现在并不等于金钱……
& & 如果你选择的是D:我还是劝你早点放弃,现在的就业也不乐观啊,失业大军里计算机就占了很大的一部分比重,你随时都可能是其中的一分子。
& & 如果你选择的是E:很好,你也有可能学好,前提是逼你的人能一直强逼你下去,让你进步,一句非常经典的话:“人都是被逼出来的……”。你出生的时候的确是被逼出来的,被你妈妈逼出来,呵呵!
& & 如果你选择的是F:也不错,起码你无聊的时候想到的居然是编程,证明编程还能给你带来乐趣。
& & 既然你已经知道为什么学习编程,那么我们要做的就是怎么去学习了。现在的编程语言很多,上百个语言,但是无论什么语言,都会有共同性的。所以你要学习编程那么就要先学习编程的思想,这个编程的思想你也只能看一下而已。了解一下计算机如何去读这些编程语言这个很重要。不了解过个你学习任何编程语言都很难做到灵活运用。
& & 你明白了计算机是如何读编程语言是的这个时候你就可以开始选择你学习的语言了。至少这些编程语言都是我能看懂的,可以说是自己学过的。也会解析一下学习这些语言的一些特点。
& & A: c#.NET
& & B: Java
& & C: C/C++
& & D: PHP
& & E: JavaScript
& & F: lua
& & 我只列出了五种,其实还有更多的语言,有兴趣可以自己去找下这些语言的特色。其实我了出的这些都有一个特色。都是跟C语言有一定的相似的。
& & A: C#这个语言是微软推出的,目前大部分应用都是应用在WIN平台上,虽然LINUX也能用,但支持还不是太好。编程风格上我觉得是最优美。至少看起来很舒适,强大的智能感知。编程的学习难度分级是:初学偏易,一般编程中等,高级编程难。梯度不算陡峭。虽然是面向对象,但是现在大部分的人都很用到面向对象至少我在国内反编译很多的应用系统的时候很多都没有用到编程思想的,虽多就是把类用来实现脚本编程闭包功能而已。真正使用到面向对象的继承多态的并不多。当然也有很多是使用了面向对象思想的,所以我觉得初学C#的时候完全可以放弃对象的继承,多态这类比较复杂的东西。专心学习他的语法糖,还有封装好的API,其实C#这个语言已经有个很完善的API基本上的应用都可以直接使用API来实现,而且从算法构造上也不算复杂。再加上IDE的智能感知,新手只需要了解各个命名空间的作用就可以了,智能感知会帮助我们完成API的调用(至少你要知道那些方法在那个空间,怎么用)。所以初学我把它定义在上手“易”。现在的学习其实并非一定要从记事本开始。学会使用IDE学习其实也是一项技能。编程很重要的一点。就是你动了多少手,你就收获了多少,无论你看了多少别人的代码,如果你不自己动手去写一下,你永远没办法感受到内涵,之前我有部分同学,他们跟我说,现在网上大把代码,那里需要自己敲得那么辛苦干嘛上网COPY一下就什么都有了,傻瓜才自己手写。好吧我承认我傻瓜。但是自少我现在的水平我敢说,,你只需要给我2样东西我一样能写出你上网找的那些代码。一样是VS,另一样是帮助文档。说起这个事又令我想起最近公司招聘的一些趣事。最近公司面试了接近80个人吧,因为我们公司的上机考试是不允许上网的。呵呵!你们可以想象一下,不能上网后只有30个能勉强敲的出代码的。能做出题目的更是少得可怜。突然我就想,这些人到底有没基础的,一个简单的登录功能和上传文件功能不能上网就不会写,我真是狂汗……一些号称三年五年工作经验的,居然还写不出一个简单的交叉表查询。(其实就10句代码……)。所以啊过分依靠网络怎么可能有自己的技术积累呢,这些人在我眼里三年五年也成不了构架师……可能十年也去不到构架师的水平。
B:JAVA 跟C#类似,传闻微软推出C#也是为了对抗JAVA而搞出来的。这两种语言有很多相似的地方什么是命名的方式上都有很多相似的地方,JAVA也是从C语言里发展起来的。不过我觉得在学习曲线上,初学要比C#难,中国人普遍英语不太好。而且在IDE上微软的VS要比JAVA的各类编辑器要优胜,主要是在智能感知上,还有一些辅助上。可能很多JAVA的铁杆FANS会给我丢西瓜,丢鸡蛋了。但我敢说,我说的是事实,JAVA位置一个环境都很辛苦,至少我学习的时候是这样。免费啊,JAVA很多东西都是免费的,微软要收费的,收费肯定好了……我会偷偷的笑……你丫就不用盗版?有了光荣的盗版。收费问题根本就不是问题,再说从学习的角度……盗版这些东西根本就无关痛痒的……反而更容易召集人气……
& & C:&C语言可以说是非常牛逼的语言,长期位居第一。但是需要投入的精力也不少啊,智能感知一直进步不大,可能是因为万恶的宏定义呵呵(这个万恶可不是我说的。)当然学习C语言如果你不懂使用宏定义那么你肯定没学过C语言,C语言的宏定义虽然一直在C语言的书本上很少描述但是实际应用却是不可缺少的,我看过IDSOFT的DOOM的源代码里简直就是神一般。但是看起来也真是辛苦。题外话,其实上面很多语言都是根据C语言衍生出来的,什么很多特性都是参照了C语言。用很玄幻的说话。C语言是远古时代遗留的强大魔法。既然是远古学习曲线自然就陡峭得可以,我个人感觉我的C语言水平其实都只是菜鸟而已。C++一样是菜鸟。C++和C其实我觉得是2个语言根本不能混为一谈的,但是很多招聘之的都把C/C++归为一类,所以我也把它归为一类,很多人想问学C++是不是要先学C.而且C++的分支多得吓人。内涵也丰富得吓人……C语言个人技术化,我个人觉得C/C++起码要4年才算出师,JAVA是2年,C#都是2年。而且还需要一系列的计算机基础,算法基础等一些东西。而JAVA和C#都把这些东西封装了成标准的API了,我们只需要使用。但是C/C++这些东西都没有一个确定的标准例如界面库,有人用QT有人用MFC.这些都是不一样的所以选择的路也多,学的东西自然也更多了。但从编程上,并非就是C++的就比用C#的牛。C++只是拥有深厚的历史,有自己独特的文明。是因为它的文明而牛。
& & D:PHP 接触不深,但是我觉得它是一个制作网页的好语言,其他领域我并不怎么看好他,我觉得PHP在开发网页上有很大的优势,但是开发B/S级系统应用就现得比较力不从心了。所以如果你定位自己作为一个网页开发人员的话,你就应该学习这种语言。如果是B/S级的应用的话,就应该使用C#或者JAVA,或者其他的语言。
& & E:JavaScript,非常有名的脚本语言,如果你想从事B/S的开发,网页开发,你就一定要学这个,是一个必须掌握的技能。学习曲线相对比较平坦,而且内容也不算多,但是应用却十分灵活的语言。强烈推荐初学者先学习这个语言,来寻找感觉,因为这个语言完全不存在编程环境的问题,你只需要有浏览器,记事本,两样任何系统都有的软件就可以编写它。所以我觉得首先学习它会对你理解编程思想有一定帮助。
& & F:LUA这个也是一个脚本语言,成就这个语言的名声是来自一个叫“魔兽世界”的游戏,目前我了解LUA应用的领域比较多都是作为一种嵌入语言,嵌入到C或者C++中去使用,在国内很多游戏公司都会有LUA程序员,部分会由C语言程序员去兼任。因为LUA在语法上和C有很相似的地方,基本对旧的C语言程序员学习LUA是无难度的。当然也有它的局限性,作为脚本语言它本身就存在不足,而且这个语言本身就是作为C语言的扩展来用的所以,学习这个语言的话,建议先学习C语言。或者成就更高(或者而已!)
& & 我个人是选择C#作为长期发展的语言的。我觉得这个语言比较适合我这种英语不算好,但是又喜欢编程的人。
& & PS:真心想学编程的必须要学习一定的英语能力,因为很多编程的先进思想都是英文的。所以英语好,对成为高手起很大作用的。
& & 知道为什么学习编程,又选择了目标语言,接下来就是基础学习了。
& & 这个基础学习,我觉得首先要对一些语法糖熟悉,第二件事情就是要多编,多看,可能你买的书都附带着实例代码的,我觉得对于初学者,首先你把书上的程序都照着编一次,在这期间,你一定会遇到无数的错误,但是这些错误将会是重复出现的,这个时候你就学会了如何排错,有人说过编程不是一口气写出来的,是修改出来的。所以学习排错是编程的第一步,虽然随书光盘有很多代码,但是这些代码都不属于你的。没有入你脑,唯一让这些代码属于你的办法就是多抄(打)几次。当你把一本编程的基础书都看透了……至少别人问你这本书的知识你能答得上口,那就是你度过了第一时期了。你可以进入一搬阶段了。
& & 一般的阶段,这个阶段我把它定义为是把这些语法组织成句子,组织成文章的时期。我想问下,大家都上过语文课吧,我们来回想一下,我们学习语文的过程
& & 字=》词=》句=》文章;
& & 而编程的学习则是这样的;
& & 变量=》函数=》类=》架构
& & 所以我们在初学阶段做的都是学那些字,那些词(其实就是语法糖)然后我们就会学造句,造句的时候就会涉及到把什么词语组合起来会得到优美的句子,而合理的句子,加上合理的逻辑就会变成一篇优美的文章。但是一篇优美的文章并非那么简单的。也就是一个程序架构的优美一样没那么简单一样,需要很多很多学识。
===========================================================================
—————————————————————————&&华丽的分割线&&—————————————————————————===========================================================================
Javascript是世界上最受误解的语言,其实C++何尝不是。坊间流传的错误的C++学习方法一抓就是一大把。我自己在学习C++的过程中也走了许多弯路,浪费了不少时间。
为什么会存在这么多错误认识?原因主要有三个,一是C++语言的细节太多。二是一些著名的C++书籍总在(不管有意还是无意)暗示语言细节的重要性和有趣。三是现代C++库的开发哲学必须用到一些犄角旮旯的语言细节(但注意,是库设计,不是日常编程)。这些共同塑造了C++社群的整体心态和哲学。
单是第一条还未必能够成气候,其它语言的细节也不少(尽管比起C++起来还是小巫见大巫),就拿javascript来说,作用域规则,名字查找,closure,for/in,这些都是细节,而且其中还有违反直觉的。但许多动态语言的程序员的理念我猜大约是学到哪用到哪罢。但C++就不一样了,学C++之人有一种类似于被暗示的潜在心态,就是一定要先把语言核心基本上吃透了才能下手写出漂亮的程序。这首先就错了。这个意识形成的原因在第二点,C++书籍。市面上的C++书籍不计其数,但有一个共同的缺点,就是讲语言细节的书太多——《C++
gotchas》,《Effective C++》,《More Effective C++》,但无可厚非的是,C++是这样一门语言:要拿它满足现代编程理念的需求,尤其是C++库开发的需求,还必须得关注语言细节,乃至于在C++中利用语言细节已经成了一门学问。比如C++模板在设计之初根本没有想到模板元编程这回事,更没想到C++模板系统是图灵完备的,这也就导致了《Modern C++ Design》和《C++ Template Metaprogramming》的惊世骇俗。这些技术的出现为什么惊世骇俗,打个比方,就好比是一块大家都认为已经熟悉无比,再无秘密可言的土地上,突然某天有人挖到原来地下还蕴藏着最丰富的石油。在这之前的C++虽然也有一些细节,但也还算容易掌握,那可是C++程序员们的happy
old times,因为C++的一切都一览无余,everything is figured out。然而《Modern C++ Design》的出世告诉人们,“瞧,还有多少细节你们没有掌握啊。”于是C++程序员们久违的激情被重燃起来,奋不顾身的踏入细节的沼泽中。尤其是,模板编程将C++的细节进一步挖掘到了极致——我们干嘛关心涉及类对象的隐式转换的优先级高低?看看boost::is_base_of就可以知道有多诡异了。但最大的问题还在于,对于这些细节的关注还真有它合适的理由:我们要开发现代模板库,要开发active
library,就必须动用模板编程技术,要动用模板编程技术,就必须利用语言的犄角旮旯,enable_if,type_traits,甚至连早就古井无波的C宏也在乱世中重生,看看boost::preprocessor有多诡异就知道了,连C宏的图灵完备性(预编译期的)都被挖掘出来了。为什么要做这些?好玩?标榜?都不是,开发库的实际需求。但这也正是最大的悲哀了。在boost里面因实际需求而动用语言细节最终居然能神奇的完成任务的最好教材就是boost::foreach,这个小设施对语言细节的发掘达到了惊天地泣鬼神的地步,不信你先试着自己去看看它的源代码,再看看作者介绍它的文章吧。而boost::typeof也不甘其后——C++语言里面有太多被“发现”而不是被“发明”的技术。难道最初无意设置这些语言规则的家伙们都是oracles?
因为没有variadic templates,人们用宏加上缺省模板参数来实现类似效果。因为没有concepts,人们用模板加上析构函数的细节来完成类似工作。因为没有typeof,人们用模板元编程和宏加上无尽的细节来实现目标… C++开发者们的DIY精神不可谓不强。
然而,如果仅仅是因为要开发优秀的库,那么涉及这些细节都还是情有可原的,至少在C++09出现并且编译器厂商跟上之前,这些都还能说是不得已而为之。但我们广大的C++程序员呢?大众是容易被误导的,我也曾经是。以为掌握了更多的语言细节就更牛,但实际却是那些语言细节十有八九是平时编程用都用不到的。C++中众多的细节虽然在库设计者手里面有其用武之地,但普通程序员则根本无需过多关注,尤其是没有实际动机的关注。一般性的编码实践准则,以及基本的编程能力和基本功,乃至基本的程序设计理论以及算法设计。才是真正需要花时间掌握的东西。
学习最佳编码实践比学习C++更重要。看优秀的代码也比埋头用差劲的编码方式写垃圾代码要有效。直接、清晰、明了、KISS地表达意图比玩编码花招要重要…
避免去过问任何语言细节,除非必要。这个必要是指在实际编程当中遇到问题,这样就算需要过问细节,也是最省事的,懒惰者原则嘛。一个掌握了基本的编程理念并有较强学习能力的程序员在用一门陌生的语言编程时就算拿着那本语言的圣经从索引翻起也可以编出合格的程序来。十年学会编程不是指对每门语言都得十年,那一辈子才能学几门语言哪,如果按字母顺序学的话一辈子都别指望学到Ruby了;十年学习编程更不是指先把语言特性从粗到细全都吃透才敢下手编程,在实践中提高才是最重要的。
至于这种抠语言细节的哲学为何能在社群里面呈野火燎原之势,就是一个心理学的问题了。想像人们在论坛上讨论问题时,一个对语言把握很细致的人肯定能够得到更多的佩服,而由于论坛上的问题大多是小问题,所以解决实际问题的真正能力并不能得到显现,也就是说,知识型的人能够得到更多佩服,后者便成为动力和仿效的砝码。然而真正的编程能力是与语言细节没关系的,熟练运用一门语言能够帮你最佳表达你的意图,但熟练运用一门语言绝不意味着要把它的边边角角全都记住。懂得一些常识,有了编程的基本直觉,遇到一些细节错误的时候再去查书,是最节省时间的办法。
C++的书,Bjarne的圣经《The C++ Programming Language》是高屋建瓴的。《大规模C++程序设计》是挺务实的。《Accelerated C++》是最佳入门的。《C++ Templates》是仅作参考的。《C++ Template Metaprogramming》是精力过剩者可以玩一玩的,普通程序员碰都别碰的。《ISO.IEC
C++ Standard 14882》不是拿来读的。Bjarne最近在做C++的教育,新书是绝对可以期待的。
P.S. 关于如何学习编程,g9的blog上有许多精彩的文章:这里,这里,这里,这里… 实际上,我建议你去把g9老大的blog翻个底朝天 :P
再P.S. 书单?我是遑于给出一个类似《C++初学者必读》这种书单的。C++的书不计其数,被公认的好书也不胜枚举。只不过有些书容易给初学者造成一种错觉,就是“学习C++就应该是这个样子的”。比如有朋友提到的《高质量C/C++编程》,这本书有价值,但不适合初学者,初学者读这样的书容易一叶障目不见泰山。实际上,正确的态度是,细节是必要的。但细节是次要的。其实学习编程我觉得应该最先学习如何用伪码表达思想呢,君不见《Introduction
to Algorithm》里面的代码?《TAOCP》中的代码?哦,对了它们是自己建立的语言,但这种仅教学目的的语言的目的就是为了避免让写程序的人一开始就忘了写程序是为了完成功能,以为写程序就是和语言细节作斗争了。Bjarne说程序的正确性最重要,boost的编码标准里面也将正确性列在性能前面。
此外,一旦建立了正确的学习编程的理念,其实什么书(只要不是太垃圾的)都有些用处。都当成参考书,用的时候从目录或索引翻,基本就对了。
再再P.S. myan老大和g9老大都给出了许多精彩的见解。我不得不再加上一个P.S。具体我就不摘录了,如果你读到这里,请务必往下看他们的评论。转载者别忘了转载他们的评论:-)
许多朋友都问我同一个问题,到底要不要学习C++。其实这个问题问得很没有意义。“学C++”和“不学C++”这个二分法是没意义的,为什么?因为这个问题很表面,甚至很浮躁。重要的不是你掌握的语言,而是你掌握的能力,借用myan老大的话,“重要的是这个磨练过程,而不是结果,要的是你粗壮的腿,而不是你身上背的那袋盐巴。”。此外学习C++的意义其实真的是醉翁之意不在酒,像C/C++这种系统级语言,在学习的过程中必须要涉及到一些底层知识,如内存管理、编译连接系统、汇编语言、硬件体系结构等等等等知识(注意,这不包括过分犄角旮旯的语言枝节)。这些东西也就是所谓的内功了(其实最最重要的内功还是长期学习所磨练出来的自学能力)。对此大嘴Joel在《Joel
On Software》里面提到的漏洞抽象定律阐述得就非常漂亮。
所以,答案是,让你成为高手的并不是你掌握什么语言,精通C++未必就能让你成为高手,不精通C++也未必就能让你成为低手。我想大家都不会怀疑g9老大如果要抄起C++做一个项目的话会比大多数自认熟练C++的人要做得漂亮。所以关键的不是语言这个表层的东西,而是底下的本质矛盾。当然,不是说那就什么语言都不要学了,按照一种曹操的逻辑,“天下语言,唯imperative与declarative耳”。C++是前者里面最复杂的一种,支持最广泛的编程范式。借用当初数学系入学大会上一个老师的话,“你数学都学了,还有什么不能学的呢?”。学语言是一个途径,如果你把它用来磨练自己,可以。如果你把它用来作为学习系统底层知识的钥匙,可以。如果你把它用来作为学习如何编写优秀的代码,如何组织大型的程序,如何进行抽象设计,可以。如果掉书袋,光啃细节,我认为不可以(除非你必须要用到细节,像boost库的coder们)
本问题标题:
本问题地址:
温馨提示:本问题已经关闭,不能解答。
暂无合适的专家
&&&&&&&&&&&&&&&
希赛网 版权所有 & &&}

我要回帖

更多关于 如何学习编程语言 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信