每个软件工程师都应该尝试的5件事情

回顾我的职业生涯(不,我还没那么老,不过入行确实不少年了),确实有几次人生拐点帮我更具职场智慧,并鞭策我,使我总体来说适合成为软件工程师或程序员,成为那种要么热衷于提高自己的技艺,要么对混入管理层有兴趣,要么只是简单的期望扩大自己的知识面的人。我意识到,鉴于每个人目前的工作情况,有些建议可能并不适合于每一个人,尤其是假如你工作在一家对“谁可以和客户谈话”这种事都作出严格定义的公司的话。所以如果你现在做不到全部这些,也不必烦恼。也要注意,有时,你需要的只是开口去问! 贡献到一个可行的开源项目 除非你与世隔绝,否则一定听过开源项目,也许你已经在Github或SourceForge上有一些小型的开源项目了。所有这些都是好的,但是我所说的“viable open source” 是指应当尝试在一个项目中做出重大意义的贡献,你的代码必须是通过审批的流程,如果被接受,将会在很多系统的系统中被应用到。你能从共享开源项目中学到的东西非常多。就我个人而言,它意味着:写更好的代码,更高效的沟通,有利的条件获得更多的工作机会,更高的报酬,更多的赞誉,更多了解其他观点和让自己有更厚的脸皮。最后一点,是说,你的代码在某些情况下会受到详细检查和批评。开源项目只是一个软件,并不是你一个人的(假设你即使遇到了一个很好的项目,请尽力将自己和项目区分开)。所以把接受批评当作是一个学习的机会,并将事情做得更好而不是令自己生气。不过这不容易做到,我自己有时也会与这种事情斗争,但是我知道如果不去想这些代码去谁写的,这些代码(和我)都能越来越好,而这才是最重要的。 参与开源项目者还有一个额外的优势,从雇主的角度看,我会更容易雇佣一些在能在生产环境上找到他们提交代码记录的人。对于技能差不多的候选人,任何时候,我都会他们当中选择开源项目贡献者。 销售你的软件 是的,我从字面上的意思是你应该去做电话销售,如果可能的话。换句话说,我认为你应该将自己放到极客的位置,时时的为他人用英语解释明白你在做什么,而不仅仅是你的同伴。如果你都不能解释清楚你做的是什么,其他人怎么能去购买它呐? 做前期销售对我来说是一个非常宝贵的事,因为需要一个真实的、存在的、活生生的客户站在面前,可以为他们解释为什么他们应该购买我的软件。在开始的几次,我做到了,我非常紧张(毫无疑问的事实就是我的工作起步阶段,我们也在尝试做得更好),但是我通过了, 得到了一些锻炼,得到了一些提升。 卖你写的软件会给你真正的观点你正在构建什么和为什么构建, 它还能让你接触到大量的使用案例和真实反馈,什么是好,什么是坏。它也将磨练你,同事也会带给你信心。你还可以得到更多的使用你写的软件而改善他们生活的人的尊重,另外,当代码不正确时你也会是第一个感受痛苦的人,这也会使你希望自己写出更好的测试代码。最后,从长远来说,它帮你看得更远。 支持你的软件 销售你的软件之后的另一件事就是支持它。找到一种你能工作在第一线的支持方式,或者至少参与到支持工作中,来使自己能够真切的体验到人们使用你的软件的各种方式:好的、不好的、甚至丑陋的方式。错误报告和升级是一方面,直接从客户听取意见则是另一回事。除了需要社交技巧,你也需要能够迅速的进入用户的使用场景,了解他们看待你的代码的方式,这将进一步告诉你哪些你做的很好,哪些你还需要改进。这也意味着要知道哪些该说哪些不该说,因为这是你和付费客户打交道时要把握的分寸。伴随着销售,也会带给你一个新的欣喜,即之前开发阶段的辛勤工作没有白费,它很好的支撑着软件支持阶段的工作。 写/培训与你软件相关的内容 如果你还没有弄明白我的意思,我将会解释清楚一点:我十分重视那些不单单能写代码并且在公司内部和向公司外部人员解释那些代码是什么和为什么这样写的工程师。通过撰写和培训软件相关的内容,你必须简明、清晰地解释复杂的技术细节。也需要经常强调那些从用户的角度看是不对的地方。我说不出多少次在写文章和培训的过程中发现功能或特性不是十分正确,从而回去修改代码。这种情况在API设计的过程中更加经常发生。 写作也可以增加你的曝光并带给你更广的观众群体,从而得到反馈并令你的作品更上一层楼。有很多,很多的机会可以去为网站或出版社撰写技术的文章。学着去推销你的想法(看,你又在销售了!)并坚持下去,下一步你就会发现你将会成为一名合格的作者并有可能从中获得回报。 结交一些新朋友 也许对我来说,在学习和机遇两个方面最大的一种变革力量,就是我对扩展自己人际网络的明确努力 。当然这并不容易,而且这肯定涉及要“使你自己身心投入其中”,但回报经常是极为显著的,而且以事后所见,其中的风险非常小。 如果在你直接接触范围之外没有太多的人际网络,我给你一些建议。首先最重要的,人际网络的关键是你必须真诚的与新朋友会面,而且你必须除了这个新的关系之外别无所求。其次,许下承诺去维持这样的努力数月乃至更久。当你获得更多的自信并从任何失误中获得经验之后,这将变得越来越容易。第三,做你自己,但要注重倾听他人。第四,这也是我最弱的方面,获知并记忆名字。我很少忘记一张脸,但如果我不努力去学习别人的名字,这些名字就会在我脑中溜走,所以记住别人的名字,让别人知道你看重他们。 除了这些技巧,还有许多关于这个主题的好书。我最喜欢的有一本“爱是杀手锏”。就我看来,这是一个做作的标题,但书中的建议都是干货,而且作者很好的将它呈现了出来。在每天结束时,让你自己沉浸其中,从你获得的实际反馈中学习。如果你发现自己被太多次拒绝,问问一位信任的朋友,让他给你在何处改进的真实意见。如果有困惑,找别的朋友讨论。 红利: 找到导师 有可能你已经知道一些令你尊敬的人物,他们拥有解决复杂问题和高效沟通的能力。如果他们愿意与你分享他们的经验,并给你改进方法的反馈,那么自然有了胜算。从他们的经验和教训中学习,对他们的建议保持开放的态度。虽然它不会总是正确,但你至少应该考虑一下他们说的是什么,之后再做出决定。就我个人来说,我很幸运拥有一个朋友,他也是一个高管教练(我们意外的相遇,证明了使自己投入某事的价值)和一间企业所有者。在好多年里,我也遇到许多好老板和好同事,他们充当了我的人生导师,我对他们感激不尽。在开始以前,问问自己最敬佩谁,然后去和他们讨论你的想法。如果你找不到可以胜任此角色的朋友,甚至可以考虑雇佣一位教练。 完结 请记住,所有这些事情是你可以在这里和那里周期性的做。 他们通常并不需要很大的时间或货币的承诺,但他们确实需要你走出你的安乐窝。 最后,我很高兴听到一些程序员/工程师做这些事之后,确实改善了他们的职业/生活。你工作是什么?哪些工作没有起到作用? 转自:http://www.oschina.net/translate/5-things-every-software-engineer-should-try

