↑↑↑关注后"星标"Datawhale
每日干货 & 每月组队学习,不错过
Datawhale干货
作者:王晓亮,南京大学,Datawhale成员
在Datawhale有许多同学想了解技术路径、选型,乃至职业规划及个人成长方向问题。恰逢我毕业工作十周年,就从一个过来人的角度分享些,和大家一起探讨。
开聊先自报家门。2011年我本科毕业,毕业后拿到某安全公司的offer,目前就职于一家中小型互联网公司,负责数据中台的建设。你可以认为我是一个普通的从业者,因为我除了简历上有个985的标签,其他的经历可以说是平平无奇,甚至大一挂过科,大作业划过水,上机课抄过作业,但这都是真实的我。
我出生在农村,在07年进入大学之前,可以说连电脑都没接触过。高中的时代还是非智能机的时代,加上县中的封闭式寄宿制,少数能接触外界的信息就是同学的《大众软件》杂志。我至今仍记得杂志上一篇关于凯文·米特尼克(头号电脑黑客)的事迹介绍,我当时想,这人好厉害,会计算机的人好酷。这是我当时的真实想法,也影响了我大学专业的选择以及毕业后职业的选择,所以我第一志愿选择了软件工程,投递简历的第一选择是一家安全公司。从事一份职业需要你热爱它,而这可以看做我投入软件行业的初心。
我经历了四家公司,两家安全公司,两家互联网公司,这些企业有着传统、外企、toG、初创、高速成长等各个不同的标签。工作期间我接触了软件行业的各个方向,我写过前端、后端、爬虫,做过半年测试,涉猎DevOps,也从零组建了现在公司的大数据及数据分析团队,对不同的技术方向还算有些心得。
程序员圈子有个很著名的梗,"PHP是世上最好的语言"。当然,很多时候这个只是一个调侃的话。在真实的业务场景中,没有最好,只有最合适,确如扎克伯格当初选择PHP开发Facebook一样。很多时候我们选型需要从实际出发,要考虑公司人员构成及人员能力,面向的用户规模,研发周期等等。
这里分享两个真实的案例。
第一个案例是安全网关的SaaS化。我工作的第一家公司是一个安全公司,在实习期间,参与了一款企业级安全网关产品的研发,这是一个有着十多年历史的产品,杀毒引擎处理层使用的是汇编/C/C++,管理后台使用的是Java,其代码经历了几代程序员的迭代,杂糅了各个年代主流框架,其迭代周期都是以季度或半年为周期。
正式入职后,12年我有幸参与了新开辟的项目,就是将该安全网关产品简化并部署到AWS上做SaaS化,而我负责为管理后台进行技术选型。当时的场景需要快速上线,云上部署,引擎层抽调了几位资深C++研发,而管理后台则是从零开发,有一位资深美国同事负责前端,后端则是几个包括我在内的应届生来处理。这里就有几个限制,一是跨时区的合作,二是以周为周期的迭代上线。跨时区和前端沟通就必须要求我们选择前后端分离的架构,合理的选择就是REST,当时直接可以提供REST接口的框架并不多,Spring Boot当年还没发布,我们对数据的灵活性又要求比较高,加之管理后台并发性要求并不高,Python成了合适的选择(虽然当时包括我在内几个新人都没有Python开发经验)。这是一次比较成功的尝试,前后端商定REST接口然后分开开发,后端代码可以快速修改并发布,开发效率也比较高。后来在公司的一些其他项目中,Python+REST也渐渐流行开来。
另外一个案例是在我开始接手前端开发的时候,美国同事转岗支持其他项目,我开始慢慢消化遗留的jQuery代码。这时产品经理出了一个新的需求,一个复杂的日志报表系统,其中单页面的各个模块间都有很强的联动性。如果用jQuery开发,开发工作量非常大,而且通过jQuery手动对HTML中各个部分进行操作,代码会特别臃肿。当年Angular.js刚发布1.0版本,还没有大规模的成功案例,而且学习曲线异常陡峭,加之作为新手前端,我并没有信心在短期掌握Angular.js,其他像react/vuejs都还没发布,我开始寻求现有的前端MVVM框架。最终选型选择了Backbone.js,原因是其源码比较精简,容易掌握,而且上手较容易。最后我花了一个月时间,2000行代码实现了需要的功能。从后续的前端技术发展看,当时选择MVVM这样的技术确实算是踩在了风口上,后续react/vue等框架的发布,加上nodejs和各种前端脚手架工具的发展,使得前端方向大放异彩,而在早一两年,刚毕业的小伙伴甚至都认为从事前端是一种低端的职业。
抛开场景谈语言或者框架的好坏是没有意义的。我会说要写爬虫,简单的场景直接用Python的requests库就行,复杂的我会推荐Scrapy这样的框架;对于大型项目,工程师较多,我会建议试试Java,毕竟强类型语言可以做很多约定和规范;高并发的场景,试试golang吧,语言层面就提供了较好的语法支持;初创公司,不要选择小众的语言和框架,面对人员的变动或者招聘,项目会很难交接和迭代(比如Ruby on Rails当前就很难招到合适的人)。
语言或者框架都只是用来实现功能的工具,在团队或者企业的不同阶段,选择合适的工具非常重要。
前文提到了很多语言或者框架,但我的本意并不是让每个人都去熟练掌握每个方向,毕竟技术每天都在更新,隔几年可能又会有新的编程语言流行,今天是golang,明天是rust。再如前端方向,大家总调侃学不动了,因为隔段时间就会出现新的框架或者工具,昨天是React,今天是Vue,明天可能是Svelte。
首先,我们需要透过现象去看本质。抛开量子计算,计算机架构到现在还是冯·诺依曼体系,语言也不过是面向对象、面向过程或者函数式。对于从业者,计算机的一些基础知识我觉得是大家都需要花时间和精力去掌握的,如操作系统,数据结构与算法,网络,数据库等等。再掌握一两门如Java或C++这样的语言,你会发现虽说不能24小时精通,但是花几小时读下语言规范,就可以开始上手用新语言进行项目开发。现在的一些培训班模式就会有相关的弊端,很多时候学员只是学会了一个工具,却缺乏体系化的认知。这也是很多用人单位会尽量招科班出身同学的原因。
其次,扩大自己的认知疆域。人的精力是有限的,每个人可能有自己的主攻方向,自己精通的领域,这是你的护城河,我们需要用心去守护护城河。但是护城河外还有一些广阔的天空,我们可以在合适的时机去尝试接触、了解外面的世界。Datawhale成员很多是做机器学习、人工智能的,打完比赛后,可以尝试思考怎么做工程化、商业化;前端同学可以思考页面展示的数据在数据库中大概是什么样子;使用面向对象编程的同学可以思考函数式编程可以解决什么样的问题。这样可以让你从更高的维度去思考问题,也为职业发展方向提供更多的选择。Gartner每年都会发布技术趋势报告,可以作为了解技术方向很好的切入点。
最后,还需要一些额外的技巧及能力。
高效的学习能力,其中英语是必不可少的,需要能够看懂英文文档、论文、专业方向的书籍,一是可以接触第一手资料,二是可以规避翻译中专业术语描述不准确的问题。这个过程可以循序渐进,比如在校生可以尽量买影印版的教材,操作系统可以设置英文为主要语言。
善用搜索引擎,提升解决问题的能力。技术类的除非涉及国内镜像这种,尽量使用Google,大部分问题其实贴上错误描述就能很容易找到解决方案。
再者,多进行实践,"纸上得来终觉浅,绝知此事要躬行"。比如想了解Linux系统,折腾折腾装机,甚至可以修改内核进行重编译;想做大数据处理,尝试搭建一套Hadoop全家桶;想入门机器学习,尝试手动推导相关的公式或者用Python写简单的模型算法。
应届生在面临就业选择的时候,会经常问是选择去大公司还是去小公司,我会建议从如下几点去思考,大公司能给你提供什么,不能提供什么?可以有一份不错的薪资,行业内最多的数据或者最复杂的业务场景,以及一群优秀的伙伴,但是大公司也意味着已经有了完善的技术框架体系(能优化的空间有限),更加内卷化,大部分时候每个人都是螺丝钉,只能管中窥豹。而小公司则意味着很多事情要亲力亲为,扁平化的管理,可以接触系统的各个方向,以及较为激进的演化策略,但同时也伴随着更多的不确定性,及可能的失败。
当你踏入社会,开始在职场中打怪升级,不同的阶段就会有不同的关注点。初入职场时,考虑的是怎么吸收团队的养分,如何快速完成分配的任务;工作两三年后,技术日渐精进,开始思考怎么团队协作,怎么优化系统;当你慢慢突显了领导力特征,开始承担团队领导的角色,就需要想怎么拆解、分配任务,怎么发展团队;再往更高层,开始独立负责某个业务线,很多时候就需要从商业的角度思考怎么发展业务,为公司创造价值。
归根结底,技术无论高低贵贱,都是最终服务于商业任务的。技术人员有时候会陷入一种自我陶醉,觉得越牛的技术越有价值,但是从商业的角度,老板考虑的是投入产出比。比如现阶段逻辑回归能达到80%的精确度,如果使用深度学习模型,精度能够提升2-3个点,但是其效果并不足以覆盖付出的人力及算力资源,那决策层大概率是不会同意的,这也是公司业务与竞赛的区别。
之前提到我们要认清技术的本质,引申来看,我们还要理清商业、金融的本质,乃至社会、国家的本质:可以试着估算抖音应用的营收情况,分析关键路径上哪些指标能够影响营收;可以尝试了解投融资、股市、期货甚至币圈的运转逻辑;可以想想社会当前的主要矛盾及原因;可以看看国家十四五发展规划和2035年远景目标,以及思考其对未来商业的影响。
但包括我在内的绝大部分人都只会是普通的从业者,回首从业的这十年,有过懒散、拼搏,有过迷茫、成长,我会感谢第一份工作带给我的体系化思考方式,也会感谢现有公司给予我的机遇与挑战。
十年虽然只是人生中的大约七分之一,却感觉是其中最丰满的十年,从青涩的学生,蜕变为成熟的社会中坚,收获幸福的婚姻,初尝为人父母的喜悦,经历亲人离世的苦楚,感悟肩膀背负的责任。生活从来不只有工作,也会有其他方面的点滴。人生也不只是坦途,也会有高潮和低谷。在如今的大环境下,我们更要努力武装自己的身心,去坚守自己从业的原动力。
最后,推荐一部《爱,死亡与机器人》中的作品,《齐马蓝》(Zima Blue),期望大家在任何时候,都有一个可以回望的最原始的自我。
共勉。
整理不易,点赞三连↓