《理科生的人生设计指南》

前阵子压抑繁忙没有看书,昨天终于有空把这本搁置很久的书翻完。作者是日本庆义塾大学的教授,他的经历作为有志于走学术道路的本科生博士生的职业规划很有益。

即使不读博士不做教授,还是有不少可以借鉴的地方:

提前规划

走学术研究的道路,一个重要的目标是取得教授职称,这需要提前规划,长期执行;
走学术研究的道路,薪资基本是透明的,养5个孩子似乎是不够的。如果提前规划,有计划地开源节流,也可以达到财务自由的状态。
就最近找工作的经历来看,提前一年了解行情并优化经历和技能的同学取得的结果是最佳的。如果想从事别的行业的工作,提前找目标行业实习、哪怕是打杂,最后找到的工作也会比随波逐流混在自己的对口专业更理想。

愿望要说出来

作者说,如果要当教授,一定要大声说出来,让自己和身边的人都听到。对于一个博士毕业的青年教师来说,评上教授是很困难的。但是如果说出来,身边人会在有机会的情况下给予帮助或者建议;更重要的是,说出来也给自己带来心理暗示,把目标提上日程,时时努力去逼近它。
这和前阵子看的《秘密》一书有些像,那本书说愿望需要用力地去想,在心中使之具象化,全宇宙的神秘力量就帮助你实现它。当然这本书风评较差(太神棍,不讲道理……),但是勇敢地去接近愿望总比害怕失败要好。

幸运的人会更幸运

成功的重要因素之一是幸运,确切地说是觉得自己幸运。觉得自己幸运的人会对周围的人抱有感恩之心,能帮助别人时总是愿意帮助别人;同时自觉幸运的人也会更乐观。还是就最近找工作的体验来说,至少面试中保持乐观是面试成功的重要一环……

高速运动的咖啡豆

从进大学开始喝咖啡变成习惯,从速溶灌装的升级到自己买咖啡豆研磨后自制咖啡。

经常碰到有人问“卡布奇诺算不算好咖啡”这样的问题,这是一个很难用是或者不是回答的问题,因为这个问法不太对。

先介绍下咖啡豆的分类。大致分为两种,罗布斯塔豆和阿拉比卡豆。前者廉价后者贵,后者又可以细分为好多好多品目。

首先我把咖啡饮品分成三类,一种是速溶咖啡或者灌装咖啡,有奶有糖有咖啡味就对了。从咖啡豆种类上说这通常是罗布斯塔豆,比较廉价(好豆子做成灌装的味道估计也差不多,浪费了)。

第二种是拿铁、卡布奇诺、espresso等等,这些都是以espresso为基础只做的意式咖啡(espresso除外,其他可以叫花式咖啡),而espresso是意式咖啡机通过高温高压只做的浓缩咖啡。制作意式咖啡的咖啡豆通常是多种咖啡豆混合的,里面有罗布斯塔豆也有阿拉比卡豆,称为拼配。各家咖啡店可能都有自己的配方,理论上有独特的风味。现在也有单一种类咖啡豆作的espresso,成为SOE(Single Origin Espresso)。

第三种是单品咖啡,也就是一种豆子只做的咖啡,比如耶加、曼特宁等等,传奇的蓝山也是其中之一,这些都是阿拉比卡豆。当然罗布斯塔豆做的也叫单品咖啡,味道有点类似大麦茶;此外传奇的猫屎咖啡也是印尼的麝香猫吃了罗布斯塔豆拉出来的……喝单品咖啡通常是去品味这种豆子自身的风味,当然烘焙过程也参与了风味的塑造。制作方式很多,最简单的是法压壶,跟一种常见的泡茶壶有些类似,用金属网滤掉咖啡渣就可以喝了,不过法压终究会有一些残留的咖啡渣;手冲咖啡,这就是各种“精品咖啡”的主打了;虹吸壶,一套很神棍的玻璃设备,原理就是虹吸。

上面的分类并不非常完整,还有些咖啡制作方式比较独特。比如越南咖啡,本身也有一套设备,但通常是指用越南壶只做后加入炼乳的咖啡;还有摩卡壶,虽然是比较简单的家用咖啡壶,但也是意式咖啡的雏形,利用到了高压。