龙生   24 Jun 2013
View Details

创业失败的七大缘由:太以创意为中心居首

腾讯科技讯(冰尘) 北京时间6月23日消息,据国外媒体报道,Ciplex创始人伊利亚·波辛(Ilya Pozin)近日刊文指出,七大失误导致创业失败。以下是文章全文: 有了伟大的创意就能确保创业成功吗?显然不对。 虽然下面的数据有点讨厌,但3/4的创业公司还没接触市场就惨遭淘汰。是的,即便那些再伟大的创意也会被丢进垃圾桶里。作为一家创业公司的创始人、导师以及青年企业家委员会的成员,我见证过太多的创业公司过早夭折。 即便听起来很让人气馁,但比较现实的期望是创业公司成功的关键。通过多年来参与创业公司圈,我总结出很多创业的失误和失策,包括负面的合作关系、过度开发的产品以及糟糕的市场营销策略。当然,如果企业家能够避免下面几个错误,那么等待他们的将是成功。 1、太以创意为中心。这点很难理解,但创业成功靠的不仅仅是一个好点子。当今社会,创意一抓一大把。你肯定也不是第一个想到的人。真正关键的是做事的人。不要将自己和某种创意牢牢绑定,以更开阔的视野做事。 2、太快放弃。关于创业成功这件事,放弃肯定不是一个要素。创立一项事业需要强大的责任心和毅力去跨越一个个障碍。遇到困难要具备弹性,持续地克服负面情绪才能让你在正确的道路加速前进。 3、忽略简洁性的魔力。创业公司经常会失去关注点,过度开发他们的产品。不管你信不信,多加几个功能并不会把你和竞争对手区别开。确保你设计的是最小可用产品(minimum viable product)。 4、预先规划市场营销策略。你认为自己研发一种了不起的产品,其他人可不这么认为。所以市场营销和用户接纳程度是创业成功的关键。我经常看到很多创业者花大部分时间和精力开发产品,但是在产品发布方面,未能给出详细的策略和预算。如果想让公司发展壮大,一开始就要想好市场营销策略。 5、从不询问建议。逃避任何刺耳的批评只会让你走向失败。有经验人士提供的建设性批评意见能保持公司健康发展。收集这些反馈意见时保持开放的态度。只为那些真正值得你关注的意见改变策略。 6、想的太大。你想让每个人都用你的产品,这是根本不可能的事情。你可以想的很大,但找到属于自己的小市场。这样市场营销会更廉价、有效和方便。比如你开发了高尔夫产品,你绝对不会把它推销给阿拉斯加人,对吧?相反,你应该关注一个地区以及所选目标客户的潜在共同兴趣。这样市场营销策略会更加简单化。 7、雇错了人。就像我之前说的那样,人才是伟大创意后面的驱动力。如果你的团队充斥着不够激情、机智的人,那么他们就为你埋下失败的伏笔。他们甚至可能是你的商业伙伴。如果设立长久的成功目标,就要选择恰当的团队成员,同时他们在技能、观点和做事角度方面和你形成平衡。 转自:http://www.oschina.net/news/41683/7-reasons-for-business-fail

