社区应用 最新帖子 精华区 社区服务 会员列表 统计排行 银行

  • 205837阅读
  • 1107回复

软件编程杂谈文章汇总

级别: 管理员
发帖
8532
金币
2762
威望
3231
贡献值
0
元宝
0
只看该作者 19楼 发表于: 2010-10-11
Windows编程革命简史

首先,是 Windows API 和 DLL Hell。(译注:DLL Hell——DLL灾难,就是微软的DLL升级时因为不同版本可能造成应用程序无法运行的灾难,首当其冲的是COM编程,相信大家都知道某些木马或是病毒更改了一些系统的DLL可以导致整个Windows不举,这就是DLL Hell) 于是,第一次革命是DDE——我们可以创建一个状态条在上面显示Microsoft的股票价格(译注:Dynamic Data Exchange,工作原理是: 甲方申请一块全局内存,然后把内存指针postmessage到乙方,乙方根据收到的指针访问那块全局内存)。
在那个时候,Microsoft 创建了 VERSIONINFO 资源来管理版本信息,当然,是用来消除DLL Hell。但是,另一个微软内部的小组发现了DDE的致命缺陷:这不是他们做的!
为了解决这个问题,他们创造了OLE(很像DDE,只是名字不一样),而且,我还记得在一次 Microsoft 大会上,某个微软的演讲者正式宣布—— Windows API 马上就会被 OLE API 所重写并取代,我还盲目地相信了这一说法。而且,所有的在图形界面的控件都会是OCX,那是OLE引入的接口,同样,其目的是为了消除DLL Hell。相信大家都记得,那个时候,我们是怎么地梦想着有一天,我们的应用程序(当然是非常大的程序)可以完全地被嵌入到Word文档中。
然而,在Microsoft的某处,Microsoft有些人开始信仰 C++,其确信MFC的出现并可以解决所有的一切问题,但是,因为历史原因,OLE并没有出局,其改了一个名字,叫COM,此时,我们立马意识到OLE(以前的DDE?)真正意味着什么——其用精心的版本管理系统来消除DLL Hell。与此同时,Microsoft的一个变节小组发现了一个MFC的致命缺陷:这不是他们做的!

当然,微软件的动作是很快的,他们立刻修正了问题——创造了ATL,有些像MFC,只是名字不同,他们想使用漂亮的ATL把那些晦涩难懂的COM的知识给隐藏住。这个动作刺激了COM团队(或是OLE团队?)改名为ActiveX,并发布了成千上万的新接口(甚至是很多版本化的接口,当然,主要目的是为了消除DLL Hell),当然,ActiveX可以让我们的程序可以从Web游览器上下载,并可以完美地和病毒一起嵌入浏览器中(哈,还不紧跟时代,感谢ATL吧)。此时,操作系统团队就像一个失宠的孩子一样,大声呼喊着“Cairo操作系统来了”引起大家注意,当然有一些怪异恶心的东西连他们自己也无法解释清楚,所以,别提发布了。为了声誉,操作系统团队的确引入了“系统文件保护”的理念,当然也是为了消除DLL Hell。
这个时候,Microsoft的某个团队发现了Java的致命缺陷:这不是他们做的!于是他们创造了一个叫J,或是Jole,或是ActiveJ的东西(对不起,我真的记不起叫什么了)来挽救Java(译者:应该是Visual J++)。看起来很像Java,只是名字不同罢了。这太让人兴奋了,但是Sun使用了一些相当古老的法律条款向Microsoft提起了法律诉讼,其在一年内限制了任何一个公司可以发布类似Java的产品。这明显是抑制微软复制别人产品的一次尝试,唯一不同的,其结果导致了微软流向国会议员裤兜的现金网络的建立(在这个网络可以得到时事新闻和价值$14.75的T恤衫)。还记得 J/Jole/ActiveJ 的项目经理用他的鞋桌在敲着桌子并信誓旦旦地坚持 Microsoft 将永远不会放弃他的产品。SB!所有的这些也就仅仅意味着一件事——没有人关心ActiveX团队(或者是COM?)。令人难以置信的是,微软把这些东东全部集成起来,成了COM+(难道不应该是ActiveX+?),还有MTS(我不知道为什么没有COM和Active或是X或是+的字眼,而直接叫MTS了——我为这个名词感到实实在在地震惊!)。他们总是那么NB地为那些流行词加上“+”号。在那段时间,还有人曾叫喊着“Windows DNA”以及“Windows Washboard”,但这两个东西最终在我搞清是什么玩意的之前就夭折了。
在这一点上,Microsoft已经很不安地窥视着Internet好几年了,他们终于意识到Internet上有一个致命缺陷:嗯,你应该知道这是什么(译注:Internet不是做他们做的!)。于是他们开始培养我们和.NET约会(.NET的发音很像“doughnut”圆环图,不过,这只是他们的唯一不同),这和Internet很相似,只不过.NET有更多的印刷品。其让我们清楚再清楚地了解一件事:.NET会消除DLL Hell。.NET包含了一个新的编程语言,叫C#(为了解决已经死翘翘的Active++ J++的缺陷)。.NET还包含一个虚拟机,所有的语言都运行在上面(这主要是为了解决依赖于Intel CPU的缺陷)。.NET还包含了一个单一的登录系统(这主要是为了解决“不把口令存放在Microsoft服务器上”的缺陷)。实际上,我们更容易做的是把.NET不包含的事给列出来。.NET绝对是一个划时代地Windows编程革命……当然,仅到明年。
QQ: 378890364 微信:wwtree(省短信费) 紧急事宜发短信到0061432027638  本站微博:http://t.qq.com/wwtree QQ群:122538123
级别: 管理员
发帖
8532
金币
2762
威望
3231
贡献值
0
元宝
0
只看该作者 20楼 发表于: 2010-10-15
如何保证自己的程序零BUG

