51Testing软件测试论坛

标题: 我大学是如何学习coding的 [打印本页]

作者: cleverman    时间: 2007-3-31 04:31
标题: 我大学是如何学习coding的
记得大一学PASCAL的时候,觉得特别的难。刚开始接触,很难理解计算机的语言。虽然最后考了95分,可是根本没有真正的学会。后来又学了C语言,也没有什么coding的感觉。一直到了大三的第一学期,还是对计算机一窍不通,甚至不知道应该如何开,关计算机。看到非计算机专业的朋友熟练的操作着计算机,心里真不是一个滋味。也有大专的朋友show给我他的C,C++的程序,给我海阔天空的讲解了一番,心里真是佩服。大三第一学期过后的春节,说通父母给买了第一台计算机,从这个时候就真正开始了我的coding学习。

首先是要把C语言补回来,把C语言教程看了一遍,把语法理解,练习了几个小程序,找了找感觉。这个阶段是很快的,可能就是几天的时间吧,毕竟以前还是学过C的,然后开始学C++。当初问过老师,学C++需要多长时间。老师的回答是三个月。买了本C++教程,一天看完。心里很不以然老师说的三个月,感觉跟C差不多,就是多个class。后来就买了两本编游戏的书,开始模仿和练习编游戏,这样在当时我们的机房DOS系统下,我是专业里唯一一个能用GUI编程序的人。所有的assignment,我都编两个版本Text mode and UI mode, Text mode送给好朋友,UI mode自己用。这样半年之后,我才突然发觉,原来这才是C++。自己用了半年的时间才真正的学会C++。(C与C++的最大区别在于设计的思维:面向过程和面向对象,C到C++的转变是需要一个过程的)。这个时候再看当时show给我程序的朋友的C++的程序时,才发现他根本没有学会C++,他只是用C++在做C程序而已。

C,C++学会了,下一步怎么办?我的性格是愿意学习最难的东西,因此就选择了VC。当初去北京书店门口看到了广告“VC程序员试用期月薪4000”,觉得是天文数字了,也更坚定了要学习VC的决心。当初的学习条件还是非常艰苦的,市面上就两本书,我还很清楚的记得,一本是四川大学出版的,一本是龙门书局出版的。四川大学那本是入门的傻瓜教程,主要是教你怎样使用Visual Studio而已,没有深入的学习指导。龙门书局是翻译的微软的,讲的对我来说太深了,没法理解。因此主要学习川大那本,可是那本书还有问题,我按照书上所讲的去做,行不通。VC学习陷入困境,没有书可以查询,没有人可以问,自己也没有理解VC的精神。只能放弃VC,转而VB。VB当然很容易了,基本上不用怎么学就上手了。半年之后,有朋友想让我帮助编一个截取VCD片断的小程序。我用VB实现之后,准备给他用。然而,我却发现缺少dll, 这样我就把这个dll铐过去,又发现缺少其他的dll。搞了几次还不行,我也恼火了,就想能不能用VC试试。这次又拿起VC感觉就好多了,不但实现了这个小程序,并且第一次感觉VC入门了。从此之后,就走向了VC这条路。基本上来说,我是学校唯一一个会VC的人,而且几年以后也不过只有两个人会VC,另一个是跟了我一年,我带起来的。后来龙门书局的书也能理解了,再后来VC的书就慢慢多了,学习起来就越来越方便了。以我从小到大的学习经历来说,学习托福那段时间是最苦的,学习VC的这段时间是最难的。后来也没有再碰到这么大的困难学一个东西了。

Basically, 大学学习coding的时间是一年,半年从C到C++,半年从VB到VC。一年之后去单位做实习了。这一年发生了三件时间,比较值得回忆。

1。女朋友是通信系的,我帮助做了一次C语言的作业,没想到老师拿做范例在全系进行讲解。

