写点什么

开发者有话说|在刷怪升级的成长路上,技术人应该掌握的三个大招

作者:迷彩
  • 2022 年 10 月 06 日
    广东
  • 本文字数:7779 字

    阅读完需:约 26 分钟

开发者有话说|在刷怪升级的成长路上,技术人应该掌握的三个大招

前言


在知识大爆炸的时代,技术更新迭代飞速,作为技术开发者,学会学习是开发者成长路上的必备技能之一,编程开发没有一招鲜吃遍天,只有学会学习才能让自己快速入门或者掌握一门新的技术,学会学习也是解决问题最快捷的路径之一,同时在解决问题中,也能提升自己的技术。保持对技术的敏感性,这样才能把握技术风向标。在学习中不断总结经验,总结问题的解决方法,不断搭建和完善自己的知识体系,用大家的话说就是总结解决问题的套路。学会举一反三拓宽解决问题的思路。不管是计算机行业还是其他行业,学会学习是提升自己的先决条件,但是仅学会学习是远远不够的,学会思考是学会学习的必要工具,比如,那些好的创意都是头脑风暴,集思广益的结果,并不是凭空想象,虽然有些创意是灵机一动或者转念一想,但是那也是建立在经验的基础上,只有经验的积累到一定程度,学习和思考两者相辅相成,才能抓住机会,在危机中孕育新机。所以只有不断快速学习,提升知识的接受能力,巩固技术基础,保持对知识的渴望和兴趣才能持续积累经验,在知识的洪流中,不随波逐流,拥有自己的见解,不人云亦云。虽然学会学习是一个不可或缺的技能,但是学会搜索,寻找合适的学习资料能够让学习事半功倍。搜索引擎简直就是技术人百宝箱。江湖上一直流传着一句话:“搜索引擎能解决 99%的问题”。而且搜索也是学习中最重要的一环,环环相扣。


当我们的遇到的问题,或者在学习中对学习的内容存有疑问时,我们无法通过搜索引擎找到合适的方法,或者解决方案时,我们可以通过向身边的大神虚心请教,或者你自己加了一些技术群,也可向群里的大神请教,毕竟三人行则必有我师,永远怀着对知识的敬畏,怀有一个空杯心态去学习。当然,提问也是一门大学问,只有准确地把遇到的问题描述清楚才能让帮忙解决问题的人,GET 到你问题的关键,才能准确地复现问题,给出合适的解决方案。如果描述都描述不清楚,别人需要花更多的时间去猜测你可能遇到的问题,有可能无法给出准确的答案,纯属浪费大家时间。所以在刷怪升级的成长路上,作为技术人:学会学习,学会搜索,学会提问。是所有技术人都应该掌握的三个大招。掌握这三大技能才能尽可能打败技术成长路上的所有大 boss。


学会提问


平时我也比较喜欢混迹各个平台特别是微信群和钉钉群以及公众号、知乎,除了在这些平台上寻求问题的解决方法,也经常收到一些与技术相关的提问。最大的感受就是有一部分人并不善于提问,或者说不善于表达。经常会在群里看见类似这样提问的情况:

  1. 有大佬在吗?然后没有下文了

  2. 我的代码怎么会出现这个报错,然而,具体代码是啥没贴,一个 hello world 的代码好像值千金似的

  3. 有没有使用 XXX 的大佬?然后没有然后了

  4. 还有些提出问题,但是具体代码是啥,要做什么,具体出现结果是啥没说清楚,就随意截了一个报错的截图,还截不到重点部分。

  5. 有些啥也没说,就丢了一堆代码文件过来,代码还不全,一问三不知,有些人还比较急躁,字都懒得打,就想知道答案

  6. 还有些同学站在自己的角度去描述问题,总以为自己描述很详细很清楚了。没有经过思考,说不出个所以然

  7. 。。。

