赞
踩
开始自己的计算机学习之路,在学习上面有很多的困难,自己需要克服自己的惰性,对于一个问题要认真对待。自己以自己的方式学习,从为什么从事it,以及自己的从一些博客上看到很有用的帮助文档,还有自己的想从计算机的最开始学起,不论什么,历史是最好的解决方式。现在就开始旅程。在开始这里有引用一篇博客文章《IT学生解惑真经》肖舸 杨中科 左飞 著。
文章中这样说的:韩愈的《师说》中写道:“非生而知之者,孰能无惑?惑而不从师,其为惑也,终不解矣。”有了这些困惑并不可怕,可怕的是不知道如何寻找答案和解决问题的方法。
大学计算机课程学习路线
大学生计算机课程学习路线:如果你是一个计算机相关专业大学低年级学生, 那么这篇文章就是为你写的。 我之前曾经发过一篇博文 《大学计算机专业那些课》 来谈论大学中各门课程的意义和重要性。 那是针对更宽泛的范围来说的,这篇文章则更加精要和简约。
程序设计类课程,包括C语言、C++或者Java——当然每个学校开的课不一样,有的可能还学VB呢。这些当然有用了,以后工作就靠它们了,不会语言怎么编程呢?
计算机科学类的三大核心课程“数据结构”、“操作系统”、“组成原理”——超级有用啊,不得不学好才行。数据结构的意义和学习方法先前的文章我已经谈过了,这里就不多说了。操作系统和组成原理关系到你对计算机理解到什么程度,尤其做一些底层开发更是不可或缺的知识。将来是当软件民工还是当研发人员就看它们了。不过目前国内的教材真烂啊,大都晦涩难懂。我还是推荐几本参考书吧,仅为参考书——操作系统方面,国人写了一本类似叫做《自己编写一个操作系统 Orange》的书,(自己现在在学习一本《三十天自制操作系统》是日本的一本书不得不承认真是不错,本人之后会有自己的学习过程,原作者说的这本自己之后在抽空找找,风向给大家)具体书名已经记不太清楚了,反正就是讲作者自己编写了一个操作系统的全过程。组成原理,我推荐哈工大唐朔飞教授编写的教材,清晰易懂,实为典范。Willam Starling的那本超级名作也不错,现在已经出到第7版了吧,不过感觉那么厚一本不是所有地方你得需要看,呵呵。
计算机网络、数据库原理、编译原理、汇编语言等——有用,但又不像前面那些课程那么有用。而且很多本科生都认为编译和汇编都是大学里最难的课程,无异于天书。这也跟方向有关啊,如果你将来从事网络类工作,那当然学好网络很关键啦。如果做嵌入式开发,不懂汇编肯定也不行。我的意见是别把它们想得太复杂,别被它们给唬住了,只要用心,这些东西并不难,只是很麻烦而已。
数学类课程——微积分、线性代数、概率与统计等,数学是理工科的基础,没有数学哪来的计算机。而且考研也都是必考的,所有它自然有他的作用。不过如果你就想当个程序员或许它们的作用就容易被淡化了。一些专门的方向对数学要求很高,比如做图形图像方面开发的,整天玩的就是数学。但是如果你只是做一个大规模软件工厂中的一个组装者,只是开发一些应用系统,那么数学的作用对你影响并不大。这个就看你自己的未来的方向了。只是在找工作的时候,一个数学超牛的人应该找不过一个C++超牛的人,呵呵,不过我这么说可不是说数学没用啊,还是那句话,这跟你个人志向有关。(本人还认为自己认为学习数学还不错的话,参加一下全国大学生数模竞赛)最后补充一下,“离散数学”不太适合归为我所讲到这一类。离散数学其实应该是数据结构的一门准备课程,数据结构最开始的名字就叫做离散数据结构是从离散数学里衍生出来的课程。加之离散也并不复杂,所以就当是长见识了,好好听课就OK了。外语——这门课很特殊,反正就是有用,学好了就业好、工资高,好处多多。英语算是很重要的,在于你的用的计算机的语言,一些教材,最新的观点很大一部分来自于美国,所以你学好英语对自己有很大的发展机会。在计算机的方面日语也是有很大的用处,日本对于计算机的看法有一些独到之处。韩语也是要学的,韩国的计算机的发展也是很迅速的,最近的热门的游戏的开发的是韩国的制作,所以我们还有很多向国外计算机方面借鉴的。
作者文中写道这些:大学中的课程安排第一条线的第一门课程是“数据结构与算法”。一些有了语言基础之后, 为了更好的使用语言去解决问题, 就必须学习结构知识和算法。“数据结构与算法”的后续课程是什么?答案应该是《编译原理》 。很奇怪吧?课程就是这样设计的, 其实这个路线也不是我发明的, 国外大学的CS Course 的体系也是这么设计的。 编译原理说白了就是介绍编译器如何工作的, 是让计算机理解计算机语言的一种方法和理论。 这个工作过程之中蕴含了大量的算法, 而且是非常复杂的算法, 很多人甚至认为编译原理是计算机专业本科阶段最难的一门课程。 主要就是因为这里面的算法太复杂, 当然也会用到很多结构, 树可能是用得最多的。 当然, 这就是相当于是数据结构与算法课程的一个后续性课程, 类似一道附加题。最近听一个学生说有些学校本科已经取消这门课了, 我想应该是较少一部分学校的做法吧。 不过, 中国的学习并不太重视这门课倒是真的。 一般课程设置就是一个学期左右的课时。 但是一般的国外学校这门课都要学上1 年, 甚至两年之久。 这条线路到编译这里就应该是终点了。
大学计算机课程学习的第二条路线。在你具有了一定 C 语言基础之后,除了前面讲的第一条路线以外,你已经可以开始下面这条路线的学习了。为了更好地探究计算机系统的研究机制,在学习了C 语言之后,下面一门需要学习的
课程是“汇编语言和微机接口技术”,这门课程包含两部分的内容,一部分就是汇编语言,汇编是一种更底层的语言 (相对于C 而言) , 说白了它就是一种 “用助记符描述的机器语言”。很多人刚学汇编的时候都觉得很复杂, 因为它跟硬件紧密相关, 就是那些个寄存器也够初学者糊涂一阵子的。 这门课程的另外一部分内容是微机接口技术, 目前国内高校这部分内容都是基于 80X86 系列芯片的。已经可以看到这门课其实涉及到了很多硬件的知识,其实还不
止,关于 I/O 控制,寄存器,中断,这门课里都有体现的。接下来要学习的内容就是《计算机组成原理与体系结构》 。其实我特别奇怪,我在写学习路线 1的时候,有读者认为在学习C 语言之前,或者在学习其他专业课程之前, 最先要学的就是这个东西。 我不知道大家是不是觉得大学第一门专业课就是这个, 我觉得这么想的人是不且实际, 信口开河的。 这门课程还是比较深的一门课程, 在汇编和接口之后安排这门课程是比较的。 不过国外的一些先进的计算机教育体系确实也有在较开始的时候开设一门概论课来作为导引,有时候叫Computer System Introduction,有时候叫Computer Culture,其实内容差不多,但作为计算机专业课程的导引课程,这些课程的设置里面已经设计到组原和 OS 的初步内容了。但这和 Computer Structrue & Architecture 还是有区别的。(本人一名大学生,在一所不是211不是985的学校里,我们课程中的一门课叫:computing system是作者说的国外一本用来引导计算机学生的,这本书中讲到了,很简单的lc-3设备,本人十分推荐这本书,也是位置后学习课程的帮助)接下来的一门课程是《计算机操作系统》 ,如果外行听起来可能觉得这个课应该是学如何使用操作系统的吧,就像“WindowsXP 速成”?非也!这门课程是讲OS 是如何设计的,或者说是如何实现一个 OS (当然做要比说起来难多了) 。 之所以这门课程被安排在组原之后,那是因为这反映了一种自底向上的学习路线。操作系统当然是在计算机系统之上来搭建的。向调度啊、 虚拟内存啊这些问题都是由操作系统来控制的。 我最近所写的 《代码揭秘》 基本上是属于这条路线上的内容的, 不同的是我采用了一种更贴合读者理解方式的描述, 因为在讲述这些原理之前,我都是采用 C 语言实例来作为引子的。有空也推荐大家看看,应该学校里的图书馆是可以借到的。 前一阵子一位四川大学的计算机青年教师给我写信谈起我这本书时,我才知道高校的图书馆里原理已经可以借到了。以上就是大学计算机课程学习的第2
条路线,下面我们来讲最后一条路线。
最后一条路线属于应用型的, 也就是说当你学完了基本的原理之后, 一方面为了日后更好的工作, 另一方面如果从事研究工作也可择其一而继续深入探究, 那么最好总之要上升到一定应用层面的东西。在你有了一定的 C 基础之后,学校可能会开一些面向对象程序设计方面的课程,可能是 C++或者 Java, 因为面向对象的语言在实际开发中正广泛的被使用。 无论是C++还是 Java,跟 C 来说本质上都是语言,只不过他们多了一些OOP 方面的特性。如何学好它们,我前面的文章中已经谈过,这里就不多言了。接下来的一门课程应该是“数据库系统”, 这门课不是教你怎么使用SQL SERVER或者DB2 的,学校里的课程远没这么前沿。数据库系统这门课依然偏重更多理论,尽管数据库相比于组原和 OS 来说已经是上层建筑了。这门课讲的多是些数据库系统设计方面的原则,例如如何解决关系问题或者 SQL 语言等等。再之后可能会学的课程是“计算机网络”,这门课里会更加系统的向你介绍网络方面的知识,TCP、UDP,HTTP 这些名词会粉末登场。注意这门课一般不是教授你如何布网的,例如如何配置路由器这种东西一般是CCNA 里面的内容了。这门课里讲的更多的是上层原理与协议。
以上就是一般的大学计算机课程学习的几条路线。 他们彼此联系, 共同作用。 注意我这里讲的内容不是给你推荐学习方向, 而是告诉你大学里会学什么, 之间联系如何。 现在很多人都有这些,浮躁之气甚嚣尘上,胸中无物自然谈吐轻浮,看什么都不求甚解,浅尝辄止, 多少有些自以为是、 妄自尊大了。 我也在时常告诫自己,希望大家都能保持一颗平常心,戒骄戒躁,平和的埋头学习吧
对于考研的同学,我还是一名本科生,对于这些还是看杨中科老师写的这篇文章吧,http://blog.csdn.net/liukehua123/article/details/5421727
职业生涯第一步城市的选择:
每一个城市都有它的文化,选择一个城市,就是选择一种生活方式,选择一种生活态度,往宽里说,甚至就是选择
了一种人生。一个人,生活在一个城市中,或多或少,都会受到这个文化的影响,你每天上班下班,接触到的每一个人,你的老板,你的同事,你的朋友,你的夫人(或者老公) ,这些人构成了你的生活圈, 你每天的言谈举止, 其实都在和这些人互动, 而这些人与你沟通过程中, 体现出来的价值观,对人物、事物正确与否的判断标准,虽然没有明确的文字说明,但日久天长,慢慢地你能感觉到,并且受到影响,这就是文化的威力。中国有句古话, 叫做“入乡要随俗”, 其实就是讲的这个道理, 即一个人到了一个地方,要尊重当地的文化。
女性有女性的弱点, 生理上的咱们就不说了, 其实对于办公室工作来说呢, 问题不大, 关键是结婚生孩子, 根据劳动法, 女性一般是4~6 个月的产假, 这在很多小公司来说,一个人接近半年不上班,还拿薪水,确实有点难以接受,因此,在招聘时,不知不觉就对女性有点回避倾向,就造成了女性求职困难的现状。一个公司,如果要做大做强,做正规,必须正视这些劳动法规定给员工的基本福利, 如果老板刻意回避这些话题, 应该说, 这家公司也确实做不大。至少,我到现在没有看到哪家超过1000 人的大中型企业,里面一个女人都没有的。
目前女性就业困难,关键还在女性自己。
比较男生和女生, 就可以看出显著差异了, 其实男生有时候也想靠, 但是没得靠啊, 反而, 还有个女生在靠自己, 自己还要撑起一片家庭, 那么, 你说男生求职拼命不?但我还是得说, 前面女生的这种思维是严重错误的, 夫妻也是经济共同体, 双方需要共同完成家庭建设,这样的家庭才稳定。一个女性,如果觉得职场艰难,就打退堂鼓,那,不管是不是程序员,其实我觉得她什么职位都找不到的。这样还有潜在的恶果, 现在有很多闪婚族, 出了校门就结婚, 我认为和女性的这种依赖思想有一定关系,但这样的婚姻,是不是稳定呢?现代女性,最好有一份自己的事业,不要轻易依赖别人,记住,今天你有优势,别人会爱你,但是明天当你优势丧失,而男方优势突显的时候,很多时候,家庭并不是很稳固的。最好的方法,有份自己的工作,有份自己赚的薪水,可能不多,但是家庭建设有你一份,男方如果动不动就动歪心思,就是他无理取闹,打官司他都打不赢的。这也是保护自己必要的方法。当然, 也不要走另外一个极端, 动不动就以女强人自居, 你的事业是第一位的, 男人天天在家里要给你扫地做饭端洗脚水, 这也不好, 中国社会, 毕竟几千年, 有个文化风俗在里面, 女性再赚钱能力上, 总的来说还是不如男方的, 以后家里的顶梁柱还是男方, 那么平时在家里,让着男方一点,家务活多做一点,让男方回到家,有个休息的感觉,能放松能感到温馨,这样的话,这个男人就是你的,打都打不走。呵呵。
总结一下,女性的工作问题其实比男性复杂,中国的男性,一般都是一门心思顾事业,把事业做到最好, 而中国的女性, 永远需要在事业和家庭之间求得平衡, 既不能没有自己的事业,也不能放弃家庭,这很难的,不过,慢慢锻炼,总会找到办法。我的经验,能把握好这个平衡的女性,一般这辈子都比较幸福。所以, 针对你的问题, 我觉得要辩证地看, 既要看到, 找份工作对你很重要, 也要看到,作为以后家庭中, 主要负责家庭事务的成员, 你的工作不要一味追求高薪高职位, 要寻求一个合适的职位, 能满足长期工作不失业, 但也不能太苦太累, 搞得家庭无法维系。 这才是比
较周全的解决之道。
现在我们回过头来看看程序员, 其实程序员这份工作, 我觉得女性可以做的, 程序员有很多加班的, 但是这往往是工作刚开始, 没有太多经验的情况, 待工作一定年限, 掌握了一定经验, 加班会越来越少, 其实大多数程序员工作岗位, 是不出差的, 基本上是朝九晚五制,做久了, 收入也不低, 可以满足一个女性对事业和家庭的平衡。 因此, 我建议你大大方方就做程序员,找不到,努力找咯。
嗯,再多说一点,就我个人的经验,程序员的加班,往往都是由于bug 导致的,大多数时候,公司在安排项目开发时间时,时间还是给得比较够的,至少是评估过的,但是,往往是后期出现了很难跟踪,很难解决的bug,导致项目进度大大滞后,时间突然变得很紧,于是出现大量的加班,有经验的朋友可以想想,自己以前的加班是不是这样。
去 CSDN 或者其他什么网站的项目外包栏目看看,里面的需求,就是别人肯付钱的需求, 自己试着实现一下, 比较练技术。 如果能卖出去, 就表示技术练差不多了, 可以凭这个项目经验找工作了。 个人感觉, 这个项目经验在找工作的时候, 有时候比学历证书管用。
今天看这 VC 的书,明天又看 Java,后天又看 C#,东搞西搞!看到别人做网页。自己 兴趣了来了。好,学html 语言,我也做网页,听说做网页要会“网页三剑客”,所以又想学 Dreamweaver、Flash。后来开始知道有 JSP、PHP、ASP .NET做动态网站这玩意儿。也想去 学,学学学……这是几乎所有在校大学生的通病。
自己深入学习一些,把问题做的透彻一些,很多的语言是相通的。尽量不要去学一门所谓“有前途”的新语言, 因为你去学一门新语言就要把很多精力耗费在语言、 语法本身, 而耽误了编程的实战, 而以一个已经学过的语言来学习的话, 起码语法本身不用再去学、 开发工具本身不用再去熟悉,只要研究怎么使用这门语言开发有用的程序就 ok 了。
工程化代码, 以及简单代码, 不容易出错的代码的一些基本写法
1、工程化代码,首先考虑是团伙作案,独行大盗的时代已经过去了,呵呵,因此,特别强调“人”能看懂,很多教科书上给出的示例,一切以计算机能正确run 为准则,写出的代码只有计算机能看,作者本人再看都要想半天,这不是好代码。工程项目团队, 很多时候都是大家合作开发, 你的代码, 可能使用者不是你, 下一个维护者也不一定是你, 与人方便, 与己方便, 当有一天你对着一堆看不懂代码大骂的时候,想想,从我做起,给别人点方便。
2、简简单单写程序,不是说惜墨如金,多敲一个字符都嫌累。在 Unix 时代,没有显示器,都是电传打字机,编辑器也是行编辑器,因此,每多敲一行字,都是钱,再加上那会内存小,编译器能用的空间有限,因此,Unix 的老程序员,对于变量名,函数名,标签,珍惜得很,很少用2 字符以上的,这是历史因素,人家穷,小家子气。不过,现在大家用的都是以G 为单位的内存,液晶显示器,IDE 又那么强悍,拜托,起名字给长点,有点表意性好不好,别一段程序写下来,满篇都是“你猜”两个字,看程序的人要疯。
3、注释,很多教科书,一说编程规范性,就是注释,好像这是程序易读的唯一方法,大学里面的老师, 没见识过大型工程开发, 没一次干过几十万, 上百万行代码, 这么说也是可以理解的。不过, 工程程序员, 项目压力一般都很重, 在开发时, 所有的注意力都在如何实现需求上,很少有人能有闲心,有耐心,精雕细琢自己的代码,甚至,很多代码,都是交工前最后一刻写出来的,因此,要求详细注释,在工程开发中,实际上没有可操作性。起码我自己都做不到, 这就是为什么我特别强调命名表意, 程序写短点。 即使程序员没有注释,看字面意思,也能大致理解。这么说吧,看别人的工程代码,没有注释,是正常,有注释,是福气。嗯,有时候是霉气,很多程序员,开发时写注释,后期出现bug,开始疯狂 Debug 的时候,那会哪有时间改注释哦,能把程序改对,都是烧高香了,最后,很可能注释和代码是反的,顺着注释看,顺理成章就掉坑里去了。还是那句话,别期待注释,别全信注释,注意自己的程序,自身的表意性,至于你自己写不写注释, 如果在我的团队里面,.h 文件里面的公有函数和方法, 一定写全, 每个入口参数的含义,返回码的含义,越多越好,别人正确调用你的程序,bug 就不会找你麻烦,这是为了你自己。至于其他方面,爱写不写,我不管。
4、再说简单,简简单单写程序,可不是说你惜墨如金,是说让读的人,感到简单,脑子里不转弯。这很好理解,我们做出一个产品,好不好,用户说了算,你的软件产品可能有特定的用户, 但你的代码本身, 也是产品, 你的团队伙伴就是你的用户, 大家可能听说过换位思考, 我们写程序的时候, 除了想象客户会不会骂娘, 还有没有想想, 以后读我们代码的人会不会骂娘?团队中有规范,按照规范来,不要讨论合理不合理,先照做,大家养成阅读习惯,看代码就不难。
写代码, 不要耍酷, 年轻人, 或多或少都有点爱表现自己的欲望, 人之常情, 可以理解,不过要控制。 哪些为了一个算法的优化, 绞尽脑汁, 最后把三个变量节约成一个变量, 把四重循环节约成一重,看似水平高了,可是,算法复杂度高了,看的人就晕了。不想挨骂的话, 老老实实的写吧。 函数内部的变量, 只要不是动态申请的, 一般都建立在浮动栈上, 随着函数的退出, 就会自动拆除回收, 给下一个函数使用。 对象内部也差不多。所以,不妨多用几个变量,老老实实地写,不玩什么花样,看得人看得轻松,其实自己脑子也清晰,不容易出错。武侠小说中, 说越是大宗师, 越不喜欢用奇门兵器, 一路简简单单的太祖长拳, 破尽少林寺七十二绝艺,这说明什么?把事情弄复杂,弄玄妙,不算本事的,能用最简单的招式,化解最复杂的问题, 内力够了, 自然可以。 修炼内功, 就是减少对招式的依赖, 简单, 直接,直奔要害。以最小的成本,获得最大的收益,大家说,是不是?
5、规矩,很多人,一说工程化开发,就认为编程规范很重要。于是开始找大公司的开发规范,于是,网上的华为软件开发规范,传来传去,大家奉为圣旨。谁要敢说半个不字,管杀不管埋。规矩是人定的,每个人群,每个开发团队,都有自己的开发方向,常用工具,所以,编程规范其实是很小范围的东东,都是针对目前项目最有效的,很难想象,一个做.net 的开发团队,拿着华为用 gcc 做 VxWorks工程的编程规范,能做好事情。什么规矩是最好的?我的理解, 最合用的就是最好的。 系统设计完成, 开发之前, 项目
团队在一起开个短会, 讨论一下规范, 把大的几条定出来, 之后就随着项目的进行, 不断补充罢了。很多时候,项目经理也要尊重程序员的习惯,一个程序员用VC 的 IDE 习惯,总不能为了写 gcc,强迫大家都用 vi 吧。这里面有个个性化的规矩问题。大家别不习惯,出去之后,走上社会,大家会发现,很多东东都是灵活的,不是一成不
变的,很多人就在哭,这个世界太黑暗了。其实是自己不能灵活变通。项目组,有牛人,大家一般会跟着牛人走, 他的恶习都可以变成团队规矩, 这也合理, 没有牛人, 大家一盘散沙,就在接口处统一,里面程序乱点没啥,也可以,方法太多了,只要能出活,出来的代码,大家基本能看懂,其实就 ok 了。像那种,还没做事,先说一大堆规矩,程序员学习规矩和习惯养成都要半天,这些,最后都是项目成本。江山易改,本性难移,做项目管理,何苦来和每个人作对,尊重一下大家的习惯,直接把习惯做成规矩,不是更好?
6、笔者生活中,遇到很多了,坛子里面喜欢拍砖的人,也不少,开口就说,这个世界需要依赖工具,自己造轮子的人是笨蛋。这个话确实见仁见智。很难说对不对,不过,笔者建议,初学者还是少用别人的轮子。大家毕业,走上工作岗位,还有几十年呢。谁都不知道这辈子是不是一定在某个平台,或者某种语言,某种框架下写代码。一旦年轻时, 习惯了享受某种框架的便利性, 就很难深入思考了。 那随着年纪增大,走向架构师岗位的时候,由于很多底层的特性思考不够,会后继乏力。我们说,出来混,总是要还的,现在享受了,但是,这辈子的债,总得换,到三四十岁再来重新学习研究,会很难的。
很多人大言不惭,一说就是框架,以框架搭建工程固然很快,但是,想想看,做框架的人, 和用框架的人, 哪个水平高?哪个收入高?其实很多时候, 企业的架构师, 就是针对项目或产品,为项目团队制定本企业合用的框架的。学着自己写队列, 学着自己写堆栈, 再代入到实际工程中测试, 做一些量身定做的优化,
你的水平会迅速提升的。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。