程序员的居家办公生活

居家的日子

最近北京疫情反复,作为在北京的程序员的我,已经居家办公两周了。

最大的感觉就是:虽然很讨厌这个反反复复的疫情,但是很喜欢居家办(mo)公(yu)的感觉。除了睡眠更充足外,一日三餐也能吃到最干净最健康的自己做的菜,不用每天吃外卖或者饭店买的饭菜了。我甚至可以下午三四点,自己去炸个鸡米花,炸个薯条,或洗个水果。

居家两周的时间,我也总结出了自己的一套居家办公的工作模式。

仔细想想,最适合居家办公的职业,难道不就是程序员吗。一个舒服的敲代码环境真的太重要了,在家安静,舒服,想怎么来就怎么来,思路什么的都会很清晰。

居家也需要自律

当然了,居家也会很考验人的自律能力
说到底,居家也是居家办公,而不是居家放假。倒不是说需要多努力的在家给老板打工,而是要时时刻刻注意自己的生活习惯不要被懒惰打败了。

根据我五六年的程序员经验来说,我自己干活通常效率是比较高的,而且我也不喜欢把当下的任务拖得很久,因为拖得越久我对这件事的思路也会越模糊。但是人也不是机器,不能一个接一个的任务无休止的运作下去,所以我自己的工作习惯就是,在尽可能合理的情况下,稍微增加一点排期,这个排期中会包括设计,开发,自测三个流程。这个过程中,设计就是准备开发的过程,而自测就是对自己的代码一些简单的测试,开发则需要高效率的进行。如果开发效率又高,质量又好的话,那么我的自测过程就会相对轻松,对于我的整个排期中来说,就是一个相对放松的状态,同时也通过测试流程能准备好和前端同学的联调。

当然这也引出另一个问题的重要性,就是设计文档,在动手写代码之前,一定要提前整理好自己的思路,它可以是图,可以是文档,也可以只是零零散散的笔记,设计可以简单,但不能没有


而居家之后,就不一样了,一天的时间里,我甚至有了更多的空闲时间。因为这一天的任务,我可能一个上午,或者一两个小时就能完成,并且我处于阻塞状态,需要等其他同学也完成了才能一起进行下去。这种情况下,我就处于空闲等待时间。
拿计算机系统举例:我这个‘进程’的任务虽然完成了,但是我在阻塞等待在另一个‘进程’的任务的完成并且给我发送一个信号,我这个‘进程’才能被唤醒继续往下执行。当然这个阻塞与非阻塞的工作范围界定,也是所有项目管理人员需要掌握好的一项技能,任务的合理分配才能让整个团队的运转效率更高。

扯得有点远,其实我就是想说,工作做完,我就可以摸鱼了

在不影响工作进度,不影响团队配合的情况下,这个摸鱼时间,你可以打游戏,可以学点技能,也可以做点自己的东西。如果你和我一样是程序员这个职业的话,我建议选择后两者。现在互联网行业和游戏行业都不是很景气,一个部门都能说裁就裁,如果你没有一些自己的核心竞争力,你怎么立足这个行业呢。只要自己自身职业素质过硬,就算被裁也能很快找到下家,甚至薪资待遇能更好。
这种情况下,正是提升自己的知识储备的好时机,不管你是在家看学习视频,还是刷leetcode,都不会再担心是否会被领导发现。甚至你也可以做一些自己的东西,比如搭建一个自己的博客,做一个自己的小游戏,都是锻炼和扩宽自己技能储备的好方法。只有自己强大了,才不用担心被别人掌控命运。
当然,如果能再接点外包赚点外快就更好了

总的来说,居家办公,我们仍然需要自律,不是为了更好的给老板打工,而是为了更好的自己

居家的心得分享

居家办公,就可以让自己在最舒服的状态下工作。

个人状态

调整好自己的个人状态,才能更好的投入工作

  • 首先,早睡早起,是保证一天精神充沛的重要前提,中午的午睡也是必不可少的,天大的事,等我睡醒了再说
  • 其次,早上一杯水,下午一杯水,每天水分要喝够了,这样既能让你多上厕所,变相的走动走动,也能补充到水分。
  • 然后,每天的核酸,该做还是得去做的,有什么事需要离开一会,给相关同事说一声,大家都会理解的。

