• Feeds

  • 互联网公司为什么要组织黑客马拉松(Hackathon)


    黑客马拉松(Hackathon)通常是一种连续、集中式的编程活动,由报名人员组队参赛并且在规定的时间内完成计划的功能。黑客马拉松的主力人员是工程师,但产品、设计等人员也可以一起组队参加。“黑客”二字在不同的场合有不同的含义,黑客马拉松中的黑客不是指安全领域里面破坏计算机系统的危险分子;而是那些可以创新性的,通过自己动手编程来扩展、改进现有系统能力的人。

    黑客马拉松通常选择在轻松的环境如咖啡馆进行,有着舒缓的音乐,全天有咖啡、茶、软饮供应;没有叮叮的座机铃声,工程师也不会碰到有人过来催进度加需求的情况。由于目标明确,为了按时完成项目,队员也会避免进行聊天、浏览新闻等分散精力的事情,精神非常集中。周围的人也全都在讨论改进项目的方法,或者是在全神贯注的开发,也给参与人员强烈的环境暗示,“我在这里能够愉快的、高效的进行创作。”

    不过这种集体高潮的活动除了自娱自乐之外,到底有没有价值?这是组织者与参与者经常面临的一个问题。

    首先,任何在公众面前集体曝光的活动不排除有作秀的性质。单纯的集体作秀如果不妨碍他人,属于无伤大雅的脱力系。而适当的团队曝光也有助于公众(包括客户、同事、公司管理阶层)了解参与团队的另一面如创新的能力及高效的执行力,创造机会让队员得到各界更好的了解。一些参赛的项目也可以引发业界从业人员以及投资界的关注,以及进一步思考如何更好的改进相应领域的系统设计来更好的满足用户使用。

    很多黑客马拉松设计成24小时连续进行,看着这些工程师通宵达旦的工作,一些旁观者会觉得不可理解,大部分人平时都不缺几个小时空闲时间,有必要24小时通宵达旦来完成一项功能?它是否仅仅是一个释放工程师多余的荷尔蒙的集体狂欢活动?

    24小时通常是一个自愿的活动,和长跑马拉松同一个道理,有能力有体力的人可以选择性的参加,每个队员可以根据自己的体力情况随时下撤休息,因此并不是旁观者想象的刻意违反人体健康的一个自虐活动。比长跑马拉松更宽松的是,黑客马拉松活动可以休息一段时间并继续进行比赛,它更强调的集中个人的精力来完成一项目标。和长跑马拉松相同的是,队员都会通过这个活动来更好的思考自己的能力、自己能坚持的旅程和自己目标,并且都能很好的享受自己高速迈向目标带来的快感。黑客马拉松创造了一个环境,让队员集中精力集中时间全心身完成一件作品。

    这种做法也非常具有效率,在24小时的活动中,队员可以完成平时一周或者更长时间才能完成的事情,效率达到平时的好几倍。另外通过快速实现自己的想法,可以更好的验证想法是否可行;通过体验做出的原型,可以更好的完善自己的想法,发现自己的不足。有时候,也会帮助我们意识到某条路走不通,更早的来规避失败的方向。所有这些,都可以更早的帮助我们跨过思维停留在idea那一步。

    有些公司将一些封闭式开发的活动或培训也称为黑客马拉松(Hackathon),我觉得区分是否真正意义Hackathon方法是,队员是自由的、主动发挥创意去改进真实世界的问题?还是它是一个被动的、指定的、或假想的任务。不要轻易使用黑客马拉松这个名称,它并不是外围人想象的一个集体狂欢活动,它也未必是一个时髦的标签。如果活动并不具备对自由的崇拜和创新的追求的黑客精神,也没有相应的产出,往黑客马拉松这方面去宣传会让公众及社区感到困扰。

    从公司的角度意义,可以参考facebook黑马组织者Pedram Keyani所说的话,Pedram在7年时间里在Facebook组织了近40场黑客马拉松。

    起初我参加黑马,仅仅是因为我喜欢同大家一起协作,挖掘工作之外的创意,以及产生的能量和自由感。然而随着时间转移,那些黑客马拉松从小小的20人业务活动摇身一变成了Facebook文化的重要组成部分。

    从工程师的角度,Hackathon的意义很大程度是让工程师从工业化的日常任务中脱离出来,回归初心,通过动手打破现实系统的束缚,将创新想法变成现实,让人与计算机的世界变得更好。

    (EOF)

    上一篇选择学习目标的困难与焦虑发表后,各个平台都有不少来询问如何解决的。简单的说下我的看法,每个人自己的学习瓶颈很难由一个同一的方法来解决,这个是我很难写也没有写解决方案的原因;文章更大的目的是让大家意识到自己在学习投入方面的浪费,反思选择的哲学,反思偏表面的学习而轻视思考的哲学,反思为了学习而学习,帮助大家思考更好的前进方法。

    选择学习目标的困难与焦虑

    大部分国内教育体系下面成长起来,尤其是仍然在做技术背景工作的工程师,在家庭、学校以及五千年儒家文化的影响下,有一个根深蒂固的思维习惯,如果某段时间没有学习目标(尤其是书本知识),就会有一种来自内心虚度年华焦虑。

    但学习的选择始终是个大问题。在学校阶段,除了填大学志愿时候会有短暂的专业选择困惑外,其他时间对于学习的目标基本不存在选择的困惑,所有目标已经被学校、家长及环境圈定了。但有一天走入社会之时,由于没有经过实际的选择历练,面对技术圈的花花世界,就会出现学习上选择的困难,包括进一步的在目标无效投入的时间消耗。

    以技术领域为例,就拿主业来说,就会有很多选择,有编程语言选择的困惑,比如PHP与Go最好的语言到底要选哪个?技术框架、操作系统、工具与平台等都需要突破,OpenStack和Docker都不懂是不是都要学?每一个热门的领域,由于都是由该领域内大量精英设计与完成,大量的代码、使用方法、使用经验值得学习,究竟应该去看Redis源码还是docker源码?技术领域由于分工的垂直与细化,以及IT工业的繁荣,每个领域都有业界长年的积累,因此一旦选择一个领域则需要投入大量时间了解整个体系。技术的学习除了看书本与资料,通常还需要该领域的实践,因此任何一个兴趣的选择都伴随大量时间的消耗。

    从一大堆细分领域里面挑出一个适合自己的本来就很困难,选择后如果没有强的驱动力往往会半途而废。有大量环境的因素会影响我们已有的选择,“你还在学Objective-C,我们已经用Swift了”,见异思迁会导致上一个学习目标投入时间的浪费。另外一方面,跟随热点也会疲于奔命,当打算切入一个热点领域时,需要临时停下手中的事情,并进一步投入大量时间进行该领域的实践与学习。看到有不少app一夜成功时,我们会花一个月时间来学做移动开发;当了解机器学习很有前景时,我们又会花几个月时间从头学习算法。业界不会缺少热点,简单追随热点会让你最终炫耀一些新的词汇外,不会留下太多积累的东西。

    由于互联网创业潮的涌起,IT职场也是非常热,为了让自己获得更多的职场机会,各种算法题目不能不做。面试官通常还对是否参与开源项目感兴趣,但拥有一个拿得出手的小工具放在github上通常是工程师们一直被拖延的计划。面试时候,面试官通常会给你评价表达能力或者逻辑思维能力欠佳,学校的老师未曾关心及培养你这些软素质,导致你又需要重新去锻炼这些能力。

    你很羡慕哪些看美剧不用看字幕的人,也在和朋友讨论时候发现有不少电影及TV剧没看而导致插不上嘴,因此周末时候最好把这些恶补回来。朋友圈里面似乎朋友都在满世界跑,因此,只要有便宜机票或旅行团,你一定不会放过这些在露脸的机会。

    当你工作的项目很忙时候,你会抱怨没有时间充电而不能跟上时代的步伐;当工作项目不紧时,你又会抱怨新学的技能没有使用需求及使用场景而不能深入。

    这就是很多工程师典型的年复一年的日子,他们很希望学点东西,也一直在学习,但往往最后未曾有效学到一些若干年后还能留下来的东西。

    工程师效率

    很好奇程序员这个群体这些年效率是变低了还高了,在社交媒体中,各种各样的段子会让你笑cry;各个兴趣圈都有一大堆内容帐号,其源源不断产生的内容可让你享受阅读的快感。这些快感会比写代码见效快。

    但是完成一个模块的代码通常要一整天或者好几天时间,中间最好还不能间段,最终只有运行没有问题才会体验到愉悦;几年前也曾经实验过,让工程师在编写代码时候,如果被各种事情打断(比如产品汪来访),就在身边一张空白表格标注一下,结果一天被打断十几次是很正常的情况,而工程师被打断一次,通常需要5-20分钟才能恢复回原来任务正常的状况。

    而社交媒体只需要一些碎片时间就可以达到高潮,等电梯不到一分钟的时间也会让你有机会对着手机傻笑,相较之下高低立判。而据说这种让大脑愉悦的神经元连接方式一旦新连上就非常稳固,最终会欲罢不能。当他在写代码的时候,大脑会下意识的切换任务去刷下微博及朋友圈以便得到放松及愉悦,而coding时被别的事情打断的创伤更是需要一些补偿来抚平。只要不是最后交付关头,这些效率的损耗无从统计,往往连自己也无法得知。

    但在另外一方面,社交媒体促进资讯流动加快,在一定程度上促使行业中优秀软件的复用程度提高。几年前还记得NoSQL遍地开花,每个公司都有一个自己的PHP MVC框架。慢慢的跟社区版本一比较之后,百花齐放的现象就慢慢消停了。最近在看一些技术会议的slides,发现大部分内容已变成各种开源软件的选型技巧了,不知是否矫枉过正了。协作程度的提高,也可以视为软件已经逐渐迈向工业社会,有了真正意义的上下游,形成了分工与合作。从这个角度来讲,工程师只需要在自主研发还是拿来主义之间做个选择题,从整体的角度来说,研发效率就得到了提升,视野的提升弥补了coding下降带来的效率问题。

    但这也带来一个群体智商下降的问题,大前研一在《低智商社会》中提到

    这样导致的结果是,时下流行语中对社会问题所定义的“中低阶层”的范围在不断扩大。所谓的“中低阶层”,就是指身处其中的年轻人对工作和学习都缺乏兴趣,而这种兴趣的缺乏加剧了中产阶级社会的崩溃。

    随着信息化社会的高度发展,人们对手机和互联网的依赖度越来越高。在这种情况下,年轻人的思考能力和交流能力面临日趋下降的危险。甚至有种说法称,当代年轻人只关心自己周围3米以内的事情。

    当然,“智商衰退”并不仅仅发生在孩子和年轻人身上,连大人们也在做着令人难以置信的事情。比如说,电视节目里一说到“纳豆对减肥有帮助”,他们就会不假思索地立刻去买。第二天日本超市的纳豆竟然被抢购一空。继纳豆事件之后又发生了香蕉的抢购潮。

    当前技术圈情况也差不多如此,一种新技术只要得到宣传,就会一拥而上,把使用新技术当做战绩,各种技术会议充斥着各种新技术使用的技巧的分享。而新技术一旦在国外受到了质疑,技术圈马上就会变得茫然,比如“LinkedIn都不用Scala语言了,那我下一步怎么办?”

    影响工程师效率还有一个因素是来自大公司里的流程,由于“全栈工程师”还没得到广泛的理解及接受,因此不同栈之间新开发的模块存在一个联调的过程,如果他们属于不同的部门,则联调的周期会更长。软件开发完成到上线之前,还需要经过测试部门的测试。由于这些因素,加上人为的一些控制稳定性的制度,即使在代码中加个空格,在一些团队有时需要一周的时间才能到线上。

    大型系统中还存在模块耦合的问题,由于多个模块由不同的人员及部门维护,因此给调试及持续集成带来很大的挑战。不少公司中很多代码只能做到单个模块的测试及集成,由于依赖复杂,测试环境很难搭建,最后只有线上才有一个包含所有模块的运行环境,因此一段代码如果要依赖上下游才能验证正确性,则只有等到上线后才能判断是否存在bug。当环境逐渐退化到这样的境地,效率自然就无法保证。