随笔:27 文章:9 评论:165 引用:4
首页
发新文章 管理

2008年8月26日

半年多过去了,找到一个新的起点。重新收拾一下心情,开始我的每周技术更新,hoho~~
posted @ 2008-08-26 10:22 Joey Yin 阅读(16) | 评论 (1)编辑

2007年11月18日

这几天在为公司招聘的事情奔忙,从各大招聘网站和CNBLOG都收到不少的简历,陆陆续续面试了一些人,有些感受,不吐不快。

  • 简历

如果你已经有多年的行业经验,每次跳槽都在通过猎头的话,大可略过我的这篇文字。
IT行业找工作,一般来讲,通过邮件发送简历是第一步。就是这个第一步,却是一块不折不扣的试金石。
提示1:你的邮件完整吗?
完整的一份邮件,应该由一段简短的求职信和你的简历两部分构成。求职信的读者是HR,简历则是为HR和Tech Manager同时准备的。收到过不少冒冒失失的邮件(昨天就有一份),劈头盖脑就是一份附件,没有内容,标题简单到只有两个字:“应聘”。是你的话,收到这种邮件,会如何处理?
另外,求职信里,请注明你是在什么地方看到招聘的广告的,HR会比较喜欢看到这类对她们有价值的信息,原因无须多讲吧?
提示2:你的简历,符合招聘方要求吗?
最基本的常识,很多招聘广告中明明注明了“请直接在正文中发送简历,不要附带附件”。这种情况下,你还大大咧咧丢个word过去……哥们儿,我该怎么说你呢?您是来玩儿来了吧?有这时间,去找个女朋友学学怎么叫做细心吧。
还有比如我要的英文简历,您发个中文的,我怎么帮你安排面试呢?要英文简历不是矫情,很多时候,做决定的人未必都会中文。有一哥们发了中文简历给我,我好心在MSN上提醒他,结果是:“我没时间,你帮我翻译一下吧!”。花点时间,给自己准备一份看得过去的中英文简历,没那么困难吧?相对你的职业发展来说,这点时间难道就那么难从网游和聊天中挤出来吗?
另外,针对你的应聘职位,招聘方一定会有一些要求。不要小看这些看似很General的1,2,3,每一条列出来就一定有它的道理。尽量在你的简历上体现出来。在.net程序开发职位的应聘简历上写满你的java项目,没什么比这个更糟糕了。
总之:慎重对待你的第一份邮件。为什么你的邮件如石沉大海?你怎么对待这封邮件,你就会得到同样的回应。你用心了,自然就有回报,这个是态度问题,不是能力问题。我做开发5年多了,个人感觉90%以上的开发工作,60%以上的人都可以做。但是为什么永远只有10%的人能得到比较好的职位和薪水?这跟能力无关,仅仅是做事的态度和方法问题。认真谨慎永远是很可贵的品质。 
关于如何写好简历,请参考这篇post: How to construct a killer resume. From Start to Finish

  • 面试

提示1:请做好准备。
今天晚上,我陪老板做两个Telephone Interview。其实从简历上来看,两个人都还蛮不错,我之前已经委托hr帮我们约好了时间,晚上7点到8点之间。
结果是:第一个电话迟迟没人接。7:02—7:07,等了整整5分钟,重拨了3次。老板摇摇头:"we can't hire this guy."
也许真的有很重要的事情?即使这样,来个电话提前解释一下不会耽误多少时间吧?
第二个接到电话后听到英文很紧张,没说两句就直接被他挂掉了……这个我等会再说。
对我而言,如果约好7点到8点之间有电话面试,我会提前一个小时做以下工作:检查手机话费情况,检查手机电池是否有电,提前15分钟找一个可以讲话不被打扰的地方,比如家里,咖啡馆等等。
提示2:记住你在简历上写了什么。
面试时,招聘方一般会人手一份你的简历。他们没有其他材料,所以他们可能会在面试时盯着你的简历发问。经常会遇到这种情况:
“请介绍以下你在XX公司做的这个yy项目的基本情况?”
“什么yy项目?我没做过啊。哦?写在简历上啊,我记不起来了,时间太久了吧”
在简历上写点fake project也就罢了,问题是这种造假的素质,还真是没有职业道德啊。
总之同理,你怎么对待面试,你就会得到怎样的回应。

  • 英语

