研发效率破局之道
葛俊
前Facebook内部工具团队Tech Lead
立即订阅
3343 人已学习
课程目录
已完结 39 讲
0/4登录后,你可以任选4讲全文学习。
开篇词 (1讲)
开篇词 | 为什么你要关注研发效能?
免费
研发效能综述 (3讲)
01 | 效能模型:如何系统地理解研发效能?
02 | 效能度量:效果不好甚至有副作用,怎么回事?
03 | 效能度量:如何选对指标与方法,真正提升效能?
研发流程 (7讲)
04 | 流程优化:怎样才能让敏捷、精益真正为我所用?
05 | 代码入库前:Facebook如何让开发人员聚焦于开发?
06 | 代码入库到产品上线:Facebook如何使用CI/CD满足业务要求?
07 | 分支管理:Facebook的策略,适合我的团队吗?
08 | DevOps、SRE的共性:应用全栈思路打通开发和运维
09 | 信息流通:让团队高效协同,让产品准确击中目标
10 | 答疑篇:反对996并不是反对奋斗
工程方法 (10讲)
11 | 研发环境:Facebook怎样让开发人员不再操心环境?
12 | 代码审查:哪种方式更适合我的团队?
13 | 代码审查:学习Facebook真正发挥代码审查的提效作用
14 | 质量与速度的均衡:让“唯快不破”快得更持久
15 | 开源:从Phabricator的开源历程看开源利弊
16 | 高效上云:如何用云计算来提高效能?
17 | 测试左移:测试如何应对新的开发模式?
18 | 蓝绿红黑灰度发布:这些五颜六色的发布到底怎么用?
19 | 不再掉队,研发流程、工程方法趋势解读和展望
20 | 答疑篇:如何平衡短期收益和长期收益?
个人效能 (11讲)
21 | 高效工作:Facebook的10x程序员效率心法
22 | 深度工作:聚焦最有价值的事儿
23 | 效率工具:选对用对才能事半功倍
特别放送 | 每个开发人员都应该学一些VIM
24 | VIM:如何高性价比地学习VIM的实用技巧?
25 | 玩转Git:五种提高代码提交原子性的基本操作
26 | Facebook怎样实现代码提交的原子性?
27 | 命令行:不只是酷,更重要的是能提高个人效能
28 | 从工作场景出发,寻找炫酷且有效的命令行工具
29 | 1+1>2,灵活的工具组合及环境让你的工作效率翻倍
30 | 答疑篇:关于价值导向和沟通
管理和文化 (6讲)
31 | 业务目标和技术目标两手抓:怎样打造高效团队?
32 | 从Netflix公开的著名PPT谈硅谷公司文化
33 | Facebook企业文化:工程师文化是创造力引擎
34 | Facebook工程师文化实践三大支柱之一做感兴趣的事
35 | Facebook工程师文化实践三大支柱之二拥有信息和权限
36 | Facebook工程师文化实践三大支柱之三绩效调节
结束语 (1讲)
结束语 | 超越昨天的自己,享受成长的快乐
研发效率破局之道
登录|注册

27 | 命令行:不只是酷,更重要的是能提高个人效能

葛俊 2019-10-25
你好,我是葛俊。今天,我要与你分享的主题是,命令行下的高效工作技巧。
我先和你讲一个有意思的话题吧。命令行工具常常会给人一种黑客的感觉,好莱坞的电影里面常常出现命令行窗口的使用。不知道你听说过没有,很多好莱坞电影在拍摄时使用的其实是一个叫作nmap的工具。这个工具是做安全扫描的,只不过因为它的显示特别花哨,所以被很多电影采用。在 nmap 官方网站上,还专门列出来了这些电影的名单。
类似这种可以让自己看起来很忙的工具还有很多,比如Genact。下面是一个使用 Genact 的录屏,当然这里的命令并没有真正运行。这可能是整个专栏中,唯一一个让你看起来效率很高,实际上却是降低效率的工具,但说不定对你有用,你懂的。
讲完这个娱乐性的话题,我们进入正题吧。

为什么要使用命令行?