毫无疑问,程序员是善于思考问题的一族。一个程序的编写都是通过:思考、设计、编写、调试、测试以及运行这些基本的阶段。但大部分程序员都有一个问题就是不太愿意测试自己的代码。他们草草的调式完成以后就认为工作结束,测试那是测试人员的工作。
按照理论上,如果代码存在问题,那么测试人员和最终的用户肯定可以发现这些 BUG ,而等待哪个时候再返回来查找问题到底错在什么地方确实代价不小,其代价有:
1.  影响了程序员自己的声誉
2.  影响了产品的质量
3.  影响了客户的信任度
4.  这个时候再 DEBUG 难度增大了许多。
大的不说,就说多自己声誉的影响吧。如果你的程序总会有这样那样的 BUG ,你得到收益会减少,即使你写了很多代码。
其实最后一点也很重要;在我们面对一块代码的时候,什么方法都好办,但如果将这块代码防到庞大的系统中之后,简单的问题也难以被立即找出来。为了自己考虑,节省自己 DEBUG 的时候,我们应该让我们的程序尽量没有 BUG  


那么怎么样才能保证自己的代码没有 BUG 来? 
 
程序员必须克服一些自身的致命缺点才能够从根本上解决这个问题。那么这个问题是什么?前面我们已经提到,程序员对自己的代码都非常宽容,认为那是正确的没有问题。实际上这种想法比较正常,程序是通过程序员思考和设计之后才写出来,程序员不会将自己认为不正确的东西写到代码里,而到这个时候都一直假设程序是正确的;但人非圣贤,怎么可能不犯错误来。实际上程序员在对待其他程序员时候的态度就很好,带着一种挑剔和学习的态度;但一旦对待自己的代码就很难这么做;这就是最致命的。程序员也必须对自己的代码带着挑剔和学习的态度;这个基础是假设自己的代码是错误的,然后需要做的是怎么样证明自己的代码是正确的。程序员自身可以在程序生成的每个阶段做这些工作:仔细的设计(这个时候画点时间是值得的,必须保证我们对自己的程序有清晰的轮廓后才能开始动手写)、编写代码时、单元测试(单元测试的重要性就不在赘婿了)、功能测试。
仔细的设计:这个的仔细是说在程序员编写代码之前,其必须对代码的整个结构以及逻辑结构有明确的清晰的了解,只有这个时候才可以去写代码。这里没有谈到文档,但我说到了一定要清晰的思路,但清晰的思路不是每个人都可以在脑袋中直接形成的,很多人都是普通人,没有办法在脑袋瓜中把所有问题都想清楚,那么就记下来,特别对于复杂的逻辑。
编写代码:对于没有把握的代码,例如:新设计的算法,最好保证其正确性。可以单独将这部分测试,这可以让代码模块化的同时又保证了代码的正确性。一句话:少量的代码保证质量还是比较简单的。
单元测试:单元测试的重要性不在赘叙了,现在也有许多工具可以帮助程序员并减少工作量。
功能测试:程序员保证自己代码质量的最后一关;为了做这样的工作我们可能必须写一些代码来测试,甚至是测试工作。使用大量的 CASE 来测试,以及错误的 CASE 。这里和测试人员的测试不同之处在于:仍然让程序员的注意力放在其自己的代码范围内,减小了排错的难度。

