新人入职来的四月

新人入职来的四月

一、自我介绍

 

SweetLover,性别男,爱好体验游戏并思考设计游戏逻辑(幻想的工作),2014年7月毕业于一所二本院校,学习机械与电子工程系/自动化专业,于2013年7月开始入职,在合肥某公司做视频监控行业。在校期间,获得:2010年信息工程学院计算机程序设计专业组团队(实际就我一个人,比赛迟到20分钟第一个做完)赛一等奖(普通学校的比赛考的是基础,没什么好说的),并成为计算机系主力战队队员之一;2011年安徽省达内杯计算机程序设计三等奖;2012年蓝桥杯安徽省软件开发专业比赛省级二等奖(也很简单,只能呵呵了);2013年达内发现杯安徽省程序设计前50强(排名12,有免费的培训机会,没把握住);2013年蓝桥杯个人赛安徽省省级一等奖,赴北京参与全国总决赛(没获奖,的确是我水平和心态不行,和发挥没关系)。

特长:音乐(懂基础的音乐知识和部分乐理知识),唱歌(大一校园歌手风采大赛系三等奖),数据结构和常用算法设计(在校期间获得的主要奖项集中在算法上,没做过太多应用型项目),健美操。

玩过的游戏:FPS(第一人称射击类游戏,CS、CF),ACT(拳皇、鬼泣4),实时战略(帝国时代2、红警2、红警3、魔兽争霸3),网络游戏(QQ英雄杀、三国杀、Dota、LOL),回合制游戏(末日英雄3、英雄无敌5、大富翁4)。

面试经历:去大公司面试失败(心态和规范问题是最主要的失败因素,当然学历也占一部分原因);网投简历,就职于合肥一家视频监控公司。

 

二、初来乍到

 

刚开始洽谈后,我提到自己目标是成为软件工程师或软件研发工程师,自认为掌握算法就能具备较高的优势,应用开发等不在话下,眼高手低。结果就去了windows部门,起初是做软件更新设计方案,可是我MFC界面都不会做,服务器不会搭建、网络、操作系统一问三不知,后果可以说很严重,所以就被安置到了linux部门先补一下基础,做minigui。一段时间后,因面试水平较好,被调到了windows部门。我一时间是无法平静下来的,因为社会和学校的反差太过于巨大,或者说跨专业就业这样的半路出家,磕磕碰碰自然也不在话下。什么软件工程、计算机网络、计算机图形学、操作系统、组成原理,对于都没学过的我可想而知。不过还是感谢大家的包容,以及自己个人的敢想敢闯,虽然这段时间犯的错误不少,出的成果几乎没有(我自知许多软件公司不愿意培养新人的根本原因是怕培养的过程中,新人不能出一点成果,还嫌弃工资低,培养好了跳槽),因此下决心起码要做出一点成绩来,起码要补上培养费(这个培养费不是公司要求的,是我自己给自己定的目标,就是起码三个月帮公司回本,不过说实话眼高手低了)。为了平衡心理,我去搜索那些新人的成长轨迹,发现即便是北大的学生,初来乍到不了解产品就做东西,后果也是很糟糕。于是我开始了自己的职场生涯……

 

三、工作回顾

 

我是断断续续工作的,中途请过假,因为学校还有各种麻烦事,真的很想吐槽。当然请假也有一点逃避的心理,想过换工作,想过自己可能不是这块料子,想过当初选择机电系不选计算机系就是因为程序员是“青春饭”,只能干到35。后来才感觉,今非昔比的软件行业绝非如此。我想90后的我们可能多多少少都有点个性,所以在公司老板也称呼我比较奇葩,不过愿意分享交流也是我们的特点,不像有些职场老前辈有保守心理,要巩固自己的地位就是不能多和别人说自己解决问题的方法和技术,生怕别人学去,威胁到自己,这点在我认识的部分同学(比如有的学长)当中也有发现。所以后来,公司内部的学习报告交流会,公司福利的旅游或是聚餐,我也会比较积极的参与歌唱方面的表演,尽管冬天的寒冷对具有先天性支气管炎和鼻炎的我极其不利……

工作当中我到底做了些什么呢?下面开讲:

第一战,用minigui打响图形界面编程的第一枪:

这个项目用意就是借助minigui去了解windows图形界面和事件驱动的消息机制,以及linux系统和环境,当然这并不是打算叫我一直就做这个,因为本人的算法、数据结构等部分优势还是有的,而且许多时候给人感觉一点就通,只是有点不务实(体内残留的感性文艺范特性所致吧),因此这就暗示了后来的命运。

