
Recently in etc Category
生活啊, 就是不停得折騰 --小僧lvyile覺悟
原文出自:
http://cocoachina.com/bbs/htm_data/11/0809/489.html
经常有人向我提问,其实我很愿意回答网友的问题,但是有些让人哭笑不得的问题。实在让人不知从何回答,于是只能"呵呵","一句话说不清"这样的回复敷衍了。关于提问,其实是很讲究艺术性的,当提出一个技术问题时,你能得到怎样的回答?这取决于挖出答案的难度, 同样取决于你提问的方法。
以下是翻译自国内论坛上的一篇名为《提问的艺术》的文章,我觉得很有道理。于是转录并写一些自己的话在内,希望能给想获得知识却不得其法的朋友们一些帮助。
顺便说一下,对于较长篇的技术文章,如果读者愿意读,那么它会获得一些有用的东西,如果不愿读,也不要回贴回上什么"太长了,没心情看"之类的话,那很伤发贴人的自尊的。
以下转载:
Continue reading [轉]关于向别人提问的方法和艺术.
Mars, 小僧兄弟, 人現在中國, 上海; 一位很棒得iPhone開發者
剛剛突然被Mars問倒一個問題, 一下子答不上來...
有點"碌碌無為, 永遠失去幸福得感覺"
以下是聊天記錄, 前略, 後略
...
12:45:28 AM yile: hey, man?
12:45:37 AM (L)China Mars: i'm ok now
12:46:49 AM yile: ?
12:47:25 AM (L)China Mars: 刚才想让你帮我测个程序的
12:52:53 AM yile: 打算幾點睡?
12:52:54 AM (L)China Mars: 你知道嘴幸福得是什么事情?
12:53:04 AM (L)China Mars: 马上睡了
12:53:20 AM yile: 嗯, 最幸福得事情
...
看到楽一些網友得開發需求, 按耐不住心中得憤慨...
ok, 宣洩完畢, 看書充電去楽....
長本事得簡單辦法是多讀書
宣洩幾句!!
- 蘋果不是pc, 蘋果是一種生活方式!
- 不要以為自己得需求可以改變本來不應該出現在iPhone上得東西!
- iPhone是手機, 對!沒錯! 但iPhone OS得內核是Darwin, 是純粹得Unix!
- 文化, 文化很重要!
- 人這輩子沒法做太多得事情, 所以每一件都要做到精采絕倫!
- 蘋果是唯一一家將方方面面全盤掌握得公司!
- 蘋果是一家價值300億美元得公司, 但其主要產品卻少於30種! "專注"意味著必須對另外100個好點子說不!
- 當您招到楽正真得人才, 就必須讓他們分擔一部分生意, 並且充分放權
- 人們終於意識到, 他們沒有必要再忍Windows楽 ---- 其實還有另一個選擇
- 溝通
- 簡單
- 反饋
- 勇氣
- 尊重
构建一个软件系统的基本任务之一就是与系统的开发者交流以明确系统的具体需求。在一些正式的软件开发方法中,这一任务是通过文档来完成的。
极限编程技术可以被看成是在开发小组的成员之间迅速构建与传播制度上的认识的一种方法。它的目标是向所有开发人员提供一个对于系统的共享的视角,而这一视角又是与系统的最终用户的视角相吻合的。为了达到这一目标,极限编程支持设计、抽象、还有用户-程序员间交流的简单化,鼓励经常性的口头交流与回馈。
簡單
极限编程鼓励从最简单的解决方式入手再通过不断重构达到更好的结果。这种方法与传统系统开发方式的不同之处在于,它只关注于对当前的需求来进行设计、编码,而不去理会明天、下周或者下个月会出现的需求。极限编程的拥护者承认这样的考虑是有缺陷的,即有时候在修改现有的系统以满足未来的需求时不得不付出更多的努力。然而他们主张"不对将来可能的需求上投入精力"所得到的好处可以弥补这一点,因为将来的需求在他们还没提出之前是很可能发生变化的。为了将来不确定的需求进行设计以及编码意味着在一些可能并不需要的方面浪费资源。而与之前提到的"交流"这一价值相关联来看,设计与代码上的简化可以提高交流的质量。一个由简单的编码实现的简单的设计可以更加容易得被小组中的每个程序员所理解。
反馈
在极限编程中,"反馈"是和系统开发的很多不同方面相关联的:
来自系统的反馈:通过编写单元测试,程序员能够很直观的得到经过修改后系统的状态。
来自客户的反馈:功能性测试是由客户还有测试人员来编写的。他们能由此得知当前系统的状态。这样的评审一般计划2、3个礼拜进行一次,这样客户可以非常容易的了解、掌控开发的进度。
来自小组的反馈:当客户带着新需求来参加项目计划会议时,小组可以直接对于实现新需求所需要的时间进行评估然后反馈给客户。
反馈是与"交流"、"简单"这两条价值紧密联系的。为了沟通系统中的缺陷,可以通过编写单元测试,简单的证明某一段代码存在问题。来自系统的直接反馈信息将提醒程序员注意这一部分。用户可以以定义好的功能需求为依据,对系统进行周期性的测试。用Kent Beck的话来说:"编程中的乐观主义是危险的,而及时反馈则是解决它的方法。"
勇氣
极限编程理论中的"系统开发中的勇气"最好用一组实践来诠释。其中之一就是"只为今天的需求设计以及编码,不要考虑明天"这条戒律。这是努力避免陷入设计的泥潭、而在其他问题上花费了太多不必要的精力。勇气使得开发人员在需要重构他们的代码时能感到舒适。这意味着重新审查现有系统并完善它会使得以后出现的变化需求更容易被实现。另一个勇气的例子是了解什么时候应该完全丢弃现有的代码。每个程序员都有这样的经历:他们花了一整天的时间纠缠于自己设计和代码中的一个复杂的难题却无所得,而第二天回来以一个全新而清醒的角度来考虑,在半小时内就轻松解决了问题。
尊重
尊重的价值体现在很多方面。在极限编程中,团队成员间的互相尊重体现在每个人保证提交的任何改变不会导致编译无法通过、或者导致现有的测试case失败、或者以其他方式导致工作延期。团队成员对于他们工作的尊重体现在他们总是坚持追求高质量,坚持通过重构的手段来为手头的工作找到最好的解决设计方案。
from: http://www.w3.org/XML/1999/XML-in-10-points.html
- XML is for structuring data
- XML looks a bit like HTML
- XML is text, but isn't meant to be read
- XML is verbose by design
- XML is a family of technologies
- XML is new, but not that new
- XML leads HTML to XHTML
- XML is modular
- XML is the basis for RDF and the Semantic Web
- XML is license-free, platform-independent and well-supported
該文章轉載自
以下是优秀程序员应当具备的品质:
语言和工具(Languages and Tools:)
任何程序员/开发者需要具备的第一个技能就是,能够用编程语言工作并会使用与之相关的主要开发工具,包括:工具、IDEs, web 框架, messaging APIs。
程序设计方法(Programming Paradigm:)
举例来说,很好地理解面向对象,这对使用强制式语言(Imperative Language也称过程式语言)写出可维护的代码至关重要。在企业开发中你会遇到各种不同的问题,理解多种程序设计方法并知道何时使用,将使这些问题迎刃而解。
领域专长的知识(Domain Specific Knowledge:)
如果想编写系统来解决特定领域内的问题,那么拥有该领域的专长知识将非常重要。
尽管许多这样的知识是由项目的商业分析员(Business Analyst)来获悉,但如果开发者也能获取,那么跟用户的交流将会更加容易,而且更能够理解他们的专业词汇。
人际关系(People Skills:)
软件开发中最重要的技能之一就是能够与其他开发者一起高效工作----同事、质量/商业分析员(Quality/Business Analysts),客户,用户,很多很多......如果你能够很好地处理这些关系,那么成功的大路也离你不远矣。
解决问题(Problem Solving:)
有能力解决那些没有明显解决方法的问题,这一点在软件开发中很重要。当把你的应用配置到JBoss或者通过一个测试找到一个棘手bug的时候,理智地编程将成为调试一个类路径(class path)问题。
沟通能力(Good Communication skills:)
在软件世界中,人们通常认为好的沟通能力就是流利地说话,事实上这远不是。这指的是:你能够多么有效地与其他人交流。作为一名优秀的开发者,你应当能够很好地表达你的想法,很好地听,以及很好地掌控你与他人沟通的过程。
读书(Read Books:)
读大量书将了解很多不同的技术,读书使你对一种技术有了快速、直接的视角。通常你应当选择知名学者的书,他们推崇实践和用技术解决问题的多种方法。在这个过程中,你将学到很多并逐渐形成自己的方法。没准哪天你也就能出书了呢。
实践、实践再实践(Practice, Practice and Practice)
许多开发者拥有大量理论知识,他们饱览书籍和技术资料。然而,怎样运用这些知识却让他们望而却步。这是因为他们缺乏实践。你工作的效率和效力只能通过你实践中编写代码来获得。唯一能使你成为优秀开发者的方法就是实践、实践再实践。
遵循范例和最好的实践(Follow Patterns and Best Practices :)
范例和实践反映了技术指导、常见技术问题和基于真实事件的实践。学习的过程是循序渐进的,但是一劳永逸。这会节省你非常多的时间和精力,让你的工作更加有效。遵循一本"代码编程指南"(Code Design Guideline),经常使用代码分析工具将检测和分析你的代码。
讨论/小组沟通(Discussion/Newsgroup:)
参加开发社区会提高你的领导能力以及贡献感,二者都是成功的必需品。在社区内参加一场含量较高的技术讨论将使你充满成就感,而且会增长你的知识,因为其中的智者会查看和评点你的解决方法,你也会查看和评点他们的。而且这个过程教会你接纳并感激别人的建议。如果她/他做出了积极的贡献,不要忘了赞扬和鼓励('pat someone on the back')。
网络和数据库知识(Knowledge of Networking and Databases:)
有人也许不赞成这点,但是一个优秀的开发者应当知道网络和数据库的基本东西。而且在思考解决方法的时候,不要忘记将二者考虑在内。拥有二者的知识,能够帮你写出更好的代码并节省你很多时间。
博客、写文章(Blog/ Write Articles:)
我们中有谁能够记住每件事?我不能,所以我把他们记下来。当我需要的时候,可以回头翻阅参考。除此之外,我可以借此从读者那里获得反馈,让我对同样的问题收获更多的方法。我已经获悉了许多与我工作有关的反馈,虽然有好有坏,但我会一一验证,这个过程也让我受益匪浅。
KISS
不要想歪了,这里的KISS不是你想的那样,是指让应用/方法直短、简单(Keep Implementations/Approaches Short and Simple的简写)。不要使用行话来让事情更加复杂,因为人们很难理解它们。最好的方法是简化你的设计并避免过度设计(over- engineering)的东西。
像测试者一样思考(Think as a Tester:)
开发者和测试者,来自两个不同阵营的两类人群,随时准备同彼此较量。我发现二者的合作将产生非常好的结果。既不会损害开发者的利益也不会损害测试者的利益。实际上,长期来看,像测试者一样思考有利于减少你代码的bug,而且会形成很好的编程习惯和思维。
坚持一致是游戏规则(Consistency is the name of the game:)
你是否经常跳槽或者被你的薪水所打击?如果是,那么静坐下来放松下并重新规划。好好想想不要让你的决定天马行空,为了不断向前,你需要一个坚实的决定并坚持不懈。
参加技术研讨会/大事件(Attend technology seminars and events:)
如果你所在的城市有技术研讨会,一定要抽出时间参加。大部分的研讨会是免费的,而且会提供新技术的重要信息。
万家通吃还是一门独大?(Jack of all or Master of One?:)
嗯......这个问题不好回答。在现在的环境下,你必须掌握一种以上的技术。尽管这不容易,但是好的开发者还是能够做到。其中的关键就在于适应性:如果你精于某种技术,那么给以机会你将较容易地在短期内掌握一种新技术。你不妨试试,多掌握一种技术可以让你在使用中对比、选择。
停止抱怨(Stop complaining:)
是否软件没有做成,是否测试人员给你检查出一堆bug?许多开发者的本能反应是抵制情绪进而非常抵制这种情况。由于这种情绪是自然反应未经控制,所以它不可取。静心分析为什么软件失败、为什么有如此多bug,这是一个学习的经历将使你未来的工作受益良多。
最后,请记住你不是要永远做个程序员。所以一旦你自我满足并觉得自己是个优秀的程序员,你就得重新规划你自己(re-program yourself)。扩展你的兴趣。开发只是这个过程的一部分,了解用户和商业实际上是一种艺术,每个人应当以此为目标并努力掌握它。
- "领袖和跟风者的区别就在于创新。"
- "成为卓越的代名词,很多人并不能适合需要杰出素质的环境。"
- "成就一番伟业的唯一途径就是热爱自己的事业。如果你还没能找到让自己热爱的事业,继续寻找,不要放弃。跟随自己的心,总有一天你会找到的。"
- "并不是每个人都需要种植自己的粮食,也不是每个人都需要做自己穿的衣服,我们说着别人发明的语言,使用别人发明的数学...我们一直在使用别人的成果。使用人类的已有经验和知识来进行发明创造是一件很了不起的事情。"
- "佛教中有一句话:初学者的心态;拥有初学者的心态是件了不起的事情。"
- "我们认为看电视的时候,人的大脑基本停止工作,打开电脑的时候,大脑才开始运转。"
- "我是我所知唯一一个在一年中失去2.5亿美元的人...这对我的成长很有帮助。"
- "我愿意把我所有的科技去换取和苏格拉底相处的一个下午。"
- "活着就是为了改变世界,难道还有其他原因吗?"
- "你的时间有限,所以不要为别人而活。不要被教条所限,不要活在别人的观念里。不要让别人的意见左右自己内心的声音。最重要的是,勇敢的去追随自己的心灵和直觉,只有自己的心灵和直觉才知道你自己的真实想法,其他一切都是次要。"