如果你通过了以上的步骤都找不出你程序中有任何问题的话,那么我想你的程序应该足够健壮了。其实还有一点必须说明的就是:代码 REVIEW 
前面说道了程序员对待别人代码的态度是挑剔和学习的态度,所以让其他程序员来 REVIEW 你的代码也是检查程序有没有逻辑错误的很好的办法。团队中应该交叉 REVIEW 代码,这是实践的经验。
作为一个好的程序员必须有以上的习惯,以及对待自己代码象孩子一样,我们要爱惜我们的代码,同时也要让代码走正确的路。
QQ: 378890364 微信:wwtree(省短信费) 紧急事宜发短信到0061432027638  本站微博:http://t.qq.com/wwtree QQ群:122538123
级别: 管理员
发帖
8532
金币
2762
威望
3231
贡献值
0
元宝
0
只看该作者 21楼 发表于: 2010-10-15
代码复核(Review)是为了找错误吗?看代码能看到逻辑错误吗?
不,跑测试程序都不能找到错误,看代码怎么可能看出来?
复核代码的目的有:
* 检查代码是否规范,如命名规范,注释
* 保证一段代码至少有两人共同熟悉,可以由任一人来更改。
* 检查设计思想是否如实实现,代码如何表达设计
* 审察未文档化的细节设计,即由代码直接表达的设计,由代码人口述设计并对照代码
* 检查是否暴露出原设计的缺陷,需要重新设计?


程序员是否认为自己的程序有错误?
自信没有错误和怀疑代码还有错误,哪个是正确的心态?
我认为程序员永远都不会有100%的自信。
即使程序已经发布,被用户接受很长时间,只有好评没有抱怨,依旧不能确认有没有错误。
只能假定错误是永恒的,它们一直在那里,只是不到条件爆发。
一个程序员能做的就是,排除所有肤浅的错误,加大隐藏错误出现的几率并找到它们,
采用一些容错性代码减小可能的错误,减少程序发布后爆发的机率。


测试的目的是为了发现错误,
但是单元测试,功能测试的覆盖度能有多高?
没有100%覆盖的测试。就是说,总是有一些状态是测试不到的。
代码人员认为不可避免地存在错误,需要测试,测试人员认为测试覆盖度不可能100%,还是要代码小心。
这是一个头痛的问题,结果是没有完美的程序。

单元测试是白箱测试,可以根据代码实现将注意力放到最关键的部位。
但仍然不是100%覆盖的。
单元测试一般针对的是边界数据,不要求覆盖度,而更要求有效性。
其目的更主要的是保证代码更改不会破坏原有的正确性,是提供保障而不是查找故障。


保证没有错误的唯一方法是不写代码,减少错误的最好方法是少写代码。
简单的设计和实现是减少错误的最佳方法。简单的代码错误必定少。
画蛇添足式的功能则是最大的错误发源地。
 
QQ: 378890364 微信:wwtree(省短信费) 紧急事宜发短信到0061432027638  本站微博:http://t.qq.com/wwtree QQ群:122538123
级别: 管理员
发帖
8532
金币
2762
威望
3231
贡献值
0
元宝
0
只看该作者 22楼 发表于: 2010-10-15
自己动手写操作系统

2004年我听编辑说有个年轻人写了本《自己动手写操作系统》,第一反应是不可能,恐怕是翻译稿,写这种书籍是要考作者硬功夫的,不但需要深入掌握操作系统的原理,还需要实际动手写出原型。

历史上的Linux就是这么产生的,Linus Torvalds当时是一名赫尔辛基大学计算机科学系的二年级学生,经常要用自己的电脑去访问大学主机上的新闻组和邮件,为了方便读写和下载文件,他自己编写了磁盘驱动程序和文件系统,这成为了Linux第一个内核的雏形。

我想中国有能力写出内核原型的程序员应该也有,但把这个题目写成一本书,感觉上不会有人愿意做这件事情,作者要花很多时间,加上主题比较硬,销售量不会太高,经济上回报很有限。

但拿来文稿一看,整个编辑部大为惊艳,内容文笔俱佳,而且绝对原创,马上决定在《程序员》连载。2005年博文视点出版的第一版也广受好评。

不过有很多读者还是质疑:现在软件编程主要领域多在框架和应用,还需要了解操作系统底层吗?

经过四年的磨练成长,又拿出第二版的书稿《Orange'S:一个操作系统的实现》,这本书是属于真正Hacker的。我虽然已经有多年不写代码了,但看这本书的时候,让我又重新感受到做程序员的乐趣:用代码建设属于自己的系统,让电脑听从自己的指令。

黑客(hacker)实际是褒义词,维基百科的解释是喜欢用智力通过创造性方法来挑战脑力极限的人,特别是他们所感兴趣的领域,例如软件编程或电气工程。个人电脑、软件和互联网等划时代的产品都是黑客创造出来的,如苹果的Apple电脑、微软的Basic解释器、互联网的Mosaic浏览器。

