抽象概念
对于一个技术人员来说, 编程技能是最为基本的能力, 它能完成工作中的需求和任务.
除此之外, 还有一些其它应该具备的基础技能, 这些技能每个人或多或少都有一点, 只是平时没有注意, 也没有刻意研究和学习, 以至于有一种鸡汤式的概念, 自己觉得自己不行, 或者自己觉得自己还不错.
但是究竟好在哪里, 坏在哪里, 却很少有人能够说得清.
日常场景
在程序员的日常生活中, 会有一些极为高频的场景, 在每天我们都会遇到
- 碰到难以解决的 bug 或者忘记某个属性和方法的时候, 查阅网上的文档手册和博客文章
- 针对某个需求使用网上提供的代码片段或者第三方库, 如时间格式化, 字符校验等
- 开发项目后, 进行单元测试, 有的是测试专岗, 但这和自测并不冲突, 具体看岗位安排和项目周期
- 上班前拉取最新的代码, 合并, 开发, 下班前提交自己最新的代码, 合并, 期间有创建, 提测, 发布等版本流程
- 运行项目代码或者打包给测试都需要用到构建工具, 这是基本技能, 也有很多值得优化和改进的地方
- 开发过程有三大模块, 功能开发, 代码调试, 问题排查, 能够快速定位问题和解决问题是核心技能
当有些事情我们每天都要重复去做的时候, 人与人之间的差距就来了.
具体有多大的差距取决于我们做这些事情的好坏程度, 越是高频越是核心的事物, 越应当不断去想办法优化和改进, 这样才能提升每天的效率和质量, 日积月累, 将产生无穷大的正反馈.
反之, 倘若我们一直浑浑噩噩, 依靠本能和有限的知识来应对这些场景, 那么这将是一场无比疲惫的消耗战, 直到再也无法支撑业务场景.
必备技能
上述归纳的行为都可以找到一种或者多种技巧来更加快速和友好的执行, 至少可以尝试把概念化的内容转为可量化的方法.
高级搜索
遇到问题的时候如果定位不到原因或者是解决不了, 通常我们会在搜索引擎上查找答案.
百度一下, 未必知道, 谷歌可以解锁更多的内容, 友情提示, 使用英文作为关键字, 获取到的答案质量更高一些.
还有一些其他的搜索引擎就不一一列举了, 关于搜索不只是搜索, 还涉及到搜什么, 何处搜, 如何搜, 同样的问题不同的人用不同的关键词会得到截然不同的答案, 使用一些搜索技巧可以排除劣质信息, 快速而精准的获取想要的内容.
知识体系
编程中不推荐造轮子, 很多场景直接使用别人现成的代码片段和库更为方便一些, 比如手机号校验等, 没必要自己再花时间写一个正则.
当然, 有时候考虑到安全和特殊需求, 仍然是有需要自己造轮子的时候, 这个时候就比较考验技术功底, 基础知识和底层逻辑.
建议平时构建自己的编程体系, 常用的内容要及时整理并合理使用, 特殊的场景能够快速适应, 跟上节奏.
也会用到一些第三方的库, 快速上手最为核心, 尤其是很多文档都是英文文档, 不一定有系列的教程, 这个时候就考验英文功能和基础知识了.
版本管理
几乎所有的公司都会用到版本管理工具, 不论是 Git
还是SVN
, 或者是其他的工具.
你可以不会高级搜索, 可以没有知识体系, 但是不会版本管理, 结局还需要说吗?
版本管理几乎每天都有操作, 何时提交, 如何合并, 怎样解决代码冲突等问题都是要熟练掌握的.
里面要学习的地方有很多, 可以优化的地方也有很多, 正确使用和提升效率很关键.
构建工具
前端的 webpack,npm
, 后端的maven
或者 gradle
都属于构建工具的范畴.
打包输出, 合理设置依赖, 项目优化, 这些都是本身职业中必须掌握的基本技能, 之所以单独列出, 是因为其本身就是一个分类领域.
如同版本管理工具一样, 不同的软件有不同的方式和效果, 不论是配置测试环境, 正式环境, 还是项目本身的设置, 都是有很多需要注意的地方.
代码调试
如果是开发占据了一半时间, 那么调试就占据了另一半时间.
有人调侃程序员, 一半的时间在写bug
, 另外一半的时间在debug
.
遇到问题的时候, 第一时间就是用正确的方式debug
, 比如断点, 比如查看日志, 比如其他调试方法.
熟练的调试时是发现和解决问题的最有效的方法, 反之, 如果代码调试的能力一般会极大的影响开发效率, 造成不必要的时间浪费等.
问题排查
调试只是查询问题的方法之一, 就拿断点来说, 会断点, 查看相应的数据并不一定能找到问题所在.
了解断点如何设置, 应该设置在哪等就涉及到问题排查, 是采用断点, 还是查看日志, 还是选择别的方式, 也是问题排查.
问题排查是一个思考方式, 怎样发现问题, 为什么没能发现问题, 才是重点, 发现问题后如何解决问题, 也很重要.
一方面取决于经验的积累, 一方面取决于思考方式, 相对之下, 工具的使用就比较弱化.
有些问题发生的时候, 特别能检验一个人的能力, 分析能力, 沟通能力, 技术能力, 综合起来形成问题排查和解决能力.
linux
系统
现在技术越来越方便, 很多框架都十分的成熟, 图形化的开发界面也比较完善, 很多人平时使用 window 系统开发, 但是这并不意味着不需要了解 linux
技巧.
也不能说是纯粹的linux
, 而是应该指命令行和服务器系统.
很多开发场景都是可以通过命令行的方式来开发, 不论是前端还是后端, 还是其他职位, 使用命令行都是比较推荐的方式. 哪一个开发效率快, 质量高, 错误少就采用哪一种, 没有绝对的限定.
其次服务端系统 linux
也要多多了解, 一个项目的开发到上线, 涉及到产品,ui
, 前后端, 测试, 运维等等, 按道理懂得越全面越是有好处, 能够从全局思考, 从技术角度看, 熟悉 linux
很有必要, 许许多多的场景都与之有关, 就像上面的额问题排查, 这涉及到知识储备和经验值, 能够帮助我们全面而快速的定位问题.
单元测试
单元测试是保证软件持续集成和持续交付的一个基本前提。
测试作为一个大的分类也有很多要学习和优化的, 好的单元测试可以帮助我们节省开发时间, 尽早的发现问题.
因为有测试岗, 所以一定程度上测试为非必须, 我们需要在开发效率不断的做出选择.
但从个人综合能力上来说, 测试是一个开发人员应该具备的基本能力.