关于经验:我在京东做研发-京东云算法科学家解析爆火的ChatGPT

令人惊艳的ChatGPT横空出世 背地有怎么的前沿技术撑持 走向大规模产品利用又有何局限 深耕对话式AI技术十余年 京东云算法科学家将带您一起走进技术世界 解析ChatGPT的技术亮点与局限 分享下一代对话式AI技术趋势 从好玩到好用 探讨对话式AI的落地实际 嘉宾介绍 吴友政, 京东团体高级总监,京东科技语音语言算法部负责人。2006年中科院自博士毕业后,先后在日本国立信息通信钻研机构、英国爱丁堡大学、索尼中国研究院从事自然语言解决相干钻研工作。工作次要聚焦自然语言解决、人机对话、语音辨认、机器翻译等前沿技术钻研和产品研发工作,并获得了诸多技术冲破,累计发表顶级国内会议和期刊论文30余篇,曾取得语音辨认(IWSLT2012、IWSLT2013)和自然语言解决(QuAC2021,DROP2022,Multiwoz2022)畛域多项国内较量的冠军。他与团队密切合作打造了言犀人工智能利用平台,为客户提供涵盖客户服务、营销导购、流程自动化的整体智能化解决方案,为京东超5.8亿用户提供智能服务,也为批发、政务、金融、交通等行业提供产品与解决方案。他也曾获京东团体最高奖-技术金牛奖等。

January 6, 2023 · 1 min · jiezi

关于经验:用kmer分析进行基因组调查四用GenomeScope评估基因组特征

(全文约3500字) 【举荐】用Smudgeplot评估物种倍性后,用组合jellyfish+GenomeScope1.0做二倍体物种的基因组考察,用组合KMC+GenomeScope2.0做多倍体物种的基因组考察。 1. k-mer进行基因组考察的软件详情k-mer进行基因组考察分为k-mer频数统计和基因组特色评估两步。 GenomeScope能够实现第二步基因组特色评估。须要在jellyfish/KMC等软件的第一步后果k-mer频数散布表的根底上,GenomeScope才可实现。举荐第一步获取k-mer频数散布表的命令: jellyfish jellyfish count -C -m 21 -s 1000000000 -t 10 *.fastq -o sample.jf #计算k-mer频率,生成sample.jfjellyfish histo -t 10 sample.jf > sample.histo #生成k-mer频数直方表sample.histo和k-mer直方图KMC mkdir tmpls *.fastq.gz > FILESkmc -k21 -t16 -m64 -ci1 -cs10000 @FILES kmcdb tmp #计算k-mer频率kmc_tools transform kmcdb histogram sample.histo -cx10000 #生成k-mer直方图2. GenomeScope详情GenomeScope能够利用第一步jellyfish或KMC等其他软件剖析失去k-mer频数散布表(sample.histo文件)实现第二步基因组特色评估。GenomeScope1.0在2017年发表,用于二倍体物种的基因组考察;2020年又发表了GenomeScope 2.0版本,用于多倍体物种的基因组考察,并公布了用于判断物种倍性的Smudgeplot。GenomeScope1.0的基因组特色后果包含基因组大小(genome size),杂合度(heterozygosity),反复序列比例,GC含量等;GenomeScope2.0的基因组特色后果包含基因组大小(genome size),杂合度(heterozygosity),反复序列比例,GC含量,基因型比例,和基因组构造(同源/异源多倍体)等。GenomeScope有网页版和Linux本地版,性能一样;举荐网页版,免去装置的麻烦。3. GenomeScope1.0 网页版【举荐】—— 实用于二倍体物种GenomeScope1.0 网页版:http://qb.cshl.edu/genomescope 上传第一步取得的k-mer频数散布表sample.histo文件;设置参数Kmer length为第一步抉择的k-mer长度值,这里是17;参数Read length为序列读长,个别为150;参数Max kmer coverage默认是1000。 倡议依照物种状况批改,比方10000,以统计更精确。 这个参数太小,可能造成过滤过多的Kmer,导致预计的基因组大小偏小的状况。 这个参数太大则可能把高拷贝数量的DNA,比方叶绿体DNA,包含进Kmer的统计,造成GenomeScope算法的误差,所以还是不举荐应用-1或太大的值。 提交后几分钟就能够失去后果,保留后果图片可用于发表。<img src="https://github.com/yanzhongsino/yanzhongsino.github.io/blob/hexo/source/images/omics_genome.survey_GenomeScope1.0.png?raw=true" width=80% title="GenomeScope1.0后果示例" align=center/> <p align="center">Figure 1. GenomeScope1.0后果示例</p> 4. GenomeScope2.0 网页版 【举荐】 —— 实用于多倍体物种GenomeScope2.0 网页版:http://qb.cshl.edu/genomescop... ...

