谈谈t型人才

李洪强 李洪强     2022-08-06     389

关键词:

谈谈 T 型人才

昨天的图片发模糊了,正好我把这个话题展开聊一聊吧。这个话题是关于复合型人才的,我把它称作 T 型人才。

「全栈」工程师

前一段时间,「全栈」工程师的概念很火,不过大多数时候,「全栈」工程师指的是一个人同时写 Web 前端和后端,顶多加上一些运维工作。通常情况下,我很少见到一个人能够同时写 Web 前端 + 后端 +iOS 端 +Android 端。

在猿题库(我们现在改名叫猿辅导了)创业初期,我曾经试图同时写 iOS 和服务器端,但是我很快就放弃了。因为当时服务器端的代码量还是很大,同时有好几个人在编写。有些时候我需要加逻辑时,会涉及到他们的代码修改,这个时候我就会需要花费额外的精力来看懂他们原来的逻辑。

当时正值创业初期,我们的 Code Review 并不严格,代码的相关设计文档也不多,我只能通过阅读源码来跟上另外几个服务器端开发同学的逻辑。很快我就放弃了,因为在创业阶段,效率是第一位的,同时做 iOS 和 服务器端,使得我在服务器端不够专注,效率变得低下。

从那之后,我就意识到,「全栈」工程师可能最适合的场景就是 Web 前端 + 后端的偏前端的逻辑。因为那个场景下,前端工程师可以省掉沟通接口的时间,也可以自己统一前后端的模版,甚至他可以尝试统一语言,同时用 JavaScript 写前后端(在后端使用 nodejs)。

而在别的职位上,是很不适合全栈的,因为这样工作产出会下降。

T 型人才

那我为什么又想聊 T 型人才呢?是因为我觉得 T 型人才和全栈不一样。在我看来,T 型人才有一门自己擅长和精通的语言,同时又有足够宽的视野,使得他在合作的时候,能够更多地站在对方的立场上考虑问题。

打个比方,做过服务器端开发的同学,再转而做客户端开发,就会更加注意 Restful 接口的设计合理性。相互之间协商接口时,知道什么样的方式服务器端好实现,什么样的方式不好实现,然后定出来的接口就会让对方非常舒适。

与此同时,T 型人才对于自己理解和学习新东西,也是有很大帮助的。我之前做过 Java 语言的服务器端开发和 JavaScript 语言的前端开发,之后才转做 iOS 开发。各种语言和开发环境接触多了就发现:其实很多概念都是相通的。我想我之所以当时学 iOS 开发上手那么快,也是由于在别的语言上有积累。

其实对于移动开发来说,iOS 和 Android 也有很多相同的概念,比如 iOS 的 UIViewController 和 Android 的 Activity。当然,它们也有很多不同的技术细节,比如对界面排版设计,iOS 因为设备屏幕单一,所以刚开始选择了简单的绝对定位,后面选择了 size class 的方式。而 Android 因为屏幕分裂严重,所以选择了更加流式的排版设计。

iOS 因为追求界面的流畅和性能,选择了引用计数这种相对麻烦的内存管理方式,而 Android 因为需要借力 Java 语言本身的生态和苹果竞争,所以采用了垃圾回收这种会带来潜在卡顿风险的内存管理方式。
每年的 Google IO 大会出现的新技术,并不比 WWDC 逊色。今年 iOS 10 的一些改进,也看到了不少 Android 的影子。

如何成为 T 型人才

那么如何成为 T 型人才呢?我们老大郭常圳想了一个办法:轮岗。轮岗的意思是,当你成为某一方面的专家后,跳出自己的舒适区,转而到一个新的技术领域从头学起。

在我们公司,很多早期员工都经历过轮岗。比如我曾经从服务器端转到前端和 iOS 端,也是轮岗这个激励带动的。yangyz 从服务器端转到 Android,xuhf 从 Android 转到服务器端,zhangyc 从 Web 前端转到后端。每一个轮岗工作,都是对我们极大的挑战,但是让我们都成长为 T 型人才。

但是,轮岗的意思绝不是做一个技术方向「三心二意」,每一次转换技术方向,都应该是对前一个技术方向至少做到熟练掌握的程度才行,而我自己觉得,不经过一到两年的实践,很难称作熟练掌握。所以,轮岗的行为应该是低频的,而且是面向那些最优秀的开发者的。

这一点有点像大学的换专业,在我们学校,大一的学生可以在一学期后申请换专业,但是前提是这个同学在愿专业成绩达到前 10%。

换专业和换技术方向一样,机会只会给做得最好的人,公司不会因为一个人在 iOS 开发上做得不好,就把他轮换到别的开发岗位。

内卷?谈谈ai算法人才职业发展

作者丨Felicia温利方募齐人才(已授权)来源丨https://zhuanlan.zhihu.com/p/501367157AI派导读 AI硕博如何规划自己,才能拿到specialoffer?现在还能去中国企业的AIlab/研究院?35岁是不是可怕分水岭?如果不想在算法... 查看详情

3星|《3大特质,锁定创业型人才!》:对新体验保持开放心态,是创业型领导者的特质

3大特质,锁定创业型人才!(《哈佛商业评论》增刊)《哈佛商业评论》关于创业型领导的4篇相关文章。不提写作时间与发表渠道。第一篇不错,讲创业型领导的特征与常见误解。总体评价3星,有参考价值。以下是书中一些内... 查看详情

java--每日一问:谈谈你知道的设计模式?

