大多数程序员都是被屏幕包围的。
在家里,一台笔记本电脑外加一块34寸的显示器是标配;在公司,受限于办公条件,程序员们也会想方设法用两块甚至更多显示器来拓展视野。
即便如此,很多时候他们仍然觉得屏幕不够用,恨不得将所有信息都铺开来一览无余。
这是为什么呢?有人曾经问我:“为什么没有程序员用手机编程?”
这其实与程序员的工作性质有关。
程序员如此“贪恋”屏幕,是因为他们需要同时处理的信息量实在太大了。
日常工作中,程序员往往需要打开十多个应用程序:多个IDE用来编程、命令行窗口执行各种命令、ssh终端登录到服务器查看日志和执行操作、刷硬件、查看芯片串口终端、用记事本记录临时信息、用sftp上传各种资料、用各种文档阅读器查看开发手册和厂家协议,当然还有浏览器,用来查询各种知识点。
而且,只要是支持多窗口的应用,他们都会尽量多开几个窗口,以便在不同任务之间快速切换。
面对如此海量的信息,别说手机了,即使是单屏,如果不停地切换应用,也会让人疲惫不堪,效率低下。
很多人以为程序员的主要工作是编程,其实不然。研究和分析才是占据他们大部分时间的工作内容。
程序员需要了解、理解、学习、借鉴和掌握与需求相关的所有知识和技术细节,然后梳理出三个关键要素:
● 业务逻辑
一个需求反应到业务上,需要哪些功能模块参与、它们是如何协作的、交互顺序是什么样的、各自都有什么样的约束和资源需求。
● 系统架构
前面铺开的业务逻辑,最终需要收拢到系统架构中。程序员需要分析系统的构成要素、运作机制、资源需求和约束条件,即系统的动态、静态、开销和约束。
● 知识点和技术细节
程序员需要掌握所有参与者的知识点和技术细节,尤其是涉及接口侧的,必须完全掌握。
根据需求的复杂程度、对系统的了解程度以及对各知识点的掌握程度,这三者的完备程度自然有所不同。
如何平衡这三者来协调成本、时间、产出和风险,就是开发方法论的精髓所在。
所以说,程序员首先是工程师,而工程师的职责是解决问题。
编程只是解决问题的工具之一,而对问题的认识、研究和分析能力,才是解决问题的关键,而这些能力与编程本身并没有直接关系。
掌握了问题的认识、研究和分析能力,即使工具升级换代,也能很快学会并应用;即使行业发展变化,也能换个行业继续发光发热,一直干到退休都没有问题。
反之,如果只关注编程技巧,而没有掌握问题的认识、研究和分析能力,那就不能称之为工程师,只是一个熟练的技工罢了。
这样的技工只能按照工程师给出的解决方案来施工,一旦新工具出现、解决方案变化、生产力跟不上,自然就会被淘汰,逃不过“35岁危机”。