June 16, 2022 · 2 min · jiezi

关于经验:用kmer分析进行基因组调查三用KMC进行kmer频数统计

(全文约1300字) 【举荐】用Smudgeplot评估物种倍性后,用组合jellyfish+GenomeScope1.0做二倍体物种的基因组考察,用组合KMC+GenomeScope2.0做多倍体物种的基因组考察。 1. k-mer进行基因组考察的软件详情k-mer进行基因组考察分为k-mer频数统计和基因组特色评估两步。 KMC能够实现第一步k-mer频数统计。KMC的后果sample.histo能够用在GenomeScope上,实现第二步基因组特色评估。2. KMC 简介KMC是一个用来从FASTQ/FASTA文件中计算k-mers的基于KMC二进制数据库的程序。KMC是波兰的Silesian University of Technology的算法和软件学院的REFRESH Bioinformatics Group开发的工具。2017年公布了第三个版本,KMC3。KMC是次要基于C语言的程序。3. KMC 装置版本 有两个版本的KMC,个别应用第一个版本,Smudgeplot评估物种倍性时用到了第二个版本。 一个是REFRESH Bioinformatics Group的refresh-bio/KMC。一个是GenomeScope2.0的开发团队tbenavi1批改的tbenavi1/KMC下载 在KMC download找对应零碎的最新版本KMC软件,下载解压缩即可应用。 mkdir KMC && cd KMCwget https://github.com/refresh-bio/KMC/releases/download/v3.2.1/KMC3.2.1.linux.tar.gz #下载最新版本的KMCtar -xzf KMC3.2.1.linux.tar.gz #解压缩和解包,生成bin文件夹和include文件夹应用 解压缩后bin目录下会蕴含可执行文件,可间接应用,倡议退出环境变量,包含: bin/kmc:计算k-mer频数的主程序bin/kmc_dump:在kmc生成数据库中列出k-mers的程序bin/kmc_tools:容许操作kmc数据库的程序4. KMC 运行用KMC计算k-mer频率,生成k-mer频数直方表和k-mer直方图。 运行 mkdir tmp #创立长期文件夹ls *.fastq.gz > FILES #用于剖析的clean reads门路保留到文件FILES中kmc -k21 -t16 -m64 -ci1 -cs10000 @FILES kmcdb tmp #计算k-mer频率kmc_tools transform kmcdb histogram sample.histo -cx10000 #生成k-mer频数直方表sample.histo和k-mer直方图kmc命令参数-k21:k-mer长度设置为21-t16:线程16-m64:内存64G,设置应用RAM的大抵数量,范畴1-1024。-ci1 -cs10000:统计k-mer coverages覆盖度范畴在[1-10000]的。@FILES:保留了输出文件列表的文件名为FILESkmcdb:KMC数据库的输入文件名前缀tmp:长期目录kmc_tools命令参数-cx10000:贮存在直方图文件中counter的最大值。后果 生成的sample.histo可用于第二步GenomeScope的剖析。 5. 基因组特色评估取得k-mer频数散布表sample.histo后 举荐用GenomeScope1.0或者GenomeScope2.0或者GenomeScope的R脚本来做基因组特色评估和画图。也可间接用R绘制sample.histo的频率散布直方图/频率散布曲线。5.1. GenomeScope 网页版5.1.1. GenomeScope1.0 网页版 —— 实用于二倍体物种在GenomeScope1.0 网页版上传前一步取得的k-mer频数散布表sample.histo文件。设置参数k-mer length为第一步抉择的k-mer长度值,这里是17;参数Read length为序列读长,个别为150;最初一个参数Max kmer coverage倡议批改成更大的10000,以统计更多的k-mers。结果显示预估的基因组大小,杂合度,反复率等信息。5.1.2. GenomeScope2.0 网页版 —— 实用于多倍体物种GenomeScope2.0 网页版也是相似的步骤。 ...

June 16, 2022 · 1 min · jiezi

关于经验:用kmer分析进行基因组调查二用jellyfish进行kmer频数统计

