我想写点东西送给那些有意无意来到计算机领域,并且希望在这个方向有所发展但是还未入门的人。首先申明,本人并非大神,仅仅是较早的接触了计算机,并自己瞎折腾了一些东西;才疏学浅,分享一些心得,供诸君参考。
年,怀着对计算机的好奇心,我开始自己折腾编程。起初,我用vb写点带界面的小程序,都是一些简单的东西。有时有些新的idea,就上网找别人的实现,然后一点点的模仿。初三,扔了难看的vb,投向新版本的VB.NET,这玩意儿语法和VB几乎一致,却更加的高级,换句话说,它支持面向对象,标准库也更加的丰富,可以用来玩各种更精彩的东西。后面就是各种瞎玩儿。印象最深的是,中考出分那天晚上,我突然兴起,写了一段代码,把全县的一万多人的中考分数收集了起来,并汇总成一个excel表,给全县考生做了个排名。这事儿是有原因的,教育局不公布排名,于是只好自己玩。那是我写的第一个爬虫。高中并没有去学习编程了,原因是对其他的东西产生了一些兴趣;只是偶尔拿VB.NET写点小玩意儿。买了本《Cprimerplus》,也没怎么看,太厚了,根本看不进去。高考志愿下来后,想着统计一下大家的大学位置,就有模有样地写了个小网站,接触了一些网页开发的东西。大一开学,因为偶尔的一个idea,给某位老师写了个小网站,自此便入了网页开发的坑。
以上便是个人的一些经历,下面我想着重说明几个问题。
一、基本的问题
现在日常使用的编程语言在语法形式上主要是C系列,这类主要包括:C/C++/Java/C#/JavaScript,其基本形式看起来是一样的,诸如判断循环等基本的结构都是相似的;其他的像Python则是根据严格的缩进来表现代码层次。这些语言上的问题,应该知悉,对整体有个形式上的把握对学习是有很大帮助的。计算机编程语言在不断地发展中,从初代的01指令到汇编,到面向过程程序语言和更高级的面向对象程序语言,再到函数式编程,这些变化让写代码越来的便捷和高效。这也是计算机语言存在的意义。当然这一过程是有所取舍的,C语言在运行效率上是很高的,这主要归功于其偏向于底层;而严格说起来,C++在实现多态时使用的虚函数表则会降低执行效率,因为这会导致对内存的多次寻址,不符合CPU的偏好(当然,这一影响在现今的平台上是可以忽略的)。对于Java/C#之类的语言,执行效率则可能大大低于C/C++了,因为这前两者是解释性语言,具体来说,程序并不会被编译成二进制代码,而是在运行时被解释器执行;这也不是坏处,这使得其能引入强大的垃圾回收机制,降低了开发难度。同时,高级语言有更加丰富实用的库函数,在工业应用中有很大的优势。所以即使高级语言的执行效率看起来不如低级语言,但高效的开发过程是工业界所青睐的;只有在需要极高性能的地方,使用C和汇编来完成局部的需求。
二、刻板印象
上学期有段时间,我把一个功能写成函数,有人就诧异说“居然用函数”,后来的指针和结构体,总有人认为是某种高深的东西。正如第一点所说,编程语言是人为设计的以提高工作效率为目的的。这就很显然了,函数这个东西可以认为来自数学概念也可以说来自生活:给定一个输入,做一些事情,并给一个反馈。结构体是对object这个东西的更自然的描述,基本的数据类型是对自然的高度抽象化,实际使用的数据类型肯定是复杂的,结构体便是描述这种复杂的类型的一种形式。至于指针,仅仅是将一块内存的编号存到另外一块内存中,实现的一种超链接。这些东西都是很自然的想法的具体体现,并不是闲得没事儿而胡诌出来的。如果对这些形式存在刻板印象便是需要尽力去改观的,按着正常的逻辑分析它们的用处,也便不再神秘。顺便提到的是,在有函数式编程特性的语言里面,函数和普通变量有着相同的地位,通俗来说,可以把函数作为函数的参数,有兴趣的朋友可以看看lambda表达式相关的东西。
三、实践
编程是门手艺活儿。也就是说,实践才是重要的事情。就我个人的学习路来说,我是完全靠着自己的实践来学习东西的。勇于实践,写的东西多了,自然会领会一些技法。上面说过,我大学之前只用了VB.NET来写东西,高三暑假我还在纠结要不要转更主流一点的语言,却一直没去尝试;大学给老师写的网站的第一个版本使用的VB.NET,老师很诧异我为什么不使用C#,我看着邮件有点难受,于是用一个周末把代码改成了C#版本,我发现其实换门语言来写也并没什么问题,后来的C/C++/JavaScript也大概如此,看一个小时的语法,便可以去干活儿了。在实践中,会遇到各种问题,解决了这些便算是有经验了。这些东西在课堂上是无法体现的,老师即使把这些提出来,如果先期没有实践,也并不会认为其有价值。提实践就必须提的问题便是代码量。百行以下的程序只能算是热身,实际中实现一个功能的时候,代码量是得轻松出五百行的,而这算上思考的时间,也就是一天的任务,这也还是入门者的水平。入门总是很难的,记得我当初是早六点写代码到晚十二点,而且可能这么久啥成果也没有,但是坚持下来,收获是无限大的。
四、数学
计算机在几十年的发展里,是离不开数学的;最早搞计算机的那批人几乎全部都是数学家。如今程序员的门槛很低,因为有大量的资料,用心看一个星期并坚持一段时间,就一定是能做出点东西的。于是计算机从业者的核心竞争力的一个方面应该是数学知识。拿这几年很火的机器学习来说,在统计概率、矩阵、最优化等数学方向上有着很高的要求;虽然已经有现成的学习算法,但是人人都会做的事情,对于个体来说就面临极大的竞争问题了。另外一个例子是大型游戏,开发人员利用图形学的东西让你的显卡热到能煮鸡蛋,然后不可理喻的数学表达式变成了炫酷的界面。
以上便是一些简单的总结,如果诸君在门前彷徨,看完或许能有些收获。
北京什么医院看白癜风北京治疗白癜风效果最好的医院