都说技术人要善于学习,主要从哪些途径来发现新技术?在面对某项新技术或新特性时,开发者该以怎样的眼光和态度看待?该如何跟进?本期,【开源访谈】邀请到了腾讯云布道师,腾讯云小程序教程作者贺嘉,从小程序谈起,引发对开发者跟进新技术的思考。
【本期嘉宾】
贺嘉,腾讯云布道师,腾讯云小程序教程作者,TEDxZhuhai策展人,曾为长江商学院CEO班授课,担任全国最大公益组织孵化器恩派的传播顾问。
【访谈实录】
1、首先简单介绍一下自己(学习经历、工作经历、擅长领域等)
我对新技术比较好奇,在这里讲一下关注小程序这个事情。我最初是想学移动开发,想自己做一个 APP。其实挺简单的事情。H5 比较火,就学 H5 吧。于是想用 H5 做一款小游戏,当时在研究一个小游戏,但不知道是用什么引擎做的,于是就去翻资料,发现有若干个选择,有coco、js、coco2d js……后来买了本书看了下,写了一款小游戏,叫《程序猿大战产品猫》。由于做的太简陋,后面没有发出来。
H5 不像 App,有很多功能无法实现。那时就比较纠结是做 iOS 还是 Android,感觉每个都要花挺长时间的。后来在腾讯内部分享会中技术人员 通过React Native 去重写 QQ、QQ 音乐,感觉还不错。React Native 有个特性我特别喜欢,就是不用 iOS 和 Android 各写一套代码。后面了解到,其实也不完全是,语法是一样的,但 iOS 和 Android 有些组件还是不一样的。
后来市场上有一些应用号的声音,发现比 React Native 更好一点。React Native 要学一种语法,写比较接近的两套代码来适应 IOS 和 Android。但是小程序就更近了一步,真的是写一套代码来适应两个环境。我觉得这就是吸引我的地方。然后,我就开始学这方面的知识(那时候还是比较早期),一边学一边写教程,会比其他人更早关注到这个技术。
2、小程序从最初的火热,到现在充斥着不少负面声音,您觉得主要原因在哪?
其实,我觉得负面的声音在于说可能还是有很多人(对小程序)的期望会有些高。初期有些用户其实(用小程序)用的比较少,会有卸掉 App 的行为,而这种行为对一些企业而言是不能接受的。
而我觉得从长远来看,小程序也替代不了 App。在现阶段它也没有定位要去替代 App,要去做一个 App store。
对于商家和企业来讲,更现实的事反而是说,小程序、公众号、App ,更应该像一个生态。比如小程序针对的是低频用户,用户在需要的时候偶尔用一下;公众号是信息的传递,与用户建立起情感上的链接;App 方面给用户提供更丰富、更完善的各种线上服务。如果指望小程序来做(app)这些事,明显也是不现实的。因为小程序的容量限制,包括一些功能上的限制,不可能去替(商户或企业)完成所有事情。
当然,我觉得小程序还是挺适合创业团队的。目前已经有几个借助小程序获得用户的成功案例了。如小密圈、小睡眠、朝夕日历等,这些基本都是创业团队的产品。他们最初也没有 App 等的负担,就做一个比较轻量级的工具,后续等用户到了一定程度再来考虑 App。举个例子,在公众号里做的比较好的两个大号:逻辑思维和一条。这两个做内容的公众号,都是在订阅用户过千万的时候才开始做 App。
对于创业团队而言,用户还未达到几百万的时候,先老老实实做个订阅号 + 一个小程序,也能够满足大部分用户的需求了。当到了一定的人次,需要去完善用户体系时,做一个 App 会更好。毕竟 App 的安装成本现在已经高的离谱,几十块到上百块,互联网金融领域甚至上千块钱一个用户都是有的。如果能够用一些更轻量的工具,像互联网金融这些拓客成本比较高的,用轻量级的工具去获取一些用户,可能有一些转化。
除创业做小程序外,公司进行一些新项目时也可以做小程序。已经有一定规模的企业可以用小程序来吸引低频用户。小程序就相当于是钱包里的九宫格的一个入口。
3、除了小程序,目前还有关注哪些新技术?如果有三个月的时间去学一门新技术, 您会选择什么?
1)深度学习吧。坦白讲,深度学习我还在学习……深度学习现在很火。
第二就是我写文章时需要做一些数据分析,去学 python 爬虫,会去知乎、社区上爬一些数据,结果写出来的文章很受欢迎。那时就会想,在获取一些数据之后要做分析,会面临像分词、做关联性分析的挑战。我自己实现不了的,可能会用腾讯云的 API 接口。
文字、自然文本处理其实就已经属于人工智能有关的部分了,再往后,图片识别、语言识别、文本识别,都会越来越往人工智能方向走。
其实你会发现,我一开始的需求,和小程序的很像,是想要去收获更多的信息,写出更有内容的东西。我先用爬虫的方式收获了更多的数据。之后,我需要有强大的工具帮我做分析,那我就对人工智能的接口和API (自然文本处理)产生了需求。我又不懂,不懂就得去学大概是这样。
我现在看 Tensorflow 和其他的一些基础的 CNN,DNN 网络的模型。因为我的线性代数的基础不怎么样,我一般也就是从用的角度先跑 Demo,再来看源码。
4、您主要是从哪些途径来发现新技术的,有没有一些学习方法和心得分享?
(1)从自己的需求。
比如小程序的需求,我一开始就是想在移动端用尽可能低的成本去做一个可以给用户用的产品,这期间我尝试了 H5、React Native 和小程序。我用一个结果导向,从 H5,RN 到小程序。
我现在要做数据处理,要写出更有信息含量的东西,学 python,做了一些爬虫的事情,接下来就产生了一个学习的目的:我得去学分词,文本处理以及跟深度学习有关的一些东西,你会发现,需求驱动了我对技术的学习。
(2)学习途径方面,我觉得是先搜索再请教。
一方面我觉得跟优秀的人学习。因为我混知乎,所以我会去看知乎在相关话题下有谁已经奉献了高质量的内容,然后跟对方交流,问问看,他有没有一些教程或一些开源项目的推荐,对方会推荐给我一些 Github 相关的地址和教程。然后自己就去学,碰到问题然后再找人请教。
5、在面对某项新技术或新特性时,开发者往往会面临跟进还是不跟进的问题,对此怎么看?
你不能听媒体说什么就是什么。以我的经验会建议从自身需求出发,新技术能不能更高效的解决一些问题。不管它火不火,它能解决问题,学了之后有用就行了。
我个人感受就是越以赚钱为目的的技术学习,越容易错过一些技术趋势。真正的技术趋势大多数还是从实际需求出发。什么火就学什么,也就丧失了真正对于用户需求的那种洞察。技术实际上是用来解决问题的。你自己都没有碰到过问题,别人告诉你说有问题和你自己真的碰到这个问题,那种感受是不一样的。
虽然都是学习技术,如果你之前有问题通过学习技术将问题解决了,你会有一种内在的成就感。如果是说别人和你说这个技术火,学了能赚钱就去学,那最可能的结果就是说过段时间又有别的技术火,那你要不要学别的?
举例,水浒传里的一个故事吧:里面有个人人物叫“神行太宝“戴宗。早年各种拜师想要去学各种厉害的武功。每种豆学了一点,最后发现他获得了一个技能,就是跑的比较快。就是说他的功夫并没有学好。真正学习技术的过程当中,如果什么都学,并不一定说你的学习能力能够变得更强,甚至还不如“神行太宝”戴宗学的跑得这么快。更可能的结果就是啥都没有学会。
6、有些人会跟风去学习某项技术,结果发现到市场上并没有想象中的受欢迎,这种现象怎么看?
很多时候你做的事情没人做,但这也不一定是个坏事。也有另一个可能就是,你学的东西太冷门了,没有太大的市场需求。还有一种好的可能性,你学的技术比较新,去跟风学的时候,基本上只有一种可能就是说它可能还会火一段时间。
以前端为例,前端现在很火,一堆人学,市场需求也很大。然而,市场上充斥着大量低水平的前端,可能有些是从设计师转过来的,有些是从培训机构出来的。在任何一个技术社区里面,经常会看到有一种帖子是说“我是从培训机构出来的,我该怎么办”。
你会发现培训机构有助于找工作,但它教给你的只是一些基础的应用技术。如果你去跟风学习了某项技术,发现没有想象中受欢迎。此时,更重要的是你能不能用这个技术做一些东西,解决一些问题。
比如电商行业会经常做一些促销活动,你是否通过技术做出一些产品出来,比如促销页面。用最简单的前端技术将促销页面写出来,如何应对运营对于促销活动的各种需求呢?这时就该思考是否可以做一个可配置的,灵活性更高,高并发的场景。当考虑的情况越多,页面可用性,健壮性,可迁移性越强的时候,你的技术水平也将随着提升,也就越容易说找到好的工作。
说到这一点,你要去看自己技术掌握的是否够深,有没有实践做出来一些项目。
我们现在面试的时候,对于有 Github 和技术博客的童鞋,一般会有一些加分(印象分)。做了一些项目的和自己在简历上说什么都懂,从前端到后端到底层都会的童鞋相比,我会更希望看到做了什么项目,解决了什么问题,运用到了哪些算法。算法是自己写的还是用的别人的(这个并不是那么重要),换句话说就是有没有自己去解决问题。是跟着别人去解决问题还是自己去解决问题,被动的解决问题还是主动的解决问题。
7、都说技术人要善于学习,那到底该以怎样的眼光和态度看待新技术?
我技术的眼光很一般,我是用比较笨的办法。要解决问题,就先去搜寻相关的技术,看一下相关技术的社区支持度怎么样。
比如之前我要学爬虫的时候,先学了 node.js,但发现它的爬虫库比较少,教程也不是很多。一个朋友写的教程,看了半天也没太明白,所以就放弃了。后面就用 python,方便很多,直接调用一些库等等,原理不复杂。我挺实用主义的,就是说解决问题为导向,能不自己造轮子就不自己造轮子(尽量避免自己去写一些底层的代码)。能尽量地“偷懒”就尽量地“偷懒”。
新技术要去学,要去想新技术能不能提高工作效率。偷懒的真正意思是这个。就是说你是不是真的要从底层去开始写,创造一个新的东西。当然对于中等或者更高水平的程序员而言,是要这样的。但对于我而言,我会偏应用和解决问题,我会去思考新技术能不能更快的帮我去解决已有的问题。
一个是满足我需求,一个是在我之前有没有人用。三就是社区里面支持的人怎么样,有没有一些教程,现有的库。在技术领域,我对自己的定位不是那种开拓者性质的。我是一个应用者和布道师的角色。我去学会新的技术传播给更多的人,去把它的价值体现出来。所以定位不同。
对于开拓性质或者想要在底层走的更深的童鞋,可能要去学更新的技术,甚至说自己去躺一些坑。比如说去给 Unix 贡献一些自己的源码,其实这些应该是在技术上有更高追求的开发者该干的事。
8、您认为技术新人要如何规划自己的职业生涯?
(1)尽可能多的去做一些尝试。因为我也碰到过一些技术的童鞋干了一段时间之后发现自己在技术上也就到头了。包括我们最近也面试过一两个认为自己在技术上还很有激情的童鞋,但其实发现技术上的好奇心和能动性并没有这么强。
学习一个技术和在工作中应用一个技术的场景是不一样的。工作中的每一个项目都是有收入,时间和成本上的压力。所以很多时候你没有办法去交付一个完美的东西。
对一个技术新人而言,当你被迫要交付一个有问题的项目给到客户,而没有想到一些更巧妙的解决方法的时候,那就说明你可能在技术上成长的心和主动性并没有那么强。
(2)建议就是说转行吧。可以考虑说去做偏产品的事情,项目管理等。如果真的想在技术道路上走的更远,不管是偷懒也好,复用新的技术也好,请教别人也好,其实更重要的是说怎样更高效的解决问题而不是放任问题去走。当然,问题需不需要由你自己去从底层到顶层都解决完,这个是另外一回事。比如说你想吃碗饭,没有必要自己种稻子。技术上的问题解决也是一样,你需要去思考的是怎样去更好的用现有的技术解决问题。
(3)我们会感觉未来的程序员和现在的程序员最大的区别在于未来开源社区(开源中国,github)和云会提供很多资源给开发者。他们,哪怕是普通程序员,更多的会像是以前架构师的角色。去挑选合适的组件,合适的技术,用一种比较好的方式连接起来。正如 python比较适合做胶水代码一样。未来程序员会写更多的胶水代码,把更多的组件连接起来。这些组件本身,如云提供的高复用、负载均衡、云数据库、云组机,这些东西是自带高可用,高并发的。
以前架构师需要去考虑的事情,你不用太多的去考虑。当然不是说不需要去学,而是说它本身自带,因为它的健壮性很强,包括开源社区里面的一些组件也很强大。作为一个程序员,该怎么样把它编排起来,有机的连接起来,而不会因为不恰当的连接影响整个系统的效率。因为可能以后每个组件都很强大,效率都很高。
(4)给新人的一些建议就是:进入一个好的行业或者公司,找一个自己信得过的,想跟他一起学习技术的老大,这个很重要。就跟你想成为一个好的商人还是一个好的产品经理,还是一个好的程序员,我觉得有一点是共通的,找一个好的导师。导师可能就是你的老板,你在选择这份工作的时候除了考虑薪酬和发展以外,也看一下你的技术老大做的那些事,他所承担的技术挑战,是不是你想跟他学的。如果不是,就别去。
比较通用的就是尽可能地去做一些完整的项目。刚入行的时候,有机会尽量去大公司会有帮助。大公司所面临的技术挑战,所用到的底层规模比小公司要大很多。你所思考的事情可能在小公司是架构师该思考的事情。太早的进入小公司,可能你会干很多活,但是成长就不一定。