打开程序世界的大门
可能很多人接触的第一堂编程语言课就是c语言,我也一样,那时似乎完全不知道在说什么,不知道来龙,也不知道去脉,这就导致了一个问题,怎么学。其实不是说老师没铺垫好,而是在老师感觉以为那本就不是问题,而且时间有限干脆直接切入正题。但是对于学生而言,其实这也是一个会一直存在的问题,就是概念悬空,当然就算从程序设计的起源一步步讲起也未必谁都能懂,所以说到底到靠自学!应该说一开始学习编程完完全全就是为了入门,至于能拿来做什么仅限于一个套路下实现一个功能就好,就比如学了c语言的语法和代码基础逻辑然后就可以用来处理一些数学计算,实现一个纯字符界面的所谓的管理系统或小游戏,其实依赖的完全是程序的顺序逻辑以及纯字符打印输出,大多情况是这样,好一点可能利用一下文件的处理功能,用文件存储数据而不是只在内存存放数据。其实这个时候我们努力把这些做好就可以了,实实在在多去练习熟能生巧。
到底什么是编程
经常练习的人可能就会发现,即使是最简单的功能会有许多种不同的实现方法并且往往效果上有轻微差别,比如递归和迭代,应该很多人都已经接触这个了,其实都是循环,只是实现方式不同,递归可能更简洁,但你需要理清楚数学逻辑,而迭代一般相对代码多一些,关键的一点是同一个功能的话用这两种方式执行起来效率是有很大差异的!很多人慢慢就会发现代码的这个规律,去追求一种更高效的写法或者运行效率,当然一般两者很难兼得。可以说这其实才真正属于程序设计!
所以说,程序设计其实不仅仅在于实现功能,这里涉及到的一个概念就是优化!理解了这层含义,当作抛砖引玉,可以开始讲讲编程语言本身了。在编程语言里面,不可缺少的一种东西叫做标准,比如之前最常用和常见的C89标准,后来又出现了C99、C11标准,这些标准里面保留了一些旧版本的兼容特性,但更多的是加入了许多新特性和要求,没有哪一门语言是愿意一成不变的,也需要做创新和优化。系统和开发环境本身也是一种程序,只不过是为了编译或者解释(有些语言是不需要编译的,称之为解释)、执行所编写的程序,这些环境会去执行这些标准,以来各种各样的库(这里又冒出一个哭的概念!)。所以这里的意思其实是应该多去了解这些原理,对于头文件、链接库、编译器如果熟悉是大有裨益的(暂且指的是以C/C++为例)。
积累原理知识
掌握原理其实是相当重要的,很多人也都明白,可是怎么去做呢?在学习了一些编程语言的基础之后可能就开始慢慢接触一些综合知识了,比如数据结构、操作系统、计算机网络等,这些都是与程序设计息息相关的。更重要的一点是这些是与编程语言无关的,任何编程语言都必须依赖这些,换句话说就是任何语言都有数据,有数据就有数据的结构,任何高级语言都建立在操作系统的基础上都必须利用系统的底层调用实现功能,任何高级语言都会有实现网络编程的需求。所以说这个时候你学了什么语言并不重要,而是你是否会利用语言去联系这些基础而重要的知识,甚至可以说是核心的知识!因为这些内容是一个编程语言真正存在的前因后果,一个语句或操作之所以意味着某个含义是依赖于底层调用再去做一些数据结构的处理才能实现的。我觉得有必要有这样的认识。
编程语言是建立在基础原理之上的,没有知识体系也不可能有编程语言这种东西。所以说编程语言在实现各种各样需求的时候只有依赖某一知识标准才可能被使用,能够被使用的编程语言也就可以用来去实现更多新的标准,这两者是相辅相成的。了解了数据结构,就有必要去挖掘各种数据结构,了解一个优良的高效的存储结构是什么样的等等。操作系统就更重要了,程序的执行(进程的概念)、对文件操作(文件流、二进制文件等概念)、字符终端的使用(标准输入输出、其实也是一种文件)、内存利用等等,必须深入了解不可!
程序猿的综合能力
其实任何一个程序员只会一门语言是不可能的,当然这里不是鼓励去学各种编程语言的意思,因为高级语言一门基本就能完成所需的所有功能了,只是难易程度的问题罢了。这里的意思是使用一门语言和各种相关联的技能的重要性,可能经常也听到说语言就一门学到透就可以了,走遍天下都不怕,但这句话其实缺少了上下文!因为一门语言想要掌握得好和用得好必须懂得许多技能,只有这样也才更有效率!
先说操作系统,作为程序员肯定知道远不止windows这一中操作系统,最重要的是在开源世界里的GNU/Linux(从Unix发展而来),所以不管是什么时候,一个打算进入编程世界的人,必须学会不同操作系统下的基础知识,起码应该像一个开发者一样能轻松使用一台计算机,不管他是windows还是linux。首先你得熟练地会安装操作系统,然后熟悉不同环境下的环境变量、网络配置、软件安装、命令行操作等等。这对一个程序员来说是一个必不可少的修炼过程!
再比如说数据库,开始可能依赖内存或者普通文件存储一条条数据,现在有了数据库可以处理大量数据可进行永久存储而且有专门的SQL语言进行操作。而且程序分前台和后台,前台用来展示给用户就行交互,后台用来连接数据库处理数据,其实现在的大多应用中间都是经过了许许多多的接口,作为一个程序员,你必须懂得流行数据库的操作(增删改查、和宿主语言的连接——例如经典的ODBC)、接口(前后台连接或者数据结构或者协议进行不同语言之间的连接)的使用。还有,我们常说的接口就是为了获取和推送数据,你应该了解常用的数据格式,因为不同的数据格式应用特点不一样,编程经常会用到许多特定的数据格式,不同语言之间采用同一种数据格式,就可以实现合作,学会各种格式文件的处理(读取、写入)是一门必修课!
程序员一个很重要的特点是使用各种各样高效的手法去解决问题,一些好的技巧和意识往往事半功倍,所以这也是程序员所应认真锻炼的技能。首当其冲的应该说一说搜索引擎!因为搜索引擎可以帮助你通往世界的几乎每一个角落,通过网络可以去发现各种各样的资源和最新技术发展动态,可以找到许许多多解决问题的方案,可以利用许多大神功能贡献出的轮子(轮子就是别人写好的模块等,尤其是在像python这种脚本里面依赖的是大量模块的组装),这些都可以帮助帮助编程人员高效地开发,但是搜索引擎你真的知道怎么使用吗?推荐最强大的谷歌浏览器,而作为技术人员首先应该去仔细看一看官方文档,叫你真正的使用技巧!
提到了查看官方文档,我们应当意识到了,很多东西正式使用之前都应该去看一下说明书,程序开发也如此,使用各种各样的编程软件去写代码你应该首先去熟悉一下快捷方式和特殊用法,还有各种高校插件,这是一个良好的习惯,且会让人受益匪浅!比如一个notepad++,这个软件可以很方便地帮你处理编码、列编辑、特殊格式变换、高级替换等。说到高级替换,不得不说的是正则表达式,可能很多人还没接触过,但是这个至关重要,是字符匹配和数据文件处理不可或缺的技巧!