英语是个大问题,其实我接触的很多开发人员的英文读写能力都还是不差的。但是读写是不太好在面试中体现出来的,听说比读写重要。
不管你承认与否,英语的听说能力,在很大程度上会严重影响大多数程序员的薪资和发展。
今天面试的这个小伙子的项目经验其实挺不错了,我也帮他说了很多好话。可是老板不会雇佣一个不敢跟他讲话,吓得直接挂掉电话的人。最起码,打个招呼再解释一下总没什么问题吧?
这方面我没有什么好的建议,英语能力需要长期积累。但是需要你时刻记得提醒自己不要间断学习。
英语很重要。

  • 薪水

“你想要多少?”
这个问题大家都会很头疼,怎么回答都不是。问题既然问出来了,类似“取决于公司的平均水平”,“希望处于行业平均的前20%”等等搪塞的答案是难以过关的。提问者需要一个确切的数目。
基本上到这一步,拿offer不会有太大悬念了。但是薪水该怎么谈呢?
每家公司都会有自己的一套体系。在问这个问题之前,hr或者老板基本上已经给你定了一个价了。但是这个问题的答案及其影响,还是很微妙。
首先问自己:这个公司给多少钱,我就愿意来?定下你的bottom line.基本上,对个人来讲,每次跳槽,加薪20%-30%左右是比较合理的。
其次问自己:在整个面试过程中,老板对我的表现满意程度如何?
最后问自己:如果在这里2年都没有加薪,我拿多少钱可以不用考虑跳槽?
在以上基础上,拿到合理的offer之后就不要多想了。天天在公司里打听同事的薪水只会有两种后果:要么你郁闷了同事,要么同事郁闷了你。
自己满意就是合理的。

posted @ 2007-11-18 13:41 Joey Yin 阅读(4042) | 评论 (39)编辑

2007年11月10日

How to Construct a Killer Resume, From Start to Finish

Step 0: Do NOT fire up Microsoft Word and use a generic resume template.

Absolutely, positively, do NOT do this, no matter what. Microsoft Word is a powerful program, but just firing it up and opening up one of the included resume templates does one thing and one thing alone - make your resume look like everyone else’s. You want your resume to look unique and memorable, but classy - Word’s default templates will not cut the mustard.

Step 1: Open a plain text document and start listing all of the information you might ever include on a resume

List the details of every job, including every possible relevant accomplishment at each one. List every organized activity you’ve ever participated in, and every noteworthy honor you’ve received in your life. List everything.

Tip #1: If you don’t know where to start, include the following in this order:

Work experience (dates, names of employers, location, tasks, accomplishments)
Education (dates, degrees obtained, location)
Specific skills
Honors and awards
Other activities of note (professional organizations, special skills, etc.)

This is essentially your “default resume.” You’re never going to send it to anyone. Instead, you’re going to use it to quickly build the real resumes that you will send to potential employers.

Step 2: Read and research the job you’re interested in applying for

Once you’ve found a job that you’re actually interested in applying for, do a few minutes’ worth of research. Find out as much as you can quickly about the job itself and the employer. If you don’t understand fully what you’re applying for and who your employer is going to be, you’re essentially tossing things at the wall and hoping it will stick.

Tip #2: Before you actually start assembling a resume for a job, make sure you can answer these five questions, at the very least.

What is the likely primary function of the job? What are you being hired to do? This isn’t your job title, but what you will actually be doing.
What is the organization that I’m applying to? Sure, you know the name of the organization, but what is that organization’s function? Do they produce certain products? Do they provide certain services?
What is the reputation of this organization? Applying to Google and to “Joe’s Desperate Search Engine” are two completely different things, even though the jobs may appear very similar on paper. Joe is probably seeking a programmer with very specific skills, while Google is looking for people who exhibit exceptional problem solving skills.
What is my role within this organization? If you accept this job, what will your role be? Will you be working on developing the product directly, or will you be providing services to the public? Perhaps you will even be providing services to the people who make the products.
What skills and attributes point to success with this specific organization in the role I’m going to fill? Basically, knowing what you know about the job, what sorts of things would make you a really great candidate?

Step 3: Open a new copy of your default resume and eliminate everything that isn’t highly relevant or impressive