有些问题只有一个比较随意的截图,甚至没有截图!对于这样的问题,群里的反应往往是以下几种:

  • 群里静悄悄,一片安静。

  • 群里又开始讨论其他话题,跳过 或者“无视了”这个问题。

  • 部分热心的群友可能会给出一些建议但是依然没有解决问题,纯属浪费时间,毫无意义

下图是我们在群里看到的一些提问(反面教材):

那么为什么会这样呢?是群友们都不想帮助提问者吗?当然不是!问题还是出在提问者上,提问者没有学会如何正确地提问。首先,在提问之前:

  1. 你有没有尝试自己去解决这个问题?

  2. 有没有思考过问题的原因?有没有通过百度,Google、CSDN、InfoQ、Stack Overfow 等网站搜索过类似的问题?

  3. 有没有在官方手册或者 Github Issues 上搜索过它是不是已知的 bug?

如果已经尝试解决过问题,但没有成功。那么你可以开始寻求别人的帮助。对于提出的问题,一定要描述详尽。如果是一个 bug, 要提供可以完整复现 bug 的步骤。描述自己运行代码的环境版本、操作系统的版本、期望的结果与实际的结果、原始的代码片段等信息。必要的时候,还需要要提供相应步骤的截图。对于源代码,尽量提供文本或源文件,而不只是截图,以便他人用于复现。如果代码量很大,则可以重新创建一个文件以存放可用于复现的代码,去除不必要的代码和敏感信息,缩小整体的代码量。有一个描述清晰的问题,才更有可能获得别人的帮助以及得到合适的答案。


学会使用搜索引擎


作为一个优秀的程序员或开发者,学会使用搜索引擎是一项不可或缺的技能。因为没有人能够帮你解决一辈子的问题,但是搜索引擎可以。而且并不是你需要帮助的时候就会有人能够及时帮你解决问题,也不是你所提出的问题正好是你认识的人能够解决的。因此要做一个面向百度的优秀程序员,做一个基于 Google 的优秀程序员,或者做一个优秀的 CSDN、InfoQ、stackoverflow。。。程序员,在国内由于网络原因,大家选择使用百度搜索引擎居多,不过毕竟国内的搜索引擎能够搜索的内容有限。一个是面向国际的,一个更多是面向国内的,Google 或许能够搜索到更多更合适的答案。所以选择合适的搜索引擎也是很重要,毕竟有时候选择大于努力,选择不对努力白费。


学会使用百度,Google 搜索引擎或者学会使用国内国外优秀的技术网站(国外:StackOverflow、GitHub。国内:infoQ、CSDN、51CTO、知乎、掘金、思否、阿里云、技术类公众号。。。等)是成为一个优秀程序员的必要条件。一个优秀的程序员一定会合理地使用百度、Google 和优秀的技术类博客网站来搜索和解决问题。会使用搜索引擎和技术类网站,不一定是优秀的程序员。但不会使用搜索引擎和技术类网站就一定不会是优秀的程序员。


在学习和开发的过程中,无论是谁都会遇到各种各样的问题。学会搜索,是解决问题的必经之路。相信每位开发者同学都是一名优秀的程序员,Google、百度、Bing、CDSN、InfoQ、阿里云、思否、StackOverflow 等将会是你在搜索解决方案过程中的最好的朋友。


