美文网首页C++上班这点事儿
《程序员的自我修养》

《程序员的自我修养》

作者: 研匠 | 来源:发表于2018-07-18 15:46 被阅读15次

    概述

    我对程序员的定义:使用计算机设备进行编程,投入高强度脑力劳动,拥有激情和愿景的一个群体。

    伟大的C语言在1973年初具雏形,大体上第一批程序员诞生于1970年代。50年以来,这个程序员群体的人数正以极快的速度增长,不仅形成了一个独立的职业,更有着向全民普及方向发展的趋势。

    本文从我个人视角,将程序员应该具备的素养散记于此:

    攻无不克之信念

    编程是一个宽泛的概念,除了纯粹的编写代码以外,还需要解决与编程有关的其他一切问题,也包括学习各种技术。在这条道路上,有着各种险阻、高山、坑洼会阻碍你的前进。不论遇到何种难关,都要秉持着攻无不克的信念,久攻之下,安有不破之城?解决编程问题往往需要灵感,而这种信念可以为不断地迸发灵感起到积极作用。

    成建制的知识体系

    “工欲善其事,必先利其器。”,程序员的“器”便是在编程或学习中汲取的经验和知识。你的知识体系越宽泛,涉猎面越广阔,解决问题的办法就越丰富。但知识的深度不可浅尝辄止,需深耕,并形成建制。我始终反对去牢记知识,相对于繁杂的记忆(比作硬盘),短时大脑处理的容积(比作内存)是有限的,在需要用到的时候,能快速找出这些知识即可。

    严谨、细心、耐心

    从编码规范(哪怕你自己认为是规范的)到撰写说明文档,在编程的各个环节都应保持严谨的态度。没有规矩不成方圆,严谨看似浪费时间,从长期来看,恰恰是在节约时间。

    到目前为止编程依然是一门精细活,这意味着缺少细心和耐心的程序员将无法写出优质的代码。何况生活本身也需要细心和耐心。

    数据结构、算法、数学

    数据结构充斥于编程的各个角落。在编程领域,没有哪一门课程比大一既开设的《数据结构》更重要,不管现代编程如何的纷杂和演变,大到修理原子弹,小到使用字符串,都离不开数据结构。数据结构的优劣直接决定上层逻辑的成败。
    算法有很多定义,此处主要特指具备时间复杂度的算法或根据某种原理实现的算法,编程即为将算法思维落地为源码。程序员不应沦落为使用他人算法的搬运工,而应是实现者,甚至是创造者。
    数学是理工类科学之母。代数、线性代数、概率统计、微积分等,其中没有一个知识点对于程序员是多余的。

    “懒人”的专属能力:抽象

    抽象是一名程序员应该具备的基本能力。合理的抽象将使设计更加优异,代码更加精炼,维护更加轻便。需要程序员从纷繁复杂的表面现象(例如过程、数据等)中提炼出共性,从而降低复杂度。这才是“懒人”程序员应该追求的“一劳永逸”。事实上,不仅程序员,其它职业也需要抽象能力。

    天时、地利、人和

    个人英雄主义式的编程已经过时是普遍的观点(我并不完全认同)。团队协作已经成为现代编程必不可少的环节。要想开发出成功的软件系统,需要“天时”(即机遇),“地利”(即技术条件),更多的需要“人和”(即和谐的协作关系),方能水到渠成、事半功倍。而“人和”的成因中最主要的是志同道合的想法,有近似的追求目标。当无法志同道合时,也应积极寻求达成共识。

    编程也是艺术

    编程虽然属于工科,但它也是一种艺术,只是它的艺术之美不像音乐、油画易于被公众所知,往往是幕后的,隐藏的。创作一幅油画,艺术家会融入自己的创作激情。同样地,编程也需要融入程序员的激情。如果一批代码的编写者缺少创作激情,那么这批代码是缺少灵魂的,是没有美感的,甚至是不可复用的。

    沉着的诊断技巧

    程序员的天敌便是bugs(导致代码不能按照预期设想运行的漏洞),诊断和修复bugs是程序员的日常,即便是最优秀的代码,也应假定存在未知的bugs。当遇到棘手的bugs时,程序员应沉着冷静,坚信计算机问题始终是能被排查清楚的信念,善用具体开发件的诊断方式、实验室方法(例如控制变量法)、网络信息检索、社区等手段,对bugs进行排摸和推敲,从而最终锁定和解决bugs。如果编写的代码一气呵成,没有发现任何问题,这反倒令程序员感到不踏实。

    愿景是产生内驱力的源泉

    做成一件事的动力来源于内驱力和外驱力。以内驱力为主导的程序员,会真心实意地追求工作的严谨,追求代码的艺术,追求产品的质量。内驱力不会凭空产生,愿景是产生内驱力的源泉。愿景因人而异,愿景的大小不和内驱力成正比关系。

    由此衍生出另一个话题:如何管理好程序员?有两种管理学观点,X型和Y型理论(由Douglas McGregor于1957年提出)概括来说,X型:人天生是懒惰的,需要通过利益或惩罚手段来迫使人们完成工作;Y型:人天生是勤奋的,只要条件允许,人可以能动性地为完成工作投入智谋和创造力。结合本文论述,X型是外驱力管理模式,Y型是内驱力管理模式。外驱力管理的典型是采用绩效考核、末位淘汰等机械性政策,内驱力管理的典型是提供待遇保障、创新土壤,团结和适时引导等柔性政策。事实上,由于程序员的内驱力源于愿景,采用内驱力管理模式对管理者的要求更高,管理者需要结合组织的实际情况,因人而异地、或多或少地为程序员描绘不同深浅的愿景,善于画优质大饼是程序员管理者的重要职责。由此可知,Y型的内驱力管理模式更适用于程序员岗位。

    尾记 程序员的跨界之旅

    至少具备上述素养的程序员,其跨界之旅应该是轻松愉快的,且效率会优于目标界内的人员。不包括医学、艺术、写作等责任特别重大或极其需要创作力的领域。

    程序员一族被俗称为“码农”,由于每天长时间面对电脑屏幕,脑袋里充斥着各种思绪和压力,从而给人一种不善表达、呆板木讷的假象,然而程序员脑袋的灵活程度并不亚于其他职业,仅仅只是没有将时间投射在这些方面,只要程序员愿意改变,这些方面都将得到极大的改善。因此,程序员并不需要局限于编程领域,完全可以跨界,甚至比其他职业的跨界更具可塑性。

    往往程序员跨界后会惊呼“so easy”,主要原因是大多数其他职业一段时间内思考的逻辑总量低于甚至远低于程序员思考的逻辑总量,另一方面,这些职业并没有过高的创造力需求。

    对于目标界内的业务知识,其中大多数内容属于“知不知道”的范畴,程序员可利用特有的信息获取手段,在短时间内通过补习来缩小差距。长期编程养成的思维定势和敏锐直觉,可为吸收目标界内知识及之后的工作提供指导和助力。█

    于二零一八年六月二十六日。

    相关文章

      网友评论

        本文标题:《程序员的自我修养》

        本文链接:https://www.haomeiwen.com/subject/ifnopftx.html