Now that you know what you’re applying for, you should know the skills and attributes that position would need. Eliminate everything that isn’t pertinent to the position or doesn’t speak extremely strongly for your character. If you’re applying for a job as an administrative assistant, your position as a typist is probably very relevant - but if you’re seeking work as a manager of a department store, it basically just fills out your work history. Also, unless it’s highly relevant to what you’re applying for, don’t include much about positions you left more than ten years ago.

Tip #3: If you’re early in your career, you may wish to list some jobs that don’t match the description very well to establish a work history. That’s fine, but go minimal on describing them.

What you have now is the information you want to put on the resume. Now, let’s polish it up a bit.

Step 4: Make your accomplishments ring with action

Now it’s time to polish up the statements about what you’ve done, focusing on two things: language that indicates that you’ve performed an action, and selection and modification of these statements to appeal to the organization.

First, go through and change all of the descriptions of your work tasks into action sentences. Let’s work through three examples of this.

Bad job attribute: Participated in the development of a data entry program
Better job attribute: Developed a high-throughput data entry program in a team-based environment

Bad job attribute: Chaired three committees
Better job attribute: Led the creation of new company-wide policies

Bad job attribute: Introduced a new filing system and helped set it up
Better job attribute: Implemented a new document organization system

In each case, the move was towards verbs that indicate more decisive action that led to a desired result. Employers want actions that lead to results, not participation.

Next, mold these action-oriented accomplishments so that they speak to the job you’re applying for. Let’s look at that data entry program developer. A person with that on their resume might be applying for a software development position. In that case, one might want to highlight the code-based accomplishment:

Great job attribute: Wrote 22,000 lines of Java for a data-handling class for a high-throughput data-entry tool

On the other hand, if you’re looking for a leadership job, you may want something like this:

Great job attribute: Led a team of seven to develop a high-throughput data entry program

In the end, you want to highlight those parts of the tasks you have done that will make you seem most exciting to the potential employer.

Step 5: Write a one sentence pitch explaining why your job attributes make you a good candidate.

Your resume should not have an objective on it. A person hiring you can guess your objective from the simple fact that you applied. Instead, you should have a statement explaining how your specific skills make you the right person for the job. Here’s a good example.

I have nine years experience developing high-throughput Java-based data entry software and leading teams in the implementation of this software.

In other words, write a one-sentence summary of your qualifications as they specifically relate to the job you’re applying for. This will go right at the top of the resume.

Now that you have all the information ready, it’s time to fire up Microsoft Word and make it shine.

Step 6: Make a polished document out of the material you’ve created

There are several useful tutorials for just this task. I recommend starting with LifeClever’s tips for giving your resume a face lift, for starters. I strongly recommend using Georgia as your font, as it is fairly distinctive while still quite legible in print, and I also recommend making your line spacing 120% (go to Format, choose Paragraph, choose Multiple, and set it to 1.2).

I also recommend putting things in the following order:

Name/address/phone/email
Summary of Qualifications
Work Experience (unless this is your first “real” job)
Professional Organizations (unless these are slim, the eliminate or move to end)
Honors (unless these are slim, then eliminate or move to end)
Education
A note indicating that references are available upon request

Ideally, you want this to be as short as possible. One page, with an additional cover letter, is best. If you feel the need to include more stuff, feel free, but every time you add something more to the resume, you provide more and more cover for your truly excellent attributes to hide in a sea of merely good attributes. One strong approach is to create a short resume and a long resume, and include a short URL (made at TinyURL) to download the longer one if interested. I generally encourage people to include reference contact information in their long resume, but not in the short one.

One last thing…

Remember, always, that you’re trying to sell yourself to the company. Think of yourself as a product on the shelf, next to many competitors. How are you going to grab their attention in a positive way, show off your best attributes, and make them at least consider buying you (i.e., interview you)? Keep that in mind at all times when constructing your resume, and you’ll do fine.

posted @ 2007-11-10 16:10 Joey Yin 阅读(503) | 评论 (1)编辑