minigui怎么做呢?很多新人到了公司不知道什么样才是工作状态,甚至连搜索引擎都不会用,我就是其中的典型。如何在linux底下搭建环境,绝大多数人都会告诉你,不懂就google呗。我开始也是这样就导致看的博文东一块、西一块,不仅没有系统,也不一定能够成功,因为linux系统有很多发行版本,很多博主的博文里面在搭建环境上就有一个极大的问题:他们只描述自己遇到什么问题,参考什么资料或者博文解决的,但是从来没有深入的说为什么这么解决。我觉得对于一个想当将军的兵来说,一个人一定要有很强的求知欲,打破沙锅问到底,谈情说爱追到家这样的决心,他才能干好事情。

从事情的本质上来说,任何事件与命理,乃至生活中看似冥冥中注定的东西,在发生与执行的时刻都是个命题。所谓的命题的成立与否、真与假都与大环境有关。何为大环境?就是前提条件,不过分大前提、小前提……

许多博主博文在叙述minigui搭建的时候,没说在什么linux系统的哪个版本号上搭建minigui的哪个版本。所以就导致了新手,有的为了完成任务,强制用虚拟机装个相同环境的系统完成任务草草了事,而不问原理。minigui中系统环境的搭建,我在看了许多博主的博文后总结步骤如下,这个是适用于Ubuntu 11以下版本的,minigui3.0的搭建(具体做法不再展开,本文不是教你如何搭建minigui的,本文是教你怎么入职的):

(1)   安装minigui库和minigui依赖库

(2)   设置lib的环境变量以及安装示例文档

(3)   安装 qvfb2 framebuffer模拟程序

(4)   修改MINIGUI运行配置文件并运行示例程序

minigui的编译:

(1)   如果没有,则安装编译器:sudo apt-get install gcc g++

(2)   pthread库:sudo apt-get installmanpages-posix-dev

(3)   编译指令:gcc –o AppName AppName.c –pthread –minigui_ths –ljpeg –lpng –lz –ldl

后来我发现了一个通用版的做法(在任意的Ubuntu上均能搭建成功的):

访问网站:http://www.minigui.org/zhcn/,别急着搭建环境,耐心的阅读相关的介绍,以及换件搭建的注意事项,下载Wiki文档参阅详细指南(这么做,那些博文的日志你几乎都不用看的,我说真的),参考文档里面配置minigui。

有些人可能发现,像ubuntu13.04这样的系统不支持minigui,因为当你要sudo apt-get install qt3的时候,系统会提示找不到网站,原来是因为高版本ubuntu里面自带的Qt库是高版本的qt库,qt4已经不兼容旧版了,而minigui3.0中的qvfb2.0又依赖于qt3,那怎么办?我告诉你,sudoapt-get install *指令是干什么的?安装软件的。安装源在哪?在系统里面设定的指定网站里面的。好,回答到这里,问题就解决一半,我可以怎么做?1.在系统里面的指定网站中添加旧版的(不推荐,新旧版设计不兼容,不建议这么做,其实在高版本ubuntu中,就不推荐minigui,最好用qt);2.直接搜索关键字,要安装的软件(例如qt3-dev-tools-compat),然后从官网里面选择下载安装即可。

是不是很简单?以后工作,尤其是做底层的,要有这样的精神,么什么是解决不了,就是时间问题!然后我用minigui做了个计算机,用到了队列数据结构考核通过就来 windows 部门了。

第二战,掌握MFC,学会自学:

我在学校一直做算法程序设计,从来不搞应用的,唯一一次做应用方面的比赛还是做单片机的。我当时没学单片机,只有C语言的及其扎实的基础,以及对汇编这种底层语言的盲目崇拜,我在比赛前一个星期买了开发板和说明书,一个星期内学会单片机编程的(并不是学会单片机,切记)!为什么我说学会单片机编程,而不说学会单片机?一门知识什么才叫做学会?我觉得学会就意味着你对这个领域有所掌握、体会、心得。如果说学会单片机,那就意味着你不光光会写代码,你还应该能够看懂并设计、改良电路图,读懂开源芯片架构,你就应该能研究透这是什么。不然学历再高、资历再老,我说实话,我想大家都不认可年龄和学历这些外物给套上的光环,我想不光是INTJ心理特征的人,即便是其他的人也是喜望得到能力与实质上的认可的。

MFC开始我压根不懂,看书迷茫。模仿《VC++详解》里面的例子虽然能做出东西,找到点感觉,但是云里雾里。我最想做的是什么?是把MFC的面具给撕开,看到那面具后面的东西,因为我喜欢观察思考本质,喜欢高度凝念抽象的哲学之类的东西或者是具象的艺术作品,我是INTJ型性格。我是怎么做的呢?

