思沃之旅
TL;DR
- 特训营教的不只是技术点,而是致力于成为工程师而非程序员
- 交流、分享与团队协作,是另一份馈赠
- 守破离:先契合团队,再带领突破,最后跳出系统去对接
特训营生活终究是过去了,时间就像是紧握在手心的沙子,心里百感交集,遂写些文字以作纪念。我想,十年之后,当我再次回想起这段岁月的时候,其意义恐怕不亚于我的四年大学生涯。
故事常常发生在盛夏,我要讲的也不例外。六月中旬,当我得到思特沃克学院暑期特训营的消息的时候,我便意识到,对于我这样一个科班出身,对敏捷软件开发之道又充满向往的人来说,这应该就是进化的契机了吧。于是我将原定的实习计划搁置,带着两位朋友一起报名了特训营。
等待结果的那十多天是很焦灼的,可能是我太渴望的缘故吧。好在最后能够成为幸运的选中者,也就是从那一刻起,我身上有了越来越浓的思沃气息,也越来越喜欢思特沃克的文化,同时愈加明白自己应该成为什么样的人。至少在此之前,我是不会相信有一家企业会把「通过技术来引领世界进步的变革,消除社会不平等」作为组织的一大支柱的。
在这次特训营里,教授的内容是软件开发的知识。我们一共有五十多名学生,从高中刚刚毕业到即将大四,年龄不一我倒不觉得奇怪,但是令我无比惊讶的是所有人里面计算机相关专业的人居然大约只占百分之二十,也就是说大家只需要对编程有兴趣就可以加入。那么,为什么会这样设置呢?直到仝老师在给我们讲课的时候,我才隐约明白原因可能如下:1. 正当互联网时代,这个世界是没有任何行业、任何人可以脱离互联网的,所以不管什么专业,都有必要去了解学习互联网的重要部分——软件。2. 同样由于互联网渗透在各个领域,单单以程序员的视角去编写软件是不一定能够写出真正合适的软件的,针对某个领域定制的软件需要该领域专家与软件开发人员合作去真正地解决领域内的痛点。
因此,程序员需要借助不同的思想来创造出更加优秀的软件,非程序员则需要了解软件以便发挥出它更强大的力量。
整个特训营期间,我跟我的同伴们在老师的帮助下学会了很多 web 开发领域的技术,比如:HTML+CSS 编写静态页面,JavaScript 基础,Node.js 写 web 服务器,RESTful 风格的 API,Redis 数据库,Git 版本控制工具……然而,我想对我们而言,这些技术点并不是最重要的,我也能感觉得到老师们真正想要教给我们的并非是这些将来很可能会被淘汰的技术,而是「致力于成为一名工程师而非程序员」这样的思想,比如:敏捷开发的意义,如何做好敏捷实践,程序在设计阶段需要考虑什么,程序的「工程」应该如何分解,如何提升自己的视野与见解……当然,要做到这些并非一日之功,这两个月我们能做的也仅仅是先从实践出发,先进入到软件开发的领域内,实际地开发出一两款可以使用的 web 程序,如果你能看到我们的成果的话,你会知道我们都做到了,并且我们都做得不错。与此同时,老师所带给我们的软件开发之道也在我们心里扎下了根,作为一名准程序员我必定会沿着这条依照前辈经验总结出来的道路努力前行,我相信其他的同学也会跟我一样成为仝老师口中的「火种」,把习得的思想传承下去影响更多的人。
除了培养学生的技术水平,提升学生对待软件开发的思想态度。思沃学院带给我们的另一馈赠就是让我们学会了交流、分享与团队协作。单打独斗式的软件开发已经是上个世纪的事了,敏捷团队虽然人数仅在十人左右,但懂得如何高效地沟通着实是很有必要的。从特训营的第一个环节「设计工作坊」开始,我们就一直保持着 5-7 人一小组,小组里会尽量分配不同专业的人来保证思想的多样性,期间也会分组让我们去跟更多不同的人交流,同样也会安排不同的角色锻炼你的综合能力。在团队中,我们必须承担起自己责任,需要你出点子的时候,你得跟同伴交流;需要你解答问题的时候,你得站出来分享或者突破;需要你去分享的时候,你得代表你的小组,去把你们小组的风采展现出去。我以前是一个比较内向,容易害羞的人,上台不知道怎么说话的那种,但现在我面对几十个人在台上分享的时候我表现得也会比较自然了。
数字化的时代需要什么样的人才?曾看过仝老师在拉勾网上做过的一次分享,「守破离」的思想让我很是佩服。1. 首先你得技术上,思想上去契合你的团队,做好你该做的。2. 然后你得通过带领团队,协调团队,从这个过程中发现问题再寻求突破。3. 跳出软件开发的层面与系统,去与其他领域、组织对接,进而创新。而我们在思沃学院,正是在沿着这样的路线接受培养。我们会真正地组成一个团队,分配好角色,去沟通,去协作,克服很多困难,最后得到一个产品。能在校期间就能有这样的工作体验真的是很难得的经历。
最后,真的感谢思特沃克与思特沃克学院能提供这样的机会给我们;同时也感谢各位老师技术、思想上的引导,生活上的帮助;感谢有缘聚到一起,来自各大高校参加特训营的朋友们。希望大家能和思特沃克学院一起,改变世界!
Hello ThoughtWorks
按照惯例,每一次启程,都应该 hello 一下,或调侃,或敬畏。不同的是这一次要说的不是 Hello World。思特沃克,我来了。期待了这么久,马上就可以相见的时候,心里大概有激动,有敬畏,也有满腔热血。仅以此,开启新的篇章。愿,所有人尽人之所不能而达。
——2017 思特沃克暑期训练营前
Day 1
期待了这么久的特训营今天终于要正式开营了。早上六点起床,锻炼半个小时回寝室整理一下,七点准时跟同学一起出发,八点半左右到达教室。
早上九点,华师的老师跟思特沃克的老师都讲了话。让我感触很深的是火种这个词,感谢老师们提供这样的机会用心教我们成为火种,我也希望自己可以不负所望。
然后正式开始讲课,今天是来自台湾的美女老师以工作坊的形式来带领我们进行设计思维的锻炼,我觉得我今天的收获在于:
- 对设计流程的大致了解
- 在跟用户群体交流的时候,应该引导他去说出他的故事,从他的用户故事中,我们可以获得他好的经验和不佳的体验
- 通过整个团队一起的合作,一起出点子来分析用户故事里痛点的根源和他真正需要的东西
Day 2
今天六点十分左右起床,依旧锻炼半个小时回寝室简单梳洗,七点半出发。
今天九点半开始上课,今天继续针对昨天的目标用户给出了点子(想法)来解决在他们身上发现的问题。
今天的协作中,leader 带领我们做的头脑风暴很有趣,我应变能力可能不是很强,有两轮没有出点子。今天所有队员都很投入,都尽力去为团队出点子,最后我们也完成了一个让自己与目标用户比较满意的结果。
我很喜欢一个团队可以这样和谐,高效而且都很投入地去朝着一个目标奋斗,很感谢有机会跟这么靠谱的团队去经历一次如此 nice 的体验,很喜欢最后得出来的成果被认可,很享受付出与收获的过程。也很感慨为何思特沃克会有如此高的敏捷开发效率。
Day 3
今天跟往常一样,早上在六点半左右自然醒,绕学校跑一圈,回寝室清洗。今天的课程内容是去参观思特沃克武汉办公室,行程安排在下午。所以今天上午帮一位朋友做了一些力所能及的工作。
下午的参观主要是介绍思特沃克跟体验思特沃克的敏捷实践。我之前对思特沃克有过比较长时间的了解,也参加过几次思特沃克的活动,对敏捷也有自己的想法跟思考,很推崇也很向往思特沃克的团队气氛与敏捷实践方法。可能我觉得敏捷思想中最重要的点在于对变化的及时响应。
总的来说,今天的体验让我更加想去加入思特沃克,同时更加能引发我对软件工程实践的思考。软件的工程思想最初主要借鉴于工业时代较成熟的工程体系。现在思特沃克让我越来越觉得极限与敏捷这种不同于传统工程体系的思想可能是更适合于软件领域的工程化思想,越来越成为行业的主流也越来越使软件开发显得成熟。
Day 4
今天六点准时起床,慢跑一圈,然后洗漱。九点左右到教室上课。
今天的课程相当于软件开发的需求分析、需求整理,我们通过分析一个博客系统的需求来体验软件产品的初步谋划与设计。
首先我们需要通过访谈的形式去从老板与客户那里获取信息,然后我们会对获取到的信息进行分析整理得出 user journey(用户之旅)。顺带一提,这里我觉得所谓的 user journey 应该是所有流程中最重要的环节,每一条用户之旅是在用 given–when–then 的形式去描述(在什么场景下,给用户一个条件,用户可以去实现什么,对用户来说实现的价值)某个功能具体解决用户的问题。开始我们自己去列出 user journey 的时候没有很好的理解用户之旅的思维模式,总会跳到软件实现上,这样的问题是软件是站在开发者的角度,并没有去按照用户的要求去解决用户的问题。
后面,我们根据 user journey 来画出 paper prototype(纸面原型),类似于软件原型图,这个过程我们进行的比较顺利。
最后的步骤就是分析出实体之间的关系(E–R 图),这个过程让我更加深刻地认识了数据建模的技巧与流程,开始具备设计简单数据库的思路。
Day 5
今天醒后发现在下雨,没有运动,七点起床,洗漱出发,九点左右到达教室,在教室整理了前一天的笔记。
跟昨天一样,今天依然是软件开发前期的设计,题目是电商网站。今天的需求是会改变的,所以我们组的想法是先将软件的主要功能实现,可完成基本的交易,并尽量使它便于扩展。后面指导老师更改需求之后应对起来也比较方便。
今天相对于昨天所学到的东西在于面对变化的需求时应该怎样去扩展,又如何去设计耦合度较低的实体关系灵活应对需求频繁变化的软件开发。我觉得此时在功能的选择上应该谨慎,应该像大树一样,「树干根基」应该简而稳。然后面对新的需求,先分析清楚新需求与老系统之间的联系点,新的需求尽量独立去设计然后整合。
细节方面,讨论实体间的关系时,我们会经常遇到类似进货单与进货单上的商品列表这种一对多的关系,解决方案是创建关系实体来建立他们的联系,通过这种方式将多维数据拆分为二维表存储。
最后老师留了一个扩展性的题目,团购,放假这两天回去好好想想……
Day 6
今天六点起床,喝了一杯轻清茶,入厕。把衣服放进洗衣机,绕学校慢跑一圈,吃早饭,回来收晾衣服,洗漱。七点十分出发,八点半多一点到教室。
今天继续上一周的电商项目,上午我们讨论了周末的作业——团购。我们小组的系统模块之间的关系理得还算清晰,加入团购模块的时候并不是很难,讨论清楚了实体间的关系,很容易整理完了需求。
之后,我们老板给我们增加了财务管理需求,我们才发现系统突然变得乱而复杂,我这种脑子转得慢的也不太理解财务统计的就有点晕了,财务跟整个系统中的诸多模块都有关系,我们要记录、统计的数据也不具体清晰,所以我们需要给系统划分模块,更有组员提出重构系统,到最后,财务模块也没整出个所以然来。到晚上,我痛定思痛,我们的系统模块划分与实体关系仍然存在问题,软件的体系仍然不够健壮,加入的新需求跟什么模块都相关的时候不能提供合适的接口,这些问题可能是明天我们应该重点思考的地方。
Day 7
今天六点七分起床,洗脸刷牙,喝了一杯温水。绕学校慢跑一圈到东门口吃早饭,回寝室清洗换衣。出发,九点左右到达教室。
前面几天我们训练了三天的业务系统的(大多数企业所做的管理系统,主要与财会相关)需求设计分析。当分析业务系统的时候,其中的逻辑大家都能够想明白,也能想到如何去表述业务逻辑流程,只有在不断地增加需求模块的时候,会出现理不顺的情况,后面通过老师介绍的四色建模与模块划分两种方法,可以使系统更便于分析、理解。
今天在接触领域系统(考试学习系统)的时候,由于我们并不是很清楚教育领域的运作,所以就会出现思维断层,不知如何是好,没有思路与方向,就算我们最后按照自己的思路实现了一套系统,其结果与给出需求的客户(老板)仍然是大相径庭的,所以在分析专业领域的软件,我们可能需要领域内的精英来指导或者去体验领域内部的运作流程。
Day 8
今天五点半起床,锻炼一个小时,吃完早饭回寝室清洗,七点半左右出发,九点到达教室。
今天一天都在为配置环境的问题折腾电脑,需要装 Linux 系统使用 Docker,朋友教我装了双系统,稍微熟悉了 Linux 的使用,装了一些需要的软件。
老师今天给我们讲了成为一个真正的软件开发大牛需要具备的三个维度的知识方向,具体的词汇我不太记得了,按照我的理解:1. 程序流程:人得知道程序是如何运行的,什么样的顺序以及在什么条件下程序在做什么,类似于站在程序的角度来思考问题。2. 系统维度:程序在运行起来的时候,整个环境是分为很多节点的,我们需要明白节点之间的关系,哪个节点包含哪个节点,哪个节点又依赖哪个节点,哪些节点协作,哪些节点互斥……3. 操作维度:这个大概是最简单理解的,就是实践,就是尝试,俗话说实践出真知,创新就以实践为基础,再依据前面两个维度的知识所得出的思考。
欢迎交流
如果你觉得文章有帮助,欢迎加我微信或关注公众号,获取更多内容