2。MIS课程,我设计了一套足球俱乐部的管理系统,包括球员状态的纪录以及出场阵容的预测。老师对我的设计打分很一般,第一次上机我去找老师。因为家里有电脑,而且也喜欢编程序,因此我所有的课程都是第一次交作业,让老师验收。这个做法遭到了不少老师的抵抗,一直到我在国外读研究生的时候,才有老师欣赏。去找老师验收作业,他以为我是要讨论给我设计的分低的问题,就说“你设计的很好,可是不可能实现,因此我没有给你高分”。我说“我已经做完了,是来找你验收的”。他的脸色很不好,说“我一会儿去”。我走了,可是左等也不来,右等也不来,又看到别的同学叫他,他都出来,我也急了,硬把他给揪过来了。他看完之后没有说什么,问我是一个人做的,两个人做的。因为,我要帮一个哥们,就说是我们两个一起做的。他就说,“如果是你自己做的,我给你10分都嫌少(10分满分),如果是你们两个做的,我顶多给你8分”。后来的分数是7分。最后这门课程是我大学以来分数最低的(除了编译),不到70分。后来我读研的那个老师,也是说我的设计实现起来很困难,让我修改,我后来让他surprised的了,他却给了我全班最高分,唯一的90分。不过大学这个老师,后来对我还是很好的,在我困难的时候,帮了我很多,后来也含蓄的跟我表示过,不喜欢别人什么都没做,我帮他们。

3。编译原理的课程,因为不喜欢老师的教学风格,因此上课从来不带课本,都是自己拿本C++的书座在最后一排,自学。被老师看到过一次,问我为什么不看课本,我说没带,他再问我,我就一话不说了。应该是记住我了,而且很生气。这门课程上课没有听,下课也没有学。最后到了期末的上机实习,作业是Basic的解释程序。听说上一届的没有一个人能做出来的,我就回家了3天,一边自学编译原理,一边设计,编程。3天之后回到学校,大家都用怀疑的口气问我怎么样,没想到我的回答是“做出来了”。我们这届最后还有另外一个人做出来了,因为我是用C++,他是用PASCAL,而要求也是PASCAL,因此其他的人基本都是抄的他的了。第一次上机,我跟那个老师说,可不可以用C++,他说可以。我就说我做完了,你验收吧。他看了之后说了一句“挺好”。后来这门课,我不及格,上机10分给了我5分,理由是我上机时间太少。这事情在我们学校闹得很大,因为我平时的成绩基本都是80多分,90多分的也不少。后来进行试卷的review,其他学校的老师都不敢过来,只能自己学校review,最后的评语是“***同学不是无稽之谈,老师也有犯错误的时候”。可是,为了系里在学校的面子,还是牺牲了我。他们保证我补考肯定没有问题,可是我已经不敢相信他们了,因为补考不过,我毕业都有问题了。因此就在大四的时候多选了两门课来代替这门课的学分,也造成了自己断绝考验的准备,毕业就工作的现实。

学校是挺打压人才的,当然自己那个时候也很不懂事,在注重技术的时候,忽略了做人的一些要素。这里我想说的是,编程序一定要靠实践的积累,只有多动手,才能更深的理解问题,另外技术牛了之后也要更注意做人的方式,在中国很多时候会做人比会工作可能更重要。两个方面一起抓,以后才更容易有更好的发展。希望我的经历能给大家一点借鉴作用。
作者: hpty    时间: 2007-3-31 10:47
强~ 学习了~
作者: shanxi    时间: 2007-3-31 11:45
做人更重要

技术不是那么难
作者: ziyouzizai    时间: 2007-8-30 16:25
先做人,再作事情。

人生中,有很多的事情,我们无法预料。年少时,不谙世事,会走些弯路,没有关系,只要怀着一颗正直、进取的心,我想,通过多年的积累,是会有所收获的。
作者: coolerwyf    时间: 2007-8-31 15:05
写的很好,很贴切
努力学习中
可惜偶在学校都没怎么学,一是学校也没这样的实验室,没这样的环境
现在的公司有点象后学生时代,所以学习的机会还是蛮多的,但是工作了三年以后再回到以前学习,心境肯定不一样了,不过都要努力,呵呵
象牛人学习
作者: kolecat    时间: 2007-8-31 15:56
虽然一直立志要做编程,但是一直也好好下功夫,看了楼主的文章挺有感触的,为了实现理想,要抓紧好好努力了
作者: seifer1754    时间: 2007-8-31 20:24
cleverman 兄 当时真是年少轻狂啊。

