U老师会原谅我拿他的话当标题的吧.
这怎么不算一种田野调查.
1
我离职啦!!比较突然,也不在计划内.
最近这段日子被狗工作折磨得二次元灵魂都稀出了,天啊,上次更新(创作)是三月?
…我考大学都没停更这么久(远目).
哈哈.
感情和感想一句话总结不出来.
之前关于工作的时候从来没有细谈过.
昨天最后一天,部门的老大哥叫我自己写写经历总结.那我们慢慢道来吧.
2
我入职的是银行内部的一个小技术部门.
银行其他的员工会经常需要比如,制作很多的报表,更改读取很多的账号信息,追踪员工用scheduler以及自动运行项目的结果.
这个部门会制作microsoft office为中心的小软件来帮助如此的操作.
我入职的这段时间分别经历了部门老板的更替,小组老板的更替,人事老板的更替.
这个我们之后分别细说.
从一开始第一位招我入职的小组老板,以下简称摸鱼老板,开始.
最初的入职是pair up(shadowing) with其他的同事.帮忙debug,搜索搜素feature开始的.
以下timeline.
老大哥’s scraping tool.
给老大哥的数据库加的简易爬虫.
老大哥自己有一个access数据table,公司有个网页版本的数据(Book of records)(老大哥的table是一个子集).
阅览室有记载,就是最初的做的tool.
关于这个项目:
网页scraping非常的不稳定,如果有时间需要测试出所有可能意外跳转的网页(登陆失败等).
所以至少write error handler / try function.以及Timeout function.
这个小featrue甚至没有测试,只能直接问老大哥能不能用.他说可以,就没有然后了.
Data usage report generator.
也是给老大哥做的.老大哥管部门工具(产品)的governance,需要对比每个工具所存储的数据.
摸鱼老板跟老大哥关系很好,他们商量了个雏形和算法来读取数据,叫我把工具做做好.伏笔之在韩国美女大老板时代之前,业绩和工作的发配十分的随意.
关于这个项目:
算法非常的不智能,摸鱼老板的雏形是:
read from column name.
如果包括一些重要的key words,比如”name”.可能是employee name或者customer name.
所以此列数据被划分为confidential.
但可能也是一些无关紧要的name.read from first row of data.
包括datatype(access自带function).以及如果是9位(社保号)或者16位(信用卡)会标注成需要特别关照的类型.
好的反思.
我写了什么东西,我写了很多fancy小垃圾.什么整理结果的快捷键.增添临时新规则(当时想让老板开心).
最后发现把摸鱼老板的算法写写好(源头)才是更有帮助的.
比如更好的计划base on column name的算法.
和读取第一行以外的数据(因为有时第一行没有数据但其他的会有).
关于算法的源头.
虽然知道算法本身是摸鱼老板给我的.我花了很多时间才拿到手一个pdf文档写着更详细的对于数据重要层级的定义和分类(public/internal/confidential/restricted).需要早一点拿到如此的信息.
就是需要从头开始理解在做的活.
Employee info finder.
也是摸鱼老板做了一半叫我做个frontend的小东西.起因是老板了解到组里一位转过来的大哥知道公司其他用来储存员工信息的库.觉得很棒很想要.就跑个API,叫我把隔壁组技术大牛老板做的前端模版给套上,做的fancy点.噢,这个技术大牛老板和他的前端模版也有故事,伏笔一下.
关于这个项目:
之前shadowing的时候也有接触到一些这个前端模版,这算是第一次把模版所有的代码都走了一遍用上.
我,没有100%的用好 这个模版.
回想这也是大学时代遗留的老毛病了.
我的天性是80%分数的人.总是少许漏点少点.
但代码这种东西,如果不是100%的理解,就会出错.
(好吧,有些像JavaScript那样的语言容错可能会高些但代码by definition不可以这样处理的.我是这个意思.)
撒!回想起来吧!246的第一个作业!
Unix写的程序output比对程序!将要用在所有246其他作业自查时使用的output比对程序!
如果不写得正确就无法进行所有之后的学习的工具!
撒!回想起来吧!滑铁卢的亡灵!学术严肃的敬畏!
~It will always haunts you if you do something dumb.~
Where were we.
Dashboard.
这四舍五入算是第一个经历完整程序的项目.是技术老板几年前经手且暂停的项目,留到我们组再起.
基本框架是被搭好的.
使用access内的代码读取公司网站某个组的数据,做相应的计算,并存储到access的table中.再搭建一个公司网站接受access的数据并定期更新.方便user的组内对照查看.
关于这个项目:
定期更新使用的是部门的robot用电脑.设定每15分钟trigger的scheduler并更新数据.
那时候非常的依靠摸鱼老板.
部门的robot并没有规范化的管理.如果遇到问题,是摸鱼老板自己前往,或者使用私人关系拜托其地点的同事帮忙查看的.直到最后我都不知道那个robot在哪里.
还有个问题是…
为了做历史数据对比,工具需要储存很多的数据.而且工具本身是时常更新的.
首先做了frontend和backend的分割…使用两个access file link to each other. Frontend只跑代码,backend存储数据.
这是好的practice,但…前端的file还是时不时会报错.
我可能在前端存储了有点多的东西…或者文件本身经不起这样常年频繁的书写.
时常会把frontend做一份copy,使用copy版本.
到这个时候韩国美女大老板来临了,有那么点符合韩国人刻板印象,是位精英卷王女性.打破了白人世界的快活度日生活.
业绩与工作的发配不同,死线也更加可怕,所以记得了日期(靠).
Mar 18 - Apr 10.
Mainframe scraping tool.
这是第一个独立的项目了.是一个rebuild.
Mainframe是各个银行使用的关于各种重要银行客户信息的…平台?软件?或者说大动脉.
项目的要求是把用户组以前使用的快捷键macro给替换掉,使用我们部门support的vba scraping流程.
说起这个项目…一共有17个快捷键macro被要求rebuild.跟我们对接的用户(business)并没有很熟悉所有的macro.
甚至可能…不是很快接受tech.
关于这个项目:
在17个macro中有些会处理confidential信息,要求工具导出的文件有密码保护.
于是原先的设计是output -> password protected excel.
但之后因为部门信息安全的原因,这部分macro功能被移除了.所有output不会处理confidential的内容.
其中有一个功能甚至用户只需要工具上显示的结果,但是为了复制黏贴,必须先下载带密码的导出excel,才能复制.
发布工具后才知道用户会这么做真的太蠢了orz… 但是并没有提前商量过.
因为把导出和重建的macro给分开来看了.从没知道过用户真正的workflow.
还有一件事.
在很久之后,听到用户抱怨新建的工具比原先的快.
以前同组的粤语大哥跟我讲他拿工具跑了几遍,觉得做validation的地方太多了.
(每次切换屏幕时,我会读取屏幕类似标题的地方,确定跳转到正确的屏幕才进行下一步的动作.)
如果这么说…也许是.但用户之前跑的macro实在太裸奔了,少许的validation我觉得还是需要的.
May 04 - May 29.
Intake form
这是一个简易问卷式email generator.
能感觉到自从韩国大老板空降后,摸鱼老板跟不上大老板的工作强度.
在最初跟用户会议时,老板完全忘记了会议,我做了快速的小demo介绍概念,让用户开心.
救了老板一程后因为项目的安排,intake form交接给了同事,结果快一个月后开会时老板还记成我在管这个项目.
然后又在这个过程中,摸鱼老板被公司当作的缩水指标给裁了.换老板(组长)后项目兜兜转转我还是写了一半.
关于这个项目:
我们对接的用户也是位不怎么tech的人.不过好在比较热心,比较愿意沟通,会提很多诚实的想法.
其中有一个功能,我比较想当然了设计了:
如果用户选择A: 输入信息.
如果用户选择B: 用户不需要信息.
然后反馈有些用户会输入信息后选择B.
(执手相看泪眼gif.)
我他妈,我在用户选择B时会把输入框给锁住还变成灰色,怎么看都有种“这个field不会被读取”的感觉在吧??
因为怕用户会反悔重新选择A,所以没有把已经输入的信息清除.
⬆这样的想法是很危险的.假设用户的bahavior是很危险的.⬆
对接的用户提议如果用户输入信息,overwrite 用户在A和B中做出的选项.
(竟无语凝噎gif.)
这他妈不是更危险了吗.那我怎么知道用户输入的东西是真的该读取的还是瞎几把输了奇怪的东西.
然后我们一起读了边被审批后的文档后发现无法加入warning message.没法更好的设计这个feature.
说起来,进行到跟用户讨论AB选项的时候,二代目新新组长已经很累了.他开始回复他妈的算了就这样改吧于是我们改了.
操蛋的部门流程是这样的.
BA开始进行需求收集,整理成文档后交给工具的business owner和组长审批.
批准后我们开始开发.
测试也同样写测试文档交给business owner,我们的组长和测试组组长审批,再进行测试.
最后工具发布,有30天的保修期(warranty period).
流程中是没有pilot(试用版)的.用户提完要求,再见面是拿到工具直接用了.
成熟的BA会在中途book一个demo time.收集一下用户的看法和意见.
所经历的其他BA完全没有这个意识.
于是遇到了很多次困难.
最头疼的是到保修期后,发现操作一塌糊涂,而做为程序又必须要服从需求文档.
我们讲到哪了,是不是快讲到我离职的原因了.再给我点耐心把最后的这两个说完吧.
Jun 10 - Aug 22.
Comment generator
当这个项目开始的时候,BA(Business Analyst),我,测试和二代目组长都没有想到有战线有那么长.
这是个旧工具重做.
是个定义上来说非常简单的工具,用户输入手上的客户信息,生成一条很长的信息整理string,然后复制黏贴到其他的工具中去.
关于这个项目:
但是问题是…这个客户信息的输入,有一百万个互相影响的条件(condition).
比如,如果客户购买的产品是特定类,那产品绑定的优惠条款选项会有所变化.
最复杂的条件有六七八条前置选项. 类似于要召唤狼人得在满月之夜准备特定特定的祭品的感觉.
而一共有10种comment需要制作.10种中有重复的输入项目,但它们自带的条件又是不同的.
救命.
第一眼看旧工具demo的时候它是如此的人畜无害.
许多年之后,里约热内卢将会回想起,他犯下的第一个错误的那个遥远的下午.
真的把我knock out的.
明明是关键点的comment generator的逻辑 - 真正如何把输入信息转化成string的逻辑.
交接的用户表示是否可以直接照搬旧工具,BA问我.
我说只要逻辑在工具里的话就可以吧.
不可以.
真的不可以.
许多年之后,里约热内卢将会回想起,他犯下的第一百个错误的那个遥远的下午.
一来本来就不该照搬逻辑,需要有类似的文书记载清楚.不然测试也没法测.
二来为什么不先尝试着把逻辑整理看看再去开会呢阿约.
说回这个项目,为赶时间写的很草率.也一边参加BA组织的需求会议时一边开始准备写.
最近在看游戏编程相关的书,才意识到.
“写一些demo用之后会扔掉的代码再重新设计是可以的啊”.
在写这个项目时像是玩Jenga.走一步拼一步.
先把大框架搭好了,然后发现的一百万个condition就加了一百个function来帮忙.
后来反思…隔壁组的方式会写成,每个section放在不同的js file中.
包括,print(add), remove, clean, validate, generate output等.
然后10种comment会写成10种mode, 不同的js file cooperate不同的mode.
如果提前准备把其中一种comment的逻辑写完,再回到修改solution design会好很多.
顺便一提solution design一种是flow chart,这个我还会写写.一种是screen mock up,完全没画过.
技术老板的模版这几年是部门的关键组件.
还是后来才知道的.
摸鱼老板原先是技术老板的上司,摸鱼老板吹捧员工的能力是一流的.
当时技术老板已经开始研究前端模版,摸鱼老板大吹大捧,技术老板把自己觉得没写完的部分交上去了.
小插曲.
后来在今年上半年的时候,技术老板写不完,前端模版2.0的任务被分到了我们组.
同事充当tech lead的位置,我们组每人分几个部件把东西写完了.
之后拿模版2.0写工具时,发现了不少bug.分别给lead的同事反馈review,以为能一起精进精进.至少我们手里的模版2.0让它更稳定的能用.
刚开始做雏形的时候,韩国大老板开始组织部门内产品show case.
看到技术大哥组的工具用了一个好看的前端模版道具,私下去问开发小哥是那块代码.
结果一看,人已经更新迭代了版本,根本没在用2.0.
人一直在用1.0和对我们来说的3.0.
2.0除了刚开始因为包含了很多bug把其他同事的项目时间线给搞砸以外有什么帮助吗?我不知道.
后来摸鱼老板离职后,阿约的人事老板变成了技术老板.组提拔了一位技术老板组来的兄弟,二代目,因为没有人事权利,只能称为组长.
跟人事老板每周有半小时面谈时间(one on one)来做各种报告等.
约就跟技术老板提了要不要考虑把前端模版开源一下,在部门内开源一下.
有人有空了就提交一些新feature,然后做review看要不要merge之类的.
技术老板当时还挺喜欢这个想法的.但也讲起了这个历史是,当年建造的时候,就组内几个人小讨论一下就建了.
就建了.
现在的版本(3.0)基本是为手上的项目能使用而制作到勉强跑起来的程度.
约哽住了.那的确明白你为什么不把半成品给公开了.
问题是下游的兄弟们.
哦吼,说到这里飞老师看到肯定会笑.
约也问过技术老板我们部门如何做code merge.回答是没办法只能手动标注更改地方然后跟同事人对人进行merge.
我们部门甚至没有一个notepad++的compare文件插件.
(约甚至写邮件给大老板提过插件的事,no response as expected.)
顺便一提我们部门的unix使用基本是block的.
在这样的情况下,能有一个方便使用方便更新的类-repo,我不知道有什么好办法.
所以问题是下游的兄弟们,自己给模版de个bug,或者加一个常用feature,你上游模版一改全部木大.
不过约之后自己忙昏头后也没跟技术老板继续提这件事了.
然后就是命运中的项目了.
Jun 16 - Jun 28.
Calculator.
这是一个onboarding项目,就是把其他部门的工具注册整理文档,然后登记在我们名下并进行维护.
当这个项目开始的时候,BA,我,测试和二代目老板都没有想到这是个定时炸弹.(再放送.)
你相信因果吗?
约最初招进部门的时候,就是替一个正准备去其他部门的大哥的位置.也是约的面试人之一,也是这个项目的开发者.
约拿到这个calculator的时候,看到一些奇怪的东西,因为思维惯性,觉得大哥这样做必有其深意.
没有.
不是的.
因为有疑惑,约拿着工具去找技术老板谈了,老板回了一句“用户期待着些什么”.
好问题.
那我怎么办?
关于这个项目:
最初跟组长商量,同意没有时间重做旧工具,所以只写文档.
这是一个分享在公司共享网页上的excel文件.
Excel可以用form做frontend,但是数据也写在了excel里面.
就是说,去掉花哨的前端,有一群用户在时不时,可能也是同时,在编辑同一份文件.
大哥在文档中写了可以支持多人打开文件.
不要相信文档.
相信自己的担忧!!
约阅读的代码,包括代码中的一些设计了但没用上.文档中说拥有的feature但没有能运行到.
虽然有顾虑,也全写进了文档交给组长批准了.
直到出现了很严重的数据丢失.
这时候约才回味过来.
原来当年面试我的两位前辈(摸鱼老板和大哥),技术上不大行啊.
当时也没有经验的支持,时间的余裕,甚至勇气来相信.这个工具重做比onboard好.
约只是个低层合同工,真的有权力(没有证据地)把项目中途叫停吗.
约在公司先把项目整理完打了草稿,再回家写的回忆录.
这条项目草稿写的是:
- Trust your worries. Talk to people.
- If your lead does not work, maybe talk to business lead, or even higher.
- Again, if let stupid things happen, it will get back to you.
也许还有一系列的缺少沟通.数据丢失后,据二代目组长所说跟我们对接的用户(等级是老板的老板)把部门给投诉了.
为了补救组长追着我(在我被隔壁技术老板借走的时候)说要改成支持多用户编辑.
我:?你在想什么.
组长:什么时候做得出来.
我:?我都不知道能不能做到.
我们掰头了小半小时他才意识到这他妈就是个excel文档,然后在我面前情绪崩溃了一次.
据说人在绝望的时候是会笑出来的.约在崩溃的组长面前(关了麦克风)笑的很开心.
如果未来的约忘记了为什么数据丢失.
是merge error(想也是哦),导致有一份merge失败的数据一直藏在某位用户的本地excel缓存中.
两个月后啪一下把云端的文档overwrite了.
正好发生在我们组在做测试的时候,对接的大老板误以为是我们的错了.
3
老大哥是个很纯粹的人.至少他展现给我的一面是很纯粹的.
他提醒我回忆过去的时候多看看好的方面.
老大哥在我的就职最后一天特地来公司,讲了过去生涯中让他觉得骄傲的地方.
有几个我记得清楚.
在过去还没有accessibility的说法.也就是帮助比如失去视力,无法使用鼠标的人群定制的软件便利标准.
老大哥那时候在建造公司入职.公司里有一位逃过了二战集中营,但也因此失去了部分手指的老员工.
其他员工都能飞速的打字,而那位老员工只能用残存的半段手指们一个一个戳得键盘.
老大哥的工作是制作使用的软件.
这时候问题来了,有一位害怕失去工作的老员工,和一位要给所有人做软件的年轻人.
年轻人会怎么做呢.
老大哥耍了个去他的鬼脸.
但他跟老员工坐下来一个一个设计和测试快捷键.
需要录入木材的长宽高,输入第一个信息的长度后,设计了使用快捷键跳出新窗口来选择常见的宽与高.
然后新程序上线的第一天,大家到达工位,开始噼里啪啦敲起键盘.
然后!打印机开始响了.
第一个把文档完成打印的是谁呢.
老大哥认真的把结尾讲完.
是那位手指不全的老员工.
这件事他记得很清,因为这是私人的(personal).
还有一个故事,是关于他自己的.
那是一个相当成功的项目.老大哥说从没见过这么成功的项目.
从开始开发到上线,一整个公司的大系统只花了六个月就完成了.完成的非常好.
为什么能做的这么好呢.因为在开发阶段前,BA花了两年六个月来制作需求文档.
两年六个月?
所以所有的软件该是什么样子的文档都详详细细地写好了.
但是就算是这样,老大哥还是觉得文档有个地方讲的不对.
那么问题来了,花了两年六个月的人和你区区一个开发人员谁懂得更多?
老大哥took a risk.他带着文档去见了VP(副总).
花了好好的时间解释给了VP听,VP同意了老大哥的观点.
直到软件快要上线的时候,出现了很大的问题.(是什么问题老大哥没有说.)
老大哥带着打印的修改版本的需求去了会议室.
老大哥走上去,看到是旧版本的需求,把带来的新需求放上去.
高层们一看.
VP也明白了老大哥一开始想要解决的就是这个.
很大的问题就这样解决了.
一起吃饭的BA姐姐讲,一般人是不会直接去找VP的.
老大哥说有时是需要一些勇气.
老大哥讲时间是一种不会回来的东西,需要好好使用它.
老大哥早年的时候也经常当合同工换工作.
好处是每几年换一次工作,新的东西永远不会让人腻.而知识是通用的.
如果没有结婚,没有孩子,到什么地方都可以去.这样像赏金猎人一样的人生也是很有意思的.
在银行有个传统是会纪念入职年数.不少员工,特别是当上管理层的,入职年数都是十年往上.
有人是这样活过一生的吗.
老大哥的话倒是回想起了一些在身体内少少消失的东西.
赏金猎人般的人生…对于我这样的东亚女性,说实话憧憬且奢侈.
4
在这里的两年,看到了很多不同的人.
像在生存目的完全开放的大广场人流中,随机撞到的人一起每日相处八小时.
对我来说是在给加拿大政府证明价值,有人来是提前苟退休,有人在为未来小窝贷款搏命一赌.
很不同,很不同.
当处在那个环境中的时候(进行时),时常会感觉刺痛.
因为工作逻辑跟做事逻辑是不同的.
工作是做事,但同时也是做为表演正在做事的演员.
而做为合格的员工演员,逻辑是”keep you busy”.
(题外话这次的离职除了倒霉地被夹在二代目组长和技术老板之间外,也是因为我没有很好的表演出我的价值.)
如果我把自己的做自己项目的做事逻辑带到工作中去,排异反应非常的激烈.
会感觉为数不多的乐趣都被打破.
特别是看到完全丧失主观能动性的老员工,人如果变成那样会很绝望.
想讨论新工具的带来的便利时,老板在讨论责任.
以为能有好东西用了,只是个发起者暂时应付上面拿业绩的东西.
也许是…也许是自己家庭背景是经商的.看到过因为做事而收获的钱,再来看为他人工作的出演费.
会觉得有点,苦涩.
5
我们聊些什么好呢.
这次是被告知离职的,被告知之后给了一周时间,用来偷懒也好交接也好.
这一周内收到的好意过于的多了.甚至到了…被动还挺幸运的程度.
诶呀,我明明是这里的叛徒呀.
夏天之前公司举办员工感谢日,在露天的停车场搭了Shelter tent,邀请了打碟DJ.
风吹打着的塑料桌布,在那压上排队取得的免费食物.
从80s到现代的音乐像轰鸣一样埋没着耳道,也覆盖掉跟身旁同事开启客套聊天的动机.
零零散散的人围着桌就这样伴着音乐,无言着吃着饭.
也许所有人都是叛徒.
那聚在这里一起演戏好厉害的.
为什么要演各种社交礼仪的戏哦.
部门的传统会庆祝婚礼,出产,晋升.
在部门的月度大会上po出结婚照片,发送新生儿照片的庆祝邮件,以及收集签名的手写贺卡.
好重.
可喜可贺可悲可叹的,二代目组长也给我准备了一份.
他妈的,以为中午请我吃份饭再送捧花就结束了.
下午准备了个蛋糕在厨房逮我.
还好那时我不在工位错过了最初的邀请,同事来找我时一不小心说漏嘴了.
约用运行速度堪比windows xp的大脑思考.
如果被牵着去厨房演完哇~~~好惊喜呀~~~的流程比起离职更想离世.
如果直接跑路回家那对准备了这舞台的同事们也不公.
约走在邀请的同事后面,脱了队,绕去厨房侧门.侧头一看组长和测试大哥们在正门闲聊呢.
他妈的真在.
下意识想打破一下这该死的气氛.
趁他们反应过来前,约全力快速冲刺急停到了大哥们的面前:听说有蛋糕.
6
很照顾我的,十六岁少女的爹也跟我小谈了一下人生.
大哥说叫我做好心理准备.
无论最后去那里,如何决定生活.肯定做出牺牲.无论是牺牲时间,梦想,热爱都要做好觉悟.
加拿大也不是一定能实现梦想的地方.
国内也不是活不下去.
问题是牺牲什么.
虽然人也不一定能完全决定自己牺牲的东西.
巨大的什么一直在吞噬.
果然有些东西是不可以放手的.
就算是身体告诉自己的疼痛还是甜腻烂土豆般的坏境都不该.
当安静回来时,会回到最初就相信的那边.
下周开始离职的后劲还会起来,会更困难,得努力.