﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-λ-calculus（长门流的程序员们，2月6日，我们再次胜利！）-随笔分类-启示</title><link>http://www.cppblog.com/vczh/category/7321.html</link><description>【QQ：343056143（已满），504254078】【MSN：vczh@hotmail.com】【Email：vczh@163.com】</description><language>zh-cn</language><lastBuildDate>Sun, 31 Jan 2010 11:53:54 GMT</lastBuildDate><pubDate>Sun, 31 Jan 2010 11:53:54 GMT</pubDate><ttl>60</ttl><item><title>读《希望对入门级的程序员有所帮助，有时间不妨看看》有感</title><link>http://www.cppblog.com/vczh/archive/2010/01/31/106896.html</link><dc:creator>陈梓瀚(vczh)</dc:creator><author>陈梓瀚(vczh)</author><pubDate>Sun, 31 Jan 2010 11:44:00 GMT</pubDate><guid>http://www.cppblog.com/vczh/archive/2010/01/31/106896.html</guid><wfw:comment>http://www.cppblog.com/vczh/comments/106896.html</wfw:comment><comments>http://www.cppblog.com/vczh/archive/2010/01/31/106896.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/vczh/comments/commentRss/106896.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/vczh/services/trackbacks/106896.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp; 也是cppblog一位同学写的文章，原文在<a style="TEXT-DECORATION: underline" href="http://www.cppblog.com/chinapeter2008/archive/2010/01/30/106777.html" target=_blank>这里</a>。<br><br>&nbsp;&nbsp;&nbsp; 其实总的来说这篇文章还是没什么大的问题，你看那五点粗字标题，就是在告诉你不仅要写好的程序，还要写有用的程序。不过进了公司老板很难给你写没用的程序的，这点就忽略了。紧扣着客户的需求写是好事，不过这跟广大的大学同学们还是没什么关系，所以最后一点就忽略了。咱慢慢看前面的四点。<br><br>&nbsp;&nbsp;&nbsp; 第一点说在校期间的实习是很重要的。这一点当然是对的，不过下面的论据有点问题。先看后面的。公司要能干活的人是真的，学计算机搞创新搞研究能拿奖那也是真的，只是拿的是图灵奖不是诺贝尔奖。这个诺贝尔奖有点问题啊，没有数学没有计算机（他老人家死得太早了，原谅他），所以数学和计算机就自立门户了。<br><br>&nbsp;&nbsp;&nbsp; 在校实习可以赚工作经验。为什么这么讲呢？（华南理工大学的师弟师妹在2009年的时候告诉我们，金山公司给实习，做的东西不会拿去卖的，你们做完就完了。道听途说，谢绝跨省。）一般大公司都会给你真刀真枪的东西。写的代码会被最终用户运行，修bug的结果也是被最终用户运行的。到时候会有一大堆人指导你该怎么做的，因为如果你写的代码太烂他们也不好意思把你的代码拿去用是不是。<br><br>&nbsp;&nbsp; 但是说学校教的东西与社会脱节就不好了。要我是校长肯定会拍案而起：&#8220;你们把学校当成什么东西了，Java速成班？&#8221;学校教的很多东西都是基础知识，根据《Teach yourself programming in 10 years（想看的自己去google）》，4年是远远不够成为一名优秀的程序员的。我们的确需要花大量的时间在基础课上面，譬如说掌握一两门语言和一点API让你们可以做出真正有用的东西啦，数据结构，网络，数据库，编译原理，操作系统原理，等等等等。但现在的事实是很多高三的学生们在填志愿的时候还不知道自己学了计算机就会上了贼船，所以大量的人是大一的人才开始写代码的。4年当然不够了，所以在学习基础课的时候，我们还需要自己给自己出点难题，写点代码。在我看来，<strong style="COLOR: #ff0000"><span>学校只需要保证一个几乎把自己所有的时间投入到代码中去的人能够找到合理的工作</span>就好了</strong>。谁让他花那么多时间玩游戏的（其实我也喜欢玩，但我不会没日没夜的，写完代码才会玩的），那将来结果不尽人意只能怪自己了。<br><br>&nbsp;&nbsp;&nbsp; 需要注意一点的是，上面那句话最后几个字是&#8220;合理的工作&#8221;而不是&#8220;理想的工作&#8221;。为什么呢？这跟你学了什么东西是很有关系的。找到理想的工作还要有一个前提，跟学校无关的，就是你要挖掘出自己的兴趣所在。你往那方面不短拼命练习，就可以保证你可以只找你喜欢的工作，找到了当然是理想的了。如果你并不是特别喜欢写代码，但是也成为了一名不错的程序员的话，那只能说是合理了。好工作，但你不喜欢罢了。<br><br>&nbsp;&nbsp;&nbsp; 先总结一下，学校教基础，实用的自己去学。至于那些理论课有什么用，<span>当你一个工程的代码写到了好几万行而且里面绝大多数都不是用来处理UI和SQL的时候，你就能开始理解了</span>。<br><br>&nbsp;&nbsp;&nbsp; 第二点，思想周密谨慎。文章下面只有一句话，其实说是说对了，只是泛泛而谈也不能当指南来看。当然我并不是在批评作者，说不定人家本来就不想写指南，只是&#8220;读者有心&#8221;罢了。<br><br>&nbsp;&nbsp;&nbsp; 思想为什么要周密谨慎，因为计算机语言太低级，我们不得不去处理大量的其实跟我们要解决的问题没什么关系的细节。为了很好的掌控这些东西，就要学习学校教给你们的那些所谓与社会脱节的基础课啦。就跟学数学一样，就算你将来真的不用考计算微积分来吃饭，但好歹学那个东西还是提高了你的智商的。如果你有幸真的需要考那些基础课来混饭吃的话，那你就更会体会到它们的重要性了&#8230;&#8230;说白了还是那句话，实践出真知啊。趁着还在读书的时候赶紧写代码，等到将来被HR鄙视就晚了。<br><br>&nbsp;&nbsp;&nbsp; 第三点，不要因为代码简单就不想写。文中的一个观点就是，同一个东西，你写的次数越多，你解决它的方法就越美妙。这就是为什么我们要不断地重写重构的原因了，代码速度越快，<span>并且越容易维护的话，将来遇到需求变更你就不用觉得自己快死了一样。</span><br><br>&nbsp;&nbsp;&nbsp; 第四点就不评论了。记得在Channel9看一个叫eric的老头讲解haskell的时候，他不停的说要&#8220;Put your love in your code.&#8221;要有爱。为了能让自己的爱发挥作用，当然首先要让自己写出漂亮的代码了。<br><br>&nbsp;&nbsp;&nbsp; 总结：不要抱怨学校，高考志愿是你自己填的。总的来说文章的大道理还是对的，就是论据稍微有点什么，总之自己看着办吧。 
<img src ="http://www.cppblog.com/vczh/aggbug/106896.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/vczh/" target="_blank">陈梓瀚(vczh)</a> 2010-01-31 19:44 <a href="http://www.cppblog.com/vczh/archive/2010/01/31/106896.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>为什么要MVC</title><link>http://www.cppblog.com/vczh/archive/2010/01/08/105189.html</link><dc:creator>陈梓瀚(vczh)</dc:creator><author>陈梓瀚(vczh)</author><pubDate>Fri, 08 Jan 2010 11:58:00 GMT</pubDate><guid>http://www.cppblog.com/vczh/archive/2010/01/08/105189.html</guid><wfw:comment>http://www.cppblog.com/vczh/comments/105189.html</wfw:comment><comments>http://www.cppblog.com/vczh/archive/2010/01/08/105189.html#Feedback</comments><slash:comments>8</slash:comments><wfw:commentRss>http://www.cppblog.com/vczh/comments/commentRss/105189.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/vczh/services/trackbacks/105189.html</trackback:ping><description><![CDATA[<p>&nbsp;&nbsp;&nbsp; 最近在公司写了一大堆复杂的界面，终于体会到了前辈们那种上刀山下火海的感觉了。做完了之后回头想想，MVC还是有道理的。</p>
<br>&nbsp;&nbsp;&nbsp; 什么是MVC？其实可以简单的理解为一个有UI的程序可以划分为三个部分：数据层、逻辑层和应用层。当然这些名字是我乱起的。数据层顾名思义就是用来读写数据的地方，譬如说一个电话本的文件。逻辑层就是用户在界面上的操作的抽象，譬如说要通过名字来查找消息啦，给一个关键字求得筛选后的电话信息列表啦。应用层指的就是那一堆控件了。MVC三个字母分别指的是Model、View和Controller，也就是模型、视图和控制器了，分别对应于数据层、应用层和逻辑层。<br><br>&nbsp;&nbsp;&nbsp; 以前在看MVC的时候总是被一些教条主义的东西迷惑，说什么在MVC里面，MV解耦，所以M可被替换，V也可被替换。这个时候往往会感到迷惑。为什么模型，或者说数据层要被替换？为什么视图，或者说界面要被替换？其实这在一个不是复杂到神级级别的程序里面是不会发生的。但是MVC并不是为了让你能够实现模型被替换或者试图被替换而产生出来的，我觉得这个模式（其实这不是设计模式的其中一项，真的）更加重要的特点是可以让你的程序写起单元测试来更加容易。<br><br>&nbsp;&nbsp;&nbsp; 还是电话本，现在有一个要求，说在输入人的名字之后，只要系统检查出你超过0.5秒没有持续输入，那么底下的列表就会自动根据你上面的输入进行筛选。其实这有点像Outlook。这要怎么写单元测试？我们知道虽然正规的测试会有一大堆用来自动完成界面操作的工具啊，或者类库，但是作为单元测试来讲我们并不需要去做这种事情。因为单元测试是程序员写的，凡是程序员写的东西当然是需要尽快得到结果的。一般的开发方法是写一点代码，写一点测试，跑，有bug改没有bug继续。我们在开发程序的时候会不断地、频繁地跑单元测试，来看看我们的东西是不是有问题，或者在重构的时候我们对于我们的代码正确的信心会大一点。<br><br>&nbsp;&nbsp;&nbsp; 那界面怎么办呢？难道我们真的要去引入一个库来搞界面的自动测试吗？当然想要也可以，不过这毕竟太复杂，而且这一类的工具的稳定性其实都不是特别好，被误导的几率倒是大增。这仅仅是对于程序员来讲的，当然搞测试的那些人自有他们的办法。那既然我们不做界面的自动测试那怎么知道文本框被输入之后究竟筛选出来的数据对还是不对呢？<br><br>&nbsp;&nbsp;&nbsp; 答案：MVC。<br><br>&nbsp;&nbsp;&nbsp; 为什么View，也就是试图，也就是界面，可以被替换是一件很重要的事情？想一想，如果控件可以被换成单元测试的一段代码，那岂不是很爽么？举个例子，我们要告知用户说，我们的事情已经做了一半了，这个时候我们可能会去设置进度条的位置。但是&#8220;告诉用户说我们的事情已经做了一半&#8221;跟&#8220;设置进度条的位置&#8221;其实是完全无关的两件事情。因此我们的Controller要负责通知View说事情做了一半了，然后View就可以去设置进度条的位置了。现在我们把View换成单元测试的一段代码，这个时候就变成Controller通知测试程序说事情已经做到一半了，然后测试程序就会去检查说现在是不是应该做到了一半，如果应该，显然这个用例就通过了。<br><br>&nbsp;&nbsp;&nbsp; 那Model呢？Model可以简单的理解为数据源，其实当然不只是那么简单，不过这样理解会让我们更容易接受一点。数据源是什么，当你写单元测试的时候，去连接一个数据库来获得数据源，然后就操作Controller，这个时候你如果不亲自去读一下数据库，你怎么知道Controller给你的东西究竟是对的还是错的？显然Model我们也可以换掉，测试程序伪造数据成为一个Model，然后插入Controller，事情就解决了。数据是我们自己给的，那Controller应该提供什么我们也能知道了。<br><br>&nbsp;&nbsp;&nbsp; 于是，使用了MVC之后，单元测试想换Model就换Model，想换View就换View，测试什么就非常容易了。至于说用户停止输入0.5秒之后是不是会真的去进行数据的筛选，这个我们手工测试就好了，而且那些搞测试的人也会帮我们检查的。<br><br>&nbsp;&nbsp;&nbsp; 好吧，说到这里有人可能会问为什么我没有给出一个Demo？这东西太虚，实践实践自己体会一下就行了，而且MVC变形那么多，有Model-View-Presenter，还有最近兴起的Model-View-ViewModel等等，其实现都跟传说中的那个类似桥接模式的东西差别甚远。这个自己去看一看就好了。
<img src ="http://www.cppblog.com/vczh/aggbug/105189.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/vczh/" target="_blank">陈梓瀚(vczh)</a> 2010-01-08 19:58 <a href="http://www.cppblog.com/vczh/archive/2010/01/08/105189.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>2005-2009年个人总结</title><link>http://www.cppblog.com/vczh/archive/2009/12/23/103835.html</link><dc:creator>陈梓瀚(vczh)</dc:creator><author>陈梓瀚(vczh)</author><pubDate>Wed, 23 Dec 2009 13:22:00 GMT</pubDate><guid>http://www.cppblog.com/vczh/archive/2009/12/23/103835.html</guid><wfw:comment>http://www.cppblog.com/vczh/comments/103835.html</wfw:comment><comments>http://www.cppblog.com/vczh/archive/2009/12/23/103835.html#Feedback</comments><slash:comments>35</slash:comments><wfw:commentRss>http://www.cppblog.com/vczh/comments/commentRss/103835.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/vczh/services/trackbacks/103835.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp; 今年事情比较多，第一个是自己终于从本科毕业了，第二个是自己找到了工作，拿了一份offer。虽然当初为了去Microsoft实习错过了一大堆其他公司的面试机会，只投了Microsoft，Google和百度。不过最后还是进了Microsoft，在这危机四伏的日子里，虽然说自己写了10年代码总归有点功力，但是也有运气的成分在。只是面试百度的时候我明明在简历上写了我人在上海，他非要我飞回广州面试，很不爽，拒了他。<br><br>&nbsp;&nbsp;&nbsp; 去年下半年几乎都投身Microsoft的实习，到了12月上旬回学校，于是从今年的元旦开始其实就是在学校里面混日子了。其实还好，完成了一个<a style="TEXT-DECORATION: underline" href="http://www.cppblog.com/vczh/category/6825.html" target=_blank>阉割版的Haskell编译器</a>当毕业设计，还做了一个<a style="TEXT-DECORATION: underline" href="http://www.cppblog.com/vczh/archive/2009/05/22/85424.html" target=_blank>C语言编译到机器码写入内存的编译器</a>，最后<a style="TEXT-DECORATION: underline" href="http://www.cppblog.com/vczh/archive/2009/10/09/98207.html" target=_blank>重写了Vczh Library++3.0</a>，还把它<a style="TEXT-DECORATION: underline" href="http://vlpp.codeplex.com/" target=_blank>开源</a>了，虽然还没最终完成。不过开源了之后就得补文档了，因此近期的开发进度可能会慢一点。<br><br>&nbsp;&nbsp;&nbsp; 回想大学四年，还是写了不少代码的，也足够拼成一张至少可以留住HR眼球的简历了。当初比较大的转变是我刚上大一，可怜的Borland就不行了，于是很喜欢的Delphi看来也有危机了，所以转去C++。幸好所学的知识并不是绑定在Delphi的平台上，因此刚开始也只觉得是换了个语法。不够C++实在是博大精深，里面可以用各种各样的范式写代码，比较突出的是元编程，虽然这种东西在现实生活中重要性不言而喻不过所占比例还是很小的。<br><br>&nbsp;&nbsp;&nbsp; 于是开始拿C++练手了。高中的Delphi时代写了不少游戏，积累了一个2D的游戏引擎，其实也不复杂，不过好歹也到了3.0了，里面有图形图像、音效、数据管理、脚本引擎，还有一个UI。因此C++上手了之后，自然是移植它了。移植的过程中发现C++的写法跟Delphi还是截然不同，因此Vczh Library++ 1.0基本上是失败告终，虽然那个Delphi的游戏引擎大部分都实现了。在开发的途中我曾经写了一个模仿显卡固顶管线的3D软件渲染器，不过最后一个Demo应该是在大二，用OpenGL实现了3D模型的骨骼动画，用的好像还是Halflife 1的几个模型，什么鸟啊，僵尸啊，警察啊。后来觉得实在是找不到美工，而且自己还有一项喜欢的，也就是写编译器了，所以干脆就集中力量搞编译器吧。<br><br>&nbsp;&nbsp;&nbsp; 第一个见得人的编译器应该是<a style="TEXT-DECORATION: underline" href="http://www.mscenter.edu.cn/prj/Prj_Info.aspx?id=1446" target=_blank>Vczh Jove Script</a>了。这个东西阉割了Java，然后实现了一次，主要是针对OOP，有继承，有虚函数，还有泛型。当然泛型我实现了跟C#一样的参数约束，也就是可以指定说某个类型参数必须继承与另一个类。数组使用引用计数，其他的都垃圾收集。当然最后发现数组用引用计数是不对的，会导致垃圾收集。<br><br>&nbsp;&nbsp;&nbsp; 之后我就对计算机的理论燃起了热情了，首当其冲当然是编译原理。当时受到了CSDN上那个袁泳的一点指导，其实主要不是技术上的，是方向上的，后来给我看了一本很厉害的书叫《Parsing Techniques》。很多知识都从这里面吸收了，然后就要开刀，当然是从最简单的正则表达式引擎下手。第一次写还是有点别扭，到现在一共写了三次，其中第二次是在第一次写完了之后觉得很不爽立刻重写的。写完了就轮到Syngram，是一个将文法写进C++然后自动变成语法分析器的小库。当然后来也重写了。<br><br>&nbsp;&nbsp;&nbsp; 上面的事情完成了之后就着手<a style="TEXT-DECORATION: underline" href="http://www.cppblog.com/vczh/archive/2008/07/01/55072.html" target=_blank>Vczh Free Script</a>的开发了。这是一个&#8220;纯&#8221;动态语言。为什么说纯呢，因为我坚持所有东西匿名（包括类定义，其实结果就是返回一个类型，像C#的System.Type，然后可以到处传），所以为了给一个东西命名就写一个赋值语句。当然不仅如此，我还实现了函数闭包，然后将之后的所有特性譬如说动态的Multiple Dispatch（虚函数是Single Dispatch）啊，namespace啊，类和继承什么的统统编译到函数闭包上，整个语言是匿名的。当然我还是把它是实现成一个C++的类库，如果你愿意在我的接口下面写插件的话，就可以跟Python一样直接应用到你自己的工程里面去了。<br><br>&nbsp;&nbsp;&nbsp; 在这个过程中我学习了很多关于编程语言方面的基础理论，还学了一点数学虽然我还是觉得数学有点难度。完了之后就开发一个小型的IDE，其亮点是就算代码是动态生成的，我也能捕捉到然后给你单步调试。不过这个由于稳定性并不是非常好，第一次将C++跟C#混起来用还是有点力不从心，因此就没拿出来贡献给大家了。<br><br>&nbsp;&nbsp;&nbsp; 之后就开始Microsoft的实习之旅了，在实习的过程中我首先封装了一次win32api的GUI部分，尽量达到跟Delphi一样好用，于是有了这个<a style="TEXT-DECORATION: underline" href="http://www.cppblog.com/vczh/archive/2008/08/25/59954.html" target=_blank>Demo</a>，然后做了阉割版Haskell——也就是Kernel FP了。当初叫这个名称我只是想看看实现一个最小的纯函数式语言的内核要怎么办，要包含多少功能（当然是越少越好，其他的都是语法糖或者库，不过不能让能力下降）。后来又看了一本书好像叫做《The Implementation of Functional Programmang Languages》，也很好看，学到了很多东西。<br><br>&nbsp;&nbsp;&nbsp; 于是2008年就结束了，进入2009年，做了一个CMinus，可以把C语言编译到内存里面，搞成x86的机器码，然后就能将一个写了代码的txt文件变成一个函数指针了。然后就毕业了。<br><br>&nbsp;&nbsp;&nbsp; 7月13日开始入职Microsoft，虽然说是在开发界面，不过我还是觉得需要自己仍然保持热情，于是工作结束之后自己要继续写自己的代码，也就是Vczh Library++ 3.0了。上面做了很多4个编译器，刚好针对语言的4中特性，这次看看能不能把它们综合起来，变成一个真正有用的脚本引擎。当然这不是重复劳动了，毕竟自己实现给自己带来的质的提高会比你纯粹用别人的要高很多。但至于最后怎么办，其实我还是觉得.NET的潜力比较大，总之挑战它是不明智的，但我还是想自己试一试。<br><br>&nbsp;&nbsp;&nbsp; 从第一个QBasic的Hello World到现在也差不多要10年了，初中因为不小心拿到了本QBasic的书然后戏剧性地开始了我程序员的人生，所幸中间没有间断过，而且也将对一贯来编程的激情很好的保存了下来，有增无减。至于说30岁（其实日本说的是35岁）就要转管理什么的，我还是不太相信，或者说我愿意就做一线的开发人员，或者架构师（当然这个跟通常意义上的架构师还是不一样的，有朝一日真的给我做了，我还是想跟一线的程序员一起写代码）。管理还是不适合我，毕竟我对钱（或者是权力？）没那么渴望，够花就好了，虽然我自己没多少钱。<br><br>&nbsp;&nbsp;&nbsp; 总之，要有激情，无论是对什么事情。剩下的就是要追求快乐，不同的人对快乐的定义还是不一样的，不过我目前只要能写有挑战性的代码，我就会觉得很快乐了。工作了之后因为在上海，瞬间感到了房价的压力。只是如果要我牺牲写代码的时间和乐趣去换取那些所谓的财产，我还是不太愿意的。 
<img src ="http://www.cppblog.com/vczh/aggbug/103835.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/vczh/" target="_blank">陈梓瀚(vczh)</a> 2009-12-23 21:22 <a href="http://www.cppblog.com/vczh/archive/2009/12/23/103835.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>李开复：我很惊讶大学生找工作要问家长</title><link>http://www.cppblog.com/vczh/archive/2009/11/16/101096.html</link><dc:creator>陈梓瀚(vczh)</dc:creator><author>陈梓瀚(vczh)</author><pubDate>Mon, 16 Nov 2009 08:52:00 GMT</pubDate><guid>http://www.cppblog.com/vczh/archive/2009/11/16/101096.html</guid><wfw:comment>http://www.cppblog.com/vczh/comments/101096.html</wfw:comment><comments>http://www.cppblog.com/vczh/archive/2009/11/16/101096.html#Feedback</comments><slash:comments>5</slash:comments><wfw:commentRss>http://www.cppblog.com/vczh/comments/commentRss/101096.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/vczh/services/trackbacks/101096.html</trackback:ping><description><![CDATA[<a href="http://news.cnblogs.com/n/51405/">http://news.cnblogs.com/n/51405/</a><br><br>　　年9月，刚刚辞去谷歌全球副总裁、大中华区总裁的李开复博士，又创立了旨在培育创新人才和新一代高科技企业的创业平台——创新工场。几个月来，李开复奔赴全国各地，四处招贤纳才。在三四十名得到面试通知的大学生中，一些人的求职理由让他感到非常惊讶。 <br><br>　　&#8220;我父母觉得我跟着李开复干就对了！&#8221; <br>　　&#8220;我父母觉得我应该去家跨国公司工作。&#8221; <br>　　&#8220;我父母希望我待在上海。&#8221; <br>　　&#8220;来应聘到底是你的决定还是你父母的决定？&#8221;听完这些大学生的回答，李开复感觉很无奈，便跟他们说：&#8220;我来发一封E－mail跟你的父母沟通一下吧。&#8221;&#8220;对不起，我的父母不会用E－mail。&#8221; <br><br>　　不会用E－mail的父母，居然告诉孩子应该去哪一个互联网公司工作，这不是很奇怪的事吗？11月14日，在第二届新东方家庭教育高峰论坛上，李开复跟大家分享了他最近的一些经历，并郑重地告诉在座的家长，在严管和压力下长大的孩子，虽然听话，但最后可能会失去管理自己的能力，甚至没法独立。 <br><br>　　他建议，在家庭教育中，家长对孩子要多信任、多放权，少严管、少施压。在当今时代，家长可能不懂下一代，不清楚孩子自己希望成为一个什么样的人。此外，如果家长帮孩子做了太多的决定，会让孩子形成一种心理：反正有父母帮我作决定，这不是我的责任。当他有一天面对独立，他的路反而会走得非常艰难。 <br><br>　　&#8220;我常常在大学演讲时听到学生举手问，你总告诉我们要追随我心，可我不知道我心是什么。你总告诉我们要学自己有兴趣的东西，但是我不知道自己的兴趣是什么。&#8221;李开复认为，过于严格的管教，已经使得一些从小生长在被动环境里的孩子，被培养成机器，他们听不到自己的声音，找不到自己的兴趣，不知道自己将成为什么样的人。 <br>　　李开复也承认，在实施家庭教育的过程中，每个人都会犯错，都会有管得太多的时候，但关键是要让孩子知道，最终的决定权掌握在他们自己手中。
<img src ="http://www.cppblog.com/vczh/aggbug/101096.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/vczh/" target="_blank">陈梓瀚(vczh)</a> 2009-11-16 16:52 <a href="http://www.cppblog.com/vczh/archive/2009/11/16/101096.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>（转）架构师已死（转自UML软件工程组织） </title><link>http://www.cppblog.com/vczh/archive/2009/10/27/99578.html</link><dc:creator>陈梓瀚(vczh)</dc:creator><author>陈梓瀚(vczh)</author><pubDate>Tue, 27 Oct 2009 07:57:00 GMT</pubDate><guid>http://www.cppblog.com/vczh/archive/2009/10/27/99578.html</guid><wfw:comment>http://www.cppblog.com/vczh/comments/99578.html</wfw:comment><comments>http://www.cppblog.com/vczh/archive/2009/10/27/99578.html#Feedback</comments><slash:comments>46</slash:comments><wfw:commentRss>http://www.cppblog.com/vczh/comments/commentRss/99578.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/vczh/services/trackbacks/99578.html</trackback:ping><description><![CDATA[<p class=content>2006年的职场出奇的冷清，相比前几年，简历的数量和质量都大为不如，很难得找到三年工作经验以上的人，有一个不是特别笨，就是特别怪。就是么，干得好谁没事换工作啊！Simon是一家外企软件公司的总经理，最近给这个问题愁坏了。项目一个接一个的接下来，人手越来越紧张。虽然Simon是个极限编程的粉丝，但也不得不批准了一份又一份的加班申请。HR经理把这个问题归结到房价上，他的妙论是&#8220;怕失业了还不上房款，不敢跳槽&#8221;。</p>
<p class=content>这天，K项目组长Allen终于忍不住了，带了一个只有一年工作经验的小伙子要Simon面试，&#8220;很聪明！经验少了点。&#8221;</p>
<p class=content>Simon皱了皱眉毛，说：&#8220;你不知道这个职位最低要求是三年工作经验吗？&#8221;</p>
<p class=content>Allen说：&#8220;这已经是三个月里通过技术考试中最好的一个了，老大，试试吧。&#8221;Allen是Simon多年的哥们，比较随便。</p>
<p class=content>抵到面子上来，Simon只好让Allen把小伙子带进来。</p>
<p class=content>Simon的面试通常是三步曲：</p>
<p class=content>问题一：你能说说毕业后的主要工作经历吗？</p>
<p class=content>问题二：再说说你在公司的地位？</p>
<p class=content>问题三：你的发展目标是什么？等回答后，比如说构架师，他就跟着问：想象一下你当构架师的一天，说给我听听？</p>
<p class=content>小伙子回答第一问题很快很清楚，一年工作当然没什么东西。Simon觉得小伙子挺聪明。所以在小伙子回答了第二个问题后，问了一个发散性的问题：&#8220;你刚才说你在公司里处于中等水平，那比你差的人为什么会比你差呢？&#8221;</p>
<p class=content>这个问题是个陷阱。</p>
<p class=content>小伙子冒冒失失回答说：&#8220;我觉得他们每天工作是为工作而工作，工作没有责任感。&#8221;</p>
<p class=content>Simon点点头说：&#8220;是吗？那真是糟糕的员工。那你刚好比糟糕的员工好一点了？&#8221;</p>
<p class=content>小伙子的脸一下子红了，&#8220;我不是这个意思&#8230;&#8230;&#8221;</p>
<p class=content>&#8220;好了，那你说说比你好的人为什么比你强？&#8221;</p>
<p class=content>&#8220;我觉得他非常努力，工作很多年了还在学习各种构架，水平很高。&#8221;于是Simon就问那最后一个问题。果然，小伙子回答的是要成为构架师。大概70％的人想成为构架师。但是构架师是什么呢？</p>
<p class=content>Simon问道：&#8220;那你为什么要成为构架师呢？&#8221;</p>
<p class=content>小伙子一愣，大概还没有人这么置疑过他。&#8220;年纪大了，不能老写程序吧。&#8221;这个回答，让Simon想起关于他对什么是老的定义：当你希望做年轻人做的事情时，你就还年轻；如果你希望做老年人做的事情，你就老了。这和你出生了多长时间是没有关系的。</p>
<p class=content>Simon接着问：&#8220;好吧，那你说说你成为构架师以后，每天都会做什么？&#8221;</p>
<p class=content>小伙子说：&#8220;我还没想过，不过，我想应该主要是需求分析，设计构架吧&#8230;&#8230;&#8221;这大概是现在年轻人的通病，年轻人很容易追逐一些自己也不清楚的目标。</p>
<p class=content>Simon问：&#8220;那设计构架具体都做些什么呢？&#8221;</p>
<p class=content>小伙子这次的回答是：&#8220;比如，选择程序框架，决定用Spring或Struts等等。&#8221;</p>
<p class=content>&#8220;哦，那我问你，你怎么说服别人是用Spring还是Struts呢？&#8221;</p>
<p class=content>&#8220;如果我有经验，我会知道哪个更好&#8230;&#8230;&#8221;</p>
<p class=content>&#8220;是吗，但关于Spring或Struts的知识任谁都可以很容易得到。如果别人不同意你的建议，你怎么说服他？如果同意你的建议，那你不过是作出了和别人一样的认识，别人又凭什么认可你呢？&#8221;</p>
<p class=content>小伙子没想过构架师日子里还有一个说服人的工作，说：&#8220;我是构架师，我应该有权力做决定吧？&#8221;</p>
<p class=content>Simon想起权力的三种层次，第一层，任命；第二层，专业；第三层，品德。</p>
<p class=content>Simon问：&#8220;如果在一个成熟的软件企业里没有你所想象的构架师呢？或者说，构架师这种职业已经死亡或消失了呢？你会怎么定位你的职业？&#8221;</p>
<p class=content>小伙子显得很震惊。</p>
<p class=content>Simon画了一个系统构架，然后又给小伙子看了一段代码。</p>
<p class=content>&#8220;那一个更难懂？&#8221;Simon问。</p>
<p class=content>小伙子指着代码说：&#8220;代码难懂。&#8221;</p>
<p class=content>Simon的解释是：&#8220;这就是为什么实际上所谓的构架师不存在的原因。一个更简单的东西怎么会更有价值呢？每个人都能够画出这种构架图，但不是每个人都能写出好的代码。&#8221;</p>
<p class=content>送走了小伙子，Simon有点难受。他有点喜欢这个小伙子，但是，这又是一个被愚蠢的教育和误人子弟的技术杂志污染的家伙。Simon在自己的笔记本中加了一句话：中国程序员最愚蠢的认识之三：我想当构架师。前面两个赫然是：</p>
<p class=content>35岁后写不动程序了；</p>
<p class=content>我只要做Java（C＋＋）；</p>
<img src ="http://www.cppblog.com/vczh/aggbug/99578.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/vczh/" target="_blank">陈梓瀚(vczh)</a> 2009-10-27 15:57 <a href="http://www.cppblog.com/vczh/archive/2009/10/27/99578.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>丘奇数（Church Numerals）和lambda calculus</title><link>http://www.cppblog.com/vczh/archive/2009/05/11/82611.html</link><dc:creator>陈梓瀚(vczh)</dc:creator><author>陈梓瀚(vczh)</author><pubDate>Mon, 11 May 2009 12:30:00 GMT</pubDate><guid>http://www.cppblog.com/vczh/archive/2009/05/11/82611.html</guid><wfw:comment>http://www.cppblog.com/vczh/comments/82611.html</wfw:comment><comments>http://www.cppblog.com/vczh/archive/2009/05/11/82611.html#Feedback</comments><slash:comments>7</slash:comments><wfw:commentRss>http://www.cppblog.com/vczh/comments/commentRss/82611.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/vczh/services/trackbacks/82611.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 以前为了开发KFP，特别学习了一下lambda calculus（也就是我的博客的标题啦）。lanbda calculus是一门神奇的语言，在计算机出现之前就已经被搞出来了。这门语言只有三种语法，然后可以用这个语法来构造整数（！！！）、布尔型和很多递归数据结构等。<br><br>内含代码&nbsp;&nbsp;<a href='http://www.cppblog.com/vczh/archive/2009/05/11/82611.html'>阅读全文</a><img src ="http://www.cppblog.com/vczh/aggbug/82611.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/vczh/" target="_blank">陈梓瀚(vczh)</a> 2009-05-11 20:30 <a href="http://www.cppblog.com/vczh/archive/2009/05/11/82611.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>【转】How to make programming hard for yourself </title><link>http://www.cppblog.com/vczh/archive/2009/05/09/82432.html</link><dc:creator>陈梓瀚(vczh)</dc:creator><author>陈梓瀚(vczh)</author><pubDate>Sat, 09 May 2009 14:55:00 GMT</pubDate><guid>http://www.cppblog.com/vczh/archive/2009/05/09/82432.html</guid><wfw:comment>http://www.cppblog.com/vczh/comments/82432.html</wfw:comment><comments>http://www.cppblog.com/vczh/archive/2009/05/09/82432.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/vczh/comments/commentRss/82432.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/vczh/services/trackbacks/82432.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 这篇转载的文章主要讲了为什么写非工作的代码的时候，要时不时刁难自己。<br><br>内详。&nbsp;&nbsp;<a href='http://www.cppblog.com/vczh/archive/2009/05/09/82432.html'>阅读全文</a><img src ="http://www.cppblog.com/vczh/aggbug/82432.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/vczh/" target="_blank">陈梓瀚(vczh)</a> 2009-05-09 22:55 <a href="http://www.cppblog.com/vczh/archive/2009/05/09/82432.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>如何学习编程（二）</title><link>http://www.cppblog.com/vczh/archive/2008/06/11/52880.html</link><dc:creator>陈梓瀚(vczh)</dc:creator><author>陈梓瀚(vczh)</author><pubDate>Wed, 11 Jun 2008 08:03:00 GMT</pubDate><guid>http://www.cppblog.com/vczh/archive/2008/06/11/52880.html</guid><wfw:comment>http://www.cppblog.com/vczh/comments/52880.html</wfw:comment><comments>http://www.cppblog.com/vczh/archive/2008/06/11/52880.html#Feedback</comments><slash:comments>7</slash:comments><wfw:commentRss>http://www.cppblog.com/vczh/comments/commentRss/52880.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/vczh/services/trackbacks/52880.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要:     接着上一篇文章继续往下讲。如果按照上一篇文章走下去的话，现在估计做了有些小软件了吧。字符串和图形都容易做大，而且对于潜意识上喜欢数学的最有希望的程序员们也是有吸引力的。但是这两种东西却不容易做好。等到程序到了一定规模的时候，维护和效率这两大问题就会凸显出来。心急吃不了热豆腐，为了解决维护和效率这两个经常会出现的问题，我们需要学习算法和架构。这两种东西是可以同时学的，但是一篇文章说不了多少东西，那么就从算法开始吧。<br><br>    程序员是需要开阔眼界的，光C#一门也是不行的，毕竟程序运行在各种平台上，有各种各样的语言。譬如Win32上的native C/C++、Delphi等，.NET上的C#和VB.NET，还有自成体系的Java，然后就是运行在mainframe上的COBOL，剩下的还有各种各样的函数式语言、脚本语言等等。熟悉了C#的人从Delphi入手不会很困难，从C/C++入手也可以了。这两门原本是本地语言的语言在编写程序的时候需要我们注意多一些的东西，典型的就是内存管理。这还是需要多加练习的，在这里就不多说了。<br><br>    说到算法，在这里首先向&nbsp;&nbsp;<a href='http://www.cppblog.com/vczh/archive/2008/06/11/52880.html'>阅读全文</a><img src ="http://www.cppblog.com/vczh/aggbug/52880.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/vczh/" target="_blank">陈梓瀚(vczh)</a> 2008-06-11 16:03 <a href="http://www.cppblog.com/vczh/archive/2008/06/11/52880.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>如何学习编程（一）</title><link>http://www.cppblog.com/vczh/archive/2008/06/07/52414.html</link><dc:creator>陈梓瀚(vczh)</dc:creator><author>陈梓瀚(vczh)</author><pubDate>Sat, 07 Jun 2008 02:29:00 GMT</pubDate><guid>http://www.cppblog.com/vczh/archive/2008/06/07/52414.html</guid><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要:     终于还是要写这种文章了。期末考试将至，写大程序没时间，写小程序没动力，只要演变成写文章了。之前的两篇字符串处理写完了仍然不过瘾，打算继续写关于递归下降法和LALR的事。后来想想还是暂时写写关于如何学习编程的好，毕竟这个问题对大家来说更加有益。<br><br>    本篇将是一个系列，重点讲述在外力很少的情况下如何自学编程，以及需要注意的一些地方。<br><br>    一般来说，一些所谓的『高手』或者老师会告诉人们算法是非常非常重要以至于会不会算法就是你会不会编程的唯一标准。不过事实上并非如此。掌握算法固然是好，只是大部分程序并不需要高深的算法，而且招人的时候仅仅要求会算法的公司也是很少的（而且很难进）。我并不是学院派的人，所以虽然我本人也推崇学习算法，但并不推崇一开始就学习算法。<br><br>    刚开始学编程的人总是不知道自己应该从哪里入手。实际上这是一个相当重要的问题。在我看来，学好变成有若干条件：<br>    ·兴趣<br>    ·数学/英语<br>    ·财力<br><br>    首先谈一谈兴趣。那些为了生计而寻找捷径学习编程的人并不&nbsp;&nbsp;<a href='http://www.cppblog.com/vczh/archive/2008/06/07/52414.html'>阅读全文</a><img src ="http://www.cppblog.com/vczh/aggbug/52414.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/vczh/" target="_blank">陈梓瀚(vczh)</a> 2008-06-07 10:29 <a href="http://www.cppblog.com/vczh/archive/2008/06/07/52414.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>