回答前面读者的质疑,学软件编程并不需要看这本书,想成为优秀程序员和黑客的朋友,我强烈建议你花时间来阅读这本书,并亲自动手实践。正如于渊在本书结尾中所说“我们写自己的操作系统是出于一种好奇,或者说一种求知欲。我希望这样不停地‘过把瘾’能让这种好奇不停地延续”。

好奇心是动力的源泉,追究问题的本质是优秀黑客的必备素质,只有充分掌握了系统原理,才能在技术上有刃有余,才能有真正创新和发展。中国需要更多真正的黑客,也希望更多的程序员能享受属于黑客的创造乐趣。

BTW: 于渊这本书稿也是自己用LateX排版的,今天拿到样书,赏心悦目。书中排版代码都是于渊自己用程序嵌入,绝对不会出现编辑误排和乱排的现象。这也是黑客优雅能力的展示。
图书官网看这里:http://www.osfromscratch.org/ 

《Orange'S:一个操作系统的实现》封面

QQ: 378890364 微信:wwtree(省短信费) 紧急事宜发短信到0061432027638  本站微博:http://t.qq.com/wwtree QQ群:122538123
级别: 管理员
发帖
8532
金币
2762
威望
3231
贡献值
0
元宝
0
只看该作者 23楼 发表于: 2010-10-15
史玉柱的程序员往事
最近陆续看到很多史玉柱的采访报道,还有刘韧也如愿地采访了这位安徽老乡


激起了我关于这位传奇人物的一些记忆,和大家分享一下:


1)史玉柱是程序员出身,他的主要编程语言是汇编


我是92年到巨人集团,那时公司总部在珠海,大部分是软件开发人员。


公司名头已经很响,巨人汉卡也出了三版,销售非常好。前两版的主要代码就是老史写的,


不过我到公司时,他已经基本不写程序了。


有一天我正在调试程序,老史路过,突然兴致来了要显显身手,来帮我调试程序,上来就要调出sdebug,


我在一旁看得发晕,说:这太原始了,我们现在都不用这个,调试都用softice。老史很郁闷地就走了。


2)名言:“林彪20多岁当军长”


现在回头来看,我在巨人虽然年头不长(92年到95年整三年),不过资格还是很老:-)


巨人有很强的企业文化,员工大都很年轻,23,4当部门主管,25,6当副总很普遍


老史常说:“林彪20多岁当军长,现在为什么出不来年轻的将军,不是没有能力,是没有机会”
(为了写这篇BLOG,查了一下很牛的林彪经历:18岁的黄埔军校四期生、21岁的团长、24岁的军长)


所以年轻人在巨人上得快,我也是到公司不足半年就成为部门经理,22岁。


现在互联网领域不少80后创业者翻江倒海,再次印证”时势造英雄“


3)疯狂的游戏玩家


2004年7月巨人在上海搞15周年聚会,离开的巨人同事请了一,两百人回去,我也赶去参加。大会上请我发言,我还记得当时说:“讲三句话,第一是感谢巨人,给了我们成长的舞台;第2是祝福巨人更好;第3是希望,巨人从软件起家,希望老史还能重回IT” 赢得全场掌声


下来老史就对我说:“我已经想好了,是要重回IT领域” 做什么,后来大家都知道了。


老史是一个非常疯狂的游戏玩家,在他98年失意的时候,他就开始大玩游戏。所以虽然他进入游戏领域不长,但他


可能是游戏公司投资人中唯一的真正玩家。


图片集(以下照片来自巨人15周年聚会宣传资料)






 巨人集团风光一时

 国家领导人经常关心是民营企业死亡原因之一 (老史事后总结)

 1997年被迫上了喜马拉雅(发现巨人宣传文案上有错别字--市场部失职啊)


QQ: 378890364 微信:wwtree(省短信费) 紧急事宜发短信到0061432027638  本站微博:http://t.qq.com/wwtree QQ群:122538123
级别: 管理员
发帖
8532
金币
2762
威望
3231
贡献值
0
元宝
0
只看该作者 24楼 发表于: 2010-10-15
吴文虎教授与世界信息学奥林匹克竞赛
<程序员>编辑部决定要恢复“程序设计算法竞赛”的栏目,这曾经是最受欢迎的栏目,CSDN算法论坛版主胡海星(starfish)主持。后来由于各种原因,栏目取消了。
恢复的主要原因是我们认为算法是程序设计的基础, 任何时候都不能忽视。但我们需要更多地和工业界实践相结合,这样才能有更多的关注,也有实际的效果。


昨天编辑部老赵邀请了清华大学博导吴文虎教授和邬晓钧博士和徐博士,他们将负责程序员杂志即将开设的新栏目“程序设计基础竞赛”,稍后可以看到视频访问“为什么要做算法竞赛”
吴教授主要工作是在清华智能技术与系统国家重点实验室做语音识别及语言理解研究,不过他更为知名的工作是常年国际信息学奥林匹克竞赛国家队总教练。
吴教授虽然名满天下,却很谦虚和善(我们建议竞赛专栏做成吴文虎竞赛专栏,吴教授坚持改成现在“程序设计基础竞赛”),颇有长者风度。老赵约了很多专家做过参访,他感叹还是老一辈专家好打交道,年轻的都太把自己当回事。


