作为一名初学者,或许你会一直迷茫不知道这个行业的运作方式,也不知道应该掌握哪些技能才能够让你衣食不愁,但是作为一名不是很称职的程序员,如今我根据自己的经验做一个简单的介绍。
首先,生活在这个快节奏的社会中,不管你是哪个行业又或者正在做什么,我相信你总是离不开电子设备,而且大部分人是无时无刻守在电脑或者手机前进行一些事情的,很简单的一个原因:生活离不开劳动,劳动不是体力就是脑力,而脑力总是有限的所以就需要一种或多种工具来辅助我们。于是乎各种各样的辅助方式由此出现,由最初的甲骨文、竹简、纸张逐步发展到电脑,由此可见辅助的重要性。而现今社会的最为标志性的辅助就是充满各种诱惑的电子设备,最大的也最好用的就是Inter网络,因为在这里只要你只要如何操作,那么不管是通过正规又或者违规的方式总能获得你想要的资料,而获取的资料总是能够帮助你取得一定的利益,所以不要一提到黑客就感到恐惧或者厌恶,其实所谓的黑客等只是善于利用手中的资源或方式来获取一定的资源,而获取的资源往往是比较隐私的,所以被人们所厌恶。但客观来看,通过技术手段获取到感兴趣的资源,以此来满足自己的欲望或者利益,这是一件很正常的事情,只不过有些损人利己,所以被人们厌恶。同时也是学习技术到极致的一种表现。因为只有玩转了程序你才知道如何通过程序来获得自己想要的知识。试问如果你连电脑安全模式(PE)都不知道,你又怎么会知道如何安装系统如何破解登录密码呢?
回归正题,关于一个程序,在我看来就是一个从无到有的辅助工具,而这个工具的具体作用,是根据特定人群的需求来定的,毕竟有需求就会有市场,如果这个产品没有人需要,那么哪怕它做的多么的完美,也是垃圾。只要有需求那么哪怕它做的不是很好,也会有人使用,只要有了需求你的产品才会有不同的版本,才会在逐步完善中获得利益。
而一个产品(程序)的产生需要经过如下几个过程:
需求调研—>产品架构—>产品生产—>产品测试—>产品推广—>产品完善等
在上述的过程中又可以划分出多个工作职位,每个职位的侧重点都不尽相同。具体要做什么职位则需要在了解后根据自身的实力来给自己定位,至于为什么要说根据自身实力来定位,那是因为虽然勤能补拙、笨鸟先飞但是要记住在这个过程中你需要的是时间,而时间代表的往往是经验,你缺的就是经验也就是时间,所以除非你比天才付出更多的努力那么你才能有那万分之一的进步,到这里请你思考一个实际的问题,明明可以花十分努力做自己擅长的可是却不知道思考一下却花费百分努力做自己不擅长的,到底是得是失需要你自己去思考一下。所以在此奉劝逻辑能力不是很好的同学要认真思考一下,是否要继续做一名程序员了,毕竟笨鸟飞一天的距离不一定比聪明的飞一小时的距离远,但是聪明的也是要飞一天的,所以我个人认为如果笨鸟先飞的规律不适用在这个行业。
首先是需求调研:
需求调研是一个产品产生的开始,当市场有了对某类事件提出需要更优的管理办法,那么就有了需求调研的必要性。因为需求来源于用户、需求来源于市场。这时会有相关的职场老手根据用户或者市场的需求使用某些方式去寻找一定的规律然后将规律转化为代码可实现的产品,当然这是个不断优化的过程,因为 大部分的需求总是不可能一次成功的,这时必要的可行性分析也随之而来涉及到的职位(可行性分析的参与者)有产品部、研发部、销售部等相关部门,相关部门的经理会根据需求来分析哪些可以实现、应该用何种方式去实现、实现后的价值又该如何定义等专业问题。规划好后根据需求者然后进入产品的搭建流程。
注:在产品搭建时需求总是在不断更新变化的,在考虑到时间复杂度和空间复杂度的基础上如何搭建一个较为优化的架构是考验一个架构师的标准。
然后是产品架构:
架构是一个产品的基石,用一个不是非常恰当的举例来说明:架构就可以看做是生活中建筑物的承重,在建筑物的初期要考虑好哪些承重是必须遵守的、哪些是相互关联的等诸多问题,只有承重做好了,其他的具体是搭建办公室还是搭建房屋不管你怎么装修只要你遵守架构的标准,那么这座建筑物就不会坍塌。同样,架构师在做好架构后,程序的标准已经有了,此时只需要编写具体的功能代码就可以完成一个基本的程序了,因为需求的不断完善,所以程序也是在不断添加或更改新功能的,就好比是装修房屋,只要承重不出问题,那么你随便装修。程序也是一样,只要你的程序有较好的优化那么不管你如何修改内容,不管你的方法是如何的关联或添加,你的程序都能如常运行,这就是一个好的作品。
其次是产品成产:
在架构中已经简单的介绍了一个程序的基本框架,而产品生产就需要诸位编程人员的参与了,工作的内容就是在已有的架构上面去实现具体的功能,也就是传说中程序员的具体工作了。当然一个程序员的工作不仅仅是要去实现诸多的功能,毕竟需求是有限的,所以身为程序员做的最多的往往是对具体功能的调试以及完善代码。或许大家接触最多的就是这类人员了,但是我认为在程序员中也是有着等级划分的,根据代码的不同写法,程序员又可以分为初级、中级、高级三种人员。而我这样划分的依据是根据书写代码的空间复杂度和时间复杂度来划分的,如果这样说有点过于专业术语,那么换种说法就是,同一个功能,初级程序员考虑的是如何实现这个功能、中级程序员在实现的基础上回考虑功能会发生哪些意外状况、高级程序员则在考虑突发状况的基础上会从cpu等诸多底层中来编写代码,往往会使用有限的代码完善这一功能。从这里就可以划分出等级了。但是此时也是一个编程人员脑容量的划分。毕竟人人平等是理想的而不是现实。
再然后是产品测试:
在一个产品初步完成以后,要进行的不是立刻上线使用,而是进行一下各方面的测试,和游戏内测、公测目的是相同的。虽然在开发的过程中,程序员已经充分考虑了各种突发事件,但是有些突发事件总是想不到的,此时就需要专门的测试人员针对产品进行测试作业了。测试是一个很关键的步骤。不仅仅在IT行业,在其他行业更为显著,我之所以这么说是因为目前国内的测试并不是很被重视。在我看来测试是一个比开发略重要的步骤,开发和测试就好比是一对欢喜冤家。我们先来说一下测试的工作内容。
测试,从字面就可以理解,是使用专用的测试工具或者通过特殊的技术手段针对产品的功能进行的一项作业。理想的测试是要针对某一功能去查看其压力范围、在各种突发状况下是否稳定、是否存在漏洞等诸多内容的。但是现实情况却不是这样的。现实的测试最多的还是在有限的条件下保证产品能正常 运行,然后做一些常出现的漏洞测试。这也是测试人员的一大悲哀。之所以这样说是因为在我看来,一个好的测试人员必须要有好的开发能力,只有你开发过才能了解这个东西是如何实现的,才能了解如何做才有可能测试出程序的最大承受范围等。但实际情况却是在没有开发基础的情况下,只是掌握了测试手段,在了解一定的产品功能的情况下去根据自己的工作经验来进行测试。然后在没有错误的情况就发布推广了。这样做的悲哀在于,客户总是在不断的抱怨产品不如期待的那般如意、实施人员在实施完成后不断地在处理各种问题、测试人员总是在某些问题和开发人员争论不止。开发人员也往往因为自己的劳动不断修改而感到疲倦。所以说,如果一个好的测试部门是很重要的,和开发一样重要,因为测试部门在测试后遇到的诸多问题能完善的由开发人员去修改,完善不了或者有难度的就由测试人员来给出问题的解决办法,暂时将问题绕过。这样实施起来哪怕遇到问题也是可以快速解决的,一个良性的循环往往能带动员工的积极性、企业的发展和无尽的客户。但依旧要说的是,现在的测试人员却是上述的恶性循环的一个元素。
接着是产品推广:
产品生产出来后,经过测试达到基本的推广条件后,就可以交给客户进行使用了。而有了产品就需要销售部门将产品卖出、卖出以后就需要专业的实施人员去现场实施。当然了实施完成后必不可少的环节是产品如何使用有时候是需要教给客户的。在这里一个好的程序销售人员我不做介绍,实施人员往往能接触的一线的客户,有时候客户会针对产品提出一定的疑问和不满,这是就需要实施人员有一定能销售能力和讲解能力了,这也是考验一个合格的实施人员的标准之一。所以实施人员在具备基本的实施能力的基础上,如果能根据客户的交流敏感的觉察出产品的不足或如何完善是很重要的,也要有强大的问题解决能力,毕竟突发情况总是肯定会发生的。还要有一定的销售能力,之所以要有销售能力,是要及时的将公司的新产品介绍给客户了解。不要一味地等待销售去做。如果一个实施人员具备以上技能那么一枚强大的优秀实施工程师就会诞生。
上述的几个工种是我根据自己的经验总结并思考后得出的,或许有很多的不足和偏见,希望可以谅解并提出修改建议。我会虚心接受。同时也希望给迷茫的各位带来一定的帮助。