1. 什么是开发环境?

  • 支撑整个软件生命周期如需求、设计、开发、测试、部署、运维、运行等活动的基础设施,提供工具、方法,促进高效、越来越好的习惯和生产率。
  • 良好的开发环境是生产优秀软件的温床,反之是低效率、劣质软件的摇篮。

2. 目标

  • 面向业务发展,选择合适的技术栈、工具、高效的习惯。

3. 价值

  • 提升产出物的质和量。
  • 从低效活动中释放劳动者,能量满满地跑进下一个活动。
  • 丰富劳动者的技能和视野,自然提升团队战斗力。
  • 工具和习惯酷一点,加上拥抱变化的团队氛围,提升劳动者对团队的认同和在行业中的在线感。
  • 劳动者的视野和积极性最终趋向所属团队的平均线,所以须避免低效的重复劳动频繁消耗劳动者的耐心和热情,导致拉底整个团队。

4. 活动

  • 技术栈及开发环境。
  • 环境工具。
  • 习惯。
  • 检查。
  • 持续更新。

5. 技术栈及开发环境

  • 桌面
    • C#/WPF
    • C++/QT,性能突出。
    • PyQT,Python开发速度 + QT的丰富类库。
    • Electron,轻量级。Microsoft的VSCode基于Electron,Electron基于NodeJS、Chromium。
  • 后台及库
    • C/glib
    • C++/C++ 11,QT
    • Python3,Anaconda
    • Go,后台服务推荐使用Go,那些缺乏实际数据时对性能的担心都源于一颗不愿意接纳新生事物、不愿意学习的本心,好比上一次许多人担心过Java
    • Lua,高性能脚本及DSL领域特定语言
  • 音视频/流媒体及协议
    • FFMPEG/GStreamer
    • 2个优秀的国产开源软件,快速搭建流媒体平台:ZLMediakitSRS
    • x264/nvidia-video-codec-sdk/nvcapturer
    • onvif
    • 国标GB/T28181
    • webrtc/srt/quic/rtsp/rtmp//hls
    • opencv/cuda/yolo
    • 纯Go开发的WebRTC服务:pion
  • 三维引擎、数字孪生
    • Unreal Engine、Unity
    • WebGL技术,以Chrome、Firefox为代表浏览器中
    • OSG
  • Web后台
    • ASP.Net, C#, IIS
    • Python, Django, Flask
    • PHP/Java
    • Nginx
    • 新系统推荐Go技术栈,简单、快速。哔哩哔哩开源的Kratos框架
  • Web前端
    • Layui
    • JQuery && BootStrap
    • AngularJS
    • VUE
  • 数据库
    • MySQL。
    • SQLite,单机版软件。
    • sqlite-tools,SQLite工具。
    • Redis,内存数据库和消息队列。
    • InfluxDb、ClickHouse、国产TDEngine,时序数据库。
  • 消息队列
    • RabbitMQ/ZeroMQ/Redis/ZooKeeper。
  • Windows平台上集群/微服务
    • Go开发的任务编排:Nomad
    • 服务发现:Consul

6. 环境工具

6.1. 硬件

  • CPU,Intel I7或E5、金牌、银牌等及以上。
  • 内存,16GB以上。
  • 硬盘,操作系统装在SSD硬盘,开发活动中出现大量文件IO请求,比如三维的编译、构建,输出也放在SSD硬盘。
  • 显卡,开发拼接/解码主机/WebThreeD软件时,需要Nvidia独立显卡。
  • 网卡,至少一个千兆。
  • 显示器,推荐2个。美工和UI工作者推荐高端显示器。

6.2. 操作系统

  • Windows桌面版,Windows 10 64位及以上。
  • Windows服务器版,Windows Server 2016 64位及以上。
  • Windows虚拟机,VMWare。
  • Linux桌面版,Ubuntu 16 64位。
  • Linux服务器版,Ubuntu Server/CentOS 64位。
  • Linux/Unix虚拟机,Docker。

6.2. 开发工具

