大多数人印象中「写程序」是只有电脑工程师才懂的专业,但随着科技的进步,透过视觉化的块状模组即可完成程序设计,大幅降低写程序的入门门槛。程序设计如同阅读,能让我们获得更多知识,并培养国际思考以及解决问题的能力,透过键盘与鼠标自信地面对数位创新的世界。
在我们大声疾呼多年后,政府终于渐渐睡醒,开始展现对深耕程序教育的重视。把程序当做最重要的核心能力。但事实上,学程序远远超过学一种技能。实际运用程序去设计、建造产品的过程,隐含着满满的人生道理。
我从10岁开始自学程序、组电脑,21岁与大学朋友创办网站,开始实际把程序运用在商业世界,28岁在纽约参与社群网站Sosauce、游戏制作公司Muse的创办,可以说整个人生都与程序脱不了关系。
回头看这趟旅程,程序教了我太多人生的智慧,以下是其中我认为最重要的,跟大家分享。
程序的目的不是程序
程序是让使用者运用,帮助他们解决问题、满足需求的工具。所以真正的目标是「问题被解决」、「需求被满足」,而不是程序本身。一个工程师必须认清程序不是一件作品,而是过程中的介质,才能设计出真正增进用户生活的好软件。
困难的事不一定有价值
很多时候,工程师辛苦刻了一些功能,却发现用户根本没有这样的需求。另一些时候,我们发现按钮的颜色、说明的文字、新手上路的引导、会员登入后体贴的问候,这些功能做起来很简单,用户却非常在乎。人生也是,我们辛苦的付出,人家不一定有感受,但一句不经意的话,却可能掀起社会运动。
新东西不一定好
人天生喜欢新事物,但在设计软件产品的过程中,新技术往往不是最好的选择。新技术通常有很酷炫的核心,但缺乏完整的周边配套,甚至没有太多工程师真的懂。因此实务运用上,往往带来更高的成本与更大的风险。因此,聪明的工程师会选择成熟或接近成熟的技术。
懒惰不是坏事
优秀的工程师往往是最懒惰的动物,正是因为懒惰,所以可以做出最方便好用、容易维护的软件。
简化才是王道
N 倍复杂的软件,带来N 平方成长的用户教育、团队沟通协作、后续维护成本。因此,学程序会教你力行减法的重要,KISS everything. (Keep It Simple and Stupid)
系统思考
程序往往不是一个独立存在的个体,而是由许多互相连动的模组、物件、平台所形成的体系。因此,学习设计程序的同时,也势必会增强系统思考的能力,帮助你理解单独模组的优化不一定能提升整体战力,以及找到系统内杠杆点等重要人生观念。
没有情绪、只有逻辑
人是理性与感性兼具的动物,但机器却只有100% 的理性。因此当你的程序无法Compile (编译过关),跟机器生气、求情、说谎都是没用的。只有学会摒弃自己的情绪,用完全合乎逻辑的方式,才能通过他们严格的关卡。在过程中,你也学会了如何运用EQ。
问题的根源都是自己
当程序挂点、当用户的问题没解决、需求不满足,你并不能怪罪用户、也无法推卸给机器,只能怪自己没有做出好的选择、设计出对的架构、写出可靠的程序。人生也是一样,问题都根源于自己过去某个时点做出的选择,没什么好责怪别人。
速度与债
在设计早期版本软件时,为了求快、求提早取得市场反馈,工程师往往会用较粗鲁的方式完成功能,因此欠下所谓「技术债」。而后,当产品获得市场欢迎,用户量持续成长,偿还这个技术债所需的时间与人力就会日益膨胀,就像现实生活中的负债会生利息一样。因此,工程师要懂得在对的时间点,把前债还清,才不会在日后造成永不超生的后果。经历过几次这个过程,你将学会用成熟的态度去面对选择、负债、偿还。
可以一时绕过麻烦,但无法永远逃避它
这跟技术债的概念很类似,有时候,工程师可以用Work Around 暂时绕过问题,但它不能取代解决问题本身。迟早,你必须正面面对、解决它。
永远帮自己留条后路
程序做久的工程师,往往会养成习惯在回圈,或是需要长时间的执行程序中,帮自己留一个跳出的路径,免得事情出状况时,无法抢救。在人生中,永远想好后路也是很重要的观念。
用小里程碑激励自己
在做一个大系统时,如果花数周、数月的时间埋头苦干,却一直没办法看到成果,很难维持自己在意志高昂的状态。厉害的工程师会把它切割成许多小片段,每个阶段完成都有可运作的部份成果,利用这些小里程碑来让自己保持热情。
专注的重要
专心的设计程序1 小时,生产力恐怕抵过边做边玩10 个小时。
团队合作的重要
无论一个工程师再强,也无法一个人完成一个大系统。与其他人组织、协做、发挥整体战力,是工程师必修的功课,也是所有人一生中必修的功课。。
【关于转载】:转载仅限全文转载并完整保留文章标题及内容,不得删改、添加内容绕开原创保护,且文章开头必须注明:转自“半导体行业观察icbank”微信公众号。谢谢合作! 【关于投稿】:欢迎半导体精英投稿,一经录用将署名刊登,红包重谢!来稿邮件请在标题标明“投稿”,并在稿件中注明姓名、电话、单位和职务。欢迎添加我的个人微信号MooreRen001或发邮件到 jyzhang@moore.ren