不过很奇怪,为何你曾经说过,毕业的第一份工作才1.2K ? 以你的实力,起点怎么会这么低?
作者: cleverman    时间: 2007-8-31 23:56
是1.1K。
有这样几个原因:
首先,我是在小城市上的大学,自己并不了解外面的情况。学校一直强调的是工作难找,能找到一份工作就不错了。(当时学校还是包分配的,所以,大家都有工作是他们的任务,好不好就另说了。这种宣传可以让我们无条件的接受他们介绍的工作。)在我们那个城市,一般的工资就是几百块钱,一直到现在也是这种状况,上千就很好了。一直到我去我们的省会人才交流会,给省的科学院投了简历(就投了这么一家,也是第一家自己去找的工作),没想到对方对我非常的欣赏,当天下午就打电话让我去他们那里参观,并且放出话来,他们已经收到了无数的简历,第二天的交流会他们不会参加了,不过他们把我排到第一位。这样我才发现,外边的世界不是像学校宣传的那样恐怖,工作难找。因此,开始去北京找工作。(最终找到外边的工作,还给学校交了一万多的违约金呢)
另外,由于受当时传统思想的影响,我们找工作的目的就是要北京户口。这样我们的选择就是那些有户口指标的单位,这样的单位一般来说都是1000多,是个正常价钱。另外就是工作要五年,违约金五万。我第二年跳槽走的时候,交了几万的违约金。如果不考虑北京户口,肯定能找到更好的工作,比如工作第二年跳到华为就好几千了。
还有就是我们学校虽然是第一批重点,可是牌子在外边可不响,北京很多人不知道。因此找工作的时候没少看白眼,直到我进了华为以后,再找工作才基本脱离了被别人看扁的情况。因此,我也一直说,出身低发展起来就要麻烦很多,需要更多的辛苦和努力才能赶上那些出身好的人。这一点,我还是非常感激华为的,至少我认为他们是不拘一格选人才。(我当时进去的一批10个人,只有我一个本科,其他9个都是重点大学的研究生,博士。后来在深圳第二次面试,淘汰了两个研究生,还是留下了我)
作者: cleverman    时间: 2007-9-1 00:21
还有就是以我当时的背景,找到这样的工作已经算是很不错了。同事基本也都是名牌院校毕业的。虽然没有顶尖院校的,但是比我的学校也好很多了。比如,天津大学,西安电子等等。这就是为了身份付出的代价。正如为了美国的绿卡,中国人的工资都要比美国本国人的工资低一些,甚至在有些公司就是做廉价劳动力。不过当时我在同事中的水平是没得说的,公司对我的公开评价就是不像一个刚毕业的学生,因此也是第一个跳槽走人的。我们那个单位或者类似的单位都蜗着不少能人,出国以后也常常能碰到。当年在多伦多Bus上,突然有人跟我说话,吓我一跳,原来跟我是一个单位的,曾经在公司见过我。当时真是别有一番滋味呀。华为出国的就更不要说了,基本上你去哪里身边都能找到。当年在学校一个office5个人,就有3个是华为的。
作者: 我的品牌ccc    时间: 2007-9-1 10:03
听说上一届的没有一个人能做出来的,我就回家了3天,一边自学编译原理,一边设计,编程。3天之后回到学校,大家都用怀疑的口气问我怎么样,没想到我的回答是“做出来了”。

