程序员的自我修养

shuke 2018-10-15 1490

程序员的自我修养

好的开发人员,应该能够全面、高效、严谨的去处理任何软件程序和业务问题,成为一个好的开发,是一个很有意思的话题,不过无论这个话题如何开展,基础两个字必不可少,虽然代码量是衡量开发能力的重要指标,但仅能够熟练的进行代码编写是不够的,更要能深刻的理解技术原理和业务逻辑,扎实的个人基础和技术基础往往会促进代码的编写,更游刃有余的解决问题。


一、知识储备

1、数学

或许在很多人看来,学计算机用不到什么数学,最多也就是一百以内的加减乘除,用在for循环、数组索引之类的上面。但其实不然,大部分人这样觉得是因为基本都工作在应用层,所以相对而言,用到的数学知识会比较少,也比较浅显。

而当从应用层更深地学习研究时,就需要一定的数学能力了。


    1)高等数学

    在高数中我们学习到了重积分、级数等,这对于我们深入学习人工智能、学习图像处理以及我们对我们的程序进行更进一步地优化都是很重要的。


    2)离散数学

    很多院校都把离散数学作为计算机相关专业的必修课程,这是因为离散数学里面的图论等知识对于我们深入学习计算机算法知识大有裨益。同时离散数学的逻辑学也是我们控制计算机所必须了解的内容。只有了解了这些我们才能更好地完成我们的程序。


2、计算机

    1)操作系统

    操作系统(OS)是配置在计算机硬件上的第一层软件。是对硬件系统的首次扩充。所有编程语言的开发以及应用程序的运行,都直接依赖于操作系统的支持。文件系统。进程等桌面编程中的场景大都来源于操作系统的定义和概念。因此完整地了解操作系统的起源和组成以及运行逻辑,对多线程、复杂界面、文件管理以及一些难以正常理解编程思路等开发中遇到的场景,有非常大的帮助,不仅帮助理解,也能掌握更多有效的程序写法。


    2)汇编语言

    汇编语言是一般程序员能为机器编程的底层语言(现代的CPU/GPU还是会把指令再分解成微指令),所以学习汇编能让程序员知道机器在软件层面上的最底层操作。那么,熟悉汇编后,可以更容易理解C/C++/OC这类语言如何在机器上执行。一些有经验的程序员,看汇编时可以快速反映为C/C++代码。这些经验和知识有很多好处:

    性能优化:在设计及编码中能考虑到底层的执行方式,从而编写出高性能的代码

    深度调试:遇到一些崩溃火其他问题时,在没有调试信息下也可以找到问题所在。有时候遇到编译器本身的错误,单凭研究源代码无法定位。

    工具开发:可以实现AOT/JIT编译、native调试器、内存/性能剖析工具等


    3)编译原理

    编译原理蕴涵着计算机学科中解决问题的思路、抽象问题和解决问题的方法。编译原理课程的学习有利于加深对程序语言的理解,可以帮助我们更加快速地掌握新的语言工具;课程中包含了很多软件技术,程序设计语言编译程序构造的基本原理和实现方法是软件的核心技术之一。同时编译原理中的词法分析、语法分析等内容对自然语言处理领域有大用处,是计算机基础。对模式识别(模式串的分析、匹配)、人工智能的学习也有帮助,对我们写代码、了解程序本质也有着举足轻重的作用。


    4)数据结构

    在计算机界流传着这么一个公式:程序 = 算法 + 数据结构,数据结构对我们的重要性不言而喻。数据结构记录了我们如何对数据进行存储,以及数据之间的关系,是我们的程序的基石。


    5)数据库

    数据库是数据管理的有效技术,是计算机科学的重要分支。现如今,信息资源已成为各个部门的重要财富和资源,因此作为信息系统核心和基础的数据库技术受到越来越广泛的应用,越来越多的应用领域采用数据库技术来存储和处理信息资源。特别是随着互联网的发展,广大用户可以直接访问并使用数据库,例如网购。数据库已经和我们密切相关,我们开发过程中更加离不开数据库的使用。


3、英语

   很多人觉得计算机编程不需要很多英语知识,所以觉得英语就不重要,博主认为这观点有失偏颇。虽然我们在编码过程中所使用的英语很少,但我们仍应该学好英语。首先,目前很多的资料原版都是英文的,而翻译过来的有相对一部分和原版相差比较大(当然,也有一部分翻译的还是不错的)。其次,随着经济全球化的发展,我们难免需要与外国人打交道,日常沟通、合作等,这都需要我们有一定的英语能力。


二、信息检索能力

   我们在学习、生活、工作中,都需要检索一些信息,如果我们有比较好的检索信息的能力,那就可以大大提高我们的检索效率,让我们更好更快地完成我们要做的事。


