时间也是过得很快,不知不觉又过了一年。这一年发生了很多事,但是好像又过的很平淡。回想起来自己好像做过好多事,但好像又没做过什么事,在这里我再次回顾一下去年的一些状态、然后展望一下未来,接着立一下对应的flag。
去年的目标总结:
我去年好像说过要好好锻炼的,这个基本放弃了,或者说从来没有开始过,但是体重好像也算是控制助理,没有想象中涨的那么快,去年120,今年130。当时给自己定下的是140后开始锻炼。这个算是不了了之了。
之前好像说过要尝试着自己做饭,但是后来找到理由说服自己了:买菜10分钟、洗菜10分钟、做饭可能20分钟、饭后洗碗10分钟,吃饭10分钟,这么算下来好像做饭很亏的样子,所以这个也就不了了之了。
这么算下来自己当初定下的一些小目标好像都没有实现过。而关于读书这个我统计了一下,包括现在正在看的一本,好像总共17本,未达到当时定下的20本的目标。
在对照着之前写的2017的总结那篇文章上的目标好像自己完成的不多,但是我感觉这年在手机的使用时间上却是是降下来了,每天大概在1小时左右。这个降下来还主要是由于加班太多了。从6月份开始好像就很少能在10点之前到家的。
工作总结
今年我正式接手了公司主要项目——Web扫描器的维护。在刚接手这个时候我也是被它里面有如此多的烂代码所震惊:2万行代码的函数、大量重复的代码、大量的宏定义(包括许多无用的宏)、大量的全局变量、与界面绑死的界面、大量不知所云的局部变量。项目经历过不同的维护人员、不同的维护人员不同的代码风格全在里面,而且没有文档(不是没有详细的文档、而是压根没有文档)。就靠面对面的口述来进行交接。
这是面临的主要问题,当时我想过进行重构,但是项目代码实在太多了,代码里面的很多逻辑我还没搞明白,而且只有我一个人,重构肯定是不现实的。后来我自己采取折中的措施,将我自己能看懂的部分进行重构,但是很多地方关联的太紧密,经常就是改了这块测的没有问题,结果临近发布新版本了,发现另外一个原先没有的问题,每次大改必定会带来新的bug,这样搞了几次我实在是身心俱疲,放弃了。转而向之前的维护人员那样,慢慢加功能就好了,其他的不管了。这样做之后,好像一切都正常了,再也不挨批了,偶尔还能得到办事能力强,能迅速完成老板要求的这么一个好评。
既然不能重构、那么写写文档吧,把之前没有的文档都补起来,这个想法是我在6月份想起来的,但是后来经历了一系列的事,一直没有时间实践。
我在自己的另一份年中总结上写过,公司很多老员工都走了,我也从小X转变为了X哥了,慢慢的手下也有几个人,开始带一些人接手新项目。在10月份我开始带着几个新人开始新的项目。开始时我想按照软件工程上的方式,从需求到分析、到设计、再到编码实现与测试、当时也强调过要手下的人学会写单元测试,这是我带队的第一个项目,自然希望将它做好,但是我发现时间是真的不允许,项目总工的时间是1个半月,我发现从我开始调研需求到形成原型图、开会讨论需求、到最后生成需求文档这一系列就用了两周,还有一个月还没开始编码。这个时候我有点慌了,将最重要的设计工作的时间压缩到一周,白天维护扫描器,晚上加班加点进行对应的设计工作。一周结束之后我发现我完成了对应的架构设计,知道系统应该分为几个模块,每个模块该实现什么功能,至于如何实现具体功能、如何进行模块间通信与管理,这些根本没有时间,只有让手下几个人仓皇上阵。最后的结果可想而知,很多早期设想由于手下的人没有时间做最后砍掉了,最后一遍遍精简,形成了一个最简单的系统。由于编码时间有限我后续没有要求进行单元测试,只进行了最后的内部统一测试,测试时问题百出,有少数bug在短时间内无法解决,最后在不影响系统功能的情况下作了相应的精简。而且项目不得不延期。
总体来说,我第一次带的这个项目是失败的,虽然我早期对它的设想很明确,先需求分析、再概要设计、然后详细设计、编码的同时进行单元测试、每个功能模块完成后有对应的功能测试与代码的review、并在最终完成之后进行对应的统一测试。并最终形成对应的需求分析文档、概要设计文、详细设计文档、数据库文档、测试文档、验收报告等等。并制定了相应的编码规范,前期甚至计划每天按照规范review他们提交的代码。但是最终并没有按照这条路走。针对这个项目我总结出来大概有这么几个原因:
- 自己的维护工作与带队工作没有规划好,经常就是忙于处理扫描器bug、而无法兼顾这个新项目,这个问题公司中有人已经警告过我,让我盯紧、但是被我以维护工作忙等原因给忽略了
- 自己水平问题,我不知道一般专业的项目经理或者团队的架构师在做需求和设计大概需要多久,我总体进行需求分析与概要设计大概花了有3周时间,从项目的时间周期来看我感觉这个时间偏长
- 自己管理问题,前期虽然指定了一些列的编码规范、搭建了gitlab作为项目管理的工具,但是后期我基本没看过他们提交的代码,也没有做到每天查看进度,甚至在后期编码的时候已经没有进度计划了。我发现我自己在给自己制定计划的时候很从容,而且后续也基本能够按照进度走,而为团队制定计划的时候,我总会考虑团队成员的水平,总担心他们水平不行,能不能在工作时间内做完,如果逼的太紧会不会影响他们的正常作息,一直没法给出一个合适的计划表。当然这也跟后续详细设计没好好做有关,当时设计上有4个模块,按照每周一个的进度简单的定了一个计划,但是后续并没有严格执行,没周最后我询问进度时,下面总反应有难度,然后就延期。当然也有未延期的,但是我没有时刻紧盯进度,所以具体啥时候完成了模块我也不太清楚。
- 手下水平问题,这次项目中我感觉明显有部分人是在拖后腿的,由于是实习生,我本来没对他们报太大的希望,只希望他们能完成打杂的工作就好,写写前端页面、帮忙弄弄数据库、搭测试环境啥的。但是我发现有的连这些都完成不了,还得团队其他成员帮忙完成这些。有的实习生好像是抱着来学习的态度在做事,有问题了直接问,自己从来不搜索,不尝试自己解决问题。当时招进来的时候确实也感觉到能力不怎么样,但是看着还未毕业,想着可以来慢慢培养。通过这次我发现,招实习生也得招那些能做事的,培不培养另说,至少要能做事。
总说理想很丰满,现实很骨感。项目刚刚接过来我跟领导信誓旦旦的保证完成,但是后续在实施过程中遇到许多困难。从这次项目中我学到了许多、知道程序员没有想象中那么轻松,那些管理岗位并不是只要发号施令就OK、还得要合理的进行相应的规划、合理的发号施令。而且还要盯紧下面的人,有的人只有盯紧了才能发挥全部能力,否则总会缺斤少两,总想偷懒。自己需要摆脱老好人的思维方式,多为项目考虑,而不要过分考虑团队中其他人的感受。适当基于压力不一定是坏事。
当然在工作中最成功的还是自己独立写出来一个facebook爬虫,项目的细节我已经在我另外一篇博客中详细的写了出来。这个项目中使用了新的JS解析工具、并且翻译了它的中文文档。在这个项目中,被许多人叫做大神,甚至有人给我打赏,请求帮忙解决一些问题。这些都让我的虚荣心得到满足。而且也拿到了项目奖金。或许这个项目是今年最成功的项目。
学习总结
在学习上好像之前也立过不少flag,但是执行的都不怎么样。当时总是信誓旦旦的说要学习网络原理,要看完TCP/IP协议这本书。但是后来慢慢的就将它抛之脑后。后续脑袋里面冒出过很多想法,有很多要学的东西,但是很多都做到一半就结束了。这年的状态经常是这样的:
- 这个技术好,我要好好学学,用它写一个XX程序出来
- 然后是找视频或者看书
- 前面的好像很简单,不用细看了,快速阅读吧
- 基本语法我都会了,开始写项目吧
- 这个东西好像没有什么好的界面库,还是用B/S架构把
- 前端技术好像不怎么会,学学这个吧
- HTML 标签我都知道,直接学CSS吧
- CSS 这些都很简单,看看JS吧
- JS的语法跟C很像,不看了,用的时候再查吧
- 网上找一个前端界面,自己从头开始写
- 这个JS代码我看不懂,还是转回去学学JS吧
- 最近看了一下这个前端框架,先用上吧
- 这个框架好像要求懂HTML + CSS + JS,还是好好学一下这些吧
- 从头折回去学那些东西
- 最后正式开始写的时候又发现,好像用另一门技术或者语音更容易写类似的程序,先学一下新技术吧
这一年似乎都是这么一个死循环,结果专业术语了解不少,但是代码明显写的少,很多书买了一堆、各种在线教育平台的课程买了一堆,后续因为看上了另外的技术而放弃了前面的内容。结果时间花出去了,钱花出去了。但是仍然一事无成。看似很努力,但是没有什么结果。最近看到一篇微博上写的大意是这样的:在学习上有真正使你进步的,还有就是让你以为你进步了的。我感觉我这一年应该属于第二类。感觉很努力应该比那些天天刷抖音、快手的强。但是仔细想想可能还不如这些人,毕竟我时间也花出去了,结果与这些人水平无异。
在学习上我完成的只有之前定下的,VC的高级编程与Windows驱动编程的内容,我想我能完成这些在于这些是当时刚立下flag的时候进行的,那个时候还是很有毅力的,还有就是这些我手上的资料比较少,只能看那个。而且没有什么要完成项目的想法,仅仅只是学习防止日后有用。
我发现对我自己而言很多别人很好的建议在我面前都没有什么很好的效果,比如说很多人建议的,在学习过程中以结果为驱动,以完成某个项目作为驱动,但是在实践中我发现,我自己在写项目的时候容易发现自己的不足,转而去学习另外的东西,结果导致什么都没学会,项目也没有完成。还比如很多人建议的,广泛阅读资料,在这条我会发现自己很多不会,转而又去关注不会的东西,而把原来的任务抛之脑后。
针对这些问题,我想今后的解决方案是这样的:
- 在写项目的过程中,只关注那些与具体技术相关的内容,而像界面这些东西,能直接拿来用就行,不用太关注。
- 在学习新技术的时候,不要看某些东西简单就挑过,也不要因为某些东西看不懂就转而去研究这些看不懂的,而是在所有内容看完后在回过头来,关注那些不懂的。有时候不懂的那些是因为另外的技术不懂,这时候可以把不懂的新技术作为下一阶段的学习目标
总结与flag
不管怎么说2018已经过去了,在怎么追悔都无济于事,我想做总结的目的不在于一件件的数那些成绩,然后沾沾自喜,也不在于一遍遍数落自己的缺点大骂自己没用。总结的意义在于发现自己的好,来年继续坚持。发现自己的不足,来年争取改正。在这里我给自己再立一下flag:
- 读书(20本)
- 写博客(一周一篇)
- 学习计算机的基础内容(算法、数据结构、编译原理、网络协议)
- 学习新语言(GO、JavaScript、PHP)
- 学习Web安全的基础内容(XSS、SQL注入等等)
这次学聪明了点,flag不能立太多,我觉得能把这些完成就算不虚度年华了。
最后祝所有朋友在新的一年越来越好、单身的早日脱单。。。。。