开发人员基本素养
之所以把这一篇放在整本书的一个的位置, 因为拥有这些「基本素养」对于一个优秀的程序员来说至关重要, 它关系到你能否持续进步, 能否自我提升, 能否变得更优秀; 不会因为条件及环境限制而固步自封、止步不前.
良好的英语阅读能力
我们不得不承认几个事实:
- 整个IT行业的硬件、软件的基础设施(芯片、存储器、操作系统、编程语言等)几乎全部由外国人发明创造, 而这些基础设施的说明文档几乎全是由英文编写.
- 优秀的软件类库、框架大多由外国人开发, 文档也都是英文
- 英文的软件开发社区比中文的活跃, 英文的问答社区的答案质量也远远好于中文问答社区
诚然, 也有不少中文志愿者在从事各种文档的翻译工作, 但是也由不少问题, 如: 文档翻译落后官方几个版本, 翻译不完整, 甚至有时候还出现翻译错误. 更多时候是, 没有中文翻译的文档.
所以, 有良好的英文阅读能力(技术类英文文章词汇相对简单易读, 难度并不高), 你可以主动学习新的技术, 不必慢半拍; 我们的代码也有英文书写(当然不是写作), 对你写代码也是大有帮助.
同时, 如果你不仅能读能写, 还能听, 那你可以通过观看许多并无中文字幕的教学视频(如 https://www.freecodecamp.org/learn )来更快的提升自我. 如果你还能用英文流程表达, 那你可以直接在一些平台上与外国友人交流, 进入外企或者去国外工作的机会也大大增加.
我个人是通过以下三个方式来提升英文阅读能力的:
- 只使用Google, 且只使用英文关键词搜索, 并直接阅读英文搜索出来的英文结果
- 若框架或者库的官方没有提供中文翻译文档, 那直接阅读英文文档, 不要去找第三方翻译的中文版
- 阅读框架或库的源码, 熟悉英文单词命名习惯, 也了解英文注释书写方式
坚持一段时间后, 自然慢慢就适应了, 能快速从大段英文中找到所需的信息, 学习能力几解决问题能力显著提升.
你也可以通过阅读下边的资料来提升自己的英语能力:
主动学习及好奇心
技术一直在变革、在推新, 我们只有不停学习才不会与时代脱节. 个人建议在业余多关注技术社区, 多查看流行项目, 多查看看技术大牛多博客, 多看看技术相关的资讯. 当然我们在看这些新的信息的时候不要抱着太大的目的性, 不一定和目前工作无关的就不去看不去了解, 因为你不知道未来什么时候可能就会用上它. 与工作相关的、自己感兴趣的可以深入研究, 其他的可以仅做粗浅了解即可.
主动去查看阅读新资讯是一种方式, 调动我们的好奇心则是另一种方式. 我们日常在浏览网页、使用框架或者库时, 也许会遇到一些有趣的功能、特效, 而我们却不知道它是如何实现的, 这时我们应当发挥我们的好奇心, 在闲下来的时候去研究它如何实现的: 阅读它的源代码, 抑或网上搜索. 比如本小书所讲述的内容或者概念并非面面俱到, 遇到不理解的你也可以搜索相关关键词去深入了解, 当然也可以提issue.
通过以上两种方式, 我们能不断扩充、丰富我们的知识.
使用搜索引擎的能力
有人调侃, 写代码就是 CTRL + C
+ CTRL + V
, 若连搜索引擎都不会 使用, 那么连到何处复制粘贴代码都不知了。
会用搜索引擎不是只是简单的输入关键字, 其中还有一些技巧, 若只是垒砌关键词, 搜索到了会是很多无关的内容, 浪费时间而已。
恰当的使用搜索引擎, 99% 以上的问题都能找到答案.
能访问 Google
Google 是全球最大的搜索引擎,其检索的数据量之大,没有任何其他搜索引擎可以与之相比,尤其针对科研人员(程序员也算科研人员吧 😅),其上可以检索的相关数据不是国内任何搜索引擎能比的。国内很多大公司都会在其公司内部, 通过一些方式使员工能访问 Google.
至于如何访问 Google, 请百度之, 多浏览,多尝试.
推荐使用该地址 https://www.google.com/ncr 访问不带区域跳转的 Google.
如果你很注重自己的隐私, 那你可以使用 https://www.startpage.com/ 来替代 Google,startpage 并非是一个真正的搜索引擎, 其搜索结果完全来自 Google, 但是在隐私方面做了些处理, 详情见官网说明。
在一些特殊情况, 也可以使用微软的必应替代之。
会用 Google
遇到同样的问题, 有人能用通过搜索引擎快速找到答案, 有人花费良久最终认为搜索引擎没什么用: 使用搜索引擎不是简单的键入关键词按回车即可, 也是有技巧可言的.
使用恰当的关键词
- 在挑选关键词之前, 需要我们能认清问题的本质.
比如我们要开发一个微信h5的网页, 网页上一段文字需要在div中垂直居中. 这个问题的本质是在「文字如何在容器中垂直居中」, 与「微信」没有关系, 与「h5」没有关系, 甚至与「div」也没有关系(因为在p标签, h1 标签中垂直居中原理方法是一样的).
- 搜索的关键词要简短, 不要过长, 避免使用一句话, 建议使用词组加空格分隔的形式, 如 「文字 垂直居中」
- 增加必要的关键字限定限定结果范围. 像上面的例子, 如果用 2 给出的词组搜索, 会搜出 安卓、iOS开发的相关问题, 而是我们只需要浏览器相关的结果. 由于一般浏览器上文字垂直居中用css即可实现, 于是乎我们加上 css 这个词限制即可, 最后的搜索词组是 「文字 垂直居中 css」
当然也有例外请求, 使用一些流行的工具、库的时候, 会报一些错误出来. 这些错误信息往往是英文的, 大多数情况仔细阅读错误信息就能解决这个错误(很多人一看到是英文马上放弃阅读错误信息😓), 若错误信息并未提供解决方法, 我们可以直接复制错误信息(注意去掉本地文件路径信息, 代码行号等无关信息, 同时避免复制过多内容)到搜索引擎中搜索以寻找答案.
使用英文关键词
当用中文搜索无果时, 可以选择使用英文关键词搜索, 会有意外惊喜. 如果你的英文比较糟糕, 你可以将中文词组翻译为英文后, 再使用英文搜索.
我遇到技术问题, 几乎只用英文搜索, 基本在搜索引擎第一页前几条就能找到想要的结果.
使用高级搜索指令
搜索引擎还有自己的高级搜索指令,善用这些指令能帮忙更精确更高效的搜索你想要的内容.
例如:搜索 "banana" -fruit
则能搜索到完全包含关键字banana
且与 fruit
无关的结果
Google 的高级搜索指令:
其他搜索引擎的高级搜索指令和 Google 大同小异,甚至连百度也有自己的搜索指令
关于百度等国产搜索引擎
强烈建议避免使用百度等国产搜索引擎, 国产搜索引擎常见问题(以百度最为严重):
- 自家产品、内容排名优先, 搜索引擎沦为自家产品的推广工具
- 广告优先: 尤其是虚假广告、诈骗广告、医疗广告等等, 广告主谁的钱多谁靠前
- 搜索相关性低, 甚至还会出现误导人的结果
- 搜索不到官网或者官网排名靠后(甚至第一页找不到), 针对国外产品的搜索结果会更明显
- 充斥各种无意义的 『内容农场』网站
- CSDN(国内典型的垃圾站了)、博客园等传统技术社区权重较高, 但是上面文章质量较低, 大量复制粘贴的滥竽充数的内容, 还有很多有问无答的「悬案」
珍爱生命, 远离百度.
由于百度域名容易记,常常用于测试网络是否正常,推荐安装chrome 插件 stylus(chrome 网站自定义样式插件), 再安装样式 baidu-as-a-network-utility 保证你仅使用百度作为测试网络的工具, 不会手残使用百度搜索。stylus 系开源插件,可放心使用。
如何提问
遇到问题时, 如果通过主动思考、网上搜索均不能解决问题, 这时我们可以尝试去提问: 向同事、朋友提问, 也可以在技术社区提问.
好的问题, 可以快速收获回答并赢得别人的认可; 坏的问题, 会不受待见, 得不到回答, 让人对你降低评价.
提问前你应当已经有过如下尝试:
- 主动思考并尝试过解决问题, 未解决
- 在网上搜索过相关问题, 亦无解
若无以上尝试, 请不要向任何人提问: 你的时间宝贵, 其他人的亦如此, 没有人有义务去回答你的问题, 更别说没有价值、没有营养的问题
提问时, 你应当按下属方式提供信息:
- 简明扼要描述你的问题. 如果你不能描述出你的问题, 也请不要提问, 理清问题后再提问, 避免浪费他人时间
- 描述问题相关的背景、前因后果等. 这一步至关重要, 因为常常会出现这样的情况: 你遇到问题A, 想出了方案B, 但是方案B有一个技术难题C, 如果你向他人提问C如何解决可能会得到一个复杂的解决方法, 亦可能无解. 而实际上问题A可能有方案B1、B2、B3能解决, 其中不乏更简单的方法.
- 描述你已经做过的技术尝试、搜索到的可能的结果以及你的一些猜测想法等. 这能避免他人给你提一些你已经尝试过的方法, 对他人分析问题也有很大帮助
你可以仔细阅 提问的智慧 来提升你提问的能力
良好的学习能力
以上所述的「主动学习及好奇心」, 「使用搜索引擎的能力」, 「如何提问」都是基于良好的学习能力之上的. 一个人若没有良好的学习能力, 那么他将无法持续进步, 无法自我提升, 无法变得更优秀.
遇到一个新的技术, 我们需要能做到:
- 了解它是什么
- 了解它的优缺点, 能做什么, 不能做什么
- 了解它的应用场景(兼容性, 性能, 适用范围等)
- 了解它的使用方法, 语法, API等(粗略了解即可)
- 了解它的原理
- 它与其他技术的对比如何
- 用你自己的话描述它并能让他人理解
新技术很多, 我们不可能全部学会, 做到上述几点, 你就能快速了解一个新技服, 帮助你做出合适的选择, 并在需要时能快速上手即可.