入门过程:在没有思路的时候,先要找思路,于是我开始看《Windows 程序设计(第五版)》的确不错,然后我就开始看着里面的内容,了解了实际上MFC就是提供了Windows API的C++封装库版本的同时,增加了一些加强的功能。封装的目的就是制作模板模具,你拿到只要会用,不需要知其所以然。于是我先把Windows的基于事件驱动的消息机制补了一下,了解了一点原理,接着看用MFC生成的Demo,自己不往里面添加任何代码,查看其框架的通用特点,最后知道了如何手动添加和MFC Wizard一样的代码。感觉就是先要有概念的了解,继而从宏观到微观的把握。就像盖楼房的人不是上来就码转,而是先用设计图纸设计一样!因此我想软件行业里的佼佼者,可能当初也是这样一步步来的吧,虽然我距离他们还有一段距离。有篇文章叫做《架构师最怕程序员知道的10件事》,里面就提到过架构师的特点是:一眼看到本质;有发散性思维,知识面广,不是只会写代码的代码写手,文艺数理样样通;能深入理解需求等等,在此不一一赘述了。我就说一下,MFC怎么学吧:

(1)   了解Windows程序编程框架,经典的Windows版Hello world。这里面最难懂的就是回调函数的参数传入方法和时间,函数是何时被调用的,这个我感觉可能是被封装在DispatchMessage里面了,DispatchMessage调用了窗口过程,如果你C语言基础及其扎实,你应该知道函数指针的详细用法的,以及如何用C语言实现有封装、继承、派生的面向对象的类。

(2)   先看生成的Demo文件,在看h文件,接着看cpp文件,找出它们的共同点。有一句话叫做结构决定性质,因此这些文件里面的结构是怎么划分的,搞清楚就好。

(3)   积累过程,现在正在进行:积累使用过的MFC类用法,不懂时看源码即可。

第三战至今,ffmpeg解码(偶尔自己做游戏,幻想搞游戏开发):

非常感谢我的同事杜大神的帮助,以及CSDN传媒大学博客博主雷霄骅的指引,杜大神带我走进了编解码的世界,雷学长让我了解了文件解析。迄今为止自己的最大感触还是不怎么会用搜索引擎,不过比以前要好很多,以前只会百度,不知道技术方面google是神器!遇到不明白的问题,我会求助于论坛或者QQ群里面的人,不过由于情况比较特殊,我在公司里现在一般是独立工作(被逼的),很多时候靠自己,但是即便自己会了还要问别人的特点是我改正不了的。

ffmpeg 做的时候最大的印象就是,做了个解码库能播放视屏,我心里面极其开心觉得成功了,结果已测试发现很多地方自己没考虑到;接着改了下小毛病,跑了2小时没问题以为就可以了,谁知道内存泄露或者是其他原因导致2小时候播放不了了成静态图像了;最后修改了连续测试了3天,才觉得应该没什么大问题,提交了代码。最后一次偶然的机会许大神帮我发现了解码图像颠倒的问题,问题在于我直接引用自己博客里的bmp文件格式代码时刻,没分析大前提。现在的感慨就是,做事不能程式化,把握宏观,小心微观。不要觉得写了N次相同的代码,第N+1次的代码就是完全一样,一个程序员我想更多地是记录框架、思路这样的东西,而不是熟记代码怎么写。

 

四、总结提升

 

1.      职场适应期

1.1. 了解公司规章制度,福利待遇等信息,不盲目攀比

1.2. 多求助他人,多了解产品信息,不管是否做技术

1.3. 善于总结,学会使用工作工具

2.      工作时需注意(修炼期)

2.1. 我是否真的理解了概念、需求、产品(上升关系),切忌南辕北辙,哪怕花时间多

2.2. 我的分析是否有条理步骤,方向是否正确,方法是否得当

2.3. 在写入产品代码前我是否做了足够的测试,以及演示程序

3.      工作后(貌似我都没做到)

3.1. 注意身体,不要熬夜,我实在太贪玩了

3.2. 去做下自己感兴趣的东西,提升下技能,不要等着工作经验让自己变得有价值

 

五、认识工作

 

程序员、软件工程师到底是干嘛的?其实这个是个概括的称呼,个人觉得不要把事情分得太细,单独负责某一块。写需求文档、分析编码、测试维护这些都应该做做,只写代码不管其他的人不会取得太大的发展,改代码发现错误是个很大的挑战和锻炼机会。

自己原以为软件开发就是写代码做东西,现在发现过于片面。独立开发小型程序的个人开发英雄主义已经过去,现在合作交流才是法则。别想着什么都是你自己做,有的时候要学会借鉴别人的东西。此外不要吝啬与人交流技术,要知道与人交流别人才会与你交流。

 

你可能感兴趣的:(杂谈感想,工作)