最后再回来说说咖啡豆,优质的阿拉比卡豆要求高海拔、高温等环境,所以集中在赤道附近,那一带也可以叫咖啡带。如果要用一个标准评判咖啡豆的好坏,那就是绕着地轴高速运动的就是好豆子。

慢跑

昨天小跑了3公里,今天大腿肌肉有点酸痛,而春节前一阵子我一般可以跑个10公里也不会太累,这就是训练量导致的差别吧。

高中和本科期间我慢跑耐力都挺差的,跑五百米就喘得不行,所以难以想象马拉松是怎么回事。读研后自由时间多了些,偶尔会跑跑步,但还是跑一段就感觉喘不过气,强行跑三公里一度就是极限了。直到有一天我发现了慢跑的秘诀——那就是慢……觉得喘不过气就深呼吸几口气,减慢速度,很快就可以继续下去。

所以对跑步的信心逐渐增强,不过马上遇到了第二个问题,就是关节容易受伤,有时跑到五公里后髋关节就开始疼痛,或者膝盖无法伸直,需要休息一周才能回复正常。去医院被告知这就是关节炎。至今没搞明白怎么避免关节炎,也许与跑步姿势有关,但是自己跑又没人录像,所以难以知道自己跑步姿态有什么问题。所以只能控制跑量,感觉到轻微疼痛就停止跑步,用骑车等其他有氧运动代替一阵子。所以跑步的第二个秘诀就是想法设法避免受伤。

一阵子不跑再恢复运动一般会受限于心肺能力,所以跑个三五公里也就到头了,但是这足以让肌肉酸痛起来。网上搜索一下就知道这是乳酸作怪,也就是运动过量进入无氧运动状态产生了乳酸并堆积。不用管,几天就会好。不过想快些好的话也有办法,就是继续运动。有些反直觉,它的原理是有氧运动能更快的消耗乳酸,所以只要保证不再进入无氧状态,轻微的运动能更快地让人摆脱肌肉酸痛。理论归理论,我并没有类似的体验,一般忍者疼多跑几天也就适应了。

跑步益处还挺多的,强身健体之类的慢性益处就不敢说了,最直观的就是跑完后的畅快感和完成感。

番茄工作法

番茄工作法是一种GTD(Getting Things Done)实施技术。具体做法是设定一个15分钟的计时器,在此期间只做一件手头的事,不分心做别的。就我的个人经验看,番茄工作法结合任务列表在任务千头万绪的时候很管用。

首先,番茄工作法是对任务的拆分。将目标从“完成某事”,暂时更改为“15分钟内集中精力做一件事”。前者是一个有失败概率的大任务,而后者是一个不可能失败的简单任务。所以进行中几乎没有心理压力。

其次,工作是一个良性循环,顺利完成一部分工作会更有信心(或许是暂时)摆脱拖延症,加速工作节奏。

另外,番茄工作法使得工作量具体化。只要数数自己完成了几个番茄,就知道自己集中精力工作了多久。而完成感带来多巴胺,稳定的番茄产出也是好心情的来源。

长远看,更重要的是番茄时间的记录对了解自己的工作效率很有参考价值。比如我看一篇水文大约是15分钟,写一篇博客大概30分钟。而对工作效率的认识是估算和安排工作量的依据。

并不是所有工作都适合番茄工作法。以个人经验看,琐碎、容易分心、承受失败焦虑和恐惧的任务最适合用番茄工作法拆分完成。这些工作涵盖了研究生的大部分工作:读论文、写报告、做PPT等;而码代码、较深入的阅读等就不太适合。

校招求职

从准备实习开始,电话面试和现场面试总加起来大概参加了20多场,职位包括三大类:软件开发、数据挖掘、量化投资。有顺利的地方也有坑,现在算是临近尾声了,写个小结。

准备简历