除此之外,官网和项目所在 Github 仓库也是搜索相关内容的最佳途径,官网有着很详尽的使用和开发文档,而且在开源项目中 Github 和官网都汇聚了许多人的智慧以及大家一路以来所有趟过的坑。在技术快速发展的时代很多东西已经越来越完善,有很多优秀的开源插件或者组件,甚至有完整开源框架和项目可拿来即用。但是在知识的快餐时代,大家都比较急躁,很难静下心来去仔细阅读官方文档或使用手册,在使用的过程中有很多“低级”的问题都是因此而产生的;比如:你要学习使用 Vue,为了安装 Vue,找了一篇相关的博客文章,你照着文章上的步骤一步安装,在安装过程中可能因为你的环境或者下载到的 vue 版本不同,甚至因为你操作系统或者 Nodejs 的版本和文章中的 Nodejs 不同,导致安装失败。如果你直接查看官方帮助文档,文档就会告诉你哪个版本需要什么环境支持。甚至文档还说明可能出现的问题和解决方案。但是由于你的急躁白白折腾大半天。如果你无法通过以上的方法解决你的问题,或者说是项目本身出现问题,你还可以在 GitHub 仓库提交 Issues。或可通过 GitHub Issues, 你可以查找自己遇到的 bug 是不是一个已知的问题。你还可以通过 GitHub Wiki 了解到你所使用的开源项目未来半年甚至一年的规划。如果你所使用的开源项目你有更好的想法,也可以通过 GitHub 为项目做贡献。


搜索引擎使用技巧


既然说到了搜索引擎,下面咱们继续介绍搜索引擎相关的使用技巧。初学者往往只是不知道怎么利用网络的资源,所以才会提出一些在老手看来比较“幼稚”的问题。解决技术类问题如果条件允许首选 Google 和 Stack Overflow,实在没有条件百度和国内众多的博客网站也是不错的选择,只是搜索的到的结果有些局限而已,但是几乎都能解决问题。所以无法使用 Google 的同学也不要气馁,正所谓条条大路通罗马。


搜索最重要的步骤是准备关键字,在搜索之前我们需要对自己的问题进行详细的描述以及从中提炼出问题的关键字,通过关键字去获取我们想要的答案。虽然现在是人工智能时代,搜索引擎已经使用上了成熟的人工智能算法,但是机器依然无法准确地理解我们的自然语言,所以我们需要使用关键字进行搜索而不是写了一堆无关的大白话去搜索。想快速找到自己想要的答案可按照以下流程:

  • 我们需要思考或者想象一下问题如何描述最准确

  • 描述的越详细越好

  • 描述问题应尽量客观,多用术语,体现共性,而非特性

  • 定点准确搜索,比如你希望从哪些网站中获取想要的结果,避免一些无关的信息或者广告

  • 仔细阅读搜索引擎给出的结果,寻找关联性

  • 若没有结果->说明关键字可能不合适,可更换关键字继续查找

  • 若有相关的结果,只是没有达到自己的要求 - >调整关键字,转换搜索方向

  • 重复这个过程,直至问题解决


下面以百度和谷歌搜索引擎为例,介绍使用搜索的相关技巧:

1、精确搜索-双引号和书名号:"关键字"、《冲出亚马逊》

最简单、有效的准确搜索方式是在关键词上加上双引号或者书名号,在这种情况下,搜索引擎只会反馈和关键词完全吻合的搜索结果。精确搜索在排除常见但相近度偏低的信息时非常有用,可以为用户省去再次对结果进行筛选的麻烦。


2、排除关键词-减号:"关键字" -要排除的关键字

如果在进行准确搜索时没有找到自己想要的结果,用户可以对包含特定词汇的信息进行排除,仅需使用减号即可。

例如在搜索["高并发" -支撑]时,你所得到的结果反馈是不包含支撑字眼的高并发信息条目



3、在站内进行搜索:site:网站域名 关键字

 


绝大部分网站的搜索功能都有所欠缺,因此,更好的方法是通过 百度或者谷歌 等搜索引擎对站内的信息进行搜索。你只需要在搜索引擎上输入“site:xie.infoq.cn”加上关键词,搜索引擎就会反馈网站“xie.infoq.cn”内和关键词相关的所有信息条目,这样能获取到更加准确的结果。


4、使用「Either OR」(或)逻辑进行搜索:

