美文网首页
做编程的那些日子

做编程的那些日子

作者: 云先生_2017 | 来源:发表于2017-11-02 17:14 被阅读0次

           闲下来已经有一段时间了,一直想写点什么去把过去几年的日子做个总结,也为将来要做的事情做一个比较清晰的描述。在我刚开始决定想去学一些关于编程的技能的时候身边的人并不理解,因为那个时候的很多人都觉的编程无非就是上网玩游戏,甚至被定为 “不务正业”,可是因为年少轻狂依旧走上这条路。就在我开始学习之后的一个月,又有很多人开始说做这类工作收入不错,那时候我就常常百日做梦的想多年之后必然也会获得那种不错的收益,这对一个农村走出来的人来说我对当年坚决的选择学习编程这件事是多么正确。

            虽然身边也有越来越多的消息传来说学校的某某月收入过万,五位数对于一个窝在北京地下室的人来说诱惑还是很大的。可惜在这个时候我却发现自己所学的东西并不像自己期待的一样。那时候我们之所以喜欢的计算机并不是因为一些影视剧中那些白领的工作环境,而是更多的受欧美大片中的那些黑客的影响,可惜我们学的东西却只能做一些简单的管理类的系统,更加严重的是我们越来越难以相信那些不停的传回关于优厚薪资的消息,这些小道得来的信息让我觉得那么的不踏实,因为这个时候我发现我根本不知道自己即将工作的环境到底是什么样子,可就在这个时刻我却毕业了。

           现实永远都是残酷的,所有的东西只有在需要的时候才可能觉的珍贵。大多数一起出去的同学找工作都不是一件容易的事情,而且也会有些同学被骗的消息,让我更加难以相信这是一条正确的路。时间过的很快,在一个毕业半个月之后我收到某公司的 offer,公司告诉我工作地点在银行。银行,似乎是一个很高大上的敌方,相信很多人都会有这种感觉,因为银行在大多数人心里就是代表着钱,而且是很多钱。很快我就发现工作并不是像我期待的一样,频繁的加班,无缘无故的修改,并不是很规范的工作方式等等一大堆的问题都出现了,当然还有一些同事之间或明或暗的的争斗,重点是我发现我并不是在银行工作,而是属于银行的外包人员,其实说白了我们这样一群天天在现场忙的头破血流的人甚至不如忙碌在工地上的工人,这种现实和期待的落差导致我在三年内换了四家工作,而且极具戏剧性的是我竟然体验了几乎和编程相关的各种工作,从开始的代码,测试,做需求到后来的项目演说,管理,运维,当然在这些工作中我也逐渐通过思考和总结,最终明白编程这件事到底是在做什么以及出现现在这些现象到底是为什么?

            时间并不会等你明白之后再从头开始,在我明白之后在这个行业已经发生了很大的变化。首先是做编程的人越来越多,这些人中更多的是通过各种各样的培训学校进入公司的,并没有经历过大学,他们进入的原因简单干脆,工资高,不累,但是这也导致这几年开发的工作其实并不是那么好找。一些大型的互联网公司越来越排斥这种培训毕业的学生,因为公司发现他们并不是自己期待的,而且素质很差,更严重的会拖累整个项目团队,但是面试开发工作的人依旧很多,所以工资待遇的普遍降低也就非常常见;其次,逐步转向软件的公司越来越多,大的像各种商城的购物网站,外卖,小的像超市的结算等等,软件公司多的像牛毛一样,当然水平也是不一样的,而且更加严重的是这些刚刚起步的公司认为做软件一定会大赚,而且是非常简单的。在这种公司和待业人员的对比下我们会发现一种对软件的错误认识是导致双方都失利的很大因素,那么单就业而言,培训毕业的学员为什么会和前几年的差别这么大呢?很有趣的事,我曾经有几周的时间徘徊在某市的培训学校希望找份培训老师的工作,其中的形式也是花样百出。

            现在的培训学校特别多,有联营合作的的,也有直接入住校园的,培训形式也从线上到线下不限。在这些培训的学校中,我发现其实课程和我当初毕业的时候所学的内容差不多,而且基本上是一样的,一般就是流行的Java,框架也是常见的Spring、Struts2、Hibernate等等,其他介绍当前行业的内容则完全没有,甚至有些教材和大学的标准教科书并没有多大差别,枯燥范围对那些早早辍学的人来说没有丝毫的吸引力,而且他们始终像我当初一样坚信开发会由丰厚的收入,甚至他们认为不需要多大的付出就可以,因为他们相信强大的搜索引擎可以解决所有问题,而这些人之所以被大多数公司拒绝就没有多大疑问了。而那些刚刚起步的软件公司其实对软件怎样开发并没有多大的认识,甚至很大一部分人是完全没有了解,只是因为大家都在做就匆匆忙忙的开始了,而且搞笑的是很大一部分人居然有了不错的收入。他们的收入从哪里来的呢?是通过软件开发吗?不是,大多数是通过人才外包的渠道抽取中间的人头费用获取的,其实这些公司和包工头没有多大差别,他不必了解多少计算机相关的知识靠着一些人脉,然后再招聘网站上发布招聘信息,再通过电话安排面试地点就好,我曾经历过很多次这种公司,说实话很无奈,因为它们并不想在软件上有什么发展,有什么比坐着数钱更舒服的呢?

    编程到底是什么

    编程,是什么?开始阐述这个命题前我希望通过一件事以表达我的理解。

    众所周知的是我们的很多科学发明都是通过动物的行为搞出来的,像飞机、汽车等等,那么是什么促使我们指挥计算机完成我们的指令呢?编程在这中间又起着什么作用呢?要说明这件事我需要列举儿以下几件事来和大家讨论:

    1. 我们为什么明白什么是 善良 ? 善良是我们定义的一些行为,曾将我们经历、听说、看到某些事情被我们定为善良,然后当类似的行为发生之后我们会觉的这是善良的举动,所以像人之初、性本善的说法应该是不成立的,在我看来人之初,本无性倒是真的,只是后来经历的不同在大脑中存储定义的不同所以才让人的性格各不相同;

    2. 我们是怎样去做一些事情的?像吃饭这件事,我们是怎样实现的呢?我想正常的应该是这样的,当我们的大脑接受到类似饥饿的感觉之后开始向向手和嘴发出指令,然后完成一系列的吃饭动作,但是我们必须注意,一般人吃饭用的都是右手,但是那些有残疾或者天生习惯左手的人又是怎样的呢?其实他们只是在大脑发出指令前做了一些判断,当然你也可以说是当命令执行到右手时发现无法执行再次返回大脑然后执行也是可以的(但这样依赖执行的过程可能会更长,所以我倾向自己的解释);

    通过这两件事我将对我理解的编程做出解释,在编程中我们也有类似大脑存储内容的部分 DataBase (数据库),而整个命令流程的实现我们称为 Codding(编程),具体的命令内容我们定为 Code (代码) ,那么以上的事情我们可以进行如下的解释:

    我们将自己需要的内容 通过某种形式 存储到 DataBase 中,需要发布指令 Code 前,我们必须完成Codding的过程,这就是编程最简单的过程。

    当然我们日常除了吃饭之后最重要的事情就是沟通,而沟通我们可以使用方言、汉语、外语,而这些信息要确保被交流的对方准确接受,我们定义了 Chinese,English等等,其实编程的进一步就是完成这种交互,为了保证交互的顺利接受,我们定义了各种各样的协议,比如 TCP/IP、HTTP、HTTPS等,这样我对编程的工作的完整定义应该是这样的:

    我们将自己需要的内容 通过某种形式 存储到 DataBase 中,需要发布指令 Code 前,我们必须完成Codding的过程,而我们需要交互时在一种双发接受的协议基础上完成Code

    编程工作的痛苦

    编程,是痛苦的。这是没有任何争议的。因为编程的结果是一种无标准化的产品,而且需要不断的跟进修改,因为新的技术、新的需求不断的出现,甚至可能因为某个设计之初不曾考虑的问题需要从新开始,当然在任何一个阶段都会伴随加班、讨论、演示,甚至在某个时候需要暂时放弃一些本来正确的建议被迫去完成那些在你看来存在问题的任务。在我做开发的三年多时间里我曾经在需求、开发、演示的阶段因为那些自己看来错误的方式被迫让步以下几件事希望大家可以从中明白痛苦。

    异想天开的计划

    最好的开发团队也无法在一份异想天开的计划面前完美的如期完成,而且保证公司的盈利。就像许多影视剧中描述的一样,曾经我见过最完美的计划书,之所以说完美的原因是 时间段,功能全,价格低,客户的方方面面都很满意。那时候我们每天都有加不完的班,做不完的联调,最终几个月之后我心里就一个感觉 客户只是想五块钱造架航母的气势。

    当时的客户需要我们完成一个银行的子系统,另外还需要和其他的子系统完成联调测试工作,整个工期计划是三个月完成。现在大多数银行的系统都是采用核心加外围的模式,在我初次参加工作的时候的那家银行也是在做改造,花了大概四年的时间,坦白说那家银行的无论实力还是业务都比指定计划的这家要强大的多,单单时间上的巨大差距就可以说明问题,而最终的结果可想而知,无论是公司的利益还是最后的质量都大打折扣。

    模糊的需求说明

    要完成复杂的软件系统的开发工作,必要的文档是很有必要的,常见的文档像 需求文档、概要设计文档、详细设计文档、总体设计文档、里程碑计划、开发计划、开发接口文档、测试文档、白皮书等等,其中对开发最重要的就是需求文档。当然现在开发并不总会有那么齐全的文档,大多数公司真正使用的文档是有限的,甚至没有。

    抛开那些不重视文档工作的团队,其他团队想建立文档的工作也是十分困难。我曾经工作的很多公司都是将需求、设计杂合到一块的,对一些客户提出的规则做些必要的说明,曾经的文档中出现很多这样的词汇: “做一款优秀的产品”、"不允许未注册的用户查看相关信息"等等。单纯看并没有什么问题,但是“优秀”、“不许”,当开发人员接受到文档的时候他们更加希望之道的是“接下俩做什么”,可惜我们往往在这样的语句之后遗憾的看到一个大大的句号。如果现在你觉得奔溃了,那么如果曾经在项目开始之初便有这样一份文档,在经历了开发的整个过程修改之后,当你接受任务去加入团队的时候,很遗憾,那份文档依旧和当初保持一样,没有任何改变。

    文档应该清晰的描述我们的系统的功能、业务、规则、流程,另外它也需要伴随开发中需求的变动做出随时的更改,在我看来这也是必须的,可惜这竟然只是一种理想的状态罢了。

    混乱的工作

    混乱出现的原因在我看来是因为那些错误的工作方式和习惯。今年上半年我经历这样的事情,我们几乎每天都会在早上的晨会中提出 沟通的问题,甚至我们需要定义到如何沟通、和谁沟通的事情上,这在我看来是无法理解的。因为多数开发中的问题是显而易见的,毕竟那些关乎大事的问题已经被老大们解决掉了,剩下的只是因为一些琐碎的问题存在的争议而已,而工作的划分清楚的前提下那么解决也不是一件多么困难的事情。

    除了这种工作方式外,团队成员中人的习惯也会造成混乱的现象发生。虽然现在很多公司开发并不是那么规范,但是依然存在一些规范合理的公司,而这些公司也会有跳槽的人,另外一些实习和刚刚参加工作的人是造成混乱的根源,因为他们通常不习惯在这种并不合理的工作环境中退让,而且最后的责任认定也是一件非常尴尬的事情,最终可能出现无端的争吵,这样的现象在开发团队中屡见不鲜。

    编程的前景

    当面对从事编程工作的 待业人员和公司之间的矛盾时,而且随着学习编程的人不断增加,是否薪水待遇会逐步降低呢?甚至在这种人工智能逐步发展的今天,开发工作会被逐渐取代呢?

    当然不会,因为很多事情都会经历从简单到复杂的过程。我的家乡在曾经有十万大军出太行的林州,那时候并不是所有人都会技术,但是依然在成群结队的出去了,这其中有人甚至收入不菲,可是转眼再看现在,家乡的人愿意出去的人越来越少,外边建筑行业依然如火如荼,之所以这样是因为很多在技术上有了更多的要求,那些上世纪单纯依赖人力的时代越来越远,人们期望一种更好的方式快速完成工程。编程也是这样的,虽然我国的计算机行业起步晚,但是互联网发展的今天大家对软件产品的质量有越来越多的要求。

    编程行业需要精英,不需要废柴。这就是现实,我发现前几年流行的Java 其实应该会逐步减退,新的大数据、人工智能更加吸引企业吸纳。总结而言编程人员的前景并没有衰退,之所以让人感觉不好的原因,一方面因为大家对软件质量期待越来越高,另一方面是因为新技术的出现,整体而言软件对人的需求还是很大的。

    补充

    因为我从事过的公司大多是外包或者刚刚起步的公司,而那些大型公司的工作方式和内容并不熟练,但是大部分人依然在这样的公司中工作,另外自己个人能力属于中下等,并不优秀,也无法代表那些大神的意见,我只是希望能给相同水平的人描述下其中的问题。

    相关文章

      网友评论

          本文标题:做编程的那些日子

          本文链接:https://www.haomeiwen.com/subject/xzpopxtx.html