PAGE / ZH-CN

关于我

大家好,我是施行。

施行的个人头像

从写代码到做项目:我的技术成长与角色转变

起点:编程世界的初体验

大学的时候,我最喜欢的一门编程语言是 C 语言。

那时候,我买了一本谭浩强的《C 程序设计》。我到现在还记得,那本书好像是绿色封面。刚开始学习的时候,觉得编程很神奇:几行代码,就可以让计算机按照自己的想法运行。

变量、循环、判断、函数,这些内容虽然陌生,但还能一点点理解。

直到学到指针。

指针、地址、内存、指针变量、数组指针、函数指针……这些概念一下子全都涌了过来。我对着书看了很多遍,依然似懂非懂。那时候的我第一次意识到,编程并不是记住几个语法就可以了,它背后还有计算机运行方式、内存结构和数据组织方式。

虽然最后没有真正把 C 语言学明白,但那本绿色封面的书,算是我进入编程世界的起点。

编程语言的不同角色

后来,我又陆续接触了 VB 和易语言。

VB 比 C 语言直观很多,拖几个控件,写几段代码,就能做出一个简单的窗口程序。对当时的我来说,这种"所见即所得"的开发方式很有成就感。

再后来,我还喜欢上了易语言。

现在回头看,易语言在技术圈里可能并不算主流,但它确实降低了编程的门槛。它让我发现,编程语言不仅是冷冰冰的语法,也可以是一种表达工具。重要的不是语言本身有多高级,而是能不能帮助一个人把想法变成真正可以运行的东西。

第一个完整项目

大学毕业设计的时候,我选择做一辆双轮自平衡小车。

这是一个听起来简单,真正做起来却并不容易的项目。

小车要保持平衡,需要不断读取传感器数据,根据车身倾斜角度实时调整电机转速。整个项目涉及 Arduino 单片机、传感器、电机控制,也需要使用 C 和 C++ 编写程序。

那段时间,我一边查资料,一边调参数。

小车经常刚立起来就倒下,有时候向前冲,有时候疯狂抖动。一个参数改小了没有效果,改大了又失控。很多时候,我甚至分不清问题到底出在代码、传感器、电机,还是控制算法上。

最后,毕业设计算是完成了,但我心里很清楚,自己并没有真正学明白 C 和 C++,对 PID 控制、硬件通信和底层原理,也只是有了一些模糊的认识。

不过,这个项目让我第一次体验到了完整开发一件产品的过程。

它不仅需要写代码,还需要连接硬件、分析数据、调试设备、解决异常。也是从那个时候开始,我慢慢明白,代码只是实现目标的一种手段,最终重要的是,能不能让整个系统真正运行起来。

职业生涯:Java 与 Android

大学毕业之后,我开始接触 Java。

相比 C 和 C++,Java 的开发体验更加完整。它有成熟的面向对象体系、丰富的类库和完善的社区支持,也让我第一次真正进入工程化的软件开发世界。

一开始,我接触的是 Java 后台开发。

后来,随着移动互联网的发展,我逐渐转向 Android 开发,并在这个方向上工作了很多年。

Android 开发几乎贯穿了我职业生涯中最重要的一段时间。

从早期的 XML 布局、Activity、Fragment,到网络请求、数据存储、性能优化,再到复杂业务流程和大型项目维护,我经历了 Android 技术不断变化的过程。

Android 官方开始支持 Kotlin 以后,我又重新开始学习一门新的语言。

Kotlin 给我的第一感觉是简洁。

过去 Java 需要写很多行的代码,Kotlin 可能几行就可以完成。空安全、扩展函数、数据类、Lambda 和协程,让 Android 开发变得更加高效,也让代码更接近业务本身。

学习 Kotlin 的过程中,我没有只是停留在教程和示例里,而是逐步把它应用到实际项目中。旧项目里不断增加 Kotlin 代码,新项目也开始优先使用 Kotlin。

从 Java 转向 Kotlin,对我来说不只是换了一种语法,更像是开发思维的一次更新。

对编程语言的理解

工作这些年,我接触过很多编程语言。

C、C++、VB、易语言、Java、Kotlin,也接触过 Python 和后台开发相关技术。

以前,我总觉得一个程序员应该尽可能多地掌握编程语言。后来才慢慢发现,语言之间并没有绝对的高低,每一种语言都有它最适合解决的问题

语言适合场景
Java企业级系统开发,稳定、成熟,社区和生态都很完善
Kotlin现代 Android 开发,在保持 Java 生态兼容性的同时,让代码更加安全、简洁
C/C++更接近硬件和操作系统,适合单片机、嵌入式系统以及对性能要求很高的场景
Python算法、人工智能、数据处理和数学计算方面有明显优势,适合快速验证想法