典型回答大致按照模式的应用目标分类,设计模式可以分为创建型模式、结构型模式和行为型模式。创建型模式,是对对象创建过程的各种问题和解决方案的总结,包括各种工厂模式(Factory、AbstractFactory)、... 查看详情

结合css3的布局新特征谈谈常见布局方法

写在前面最近看到《图解CSS3》的布局部分,结合自己以前阅读过的一些布局方面的知识,这里进行一次基于CSS2、3的各种布局的方法总结。常见的页面布局在拿到设计稿时,作为一个前端人员,我们首先会做的应该是为设计图大... 查看详情

kotlin泛型①(泛型类|泛型参数|泛型函数|多泛型参数|泛型类型约束)(代码片段)

文章目录一、泛型类二、泛型参数三、泛型函数四、多泛型参数五、泛型类型约束一、泛型类定义一个泛型类,将泛型参数T放在尖括号<T>中,该泛型参数放在类名后,主构造函数之前,该泛型参数T是类型占位符,在该泛型类类中... 查看详情

kotlin泛型总结★(泛型类|泛型参数|泛型函数|多泛型参数|泛型类型约束|可变参数结合泛型|out协变|in逆变|reified检查泛型参数类型)(代码片段)

文章目录一、泛型类二、泛型参数三、泛型函数四、多泛型参数五、泛型类型约束六、可变参数vararg关键字与泛型结合使用七、使用[]运算符获取指定可变参数对象八、泛型out协变九、泛型in逆变十、泛型invariant不变十一、泛型... 查看详情

ts泛型函数(代码片段)

...ionfoo<T>(x:T):Treturnx; 箭头函数然而不能使用箭头泛型函数:constfoo=<T>(x:T)=>T;//Error:T标签没有关闭解决办法:在泛型参数里使用 extends 来提示编译器,这是个泛型:constfoo=<Textends>(x:T)=>x; & 查看详情

泛型方法

publicTMyMethod<T,S>(Tt,Ss)objecto=t.ToString()+s.ToString();return(T)o;strings=MyMethod<string,int>("45",56);//s=4556;将字符串转为泛型类型T value = (T)Convert.ChangeType(str,  查看详情

java泛型知识总结篇(代码片段)

泛型与内部类非静态内部类会自动继承外围类泛型参数,对于非静态内部类,无需再次声明泛型参数静态内部类不会自动继承外围类泛型参数(事实上,Node中的泛型参数与MyLinkedList中的没有任何联系,只是这里使用相同的符号T而... 查看详情

TypeScript 中具有泛型类型参数的泛型类型的替代方案

】TypeScript中具有泛型类型参数的泛型类型的替代方案【英文标题】:AlternativesforagenerictypewithgenerictypeparametersinTypeScript【发布时间】:2021-06-1110:28:23【问题描述】:假设我有两种类型的泛型函数,它们的返回类型不同。一个有返... 查看详情

8.4泛型方法(代码片段)

目录一、定义泛型方法二、泛型方法和类型通配符的区别三、"菱形"语法与泛型构造器四、泛型方法与方法重载五、类型推断一、定义泛型方法所谓泛型方法,就是在声明方法时定义一个多个泛型形参。泛型方法的语法格式:修... 查看详情

打字稿泛型类型 T toString

】打字稿泛型类型TtoString【英文标题】:TypescriptgenerictypeTtoString【发布时间】:2018-04-2716:57:28【问题描述】:我认为不可能,但值得一问。在泛型方法或类中,我想记录已使用的泛型T类型的名称,我需要它作为字符串。想象一... 查看详情

C#10 - 使用类型 T 切换泛型方法

】C#10-使用类型T切换泛型方法【英文标题】:C#10-usingthetypeTtoswitchinagenericmethod【发布时间】:2021-11-0921:49:21【问题描述】:关于如何在旧版本的C#中打开类型有很多答案。我的问题与如何打开泛型方法中调用的类型有关:publicTGet... 查看详情

t型加速算法fpga实现思想研究

用加法器实现T型曲线的理论分析 // 2017年12月28日    建立bycofin T型加速曲线公式:如下所示: Vt=v0+at               (1) 查看详情

如何为 Sequence[T] 提供泛型类型参数?

】如何为Sequence[T]提供泛型类型参数?【英文标题】:HowtoprovidegenerictypeparametertoSequence[T]?【发布时间】:2017-12-0611:13:59【问题描述】:我正在尝试在Python中创建一个存储T类型元素的列表,但是,我不知道如何为此类列表的实例... 查看详情

从泛型类型 T 中获取“类”对象

】从泛型类型T中获取“类”对象【英文标题】:Get"Class"objectfromgenerictypeT【发布时间】:2021-09-2606:18:35【问题描述】:我想创建返回XML文档的对象表示的通用函数(使用JAXB)。我需要将“类”对象传递给JAXBContext构造函... 查看详情

如何仅通过泛型类型 T 创建实例 [重复]

】如何仅通过泛型类型T创建实例[重复]【英文标题】:HowtocreateaninstancejustbygenerictypeT[duplicate]【发布时间】:2017-07-2712:28:46【问题描述】:我想通过定义泛型类的类型来创建一个实例publicabstractclassBase<T>privatefinalTgenericTypeObjec... 查看详情

泛型约束中的 F# 错误

】泛型约束中的F#错误【英文标题】:F#erroringenericconstraint【发布时间】:2018-02-2003:45:42【问题描述】:以下F#代码letf&lt;\'Twhen\'T:(memberId:int)&gt;(t:\'T)=t.Id不被接受,并出现以下错误:错误FS0670此代码不够通用。类型变量^T当^... 查看详情