程序员的定位:『应用型工程师』或『科研型工程师』

社区里经常看到新人有类似的困惑:

做过一些项目,算入门了,现在找不到学习方向,该怎么办?

以上与下面这几个问题有相似之处:

怎么样才算熟练掌握了这一门技术?Laravel 开发怎么样我才会算学会了?

这些疑问属于我们程序员的焦虑。至少我之前也焦虑过很长的一段时间,后面随着工作中项目经验的积累,慢慢会变得从容点了。不过每到学习新的语言,或者新的技术时,就会再度陷入这个焦虑。思考的多了,偶尔也会总结下,在此分享此观点希望对同样困惑的你有所助益。

两个方向

我喜欢把编程的方向分为以下:

  • 应用型
  • 科研型

应用型 关键词是『应用』,以 Web 开发为例如:博客、CMS、论坛、电商(B2C, C2C)、CRM、企业内部管理系统、视频、实时聊天、直播、外卖等。跟现实生活比较贴近的,能通过编程来实现产品功能,以此来改进社会生产效率的领域。

科研型 例如在以 PHP + Laravel 为主的 Web 开发中,专注的话题有程序内部架构、设计模式、算法、编译原理、PHP 源码、PHP 原生 C 编写扩展等。这些比较抽象,相比应用来讲比较『抽象』,经常被我们称为『底层』的领域。

关注点不同

应用型工程师 主观上把技术当做工具,重点放在如何利用技术去实现产品的商业逻辑上。不拘泥于技术细节,专注点在于要做出来的东西上。

科研型工程师 对技术的态度是追本溯源,他们熟知 PHP 底层的运行机制、变量的底层实现、垃圾回收机制等,甚至接触 LAMP 常见技术堆栈的源码。关注的是代码执行效率和工程合理性。

能力区分

应用型工程师能力 的衡量标准有两点,『一是项目的类型要泛,另一个是项目量要多』。当然这些项目最好是独立完成编码或者参与了大部分核心技术架构的设计与实施,如数据库设计、API 机制的设计、技术堆栈的选型等。

以过往经验来看,应用工程师需要经历 5 个以上不同类型,10 个以上的项目才能算毕业。这些项目大部分情况下是自己独立完成的,他们需要对这些项目的技术构架都了如指掌,这要求在接触每一个项目时有意识的去主动学习。

科研型工程师能力 如果说应用型是『广』的话,科研型就是『深』。衡量标准是清楚知悉架构的缺陷,知道当现有架构出现问题时,如何优化。他们注重性能,深入研究各种周边技术。

例如 PHP 领域大拿鸟哥(博客 http://www.laruence.com/) 。鸟哥是 PHP 开发组核心成员,PHP7 主要开发者, Yaf(C 写的 PHP 框架), Yar, Yac 等开源项目作者。

舞台各异

应用型工程师 信条是『天下武功唯快不破』,擅长项目的快速开发和迭代。因此他们比较适合开疆扩土、快速推进商业项目上线的场景,创业公司尤其喜欢这类员工。他们也更能适应需求多变,技术堆栈灵活的工作状态。

科研型工程师 相对比来讲比较稳扎稳打。他们比较适合大公司。大公司一般都有比较稳定的盈利模式,商业逻辑变动一般不会不大,也就是说产品稳定。技术部门本着『不求有功但求无过』的思路,底层技术架构很少做太大的变动,再加上用户基数大(大流量)带来的高压环境,为深入研究技术提供了需求和条件,大公司也是培养 科研型工程师 人才的沃土。

如何选择方向?

决策的因素会有很多,例如个人喜好、特长什么(例如有些人逻辑推理能力强,有些人数学好,有人产品意识高),这些我们就不展开了。

这里推荐从自己的目标出发,也就是 :

你学编程的终极目标是为了啥?

如果你学编程就是为了以后某一天可以出来创业(你怎么这么想不开啊),做技术合伙人或者自己主导创业,然后走向人生巅峰 ~_~。大部分初创的科技公司技术负责人必备技能是:组建技术团队,并带领他们推进产品上线和快速迭代,熟知各种互联网产品的功能,以及清楚地知道这些功能的开发难度,懂得在开发效率和商业机会上权衡,懂得如何避坑。那么推荐你从现在把自己定位为 应用型工程师 ,然后开始积累项目经验。可以理解为打怪升级,不惜一切代价接触新项目,积累一个个的项目经验,10 个项目算毕业,30 个项目算资深。

如果你的目标是进大公司,也就是抱大腿走稳定路线,那么推荐你把自己定位为 科研型工程师。从今天开始死磕文档,把主要相关技术文档看很多遍,阅读各大开源项目的源码,可以尝试参与源码贡献和改进,或者写一些高性能的原生扩展。

怎么样才算熟练掌握了这一门技术?

方向选好后,就好办多了。

如果你是 应用型工程师 ,那么在你做了几十个项目后,一般项目中经常用到的技术,你都很熟练了,并且随着每一个项目经验的累积,眼界的提高,你也会越来越自信。

如果是 科研型工程师,不断深入,穷源竟委,长此以往几年十来年后也会有所建树。届时你的深入细致的博文,或者技术文献,或者开源影响力,都会成为你骄傲的成本,自然也就不会有『算不算掌握了 XXX』的疑惑了。

结语

区分两个方向后,有所侧重,相比同时学习两个方向,学习难度和耗时都会有所降低。再加上舞台各异,精准定位后,能更快实现个人目标,也算是让自己的人生更高效。

这两个方向也不会有冲突,应用型工程师 偶尔学习一些底层的技术,对自己的技能精进会很有帮助,而 科研型工程师 偶尔关注当下流行的产品应用,也可以避免陷入闭门造车的困境。

以上就是我的一些见解,关于这个话题大家有啥思考也可以给我留言哈。


Practice makes perfect.

讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!