宽泛的意义上讲,程序员是这样一群人:他们用某种语言或技术,开发某种软件产品(系统),解决特定现实领域的问题。
有了这个定义,我们就可以来讨论程序员的几种常见定位:
1 解决某类问题的专业人士 2 软件架构与设计 3 技术专家 4 技术传播与布道
解决问题的人
我到底能够解决什么问题?给别人带来什么样的方便?
这是每个程序员首先要考虑的问题。这决定了你要在什么样的领域、什么样的公司工作,决定了你做什么产品,也决定了你要选择什么技术。
比如你想提升远程办公的效率,那可能就会去做与协同办公、沟通、项目管理等相关的产品,像 Slack、TeamViewer、蜜蜂(全时的产品)、钉钉等。
比如你想解决访问国外网站的问题,那可能会去做 VPN 类产品;
王江民想解决安全问题,结果单人独骑白衣飘飘,带着江民杀毒在中关村创造了一场神话。
当年梁肇新想解决电脑播放 VCD、DVD 的问题,于是就有了豪杰超级解霸的传奇。
张小龙想解决邮件收发与管理的问题,才有了 Foxmail,有了 Foxmail 的成功,才有了后来进入腾讯,才有了微信。
一旦你把自己定位成解决某一类问题的人,聚焦到某一个领域的具体问题,那么接下来的一切都顺理成章,你会很容易就能了解到解决这类问题需要什么知识、业务、技术,然后你就可以充满动力地去学习,去准备。
当然,你也可能因此脱离具体的技术去做管理工作,甚至去创业,用你的技术来打造能够解决特定问题的产品或服务。
所以,这个定位其实是一种元定位,可以衍生出其它的方向。
软件架构与设计
相对于把自己定位成解决某类问题的人,有的朋友可能更感兴趣如何做出一个复杂的软件系统,对实现这个系统的过程更感兴趣,也愿意不断去设计、实现各种各样复杂的系统,反复地挑战自己。
那他可能给自己的定位是架构与设计。
这也是很多程序员的梦想:做一个真正牛 B 的架构师,体验运筹帷幄与庖丁解牛带来的超强成就感。
比如你定位到大型网站的架构与设计。那你就可能去学习 Java、http、数据库、分布式、云计算、大数据、Docker 等各种技术,以及常见的网站架构(参考李智慧《大型网站技术架构:核心原理与案例分析》),然后到一个正在发展(或者已具规模)的电商类公司去跟着公司一起成长,铸就自己的架构之路。
技术专家
就像教育的目的是为了让每个人都成为自己想成为的样子,但实际上教育本身却成了一种产业,考试也成了一种产业。软件开发也是类似的:技术是用来创造软件系统(产品)以便解决现实问题的,但实际上围绕技术本身也形成了新的产业。
比如技术培训,比如各种技术认证,比如技术图书……
所以,也有很多程序员把自己定位在技术本身,寄望于成为某一个特定技术领域的专家,建立自己的顶端优势,从而成就自己。
比如有的人专攻 Hadoop,有的人专攻 Docker,有的人就是把 OpenGL 用的很溜,有的人在视频编码上有很深的造诣,还有的人成了 Go 语言专家,还有的人调试技术特别牛(比如《软件调试》和《格蠹汇编》的作者张银奎,膜拜一下)……
当你在某个技术领域有深入的研究,形成了优势,你就可以把这种扎根于技术的优势复制到各种领域去解决各种问题。这也是非常好的道路。
技术传播与布道
我想来想去,自己的位置非常尴尬……
因为我既没有把自己定位到解决什么问题上,也没有成为架构师,更没有在某个领域成为骨灰级专家……
所以我只好安慰自己说,Ok,我想做的是:如何更好地帮助初学者学会一种技术,跨越从不了解到会应用这种技术解决问题的过程。
Ok,这就是技术传播与布道的定位了。
所以,从这个定位出发,我会写一些入门级的博客文章,讲述某种语言、某个技术点如何用,什么包括环境配置等不那么有技术含量的文章,也会写一些技术图书来帮助别人(比如《 Qt Quick 核心编程》和《 Qt on Android 核心编程》),然后我还录了一些入门级的视频课程……
当然这个定位也可能催生一些产品,类似 Codecademy、计蒜客、萌码、慕课等。
我有一段曾经迷惑过:作为有多年开发经验的程序员,还在博客上撰写入门级的技术文章,合适吗?当我用这个定位合理化了自己的行为后,居然不困惑了。
程序员的迷茫与解脱
很多程序员都很迷茫,学了一两门语言,做了三五年开发,不知道接下来该怎么办。
这就是定位的问题:找不到自己的定位,是迷茫的根源。
现实情况是很多人说自己是 Java 开发,前端开发,C++开发,但你真的是把自己定位到语言与技术这个层面了吗?还是说,你其实并不打算成为技术产业的一份子,只是除了“熟悉某种技术”,并不知道自己要走向哪里?
请思考一下,在信息的汪洋大海中遨游时,你的方向在哪里?
……
当你把自己定位成技术专家,那你就会努力在某个方向上建立自己的知识图谱,形成顶端优势。这条路漫长而艰难,可能三年五年,也可能八年十年。比如李飞飞聚焦在图像识别这个方向,取得了令人瞩目的成就,现在正在把图像识别嫁接到各种领域去解决实际的问题。
……
当你把自己定位成解决问题的人,那 Java、C++、Spark、Docker、区块链这类技术层面的东西,就不再会困扰你,需要什么,你可能就会去学习什么,你培养的,是自己解决问题的思维和框架,是拿到任何的问题,都能快速发现解决之道。
这种定位,还可能会引领你走出具体的技术工作,转型去做管理,因为带领一个团队,可能会更有助于你去解决更大更复杂的问题。
定位能够产生目标,目标会让你聚焦在一个方向上,远离迷茫。所以,只要你根据自身的实际情况,找好定位,就拥有了摆脱迷茫的银弹。