工作开发环境搭建与文档管理

几年时间撰文诸多,描述了各种不同语言的环境配置指导,但是对于Mac OS平台没有统一描述过较为整体的配置。一来是因为迄今为止的三段正式工作经历当中前两次都是要强制使用Windows平台做开发,并且只有PC机可以选择;二来是因为我自己的非正式工作经历(比如开发Lambda、背单词APP等),只用到了EmacsXCode单一的工具和环境。当下的工作中终于可以选择MBP了,也因此有契机总结一下全局视角的开发环境。(关于其它mac软件环境配置,参考开源创意软件常用软件

做工具的主人,而不是奴隶

Minimal Emacs for Haskell

做工具的主人,而不是奴隶

我始终觉得工具越是开箱即用越好,曾几何时,这个赞誉属于过Macbook。在开发工具领域,很多优质的商业化集成开发环境就是好的样本,诚然这样的工具并不是针对每一种编程语言都随处可见。不同的语言需要不同的理解和优化,好的IDE需要投入巨大的成本去开发。所以很多小众的语言依然需要我们自行配置开发环境。

以上为自我引用。

工欲善其事,必先利其器

逻辑很简单,我需要配置如下几个层面的环境:

  1. 硬件基础设施
  2. 系统本身的环境,包括VPN(大家都是面向Google、Stack Overflow编程)等
  3. 程序语言环境
  4. 开发工具与辅助工具的环境
  5. 流程图与文档整理、写作工具的安装
  6. 效率与管理工具的安装

硬件基础设施

  • 电脑: rMBP「Mid 2018 15-inch」, rMBP「Late 2019 16-inch」
  • 键盘: HHKB pro 2「白無刻」

系统环境

最新版本的macOS已经配备了zsh终端。比老版本的好用一些,系统的配置最重要的两个分别是HomebrewVPN,这里不详细说VPN,简单提一提:很多协议已经不能用了,到2021年为止,我在使用的协议是VMessbrew的安装如下:

1
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

程序语言环境

macOS默认包括LLVMPython

大多数语言的安装

大多数语言有一个版本管理器和包管理器,比如node环境内的nvmnpm,其他语言列举如下:

  • Haskell: 在官网按说明使用ghcup安装Glasgow Hasekll Compiler,然后使用stack进行包管理
  • Ocaml: 使用brew install opam安装opam,同时管理版本和包
  • Rust: 使用下面的命令安装rustup
1
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
  • Node: 使用brew install nvm,而后brew install npm,剩下的自行按需安装
  • Scala: 安装JDK,而后brew install sbt
  • Scheme: brew install mit-scheme
  • TypeScript: npm install typescript --save-dev
  • Prolog: 这里使用一个商业授权的实现SICStusProlog 4.3.2

二进制安装包

  • Java这类去到官方网站直接下载JDK来安装
  • IsabelleCoq去官网下载安装包

开发工具与辅助工具的环境

开发工具环境

辅助工具环境

  • Diff工具Meld: brew install meld
  • CodeRunner 简单快捷的运行很多语言
  • Github Desktop Github代码托管
  • SourceTree Git/Hg 版本管理工具,Atlassian出品
  • Tower - 比 SourceTree 更好用,商业付费
  • 数据库访问:Jetbrains的DataGrip

流程图与文档整理、写作工具

文档相关

  • Dash 技术文档查询
  • Zotero 文献整理APP
  • Scrivener 最强大的学术文献、小说写作软件
  • MacTex 如果常写学术论文,这个是必备的,完整版包含了很多好用的写作工具,如:TexShop
  • ShareLatex 在线的Tex工具包

一般办公与大纲写作

  • M$ Office全家桶,OneNote可以作为EverNote替代者(出于信息安全考虑,很多公司禁用)
  • Emacs的org mode,非常强大
  • OmniOutliner,商业版的org mode

流程图与屏幕录制

  • OmniGraffle,流程图与矢量图形绘图软件,Mac上最好用的制图工具,Mac/iOS独占
  • LICEcap 好用的屏幕录制工具
  • Graphviz 专业的各种关系非关系图形制作,适合专业出版和论文配图
  • mermaid markdown语法的UML图绘制工具
  • plantUML 文本UML图绘制工具

效率与管理工具

  • OmniFocus,最好的GTD工具
  • OmniPlan,甘特图项目管理
  • Org-mode + taskjuggler,免费的项目管理方案
  • iStat Menus,管控机器参数
  • Transmit 服务器文件管理
  • 一些大公司内部通常会有自己的邮件、沟通、事件提醒工具,比如阿里/蚂蚁是钉钉

Imandra IDE - VSCode

文档管理

可以参考这个视频。如果粗略的把笔记文档分为强格式化与弱格式化的,那么一般理工类行业和场景更侧重格式化程度高的管理模式比如说Org-modeOmniOutliner,而艺术类或者需要绘画的行业门类则更适合OneNote等支持随笔的笔记管理方案。

头脑风暴

MindNode 适合头脑风暴,在凭空的场景下爆发出一些观点。OmniOutliner 也能胜任做计划的工作,两者在形态上各有优势,思维导图的场景更加聚焦。

资料收集

EverNoteOneNote 两款功能强大的软件可以互为补充。印象笔记更侧重于规规矩矩的收集,高级版账户还可以有演示、图形修改等诸多内容,适合松鼠症患者。微软的OneNote功能十分强大,很适合作为随笔来使用,其使用习惯更像是真实的记事本,在页面的哪一个点开始都可以,适合随笔以及需要随手画图或者文档排版结构需要高度灵活的场景。

整理

OmniOutliner 相对而言是一款大纲写作、列表管理应用,一个重要的特点就是结构化。他的适用场景确切的说是更擅长印象笔记和OneNote的后续工作,前者收集素材后者整理精髓。与OneNote的使用特点完全相反。如果仅仅是大纲整理,思维导图也能胜任一部分工作。另一方面,Outliner可以与自家的Focus联动,比如建立论文学习的事件流,在Focus的提醒事项里可以直接链接到Outliner中对应的论文笔记条目,很方便。

Zotero 一款文献管理工具,浏览器的插件方便了我们随时可以把当前页面存为书签。毕竟是免费的工具,总的来说不是特别好用。

集大成Org-mode

Emacs自带的一种文档模式,可以说是集大成。其用户体验不占优势,但是功能完备,几乎可以胜任任何跟大纲、任务管理和格式化文档相关的工作。在格式化文档方面与OneNote的场景比较互补。最大的特点是可以进行文学编程,适合做有可执行代码片段的学习笔记。