在默认搜索下,搜索引擎会反馈所有和查询词汇相关的结果,但通过使用「OR」逻辑,你可以得到和两个关键词分别相关的结果,而不仅仅是和两个关键词 都同时相关的结果。巧妙使用「OR」搜索可以让你在未能确定哪个关键词对于搜索结果起决定作用时依然可以确保搜索结果的准确性。

5、使用 intitle——把搜索范围限定在网页标题中

使用方法: intitle:查询内容

例如 百度输入“intitle:高并发”搜索

6、inurl——把搜索范围限定在 url 链接中

使用方法: inurl:特定 url

例如 百度输入“高并发 inurl:特定 url”搜索

这样可以缩小搜索范围,和“site:url” 的用法一样


7、加号

在关键词的前面使用加号,也就等于告诉搜索引擎该单词必须出现在搜索结果中的网页上,例如,在搜索引擎中输入“+电脑+电话+传真”就表示要查找的内容必须要同时包含“电脑、电话、传真”这三个关键词

8、通配符包括星号(*)和问号(?)

前者表示匹配的数量不受限制,后者匹配的字符数要受到限制,主要用在英文搜索引擎中。例如输入 “computer*”,就可以找到“computer、computers、computerised、computerized”等单词,而输入 “comp?ter”,则只能找到“computer、compater、competer”等单词。相当于 SQL 中的模糊查询


9、filetype——专业文档搜索

使用方法:filetype:文档格式或者文档类型

例如:百度输入:“计算机导论+filetype:doc” 搜索


下面为谷歌特有的搜索技巧:


1、同义词搜索:go ~高并发

当你不太确定使用哪个关键词进行搜索时,使用同义词反而会得到更加合适的结果。所以在未能准确判断关键词的情况下,你可以通过同义词进行搜索。

如:“go ~高并发”,你所得到的结果会包含关键词相似的条目


2、在谷歌搜索引擎中可以在两个数值之间进行搜索:

在寻找问题的答案时,一个很好的方法是在一定范围内寻找和关键词相关的资讯。例如想要找出 1901 至 2022 年间的诺贝尔奖获得者,直接在搜索引擎中输入"诺贝尔奖 1901.. 2022"即可得出想要的结果。

注:数值之间的符号是两个英文句号加一个空格键


3、在网页标题、链接和主体中搜索关键词

有时你或许会遇上找出所有和关键词相关的所有网页标题、链接和网页主体的需求,在这个时候你需要使用的是限定词“inurl:”(供在 url 链接中搜索使用)、“intext:”(供在网页主体中搜索使用)以及“intitle:”(供在网页标题中搜索使用)。

例如,在搜索引擎中输入“intitle: 高并发”会得到所有和关键词“高并发”相关的网页标题的内容

 

4、搜索相关网站

相关的限定词可用于搜索相关网站时使用。比如,你仅需在搜索引擎中输入“related:baidu.com”即可得到所有和“baidu.com”相关的网站反馈结果

 

5、搜索技能的组合使用

你可以对上述所有搜索技能进行组合运用,以便按照自己的意愿缩小或者扩展搜索范围。尽管有些技能或许并不常用,但准确搜索和站内搜索这些技能的使用范围还是相当广泛的。


随着人工智能的不断发展,Google,百度 等搜索引擎对于用户自然语言的理解程度会越来越好,我们对这些搜索技巧的使用或许会变得越来越少。但是在当下,掌握这些搜索技能还是非常必要的

学会学习


学习是一种能力,这种能力是可以通过后天学习的。学会学习比学习本身更为重要,这或许是我们达成的普遍共识,我们只有学会学习,才能让学习走上良性循环,突破学习本身,增长智慧。学会学习一直是我们的追求,也在这过程中产生了很多我们耳熟能详的学习方法,如:费曼学习法,番茄钟学习法,西蒙学习法,思维导图学习法...等.一直听说学习分三大境界:苦学,好学,会学。学习的一个重要目标就是要学会学习,这也是现代社会发展的要求。民间一直流传着一句话:21 世纪中的文盲将是那些不会学习的人。