2007年6月1日

  • 1. SilverLight Introduction
    Suchit (27 May 2007) [Unedited]
    Tinkering with SilverLight to get a 3D scene rendered in Browser.
    WPF; Arch, Dev
    http://www.codeproject.com/useritems/silverlightintro.asp
    MS在NAB07上发布的最引人注目的,就数SilverLight了,从开发人员的角度,Scchit带你品尝一下银光的美妙滋味。这个家伙是GE印度创新中心的架构师。
    SilverLight Integrates with Browser
  • Transferring data from SAP to .NET using ERPConnect
       - Frank Mayer-Potschak (23 May 2007) [Unedited]
       Description of an interface programming tool for SAP and .NET
       integration
    http://www.codeproject.com/useritems/ERPConnect_Article1.asp
    对有SAP和MIS APP整合需求的朋友来说,MS和SAP还提供了一个重量级的解决方案Duet。我的同事Tyler在第一时间也做了一个Demo,有机会可以详细介绍一下。Frank的这篇文章提供了一个数据集成的简单描述,有实际需求的人一定会很感兴趣。
     
  • SmartCode Generator-How to create Templates
    - Danilo Mendez (22 May 2007) [Unedited]
    SmartCode the Open Source Code Generator
    http://www.codeproject.com/useritems/SCTemplates.asp
    SmartCode是一个“flexible, powerful and open source code generator”,用惯了CodeSmith,用这个换换口味看看。
    SmartCode
  • Role of  HTTP Modules in .NET Security
       - VanithaGanesan (22 May 2007) [Unedited]
       Custom Authorization using HTTP Modules
    http://www.codeproject.com/useritems/NET_Security.asp
    通过Http Modules实现的安全认证方式,代码很简单,入门读物。有一段描述很精辟:
    When a Web request for a page is raised it gets processed by ASP.NET Pipeline Objects. First the request is received by HTTP Runtime Object from the IIS and gets directed to the respective HTTP Application object. Further, the request gets filtered by various HTTP Module objects such as Windows Authentication Module, Session Module and finally gets processed by HTTP Handler object. The Current request information can be accessed anywhere in the pipeline through the HTTP Context Object.
  • ProgressBar for ASP.NET
       - fstrahberger (22 May 2007) [Unedited]
       ProgressBar for ASP.NET using Ajax
    http://www.codeproject.com/useritems/ProgressBar_for_ASPNET.asp
    Screenshot - 068_prog_bar.jpg
    ProgressBar的Web实现。
  • Dynamic Discovery and Invocation of Web services
       - Ehsan Golkar (26 May 2007) [Unedited]
       How invocation of web services Without use add/Web reference
    http://www.codeproject.com/useritems/Dynamic_Invoke_webservice.asp
    通过反射动态和所谓的“动态编译”来动态调用WebService,牺牲了太多的效率换来的是绝对的灵活,呵呵。
posted @ 2007-06-01 09:42 Joey Yin 阅读(259) | 评论 (0)编辑

2007年5月23日

http://www.sogou.com/labs/wenpin/

搜狗的创意,还是很不错。先看看我的:

joey,您的总体评价:

技术性极强的文风,架构严谨缜密;内容偏于高端科技,您这个,是学术论文吧?词藻华丽雅致,文风绚烂;文章内容丰富,观点翔实可圈可点;在用词范围方面可以着重下功夫改进。

joey,您的评测结果:

霍金
72%
是不是看过这位作家的很多作品?受影响不小喔!
木子美
12%
放心吧,你和他/她的相似度基本可以忽略不计。
黄健翔
7%
如果不是我们科学的分析结果,你没有发觉自己还有些许这位作家的风格吧^_^

有意思,我也要去试试!

posted @ 2007-05-23 11:24 Joey Yin 阅读(244) | 评论 (2)编辑
 
ASP.NET

   Refresh Module
   - Valery_Minsk (18 May 2007)
   How to make a browser's refresh manageable
   http://www.codeproject.com/aspnet/RefreshModule.asp
   basic schema
  (Refresh Module 是一个防止非预期刷新页面导致错误数据的解决方案,非常易用,无须对原有代码做较大的改动。感兴趣的朋友可以下载来看看。)

   SQL Database Image Storage & Easy Thumbnails
   - Sacha Barber (17 May 2007) [Updated] [Moved]
   Shows how to store images in SQL Database Image Storage & create
   Thumnails easiliy from
   http://www.codeproject.com/aspnet/EasyThumbs.asp