(全文约1520字) 【举荐】用Smudgeplot评估物种倍性后,用组合jellyfish+GenomeScope1.0做二倍体物种的基因组考察,用组合KMC+GenomeScope2.0做多倍体物种的基因组考察。 1. k-mer进行基因组考察的软件k-mer进行基因组考察分为k-mer频数统计和基因组特色评估两步。 jellyfish能够实现第一步k-mer频数统计。jellyfish的后果sample.histo能够用在GenomeScope上,实现第二步基因组特色评估。2. jellyfish 简介jellyfish是Center for Bioinformatics and Computational Biology在2011年研发的一款对DNA的k-mers计数的软件,用Hash表贮存数据,能多线程运行。 3. jellyfish 装置conda装置conda install -c bioconda jellyfish #装置的是v2.2.10github装置在github:jellyfish上通过源码装置。4. jellyfish 运行个别先用jellyfish count进行k-mer计数,而后用jellyfish histo对后果进行统计,取得k-mer的频数散布直方表sample.histo。 4.1. count —— k-mer计数命令jellyfish count -m 17 -s 10G -t 12 -C -o sample.jf <(zcat sample_1.fq.gz) <(zcat sample_2.fq.gz) 参数sample_1.clean.fq sample_2.clean.fq 应用的PE reads,不反对压缩格局*.fq.gz输出文件,如果不解压缩,也能够用<(zcat sample_1.fq.gz) <(zcat sample_2.fq.gz)代替sample_1.fq sample_2.fq; 或者应用这种模式zcat *fq.gz | jellyfish count /dev/fd/0,其中/dev/fd/0是过程输出标记,代表管道前后果传递。 -m 17 k-mer长度设置为17bp。如果基因组大小为G(单位是bp),k-mer长度举荐设置成log(200*G)/log(4)。500Mbp的基因组对应约为17,1Gbp的19,10Gbp的21。 -s 1000M 存储用的hash表大小为1000M,这个参数辨认单位M(Mbp)和G(Gbp)。若该值不够大,则会生成多个hash文件,以数字辨别文件名。最好设置的值大于总的独特的(distinct)k-mer数,这样生成的文件只有一个。如果基因组大小为G,每个reads有一个谬误,总共有n条reads,则该值能够设置为[(G + n)/0.8]。 -t 12 线程12 -C 对DNA正负链都进行统计,示意思考DNA正义与反义链,遇到反义kmer时,计入正义kmer频数中。如果是双端测序reads,须要这个参数。 ...

June 16, 2022 · 1 min · jiezi

关于经验:2021助理高薪拉钩产品经理高薪训练营