中午和吴教授吃饭交谈了,随手记下一些有趣的观点和大家分享:
1)中国学生在IOI奥赛上成绩卓著,吴教授率领的学生已获得46块金牌,常年第一。
2)唯一和中国能抗衡的就是俄罗斯,他们有悠久深厚的数学教育基础
3)搜狐年轻的技术副总裁王小川是1996年金牌得主,那一年四个学生参赛,四枚金牌。
      第八届在匈牙利举行(IOI'96维斯痹鲁姆)中国队四名选手的表现极佳,创造了“全金”的纪录,王小川(成都七中)金牌;李中杰(南京金陵中学)金牌;陈磊(福建师大附中)金牌;王益进(东北育才学校)金牌
4)吴教授这几年开始给清华本科生开课“程序设计基础”,三年获得国家精品课程,。
   这个课程的不同在于打破传统授课模式,不从语句讲起,从问题出发,强调实践和动手。
  “只要激发兴趣,鼓励他们有信心,事情就能成” 这也是吴教授多年带奥赛选手的教学经验。
我深表赞同,我自己是学计算数学出生,那些枯燥无谓的数值计算的课程,感觉不知道学来有什么用,毫无兴趣,为考而学,考完就忘。
等到在巨人从事软件开发工作,涉及到矢量字库光滑处理,“样条函数”“函数插值”能派上用场了,可是我早已忘光了。


5)席间我问了一个问题,国际上中俄最强,在中国内部,那个省的选手最厉害?
   吴教授说“湖南”,他们有闯劲。
6)老赵表达了一个观点,中俄是很强,他们强在解决难题的能力。美国人强在系统思考,所以大部分的计算机理论建设基础都来自于美国
  除了基础算法专栏, 我还希望能开设这样的一个专栏:核心技术大剖析-对工业界的重要产品技术,比如Google的GFS, map and Reduce,其实都已部分公开 ,有没有人能对这些核心技术进行分析讲解.类似于Windows 核心编程,深入解析Windows核心等这样的内容。


蒋涛
QQ: 378890364 微信:wwtree(省短信费) 紧急事宜发短信到0061432027638  本站微博:http://t.qq.com/wwtree QQ群:122538123
级别: 管理员
发帖
8532
金币
2762
威望
3231
贡献值
0
元宝
0
只看该作者 25楼 发表于: 2010-10-16
C++程序语言25年周年纪念

1985年10月14日,第一个官方参考指南《C++程序设计语言》(第一版)出版,作者正是C++语言作者Bjarne Stroustrup。从1979年起,当时在贝尔实验室工作的 Stroustrup开始开发一个替代C语言的编程语言。C++诞生后迅速成为世界上最流行的程序语言之一,作为一种通用程序设计语言,C++几乎无处不在,尤其是视频游戏和嵌入式设备。
Stroustrup表示,如果当时他有商业头脑,那么现在每一台电脑和电子产品都可能会贴着小小的“C++ Inside”贴纸,他说,“如果有人认为他创造出一种完美的语言,他或者是愚不可及,或者是夸夸其谈,或者是兼而有之。”在接受《连线》的采访中,Stroustrup承认他现在几乎不怎么写代码了,大多数时间他是在思考编程和教育相关事情,他的笔记本运行Windows,台式机运行Linux。
QQ: 378890364 微信:wwtree(省短信费) 紧急事宜发短信到0061432027638  本站微博:http://t.qq.com/wwtree QQ群:122538123
级别: 管理员
发帖
8532
金币
2762
威望
3231
贡献值
0
元宝
0
只看该作者 26楼 发表于: 2010-10-18
对新手程序员的5个建议