教你如何把在数据库中读写图片数据,还可以生成缩略图。

   The image-based CAPTCHA
   - Mykola Tarasyuk (20 May 2007) [Unedited]
   The article describes a variant of the image-based CAPTCHA.
   http://www.codeproject.com/useritems/ImageBasedCaptcha.asp
验证码控件。我们称之为“验证码”,用来防止Spam的东东,叫做CAPTCHA


   Creating an Html Attribute Plugin Framework
   - RayLouw (17 May 2007) [Unedited]
   This article explains how to create your own HTML attributes
   using a plugin framework.
   http://www.codeproject.com/article.asp?tag=33684610513139224

   A simple thermometer chart for ASP.NET
   - Joe Lynds (15 May 2007) [Unedited]
   A simple thermometer chart for ASP.NET
   http://www.codeproject.com/useritems/jThermometer.asp
Thermometer Chart
看看效果,还是蛮好玩的。
posted @ 2007-05-23 10:07 Joey Yin 阅读(315) | 评论 (0)编辑

2007年5月22日

News Articles for 21 May 2007
Three scenarios for how Microsoft's Open Source threat could end
Ragnarok not included.
Information Week: http://www.codeproject.com/News.aspx?id=3283

Who gets H-1B Visas? Check out this list
Which companies get the most H1-B Visas?
Information Week: http://www.codeproject.com/News.aspx?id=3279

Microsoft reorg focuses on business
Deck chairs continue to be moved.
eWeek: http://www.codeproject.com/News.aspx?id=3275

Microsoft unlikely to take anyone to court, lawyers say
Then why did you bring it up?
ComputerWorld: http://www.codeproject.com/News.aspx?id=3274


DEVELOPER NEWS

Is speech recognition finally good enough?
"Did you say, 'Delete all files?'"
ComputerWorld: http://www.codeproject.com/News.aspx?id=3280


Blizzard officially announces StarCraft 2
Prepare for Zergling rush.
Extreme Tech: http://www.codeproject.com/News.aspx?id=3278


REST Web services critical to Rails upgrade
Ruby on Rails drops the SOAP.
InfoWorld: http://www.codeproject.com/News.aspx?id=3277


Microsoft Popfly: Yahoo Pipes for the rest of us
Just in case you've been in a coma the last few days.
ZDNet: http://www.codeproject.com/News.aspx?id=3276


SPONSORS

The right "resource" in the right place at the right time ?it's
  about Time. Multi-Resouce and Appointment Scheduling the right
  way. Gantt-style drag-n-drop scheduling, Appointment Scheduling,
  Calendars, Date Pickers, Edit controls...DOT NET and COM
  http://www.codeproject.com/redir.aspx?id=3405

Update your .NET skills today! Check out InnerWorkings Developer,
  the best way to build skills by writing code & solving problems.
  Our ASP.NET AJAX Drills are fully integrated within Visual Studio.
  Download a free trial.
  http://www.codeproject.com/redir.aspx?id=3511

posted @ 2007-05-22 10:17 Joey Yin 阅读(148) | 评论 (0)编辑

2007年5月17日

Gates sees PC and Web evolving together

Hopefully they'll do a better job than the platypus did.
Information Week: http://www.codeproject.com/News.aspx?id=3244


Is Vista's Aero interface a battery hog?

Yes, but only a little says Microsoft.
ComputerWorld: http://www.codeproject.com/News.aspx?id=3250


How satisfied are Microsoft customers?

Vista might not be bringing the cheer.
ComputerWorld: http://www.codeproject.com/News.aspx?id=3249


Linus Torvalds responds to Microsoft patent claims

Surprisingly, it takes him more than one finger.
Information Week: http://www.codeproject.com/News.aspx?id=3246



--------------------------------------------------------------------
DEVELOPER NEWS

IBM pitches the efficiency of agile programming

Big Blue (Rational) is going agile?!?
InfoWorld: http://www.codeproject.com/News.aspx?id=3252


Mozilla service opens up mobile Web

"Joey" will keep your stuff handy.
InfoWorld: http://www.codeproject.com/News.aspx?id=3251


How to keep hostile jerks from taking over your online community

One for Chris.
Information Week: http://www.codeproject.com/News.aspx?id=3247


Bringo: Phone tree killer

Get out of voice mail heck.
TechCrunch: http://www.codeproject.com/News.aspx?id=3245