download:2021助理高薪-拉钩产品经理高薪训练营使用反射和动静代理实现一个View注解绑定库 反对的功能@ContentView 绑定layout 代替setContentView()@BindView 绑定View 代替findViewById()@OnClick 绑定点击事件 代替setOnClickListener()@OnLongClick 绑定长按事件 代替setOnLongClickListener() 代码注解类@Target(ElementType.TYPE)@Retention(RetentionPolicy.RUNTIME)public @interface ContentView { int value();}复制代码@Target(ElementType.FIELD)@Retention(RetentionPolicy.RUNTIME)public @interface BindView { int value();}复制代码@Target(ElementType.ANNOTATION_TYPE)@Retention(RetentionPolicy.RUNTIME)public @interface OnEvent { //订阅形式String setCommonListener();//事件源对象Class<?> commonListener();}复制代码@Target(ElementType.METHOD)@Retention(RetentionPolicy.RUNTIME)@OnEvent(setCommonListener = "setOnClickListener", commonListener = View.OnClickListener.class)public @interface OnClick { int value();}复制代码@Target(ElementType.METHOD)@Retention(RetentionPolicy.RUNTIME)@OnEvent(setCommonListener = "setOnLongClickListener", commonListener = View.OnLongClickListener.class)public @interface OnLongClick { int value();}复制代码实现类public class MsInjector { public static void inject(Object object) { injectContentView(object); injectView(object); injectEvent(object);}private static void injectContentView(Object object) { Class<?> clazz = object.getClass(); //获取到ContentView注解 ContentView contentView = clazz.getAnnotation(ContentView.class); if (contentView == null) { return; } //获取到注解的值,也就是layoutResID int layoutResID = contentView.value(); try { //反射出setContentView方法并调用 Method method = clazz.getMethod("setContentView", int.class); method.invoke(object, layoutResID); } catch (Exception e) { e.printStackTrace(); }}private static void injectView(Object object) { Class<?> clazz = object.getClass(); //获取到所有字段并遍历 Field[] fields = clazz.getDeclaredFields(); for (Field field : fields) { field.setAccessible(true); //获取字段上的BindView注解 BindView bindView = field.getAnnotation(BindView.class); if (bindView == null) { continue; } //获取到viewId int viewId = bindView.value(); try { //通过反射调用findViewById失去view实例对象 Method method = clazz.getMethod("findViewById", int.class); Object view = method.invoke(object, viewId); //赋值给注解标注的对应字段 field.set(object, view); } catch (Exception e) { e.printStackTrace(); } }}private static void injectEvent(Object object) { Class<?> clazz = object.getClass(); //获取到当前页年一切办法并遍历 Method[] declaredMethods = clazz.getDeclaredMethods(); for (Method declaredMethod : declaredMethods) { declaredMethod.setAccessible(true); //获取方法上的所有注解并遍历 Annotation[] annotations = declaredMethod.getDeclaredAnnotations(); for (Annotation annotation : annotations) { //获取注解本身 Class<? extends Annotation> annotationType = annotation.annotationType(); //获取注解上的OnEvent注解 OnEvent onEvent = annotationType.getAnnotation(OnEvent.class); if (onEvent == null) { continue; } //拿到注解中的元素 String setCommonListener = onEvent.setCommonListener(); Class<?> commonListener = onEvent.commonListener(); try { //因为上边没有明确获取是哪个注解,所以这里需要使用反射获取viewId Method valueMethod = annotationType.getDeclaredMethod("value"); valueMethod.setAccessible(true); int viewId = (int) valueMethod.invoke(annotation); //通过反射findViewById获取到对应的view Method findViewByIdMethod = clazz.getMethod("findViewById", int.class); Object view = findViewByIdMethod.invoke(object, viewId); //通过反射获取到view中对应的setCommonListener方法 Method viewMethod = view.getClass().getMethod(setCommonListener, commonListener); //使用动静代理监听回调 Object proxy = Proxy.newProxyInstance( clazz.getClassLoader(), new Class[]{commonListener}, new InvocationHandler() { @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { //最终执行被标注的方法 return declaredMethod.invoke(object, null); } } ); //调用view的setCommonListener方法 viewMethod.invoke(view, proxy); } catch (Exception e) { e.printStackTrace(); } } }}}复制代码使用@ContentView(R.layout.activity_main)public class MainActivity extends AppCompatActivity { ...

May 11, 2022 · 2 min · jiezi

关于经验:干货自己开发了一个starter如何轻松嵌入到使用不同版本的springboot框架的对接方

背景最近应公司需要,开发了一个公司外部共用的二方库包。这里科普下:什么叫一方库,二方库,三方库。在阿里巴巴出品的 泰山版《Java开发手册》 附 2:专有名词解释章节中有提到一方库:本工程外部子项目模块依赖的库(jar 包)依赖本工程外部的common模块,外面通常会定义一些所有模块都会用到的一些根底性能,比方全局异样码、分布式锁、对立响应实体等等二方库:公司外部公布到地方仓库,可供公司外部其它利用依赖的库(jar 包)在互联网公司通常都是分事业部的,而后会存在一个叫根底部门/根底核心的事业部,这个部门可能会提供一些公司的根本类库,eg:mq相干的对立的amqp操作、rpc相干的对立的dubbo操作等等。最终这些都会以jar包的模式推送到maven仓库(公司外部须要搭建专有的maven仓库)。当初是spring boot的时代,如果公司用的是springboot这一套体系的话,这些jar包通常是以starter的形式提供,再利用springboot的主动拆卸机制,其余事业部能够很不便的对接。三方库:公司之外的开源库(jar 包)常见的springboot、mybatis因为公司外部应用的是springboot相干的技术栈,因而,我开发的二方库包是以starter的形式提供的。整个对接流程只须要两步: 1、须要将二方库包推送至maven仓库 2、其余事业部只须要增加二方库包的maven坐标 这里会有一些小细节:二方库包是一个我的项目工程,也会依赖一些二方库、三方库的状况。通常,二方库外部依赖的jar包的scope都会设置为provider(默认零碎曾经提供,不将二方库包外部依赖的jar包与对接方的我的项目耦合),然而不乏会呈现对接方无增加过相干依赖的状况,因而须要增加合乎对接方零碎版本的依赖。接下来,将以一个springboot引入spring-kafka的案例来了解如何找到适合的spring-kafka版本。 一、为什么maven会找不到spring-kafka的版本?假如这么一个场景:我开发的二方库包应用到的技术栈是springboot,外部开发的其中一个性能须要依赖spring-kafka的三方库。家喻户晓,springboot为咱们提供了及其舒服的开发环境,当咱们引入springboot框架后,它外部曾经定义了合乎以后版本的所有三方库依赖。因而,假如咱们要引入spring-kafka模块,只须要在pom.xml文件中增加如下坐标即可: <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.4.4</version> <relativePath/> <!-- lookup parent from repository --></parent><!-- 只须要增加如下坐标即可,不须要指定版本 --><dependencies> <dependency> <groupId>org.springframework.kafka</groupId> <artifactId>spring-kafka</artifactId> </dependency></dependencies>在上述引入spring-kafka 模块时,咱们没有指定version也能够应用。这是因为spring-boot-starter-parent外部的dependencyManagement中定义了spring-kafka的依赖,作为子模块,只须要引入即可,版本号会默认继承父工程中的定义。如果对接方应用的是springboot 1.4.1.RELEASE版本,这个时候,再应用同样的形式来引入spring-kafka的话,你会发现,maven找不到spring-kafka的版本: <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.4.1.RELEASE</version> <relativePath/> <!-- lookup parent from repository --></parent><!-- 只须要增加如下坐标即可,不须要指定版本 --><dependencies> <dependency> <groupId>org.springframework.kafka</groupId> <artifactId>spring-kafka</artifactId> </dependency></dependencies>其大抵的起因就是:在spring-boot-starter-parent中外部并没有依赖过spring-kafka,因而无奈继承父类定义的版本,最终maven会提醒找不到对应的版本。对接方始终以springboot 1.4.1.RELEASE版本失常开发,不可能为了集成你的二方库而降级springboot版本吧?因而,咱们须要为对接方找到适合的spring-kafka版本。 二、如何找到springboot 1.4.1.RELEASE外部的依赖其中最简略的一种办法就是在idea中找到对应的pom文件定义,这是一种形式。然而作为一个二方库提供者,后续可能会常常要解决因业务侧springboot版本不同而导致无奈引入spring-kafka的问题。难道咱们要本地每次批改maven中springboot的版本,通过maven下载后再应用idea查看吗?这显然有点麻烦。还有一种做法是找官网springboot 1.4.1.RELEASE的文档,但连maven依赖中都没有波及kafka,大概率是此版本没有集成kafka。另外一种做法就是:参考此链接https://repo1.maven.org/maven2/org/springframework/boot/spring-boot-dependencies/。在此链接中,是springboot的所有版本的依赖,当初咱们要看1.4.1.RELEASE版本的springboot外部依赖了哪些类库,咱们能够这么定位: 定位版本 查看依赖pom文件 长于搜寻(搜寻spring-kafka) 能够看到,在springboot 1.4.1.RELEASE版本中外部并没有依赖spring-kafka。此时该怎么办呢?将springboot版本升级,持续往后搜寻,最终你会发现,在1.5.0.RELEASE版本中外部开始依赖了spring-kafka。因而,咱们能够尝试,在maven中引入查找进去的版本1.1.2.RELEASE 对应的pom.xml文件为 <dependency> <groupId>org.springframework.kafka</groupId> <artifactId>spring-kafka</artifactId> <version>1.1.2.RELEASE</version></dependency>在这种场景下,引入**1.1.2.RELEASE**版本能够解决问题,对接方的零碎也能失常工作。兴许这种形式在其余场景不实用,但这的确是一种形式,咱们能够通过https://repo1.maven.org/maven2/org/springframework/boot/spring-boot-dependencies/链接找到每个springboot版本外部依赖的三方库,这比咱们在idea中批改版本号再下载对应的版本不便的多。三、总结一种定位依赖版本的另外一种解决方案,如果你感觉我的文章有用的话,欢送点赞、珍藏和关注。I'm a slow walker, but I never walk backwards

June 11, 2021 · 1 min · jiezi

关于经验:如何在网上找到自己想要的东西

基本上每个网民天天都在做的事件可能就是搜寻了,作为程序员则用的更多。本文不深刻具体的细节,从几个大方向聊一聊怎么在网上找到本人想要的货色,因而这些准则不仅仅对搜寻技术材料有用,对一般性的货色如搜寻电影、软件等都能够参考。 应用英文材料除了某些特定的内容,大部分状况下互联网的英文材料都比中文要好,尤其是计算机类的材料,次要有以下几个起因: 中文搜索引擎做得不好,懂得都懂国内互联网厂商更重视挪动端,且相互之间流量隔离(即私域)大部分计算机技术(编程语言、框架、软件)是国外创造的,原始材料就基于英文,比中文N道贩子品质高其余起因还有很多,感兴趣能够看看知乎为何中文互联网绝对英文互联网的内容品质较低?。如果英文不太好的同学,能够借助一些翻译工具,浏览器翻译插件等,顺便能够晋升本人的英语水平。 用好搜索引擎大部人应用搜索引擎,就是把须要搜寻的内容复制粘贴到搜寻栏,而后点击搜寻。实际上应用搜索引擎也有很多小技巧,这个在网上曾经有很多人总结了,举荐看这一篇Google高效搜寻的20个技巧。我总结一下大抵有这几个方面: 搜寻关键词而非语句,尽量去掉有效的关键词能够使后果必须蕴含或者不蕴含哪个关键词,或者必须蕴含多个关键词能够搜寻特定格局的文件能够搜寻指定网站的内容关注和珍藏有些内容可能比拟冷门,即应用好了搜寻也很难找到。这里就须要本人平时多关注和珍藏了,说得高大上一点,就是构建本人的常识索引体系。原则上,就是依据本人的业余,把平时看见的各类有价值的内容整合到一起,不便后续查看。形式上,从简略的浏览器书签到相似印象笔记这种多平台同步的工具都能够。 这里举个例子,有时候我须要录制电脑屏幕的软件,但不论是在百度还是Google搜寻录屏或者Record Screen,进去的要么是各种付费录屏软件的广告,要么是十几种录屏软件的比照,对于一个只想轻量级应用一下录屏的人来说基本无从选择。直到有一天逛知乎,看到一篇冷门的文章,举荐了一款开源轻量又功能强大的软件完全免费且功能齐全的录屏工具——Captura,一下子就解决了问题。这阐明有时候很多优良的货色不肯定是热门和火爆的,深刻关注相干畛域的内容和做好珍藏也很重要。 踊跃原创最初的最初,如果你真的发现无论应用什么办法都无奈在互联网上找到你要的货色,那意味着你发现了互联网上的一篇空白区!那就尽本人的能力去填补这一片空白吧,无论是写文章发博客,还是公布一个开源程序,能够为起初人做奉献,同时对本人也是一种晋升。

February 23, 2021 · 1 min · jiezi

既然硕士毕业也去搞开发那还去读研值吗

“ 好多人读了研,结果还是去搞开发了,是不是血亏啊? 都读了硕士还是去做开发岗,那我还读个喵的研啊? 读研的意义究竟是为何?到底能学到啥? 我到底要不要上船? ... ” 这是经常在私信、X乎、或者论坛里看到小伙伴们所经常讨论的一个话题,而且探讨这个问题的小伙伴很多都是观望并准备上船的仔。 正好今天又周末了,准备聊一聊这个话题,顺便烹制了一些鸡汤,小伙伴们不要客气。 01、既然要比划,那就先拿自己开刀,先来聊聊我自己身边的一些真实情况吧。 就以我当年毕业时实验室同学的就业情况为例。 我自己导师手下毕业的小伙伴共5个,有两个去了某互联网厂做开发,有一个去了某通信厂的销服岗,另外一个也去了某通信厂,不过也是做开发,有且仅有一个小伙伴去了某算法研究院继续做图像相关的算法。 这样算下来,从事老本行图像相关算法研究的也只有一个,不严谨的计算也就是只有20%的比例。 很明显了,本菜羊也是沦落为搞开发的社会底层钓丝Coder之一。毕竟能力有限,算法做得没心得,只好找借口说自己对开发感兴趣,结果真的在靠开发养家糊口。 工作一段时间后,接触了一些人,应该说身边的硕士研究生做开发、做产品的还是居多一些,搞算法研究或者偏底层一点研究的人比例还是稍微少一些。 02、既然这样,那搞开发真的需要研究生学历吗? 有一说一,编程开发真的重点看技术能力。在技术能力具备的前提下,学历对于编程开发来说或许没有那么重要。 最起码适合咱大部分普通人的「开发类岗位」对学历的要求没有那么高,最起码在招聘要求中本科学历基本足够了;只有少部分算法岗、大数据岗或者基础研发类岗位等,才有对硕士及以上学历的要求。 所以在现如今本科生非常普遍的情况下,本科学历应该是就业的基础学历壁垒了,所以为什么说专科小伙伴们有机会能升本则尽量升本,也就是这个意思。 03、聊到这里有些人不禁心生唏嘘,尤其是已经上船了的小伙伴,那我假如以后也去搞开发了,那读这个研还有个喵的意义啊?我鮳,我这不是浪费生命吗? 不知道小伙伴们有没有看之前B站的 「Rebuild 2020 科技全明星对话」 的节目,我认真看了一下 「雷军对话何同学」 那一期: 我注意到雷军先生在谈到大学学习的意义时提及了一个大家可能都会思考或彷徨的一个问题: 仔细想想会发现,这个问题和我们标题所聊的话题也有着很大的共性。 首先不管是正在读研的,还是观望中准备读研的小伙伴们必须要明确的一件事情就是:读研阶段是没有人会教我们就业相关的技能的,导师也不会。如果抱着这个期待上船,大概率会失望。 读研阶段泡在实验室里做“科研仔”的小伙伴们不在少数。有时候想想,其实像我们工科类读研的也算挺幸运了,或多或少总能接触点就业技能或者项目氛围,但是很多学科的研究生大部分时间的工作,可能都是如下这样的类似流程: 尤其是过程中的失败几乎是常态,而失败后的重复过程就显得倍感压力和枯燥,提不起兴趣也是狠正常的。 这时候就会引发芸芸众生的我们,日常焦虑和思考一个人生问题,那就是: 做着自己并不一定感兴趣的东西真的有用吗?我付出的时间和精力会白费吗?我个人觉得这倒未必,就像上面雷军先生说到的一样,当我们走向工作岗位以后,读研学到的专业技能和科研知识并不一定能派得上用场,专业对口的概率很小,但是这个过程中所训练到的一些基本能力和基础素养却将直接影响整个职业生涯的发展高度,包括但不限于: 自主学习的能力检索知识、归纳总结的能力坚持、抗压、交付力和抵抗孤独的能力沟通、协作、表达以及写作能力所以只要用心了,白给是不可能白给的。 实际工作几年下来,接触过不少小伙伴,既有本科生,也有研究生。抛开特例不谈,个人感觉即使就开发岗这一块来说,硕士出来的小伙伴的系统学习能力、发现和分析问题的能力,以及归纳总结的能力一般都不错,这样在岗位中也就更容易脱颖而出了。 所以如果抱着这样的心态去面对我们日常可能焦虑的「有用论/无用论」问题,内心是不是就稳多了。 04、还记得以前念书时,校园里偶尔听到的一句很“社会”的学谣是:“金本科、银硕士、破铜烂铁是博士”。 老实讲这话听起来有点扎耳,尤其对于已经在围城中读研的小伙伴来说。但实不相瞒,每次听到这句话基本都是从博士师兄口里说出来的。当然,我也知道博士大佬们苦中作乐,表面上一句不羁的玩笑谦虚自嘲,实则共励共勉。 的确,即使读了研也不要太高看自己,更不要有太重的心理包袱。 咱们大多数都是普通人,没必要在「别人的眼光」或者「其实可能不适合自己的标准」里徐图前行。客观地衡量自己的优劣势和兴趣点,并结合当下可能的机会,选一个适合自己的务实方向可能更有利于个人的长期发展,至少我个人是这么觉得的。 所以回到本文一开始所探讨的话题,谁说研究生毕业就不能做开发了,非得张口闭口:人工智能;机器学习;人在月球,刚下时光机;年薪50W打个底... 即使是做开发,其实也有很多值得研究的东西,深度和广度都有很大的学问,职业的发展也有相当大的可能。 05、最后聊着聊着,又回到了那个亘古难题,那我到底要不要考研呢? 不说了,可以参考之前聊过的文章:[《到底要不要考研?》](),其已经收录在开源项目JavaCollection中了,里面包含有自学编程学习路线、面试题/面经、心路历程、以及系列技术文章集合,资源持续更新中... https://github.com/hansonwang99/JavaCollection每天进步一点点 慢一点才能更快

June 23, 2020 · 1 min · jiezi