人与人的天赋相差还是蛮大的 虽说可以通过努力达到同样的效果 cleverman也正是自己的天赋与汗水为自己赢了现在的一切!
作者: wuyuanzhe    时间: 2007-9-1 12:04
lz高手啊,崇拜一下
作者: zengfanjin5588    时间: 2007-9-3 17:05
我看了楼主的一些帖子,不得不佩服楼主的文采,但是我觉得真实性实在有点让在下难以接受,其他战友觉得呢?
作者: zengfanjin5588    时间: 2007-9-3 17:07
唉!!真没意思,能说说你是那个学校毕业的吗?!如果像你这样的,早被媒体发现是神童了@!!
作者: cleverman    时间: 2007-9-3 17:43
你的想法很正常。很多人都曾经有过你同样的想法。
不过我认为我不能算神童。我看过报纸介绍一些人不怎么学习,轻松考上清华的。我认为,我跟他们还是有差距的。
作者: wwwyhx    时间: 2007-9-5 12:43
你能把你哪个3天做完的东西的要求说一下吗,我没毕业但想试试。再有我想问问你,一个开发人员接到的任务模块一般有多大(多少行代码),一般要求在几天内做完,开发人员参与设计吗。我记得以前你说过你在两年内把一个开发的工资涨到了9000每月,能说说他的能力吗
作者: cleverman    时间: 2007-9-5 13:32
那个就是一个Basic的解释程序。就是你输入一段Basic程序,然后输出这个程序的结果。
不是支持所有的Basic语法,只是支持部分。我记得有+,-,*,/,(,),等等。
一般来说,开发人员的任务都是按月来分配吧?代码的行数真的要看开发人员的水平了,比如以前我同学要3,4千行的程序,我就是7,8百行实现。
所以,行数不好估计。一般给的时间都还是应该够用的。开发人员一般都是参与设计的。
那个人很聪明,学东西很快,基本上来讲,他是一个测试人员,可是完全具备了一个开发人员的素质和能力。可以不用我的干预做好一个难度比较大模块的测试和自动化的任务。并且,你知道他还有很大的潜力可以发展。我想正常来说,如果自己努力的话,他的工资应该能发展到年薪15万。一起进来的同事,其他人甚至有几年的测试工作经验,他是刚毕业,可是很快就超过别人了,成为了team中的主力。
作者: wwwyhx    时间: 2007-9-5 13:46
3,4千的7,8百行就可以实现,整么会差别这么大啊,3,4千的不是复制粘贴的吧
作者: cleverman    时间: 2007-9-5 13:53
对了,那个作业不是这个,这个是另外一个作业。
那个就是支持一些基本的basic语法,可以写一个小的basic程序,然后自己的程序解释,执行。具体支持什么语法,我也记不清了,不是很多。
程序的设计很重要,他们的设计本身问题就很大,实现的时候又没有考虑代码的重用性,因此冗余代码很多。还有就是本来作业没有要求的一些东西,他们也搞了一些,不知道为什么?可能对题目理解不好吧。
作者: wwwyhx    时间: 2007-9-5 14:05
我想知道参与的设计大概精确到什么程度,精确到伪第吗的程度吗,还是只确定模块的接口,想整么实现自己随便?
作者: cleverman    时间: 2007-9-5 14:19
主要是要提供开发设计文档。
有些只需要提供接口,有些需要有sample code,或者伪代码。
关键的是,要写清楚设计,没有硬性的模式。测试人员和其他开发人员明白怎么回事,可以因此提供测试文档,或者其它开发人员由此也可以进行开发就OK了。
作者: seifer1754    时间: 2007-9-5 15:26
[首先是要把C语言补回来,把C语言教程看了一遍,把语法理解,练习了几个小程序,找了找感觉。这个阶段是很快的,可能就是几天的时间吧,毕竟以前还是学过C的,然后开始学C++。当初问过老师,学C++需要多长时间。老师的回答是三个月。买了本C++教程,一天看完。心里很不以然老师说的三个月,感觉跟C差不多,就是多个class。后来就买了两本编游戏的书,开始模仿和练习编游戏,这样在当时我们的机房DOS系统下,我是专业里唯一一个能用GUI编程序的人。所有的assignment,我都编两个版本Text mode and UI mode, Text mode送给好朋友,UI mode自己用。这样半年之后,我才突然发觉,原来这才是C++。自己用了半年的时间才真正的学会C++。(C与C++的最大区别在于设计的思维:面向过程和面向对象,C到C++的转变是需要一个过程的)。这个时候再看当时show给我程序的朋友的C++的程序时,才发现他根本没有学会C++,他只是用C++在做C程序而已.]

