开始更新公众号内容以来,我就一直想整理我的技术变更路线;想理一理,我是一个怎样的程序员。
这比记录生活琐碎难,我一周又一周的推迟,一次又一次的提笔放下。按理说,自己有一个工作内容列表,将它们列出来,便会是一份儿成长历程。那是什么一直在阻延我呢?是回想不起某个时间段对敲代码的态度?是对自己所掌握的工作技能不自信?是认为自己深度不够?
最初,我是想将自己做过的系统一一列举出来,并在每一项后面添加一些感悟。但发现并不能对所有代码都有感悟,于是换成本篇内容,按照一些印象深刻的节点讲述。
电脑是什么?初次接触电脑是初中的微机课,记不起来上课内容。能记住的是,当年很期待上微机课,在同学帮助(印象中的我,对各种操作都会战战兢兢,不敢点)打开游戏后,操控上下左右与空格,打飞机。
高中在同学带领下去过两次网吧,坐在网吧看电视、聊QQ。
大学之前,电脑对我来说,是一个可以玩游戏、聊QQ、看电视的奢侈工具,只存在于网吧与微机房。
Hello World高考结束报志愿,可以选择六个专业。听说土木、建筑很好,便选择土木、建筑;剩下的专业,在看起来顺眼的名称中挑选。最终被调剂到软件工程,这程序员生涯开端,起于调剂。
大学学习的第一门编程语言是C 。听过课程简要介绍之后,第一次上机课程需要在控制台输出“Hello World”。正确输出之前,错误过许多次,打开VC6.0,建立工程,敲正确每一个字母……虽说按照教程操作,但一步一个坎。
#include <iostream>
using namespace std;
int main() {
cout << "Hello World!" << endl;
return 0;
}
当第一次将Hello World输出到控制台的时候,有些欣喜。即便只是在一个黑框框中显示一行字。
大一经常去学院公用实验室练习打字,待到能够不看键盘盲打,感觉自己好厉害,进入一个新阶段。
许多课程大学的课程有许多。
《程序设计基础》、《信息系统基础》、《离散数学》、《面向对象程序设计》、《软件工程导论》、《计算机网络与 通信》、《数据库原理与设计》、《数据结构与算法》、《Web开发技术》、《软件需求分析》、《操作系统原理》、《软件测试理论与方法》、《软件架构与设计模式》、《软件项目管理》,等等等等……
当时的目标是,每一门考试都及格。许多的课程,当时学起来,似乎能够懂得,但历经变迁,大部分课程,最后能留在脑子中的,也就只剩下它们的名字。浅尝辄止。
现在的认知中,许多的课程设计目的,只是为了让我们知道有某一种技术方向。以一本书进行举例,大学的课程,只是前言(序)部分,正文内容还未开始。
除了上述专业课,还会有政治、历史、数学、英语等,会选修另外的一些语言(如Java)课。已经忘记是由于什么原因,当时认为写C 是一件很酷的事情,所以许多的作业,都用C 完成。
编写过许多的“玩具程式”后,能够一口气敲出没有语法错误的代码,便很是开心。
Unity3D第一份实习工作,在一家游戏公司,他们使用Unity3D引擎进行开发。初次接触Unity3D,转为使用C#语言编程。其后的一两年时间,都使用Unity3D做东西。
看Unity3D官方文档,某一瞬间忽然意识到:哦,原来Update函数是每帧都调用的啊,每一秒钟会执行30帧,Start函数会在GameObject创建时候执行。其后的很长一段时间,都感觉自己理解了Unity3D的运作规则。并没有去想想这些规则是如何实现的。
时隔六七年,现在已经不太记得当时写的代码长什么样子。不过那个时期,似乎主要目标只是将功能实现,并不太注重效率。会稍微注意一下代码可读性,对以大量的abcd、中文变量命名有些嫌弃,对在U3D中将几十个GameObject放在一个层级感到烦心。
模糊的感觉到当时做的东西,不精致。
语言随着工作(项目)变更,使用过C 、C#、Java、Python、Lua、JavaScript。
C 很酷。
C#和Java看起来一样。
使用Python,感受到不一样,不用写变量类型,只需要注意缩进,写起来很爽。
……
有一段时间,又觉得自己很厉害:语言都是类似的;一门新的语言,给我一点时间,让我稍稍熟悉下它的关键字,便可以开始做项目。
不过近期,思维有了变化。之前的“觉得”太过自信。每一门语言都是博大精深的,都需要许多时间去学习、研究;需要知道它们的内部实现原理,胸中自有丘壑后,才能敲出更好的代码。
写逻辑不算实习期的内容,毕业后到现在,已经工作七年半的时间。细细想来,已经好长的时间过去。
那这些年做的最多的事情是什么呢?写逻辑!
什么是逻辑?我的理解是:
需求方(项目经理、游戏策划)提出当时项目所需要的各种需求,它们会随着项目死亡而湮没在某个不知名的硬盘角落。
随着做的项目多起来,许多需求,都是相似的、生命周期是短暂的。
到最后,程序员的工作,便是许多重复内容。
这些需求所对应的程序实现,这些重复的代码,就是逻辑。
而逻辑写多了,不加总结,就真正成为搬砖人,只是重复劳作。一直写逻辑的我,有那么两三年,一直在原地踏步。
走在前面的人,真的非常厉害。他们为了减少重复劳作,提高代码复用率、可读性、易于扩展,提出了设计模式。
最近几年所跟的项目,用到了许多的设计模式。但在我有意识的去学习设计模式之前,我并不知道那就是设计模式。
三四年前,项目中的导师让我去阅读《重构》这一本书,书中讲述了许多优化代码的具体方法。不知道从什么时候开始,脑子中有了这个印象:
新知识的学习按照一些规则将代码进行重构,重构后的代码,就会是设计模式的具体展现。
程序员,就是一个需要不停学习的行业。想为这“不停学习”写两句话,到落笔时刻,我只能左右食指轻轻敲击F与J。
我敲啊敲,敲啊敲……
一个词语出现在我的脑子中:学以致用!
我想学习的新技术有许多,熟练的却很少。
按照我的学习经历,如果要真正的熟练掌握一项技术,便需要真正的在工作中用到它,经常的用到它。否则,便会很快忘记这些内容。嗯,要学以致用。
但是,新知识又是必须学习的,不能只在工作需要时临时抱佛脚。我现在的理解,有这么一点:
学习一项新技术后,虽然不能完全的记在脑子中,但是可以借助笔记。学习当时,用自己的语言将其总结记录,待需要时候,翻一翻。
举例说一说此前的学习经历:
Shader
作为一个游戏程序员,刚开始接触Unity3D,就知道要学习渲染。
这么多年过去,即使按照一份教程敲过一遍代码、研究过一段时间游戏中效果表现。但现在印在脑子中的清晰内容,也就只剩渲染流程。
未来awk指令
线上运行的项目,往往需要进行一些数据统计。看见大佬们刷刷刷的搞定,于是模仿。
使用多次后,我也能够刷刷刷的统计出结果。
作为一枚普通程序员,需要学习的东西还有很多,且前行~
Copyright © 2024 妖气游戏网 www.17u1u.com All Rights Reserved