--------------------------------------------------------------------
SPONSORS

Achieve scalable, efficient database applications with a simple,
  three-step optimization plan. SQL Server expert Patrick O扠eefe
  guides you through the plan and explains how to quickly resolve
  performance bottlenecks. Read the new Quest white paper.
  http://www.codeproject.com/redir.aspx?id=3507

Introducing cross-platform AJAX toolkit! Use the Visual Studio(R)
  2005 IDE, Anthem.NET AJAX toolkit and Grasshopper 2.0 Technology
  Preview to develop feature-rich Web applications that run on
  Java(TM) EE! Learn how at
  http://www.codeproject.com/redir.aspx?id=3404

posted @ 2007-05-17 10:10 Joey Yin 阅读(67) | 评论 (0)编辑

2007年3月17日

     摘要: 介绍了一种通用深拷贝方法的实现思路(包括不可序列化的对象),欢迎大家讨论。  阅读全文
posted @ 2007-03-17 16:47 Joey Yin 阅读(1314) | 评论 (7)编辑

2006年11月21日

很多地方实在没办法直译,只好依照个人理解自说自话了。中英文对照,方便各位给我的译文提供意见。多谢!
原文地址:
http://www.techworld.com/features/index.cfm?FeatureID=2982

What LINQ will offer

LINQ会为我们带来什么?

.NET's new query operators.

.Net的新型查询操作

By David Rhys, Techworld

作者:David Phys TechWorld

Translated By Joey Yin CNBlogs.com

译者:Joey Yin Cnblogs.com

According to C#’s architect Anders Hejlsberg, there's an "impedance mismatch" between most programming languages and the database.

根据C#架构师Anders Hejlsberg的说法,在大多数编程语言和数据库之间,有一个“阻抗失谐”的问题。

What this means is that programming is all about procedural processing and how business (and other logic) works, while database access (at least in the relational database world) is all about declarations of what data you want (roughly, "SELECT A FROM B WHERE X=Y"), regardless of how you'll get it and what table it’s in. So, you issue simple declarative queries against a database; and when you get the data back into your program, in memory, you process it entirely differently. Wouldn't it be nice if there was a simple declarative language built into, say, C# or Visual Basic (Microsoft seems to think that these are the typical developer's primary programming languages, although no doubt some would disagree)?

阻抗失谐意味着数据库(至少对于关系型数据库)是对需要“什么样”的数据的一种定义(简单说来,就是SELECT A FROM B WHERE X=Y这种东东),而编程则全部是关于“怎样”通过程序处理业务和逻辑的工作,而不关心你怎样获取他,数据存储在哪个表里面。因此,我们依靠数据库来提供简单的查询接口,当你取出数据到你的应用中时,我们在内存中使用完全不同的方法来处理这些数据。所以,如果能够有一种简单的查询语言内嵌到我们的编程语言中,例如c#, vb(这是微软认为的多数开发者首选的编程语言,当然,很多反对者并不这么认为),那将是一个多么美好的世界!

This is what LINQ (Language INtegrated Query) will deliver, on the .NET platform. It's set of general-purpose declarative query operators that allow traversal, filter, and projection operations to be applied to any IEnumerable-based information source. LINQ queries read a bit like SQL but can be applied to non-relational datasources such as XML data and so on.

这就是LINQ(语言集成查询).NET平台上所要做的。他是一个多用途的查询操作集,允许在实现了Ienumerable接口的任何对象上进行数据的访问,过滤和发送操作。LINQ查询有一点像SQL语句,但是它可以应用于非关系型数据库的数据源中,例如XML等等。

The LINQ query language uses "lambda expressions", an idea originating in functional programming languages such as LISP - a lambda expression defines an unnamed function (and lambda expressions will also be a feature of the next C++ standard). In LINQ, lambdas are passed as arguments to its operators (such as Where, OrderBy, and Select) - you can also use named methods or anonymous methods similarly - and are fragments of code much like delegates, which act as filters.

LINQ查询使用Lambda表达式,这是一个源于Functional Programming语言(例如LISP)的新点子。Lambda表达式可以定义一个匿名的方法(Lambda表达式也会同样成为下一个版本的C++标准的一个新功能)。在LINQ查询中,Lambda表达式被当作参数传递给操作者(例如Where, OrderBySelect),当然你也可以使用实名方法或者匿名方法,当然这种使用更像是在使用代理了。