我对 cleverman兄 的这段时间的经历更感兴趣一些。 可以说正是因为这段时间的练习,才使得cleverman兄真正对编程有了深刻的理解。
基本上我们在编程学习中,都是以单进程的面向过程的程序开始练习的。因为缺乏一个完整的实体模型,所以对面向对象的理解是一个模糊的认识,这个时候如果能够多多练习GUI的编程,那么会加快个人对面向对象模型的认识。
不知道cleverman兄这个阶段使用的是哪一个图像库,我想应该是TC下的 GRAPHICS 图像库吧。
作者: cleverman    时间: 2007-9-5 15:57
没错,是用的TC++。你说的这些我以前还真没想过。GUI程序由于比较直观,而且是非常自然的面向对象的模型,确实应该是一个比较好的学习面向对象的方法。看来我是误打误撞了,当时。呵呵。后来,我用Perl的时候,对面向对象又有了一个更深刻的认识。因为它不是一个面向对象的语言,所以,你编面向对象的程序就需要多做,多想一些东西。后来的C#又引进了不少新的概念,虽然都算是C++扩展出来的,不过还是又多加深了一些理解。以前看过不少开发人员写的代码,从他们的设计来看,感觉他们对面向对象的理解并不是特别的深刻。直到最近看到一个印度人写的代码,跟我的设计思想还真的很接近,面向对象的设计,实现思路非常清晰。这也是第一次看到有人和我对面向对象的理解这么类似。不过我做的大项目也少,对一些概念,比如多继承也没有很多理性的认识,我印象中从来都没有用到过。可能也不是特别有用吧,现在C#,Java都抛弃这个概念了。总之,面向对象的概念还是挺复杂的,很多人做了很多年的开发都不算真正理解了,或者真正好的理解了。
作者: wyzwise    时间: 2007-9-5 19:30
原帖由 wwwyhx 于 2007-9-5 14:05 发表
我想知道参与的设计大概精确到什么程度,精确到伪第吗的程度吗,还是只确定模块的接口,想整么实现自己随便?


这个过程中,developer只是提些意见,具体得设计试又arch和BA完成得,具体到什么程度,如果试一个大得公司,很正规得,试非常具体得,调用database哪个table得哪个field都会specify得。。。。

如果程序员只是自己随便写,没有任何得document和formal review,只是会增加testing和maintenance得cost...一个好得team这样得情况要避免。。。
作者: wyzwise    时间: 2007-9-5 19:33
关于设计,我得看法和你们不一样。说到OO,只是个基本得coding concept,不试什么设计得,设计其实试只这个project得结构,是SOA,还是Facade,MVC等等。。。
不同得结构在不同发面得表现不一样,比如现在流行得SOA在load/stress 方面表现很好。。。