应届生没有工作经验,简历写的无非是参加过的项目/研究,以及实习经历。我自己做过小项目不少,包括各种比赛和实习,大一点的课程项目也算在内;论文发了一篇,在审的两篇,在写的一篇,不算少。但是简历上的每一条既是你的亮点,也可能坑了你。面试官会就着论文/项目问问你在这里面做了什么、学到什么。如何长篇累牍的项目经验最终证实没什么技术含量,或者对项目相关的技术一问三不知,基本就是坑了自己。所以选择项目往简历上写时需要预备好一场与面试官的交谈,确保能展示自己的强项(其实并不是掩盖弱项,因为没有展示的都可以默认为弱项)。

简历避免过长的篇幅。我之前的简历可能有两三页,根据上述的规则精简了大部分项目,同时把可有可无的三等奖学金、优秀学生去掉,合并到现在的一页。

笔试

大规模校招一般有笔试,笔试只是最基本的筛选方法。对于本专业对应的职位一般不会在笔试里就被筛掉。笔试的准备主要就是知识点,涵盖在面试的准备中。

面试着装

技术职位一般不要求正装,但是穿正装一般不会是减分项(除非面试表现非常糟糕,也许会给人以着装都不“在行”的感觉吧)。另外有时候HR会提醒需要着装整洁,对于什么风格算整洁没把握的话穿正装肯定不会错了。另外穿正装也有自我心理暗示的作用。总之利大于弊。

自我介绍

面试的第一步一定是自我介绍。除了姓名学校学历外,我一般直接开始说研究生期间做的研究工作(估计也不会有技术面试官想知道面试者业余兴趣)。这时候可以看看面试官脸色,因为毕竟大多数面试官从事的工作与研究没关系。如果面试官露出疑惑的表情,可以讲讲研究工作的应用层面,从普通人的角度阐述自己做了什么,大概是什么难度。如果面试官仍然提不起兴趣,干脆换个话题讲讲别的项目,或者自己为什么对这份工作有兴趣。

面试问答

我经历的面试主要是技术面试,问题来自两个方向:1)基础知识,包括数据结构算法,概率论,模式识别算法等等;2)简历内容,也就是你做过什么就问些什么。

对于基础知识,可以提前准备。读研三年不怎么写代码其实把数据结构都忘光了,但复习还是挺快的。推荐下《程序员面试金典》,对于复习或者学习数据结构都不错。刷leetcode太费时,而且题库本身并不能提供什么知识结构,除非初学数据结构并且有时间,否则不太值得去做。
概率论也是类似。
模式识别一般不太会要求什么都会。能熟悉一两个算法的推导,另外对大部分算法有了解就够了。

对于简历提及的项目,掌握程度也是你会什么面试官问什么,所以有所准备就可以。

上述是一些找工作的经验总结。其实经历过的人都有体会,还没经历过的人多少也能猜测一些。个人认为最重要的还是提前计划,比如我所了解最成功的应该是提前一年就确定目标还是不断准备的同学,并不是研究工作最成功,或者项目做得最好的。

面试数学题若干

回顾下面试中碰到的数学题

1、100!后缀上有多少个零?
热身题。看一百个数中的因子中2和5的数量,一个2和一个5构成一个结尾上的零。2比5多,所以看一百个书中有多少5的因子就是答案了。含因子5的有\(\frac{100}{5}\)个,另外有些数因子5的幂次(\(\frac{100}{25}\))。答案是20 + 4=24 。

2、假设生男生女概率相同,都是\(\frac{1}{2}\),一直两个小孩中有一个男孩,求另一个也是男孩的概率。
这题可以用贝叶斯做。更直观的思路是:男男、男女、女男概率相同,所以答案是\(\frac{1}{3}\)。

3、掷硬币,正反面出现的概率都是\(\frac{1}{2}\)。如果连续出现两次正面就终止。问终止时掷硬币次数的期望。
算期望的常规思路是假设次数,找次数的概率,概率对次数求和或者积分。但是这题很难算。思路是假设平均x次,找x自身的等式关系。
1) 第一次掷出反面,此时剩余次数期望为x
2)第一次掷出正面,有\(\frac{1}{2}\)概率还需1+x次,有\(\frac{1}{2}\)概率还需1次
因此\(x=\frac{1}{2}(1+x) + \frac{1}{4} 2 + \frac{1}{2} (1+x)\)
解出x=6次。

