实习小结

2个月的暑期实习结束了,不能算非常圆满但是也有许多感受。毕竟,挤了两个月的地铁,每天3个小时,无论是上班还是回家身体都是湿的,也算是体验过了社会人的生活。
    在公司做的是后端工程师,其实就是协助团队实现一些小的模块,修改页面等一些外围的工作。这些都在预料之中。我找实习的初衷还是想体验一下互联网公司的工作环境、工作模式和方法,同时了解一下他们是如何了解并学习新知识的,从这一点上来说算是如愿以偿。
    在学校,无论是作项目还是产品,往往是一个人大包干。从产品(网站)设计,前台html,javascript编写,数据库架构,后端coding,都是一个人完成的。而在正规的公司里,这一套流程是有着严格分工的,大致如下:1 首先由产品经理与客户交流,讨论、沟通并产生需求,作出产品原型图,(在软件领域应该算是工业设计原型图?) 。将原型图交付设计师,让设计师通过构想的原型图设计出相关图片。前端工程师通过设计师的图片切图并作出静态页。同时,产品经理通过沟通和文档的方式将需求告知后端开发人员。研发人员根据需求设计数据库并进行相应coding,其中还要与前端工程师沟通并完成一些接口交互(比如json等),产品完成后最后进行测试等步骤。
    首先说说产品经理。我认为,对于产品经理来说,需求和体验是灵魂,沟通和设计是方法,而制作原型图与撰写相关文档是必备技能。体验就不用说了,产品经理就是为优质的用户体验而生的,‘用户体验’往往被他们挂在嘴边。而需求分两方面,一方面是与外界进行沟通,从而了解到的一些需求。这里面的沟通是有一些技巧和方法需要注意的。另外一方面则是自己通过对产品的理解,对生活的感悟自己创造出来的,这里也是见真功夫的地方。这两方面,前一种主要靠沟通,后一种主要靠自己的设计(create)。 
    然后是原型图,什么是原型图呢?比方说你想设计一个网站,那么,在大刀阔斧开工之前,你总要在在纸上写写画画,作出网站的一个view草图,这个草图就是原型图。只不过把你原来要在纸上完成的工作放到电脑里进行,加快工作效率和将草图交付他人进行交流的效率罢了。这里推荐两款软件,一个是balsamiq,一个轻量级的原型图制作工具,我实习公司的产品经理一直在用。另一个的功能就相对较多同时软件本身也相对臃肿许多,axure。百度的产品经理在用它。
    产品经理由于是站在全局去把握产品的设计方向,所以需要有相当强的思想和眼光,更多的时候的确是需要从管理的眼光去看问题。产品经理需要见多识广,思维活跃才能不断为产品注入新的能量。同时又要脚踏实地去把握用户而不能脱离用户,“用户至上”这一点微信的产品经理张小龙是一个榜样。
    个人认为走互联网也就是电子商务方向的信管人比较适合做产品经理,基于技术而又高于技术(就是不用掌握太多的技术),同时需要一些创造性思维和较强的沟通能力。
    
    接下来说说设计师,这个我了解的的确比较少了。。诸如PS AI等相关工具的熟练掌握肯定是必不可少的。我主要是想强调设计师的不可或缺。诚然,即便没有设计师,你仍然可以让前端工程师直接作出一个符合大致标准的静态页出来。不过,像一些复杂的边角光影效果你肯定不能指望能达到一个比较好的效果吧。一些细节方面的地方可不是你抠抠其他网站配色和插图就能搞定的。

    下面讲一下前端工程师。前端,多么绚烂的一个字眼啊。所有复杂又牛逼哄哄的动态特效全部经自我手,想想都是激动人心的一件事。其实,前端工程师大部分工作还是蛮辛苦的,需要将设计师的图稿转化为html页,要适应chrome 要适应火狐,要适应IE, 要适应IE6(这个囧),要适应iphone,要适应ipad,要适应ipod....适应你妹啊适应!  各种js效果不好调试有没有?需要不断大刷(清空缓存)浏览器有没有?css要各种hack有没有? 要考虑SEO优化,要sitemap有没有?  
    上面全是前端苦逼而且做起来又略无聊的地方,有没有除了js特效还让前端大显伸手的地方呢? 看看阿尔法城的前端设计吧。前端MVC架构。恩你没看错,就是前端mvc。事实上,做网页经常遇到这样的情况,就是网站的页面很少但是单个页面的前端设计及其复杂。这个时候普通的单一js文件就不适用了,你需要自己架构或者使用现有的javascript的MVC框架解决问题。这时如何优化js,css代码,如何建立起一个低耦合,复用性高的框架,如何灵活地运用一些设计模式,这都是前端工程师面对大型需要而考虑的。
    除此之外,现在html5的流行与移动互联网的兴起也让前端有了更多的用武之地。最后推荐一些干货吧。bootstrap是twitter推出的一个能够使前端工程师快速开发出兼容性强,组件功能丰富的javascript开源库;一个名为Alice-css的base.css文件也能解决一些兼容性方面的问题;backbone是一个javascriptMVC框架,这个我也有待学习。

    接下来就是后端啦,geek们 哦不,hacker们一起high起来吧!这才是我们程序员的天下啊。各种算法数据结构、设计模式、各类语言各类框架各类大规模架构方案软件让你学个够! 
    现在的编程语言百花其放,各自适合的工作均不同。使用哪种语言还真是萝卜青菜各有所爱。注意一定要发挥各个语言之所长:python就要做胶水语言,java在业务处理方面非常出色,php最适合网页展现;.NET在MIS方面独领风骚。
    选择什么语言不重要,关键是要看清语言背后的东西。绝不是你学过一门语言,然后再使用过那门语言的相关框架开发过项目你就能出师了。那只是一种你掌握的技术,而单纯的技术并不能转化为自己的理解,不能转化为自己的能力。先说面向对象。要搞清楚的是基于对象和面向对象是两码事,java是一门基于对象的语言,而不是你使用java编程你就面向对象了。在实践中不断地领悟GoF提出的设计模式原理,慢慢地学会对象的用法。能根据需要,灵活地运用接口与继承是关键。
    有人认为算法和数据结构在互联网方面作用很小?抱有这种观点的人一定没涉及过web智能推荐算法以及大规模分布式算法等领域。其实这也是互联网方向的另外一片天地,当网站规模不断扩大,服务器数量不断增多,如何灵活地去设计服务器架构,拆分数据库表结构,并提出相应的分布式方案,也是一个非常有挑战性的难题。这其中也涉及很多算法需要自己实现,因为数据库默认内核封装的算法并不能满足你网站架构的具体需要。还有一些是根据用户需要而产生的算法,涉及到了一些交叉学科领域(比如MachineLearning),刚才举的web推荐算法就是一个例子。
    一个合格的程序员很大程度上也是半个运维工程师。平时数据库、服务器的维护往往也需要自己亲历亲为。这就要求你熟练掌握linux,unix各项指令的使用,一些常用的服务软件比如memcache,sphinx等的使用方法。
    对了,还漏了移动开发。想做手机开发的人,我想说的是,做IOS吧,Android的各种不兼容实在是太蛋疼了,而且安卓市场有一些不合理的地方,相对来说不太容易赚钱。另外,wp7,wp8应用也可以尝试一下。
    说到做应用,微软最新的office13提出了支持社交的理念,同时也支持针对office进行第三方应用的开发,感兴趣的同学可以尝试一下。
    
    最后是测试。无论是做网站还是做系统都需要测试。公司曾经在的周末分享会上请来了IBM的测试MM专门讲了测试的过程与方法。主要讲的是黑盒测试。大公司的测试步骤简单说来分为这么几步:1 开发团队派遣一名负责人向测试团队发出Test申请。Test团队然后根据需要对其进行评估,主要考察是否值得动用团队精力去做测试以及动用多少人力资源。确立之后,Test团队再进行测试项目启动会,制订计划,并向开发团队索要需求文档。之后就是很关键的一步:根据文档设置测试用例,就是case。case会根据项目需要和测试团队自己发掘出的一些问题不断增加和细化。

 

    细化到什么程度呢?IBM有一个进行了一年的项目,而根据需要产生的case就已经有上千多个了,每一个case的填写字段超过20个。从这里首先可以看出测试和开发时并行的而不是先开发后测试,然后,根据项目的不同,测试用例可能会增长到非常恐怖的程度。所以其他人的经验不能照搬照抄,要根据自己团队的规模合理地决定测试用例的粒度。

 

    测试除了黑盒测试还有白盒测试。这就需要测试人员自己去写自动化测试脚本,还有可能借助现成的诸如loadrunner等测试工具辅助工作完成。说明测试人员自身也要懂一些技术的。
    

 

    扯的越来越远了,简单说说我实习做后端的收获。首先是学会了个MVC框架,又再次颠覆了我对MVC的认知(又颠覆了。。。。),了解了开源领域的猿们是如何快速接受新东西的。在选择开发工具方面,我想对IDE说再见了,不轻量的东西就不灵活,不简洁。公司里的人大部分都使用sublime 一个轻量级的文本编辑器,其优点在于能灵活地自定义快捷键、高效的查找替换、更便捷地代码书写方法以及优美的UI(说到UI最近新出的vs2012也是我的菜)。如果你够牛比,你可以尝试emacs ,一个操作系统级的文本编辑器,为什么是操作系统级呢,因为它的设计初衷就是你能在里面干任何事情,比如敲代码,比如发邮件,比如看电影,比如玩游戏,比如。。。不过相应的,学习门槛也很高。最后是一款大家公认的杀手级工具,vim 谁用谁知道吧。我是用不习惯。
    实习中除了技术上提升之外更多是不断体会沟通的技巧。比方说,客户说:“我想要实现一个XXX功能”,然后你说好,然后去做了。最后给客户看,客户说,“你怎么作成了这样的东西呀,我想实现的是XX效果”,你很委屈地说“你上次跟我说需求时并没有提到这一点啊”。就此僵持。
    谁的错?客户的错吗?其实是不完全的。首先,你要知道,往往在客户的脑海里,他所想的需求就是不清晰的,是模糊的,也很有可能是整个客户团队经过各种讨论最后折中的一个结果。其次,不同的人语言表达的方式和能力是不一样的,他以为你能理解,你也以为你理解了,中间的差别也可能有十万八千里。
    如何解决呢?记得SYN的三握手吗? 为什么要三次握手而不是一次就行呢? 就是要反复确认。沟通时要学会去向客户提问题去验证客户的需求,这也是让客户明确自己需求的一个过程。我用信息的传输打个比方。客户头脑中的需求是信息。从客户嘴里说出来是编码,然后通过耳朵传输到你的脑子里,这个过程是信道传输,最后你通过自己的理解(就是信息的解码)转化为自己的信息。信息在传输的过程中是肯定会有丢失和错误(误码)的。原因可能出自多个方面:也许信息在源头就是不确定的(客户头脑不清晰),也许信息在编码时就发生了错误(客户不懂得表达的技巧),在信道传输时发生丢失(客户的话你左耳朵进右耳朵出),信息解码发生错误(你自己理解能力有问题)。怎么办呢? 我们说提高信息传递效果有多种方式,比如信息要有冗余,多次传输去验证是否接受信息正确(要求客户反复说明),信息传递后你要有校验码验证(自己向用户再次确认)。总之,要“正确领会客户的意图和弦外之音”。

 

      还有一大感悟就是:在工作时是否要追求完美?追求到什么地步?这个时候我们可以尝试遵循80/20原则,即先集中精力解决80%的问题,再慢慢解决剩下20%的问题。“许多失败并不是因为人不够优秀,而是做事情的方法不对,一开始最求大而全的方案,之后长时间不能完成,最后不了了之。”   

      实习的遗憾也是有的,本来打算好实习3个月的,结果开学有很多事情出乎我的意料。很多学校的事情是推不掉的,权衡再三,只好决定提前结束实习,不然两方面的事情都做不好。感谢实习期间团队的各位伙伴对自己的提携和教导,使自己进步很多。临行前公司赠书一本,望我继续努力。
    感觉自己还没掌握的知识还有很多,至今我还没学如何用git;在面向对象方面仍有许多困惑;前端代码实现起来依旧有很多问题;很多框架和软件都只是了解而没有实践操作过。在实习业余时间在网上还报了个MachineLearning公开课,望能坚持下去。
    新的一周要开始了,公司里的伙伴们依旧要开会、工作,为geekpark,itvalue的成熟壮大而奋斗。我也要开始忙碌一些自己的事情,前面依旧是一片天空。

转载于:https://www.cnblogs.com/northestknight/archive/2012/09/02/workthinking.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值