学习是我们人类从古至今,一直在不断精进的技能之一,我们从牙牙学语直到老去,我们一生都在学习中,一直通过学习提升我们生存的本领,让我们更好地在这个蓝色的星球愉快生存。这或许就是所谓的活到老学到老。学习本来的目的是让我们摆脱眼前的困境,但是如果你没有找到适合自己的学习方法,就很难突破现状。愚者千虑必有一得,我们通过已学习到的知识,加以思考,举一反三,就会得到更好的问题解决方法,也只有多思考才能常学常新。学习的意义就在于要培养面对任何困难都能勇往直前,沉着应对的精神。


只要找到适合自己的学习方法,学习就会变得非常有意思。你会变得越来越自信,越来越有毅力,你的世界也会变得更加丰满多元


学会自己思考,学会举一反三

在寻求帮助之前,自己要对所遇到的问题进行过认真且深刻的思考。比如,你经常使用的某个 IDE 插件出现了一个 bug。这个 bug 在 IDE 的某个版本上是不存在的,但是更新到新版本上就出现了。那么在开始给插件提 Issue 之前,或者我们在向别人请求帮助前,是不是可以自己先思考一下,也许是版本更新或回退,或者因为缺少一些相关的类库导致了插件的 bug。自己先尝试解决问题,在提 issue 时,能给出自己遇到的情况和思考,可以更好地帮助插件开发者找到问题的根本原因。同时,对自己也能有很大的帮助。再比如我们经常使用的开源项目中,可能由于版本迭代或者你使用的系统环境发生变化,导致出现了问题,你可以尝试使用不同的环境进行搭建,加以对比,或许就能找到问题所在和解决方法。如果你喜欢琢磨源码,或许你能了解到开源项目底层的基本实现逻辑和原理,通过自己掌握的原理或许就能够解决所出现的问题,无需等待官方发布补丁,自己发布一个解决方案例,还能为社区做贡献他不香吗?


而且学习编程开发技术并不是背代码,而是应该学会如何思考,思考以怎样的逻辑去实现实际需求,思考应该以怎样的形式去组织代码,因为在不同项目代码中,就算类似的需求,不同的人写,代码的逻辑和实现形式可能千差万别,因此背代码是没有意义的,而是总结类似的需求应该以怎样的逻辑和形式来组织代码,尽可能形成一个符合自己需求的解决问题通用模板或方案。


我们思考就是为了能够更好地解决问题,能够产生更多解决问题的方法,甚至能够总结出一套完整的方案,在我们以后遇到类似的问题时能够快速找到解决问题的方案,或者能够让我们少走很多弯路。比如我们之前学习过 C/C++、Java,后来想要学习 C#,Python,PHP 这些编程语言,因为不同语言之间的基础语法大差不差,甚至连常用内置函数的名称和用法都是一样的,毕竟一门不管是编程语言还是其他项目,在开发时一般都会想到,尽量降低学习成本和使用门槛,这也是很多编程语言或者技术一直追求的目标。这时候我们可以通过触类旁通,举一反三的方式进行迁移式学习,用学习其他编程语言的学习方法和已经储备的编程知识来提升学习新语言的效率。


在实际开发中一个项目可能涉及到多个编程语言和框架,特别是游戏开发项目,可能使用到 go,lua,Java,PHP,Python、C、C++、C#等多种编程语言,作为一个多语言开发者,可能需要在 Visual Studio Code 中同时使用 Python 和 PHP 语言。通过学习,你可以玩转 Visual Studio Code 的 Python 使用技巧,同时也应该学会举一反三。在一些方面,不同语言的开发体验是相近的。如果你已经学会了在 VisualStudio Code 中对 Python 代码进行代码编辑、静态代码检查、调试、单元测试等功能,那么在 Visual Studio Code 中编写 PHP 时,你就可以有相应的参考。Visual Studio Code 为调试、智能提示、代码导航等功能都提供了风格一致的开发体验。有了举一反三的能力,你就能够在 Visual Studio Code 中更快地上手不同编程语言的开发。或者你使用的是 jetbrains 系列的 IDE,Python 你使用的是 Pycharm,PHP 你使用的是 PHPstorm,JavaScript 使用的是 webstorm,Java 使用的是 IDEA,但是这一系列集成编辑器的操作界面、快捷键、调试方式基本一致,如果你经常使用其中一种,或者对其中某一个编辑器的使用很熟悉,可以举一反三,就能够快速上手其他语言编辑器的使用。