龙生   24 Jun 2013
View Details

闭包

基本概念 闭包是可以包含自由(未绑定到特定对象)变量的代码块;这些变量不是在这个代码块内或者任何全局上下文中定义的,而是在定义代码块的环境中定义(局部变量)。“闭包” 一词来源于以下两者的结合:要执行的代码块(由于自由变量被包含在代码块中,这些自由变量以及它们引用的对象没有被释放)和为自由变量提供绑定的计算环境(作用域)。在 Scala、Scheme、Common Lisp、Smalltalk、Groovy、JavaScript、Ruby 和 Python,objective c 等语言中都能找到对闭包不同程度的支持。 在编程领域我们可以通俗的说:子函数可以使用父函数中的局部变量,这种行为就叫做闭包! 价值 闭包的价值在于可以作为函数对象 或者匿名函数,对于类型系统而言这就意味着不仅要表示数据还要表示代码。支持闭包的多数语言都将函数作为第一级对象,就是说这些函数可以存储到变量中、作为参数传递给其他函数,最重要的是能够被函数动态地创建和返回。 数学意义 若在一个集合上进行某种运算,其运算结果仍为集合中的元素,则称该集合为此运算上的闭包。 本质 集合 S 是闭集当且仅当 Cl(S)=S(这里的cl即closure,闭包)。特别的,空集的闭包是空集,X 的闭包是 X。集合的交集的闭包总是集合的闭包的交集的子集(不一定是真子集)。有限多个集合的并集的闭包和这些集合的闭包的并集相等;零个集合的并集为空集,所以这个命题包含了前面的空集的闭包的特殊情况。无限多个集合的并集的闭包不一定等于这些集合的闭包的并集,但前者一定是后者的父集 若 A 为包含 S 的 X 的子空间,则 S 在 A 中计算得到的闭包等于 A 和 S 在 X 中计算得到的闭包(Cl_A(S) = A\cap Cl_X(S))的交集。特别的,S在 A 中是稠密的,当且仅当 A 是 Cl_X(S) 的子集。 闭包点 对欧几里德空间的子集 S,x 是 S 的闭包点,若所有以 x 为中心的开球都包含 S 的点(这个点也可以是 x)。 这个定义可以推广到度量空间 X 的任意子集 S。具体地说,对具有度量 d 的度量空间 X,x 是 S 的闭包点,若对所有 r > 0,存在 y 属于 S,使得距离 d(x,y) < r(同样的,可以是 x = y)。另一种说法可以是,x 是 S 的闭包点,若距离 d(x,S) := inf{d(x,s) : […]

龙生   24 Jun 2013
View Details

单点登录

最近面试程序同时,问过这个概念,很多都不知道。在职的同事对此概念也较为模糊,贴一下百科的解释普及一下: 概述 单点登录(Single Sign On),简称为 SSO,是目前比较流行的企业业务整合的解决方案之一。SSO的定义是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。 通常情况下运维内控审计系统、4A系统或者都包含此项功能,目的是简化账号登陆过程并保护账号和密码安全,对账号进行统一管理。 企业应用集成(EAI, Enterprise Application Integration)。企业应用集成可以在不同层面上进行:例如在数据存储层面上的“数据大集中”,在传输层面上的“通用数据交换平台”,在应用层面上的“业务流程整合”,和用户界面上的“通用企业门户”等等。事实上,还有一个层面上的集成变得越来越重要,那就是“身份认证”的整合,也就是“单点登录”。 在信息安全管理中,访问控制(Access Controls)环绕四个过程:Identification;Authentication;Authorization;Accountability。单点登录(Single Sign On)属于Authorization授权系统,除单点登录外还包括:Lightweight Directory Access Protocol 和 Authorization ticket。(Michael E. Whitman (2011) Management Of Information Security Kennesaw University) 技术实现机制 当用户第一次访问应用系统1的时候,因为还没有登录,会被引导到认证系统中进行登录;根据用户提供的登录信息,认证系统进行身份效验,如果通过效验,应该返回给用户一个认证的凭据--ticket;用户再访问别的应用的时候,就会将这个ticket带上,作为自己认证的凭据,应用系统接受到请求之后会把ticket送到认证系统进行效验,检查ticket的合法性。如果通过校验,用户就可以在不用再次登录的情况下访问应用系统2和应用系统3了。

龙生   24 Jun 2013
View Details

ASP.NET 抓取网页内容-图片

本文不仅适用于图片,同样实用于其它二进制文件。 需要四个类:WebRequest、WebResponse、Stream、FileStream。 WebRequest、WebResponse 的名称空间是: System.Net Stream、FileStream 的名称空间是: System.IO 核心代码 WebRequest request = WebRequest.Create("http://portrait7.sinaimg.cn/1859998982/blog/180.jpg");WebResponse response = request.GetResponse();Stream reader = response.GetResponseStream();FileStream writer = new FileStream("D:\\logo.jpg", FileMode.OpenOrCreate, FileAccess.Write);byte[] buff = new byte[512];int c = 0; //实际读取的字节数while ((c=reader.Read(buff, 0, buff.Length)) > 0){ writer.Write(buff, 0, c);}writer.Close(); 注意类 Stream,不是 StreamReader。 示例 <%@ Page Language="C#" %><%@ Import Namespace="System.Net" %><%@ Import Namespace="System.IO" %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <script runat="server"> void Page_Load(object sender, EventArgs e) { try { WebRequest request = WebRequest.Create("http://portrait7.sinaimg.cn/1859998982/blog/180.jpg"); WebResponse response = request.GetResponse(); Stream reader = response.GetResponseStream(); FileStream writer = new […]

龙生   23 Jun 2013
View Details

HTML <script> 标签的 charset 属性

定义和用法 charset 属性规定在外部脚本文件中使用的字符编码。 如果外部文件中的字符编码与主文件中的编码方式不同,就要用到 charset 属性。 默认的字符编码是 ISO-8859-1。 src 和 charset 属性 对特别长的 JavaScript 程序或者经常重复使用的程序来说,你可以希望将这些代码存放到一个单独的文件中。在这样的情况下,让浏览器通过 src 属性来载入那个单独的文件。 src 的值是包含这个 JavaScript 程序的文件的 URL。保存的文件的 MIME 类型应是 application/x-javascript,但如果文件名的后缀为 .js,也能够被正确配置了的服务器进行恰当的处理。 例如下面的语句:

上面的例子告诉支持 <script> 的浏览器从服务器上下载名为 abc.js 的 JavaScript 程序。 重要事项:请注意,尽管<script> 标签没有内容,结束的 </script> 标签也是必需的。 charset 属性与 src 属性一起使用,告诉浏览器用来编码这个 javascript 程序的字符集。它的值是任何一个 ISO 标准字符集编码的名称。 实例 定义外部脚本文件中所使用的字符编码:

语法

属性值 值 描述 character_encoding 外部脚本文件的字符编码方式。常用的字符集有: UTF-8 – Unicode 字符编码 ISO-8859-1 – 拉丁字母表的字符编码 如需查看所有可用的字符集,请访问我们的 字符集参考手册。

龙生   22 Jun 2013
View Details

Varnish

Varnish是一款高性能的开源HTTP加速器,挪威最大的在线报纸 Verdens Gang 使用3台Varnish代替了原来的12台Squid,性能比以前更好。 Varnish 的作者Poul-Henning Kamp是FreeBSD的内核开发者之一,他认为现在的计算机比起1975年已经复杂许多。在1975年时,储存媒介只有两种:内存与硬盘。但现在计算机系统的内存除了主存外,还包括了CPU内的L1、L2,甚至有L3快取。硬盘上也有自己的快取装置,因此Squid Cache自行处理物件替换的架构不可能得知这些情况而做到最佳化,但操作系统可以得知这些情况,所以这部份的工作应该交给操作系统处理,这就是 Varnish cache设计架构。[1] varnish项目是2006年发布的第一个版本0.9.距今已经四年多了,此文档之前也提过varnish还不稳定,那是2007年时候编写的,经过varnish开发团队和网友们的辛苦耕耘,现在的varnish已经很健壮。很多门户网站已经部署了varnish,并且反应都很好,甚至反应比squid还稳定,且效率更高,资源占用更少。相信在反向代理,web加速方面,varnish已经有足够能力代替squid。 官网:https://www.varnish-cache.org/

龙生   21 Jun 2013
View Details

Bootstrap

Bootstrap是Twitter推出的一个用于前端开发的开源工具包。它由Twitter的设计师Mark Otto和Jacob Thornton合作开发,是一个CSS/HTML框架。Bootstrap中文网致力于为广大国内开发者提供详尽的中文文档、代码实例等,助力开发者掌握并使用这一框架。 http://www.bootcss.com/

龙生   21 Jun 2013
View Details

推荐 10 款基于 Bootstrap 框架的扩展

Bootstrap是快速开发Web应用程序的前端工具包。它是一个CSS和HTML的集合,它使用了最新的浏览器技术,给你的Web开发提供了时尚的版式,表单,buttons,表格,网格系统等等。 本文推荐 10 款基于 Bootstrap 框架的扩展,包括风格扩展以及功能方面的扩展: 1. Bootstrap Cosmo Cosmo 是一个 Bootstrap 的主题,实现了 Metro 效果风格。 2. jQuery UI Bootstrap jQuery UI Bootstrap 提供了在 jQuery UI 集成 Twitter 的 Bootstrap 框架的功能。 3. bootstrap-datetimepicker bootstrap-datetimepicker 是一个 Bootstrap 风格的日期选择器。 4. StyleBootstrap Bootstrap 有自己自定义的风格,但 StyleBootstrap 是一个更详细的 Bootstrap 风格,包含颜色拾取器以及可单独为某个组件设置独立的样式。 5. android-bootstrap android-bootstrap 是一个模板/引导/样板文件的应用程序,包括大量的优秀的开放源码工具和框架 6. jQuery Mobile Bootstrap Theme jQuery Mobile Bootstrap Theme 类似 jQuery UI Bootstrap 主题,但主要是为 jQuery Mobile 提供,用于构建移动 Web 应用。 7. Charisma Charisma 是基于 Twitter Bootstrap 制作的响应式网站管理后台模板,包含9套漂亮的主题。 8. Bootswatch bootswatch是一款基于bootstrap的汇集了多种风格的前端UI解决方案 9. Fbootstrapp Fbootstrapp 是一个基于 Bootstrap 提供了跟 Facebook iframe apps 和设计的功能。包含基本的 CSS […]

龙生   21 Jun 2013
View Details

topstyle

TopStyle Pro是一款功能专注于CSS设计的辅助工具,功能相当多,附有CSS码检查功能,减少写错的机会。尤其是它的HELP文件中详细的 CSS指令介绍,很适于用作参考文件与初次接触CSS的人做为学习使用。如果你想进一步认识网页设计,做出更有风格有别于一般网站的网页,勿必要趁早接触 CSS喔。 TopStyle是一款Cascading Style Sheets (CSS) 的编辑软件,可以帮助我们编写符合包括CSS2标准在内的样式表。TopStyle具有CSS定义选择功能,让你可以选取特定的浏览器或CSS阶层、内建的样式表检查器、内部的预览能力、以颜色标示的编辑器,以及样式预览。TopStyle是第一款可以使用Mozilla等Gecko浏览器的程序。你可以用内嵌的Internet Explorer和Mozilla Gecko来预览你的式样表,或者分开使用。此外,TopStyle的设计对系统十分友善。它不会安装任何DLL、ActiveX controls或其它系统文件。功能相当多,附有CSS码检查功能,减少写错的机会。尤其是它的HELP文件中详细的CSS指令介绍,很适于用作参考文件与初次接触CSS的人做为学习使用。如果你想学习web标准,制作CSS需要一个好软件,TopStyle是非常棒的选择。

龙生   19 Jun 2013
View Details
1 350 351 352 410