4、[0,1]上什么分布有最大方差?证明结论。
直观猜出结论是一个两点分布:\(\frac{1}{2}\)在0和1各自取值。
证明:
\(var(x) = E(x^2) – E(x)^2\),
因为\(x\in[0,1]\),所以\(x^x \leq x\),
所以\(var(x) = E(x^2) – E(x)^2 \leq E(x) – E(x)^2\)
后者极大值已经在上述结论中取到。

用天天P图制作color splash效果

下面这个特效见于《辛德勒名单》,同大幅黑白画面将观赏者注意力吸引到彩色的肥猫身上。这个特效通常可以用color splash这款app制作。但是color splash的问题是抠图太过麻烦,手指抠图的效果对目标边缘处理比较糟糕。今天尝试了用天天P图的抠图功能实现这个特效。

首先把图片导入color splash,获得全黑白版本。

结果就是这样,没任何难度,其实用别的app也可以:

然后打开天天P图,找到魔法抠图,导入原始彩色图片,选择任意模板:

魔法抠图使用了一些智能算法,对用户非常友好。抹两下就抠好了:

点击右箭头,到达这个界面。背景就是刚才选择的。在这里可以选择“自定义背景”,从相册里找到之前的黑白图片。
如果抠图时没有挪动过图片,那现在黄色肥猫应该正好覆盖在自己的黑白照片上。

保存图片,和color splash的效果相同,但是过程远远简单。忍不住马上再抠一张。


挽救糟糕的手机照相

之前用了小半年Nexus6,其拍照性能是灾难性的:打开相机要卡20秒到半分钟,照片各种噪点,照片灰暗。之后换了iPhone,相机是秒开,但是大多数时候照片仍是非常糟糕,所以手机P图是不可或缺的技能,发朋友圈之后修修图也是对朋友的尊重。

作为一个没啥审美观的人,简单研究了下各大P图软件(天天P图、美图秀秀、柚子相机,VSCO,Snapseed等等),我发现能基本掌握剪裁、调整亮度对比度色温,就处在朋友圈50%的照片水准之上了;如果还能抹掉一些坏点,基本可以处在前30%的位置。

前三项功能基本是个修图软件都有,后者目前只发现Snapseed最好用。下面以柚子相机和Snapseed为例,介绍以下怎么做出朋友圈里色泽金黄的早餐。

首先,原图长这样。它的问题在于没有阳光的感觉。没有阳光的早餐是不会被人承认的。

在柚子相机里打开照片,工具栏在最下面:

防止强迫症颈椎出问题,先旋转90度:

然后选工具栏第一项,调整亮度和对比度。只要细节都能看清,亮度和对比度大一点比较好:

然后选择工具栏第二项,增加色温。下面就看起来很阳光了,虽然我是放在不见天日的床头柜上拍的:  

这张照片背景比较干净,左边少有一些杂物,稍微剪裁就可以了:

修图成果:

为了强行演示Snapseed的污点抹除功能,我打算抹掉煎蛋上的几颗黑胡椒。打开Snapseed:

戳右下角画笔按钮,选修复: 

放大到目标胡椒的位置,用手抹匀蛋清和胡椒:

修复的结果:  
最终的成品:

移动开发实习体验

去年5月在某大公司实习Android开发,实习期持续了三个月,技术提高有限,但是了解了大公司规范开发的流程,算是最大的收获吧。

以前也在师兄的小公司实习过,Android和iOS开发一般是各两三个人,一个美工同时负责视觉定稿和素材切图,产品功能设计干脆是老板和客户一同负责。开发写完代码会自测,然后就交给老板和客户不停地玩,找出bug修bug。其实麻雀虽小,五脏俱全,上述过程基本包括了移动开发的所有角色。

大公司只不过在每个环节投入更多力度,保证每个步骤的可靠性。