有位会员在我们的论坛上提交的一个问题,问到他是否可以开始他的程序员生涯了。他已经花了大量的时间自学C#。他现在在学习WPF。此外,他是从事互 联网领域的工作,因此,他对IT业已有了解。根据他的情况,我想,他已经准备好了去挑战职业开发生涯。就他如何实现目标,我有如下建议。
1. 基础学习
当涉及基础学习时,很多自学编程的朋友都有一个错误的认识。促使某人自学编程的心态是一种“现在就做些事”的动力和渴望。有这种心态非常好!但不幸的 是,在学习新东西时,一旦涉及基础,很多人都急于求成(还没学会走路就想跑)。这是我的个人经验。这也就是为什么自学的程序员有时候名声不大好的原因。
确信你学到了编程基础。这包括变量名、合适结构体、有时候需要查找库而不是应用程序等等。《如何学习用某某语言编程》,这类典型的书籍往往忽略了成为 一名编程高手所具备的能力:解决问题的能力。在这里,我向大家推荐Abelson和Sussman的《计算机程序设计与解释》一书,此书对你快速提升能力 大有帮助。
编者注:《计算机程序设计与解释》一书于1984年出版,成型于美国麻省理工学院(MIT)多年使用的一本教材,1996年修订为第2版。在过去的二十多年里,此书对于计算机科学的教育计划产生了深刻的影响。
2. 多参与项目
编程经验,多多益善。我推荐你加入一个开源项目,或者加入当地非盈利组织,帮他们编写软件。
你将有如下收获:
1.你将接触到如何将一个应用程序更加规范;
2.你将经历研发的整个流程,包括产品维护;
3.你将学到团队合作经验;
4.你将学到基础知识,比如版本控制和编写文档;
5.你将得到的成就感让你远离失落;
6.你将可以把这段项目经历写在简历上。
3. 接受减薪
如今经济的颓势已经不再是什么秘密。一直以来,我听到的说法是:虽然有很多空闲的职位,但是工资着实很低。很多雇主把目标锁定在可以接受更低工资或者重新评定工资等级的人身上。
大学应届毕业生(他们当中的很多人发现毕业后便失业)是入门级的竞争力。另外,绝大多数应届毕业生没有像已在职员工那样的经济负担,同时,和那些毕业多年的、有贷款、有家室和车贷的人相比,他们可以接受更低的薪水。
入门级的职位同样也是最容易外包出去。但不幸的是,开发行业的总体趋势是:在职业生涯中,头五年左右的日子正变得越发艰难。
4. 关注非程序研发职位
在研发团队中,有很多职位并不参与研发工作,可是它们也会让你向目标进一步迈进。比如像品质保证/检测、维护、技术支持等。必要的话,从中选取一个作 为进入研发行业的敲门砖。接着,从容地寻找通向编程之门。举个例子,你现在是一名质检员,除了单纯地寻找错误并报告外,你还可以仔细检查代码,找出错误出 现的位置并以用标签加以标记。研发人员会很感激你的帮助在证明自己能力之后,开发行业的大门也向你敞开了。
5. 给老板做兼职
以你现在的经验来讲,找到一份兼职工作不太靠谱,但如果是为你现在的老板多做些分外事的话,也许可以。和你的老板还有同事们沟通一下,看看有没有一些 简单的程序可以替他们完成,来减轻他们的负担。接下来,便是编写程序。如果你身边有一个内部的开发团队,你可以为他们提供一些帮助。一些经理会让你在工作 时间内来做,另一些则让你在自由支配时间内完成。当然,你也可以尝试从外部接些兼职项目。
不管是哪种方式,你都会得到开发经验,你在目前老板面前更有价值,甚至可能在目前的公司中为自己开启一个新的职业方向。在我的职业生涯中,我一次又一次地发现,当面临事业成长、事业发展和新方向时,“多做些分外的事”可以扭转局面。
编者注:WPF(Windows Presentation Foundation)是美国微软公司推出.NET Framework 3.0的组成部分之一,它是一套基于XML、.NET Framework、向量绘图(vector graphic)技术的展示层(presentation layer)开发框架,微软视其为下一代使用者介面(user interface)技术,将广泛被用于下一代Windows平台(Windows Vista)的界面开发。
QQ: 378890364 微信:wwtree(省短信费) 紧急事宜发短信到0061432027638  本站微博:http://t.qq.com/wwtree QQ群:122538123
级别: 管理员
发帖
8532
金币
2762
威望
3231
贡献值
0
元宝
0
只看该作者 27楼 发表于: 2010-10-19
增加编程经验的3种途径
最近,有位论坛会员陷入了一个与许多入门级程序员相同的尴尬局面中:企业们不喜欢雇佣没有经验的人,并且多数都不愿意提供培训。如果那么多的企业都不雇佣 没有经验的人,那么这些人要从哪寻得他们所需的经验呢?不幸的是,这种局面是大多数IT人士所面临的主要问题。