以下软件部分以Windows为例,善用命令行做好开发中每个环节的自动流转。

  • Visual Studio 2013/2015/2017,不推荐跟随微软不间断升级VS,理由:
    • VS越来越大,打开sln越来越慢,降低效率。
    • 某位开发者用新版VS打开旧版SLN,开发后提交,很容易导致旧版SLN无法编译,避免该问题要求开发者对编译、链接及VS工程属性等有较深刻了解,并且是一些无趣的问题。
    • 新版VS要求既有源码和依赖库等均要兼容新版。
    • 新版VS构建软件后对部署环境的操作系统、补丁包、.Net环境、VS依赖库等提出新的要求,而ToB环境中可能无法更新系统,导致发生灾难。
  • QT 5.11
  • MingW,GNU工具集在Windows上的实现。
    • 绝大多数Unix/Linux上的优秀软件,都用MingW编译移植到Windows上,例如FFMPEG。
    • 推荐MingW替代VS的编译、构建功能,例如QT 5.11 + MingW。
  • MSYS64,Linux Shell在Windows上的实现,常常配合MingW使用。
  • git, TortoiseGit
  • depends.exe,查看软件依赖库。
  • procexp64.exe,更详细的进程查看工具。
  • rammap,系统内存分析工具。
  • ConEmu,命令行终端,支持cmd.exe和git bash。强烈推荐把工具软件所在目录加入到环境变量PATH,使得在ConEmu终端中快速使用,避免每次去找其所在文件夹才能使用,比如FFMPEG。
  • Cmder,集成ConEmu环境,推荐。
  • Dexpot,多桌面软件。
  • vim/emacs,source insight/sublime/vscode/notepad++, hexplugin
  • 脚本工具,首选Python3

6.3. 多媒体工具

  • ffmpeg
  • ffplay_wall.py,ffplay电视墙,定时开、关某一个视频,测试视频源在高并发时的稳定性。
  • Screen Capturer Record,电脑桌面录制驱动。
  • gstreamer
  • potplayer
  • vlc
  • H264BSAnalyzer,分析h264和h265
  • mp4info
  • Elecard StreamEye Tools
  • GitlHEVCAnalyzer,分析h265
  • ODM(Onvif Device Manager),ONVIF客户端
  • Onvif Device Test Tools

6.4. 网络工具

  • ping
  • wireshark抓包,无抓包,无流媒体
  • cports,查看端口占用。
  • tcpdump
  • ccproxy,代理
  • iperf3测试网络带宽
  • clumsy-0.2-win64
  • Win10上双网卡配置

6.5. 硬盘

  • my_hdd_speed,监视每个分区的读写带宽。
  • crystalDiskMark,磁盘性能测试。
  • imdisk virtual disk driver,内存虚拟磁盘。

6.6. 显示器

  • moninfo,主流显示器EDID信息查看器,提供EDID编辑功能。
  • AE EDID Editer,edid编辑器。

6.7. DevOps

  • GPU_Z
  • CPU_Z
  • 模拟CPU占用
  • AIDdA64xz,设备管理器大全版
  • total commander,资源管理器,类似tmux
  • everything,光速文件搜索工具。通过NTFS的MTF表和操作日志制定索引,但只搜索文件名和文件夹名,不包括内容。
  • filezilla server/filezilla
  • rsync,源自linux上远程文件同步工具。
  • freefilesync,本地目录文件同步工具。
  • teamview/vnc/anydesk/todesk/向日葵
  • OpenSSH-Win64
  • Free StopWatch,时钟
  • Glary Utilities,系统清理工具
  • Microsoft Security Essentials,微软的杀毒工具
  • Windows 7任务管理器
  • Windows 10和Server 2012上的任务管理器
  • Windows资源监视器

7. 习惯

  • 人肉手动3次以上,考虑工具化,但不能为了工具而工具,首要是落地解决眼下的问题,再考虑长远。
    • 反例之一:反复进入ffmpeg所在目录敲命令。
  • 工具分享。
  • 命令行键盘胜过鼠标。
  • 刨根问底,解决问题的同时弄清原理。

8. 检查

  • 通过代码走查、结对编程,获知团队内开发环境现状,提出改善点,影响面较大的需团队确认。

9. 持续更新

  • 鼓励技术文化,微创新开发中的每个环节。
  • 结合代码走查等活动,每月汇总定期检查结果以及新Idea,考虑放入CMMI体系中的OSSP(Organization’s Set of Standard Process),即组织标准过程集。