远程软件

远程软件有向日葵,TeamViewer,ToDesk,或公司的VPN。

公司VPN

公司的VPN一般是用来远程应急的,所以速度不会太快,大家如果都用VPN的话,会让远程的速度非常慢,用起来会非常难受。

TeamViewer

TeamViewer有时候很好用,有时候会非常的卡,尤其要运行一些实时渲染的图形界面,比如我会用公司电脑跑Unity看游戏运行效果。

向日葵

这个可能比TeamViewer好一点,但是也非常的卡。我们刚开始远程的时候,向日葵服务器还被挤爆了。当然,如果你不差钱,或者公司愿意出钱的话,向日葵的会员服务还是不错的。

ToDesk

免费远程软件里最好用的了,运行非常流程,我远程跑Unity的游戏效果也十分流畅。目前我也一直用的是这个

代码IDE

要说写代码,最重要的还是编码环境了吧?
IDEA天下第一不用我说了吧?哈哈!
虽然我刚工作的时候也是使用Eclipse的,但是后来用了IDEA我就回不去了。各种快捷键,智能补全,代码提示,以及便利的Debug操作,CVS操作等,唯一不好的是,我不太习惯它原生的快捷键,于是我把它设置成了Eclipse的快捷键,并且至今还在使用。
这个唯一有一点不方便的就是,当别人要来我的电脑帮我查问题的时候,经常不知道我的快捷键是什么,而我如果要帮别人查问题的时候,也同样面临这个尴尬的事情。
虽然但是,IDEA是很吃内存的,因为IDEA的一切便利都是建立在巨大的缓存基础上的(那令人头疼的indexing),如果你的电脑内存不是很够的话,还是Eclipse比较好使。
远程办公之后,一开始使用ToDesk远程在IDEA上写代码的,并且流畅度来说,还是可以接受的。直到我用了IDEA的CodeWithMe插件的远程协同开发。听名字可以知道,它其实是用于多人之间远程协同开发的,但是我却把它用做了另一个用途——我自己的远程开发终端。

CodeWithMe

screenshot-20220517-201226

screenshot-20220517-201340

环境

CodeWithMe需要你的主机(公司电脑)装有IntelliJ IDEA 2020.2.1或更高版本(自动就会带CodeWithMe插件),而你的本地(家里电脑)甚至不需要你本地装的有完整的IDEA,你只需要下载一个用于读取并编写远端代码的客户端,通过主机分享的远端链接,就可以下载(600k左右)

使用CodeWithMe写代码,相对于直接通过ToDesk在远程电脑的IDEA上写代码,要流畅不少,并你的IDEA设置的快捷键,代码模板,甚至是LiveTemplate,都能在你本地的IDEA客户端使用。总结它的优点如下:

  • 流畅,如同写本地代码一样地写远端代码
  • 拥有主机IDEA完全相同的环境,工程目录完全一直,且完全是从远端读取
  • 拥有主机IDEA完全相同的快捷键,代码模板,LiveTemplate
  • 可以在本地客户端进行基本的Debug操作(Step into/Step out/Step over)

当然了,它也有一些缺点:

  • 不能进行VCS操作,所有的提交和拉取代码,仍然都要去主机上操作
  • Console虽然有日志,但是日志不能打印颜色,所有日志都是白色,这样就不能很明显的看到Error
  • 有时候会网络不稳定,但是我通过连上公司VPN能解决这个问题
  • IDEA的破解账户一次只能使用30min,每30min都需要重新建立新的远程地址,我已经通过某宝购买正版账户解决

不过反过来看,CodeWithMe本身也不是一个远程写代码开发的工具,而是一个协同的开发工具,所以以上缺点也是情理之中的(不知道这算不算洗白)

其他的也有比如VSCode和IDEA本身,其实也有远端代码开发的工具,当然这就需要在一台服务器上部署开发环境,如果只是针对临时性的远程办公的话,稍微有点得不偿失了。

其他工具