通过与这位会员长期的交流与反复的讨论,就加快他的职业生涯发展,除了给他《开始编程生涯的5个建议》之外,我另外还提出了三条建议,以助他积累增加编程经验。


  1. 无偿工作(或几乎免费)


  企业界通常可能并不想雇佣经验少或没有经验的人,而非盈利界通常乐意(至少愿意)雇佣这一类人。我在高中的时候,去我们当地发育性残疾人家庭当志愿 者,我是这样进入程序员这行的。我用Excel表格来为他们管理财务,帮他们把这些信息整理到了一个网站上,等等。工作很吸引人吗?完全不是那么回事儿。 我是无偿地在每天下午和每个周末为他们工作。唯一的福利就是在那个地方我可以随时从一个装得满满的食品柜里拿东西出来吃。除了给社区做贡献之外,它还给了 我足可以写上简历的工作经历,还有一份推荐信。一些非营利组织还会支付给你少量薪水。


  选择一个“废弃”的开源项目,再做二次开发。开源项目的工作经历绝对是简历上的亮点。


  如果你在当地找不到慈善机构或者非营利组织,也许你也可以为家人打工。说不定你的哪个亲戚朋友的企业就需要一个程序员。主动地无偿请战吧,我敢打赌,你会发现你/你朋友的叔叔或阿姨会为你的加入而感到欣慰。


  2. 拼命工作


  如果你想成功,就必须赶快行动起来;我还没见过哪个开发人员的机会是轻易得来的。我猜是一些开发人员是足够幸运,亦或是他们的某个亲戚在他们刚毕业的 时候就高薪聘用了他们。还有一些人找到了很好的实习机会,最终引领他们找到了其他的好工作。但对大多数目前在校或是刚走出校园的学生来说,唯一既能突显自 己有能增长经验的方法就是工作、工作、再工作。就是这样!


  你的老板可能更想让你在服务台工作,而不太会让你花太多时间在写代码上,。那么,如果你想在服务台工作中获得软件开发经验,就必须自己抽时间。利用午休时间来写代码吗?没错!下班后继续工作吗?没错!在家也要做计划和研发吗?没错!


  我懂,我都懂……免费做事或者做那些预期之外的事,这听起来太没劲。不过,其实情况更能更糟。你是否曾经了解过医生们在住院实习期间所做的工作吗(先 不提工资)?就把这个当作你自己的住院实习期吧。在今后的几个月或几年的时间中,你要额外刻苦工作,努力积累经验。尽管你的下一份工作可能并不轻松(也不 会轻松),但薪水会更高。


  其实还有很多增长经验和薪水的方法;诀窍就在于从工作的“后门”中一点点争取。例如,我之前的工作是网络的管理与监督。当时我已经很长时间没接触程序 设计院的工作了,并且我知道我想重操旧业。但是实际情况是我的大部分工作经验都是在Perl语言领域(当时也已经基本荒废了),并且我也好多年没编程了, 不过我很清楚我在完全有资格任职之前要增加我这方面的经验。那么我都做了什么呢?我开始在空闲时帮助我们部门写程序;有时候,我甚至下班后再编代码,所有 的一切都是为了积累经验和一份推荐。


  也许你找不到一个软件开发的工作,但是你也许可以找一个倾向那方面的工作,比方说,系统工程师或者服务台。从那起步,你便可以开始显示出你代码方面的 实力从而选择或者是为自己完善一份出色的简历后辞职,还是继续晋升。实际上,服务台或是系统工程师(或者叫“计算机操作员”)的工作都是一个逐渐熟悉这个 领域的最古老的方法之一。


  3. 在家工作(当自由职业者)


  可能你找不到接受你无偿写代码的人。也许你根本就不能把编程融入到你的非编程性质的工作中(就像一个没能得到加班授权的钟点工)。这时你家的作用就突 显出来了。如果其他的选择都行不通(或者为了补充目前的能力),就在家做些工作吧。找一个你真正喜欢的程序,用自己的风格写出来。或者把你日思夜想的那个 程序写出来。


  在家工作时,尽量试着模仿专业环境下的软件开发流程。先写出一个项目计划,创建单元测试,晚上再执行代码等等。我保证有了它,你将成为一个更优秀的程序员,并且你也可以向雇主展示你的作品。这其实是很重要的。


  我以前工作的时候,不能带上自己的作品并且展示给潜在雇主们看。因为这既违反我的雇佣合同,又违反我的雇主与客户之间的合同。但是当我在家用我自己的资源做我自己的工作的时候,我便可以自由地向潜在雇主们展示。


  例如,当我想要找一份网络开发偏多,网站管理偏少的工作时,我会把简历中的亮点和推荐人的推荐语等其他东西,聚集做成一份Flash演示稿。我甚至会 把演示稿压缩制作成一张可以自动运行的精美CD,所以潜在雇主只需看CD。这张CD曾帮助我在互联网泡沫时找到过工作。这真的很管用。


  作为一个多次参与面试和被面试的过来人,我敢说,如果求职者有创业经历时,会给你留下一个非常深刻的印象。这能和其他工作有相同级别的薪水么?有时候 能。我认为,在可靠的开源项目中做“实际工作”和正常带薪工作的效果是一样的;除非你参与的项目实在很糟糕,并且你又把它拿给面试官看了。所以,“无薪工 作”是另外一个建议,这也通常能让你在和竞争同一岗位的众多入门级程序员中鹤立鸡群。


  编者后话


  如果你也是从事堆码事业,不知你当初是如何积累编程经验的呢?除了像原文作者所说的3个增加编程经验的方法之外,你是否还有其他更好的经验呢?如果有,请不要吝啬,请在评论或微博中分享你的建议,已帮助那些准程序员或者想转换编程语言的IT人。