语言只是工具。

真正重要的是,面对一个问题时,能不能理解它的本质,选择合适的技术,并最终把问题解决。

角色转变:从开发到项目管理

专职从事 Android 开发很多年以后,我也尝试写过一些后台程序,开始逐渐理解客户端、服务端、接口、数据库和业务流程之间的关系。

过去做开发时,我关注最多的是代码。

一个页面怎么实现,一个接口怎么调用,一个异常怎么解决,一段逻辑怎么优化。遇到问题时,我习惯打开代码,定位原因,然后修改它。

写代码最大的魅力之一,是反馈非常直接。

一段代码修改以后,可能立刻就能改变一个页面、一条业务流程,甚至影响很多用户的操作。开发人员很容易从这种确定性中获得成就感。

但后来,我开始逐渐转向项目管理和需求管理。

角色改变以后,我发现,过去很多熟悉的问题都需要重新理解。

视角的转变

以前(开发视角)现在(管理视角)
这个功能能不能实现这个功能应不应该现在实现
关心代码是否正确关心目标是否明确、需求是否完整、资源是否足够、风险是否可控、上线时间是否合理
思考如何开发判断价值、优先级、影响范围和投入成本

站的位置不同,看到的问题确实不一样。

关于范围管理

在开发岗位上,一个优秀的工程师往往希望把功能做得更完整,把架构设计得更合理,把代码写得更优雅。

但在项目管理中,做得更多不一定就代表做得更好

一个项目最危险的事情之一,就是范围不断扩大。

一开始只想做一个简单功能,后来不断增加新的要求:这里再加一个入口,那里再增加一种状态,再兼容一个旧流程,再增加一种特殊场景。

每一个变化看起来都不大,但累积起来,就会影响开发周期、测试范围、上线时间和项目成本。

因此,我开始重新认识"范围"这件事。

过去,我认为范围主要是需求清单和验收标准。现在我逐渐意识到,范围本质上也是对工作量的边界定义

  • 做哪些,不做哪些
  • 这一期完成什么,下一期再解决什么
  • 什么是核心目标,什么只是附加体验

只有范围清楚,工作量才能被评估,资源才能被安排,时间才能被管理,风险才有可能被控制。

关于资源与平衡

项目管理也让我开始重新理解成本、资源和目标之间的关系。

开发人员看到的是任务,项目管理者看到的则是有限资源下的选择。

团队人数是有限的,开发时间是有限的,测试资源是有限的,项目预算也是有限的。

当所有需求都被认为很重要时,真正重要的事情反而可能无法完成。

项目管理并不是简单地催进度、排计划、开会议,也不是把任务分配给不同的人。

它更像是在多个约束条件之间不断寻找平衡。

目标、时间、成本、范围、质量和资源彼此关联。任何一项发生变化,都可能影响其他方面。

  • 增加范围,可能需要增加时间和成本
  • 压缩时间,可能需要增加资源,或者接受更高的质量风险
  • 资源不变的情况下,如果所有事情都要同时完成,最终往往意味着每件事情都做得不够好

这是我从开发转向项目管理以后,正在重新学习的一套思维方式。

技术与管理的结合

我并没有离开技术。

相反,多年的开发经历,让我在做项目管理时能够理解技术人员面临的真实问题。我知道一句看似简单的需求,背后可能涉及多少代码、接口、数据和兼容逻辑;也知道一个临时增加的功能,可能会给测试和上线带来什么影响。

技术背景是我的基础,项目管理则让我开始从更完整的角度看待一件事情。

以前,我希望自己能写出更好的代码。

现在,我希望自己不仅能理解代码,还能理解业务、团队、资源、成本和目标,能够让一群人围绕一个明确的方向,把一件事情真正做成。

成长的本质

从 C 语言,到 Java、Android 和 Kotlin,再到项目管理,我走过的路并不是一条提前规划好的路线。

很多技术我学过,却没有完全学明白;很多项目我做过,也经历过错误和反复。

但这些经历并没有浪费。

它们让我逐渐明白,一个人的成长,并不只是掌握了多少种语言,也不只是写了多少行代码。

真正的成长,是看待问题的角度不断发生变化。

  • 从关注代码,到关注系统
  • 从关注功能,到关注目标
  • 从关注个人完成,到关注团队协作
  • 从思考"怎么做",到思考"为什么做、做什么、做到什么程度"

结语

我仍然喜欢技术,也依然对新的语言、硬件、人工智能和各种工具保持好奇。

只是现在的我,比以前更关心另外一件事:

如何在有限的时间、资源和成本之下,做出真正有价值的产品,并让一个项目稳定、清晰、有节奏地向前推进。

这可能就是我从一名开发工程师,逐渐走向项目管理者的开始。