还要注意maintenance方面,毕竟控制开发和maintenance成本是很重要得。。。:)
作者: wwwyhx    时间: 2007-9-5 21:31
有个实习的同学说他7天写了2万行程序,不知道是不是真的 ,呵呵
作者: seifer1754    时间: 2007-9-5 21:59
如果开发流程设计的不合理,代码复用率太差,就是写3万行也不稀奇啊。
作者: cleverman    时间: 2007-9-6 03:51
如果没有冗余代码,2万行就太厉害了。
我可能一天只能写1000行,还是做小的项目,大的项目应该更慢。
不过行数跟选用什么语言也是有一定关系的。同样的功能,不同的语言实现,代码大小也是有区别的。
不太清楚开发牛人的速度怎样,不过总觉得比较行数没什么太大意义,编码毕竟是比较低层次的工作。好像刚学编程的时候愿意比较这个,senior的,就没听说他们提这事了。
作者: cleverman    时间: 2007-9-6 03:56
还有就是算法设计是很花时间的,比如你用2,3天来设计一个算法,可能2,3个小时就实现了,也就是2,3百行代码。
你说他2,3天只编了2,3百行代码,有意义吗?
我当时研究一个并行算法,是准备写毕业论文的,也就是2,3百行代码,按照要求是要研究4个学期的。
作者: seifer1754    时间: 2007-9-6 08:57
一般来说,一个函数的代码行数一般不会超过1000行。而一个源文件不应该包括太多的函数原型。
如果在一个源文件中或者在一个函数中写了2万行的代码,这个开发人员的能力应该受到质疑。他不是超猛,就是超差。
作者: cleverman    时间: 2007-9-6 09:53
没错。强烈同意。
一个函数如果超过1000行,可以肯定地说,这个函数是可以分解成更小的函数的。
一个源文件如果函数太多也是不合适的。从C语言的角度来讲,可以把函数分类放在不同的源文件,易于维护。
从C++的角度来讲,一个源文件一般是一个class的函数实现。如果函数太多,一般是可以把一个class分为多个class,或者可以把一些功能抽象成父类。
我的经验是,一般来说每个源文件最多1000多行,每个函数一般最多2,3百行。不过我没有写过太大的程序,最多也就是1万多行吧。如果大项目的话,seifer1754所说的函数不超过1000行,应该是个不错的标准。不过一个源文件应该多大呢?几千行应该算正常吧?如果大项目的话。
作者: wyzwise    时间: 2007-9-7 17:18
一个source file的大写最大也就是1千多行吧,一个method最多也就是2-3百,如果很大的话就分成很多小的methd,主要是为了reuse...

source file也就是class 主要是按功能分的,不同功能大小不一样,也就是按layer分的.....举个简单例子,如果是interface,就只是些method的集合,如果是具体的可能就长些..如果是parent,最是很多abstract method...

大小不是绝对的,不过一个好的design是不会出现很大的class 的...
作者: cleverman    时间: 2007-9-8 04:49
你说的标准基本上跟我编程的特点相同。
不过如果大项目,尤其是要求安全性,可靠性高的话,是要写大量的代码处理各种异常的情况出现。这样的话,代码行数很容易就上去了。(可能几倍的往上涨)
而且,大的项目确实会有很复杂的对象出现。还有就是由于问题的复杂性和变化性,使得出现了一些大的class,虽然可以把它精简,但是由于项目的后期是不能随便改动代码的,因此就保留下来了。
另外就是OO的思想是已数据为中心的,不是以功能为中心。所以,class的设计也是应该考虑数据在先,功能再后。按功能分的话,就是C面向过程的思想了。
作者: eeeagle    时间: 2008-1-28 21:52
突然发现自己在大学时就看过楼主的文章了,可惜自己编程很差,也不太喜欢代码。
可是现在却在软件行业混。。(学通信工程的,)

毕业了,写过一个月的C#,发现挺痛苦的,

最大的问题是发现自己看代码很容易看晕掉。。。按理说理工科的逻辑应该不是问题,可能心里有抵触吧。。。
作者: eeeagle    时间: 2008-1-28 21:56
现在在搞黑盒的测试,发现很没劲啊
开发能力太差,写代码又不喜欢。。。。

想搞点和硬件相关的。。。

太穷了,也想出去出差做本行,通信“工程”
作者: dcyan    时间: 2008-2-8 18:14
党中央国务院以及全国人民代表大会一致认为你很牛,你最能体现中华民族的智慧。
你是中国的一个窗口,是向世界展示中华民族智慧的窗口。
你不是一个人,我可以负责任的告诉你,你不用谦虚了,你已经被中华五千年的智慧人物附体了。
作者: cleverman    时间: 2008-2-9 10:07
标题: 回复 34# 的帖子
如果不喜欢编程,不如去做做市场,销售这些。
这些比搞技术挣钱多呀。
作者: 我家门前的湖    时间: 2008-2-14 14:21
楼主牛。。。
作者: wavelsb    时间: 2008-3-14 14:23
大牛。又给我打了一针鸡血。继续努力。
作者: dujun    时间: 2008-3-14 14:30
一步一个脚印
作者: piginthetree    时间: 2008-6-18 13:32
营养贴




欢迎光临 51Testing软件测试论坛 (http://bbs.51testing.com/) Powered by Discuz! X3.2