QQ: 378890364 微信:wwtree(省短信费) 紧急事宜发短信到0061432027638  本站微博:http://t.qq.com/wwtree QQ群:122538123
级别: 管理员
发帖
8532
金币
2762
威望
3231
贡献值
0
元宝
0
只看该作者 28楼 发表于: 2010-10-20
Google美女面试官谈程序员面试技巧
盖尔·拉克曼(Gayle Laakmann),Google前员工,目前在宾夕法尼亚大学沃顿商学院攻读MBA。她也是在宾州大学获得计算机科学博士学位。她现在是 CareerCup和Seattle Anti-Freeze两家公司的创始人兼CEO。她也是《Cracking the Coding Interview》一书的作者。


您好,盖尔。能先自我简单介绍一下呢?


您好。我先是在微软和苹果实习的,后来在Google做了三年的工程师。在Google,我也是招聘委员会的成员,面试过120多位本土和国际的工程师,我参与了招聘会并审查过数百份简历。我很喜欢在Google工作,但我也想尝试创业。


所以,有了这些难得的经验和见识后,我在2005年成立了CareerCup。我们通过电子书和面试论坛来帮助人们准备技术类面试。


您能否简单介绍一下像微软、Google和亚马逊这类公司的面试过程?面试有几轮?哪些地方需要重点关注?


首先是有一位工程师通过电话面试你;(通过后)再参加有4-6名求职者的群面。至于需要关注的地方,大公司追求优秀的技术能力高于一切。你能否写出合格、整洁和有条理的代码?能否解决有挑战性的问题?


那学生/求职者该怎么掌握这些呢?


一定要实践!熟能生巧虽是老生常谈,但它的确有用。在纸上练习编程,然后照原样输入到电脑上。你会发现错误比你想象的要多的多!


你看到什么样的求职者才会说“哇!这就是我要找的人。”


我希望求职者是:
1. 聪明的
2. 能写合格的代码
3. 关注编写整洁的代码
最后一条是最难的。作为一个面试官,我选人时主要看:当求职者拿到一个问题时,他们是仅在纸上写代码么?或者他们会定义相关的数据结构么?


求职者并不知道面试中所有问题的答案吧?他们怎么回答那些没有提示的问题呢?


一位优秀的面试官,会问那些难度非常高以致于你甚至都不会知道答案的问题。回答这类问题的最好办法是,先简化问题,做假设(比如:假设数组中只有整数);然后,解决简化后的问题;最后,归纳答案。


此外,面试官想知道你的想法,所以尽力说出你的方法,并解释你的操作过程。这将给他们留下对你技术和技能的良好印象。


在求职过程中,您认为GPA有什么样的作用?或者在面试中,纯粹看GPA么?


这个真的取决于公司。一般来说,想要得到初步面试机会,除了诸如经验和兴趣等其他东西之外,GPA也重要。


在他们面试你后,并且正决定是否用你时,GPA不应是阻碍。(否则,他们就没必要面试你了。)


我接触过一些非常聪明的人,但由于各种原因他们的GPA不好,我相信您也应该遇到过吧。您对他们有什么建议呢?你认为什么样的技能才能打动顶级公司?


这些公司真的不关心你的分数。他们看重的是:你是否聪明,你是否有强硬的技术和你是否能努力工作。


你要用其他途径来证明自己。比如:引用你做过的项目,或在开源项目中解决的问题。列举说明你在某一特别困难课程中的分数或班级排名。


在简历中列举你的奖项和参与的项目,保持更简历更新。如果你没有项目经验,竭尽全力去获取经验!这才是那些公司最最看重的东西。如何增加项目经验,请参考伯乐在线的这篇《程序员:增加编程经验的3种途径》。


在求职者去应聘Google这类公司前,请您给他们分享一些建议或注意事项。


练习诸如我们网站上的问题;先在纸上练习算法,然后按原样再输入到电脑中。


还有一件事要注意,关于你简历上的每个工作或项目,你必须能解释其中最艰难的挑战,你最喜欢它的哪部分?你最不喜欢哪部分?你学到了什么?
QQ: 378890364 微信:wwtree(省短信费) 紧急事宜发短信到0061432027638  本站微博:http://t.qq.com/wwtree QQ群:122538123
描述
快速回复

您目前还是游客,请 登录注册
如果您在写长篇帖子又不马上发表,建议存为草稿