GUI 图形界面的出现是计算机技术的变革,极大方便了用户。但在这么多年后的今天,命令行工具为什么仍然有如此强大的生命力呢?
在我看来,对软件工程师来说,想要高效开发就必须掌握命令行,主要原因包括:
虽然鼠标的移动和点击比较直观,但要完成重复性的工作,使用键盘会快捷得多。这一点从超市的结算人员就可以看出来,使用键盘系统的收银员总是噼里啪啦地很快就可以完成结算,而使用鼠标点击的话明显慢很多。
作为开发人员,可以比较容易地使用命令行的脚本,对自己的工作进行自动化,以及和其他系统工具联动。但使用 GUI 的话,就会困难得多。
命令行通常可以暴露更完整的功能,让使用者对整个系统有更透彻的理解。Git 就是一个典型的例子,再好的 GUI Git 系统都只能封装一部分 Git 命令行功能,要想真正了解 Git,我们必须要使用命令行。
有一些情况是必须使用命令行的,比如 SSH 到远程服务器上工作的时候。
取消
完成
0/1000字
划线
笔记
复制
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
该试读文章来自付费专栏《研发效率破局之道》,如需阅读全部文章,
请订阅文章所属专栏。
立即订阅
登录 后留言

精选留言(5)

  • 我来也
    这篇文章我也有些想说的.
    -----
    我用这些工具可以做到的事情有:
    1.每次即使是重启了系统(虽然mac不长重启),也能在有限的4步后恢复到工作状态.
      之前的各种连接,打开的文件,执行的程序都还在,路径都不用切换,相对位置都一样.
    2.由于使用了mosh,即使是电脑断网了,休眠了,只要网络恢复了,连接依旧还在那里.
    3.每次vi的窗口太多了,只需要退出后重新执行 `vi -S .workspace` 就可以恢复到最初的状态.
    4.即使电脑忘记了携带,换了另外一台电脑,只要能ssh/mosh到服务器上,
      执行mux命令就可以进入到之前服务器上的工作状态.比较方便快速处理线上问题.

    -----
    我的开发工具,老师的文章几乎都覆盖了,写的也很详细了.我就不重复了.
    但是有一个工具tmuxinator,我想要着重推荐下.
    这个可以使用yaml文件自定义执行的操作命令.
    编辑好配置文件后,可以一条命令,同时开启很多tmux窗口,并布局好,执行好一系列的命令.
    有了tmuxinator,即使是重启了电脑,也不怕终端丢失,有限的几步就可以恢复现场了.

    -----
    我工作中的使用场景是这样的:
    1.开启iTerm2
    2.本地执行mux(tmuxinator的别名),开启多个标签,分别执行预定义的命令.[重点]
    3.在mux打开的窗口中执行Ctrl+d.(临时端口该会话 为一下步做准备)
    4.使用`tmux ls && read session && tmux -CC attach -t ${session:-default} || tmux -CC new -s ${session:-default}`
      (这个命令可放在iTerm2的Profile-Command中 不用记)
      执行后,选中tmux的会话名,会在新的iTerm2窗口中打开该tmux的各标签.
      几乎不用记tmux的各种命令,像原生使用iTerm一样切换各标签.

    关于第2步,我想着重说一下.
    我一般是开启9个窗口.
    前几个标签使用mosh登录到服务器上(测试&预生产&线上环境),
      再在服务器上使用mux开启多个标签页.不同的标签页可能切换到不同的路径,执行不同的命令.
    再用一个标签在本地执行mux.把会用到,但不那么频繁命令集成进去.(比如本地测试时的几个目录,避免频繁的切换路径.)
    后面的几个标签就会打开最常使用的路径.比如项目目录.

    另外我用VIM开发项目,我一般都会为项目配置一个文件(比如叫.workspace).
    使用`vi -S .workspace`就可以直接进入到工作状态.比如打开常用文件,执行常用命令.
    这个文件实际上就是vi中的命令,避免每次重新输入.我的文件内容大致如下
    ```
    " 加载文件
    badd app/init.go
    badd main.go

    " 切换buffer 打开侧边栏
    buffer 2
    bdelete 1
    call tagbar#OpenWindow()
    ```
    -----
    推荐阅读的博文(也是我在网上找的,写的非常详细)
      Alfred 强烈推荐阅读:http://louiszhai.github.io/2018/05/31/alfred/
      Tmux 强烈推荐阅读:http://louiszhai.github.io/2017/09/30/tmux/
      tmuxinator 初步了解下:https://www.jianshu.com/p/49b70f705acf
      Swish 初步了解下:https://sspai.com/post/55285

    -----
    我的工作环境
    我的装备是:Macbook Pro 13' + 4K显示器 + HHKB蓝牙键盘
    我的开发工具是:iTerm2 + oh-my-zsh(比老师多一个autojump插件) + mosh + tmux + tmuxinator(配合tmux使用.使用yml配置文件) + vim
    另外的系统工具是:Alfred + SizeUp + Swish(这个是用鼠标的 但也强烈推荐).

    为了使用mosh,我才换的苹果电脑.现在也才使用了一年时间.
    -----
    题外话
    我是十一期间在池老师的twitter上看到的<特别放送 | 每个开发人员都应该学一些VIM>推荐,然后连着看了四篇.
    觉得比较适合我吧.虽然老师讲的东西我大多都懂,但是系统的跟着老师来一遍,也觉得蛮过瘾的.
    我工作了十年,但周边可交流的人并不多.他们大都是用的IDE.
    就我比较独特,用的VIM,对命令行和一些工具也比较感兴趣.较少用鼠标.

    今天早上等优惠劵到账后就来买了专栏,接着看.(都忘记使用返现链接了😁)

    作者回复: 这个回复和@Johnson的回复都非常高质量。在进行讨论的时候该给出了很好的建议和工具。

    关键字:Workspace as Code!!

    tmuxinator 我还是第一次听说。看了一下,确实对保持Tmux Session做了进一步的工作。总的来说,你这样的配置可以说是把工作环境作为Code。Workspace as Code :) 对减少环境的设置很有效!!推荐你写一篇博文把这个分享给大家。

    另外几个链接也不错。推荐大家都看看 :)

    2019-10-26
    1
    5
  • Johnson
    tmux和screen之间的区别还真没怎么注意过,不过从开始用的时候感觉screen就比较老了,tmux更新好像更积极一些,可能区别在于tmux更强调强大的交互?session,window,pane 反正tmux给我的感觉就是分屏好用强大。

    Terminal
    在MacOS上大多数人都会选择iTerm2,我以前也是,不过现在我发现它大部分的功能我都用不到,而且它对xterm支持的并不是很全,我想让spacemacs在terminal中的光标的形状和颜色跟着模式变,这样非常棒,如果是iTerm2的话我就没法用xterm的控制字符序列来改变光标的形状和颜色,得用它自己的控制序列。所以我现在就直接用MacOS自带的terminal+MacForge(扩展管理)+MouseTerm plus(实现了xterm的OSC 12/112),仅供大家参考。
    Windows上的terminal很多,爱用什么的都有,但我感觉在Windows上没有类linux系统的搭配光有terminal是不够的。我是用Msys2,它自带的mintty就我的尝试来说,是唯一能满足我所有需求的terminal,作者维护开发也很积极,能让spacemacs完美的工作。Msys2可以让我们使用ssh sshserver,mosh,tmux以及常用的linux命令,体验很好,虽然比起WSL稍微慢点儿,但这个方案可以让你在windows很多版本上都能有同样的体验,不像WSL你必须得起码是win10。
    Linux上的terminal更多了,感觉所有的服务器都有xterm,但是它确实太老了,gnome-terminal算是不错的选择吧,之前比较喜欢用xbuntu,所以觉得xfce-terminal好,gnome-terminal和mac上的terminal的配置不支持配置文件的方式真是蛋疼,没法把配置放到dotfiles的git仓库里面,xfce-terminal就可以,但后来发现xfce-terminal对xterm控制序列支持的更差。不过现在看来我都是在windows或mac登到linux上,所以对linux上的terminal需求不是很大,感觉还好。

    Shell
    自己开发机还是zsh最合适,尤其是oh-my-zsh的git, zsh-syntax-highlighting, zsh-autosuggestions这三个插件,绝对对得起这篇的题目。这里提醒大家git插件使用的时候,如果进入一个code量特别大的repo比如LLVM这种,你会发现git插件把shell拖得特别卡,解决方法在https://blog.csdn.net/a_ran/article/details/72847022。
    Bash在服务器上最常见了,大家支持的比较多,好多公司发布一些软件产品中的脚步也是用bash执行,有时候工作需要编个小脚步也是不错的。
    Csh或者叫tcsh在一些EDA工具或者硬件芯片开发的服务器上基本都是默认,我勒个天,在bash或zshrc里面一句话的功能,在csh里面能把你搞死,就编脚本而言,我们还是远离它吧,哈哈哈。

    SSH/Mosh+Tmux
    Mosh + tmux 绝对是绝配,只可惜好多公司内部安全部门不给开放端口没法用,这里有个有趣的小问题,既然Mosh肯定能连回到server,那按理上为什么我们还需要tmux呢?大家可以想一下,答案见keithw在https://github.com/mobile-shell/mosh/issues/394的回答。
    如果没有mosh,可以用autossh来自动重新发起ssh连接并且自动attach到当时断掉的那个tmux session,具体方法请看我的github仓库https://github.com/Johnson9009/dotfiles/blob/master/shell/zsh/local.alias.zsh.template#L36。不过即使这样也没法跟mosh比。

    最后说我认为最重要的
    dotfiles,也就是用github仓库管理这堂课讲的所有工具的配置,它是一种可以把linux系统的home目录用git仓库管理的思路。如果这些工具的配置文件不用git仓库管理起来的话,个人效能还是不够高,管理好的话,到了一个新公司,也许只需要一两个小时你就可以将你高效的环境建立起来。更关键的是,这种用github管理起来的方式,可以让你不断的优化你的这套个人高效能环境。我现在就切身体会到了它的好处,只不过我太懒,没有什么文档说明我的dotfiles仓库,如果大家有兴趣借鉴可以去看commit message和注释,这两个写的还是蛮认真的。
    说了这么多,欢迎大家一起分享,以及拍砖,哈哈哈。

    作者回复: 这个回复和“我来也”的回复都非常棒。下面是我的一点反馈:

    1. 这个关于Tmux vs. Mosh的解释的确很清楚:“Well, first off, if you want the ability to attach to a session from multiple clients (or after the client dies), you should use screen or tmux. Mosh is a substitute (in some cases) for SSH, not for screen. Many Mosh users use it together with screen and like it that way.”

    2. “我想让spacemacs在terminal中的光标的形状和颜色跟着模式变,这样非常棒,如果是iTerm2的话我就没法用xterm的控制字符序列来改变光标的形状和颜色,得用它自己的控制序列。所以我现在就直接用MacOS自带的terminal+MacForge(扩展管理)+MouseTerm plus(实现了xterm的OSC 12/112),仅供大家参考。”
    这个推荐写一篇博文解释一下。我没有看太明白。

    3. dotfiles 这种方法我有使用。我没有使用GitHub宫内宫开仓,用的是GitLab的一个私有仓中。效果还不错。后面可以考虑公开出来 :)

    2019-10-26
    3
    3
  • hexinzhe
    请葛大展开讲讲ipad ssh 工作流

    作者回复: iPad上SSH,我使用的是Termius(https://apps.apple.com/us/app/termius-ssh-client/id549039908)。它支持Mosh。

    这里我放了一张截图:
    https://sharemyfiles.s3-ap-southeast-1.amazonaws.com/iPad-termius.png

    我后面专门写一篇iPad上的工作流的文章。

    2019-10-25
    3
  • Hills录🇨🇳
    coder (vs code 的web 版本)+ tmux,用了很久了,随时随地任何设备恢复开发环境。

    作者回复: coder 这个蛮酷的!谢谢分享

    2019-11-25
  • Jxin
    🤣手贱买的surface。压着重装黑苹果的想法,周末去研究下win的窗口先。

    作者回复: 哈哈,研究回来给大家介绍一下 :)

    2019-10-25
收起评论
5
返回
顶部