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

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

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

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

怎么样才算熟练掌握了这一门技术?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』的疑惑了。

结语

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

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

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

本作品采用《CC 协议》,转载必须注明作者和本文链接
摈弃世俗浮躁,追求技术精湛
本帖由系统于 4年前 自动加精
Summer
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
讨论数量: 20
Epona

应用型工程师在采到坑以后也会研究底层的一些原理来填坑,所以并不是说应用型工程师就不需要研究底层了。比不过底层研究的东西相对少一些

4年前 评论
Epona

应用型工程师在采到坑以后也会研究底层的一些原理来填坑,所以并不是说应用型工程师就不需要研究底层了。比不过底层研究的东西相对少一些

4年前 评论

创业公司发展起来后,产品也会慢慢过渡到科研型应用的,应用型人才最后还是会被强制过渡到科研型。

4年前 评论
一念沧海一念桑田 4年前

有什么好的创业方向么。。。

4年前 评论
No_Panic

是不是对不求甚解理解反了?

4年前 评论
Summer (楼主) 4年前
JimmyLzy 4年前
Dennis_Ritchie

文章写的不错,但是无论是对于开发型的,还是对于科研型的,了解更多的底层知识,无论在解决问题的能力方面还是学习其它领寓的知识,都具有无法比拟的优势,一眼看穿本质,总归是好的,而且学习起来更轻松。这在我初中学习英语的时候,映象最为深刻,我们英语老师经常教我们如何拼英语单词,一个学期之后,再也不需要别人教我们读单词了

4年前 评论
小李世界 4年前
白小二 4年前

这个写的好

4年前 评论

醍醐灌顶啊 :see_no_evil: :see_no_evil: :see_no_evil:

4年前 评论

我:80% 科研型与 20% 应用型,混搭确信。

4年前 评论
Squ1rrel

哥,不求甚解现代汉语多为贬义了。

4年前 评论

世界级顶尖的 黑客 算什么领域?

4年前 评论
L学习不停 4年前

我从最初的功能开发到现在大部分时间都在为项目的通用功能开发新组件 :smile:

4年前 评论
白小二

应用型工程师毕业之后北上广可以拿多少薪资啊,能有10k吗?我高中学历,我现在购买了你的课程,学完了在包括我自身做过的cms,erp跟棋牌游戏(半成品)也算是有5种类型,7个项目经验了,3个php框架了吧,当然学完得是半年后的事了,因为我想细细的学

4年前 评论
白小二

应用型工程师对php源码,设计模式,项目架构都会了解不少,算法,php的c语言拓展,编译原理相对来说就很少接触

4年前 评论

不是软件外包公司,,,哪里能接触那么多项目?

而且怎样才认定为独立完成?一个人完成一个项目?很少有这样的“机会”吧,,,

像我现在的公司,有的老员工,呆了两年多了,,,公司就一个产品,当然产品包含 3 个 APP,是一套的,,

4年前 评论

好项目 好团队 无论技术型和应用型 才能发展 发挥的更好

4年前 评论

终于给我说明白了,我做开发一直的目的就是做产品,将来做自己的产品。。所以一直将自己打造全栈的,前端,后端,运维,测试、、一条龙、、哈哈

4年前 评论
任飘渺

推荐下这个视频对程序员定位和学习也有帮助(珍藏) 之前还有一个在谷歌工作的讲述普通程序员和精英程序员区别 可惜找不到了

作为CTO给想学计算机的新人的干货建议 | Nathan Rich 火锅大王 https://www.bilibili.com/video/BV1zb411J7c...

3年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!