除了写代码,我们还需要其他的一些工具,才能完成远程办公,基本的比如Word/Excel自然不用多说了,连接数据库需要Navicat,连接服务器需要Xshell等。除了IDEA的远程IDE,我还用到了以下工具:

个人

除了写代码,当然也需要合理的划水啦

  • 微信:和同学朋友一起划水的工具
  • Chrome:没有浏览器怎么划水?
  • 网易云音乐:不听歌怎么写代码?
  • Notion:个人工作生活规划利器,精确把握你的所有生活工作节奏

工作

  • 企业微信:对于我们来说没太大作用,主要也就是连接VPN需要用一下,也把它打开吧
  • 飞书:我们工作最常用到的沟通工具
  • 远程IDEA:这个上面说到了,畅通无阻的写远端代码
  • VSCode:个人认为最好用的文本编辑工具
  • Xshell:我最喜欢的服务器SSH连接工具

一键打开所有工具

由于每次打开电脑我都要打开一大堆各种各样的工具,所以我干脆把它们写到了一个脚本里,用脚本一键打开。
说来也难受,一开始用windows的bat写,语法上各种难受不舒服,后来我干脆直接用python写,不仅代码清晰舒服,而且使用起来也方便

screenshot-20220517-115618

import os
import subprocess

import psutil as psutil

from config import config


def is_process_running(process_name):
    pl = psutil.pids()
    try:
        for pid in pl:
            if process_name.replace(".exe", "") in psutil.Process(pid).name():
                return True
        else:
            return False
    except Exception as e:
        return False


def open_app(name, app, info):
    file_dir = app.rsplit(os.sep, 1)[0]
    file_name = app.rsplit(os.sep, 1)[1]

    if is_process_running(file_name):
        print("%s已经运行..." % name)
    else:
        print("打开%s,%s" % (name, info))
        # os.system("%s" % app)
        subprocess.Popen("%s" % app, shell=True, stdout=subprocess.PIPE, stderr=None)


def open_apps(sec_key, info):
    print(info)
    apps = config.get_config_sec(sec_key)
    for app_key in apps:
        app_infos = apps[app_key].split(";")
        if len(app_infos) < 2:
            print("%s配置错误" % app_key)
            continue
        app_name = app_key
        app_path = app_infos[0]
        app_info = app_infos[1]
        open_app(app_name, app_path, app_info)


if __name__ == '__main__':
    print("开始准备工作环境")
    print("====================================================================================")
    open_apps("SELF_APP", "打开自己要用的")
    print("====================================================================================")
    open_apps("WORK_APP", "打开工作要用的")
    print("====================================================================================")
    print("所有工具都打开了,祝你今天工(hua)作(shui)开心")
    print("====================================================================================")
[SELF_APP]
微信 = D:\WeChat\WeChat.exe;划水聊天
Chrome = C:\Program Files\Google\Chrome\Application\chrome.exe;划水工具
网易云音乐 = D:\sougou\网易云音乐PC版\cloudmusic.exe;听歌工作,效率更高
Notion = D:\Notion\Notion.exe;个人工作生活规划利器

[WORK_APP]
企业微信 = D:\WXWork\WXWork.exe;没啥用,也打开吧
飞书 = D:\Feishu\Feishu.exe;处理工作消息
远程IDEA = C:\Users\Administrator\AppData\Local\JetBrains\CodeWithMeClientDist\CodeWithMeGuest-212.5080.55-windows-x64-ide\bin\intellij_client64.exe;流畅地远程写代码
VSCode = D:\Microsoft VS Code\Code.exe;文本工具
Xshell = D:\Xshell\Xshell.exe;服务器工作

以上代码有一点很难受,就是python一旦调用os库,打出来的exe就会被360杀掉,所以我最后还是只能写个bat,去调我的py文件,总感觉,有点绕回来了呢???我想对360说:“听我说,谢谢你,因为有你…”

划水小Tips

最后再来一个居家划水小tips吧。
一个智能手表或者智能手环,能让你短暂的离开你的工作环境,只要你开启APP通知就行。感觉没啥事了,只要你带着它,就可以放心的做饭炒菜,或者炸个薯条,洗个水果。穿戴设备的震动比手机的震动更能吸引你的注意。

7b5d95267d4b62e85c5074c60aed151