![]() |
|
Spaces home 在路上PhotosProfileFriendsMore ![]() | ![]() |
|
在路上河蟹博客
August 10 从DC回来了周末开车拜访了美帝的首都,来回500麦,累。 照片,尚未整理,没有任何tag:http://picasaweb.google.com/wangjue.smth/20080809DC 贴一张moutain washington 山顶的panorama.
August 05 Priceline & hotwire tips某些市场是靠信息不对称挣钱的,但是信息不对称到一定程度就会限制资源的利用率和市场规模,反而降低收益。这时priceline和hotwire这种第三方皮条商就应运而生,把原来买卖双方的信息抓到手里,向顾客提供一些加工过的信息。本质上还是信息不对称,只不过皮条公司们现在占一角,吃两方。 第一次用,发现还是很花时间的,learning curve有点陡。 http://www.travelsuperlink.com/hotwire http://www.travelsuperlink.com/hotwire2 August 04 Interview Training Pre-work: The Guerrilla Guide to Interviewing by Joel Spolskyhttp://www.joelonsoftware.com/articles/fog0000000073.htmlThis piece was written by Joel Spolsky of Fog Creek Software, and formerly with Microsoft. It presents some relevant points of view regarding interviewing for technical skills.How to assess someone's technical abilityHiring the right people is extremely crucial to Fog Creek Software. In our field, there are three types of people. At one end of the scale, there are the unwashed masses, lacking even the most basic skills for this job. They are easy to ferret out and eliminate, often just by reviewing a resume and asking two or three quick questions. At the other extreme, are the brilliant superstars who write lisp compilers for fun, in a weekend, in Assembler for the Palm Pilot. And in the middle, you have a large number of "maybes" who seem like they might just be able to contribute something. The trick is telling the difference between the superstars and the maybes, because at Fog Creek Software we only hire the superstars. Here are some techniques for doing that. First of all, the #1 cardinal criteria for getting hired: Smart, and Gets Things Done.That's it. That's all we're looking for. Our goal is to hire people with aptitude, not a particular skill set. Any skill set that people can bring to the job will be technologically obsolete in a couple of years, anyway, so it's better to hire people that are able to learn any new technology rather than people who happen to know SQL programming right this minute. Smart is hard to define, but as we look at some possible interview questions we'll see how you can ferret it out. Gets Things Done is crucial. People who are Smart but don't Get Done often have PhDs and work in big companies where nobody listens to them because they are completely impractical. They would rather mull over something academic about a problem rather than ship on time. These kind of people can be identified because they love to point out the theoretical similarity between two widely divergent concepts. For example, they will say "Spreadsheets are really just a special case of a programming language" and then go off for a week and write a thrilling, brilliant white paper about the theoretical computational linguistic attributes of a spreadsheet as a programming language. Smart, but not useful. Now, people who Get Things Done but are not Smart will do stupid things, seemingly without thinking about them, and somebody else will have to come clean up their mess later. This makes them liabilities to the company because not only don't they contribute, but they soak up good people's time. They are the kind of people who copy big chunks of code around rather than writing a subroutine, because it gets the job done, just not in the smartest way. The most important rule about interviewing: Make A DecisionAt the conclusion of the interview, you have to be ready to make a sharp decision about the candidate. There are only two possible outcomes to this decision: Hire or No Hire. Turn to your computer and send immediate feedback to the recruiter. The subject line should be the name of the candidate. The first line of the email should be Hire or No Hire. Then you should spend about 2 paragraphs backing up your decision. There is no other possible answer. Never say, "Hire, but not in my group." This is rude and implies that the candidate is not smart enough to work with you, but maybe he's smart enough for those losers over in that other group. If you find yourself tempted to say "Hire, but not in my group," simply translate that mechanically to "No Hire" and you'll be OK. Even if you have a candidate that would be brilliant at doing one particular thing, but wouldn't be very good in another group, that's a No Hire. Things change so often and so rapidly that we need people that can succeed anywhere. If for some reason you find an idiot savant that is really, really, really good at SQL but completely incapable of ever learning any other topic, No Hire. Never say "Maybe, I can't tell." If you can't tell, that means No Hire. It's really easier than you'd think. Can't tell? Just say no! Similarly, if you are on the fence, that means No Hire. Never say, "Well, Hire, I guess, but I'm a little bit concerned about..." That's a No Hire as well. An important thing to remember about interviewing is this: it is much better to reject a good candidate than to accept a bad candidate. A bad candidate will cost a lot of money and effort and waste other people's time fixing all their bugs. If you have any doubts whatsoever, No Hire. While you are conducting the interview, don't worry that if you reject a lot of people, Fog Creek won't be able to find anyone to hire. That's not your problem. It's the recruiter's problem. Keep asking yourself which is worse - that we grow into a big, lousy software company with lots of coconuts, or that we stay small but high quality? Of course, it's important to seek out good candidates and everybody should see it as a part of their mission to find and recruit smart people who get things done. Never lower your standards no matter how hard it seems to find great candidates. But how do you make this difficult decision? You just have to keep asking yourself during the interview: is this person smart? Does this person get things done? In order to be able to tell, you're going to have to ask the right questions. Now the fun part: Interview Questions.There are actually hundreds of famous Microsoft interview questions. Everybody has a set of questions that they really like. You, too, will develop a particular set of questions and a personal interviewing style which helps you make the Hire/No Hire decision. Here are some techniques that I have used that have been successful. Before the interview, I read over the candidates resume and jot down an interview plan on a scrap of paper. That's just a list of questions that I want to ask. Typical plan for interviewing a software engineer
1. IntroductionBefore the interview, I am very, very careful to avoid anything that might give me some preconceived notions about the candidate. Don't ask around about the person before you interview them; and never, ever talk to the other interviewers about the candidate until you've both made your decisions independently. It's the scientific method! The Introduction phase of the interview is intended to put the candidate at ease. I spend about 30 seconds telling the person who I am and how the interview will work. I always reassure the candidate that we are interested in how he goes about solving problems, not the actual answer. 2. Recent project questionPart 2 is a question about some recent project that the candidate worked on. For interviewing college hires, ask them about their senior thesis, if they had one, or about a course they took that involved a long project that they really enjoyed. For example, sometimes I will ask, "what class did you take last semester that you liked the most? It doesn't have to be computer-related." Actually I am usually pretty happy if they choose a non-computer related course. Sometimes you look at their schedule, and it looks like they are taking the bare minimum number of Comp Science courses, but every elective is something related to Music. Then they will tell you that their favorite course was Object Oriented Databases. Yeah, right. I'd be happier if they admitted that they just liked music more than computers, instead of sucking up. When interviewing experienced candidates, you can talk about their previous job. In this question, I'm looking for one thing: passion. When you find a project that the person worked on recently, these are all good signs: They get very excited talking about it; they tend to talk more quickly and get animated. Sometimes a candidate comes in who is very nervous about being in an interview situation -- this is normal so I always overlook that. But then when you get them talking about Computational Monochromatic Art they will get extremely excited and lose all signs of nervousness. Good. I like passionate people who really care. (To see an example of Computational Monochromatic Art try unplugging your monitor.) If the project was a team project, look for signs that they took a leadership role. A candidate might say: "we were working on X, but the boss said Y and the client said Z." I'll ask, "So what did you do?" A good answer to this might be "I got together with the other members of the team and wrote a proposal..." A bad answer might be, "Well, there was nothing I could do. It was an impossible situation." Remember, Smart and Gets Things Done. A good way to tell if somebody Gets Things Done is to see if historically they have tended to get things done in the past. In fact, you can even ask them directly to give you an example from their recent past when they took a leadership role and got something done - overcame some institutional inertia, for example. 3. C (or Java) programming questionFor programming questions, I ask candidates to write a small function in C. Here are some typical problems I would ask:
You don't want to give them any problems that take more than about 5 lines of code; you won't have time for that. Let's look at a couple of these in detail. #1: reverse a string in place. Every candidate I've ever interviewed in my life has done this wrong the first time. Without exception, they try to allocate another buffer and reverse the string into that buffer. The trouble is, who allocates the buffer? Who frees the buffer? In giving this question to dozens of candidates I found out an interesting fact. Most people who think that they know C really do not understand memory or pointers. They just don't get it. With this question, here are some ways to judge the candidate: Is their function fast? Look at how many times they call strlen. I've seen O(n^2) algorithms for strrev when it should be O(n), because they are calling strlen again and again in a loop. Do they use pointer arithmetic? This is a good sign. Many "C programmers" just don't know how to make pointer arithmetic work. Now, ordinarily, I wouldn't reject a candidate just because he lacked a particular skill. However, I've discovered that understanding pointers in C is not a skill, it's an aptitude. In Freshman year CompSci, there are always about 200 kids at the beginning of the semester, all of whom wrote complex adventure games in BASIC for their Atari 800s when they were 4 years old. They are having a good ol'; time learning Pascal in college, until one day they professor introduces pointers, and suddenly, they don't get it. They just don't understand anything any more. 90% of the class goes off and becomes PoliSci majors, then they tell their friends that there weren't enough good looking members of the appropriate sex in their CompSci classes, that's why they switched. For some reason most people seem to be born without the part of the brain that understands pointers. This is an aptitude thing, not a skill thing - it requires a complex form of doubly-indirected thinking that some people just can't do. 4. Difficult questionIn the C question, you can see how well they learned the bitwise operators in C.... but this is a skill, not an aptitude, so you can help them with these. The interesting thing is to watch them write a subroutine that counts all the bits in a byte, then ask them to make it much, much faster. Really smart candidates will create a lookup table (after all, it's only got 256 entries) that they only have to create once. With good candidates, you can have a really interesting conversation about the different space/speed tradeoffs. Press them further: tell them you don't want to spend any time building the lookup table during initialization. Brilliant candidates might even suggest a caching scheme where bits are counted the first time they are used, and then stored in a lookup table so they don't have to be counted if they are used again. Really, really brilliant candidates will try to devise a way to compute the table using some kind of a shortcut taking advantage of the patterns that occur. When you watch somebody write code, here are some techniques that may be helpful: Always reassure them that you understand that it's hard to write code without an editor, and you will forgive them if their paper gets really messy. Also you understand that it's hard to write bug-free code without a compiler, and you will take that into account. Some signs of a good programmer: good programmers have a habit of writing their {and then skipping down to the bottom of the page and writing their} s right away, then filling in the blank later. They also tend to have some kind of a variable naming convention, primitive though it may be... Good programmers tend to use really short variable names for loop indices. If they name their loop index CurrentPagePositionLoopCounter it is sure sign that they have not written a lot of code in their life. Occasionally, you will see a C programmer write something like if (0==strlen(x)), putting the constant on the left hand side of the == . This is a really good sign. It means that they were stung once too many times by confusing = and == and have forced themselves to learn a new habit to avoid that trap. Good programmers plan before they write code, especially when there are pointers involved. For example, if you ask them to reverse a linked list, good candidates will always make a little drawing on the side and draw all the pointers and where they go. They have to. It is humanly impossible to write code to reverse a linked list without drawing little boxes with arrows between them. Bad programmers will start writing code right away. Inevitably, you will see a bug in their function. 5. Are they satisfied?So we come to question 5: Are you satisfied with that code? You may want to ask, "OK, so where's the bug?" The quintessential Open Ended Question From Hell. All programmers make mistakes, there's nothing wrong with that, they just have to be able to find them. With the string functions, they'll almost always forget to null-terminate the new string. With almost any function, they are likely to have off-by-one errors. They will forget semicolons sometimes. Their function won't work correctly on 0 length strings, or it will GPF if malloc fails... Very, very rarely, you will find a candidate that doesn't have any bugs the first time. In general, it's always a good idea to ask the candidate if they are satisfied with their answer before moving on. Be Regis. 6. Design questionAsk the candidate to design something. Jabe Blumenthal, the original designer of Excel, liked to ask candidates to design a house. According to Jabe, he's had candidates who would go up to the whiteboard and immediately draw a square. A square! These were immediate No Hires. In design questions, what are you looking for? Good candidates will try to get more information out of you about the problem. Not-so-smart candidates think that design is like painting: you get a blank slate, and you can do whatever you want. Smart candidates understand that design is a difficult series of trade-offs. A great design question: design a trash can for a city street corner. Think of all the trade offs! It has to be easy to empty, but impossible to steal; it has to be easy to put things into, but hard for things to fly out of on a windy day; it has to be solid, yet inexpensive; in some cities, it has to be specially designed so that terrorists can't hide a bomb in it. Creative candidates will often surprise you with an interesting, non-obvious answer. One of my favorite questions is Design a Spice Rack for Blind People. Inevitably, candidates will put Braille somewhere on the spice bottles, and it usually winds up being on top of the lid for various reasons which you'll discover after you've asked this question 100 times. I had one candidate who decided that it would be better to put the spices in a drawer, because it is more comfortable to scan Braille with your fingertips horizontal than vertical. (Try it!) This was so creative it surprised me -- in dozens of interviews, I had never heard that answer. And it really took a major creative "leap" outside of the bounds of the problem. On the strength of that answer alone, and no negatives, I hired the candidate, who went on to be one of the best program managers on the Excel team. Look for closure. This is part of Get Things Done. Sometimes candidates will drift back and forth, unable to make a decision, or they will try to avoid hard questions. Sometimes they will leave difficult decisions unanswered and try to move on. Not good. Good candidates have a tendency to try to naturally keep things moving forward, even when you try to hold them back. If the conversation ever starts going around in circles, and the candidate says something like "well, we can talk about this all day, but we've got to do something, so let's go with decision X" that's a really good sign. 7. Do they have any questions?Finally, you should ask the candidate if they have any questions. Some people like to look to see if the candidate will ask intelligent questions. Personally, I don't care what questions they ask; by this point I've already made my decision. The trouble is, candidates have to see about 5-6 people in one day, and it's hard for them to ask 5-6 people different, brilliant questions, so if they don't have any questions, fine. I always, always leave about 5 minutes a the end of the interview to sell Fog Creek. This is very important even if you are not going to hire them. If you've been lucky enough to find a really good candidate, you want to do everything you can at this point to make sure that they want to come to Fog Creek. Even if they are a bad candidate, you want to get them excited about Fog Creek Software so that they go away with a positive impression of the company. Think of it this way: these people are not just potential hires; they are also customers. They are also salesmen for our recruiting effort: if they think that Fog Creek is a great place to work, they will encourage their friends to apply. 8. Questions to avoidAh, I just remembered that I promised to give you some more examples of really bad questions to avoid. Be sure to avoid the illegal questions. Anything related to race, religion, gender, national origin, age, military service eligibility, veteran status, sexual orientation, or physical handicap is just illegal. If their resume says they were in the Army in 1990, don't ask them, even to make pleasant conversation, if they were in the Gulf war. It's against the law. If their resume says that they attended the Technion in Haifa, don't ask them, even conversationally, if they are Israeli. It's against the law. Next, avoid any questions which might make it seem like we care about, or are discriminating based on, things which we don't actually care about or discriminate based on. The best example of this I can think of is asking someone if they have kids or if they are married. This might give the false impression that we think that people with kids aren't going to devote enough time to their work or that they are going to run off and take maternity leave. Finally, avoid brain teaser questions like the one where you have to arrange 6 equal length matches to make exactly 4 identical perfect triangles. If it's an "aha!" question, you don't get any information about "smart/get things done" by figuring out if they happen to make the mental leap or not. Interviewing is more of an art than a science, but if you remember the Smart/Gets Thing Done principle you will be in good shape. When you get a chance, ask some of your co-workers what their favorite questions are and what kinds of answers they look for. August 03 小桥最后一个煎饼昨天听Yangbo兄提到,今天得到了确切的消息。小桥是个地名,不是曹操会思之夜不成寐美女。小桥是大家打水,洗澡,万人吃饭的必经之地。小桥边,有一个常年开门的煎饼摊。摊主常换常新,煎饼却一日未断,和小桥商店的粽子一起,温暖着诸位爷的心。 本想叫个外卖,竟然来不及了。 July 27 转一个TDK的影评(JT)昨天和几个朋友去看了TDK,一部伟大的描写人性的电影。主角是一个伤心大少,只不过他伤的不是别人的心,而是他自己的心。为了弥补,他白天灯红酒绿,晚上就穿上诡异的衣服出去行侠仗义。最近两部Batman都是我最喜欢的类型。 下面转一个影评 ================================================================= 很少有的周六早上有闲情逸致去看早场的电影,The Bat Man 之 黑夜骑士。 长达两个多小时的电影,异常的扣人心弦,决非一般的商业片所能比拟。我非常欣赏这个电影对人性的复杂性的深刻描绘,好人,坏人,变成坏人的好人,和性质非常不同的坏人,都有全面的描述和彼此深刻的交流。mm后来问我,这个电影到底是说人性好,还是不好,因为里边有邪不胜正,但也有正义之沉沦与背叛。 我说,它想表达的是,人性不一定是好的,也不一定不是好的,人性是复杂的。 网球1小时CMU的网球场很有东操的感觉。 发现最近有老年痴呆的趋势,打球时据lao ni观察会跑过反身再接,分特 July 19 荣格很有意思。 ===================================================== 首先,荣格把人的态度分为内倾和外倾两种类型。内倾型人的心理能量指向内部,易产生内心体验和幻想,这种人远离外部世界,对事物的本质和活动的结果感兴趣。外倾型人的心理能量指向外部,易倾向客观事物,这种人喜欢社交、对外部世界的各种具体事物感兴趣。 其次,荣格认为有四种功能类型,即思维、情感、感觉和直觉。感觉是用感官觉察事物是否存在;情感是对事物的好恶倾向;思维是对事物是什么作出判断和推理;直觉是对事物的变化发展的预感,无需解释和推论。荣格认为人们在思维和情感时要运用理性判断,所以它们属于理性功能;而在感觉和直觉时没有运用理性判断,所以它们属于非理性功能。 荣格把两种态度与四种机能类型组合起来,描述了八种不同类型的人。 外倾思维型——这种人喜欢分析、思考外部事物,生活有规律,客观而冷静,但比较固执已见,情感压抑 外倾情感型——这种类型的人多为女性。她们的思维常常被情感压抑,没有独特性,非常注重与社会和环境建立情感与和睦关系。 外倾感觉型——这种类型的人多为男性。他们喜欢追求欢乐,活泼有魅力,对客观事物感觉敏锐,精明而求实。但易变寻欢作乐的酒色之徒。 外倾直觉型——这种人喜欢追求外部世界的新直觉,易变而富有创造性,有多种嗜好,但难以坚持到底,做事常凭主观预感。 内倾思维型——这种人喜欢离群索居,独自追求自己的思想,常以主观因素为依据分析事物,待人冷漠,倔强偏执,情感受压抑。 内倾情感型——这种人沉默寡言,不易接近,给人一种神秘莫测的吸引力。但内心有非常丰富、强烈的情感体验。 内倾感觉型——这种人对事物有深刻的主观感觉。喜欢通过艺术形象表现自我。缺乏思想和情感,较被动,安静而沉稳,自制力强。 内倾直觉型——这种人富于幻想,性情古怪。思想往往脱离现实,不易被人理解。常产生各种离奇的幻想和想象,体验奇特怪异。 荣格所划分的这八种类型只代表极端的情况。实际上每个人都会表现出某种占优势的性格类型,在他身上还有不占优势的第二种或第三种性格类型。其中有意识的因素,也有无意识的成分,两者的相互作用构成了千变万化的人格类型。 ========================================================= 荣格(1875-1961),出生于瑞士康斯坦斯湖区的小镇基思威勒的传统基督教家庭。其父亲为路德会牧师。 荣格从小便受到父亲对信仰真确性挣扎影响。经过他对基督教信仰的研究探索,他发现在当时的基督徒,包含其父亲在内,所信仰是基督教神学教义,并非对上帝的经验响应。因此荣格认为研究基督教的信仰重点在于上帝知识起源的探究,而不是在上帝存不存在的辩证。从荣格晚年接受英国国家广播公司(BBC)记者采访对答中,可以看到他对这个问题的态度与立场。当他被记者问及有关相不相信上帝存不存在的问题时,他的回答虽然简短,但是很有力而且清础表答出他的立场。他回答说:我不相信。因为我知道,所以我不相信。荣格因为将研究基督教信仰重点放在对[上帝]知识起源的了解,所以做如此的回答。不过这个问题也真促使荣格投入一生,致力于解开人类人灵深处所隐藏的心理性问题。荣格常重复提到,我深信,心灵的探讨必定会成为未来一门重要的科学....这是一门我们最迫切需要的科学。因为世界发展的趋势显示,人类最大的敌人不在于饥荒、地震、病菌或癌症,而是在于人类本身,因为,就目前而言,我们仍然没有任何适当的方法,来防止远比自然灾害更危险的人类心灵疾病的蔓延。
| |||||||||||