三、独立思考的意识

   在我们的身边,有一部分人总是期待别人帮他做好一些事情。每次遇到困难,第一时间不是自己想办法解决,而总是找别人帮忙。这样的人,缺乏独立思考的意识,很难成长起来。独立思考的意识,是指当我们遇到问题时能独立思考,自己寻找解决方式而不是一味地靠他人,这说起来简单,做起来却并非那么简单。


四、好的编程习惯

   有的人说爱干净浪费时间,所以不修边幅,但归根结底这还是习惯问题,当养成清洁卫生的习惯并使之成为生活惯性时,往往就不会耗费更多的时间,反而显得干净干练。写程序同样如是,有一些编程习惯,看似不足为道,看似浪费时间,可是如果坚持下去,最终都能收到意想不到的奇效。下面列举一些特别重要的习惯。

1)快捷键的使用

    无论是使用Windows、Linux操作系统,还是在IDE中,快捷键都是系统本身的标配,事实上,Ctrl+C、V这样的操作,大部分人都能尝到在节省时间上的甜头,把这个概念进一步扩散,如果在IDE中编写代码,除了代码本身,将其余所有的鼠标操作、键盘定位操作,都用快捷键来代替的话,在时间上将会有数量级的节省,然而看上去这么好的事情,真正坚持去执行并形成习惯的人屈指可数,因此,在初期的改变习惯,记住快捷键,会是一个长期的过程,需要不断的坚持。

2)代码注释

    一个开发人员随着年龄和经验的增长,所参与的项目,再也不是靠一个人或者几个人就能完成的。系统的重构、代码的重构、工作的交接、对新进人员的培训等等类似的事情,会越来越多的遇到,这些事情无一例外都会把已经写过的代码重新或者重复阅读,如果在初始编写代码时,就做到完整、清晰明了的代码注释,对后续工作会有巨大的帮助。不仅提高工作效率,还能增强合作好感。事实上,就算只是自己看自己的代码,如果有注释,也能加深印象,缩短代码查找时间。因此,任何开发人员,都应该养成良好的代码注释习惯。

  优秀的代码注释应该能做到:

  每一个函数、每一个属性甚至是变量的划分,都可以找到对应的解释。

多使用越来越被IDE支持的XML注释方式,不仅有注释文字,更有详细的参数描述。

对程序结构、模块、组成部分划分等也加以注释

3)命名规则

    具备一定规模的软件公司,在代码编写上都有一套自己的命名规则,涵盖项目、模块、函数、变量等等,标准化命名的好处不言而喻,然而被动、被迫去遵守命名规则和主动习惯于使用命名规则是完全不一样的。一个优秀的开发人员,应当发自内心的希望各种代码命名都是有规则的,易读的,而不是纠结于命名规则会增加码字长度。

4)不将就的编程逻辑

    所谓不将就的编程逻辑,其对立面就是不讲究的编程逻辑,不讲究的编程,不仅是一种很坏的编程习惯,也体现了低下的生活品质,很多开发人员,因为个人习惯、赶工期、客户要求不高等多种原因,在编程时特别随意,体现在比如为了实现某个功能,百度出一段代码,直接套用,10行的代码只理解8行,有两行看不懂也放到程序里去使用,很多这样的小细节,就好比在项目中埋下了无数的定时炸弹,不仅有很大概率形成返工,更是为项目埋下了风险。编程人员,应当有担当有态度,养成不将就的编程逻辑,不勉强自己,也不轻视程序。

5)数据备份

    误删、误操作、电脑断电、文件遗失等等状况是每一个开发按人员都可能遇到的问题,如果不希望辛勤的劳作被浪费,不希望偶然的意外影响工作,那做好备份是必不可少的,在较大规模的公司,会有完整的源代码管理以及信息安全防护,而无论是在大公司工作,还是身处较小公司或者在实现个人代码价值时,都要做好代码和文档的数据备份,备份方式的选择灵活多样,有使用在线的CVS、SVN、TFS、Git源代码管理,也可以手工拷贝文件至云空间或者本地硬盘,甚至可以在个人电脑上组成RAID磁盘阵列等等,养成周期性、规律性的备份习惯。

6)邮件工作方式

    沟通是进步的源泉,如果说开发小组的热烈讨论是性格和激情的体现,那邮件的工作方式也是另一种稳重和高效。无论是公司层面的工作沟通,还是开发小组的问题交流,邮件的作用包括问题正规化描述、工作留档留痕、工作流程流转、责任分工明确等等,习惯于将重大问题、重要事项通过邮件的方式与同事、主管等进行沟通,将会非常有助于团队协作。

最新回复 (0)
全部楼主
返回