首先,你需要选择一门自己感兴趣的编程语言。现在常见的编程语言有:
C / C++:属于大多数情况下能接触到的相对基础的编程语言了,优势是基本掌握以后面对其他语言均可以“无压力”;坏处是学习起来非常的困难,需要系统性的了解非常多知识点,且耗时一般较长。如果你有更多的时间和精力,同时希望能够长期更好的发展成架构师,那么这可能就是你比较合适的语言选择了。
Java:应用广泛,几乎大多数开发场景都有java或者java变体的身影。学习java你可以了解到面向对象思想,了解虚拟机等的概念,面对常见的开发也能够有应对方案。同时这个语言对比C/C++能简单不少,在很多情况下是面向新手比较合适的选择了。
Go:最近一段时间流行起来的语言,在面对高并发等场景下有天然的优势。Go语言有自己独到的特性,同时也可以支持一些C语言的能力,而且也越来越在国内的互联网公司作为首选开发语言之一。
PHP / Python / JavaScript / net / Swift / :这些语言大多有自己的特定应用场景,比如Python在大数据和人工智能领域比较常见,JavaScript是前端开发的必备语言等。如果你希望的工作有比较强烈的语言要求,那么选择上面的语言准没错。
其次,掌握数据结构及算法,同时能够通过程序语言实现。
比如常见的数据结构,像是数组、链表、堆、栈、队列、树、图等,尽量都有机会了解数据结构的实现原理(包括自己用代码能够简单编写),知道数据结构的优缺点,以及在什么场景下使用。算法原理上如时间空间复杂度,一些数学概念;同时一些经典的排序、与数据结构结合的实现,也应当有了解。
这些推荐你去找专业的书籍,系统性的选择;尽量减少如面试宝典等取巧的方式,深入掌握不仅仅是找工作,在后续的工作中也能更好的帮到你。
再次,了解计算机基础。
常见的计算机基础包括计算机组成原理(简称机组)、 *** 作系统、网络、编译原理等。这里需要投入比较多的精力,如果确实时间上比较紧张,可以有侧重的选择。
比如你希望从事偏底层的开发工作,那么更侧重在机组和 *** 作系统上;如果侧重在上层开发,那么可以侧重在网络上,以此类推。当然,更好的掌握以上知识能够在很多不经意的时间给到你帮助,如果有空,也建议多深入的理解。
最后,知道一些计算机知识的应用。
这里就比较多了,比如数据库、一些基本的项目设计、项目实战等等,根据你希望的工作有针对性的去了解,或许有不小的帮助。
按照上面这几个步骤进行下去,可能确实需要投入一定的时间和精力,但是一旦你选择希望成为一名程序员,就一定要坚持下去,才能取得更好的结果。
看了一个知乎的回答,感觉还可以,看楼主说的很诚恳:
培训开始到工作,差不多整整一年了,时间可以说快,也可以说慢,最终选择了黑马学习Java,写下一年来的回忆和经历,也是我人生中的记忆。(字可能有点多标点符号我也是随便打,不喜欢的可以直接跳过)
先介绍下自己吧 河北廊坊市人,湖北工业大学(大专土木专业),16年毕业后回到老家廊坊干本专业工作,说说自己为什么毕业就想转行了吧
行业师兄也认识几个,相比所认识做it的朋友,同样是4 5年工作 差距真的很大,当初选土木专业,刚好那会土木发展还不错,大学老师各种夸好,其实后来接触下来,发现我对土木并不热爱。
但是好就业是真的,一毕业就工作了,工资2500,私企施工单位,我的体力劳动大于脑力劳动,说白了就是一带眼镜的农民工,还好我带眼镜,要不然就是农民工了,有喜欢的女孩子那段时间都没自信心追求,不修边幅,烟酒必备,透支身体,涨薪幅度很低,我基本上已经看到了,工作的5年师兄5000工资,和一眼看到未来的自己才是最可怕的,前景遥遥无期,而且16年年底那会,经常半夜施工,加班常有的事,主要是甲方就是你大爷,我本人还算了解自己,不大适应,权术拍马屁的一个人,就做好自己工作就行,恰恰这行就需要这样,比我早进行业的老哥们,我们经常夜宵,感觉他们都是喝酒来麻痹自己,转行年龄资本也晚了,现在想起来虽然程序员也加班,相比补贴各方面也有所安慰了。以上感触还有很多,当然也不排除混的很好师兄,很热爱土木的师兄。
经历不多,太多感叹 ,太多感触,我不怪行业,只怪自己,当时唯一的想法也是就想早点跳出来,以后想跳都跳不出来了,我当时跟一起工作的李哥话语很多,他们也都支持我转行,不要步自己后尘,哪怕转行失败了。我也心甘情愿,也谢谢他们对我的支持。
说下找培训机构经历吧,也算是血泪史了,因为转行之前我对编程完全小白,大学学过一点c ,,仅此而已,因为我是属于直接离职,然后转行,不想一边在职,一边考虑,拖拖拉拉,所以当初就打算直接培训节约时间成本,前前后后跑了3家培训机构,咨询了4 5家培训机构,第一先是了解,达内,因为我属于萌新找机构了,第一批获取的信息,就了解到和青鸟和达内了,当时没有经验,直接就把电话输入下面了,不得不说那边**姐招生老师,很厉害,话术对我这类小白一愣一愣的,我记得比较清楚的就是,他们好像对地理不大好,我说我是河北廊坊,他就说安排我去天津达内来看看,- -! 其实我们离北京特近,因为当时父母也在帮我 *** 心这个事,感觉我不踏实,刚毕业应该好好工作,不该转行,而且父母不懂编程,觉得网上不是什么正经工作,男人就该学门技术,这是后话了,反正就是好不容易说服了,父母也看到达内,青鸟,是大公司上市公司,他们的理念就是出名就是最好的,所以让我去看看,我没选青鸟的原因是,小时候我就看过青鸟电视广告了,感觉那会好像是培训厨师,技师,类型新东方类型的,多说一句,找培训机构,跑去北京2次,达内是第一次,黑马是第二次去北京,去了达内之后,我也不说别人不好,给人的感觉就是承诺太多,有点特别急于求成让我报名速度学的意思,然后很多高薪案例也拿给我看了,当然我大老远去看,肯定是想定下来就学的,忍了一下,没有报名,当天就回家了。也给我后来找培训机构算是多了几个心眼吧。很敬业,而且现在我都培训完工作了,还在给我打电话,因为我有点不好意思,中途一直犹犹豫豫,没有答应 也没有拒绝别人。现在好尴尬,感觉拖了别人这么久,有点不好意思说不去了。每次就说暂时有事敷衍过去,然后没多久又会联系我。
然后网上有咨询了几家学费都差不多,只是没有直接跑去看,大概消停了几天,尝试这自己自学一下,就逛java吧,了解到一家叫尚马教育中小机构,因为学费比较低,好像一万出头吧,少了差不多接近一半了,因为当时上班大半年虽然吃住在家,但是工资不高,没攒到钱,大部分还要靠父母资助,所以了解到学费低,万一转入不了,也不用找父母要多少钱,而且还又特意去看了看,虽然远。
去之前还犹犹豫豫,父母对河南印象不好,不让我去,怕是骗子,在这里没有黑河南地区朋友的意思,只是上一代人的误解,本人父母相对来说比较传统,我也属于独子,很多观念也是和他们反着来,我本人比较喜欢历史文化,而且对河南有天然好感,然后我还是去了,总体来说很满意,那边设施也很齐全,而且电脑都可以不用自己买了,还能省比开支,那边老师给我的意见和行业信息也很多,也没有安抚和承诺让我急于报名,本来回去之后就打算去那边的,回去告诉父母后,我母亲可能自己网上看了看,联系了那边,然后反对我去尚马教育,与她沟通,因为没有名气,怕我被骗,或者传销,老师比较年轻等等吧,现在工作中也都是同龄人,相比我之前的工作环境有些40 50的人狡猾无节 *** 的多了,我也很少无奈,其实社会并没有他们想象中的那么险,没办法不想让父母给我很多钱,找的便宜机构不同意,也不能不找父母拿钱,双向矛盾,所以那边也没考虑了。
最后了解到黑马程序员属于口碑最好的,而且网站给人的感觉也不像其他大机构那样,满屏窗口,学费很达内差不多,在北京也近,父母也放心,最后一次也是直接联系好了,打算没问题定的,前前后后差不多一个月,不想拖太久,在家压力也很大,本来预算找父母要2w就行了的,自己的小几千当生活费,然后还要买电脑,找母亲要了2w5 ,去的当夜晚上,躺在床上,压力真的很大,记得是17年的 9月10号,前所未有,决心拼了,人很多,我们那个班70来人,很大部分属于别的专业,当时就有点慌了,饭碗还没拿上,就这么多人抢饭碗啊,哈哈,刚开始学的2个多月其实我还蛮好的,因为有动力,其次花了这些钱,没当有惰性,我就会想到,钱来之不易,提醒自己,这可能也是付费,跟免费的区别吧,当然班上也有人到后面坚持不下去的,当时居然有这诡异的心态,想这越多人放弃,我进入行业的机会就越大。然后在第四个月做项目的时候我心态也发生了变化,学到一定程度后,当时觉得希望吸收越多的消息越好,不管有用没用,也感谢当时黑马老师对我的耐心引导,让我纠正心态了心态扛过来了,培训的价值恰好在这,大部分靠自己,在分叉口,能够指引你道路。总体来说很庆幸这次的选择,也成为我人生中正确的选择。可能我选错机构,另外一条路在等着我。
附带一张培训图,当时凌晨12点还在敲代码的自己,当时自己打气发的朋友圈没有删。找到唯一的一张图了。
然后就是找工作。临近毕业的时候那会非常慌,下boss,拉钩,智联,投简历都是几百上千+自己又是专业,非计算机专业,在北京这种大城市,说句不好听的,家政,保洁都是大学生。it这种高学历圈子我是属于垫底了,好不容易走到这一步了,只能逼这自己了,当时群里很多同学毕业好几年可以包装简历,我这种刚毕业不到一年的,包装不了,毕业时间对不上,自己也不大属于那种能圆场,能撒谎的人,我的简历就写的很如实,开始还在选自己合适的公司,但是只拿到2家面试机会,第一次面试特紧张,又是背题,又是话术演练,因为之前土木的工作,直接交了简历就入职, 要么就是分配,面试流程都少,所以缺乏这方面经验,第一家让我回去等结果,基本就是没结果,然后第二家也是如此,后来发现这样不对,于是海投,前后投了300多简历吧,一天4 5家面试,多的时候8家,2天下来就不怕了,对于找工作与我类似的可以试试,后来有一家给我开了6000,说实话与我想的有差距,而且在北京前期经济会很艰难,因为当时毕业了,吃住都花钱,我不想在想找父母要钱了,我没有太多的选择,迅速入职了,工作种种吧,后期能不能发展,就是完全靠自己了。目前工作半年,工资还是一样,省吃俭用,脑子有点乱,文采不好,随便写的,就写到这了,后面工作心得在更新吧,也算立贴,为自己打气,希望明年的这个时候,工资突破1w5。 也感谢黑马程序员能带我迈出第一步。
2019711 快1年了,现在9k ,看来与我预期还是有点远啊。听说学费还涨价了 成本太高了等工作在知道,衣食住行,3w多不是那么好还的。。。
916最近跳槽了,11k,多了一点面试心得,在评论那,周边大佬太多了,自己就是咸鱼,拍个大佬工位。。。虽然辛苦,不过目前有点光明,哪怕只有一点。
《程序员》推荐C++ 图书三人谈
主持人:熊节(透明),《程序员》杂志编辑,C-View成员
嘉 宾:孟岩(梦魇),联想公司掌上设备事业部应用开发处任职,C-View成员。与侯捷先生合译《C++ Standard Library》一书
金尹(恶魔),上海天宇公司CTO,在《程序员》连载有“自由与繁荣的国度”系列文章
透明:“学C++用哪本书入门”,这是被问得最多的一个问题。但是哪一本书是最好的入门书?似乎很难找到答案。《C++ Primer》太厚,《Effective C++》对读者要求比较高,《Essential C++》又常常被批评为“太浅”。
其实说穿了:no silver bullet。想从一本书学会C++,那是不可能的。有朋友问我如何学C++,我会建议他先去找本数据结构书,把里面的习题全部用C++做一遍,然后再去看《Effective C++》。myan经常说“要在学习初期养成好习惯”,我对此颇不以为然。
个人认为,《Essential C++》适合作教材,《C++ Primer》适合作参考书,《Effective C++》适合作课外读物。
恶魔:很后悔当初买了《C++ Primer》。因为从我个人角度来看,它的功能效用基本是和《The C++ Programming Language》重合。当然对于入门来说,它还是很不错的。但是《C++ Primer》太厚,一来导致看书极其不方便,二来系统学习需要花比较长的时间。对于目前这个越来越快餐化的时代来说,的确有很多不适合的地方,不过可以作为初学者的参考书。现在我以一块K3 CPU的代价把它借给了别人,希望我那位同事能够从中得到一些益处。
如果已经具备了C基础,我建议看国内的书,例如钱能的《 C++大学教程(第二版) 》。(如果没有C的基础还是看谭浩强的C语言)。这本书对C讲得还算比较清晰,有很多习题值得一做,特别是最后的struct和union两个部分。其中的一些算法比较拖沓和繁琐(比如树和链表的遍历算法),读者可以尝试修改这些例子,作为最后对C语言的一些总结测试。
梦魇:这个问题让我想起四五年前的情形。今天对于C++有一点认识的人,多半是从那几年就开始学C++了。那时根本没有品牌观念。从书店里找一本C++书,如果看着还算明白,就买下来。我记得那时候宛延闿、张国锋、麦中凡教授的书都受到很高的赞誉。我个人最早的一本C++书是Greg Perry的一本书,今天想起来,其实是一本打着C++旗号的C语言教程。对我作用最大的一本书是国防科技出版社出版的一本书,书名记不得了,作者叫斯蒂芬·布莱哈。
透明:还记得以前曾批评过一本C++书,是北航出的,整本书就没有出现过class关键字。那本书,说穿了其实只是介绍了C语言和iostream库的用法,根本不能算C++。而当时我常常推荐的一本书是电子科技大学张松梅老师的C++教程。那本书,直到今天来看也没有太大的问题,唯一的缺憾就是由于年代久远,许多东西已经过时了。而对于一本技术书籍来说,“过时”是最不可接受的。
总体来说,那时使用C++的人真是在“盲人摸象”。不过这也有好处,就是对C++的很多细节能搞清楚,以后看到经典好书时比较容易理解;当然坏处就是概念不清,甚至都不知道C++和Visual C++、Borland C++到底有什么不一样。
梦魇:整个90年代,其实大部分人对于C++的认识都似是而非。一开始是等同于Borland C++,后来是等同于Visual C++和MFC。所以一般来说,打着BC和VC旗号的书卖得很好,人们觉得这就是C++。而我比较幸运,布莱哈的那本书虽然从现在的眼光来看谈不上高超,但基本路子是对的。可能是因为原书是给UNIX程序员的培训教材,所以没有让我一开始就形成“C++ == VC++”的认识。
其实一直到1996年,我们那里搞计算机的都是唯Borland C++马首是瞻的,到了VC 40出来,一下子格局全变了。1997年VC5推出之后,书店里MFC书铺天盖地,学MFC的人,头抬得都比别人高一些。不过现在看来,那时候大部分的MFC书都是三流货色。我曾经有一段时间认为,那一批程序员中间有不少被误导了。根本原因就是相对的封闭。
透明:我觉得一本书的价值有两方面:第一,教给你实用的技术;第二,促使你去思考。对于一本介绍VC(或者说MFC)使用方法的书,我根本不希望它能促使我有什么思考,所以我就一定要求它在技术上精益求精完美无瑕。我刚开始用VC的时候,买的第一本书就是潘爱民老师翻译的《VC技术内幕》(第四版),没有受到那些“三流货色”的误导,应该说是很幸运的。
梦魇:1999年机械工业出版社开始出版“计算机科学丛书”,其中的《Thinking in C++》第一版受到了广泛的欢迎。其实我一直不认为这本书很出色,虽然拿过一次大奖。然而我们都得承认,这本书在C++书籍领域里第一次建立了品牌观念,很多初学者开始知道,不是随便买哪一本都一样的。再往后就是2000年的《 深入浅出MFC(第二版) 》第二版,以及侯先生在《程序员》上发表的那一篇《C++/OOP大系》,加上整个大环境的变化,品牌观念深入人心,C++书籍市场终于开始逐渐与世界同步。
回想往事,我的感觉是,那个需要战战兢兢选择入门书的时代已经过去,今天的C++初学者,大可以放心地买口碑好、自己读起来思路顺畅的书,入门不再是太大的问题。还有一些程序员已经学了几年C++,但看到今天出版的一些新书,感觉比较陌生,这也不是什么问题。侯先生经常说“凡走过必留下足迹”,所谓“走弯路”,未必不是一件好事。
至于具体的推荐表,就不好一概而论了。总之在我的印象里,《Essential C++》、《C++ Primer》、钱能教授的C++教程,都不错。甚至有人一上来就看Bjarne Stroustrup的《The C++ Programming Language》,只要他喜欢,也没什么不可以。
透明:我同意你的观点。不管怎么说,编程是门实践性非常强的学问。要想对C++对象模型有深入的了解,最好的办法就是写一串程序去看结果;要想学会OOP,也只能从项目中学。对于初学者,最好的学习方法就是不停地写程序,写真正有用的程序,写到有问题的时候就去查书,于是自然就会知道哪本书好哪本书不好。不过我们的教育制度能不能让大学里的学生们有这样的学习机会,我表示怀疑。
以我的经验,学C++有两个门槛:入门和使用。完全看不懂C++,这是一个门槛,但是只要有一本合适的入门书,很快就能跨过。要想真正用上C++,却不是件很容易的事情。尤其对于学生来说,接触到的东西多是“玩具”,很难有实战的机会。所以经常看见有人问“C++到底能做什么”,这是C++学习中一个比较麻烦的问题。我们都是做了相当长时间的C++程序之后才看到一些真正经典的书,也正是因为走了相当长的弯路之后才知道这些书的经典之所在。所谓弯路,我想也是一种必须的积累。就算一开始就看《Essential C++》和《C++ Primer》,没有两三年的时间恐怕还是难有所得。
恶魔:有两句十分有道理的话,一是我大学的C语言老师说的“写程序不如说是抄程序”,另一句是一网友说的“好的设计来自借鉴,天才的设计来自剽窃”。对于我这个理性批判主义者来说,这两句话的确不太适合。但是无论从哪个角度来讲,对于初学者来说,剽窃大师的作品是通向成功的最快捷径。
我个人认为,对于C++的初学者来说,首先要确定自己专业领域内主要使用的特性的方向。因为C++的特性如此众多,初学者想贪多基本是不可能成功的。C++的编程范式基本可以分为ADT+PP、GP和OO三个方向。对于ADT+PP范式来说,初学者的主要问题不是学习C++,而是学习C的使用。对于这样的初学者,国内的几本书还是写得比较清楚,符合中国人的习惯,比如谭浩强的《C语言教程》、钱能的《C++语言大学教程》。这两本书我首推第一本,因为这一本我潜心研究了一年,这本书当中很多程序是可以剽窃的,而且可以对这些程序进行加工和提升。比如结构这一章中,它所给出的用struct来实现链表、二叉树的算法是相当蹩脚的。学习ADT+PP的初学者将这本书揣摩透以后可以尝试修改这两个程序。另外这本书的第二版稍微涉及了一些关于“类”的内容。学习ADT+PP的初学者,可以不被OO中的一些专有特性扰乱自己的思路,对于类层次扁平、无继承、无多态的程序编写是有很大好处的。
透明:你好象比较推崇国内教授写的书。现在社会上有种不好的风气:一捧就捧上天,一贬就贬下地。就好象对待谭教授的书,前几年是奉为经典,这几年又有很多人使劲批评。学C++更是有点“崇洋媚外”,总是觉得初学就应该看《Essential C++》。我看这种观点也是片面的。
恶魔:当然《Essential C++》也值得看看。但是我个人觉得这本书没有谭浩强的《C语言教程》来得好。主要原因是:第一,C++的所有特性都点到了,但是不深,看了以后会三心二意没有方向;第二,可以抄袭借鉴的例子太少。《C语言教程》中有很多有趣的问题,比如猴子吃桃、汉诺塔等等,这些例子对于刚刚涉及C/C++语言编程的人来说是学习编程很好的例子。《Essential C++》只能是前两本书看透以后,作为学习C++特性的一个过渡性的书籍。让读者真正领略到什么是C++的编程、和C编程的不同点在哪里。
透明:我发现一个很有趣的现象:初学者往往喜欢问“哪本书比较好”,这让我很是不解。这有点像一个刚学打篮球的人问“王治郅和科比谁比较厉害”。当然科比更厉害一些。但如果你是想学打篮球,这两个人都非常非常有资格教你,你跟谁学都能学得很强——关键不是在于你选哪个老师,而是在于你自己用多少功夫去学。
透明:回到原来话题。学会了C++的语法,能看懂C++代码之后,必须有些书来指导进阶(或者叫指点迷津)。我觉得《设计模式》很好,能够让读者看到一些精妙的用法。不过正如我经常说的,模式带来的麻烦和好处一样多,甚至麻烦还要更多。而且,C++本身的问题使得在C++中使用GoF模式愈加麻烦。
梦魇:《Design Patterns》这本书绝对是不可以没有的,而且中英文版都不可少。最初我看中文版,说实话看不懂,但是也不觉得人家翻译得不好,所以就想,大概是原文就很难懂,加上自己水平有限。于是总是想着再找几本patterns的书来看。后来找到几本书,口碑还不错,不过水平高下,一比就出来了,还是那本《Design Patterns》最经典,最耐看。英文版出来之后,两个版本对照看,明白多了。现在觉得,其实就设计模式来讲,把这本看明白了就很不错了,不用再花费很多心思找其他的书。我现在的包里始终夹着这本书,随身携带,有备无患。
至于说设计模式的副作用,和可能带来的弊端,我的体会也挺多。不过是这样,我们想一想,究竟什么情况下设计模式可以用得很好呢?一种是有经验丰富的人引导,比如要是Robert Martin带队,你在某个地方用错了设计模式,他就会指出来,说这里不对,将来会产生什么样的弊端。对于他来说,丰富的实践经验足以支持他进行“预测型”设计。但是大部分人没这个能力,因此我们只好走第二条路和第三条路,就是“试探型”设计和“重构型”设计。遇到一个问题,你觉得用某种模式挺合适的,就大胆地用了,成功是积累经验,发现不好,出了问题了,只好改回来,那也是积累教训。这叫做“试探型”。至于重构,应该算是最有组织、成功率最高的工程化方法。先把问题“quick and dirty”地解决了,所有的暗礁都暴露出来,然后再根据实际情况采用合适的模式优化设计。现在XP和UP都高度重视refactory,UP在Elaboration和Construction阶段都鼓励抽出专门的iterations进行重构。所以说如果组织快速的软件开发,当然比较倾向于这条路——打成功率嘛。
透明:讲到重构,我顺便说说《Refactoring》这本书的影响。从工程本身的角度来说,你所谓的“重构型设计”是没有什么问题的。但中国的开发者(也包括我在内)往往比较冲动,比较容易相信银d的存在。曾经有那么一段时间,我在Java中尝试过了重构的方法之后,又拿到C++中去尝试。结果发现,在Java中速度非常快的重构过程,到C++中就被减慢了。究其原因,就是因为C++和Java的约束条件不同。拿着Java中成功的案例直接套C++,不失败才怪。
所以,我必须说:《Refactoring》这本书很有价值。但对于C++程序员来说,它的价值是让你思考,思考这种方法的可行性。如果一个C++程序员没有打算迁移到Java,那么我必须告诉他:《Refactoring》这本书不是让你照着它用的,甚至不是让你去相信它的。对于C++程序员,《Refactoring》全书可以放心相信的只有第13章,其他的部分,都必须非常谨慎地对待。
梦魇:我还要就“试探型”的方法多说两句,我觉得对于个人发展来讲,“试探”也是必不可少的,撞墙不可怕,高水平的人不都是撞出来的吗?你失败了一次,就知道这个模式有什么潜在的问题,下次再用,就会多看几步,像下棋似的。撞的多了,路数就出来了。
我不知道你们是否有这个感觉:用错了模式,吃了亏,再回过头去翻翻《Design Patterns》,看到人家早就指出来这个问题,不过就是那么几句话,原来看上去干巴巴的,现在觉得句句都讲到心坎上,GoF的形象马上就高大起来,还带着光环,感觉是既兴奋又懊悔。
透明:现在回头来看,我更欣赏myan推荐给我的《Designing Object-Oriented C++ Applications Using Booch Method》。这本书能够帮助C++程序员理清思路培养习惯,可惜国内没有引进。相比后来商业味浓厚的UML系列书籍,我觉得这本书对于面向对象的阐释精辟独到,至今未有能出其右者。
梦魇:刚才我们两人都说到Robert Martin,他可是我的榜样。那本1995年的《Designing Object Oriented C++ Application》,我觉得是每一个C++软件工程师都应该反复研读的书。可惜不仅国内没有引进,在国外的名气也不大。如果你觉得面向对象的那些道理你好像都明白,可就是一遇到实际问题就使不上劲,那这本书就是你的最佳导师。
提到理清思路,还有一本书不得不提,就是Andrew Koenig的《Ruminations On C++》。每个人都应该问自己,我学了这么多年的C++,究竟什么是C++最基本的设计理念?遇到问题我第一个直觉是什么?第一个试探型的解决方案应该具有那些特点?如果你不能给出明确的答案,就应该认真地去读这本书,读完了你就有了“主心骨”。
透明:插一句话,谈谈“推荐书”的问题。入门书基本上是放之四海而皆准的,所以推荐的意义也不大。而入门后的发展方向,每个人不同,这个时候就需要“高人”的指点。举个例子:我学C++的时候,myan还不认识我,所以也没有给我推荐书,我还是学过来了,所以即使你当时向我推荐了《Essential C++》或者《C++ Primer》,我也不会太感谢你;但在我认真研究OO的时候,你推荐Robert Martin那本书给我,对我帮助就特别大,而且我从别的地方也很难找到类似的推荐,所以我就很感谢你。
一个程序员,必须有framework的意识,要学会用framework,还要主动去分析framework(在这方面,《Design Patterns》能有一定的帮助)。但是,真正高质量、成气候的framework的书恐怕也就只有针对MFC的。从这个角度来说,MFC纵有千般不是,C++程序员都非常有必要先去用它、熟悉它、研究它,甚至借助《深入浅出MFC》这样的书来剖析它。不然,很难有framework的意识和感觉。
当然,另一个framework也很好,那就是STL。不管用不用MFC、STL,对这两个东西的掌握和理解都是极有帮助的。最近我又在看《深入浅出MFC》,虽然已经不用MFC编程了,但帮助是一定有的。
梦魇:MFC和STL方面,我还是比较推崇侯先生的两本书《深入浅出MFC》和《STL源码解析》。
《深入浅出MFC》这本书,名气自然是大得不得了,不过也有不少人批评。其实书也没有十全十美的,批评当然是少不了的,不过有的时候我看到有人评论这本书,把它跟Inside VC相比,真的是牛头不对马嘴。
你刚才其实说得很对,程序员应该有一点framework意识。而这本《深入浅出MFC》与其说是在讲MFC编程,不如说通篇是在拿MFC为例分析Application Framework的架构和脉络。所以无论你对于MFC本身是什么态度,这本书对每一个C++程序员都有很大的益处。
透明:是的。《VC技术内幕》会告诉你“DYNAMIC_CREATE这个宏怎么用”,《深入浅出MFC》则告诉你“DYNAMIC_CREATE这个宏是怎么实现的”。所以,如果你只需要在VC下写一些小应用程序,《深入浅出MFC》的价值并不太大;但是,如果你需要设计一个稍微大一点的东西(不一定是framework),MFC的设计思想就会有所帮助。
梦魇:另外,我觉得对于MFC也应该有一个公允的评价。过去是吹捧得天上有地下无,书店里铺天盖地都是MFC的书,搞得大家只知有MFC,不知有C++,甚至直到现在还有人问:“我是学MFC呢,还是学C++?VC++是不是比C++更高级的语言?”MFC成了一尊神像,阻碍了人们的视线。所以得把它从神坛上拉下来。这就是过去一两年有很多人,包括我在内批评MFC的一个目的。可是现在大家视野开阔了,NET也出来了,MFC不再是神像了,少数人就开始以贬损MFC为乐了。我觉得这种态度是不对的。
什么叫好的框架?我觉得在十几年的时间能够象MFC这样保持稳定并且不断进步的框架就是好的框架。可能我们在一些具体的设计问题上有不同看法,觉得“这个地方这么设计不是更漂亮吗?”很多时候是的,但是这不重要,重要的是MFC成熟稳定、有十几年的成功经验,这是最了不起的东西。
另外一点,MFC中间包括着学习Win32 API编程的最佳资料。这是除了其framework方面之外的另一个亮点。我现在使用Win32 API开发,但是经常参考MFC的源代码,收获很大。
透明:STL方面,我对于剖析它的源代码兴趣并不大,毕竟里面源代码多是算法问题。所以,《STL源码剖析》我也只是随便翻翻就束之高阁了。我觉得这本书用来做计算机系的数据结构和算法教材不错,不知道有没有老师乐意这样做。
对于STL,我的态度一向都是“应用至上”。不过,我一直认为SGI STL本身就是一本精彩的书,一本数据结构和算法的经典参考书,同时也是泛型技术的参考书。想知道一个算法是如何实现的,看看STL源代码就行;想知道如何使用type traits,STL源代码里面也有例子。看别人写的书,总觉得隔着一层纱,有点挠不到痒处的感觉。SGI STL的代码写得非常漂亮,一个C++程序员如果不看看这本书,实在是可惜。
梦魇:至于STL,除了《STL源码解析》之外,我举贤不避亲,强烈推荐侯先生与我合译的那本《The C++ Standard Library》。这本书质量之高是无需怀疑的。我现在手边常备此书,随时查阅,对我帮助很大。
透明:C++和Java相比,最大的优势就是它没有一个专门的公司来管它,最大的弱点也是它没有一个专门的公司来管它。Java程序员在学会简单的语法之后,立刻进入SUN提供的framework,一边用这个现成的framework做实际开发,一边在开发过程中继续学习Java一些幽深的特性。而这个时候,C++程序员恐怕还在问“VC和BCB哪个好”呢。这无疑是浪费时间。
梦魇:刚才你说Java和C++的优劣,这个话题已经成了我们这个年代永不消失的声波了。我也不想再谈这个。不过有一点我得说清楚:现在我们很多用C++的人吃了不少苦头,探过脖子去看看Java,觉得它真是太可爱了,这种印象是不准确的。另外,Java也不简单,而且会越来越庞大复杂。在很多场合,Java还不具有竞争力。至于将来如何,我看有些Java爱好者也过分乐观了,似乎计算机科学界几十年解决不了的问题都可以借着Java的东风解决掉,恐怕没那么容易。
透明:那当然。我再次强调:No Silver Bullet。读书很重要,但古人说“行万里路,读万卷书”,还是把“行路”放在“读书”前面。尤其对于技术书籍,如果它不能帮我解决问题、不能给我带来非常实际的利益,那么我是不会去读它的。恶魔说得对,我们这个社会很快餐,我们这个行业尤其很快餐,我们也只能努力适应它。
目前已知几大软件开发培训机构有千锋、柠檬班、博为峰等。其中要说比较好的软件开发培训机构,会更加推荐千锋教育。千锋软件开发培训课程的授课模式采用全程面授,讲师成本虽高,但是效果却是显著的,和学员面对面沟通,了解到学员在学习过程中遇到的问题,动态地调整授课方式。千锋教育就有线上免费的软件开发公开课,。
千锋官网每日更新最新软件开发基础知识内容,巩固日常学习中的基础技能。更有免费的软件开发视频教程帮助学员快速学习。 公司已与国内20000余家软件开发相关企业建立人才输送合作关系 ,每年培养泛软件开发人才近2万人,十年间累计培养超10余万泛软件开发人才 ,累计向互联网输出学科视频880余套,累积播放量超9700万余次。千锋教育采用矩阵式全直营管理模式,现有员工900余人。始终坚持直营模式和矩阵式管理的高效协同,对教学质量和就业成果的管控也是业界其他机构无法企及的。千锋教育自成立以来就坚持全程面授教学服务,严管大爱,全方位督促、跟踪每一位学员的学习进度,确保每一位学员高质量完成学业,顺利就业。所以,选择千锋教育一定没错。
入了门的才算程序员,没有入门不算程序员。
1、程语语言其实是一个很初级的工具,但是又必须熟练的掌握它,学懂一门编程语言就好像学会了写字,但是会写字的人不见得会写文章,而会写文章又不见的写得好。可是如果不会写字,那就一定写不出文章来。
2、在学习C语言之前,应该学好计算机基础。里面的很多概念对于C程序员都是非常重要的。如果在着手学习C之前,或者已经开始学习C,但是碰到了很多问题,应该再把计算机基础的书拿来好好看看。如果有足够的耐心,十足的毅力,应该再学习C语言之前学学汇编,这会对许多比较细腻的概念有清醒的认识。那么可以在看完一遍C语言的教材后再看,但是一定要看一遍,一定会受益匪浅。不管看什么书,先认真地看懂,不要贪速度,应该力求深入的理解。如果能够比较熟练的解决一本教材上的所有习题,那么就应该转入对算法的学习,尽管此时的C语言还称不上精通,有许多细节问题还不了解,许多问题还没有碰到,但是这些问题会在后面的工作和学习中得到解决的。
3、不需要多少资料,掌握一本《The C Programming Language》就足够了。继续学习就更加容易。建议不要找捷径,通过考试除外,真正的水平提高是建立在编程实践积累基础上的,必须一个一个程序的完成才能提高。
总体上分为程序设计和关系型数据库。
A、程序设计
如果按照从理论到应用的过程,程序设计应该是如下课程:
A1、计算机组成原理与体系结构:
例如,处理器结构、原理,机器指令的两种实现(微程序、硬连线)。注意了,机器指令在此课程中被当做研究对象而完全剖析了,而不是使用机器指令。
A2、汇编语言程序设计:
也就是上面提到的机器指令了;顾名思义,使用机器指令去设计程序;当然了,并不是直接使用机器指令,而是使用助记符(助记符和机器指令一一对应),但助记符只是机器指令的另一种形式,有利于人类阅读的形式;当然了,这里肯定需要将助记符转化为机器指令的程序了,这是汇编器(如nasm)的一部分功能了。
A3、编译器原理:
这个可选,A4中会有介绍。这门课程如果弄明白了,再弄明白 *** 作系统和C语言,那么可以很轻松的驾驭不同语言。
A4、 *** 作系统原理、程序设计课程:
这两门课程紧密关联,因为程序的运行环境总是在 *** 作系统之下的(指的是应用程序);C语言,所谓高级语言,一条C语句(准确说,应该是非分配内存的语句),对应多条机器指令;当然了,从C的一条语句转化为多条机器指令(事实上并不全是简单的将下一条C语句对应的几条机器指令直接放在上一条C语句对应的几条机器指令的后面那么简单),这个工作是由c语言编译器完成的(比如vc++、gcc)。
A5、数据结构:
数据结构应该可以在程序设计前,也可以在程序设计后;这是一门前辈们积累下来的经验,如:常见的存储结构,各种存储结构在什么情况下最优最差,对各种结构进行常见 *** 作的过程(在内存级别上的过程);也可以看做是一门理论。
B、关系型数据库
按照先理论后应用的顺序,关系型数据库如下:
1、关系型数据库理论与关系型数据库设计
2、关系型数据库语言sql
C、额外的东西
C1、java
java这门语言不能简单的对待,虽然java的目标是让程序员觉得简单;学习java,除了弄明白以上程序设计部门,还必须要弄明白jvm,关于jvm这里不想解释了,请看一本名字类似"深入jvm"的书籍。
如果你是一名计算机专业的学生,恰巧毕业后还想干程序员,当你在找工作的时候就必须做足了功课,因为程序员不是靠嘴皮子溜,会说,公司boss们就要你,需要先笔试的。
首先我先来说下软件公司大概分几种:
1、纯自主研发型软件公司,这样的公司国内有很多,规模大小不一,例如腾讯,暴风,金山。
2、外包型软件公司,外包型软件公司是指没有自主研发的产品,所有的项目和订单是国外的一些软件公司提供,项目的核心框架和结构已经给出,外包公司只需要组织人员进行代码的编写。
3、混合型,也就是有自主研发也有外包软件。
4、外派型软件公司,这种公司类似于培训机构或者是中介机构,外派软件公司是向各大软件公司输送人员的,也就是说招到人员后根据需要的公司去培训自己招到的人员。被这样的软件公司招到的人员所签的劳动合同是和外派公司签得,也就是说不论你被派到哪个软件公司你都是属于外派公司。外派结束后回到外派公司等待下次外派。
以上就是大概的几种软件公司,由于是刚毕业的应届生,没有实际的项目经验,编程知识也不够丰富,我本人不推荐去外派公司。
无论你想去哪种软件公司,前提都是你必须要有一个很好的编程基础,有技术做支持。
当你在招聘网上投简历,并接到了面试通知,说明你的简历合格了。恭喜你艰难的第一步你迈出了。
下面我来说下技术的内容,也就是当你应聘c或者++成员所需要的技能:
因为刚毕业应届,你没有项目经验。所以基础最重要。
我说下c语言在面试或者笔试中经常考到的内容:
1、运算符的优先级问题
2、选择语句的所有用法与注意事项 (switch)
3、字符串处理函数的使用,要将所有的字符串函数熟练的使用,并自己能编写(strlen等)
4、指针比较重要,几乎关系到指针的基础内容都可能会出。
5、数组和指针的一起使用6、宏定义,几乎每个笔试题都会考,宏定义也是很重要的,一个好宏会比一个函数的功能强大7、字符
以上就是关于小白,想入门程序员,应该从什么开始学,顺序是什么全部的内容,包括:小白,想入门程序员,应该从什么开始学,顺序是什么、到黑马程序员学习怎么样、刚开始学C语言,要看些什么书(介绍几本)等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)