知其然知其所以然


在使用开源的开发框架或者编程语言时,我们都希望能够读懂源码,从源码学习中洞悉其中的底层原理和使用到的相关技术,知其然知其所以然,我们才能更好地用好它。也只有深谙其中的底层原理,我们才能灵活地使用和修改,从中悟透相关知识,对自己也有很大的帮助。如果有一天当前使用的开源框架或者技术,无法满足现在的需求,这时候我们就可以利用已经掌握的知识,修改底层以符合我们的实际使用或快速开发一款符合自己需求的框架。了解背后的原理和技术栈不仅有助于我们使用当前的框架和技术,而且可以帮助我们在日常的项目开发中了解更多的技术选型和架构设计,开阔我们的眼界。


比如我们在使用 Java 开发时,都希望能够了解 Java 源码以及 JVM 的底层实现,甚至希望学会如何去配置和修改它,这样有利于我们项目后续的优化,降本增效的同时让项目运行性能尽可能最大化。再比如:我们在使用 Spring mvc,Spring boot 的时候,很多时候都热衷于了解其底层的原理和相关技术,有利于项目的调优,甚至可以对 Spring 系列的框架进行定制化的开发,以更加贴合我们的实际需求。毕竟同一个东西,大家用法千差万别,有人用刀来切肉,有人用刀来砍柴,而且不同的刀用法也不一样,小刀可以切水果,大刀可以砍骨头。。。合适的工具做合适的事,好比我们在进行架构设计时同样遵循这个原理,也就是架构不可过度设计,这也许就是所谓的杀鸡焉用牛刀。


我们为什么学习“学习方法”本身呢?因为这个世界太大,而我们的智慧有限,只有掌握了更有效率的学习方法,才能在极为有限的时间里,把自己的认知水平比别人多往前推进一厘米


学会这三大技能,无论大小 boss,残血还是满血都能一套带走


最后,希望所有小伙伴都能够在本文中有所收获,同时能够从中总结出一套自己的学习方法,让自己在开发的路上行稳致远


发布于: 2022 年 10 月 06 日阅读数: 330
用户头像

迷彩

关注

我的工作是常年写bug|公众号:编程架构之美 2020.06.18 加入

修bug的菜鸟~公众号:“互联网有啥事”已改名为“编程架构之美”

评论 (9 条评论)

发布
用户头像
大佬写得很好,收藏学起来
12 小时前 · 广东
回复
学起来🤪 实践出真知,别只是收藏吃灰
17 分钟前 · 广东
回复
用户头像
好文章
13 小时前 · 广东
回复
该评论已删除
13 小时前 · 广东
回复
😀
13 小时前 · 广东
回复
用户头像
写的不错,学到了
16 小时前 · 广东
回复
谢谢😊 希望对小伙伴们有所帮助
13 小时前 · 广东
回复
客气,感谢大佬一直以来的帮助😁
13 小时前 · 广东
回复
用户头像
膜拜大佬文章
2022 年 10 月 07 日 08:44 · 辽宁
回复
👊 感谢大佬😬
16 小时前 · 广东
回复
没有更多了
开发者有话说|在刷怪升级的成长路上,技术人应该掌握的三个大招_个人成长_迷彩_InfoQ写作社区