LINQ also defines a distinguished type, Expression (in the System.Expressions namespace), which means that you want to use an "expression tree" (an efficient in-memory data representation of a lambda expression) instead of a traditional method body - this may make the structure of the expression clearer.

LINQ定义了一个卓越的类型(distinguished type)(在System.Expressions 命名空间里),这意味着你需要使用一个“表达式树”(表达式树是一种更高效的表现形式,用以描述lambda表达式在内存中的数据)来取代传统的方法体,这将使得表达式的结构更加清晰。

Another idea LINQ borrows, this time from dynamic languages, is the idea of "extension methods". These allow third parties to add new methods to the public contract of a type without stopping individual type authors from providing specialised method implementations.

LINQ带来的另外一个概念“扩展方法”来源于动态语言。它允许第三方可以通过附加的方法扩展已存在的类型和构造类型。

One key feature of LINQ is its implicit support for SQL (DLinq) and XML (XLinq) integration, and this will assist full-blown object relational mapping products, as these can now take advantage of inbuilt language support. However, one possible issue is that it doesn't (as far as I can see) have the solid foundation in set theory that a query language based on a pukka relational algebra has (see Chris Date, “Database in Depth”, O’Reilly, ISBN 0-596-10012-4, for what this means). It may be possible for a programmer to confuse the quality of data sourced from a relational database (where integrity is enforced by the RDBMS – Relational DataBase Management System - itself and can largely be relied on) and data sourced from, say, an XML data store (where it isn't and can't be). In practice, since most RDBMSs (and the SQL language itself) compromise hugely with the purist relational model and therefore can't really claim the benefits from following it, this may not matter – LINQ is no worse than everything else (and relational algebra may be too hard for many people anyway). However, some people (myself included) think the loss of the formal rigor associated with the relational theory is to be regretted – although LINQ, in itself, doesn’t force any RDBMS to abandon relational theory, of course.

LINQ的一个主要的功能是它对SQLXML都提供强大的支持(分别通过DLingXLing)。这会极大的促进ORMapping技术的发展,因为现在可以利用内嵌语言了。但是,一个可能的情况是它在集合处理领域还缺乏像关系型数据库那样坚实的基础。这可能会使程序员被来源于关系型数据库(由关系型数据库自身保证其完整性)和其他数据源(例如XML,无法确立严格约束)的数据良莠不齐的品质搞糊涂。在实践中,许多关系型数据库(以及SQL语言本身)都没有非常严格地遵循关系型模型的理论,所以还不能简单声称这样做有多么重要。这是不公平的——LINQ不比其他这些差(关系代数对普通人来说,实在是太难了)。当然,尽管LINQ自己当然没有强迫任何关系型数据库放弃关系理论,但是很多人(包括我在内)都会为这种过分苛刻的联合感到遗憾。

In terms of the evolution of programming languages, LINQ represents a fusion of a typical OO language (C#) with ideas taken from modern dynamic languages such as Ruby and functional languages such as Lisp. It’s a thoroughly interesting idea and its availability probably will make C# a technical advance on Java, for a time at least. However, whether it actually delivers better (more powerful, more reliable and more maintainable) applications - which is presumably what it's all about at bottom for the companies employing .NET developers - depends on how C# and VB programmers take to such concepts as lambda expressions, expression trees and declarative programming.

从编程语言的演变来讲,LINQ代表的更多的是经典的面向对象语言(C#)和现代动态语言(Ruby)以及函数式语言(Lisp)的一种融合。它非常有趣而且可能会使C#在技术上暂时领先Java。无论如何,它最终能否帮助我们开发出更高质量(更强大,更可靠以及更可维护的)的应用——这些大概是所有公司在招聘.NET程序员时的最起码要求了——最终还是要取决于:我们的C#VB程序员是否喜欢这些概念:Lambda表达式,表达式树和宣告式编程。

 

posted @ 2006-11-21 13:20 Joey Yin 阅读(2282) | 评论 (13)编辑

与我联系

搜索

 

常用链接

留言簿(12)

我参与的团队

最新随笔


Powered By: 博客园
模板提供沪江博客