首先老板肯定不必拿根铅笔画App的界面了,产品组和美术组会沟通确认功能和UI。偶尔也发生美术组和产品组意见不合,一般是以产品组为主导。

接下来就是产品组把所有需求细分成很多需求单,交给开发组。开发组员工的这一周比较轻松,除了日常的bug修复外就是思考这些需求,确定可行性,估算用时,分配每个人的任务。然而对本轮无法实现的需求驳回——和产品组复议。

然后就是开发组员工干活的时候。因为每个人负责独立的模块,而且代码有版本控制,所以不太怕一个人搞怀整个项目。不过偶尔还是会有人动到整个项目,导致整个项目不能build——通常就是实习生了。所以新员工会要求code review(CR),我实习的三个月大概提交了100次出头,也就是100次CR。

每完成一个需求就要申请提测。这个需求的产品组负责人和测试组负责人就要开动,确认该需求是正确完成并且没有bug的。如果有bug就会提出bug单。上述的需求单和bug单就构成了这个项目的管理系统。最直接的测试就是手动去玩,各种人类能做到的快速连击、断网、重启都可以尝试;另外有自动测试系统,本质上是测试程序疯狂在虚拟机中虐待App,找到可能的错误,把log交给程序员寻找可能的bug。

开发会在发布日前一周左右终止开发,避免引入新的bug。剩余一周是留给测试组和开发组共同消灭bug的。发布前几天开发组可能要偶尔熬个夜;发布后是开发组难得的清闲时光,一般可以早些回家。

当然开发开始到发布完成这段时间产品组也没闲着,开发组马上又会收到新的很多需求单。

静态博客与wordpress

昨天晚上折腾了个把小时,又把博客从pelican转移到了wordpress,托管在腾讯云上。

近两年静态博客比较流行,在计算机本地用markdown写文章,生成html页面,然后传到服务器上,就是静态博客,不需要服务器后端程序。唯一困难的是静态网页无法存储数据,这就不能支持评论功能,然而有disqus这样的服务,注册后可以用javascript载入评论区,所有评论都放在disqus的服务器上。国内应该也有了竞品。

我先前也在用这样的博客,比如octopress和pelican。优点还是挺多的:

  • 不需要后台程序。octopress和pelican会通过markdown文件生成html网页文件,直接放在网页服务器上。而网上有很多免费的静态托管空间,通常是免费的,例如github page。github page本意是给project一个静态的介绍页面,用来作为博客空间也算合适。
  • 安全性高。正因为没有后台程序,静态网页本身并没有漏洞,减少了网站被攻击的风险。
  • 逼格高。与众不同似乎是很重要的一点,特别是静态博客刚兴起的时候。

但是用了一段时间后,也发现了静态博客的痛点:

  • 只能在自己的电脑上写。静态博客的原始数据(markdown格式的博客文章)、转换程序都在自己的本地计算机上,所以必须只能用自己的电脑写。而用wordpress可以在任何有网络的地方写,在网吧写,在自己的笔记本、办公机、平板电脑上写,在手机上用wordpress的客户端写。毕竟写作本身才是博客的重点。
  • 如果硬要抬杠,其实也可以把博客的原始数据、转换程序放在服务器上,每次通过ssh登录去写。但是这又要求有比较高速的网络连接(否则敲一个字得等上一会儿才出现),至少需要一台vps而不仅仅是静态托管(可以直接用wordpress了),移动设备上的ssh体验通常比较差。
  • 评论数据不在自己的手中。如果更换域名或者调整URL,这些评论就不在能够找到自己正确的位置,这对个人博客来说可能是比较常见的。更不用说第三方服务条款变更(突然收费?)、宕机、倒闭等等风险。
  • 门槛高。这是高逼格的另一面。静态博客更适合程序员,在生成网页、推到到服务器这个过程可能出现各种各样的问题,非程序员或者IT从业者很难自己解决。

而wordpress的优点就是方便,配置一次就可以在任何地方任何设备上用,只要托管服务器不出问题就不用担心。而大规模的用户群也保证了各种插件的供应,大多数需求都可以满足。要专注写作本身,用简单的wordpress还是很不错的选项。