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个优秀的国产开源软件,快速搭建流媒体平台:ZLMediakit和SRS
- 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平台上集群/微服务
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),即组织标准过程集。