给校招新员工分享的一点人生的经验

我不是长者,不是新闻工作者,工作时间不长,见得也不够多,但是还是有必要向校招来的新员工分享一点人生的经验。

别让自己挨骂

第一印象很重要,而且软件开发是团队工作,如果一开始就给人留下好印象,以后也会过得舒服些;如果不认真工作,或者干得太差劲,给人留下坏印象,那么以后的日子也会过得不舒服。改变印象并不容易,因此入职初期就应当注意工作方法,千万不要犯忌。

及时报告

中国有句古话叫做“闷声发大财”,但是软件开发工作需要经常沟通,所以闷声发不了财。以下两点值得特别注意:

  1. 领导和同事安排的任务,完成之后一定要报告。大家都很忙,不可能一直盯着你的进度,而且很多任务需要按顺序进行,如果你早就完成却不吱声,有可能耽误事,甚至被误会成没工作。
  2. 如果遇到困难,可能无法在预期时间内完成任务,一定要立刻汇报。及早暴露问题通常不会挨骂,而且能让领导和同事及时研究对策。假如给你分配一个限一周内完成的任务,你等到最后一天领导问你的时候才说“自己什么都不会,所以没做出来”,后果可想而知。

工作过程中会经常遇到问题,包括技术方面的、业务方面的以及现实层面的。有问题很正常,但是攒着不解决就不正常了。遇到问题的时候,可以先尝试找资料,如果还是无法理解,或者忙活了两三个小时还是没有进展,那么请直接去找同事。很多时候你解决不了的问题,有经验的同事很快就能解决。

注意记录

重要事项应当作记录,而且要及时维护。像需求变更、数据库表结构变更之类的重要变更,或者是数据库表结构这种需要各库同步的东西,如果没有准确的记录,结果会很糟糕。

与用户或其他单位交流时更要注意留存证据,有条件的话最好截图/录音。开会、评审等活动必须有会议纪要和与会者的签名,以保障自己的利益。

开发工作中经常有很多琐事和问题,这些也应当记录下来,不然的话很快就忘记了。除此之外,建议不定期地总结一下自己手头的工作,完善程序注释,并且写出一些文档(例如自制构件的使用方法、某项工作的操作步骤或者配置注意事项等)。这种文档不是为了交差或者给领导汇报,而是为了方便让别人帮忙或把工作推出去。

记录的形式

记录的形式很多,例如:

  1. 纸质记录:笔记本、便利贴
  2. 以笔记形式记录:OneNote、Evernote、Leanote
  3. 以博客形式记录:WordPress、Hexo
  4. 以维基形式记录:MediaWiki

如果程序会暴露到互联网上,请注意保护个人隐私和公司机密。

避免挖坑

我觉得,如果你在同事中的口碑很差,那么大概有三种可能:一种是太烦人,一种是根本不好好干活,还有一种是老给其他人挖坑。挖坑的情况有很多种,比方说代码极其难懂,或者留下了很久以后才被发现的缺陷,或者经常制造缺陷,或者把好好的东西改坏等等。

后来者不熟悉项目情况,无论水平多高,接手新工作都有可能出问题,所以工作时候务必细心,抠得细一些,不懂要多提问。事实上,除非为了纯粹地赶进度,我们要的不是迅速完成工作,而是在合理时间范围内尽可能高质量地完成工作。

建议一开始不要急着投入工作。先去花点时间,大概了解一下自己工作的内容,了解相关的业务场景和需求。换句话说,先去弄清楚:项目是做什么的?我手头的工作是做什么的?面向的群体是谁?目标群体的关注点是什么?

投入实际开发之前肯定要搭建开发环境。不要光想着成功启动,有闲工夫的话还要了解一下项目的大概代码结构、系统概况,了解各环境与数据库,掌握编码规范、开发规范或注意事项等,搞清楚什么事情不能做,什么事情需要请示或评审。

若可以通过仿写其他代码来完成工作,那么建议找熟悉程序的老员工来评估一下代码质量,让他们确认一下有没有前人挖过的坑。

开发完成之后务必要自测,而且不要光测合法情况,还要测试非法情况。如果是修改功能,那么要测一下原来的功能还能否正常工作。鉴于新人不熟悉项目,老员工有必要主动去评审代码,指导或监督新人进行测试,而且“授人以鱼不如授人以渔”。

提高知识水平

无论准备往技术方向发展,还是往管理方向发展,都要提高自己的知识水平。

一开始什么都不懂是正常现象。学校所学基本上与工作脱节,所以实际上很多人都是白纸一张。这也意味着自学能力非常重要,毕竟工作一段时间之后还是什么都不懂就不正常了。

在此提醒:争取做技术或管理专家,避免做业务专家,因为后者主要是无谓的重复劳动,而且太精通业务的话容易陷坑里出不来,换家公司的话业务知识积累也会全部白瞎。

Google

在技术方面遇到问题,建议直接用Google搜英语,搜不到的话可以去StackOverflow上面提问。想找一些程序的话,也可以去GitHub搜一下有没有现成的开源程序。有很多问题用英语可以比较容易地找到答案,但是用百度搜只能搜到翻来覆去的重复结果,或者干脆搜不到。

关于翻墙

我觉得翻墙就应该是一种常识般的存在。如果没翻过墙,可以先去Vultr买台服务器,用这里这里的脚本安装服务器端Shadowsocks,然后再下载客户端,与服务器进行连接。

稍微离个题,很多人在翻墙之后会很自然地试图接触政治内容,我的建议是:不要随便参与政治,无论它是你所认为的正确内容还是错误内容。墙外的情况很复杂,什么人都有,而且很多事情和你想的完全不一样。如果看到与自己认识不同的言论之后情绪激动,那么请直接远离政治,不要尝试去捍卫正确立场。乱来的话只会让自己不爽,甚至招来麻烦。

加班

如果还没抱老婆孩子,也不急着操心安家的事情,建议平时稍微加点班。不是因为工作干不完或者干额外工作而加班,而是挤一些闲工夫来加强学习。工作很辛苦,精力不会再像学生时候那样旺盛,两三年以后可能连刷夜打游戏都扛不住,所以充电要趁早。

这里的“玩”指的不是打游戏,而是在技术层面上折腾,通过折腾来提升自己的水平

以我自己举例:

  1. 花点时间学习一门副语言Python,写一些小程序玩。有需要的话便可以随手写一个辅助工作的脚本,例如调试接口等。
  2. 搞一个VPS,除了用来翻墙,还能用来学习Linux系统管理(也可以用来续秒)。折腾LAMP之类东西还有助于加深对网络的认识。
  3. 在目前参与开发的系统中乱点,自己造数据来办理业务,有助于加深对系统整体和各具体业务的了解。另外为了快速准备业务数据需要使用PL/SQL。

假如只是折腾玩,对网络没有特殊要求,建议搞国外主机,一方面是因为比国内便宜,另一方面是因为有关部门管不着,不需要乱七八糟的手续。

折腾VPS需要花钱,建议提前准备一张有VISA或MasterCard标志的信用卡。另外,如果已经搞到VISA/MasterCard卡,可以去Google Compute Engine注册新用户,把信用卡绑上,然后就可以免费使用一年。