转自:http://heikezhi.com/2011/04/03/ten-lessons-from-githubs-first-year/
尽早开始
当Chris和我在07年年底开始搭建Github时,Git还只是一个默默无闻的版本控制系统。当然,Linux内核的黑客们从它诞生的第一天就已经用上它了,但是在这个小圈子之外,很少有开发者将它作为日常的版本管理工具。我了解Git都是拜Dave Fayram所赐,他是我在Powerset的前同事,也是我的好朋友,Dave是个典型的新技术追逐狂人,就我的记忆里,他应该是第一个在Ruby社区推广Git的人。
在那个时候,Git的生态环境还相当恶劣,在1.5版本发布之后,Git才逐渐引起人们的注意,在当时只有repo.or.cz提供Git托管服务,对我来说,它的功能非常有限,也不好用,并且设计的很糟糕。当时还没有商业的Git托管服务,尽管如此,但人们已经开始在各种Ruby聚会上讨论Git,讲述他是多么的酷。但还是有点缺憾,Git的设计目标是让人们能够通过一种简洁的方式来分布式的管理代码,但是对于私有代码,这种方式如何保障代码被安全的分享呢?你唯一的选择就是自己在Unix机器上设置账户,搭建一个ad-hoc解决方案,但这种方式显然不够完美。
然后Github就诞生了,在它诞生的时候还根本就不存在付费Git托管这个市场,我们需要自己来创造这个市场。我非常清楚的记得,当时我告诉人们:”我不期望Github能立即成功,因为git需要一点时间来成长,但是我们会为那一刻做好准备“,chris和我都迫不及待的期待这一切能早点发生,当时我还在powerset工作,而他则通过提供Rails的咨询服务维持生活。选择尚处于萌芽期的新技术,让我们可以不用花费太多,只是利用我们的业余时间就可以创建一家新公司,并且也没什么竞争。
适应你的用户
这是一条似是而非的建议:倾听你的用户,但是不要让他们来告诉你应该做什么。让我稍微解释一下,比方说我们有个用户告诉我们:“GitHub应该提供通过FTP上传项目文档的功能”,但他实际想说的其实是“我需要一种简单的方式来发布项目文档”,但是他们常常会借用现有的技术来描述他们的需求,我们其实可以很容易的按客户的要求实现一个基于FTP的文档上传解决方案,但是我们又多花了点心思深入研究了一下这个需求,最终我们的方案是让用户通过git来发布内容,这个办法即满足了用户的需要又足够简洁优雅。
这里不得不说,另一个对这个概念深有理解的就是苹果公司,我相信有很多苹果用户都希望苹果做一部电话,但是steve Jobs和他的那伙人又顺着这个需求做了更深入的分析然后找出了用户真正需要的:一部外观漂亮,简单好用,并且可以很容易同步的移动设备,然后他们颠覆了整个行业,这就是秘密所在,永远不要给用户他们所要求的,给他们他们需要的。
寻找乐趣
我的大学是加州的一个叫Harvey Mudd的小学校,是的,我肯定你从没听过它,但是如果你还记得那些曾在高中时让你非常着迷的美国新闻以及世界报道中关于”最佳大学“的书(是的,你可能没感觉,但我很着迷),你会发现,Harvey Mudd被评为课外作业最多的学校,是的,比MIT还要多,比Caltech也要多。事实证明这是真的,多到我都无法用语言来描述,这给我留下了很多痛苦回忆,包括被复杂又无聊的spring/mass/damper系统所折磨,以及计算一条线缆被双螺旋的磁铁围绕所产生的磁通量等等。我们拼命的学习,非常用功,但是我们玩的也很疯,因为那是唯一可以让我们保持神智正常的方法。
在一个创业公司工作就和这差不多,你就像是在大学,你需要解决许多难以想象的问题,但如果你是和你最好的朋友一道,我相信这会给你留下一段非常美好的记忆。在这样的环境下,你必须学会不时的偷偷懒来保持平衡,过度劳累是个非常危险的现象,培养一个轻松玩乐的氛围,对保持你个人的健康以及公司的健康发展都至关重要。
留意Twitter
我发现Twitter在获取实时反馈方面非常用用,如果网站因为某些原因变慢了,Twitter会立刻告诉我,如果站点在某些国家不能访问了,我也可以通过Twitter及时发现,如果我们刚刚发布了一个新的很受欢迎的特性,通过在Twitter搜索用户的反馈也可以让我稍微的自我陶醉下。
现在人们有种将Twitter变成出气筒的趋势,网站上的任何一个小Bug通过Twitter都有可能被放大成一场大灾难,并且他们还会给你加上一个非常让人泄气的”FAIL“标签。不过值得注意的是,通过关注这些发泄不满的Tweet,可以很好的帮助我们确定短期的Bug修复列表,我们在Twitter上创建了一个GitHub账号来专门回应用户的负面反馈,这种方式很有效的消除了很多用户的不满。
如果你有iPhone,我强烈的推荐Summizer这个来自Fanzter, Inc的应用,这个应用让搜索,查看和回应tweets变得无比简单。
随时部署
在第一届RailsConf上,我有幸听到Martin Fowler关于交付的很赞的演讲,他举了一些很不错的例子来阐述敏捷开发,我临时借用一下。
想象你接到一个任务让你制造一把电脑控制的枪,它需要精准的命中50米之外的目标,这是唯一的需求。一种方式是打造一个复杂的机器在射击之前对一切不确定的参数进行测量(风速,海拔,温度等等),然后瞄准目标发射。另一种方法是打造一个简单一点的机器定期发射,然后检查那些子弹是否命中了目标,再根据结果实时调整并准备下一次射击。这两种方式的不同在于,后者认识到子弹非常便宜。因此在第一组人完善他们的风力检测装置时,你应该已经完成了你的简单武器系统并成功命中了目标。
在Web开发的世界中也是如此,目标就是你网站的终极呈现,而子弹就是每一次部署,以及你收集用户反馈的机制。Web应用的第一年往往很神奇,你的用户都是些喜欢尝鲜的人,他们往往希望每几周就来个新特性,即使这会造成几小时的宕机,只要你能保证这些特性慢慢成熟起来,他们还是会原谅你。在Github的早期,我们曾经在一个下午部署了10次,因此我们一直都在朝着那个终极目标一点点靠近。
一定要抓住第一年的好时机,一旦一些非常重要的客户开始使用你的产品,你就不得不多加小心不要让你射偏的子弹打到他们的身上,再往后,宕机或者有漏洞的部署还会造成经济损失,这时你就需要依靠一些建模工具来预测你的目标了。
办公室不是必需的
GitHub的4个全职员工都在旧金山地区,但我们还没有自己办公室,不过我们也不是完全通过虚拟空间来联系,事实上,每周你都可以在北边海滩的一个咖啡馆看到我们围坐在一张用2个4平方的小桌拼起来的像是老式的折叠板那样的方桌前。这不是Google campus,但是租金真的很便宜,并且饮料尝起来也不错。
其实我们也不是不想找个地方安顿下来,我们几乎已经租下了一个老酒吧,但是最后我们还是觉得没必要这么匆忙,我们想再等等,直到找到一个完美的办公室,而在那之前,我们就可以将省下来的钱投入公司运营,或者放入我们自己的口袋。至少到目前为止,我对我的沙发和咖啡馆还算满意。
当然,如果没有37signals的在线聊天室应用campfire,以及一个非常难找但是相当好用的Mac桌面客户端Propane,这一切都将变得不可能,这里强烈推荐下这两个工具。
使用开源进行招聘
除了Github的3个cofounder之外,我们还招聘了一个全职的开发者(Scott Chacon)和一个兼职的技术支持(Tekkub)。
我们雇佣Tekkub是因为它是Github最早期的用户之一,并且他在Github上维护了超过75个项目(这实在是太加分了),并且他还非常勤快的向我们发送反馈,甚至在IRC频道上帮我们解答用户提问,而他做这一切只是因为他喜欢。
我第一次遇到Scott是在旧金山的一次Ruby活动上,他演示了他的大量围绕Git的项目中的一个,Scott是这个房间里使用Git时间最久的。他当时正在为一个基于Ruby的Git实现工作,而我也正在实现基于Git binding的Fork/exec,很显然,他属于那种既可以成为帮助你的盟友,又可以成为你非常危险的对手那种人。幸运的是,活动结束后我们找了个地方喝了几杯,然后就成了好朋友,不久之后,Scott就开始为我们提供咨询服务,并完成了Gist的后台架设,然后我们就知道我们可以全职雇佣Scott了,不需要面试和引荐,因为我们已经非常了解彼此,我们毫不犹豫的就给他了一个offer。
这件事教给我的一课就是,最简单也是风险最低的招人办法,就是基于他的过去来对他的将来进行评估,这个方法反过来也成立:如果你想要找一家创业公司工作(或者其它你喜欢的),你需要先对它周边的社区做点贡献,用你的时间和代码来证明你就是那个工作的最佳人选。
信任你的团队
没有什么比微管理来的更让我痛恨了,还记得5年前我还在做设计咨询的工作时,我有个在Platonic附近的客户,他就非常喜欢这种微管理,他坚持要我去他的办公室,然后坐在一台老式Mac后面设计各种标签以及分类,还有给一大堆穿着泳衣的模特照片润色(这个倒是不错),然后在我工作时,他会时不时在我身边徘徊并发号施令,”太红了!你能让文字更小点吗?把这块的瑕疵处理下吧!“,这实在很让人受不了。
这个客户其实只要每天花点时间把任务布置给我,然后去忙他自己的事情,过5,6个小时再回来看看就行了,我相信如果用这种方式,我的设计肯定会比现在好很多,并且只需要现在一半的时间就够了,但是他却把我当成一个需要根据他的指令来操作Photoshop的机器人,这严重压制了我的才能,也浪费了时间和金钱。
这种事无巨细的微管理其实是因为缺乏信任,解决的方法就是招聘更聪明的人并充分信任他们的判断。在创业公司,你可以使用微管理来减少动力,也可以通过給予信任来增强动力。当一群足够聪明并且彼此充分信任的人聚在一起,你就等着神奇的事情发生吧。
你不需要风险投资
最近有许多文章都讲到风投行业正在发生的改变,我不想假装成这方面的专家,但是我已经认识到对于像我们这样的Web创业公司,可以完全不需要外部的投资来取得成功,我清楚知道这一点,因为我们从来没有从投资者那里拿一分钱,我们自己筹集了几千块作为启动资金,并且在我们开放我们的收费和订阅计划的第一天我们就已经盈利了。
最后,每个创业公司都不尽相同,因此你只能靠自己来决定是否需要外部的投资,可能会有一大堆的理由驱使你去寻找和接受投资,但是你应该确保你做得事情是你最感兴趣的,因为很有可能你根本就不需要那样做。我可以辞掉我最后一份工作的其中一个原因就是我可以对他们说”我已经尽责了“,但是如果我拿了别人的钱,我就不能再那么说了。
开源所有你能开源的
为了让Github能够同Git仓库交互,我创建了第一个Ruby的Git绑定。最终,这个库变的相当完备并且我们面临一个选择:我们是将它开源还是继续保持私有?两种方式都各有利弊。保持私有意味着基于Ruby的Git托管服务的竞争门槛会高一些,但是开源它则意味着。。。
注意:这就是原帖结束的地方,我会尽量在接下来写一篇阐述我们的开源哲学的文章,但我保证这个等待绝对足够漫长。
分享到:
相关推荐
风光储直流微电网Simulink仿真模型:光伏发电、风力发电与混合储能系统的协同运作及并网逆变器VSR的研究,风光储直流微电网Simulink仿真模型:MPPT控制、混合储能系统、VSR并网逆变器的设计与实现,风光储、风光储并网直流微电网simulink仿真模型。 系统由光伏发电系统、风力发电系统、混合储能系统(可单独储能系统)、逆变器VSR?大电网构成。 光伏系统采用扰动观察法实现mppt控制,经过boost电路并入母线; 风机采用最佳叶尖速比实现mppt控制,风力发电系统中pmsg采用零d轴控制实现功率输出,通过三相电压型pwm变器整流并入母线; 混合储能由蓄电池和超级电容构成,通过双向DCDC变器并入母线,并采用低通滤波器实现功率分配,超级电容响应高频功率分量,蓄电池响应低频功率分量,有限抑制系统中功率波动,且符合储能的各自特性。 并网逆变器VSR采用PQ控制实现功率入网。 ,风光储; 直流微电网; simulink仿真模型; 光伏发电系统; 最佳叶尖速比控制; MPPT控制; Boost电路; 三相电压型PWM变换器;
以下是针对初学者的 **51单片机入门教程**,内容涵盖基础概念、开发环境搭建、编程实践及常见应用示例,帮助你快速上手。
【Python毕设】根据你提供的课程代码,自动排出可行课表,适用于西工大选课_pgj
【毕业设计】[零食商贩]-基于vue全家桶+koa2+sequelize+mysql搭建的移动商城应用
电动汽车充电背景下的微电网谐波抑制策略与风力发电系统仿真研究,电动汽车充电微电网的谐波抑制策略与风力发电系统仿真研究,基于电动汽车充电的微电网谐波抑制策略研究,包括电动汽车充电负 载模型,风电模型,光伏发现系统,储能系统,以及谐波处理模块 风力发电系统仿真 ,电动汽车充电负载模型; 风电模型; 光伏发现系统; 储能系统; 谐波处理模块; 风力发电系统仿真,电动汽车充电微电网的谐波抑制策略研究:整合负载模型、风电模型与光伏储能系统
Vscode部署本地Deepseek的continue插件windows版本
内容概要:本文详细介绍了滤波器的两个关键参数——截止频率(F0)和品质因素(Q),并探讨了不同类型的滤波器(包括低通、高通、带通和带阻滤波器)的设计方法及其特性。文章首先明确了F0和Q的基本概念及其在滤波器性能中的作用,接着通过数学推导和图形展示的方式,解释了不同Q值对滤波器频率响应的影响。文中特别指出,通过调整Q值可以控制滤波器的峰谷效果和滚降速度,进而优化系统的滤波性能。此外,还讨论了不同类型滤波器的具体应用场景,如低通滤波器适用于消除高频噪声,高通滤波器用于去除直流分量和低频干扰,而带通滤波器和带阻滤波器分别用于选取特定频段信号和排除不需要的频段。最后,通过对具体案例的解析,帮助读者更好地理解和应用相关理论。 适合人群:电子工程及相关领域的技术人员、研究人员以及高校学生,特别是那些需要深入了解滤波器设计原理的人群。 使用场景及目标:适用于从事模拟电路设计的专业人士,尤其是希望掌握滤波器设计细节和技术的应用场合。目标是让读者能够灵活运用Q值和F0来优化滤波器设计,提升系统的信噪比和选择性,确保信号的纯净性和完整性。
内容概要:本文主要讲述了利用QUARTUSⅡ进行电子设计自动化的具体步骤和实例操作,详细介绍了如何利用EDA技术在QUARTUSⅡ环境中设计并模拟下降沿D触发器的工作过程,重点探讨了系统规格设计、功能描述、设计处理、器件编译和测试四个步骤及相关的设计验证流程,如功能仿真、逻辑综合及时序仿真等内容,并通过具体的操作指南展示了电路设计的实际操作方法。此外还强调了QUARTUSⅡ作为一款集成了多种功能的综合平台的优势及其对于提高工作效率的重要性。 适用人群:电子工程、自动化等相关专业的学生或者工程师,尤其适用于初次接触EDA技术和QuartusⅡ的用户。 使用场景及目标:旨在帮助用户理解和掌握使用QUARTUSⅡ这一先进的EDA工具软件进行从概念设计到最后成品制作整个电路设计过程的方法和技巧。目标是在实际工作中能够熟练运用QUARTUSⅡ完成各类复杂电子系统的高效设计。 其他说明:文中通过具体的案例让读者更直观理解EDA设计理念和技术特点的同时也为进一步探索EDA领域的前沿课题打下了良好基础。此外它还提到了未来可能的发展方向,比如EDA工具的功能增强趋势等。
Simulink建模下的光储系统与IEEE33节点配电网的协同并网运行:光照强度变化下的储能系统优化策略与输出性能分析,Simulink模型下的光伏微网系统:光储协同,实现380v电压等级下的恒定功率并网与平抑波动,Simulink含光伏的IEEE33节点配电网模型 微网,光储系统并网运行 光照强度发生改变时,储能可以有效配合光伏进行恒定功率并网,平抑波动,实现削峰填谷。 总的输出有功为270kw(图23) 无功为0 检验可以并网到电压等级为380v的电网上 逆变侧输出电压电流稳定(图4) ,Simulink; 含光伏; 配电网模型; 微网; 光储系统; 储能配合; 恒定功率并网; 电压等级; 逆变侧输出。,Simulink光伏微网模型:光储协同并网运行,实现功率稳定输出
基于Andres ELeon新法的双馈风机次同步振荡抑制策略:附加阻尼控制(SDC)的实践与应用,双馈风机次同步振荡的抑制策略研究:基于转子侧附加阻尼控制(SDC)的应用与效能分析,双馈风机次同步振荡抑制策略(一) 含 基于转子侧附加阻尼控制(SDC)的双馈风机次同步振荡抑制,不懂就问, 附加阻尼控制 (SDC)被添加到 RSC 内部控制器的q轴输出中。 这种方法是由Andres ELeon在2016年提出的。 该方法由增益、超前滞后补偿器和带通滤波器组成。 采用实测的有功功率作为输入信号。 有关更多信息,你可以阅读 Andres ELeon 的lunwen。 附lunwen ,关键词:双馈风机、次同步振荡、抑制策略;转子侧附加阻尼控制(SDC);RSC内部控制器;Andres ELeon;增益;超前滞后补偿器;带通滤波器;实测有功功率。,双馈风机次同步振荡抑制技术:基于SDC与RSCq轴控制的策略研究
springboot疫情防控期间某村外出务工人员信息管理系统--
高效光伏并网发电系统MATLAB Simulink仿真设计与MPPT技术应用及PI调节闭环控制,光伏并网发电系统MATLAB Simulink仿真设计:涵盖电池、BOOST电路、逆变电路及MPPT技术效率提升,光伏并网发电系统MATLAB Simulink仿真设计。 该仿真包括电池,BOOST升压电路,单相全桥逆变电路,电压电流双闭环控制部分;应用MPPT技术,提高光伏发电的利用效率。 采用PI调节方式进行闭环控制,SPWM调制,采用定步长扰动观测法,对最大功率点进行跟踪,可以很好的提高发电效率和实现并网要求。 ,光伏并网发电系统; MATLAB Simulink仿真设计; 电池; BOOST升压电路; 单相全桥逆变电路; 电压电流双闭环控制; MPPT技术; PI调节方式; SPWM调制; 定步长扰动观测法。,光伏并网发电系统Simulink仿真设计:高效MPPT与PI调节控制策略
PFC 6.0高效循环加载系统:支持半正弦、半余弦及多级变荷载功能,PFC 6.0循环加载代码:支持半正弦、半余弦及多级变荷载的强大功能,PFC6.0循环加载代码,支持半正弦,半余弦函数加载,中间变荷载等。 多级加载 ,PFC6.0; 循环加载代码; 半正弦/半余弦函数加载; 中间变荷载; 多级加载,PFC6.0多级半正弦半余弦循环加载系统
某站1K的校园跑腿小程序 多校园版二手市场校园圈子失物招领 食堂/快递代拿代买跑腿 多校版本,多模块,适合跑腿,外卖,表白,二手,快递等校园服务 需要自己准备好后台的服务器,已认证的小程序,备案的域名!
【Python毕设】根据你提供的课程代码,自动排出可行课表,适用于西工大选课
COMSOL锂枝晶模型:五合一的相场、浓度场与电场模拟研究,涵盖单枝晶定向生长、多枝晶生长及无序生长等多元现象的探索,COMSOL锂枝晶模型深度解析:五合一技术揭示单枝晶至雪花枝晶的生长机制与物理场影响,comsol锂枝晶模型 五合一 单枝晶定向生长、多枝晶定向生长、多枝晶随机生长、无序生长随机形核以及雪花枝晶,包含相场、浓度场和电场三种物理场(雪花枝晶除外),其中单枝晶定向生长另外包含对应的参考文献。 ,comsol锂枝晶模型; 五合一模型; 单枝晶定向生长; 多枝晶定向生长; 多枝晶随机生长; 无序生长随机形核; 雪花枝晶; 相场、浓度场、电场物理场; 参考文献,COMSOL锂枝晶模型:多场景定向生长与相场电场分析
嵌入式大学生 点阵代码
那个有delphi12 tedgebrowser 使用的dll
基于DQN算法的微网储能优化调度与能量管理:深度强化学习的应用与实践,基于DQN算法的微网储能优化调度与能量管理:深度强化学习的应用与实践,基于DQN算法的微网储能运行优化与能量管理 关键词:微网 优化调度 储能优化 深度强化学习 DQN 编程语言:python 参考文献:《Explainable AI Deep Reinforcement Learning Agents for Residential Demand Side Cost Savings in Smart Grids》 内容简介: 受深层强化学习(RL)最新进展的激励,我们开发了一个RL代理来管理家庭中存储设备的操作,旨在最大限度地节省需求侧的成本。 所提出的技术是数据驱动的,并且RL代理从头开始学习如何在可变费率结构下有效地使用能量存储设备,即收缩“黑匣子”的概念,其中代理所学的技术被忽略。 我们解释了RL-agent的学习过程,以及基于存储设备容量的策略。 ,微网; 优化调度; 储能优化; 深度强化学习; DQN; 家庭存储设备; 需求侧成本节省; 智能电网; RL代理; 能量存储设备。,基于DQN算法的微网储
内容概要:该文档为FM17580的原理图设计文件,重点介绍了这款非接触式IC卡读写芯片的电路设计细节。文档详细列出了各个元器件及其连接方式、引脚分配及具体值设定。特别值得注意的是,为了确保性能和可靠性,在PCB布局时强调了GND线需要尽量以最短路径连回FM175xx芯片的TVSS引脚附近,并且靠近电源输入端(TVDD)。同时明确了FM17580只兼容SPI通讯协议,其他如IIC或UART选项则不在支持范围内。此外还提供了关于降低能耗的选择——移除不必要的ADC检测电路,这对于一些特定应用场景非常有用。 适合人群:具备硬件开发经验和RFID/NFC领域基础知识的技术人员或研究人员。 使用场景及目标:适用于需要详细了解FM17580内部结构和技术特性的项目团队;旨在帮助工程师们快速上手搭建实验平台并测试FM17580的功能特性。主要目的是为实际应用开发提供技术支持和参考。 其他说明:文档最后附带了一些附加信息,包括设计师名字、公司名称以及审查流程的相关内容,但具体内容并未公开。此外还提到该文档是针对FM17580评估板(即FM17580Demo)的设计图纸。文中出现多次类似表格可能是不同版本之间的对比或者记录修改历史的部分内容。