对当前软件行业的一点点感想

时间:2021-02-08 23:53:53

 

应朋友的要求写一篇对于当前软件行业的理解,以及当前现状。好久没有写这方面的文章了,所以一上来还真不知道从哪里开始,不过想想也确实是一个好的题材,所以计划也发布到自己的CSDN上,算是给自己在软件行业中打拼的一个交代吧。

注:本文只代表个人的一点理解。

 

经过这两天的思考,计划分为几部分:

1. 简单介绍我的工作轨迹

2. 结合3个中国城市(北京,上海,西安),1个国外的城市(硅谷Sunnyvale)进行对比。

3. 从软件领域纵览

4. 从技术角度看发展

5. 个人对一些国内公司的拙劣意见

 

好,不多废话

 

1. 工作轨迹

  • 最开始用的是C++开发了一套酒店管理系统,这个应该是n年前的事情了
  • 之后用过VB, 以及Delphi写了一些小的软件,这不值得一提,都是曾经了
  • 从这之后就从原来的C/S(Client/Server)开发转向B/S(Browser/Server)开发,第一个web项目是asp,当时用了3天的时间学习ASP,有人要问了,3天?就能用asp写东西了?呵呵,别急,其实早在我15-16岁之间自己就自学了一些HTML, CSS以及JavaScript相关的东西,我说的3天,只是能开始用ASP+HTML+JavaScript+CSS去工作了,之后的经验也是从工作中不断积累的,因为个人认为好多事情都是要在实践中学习的。
  • ASP写了大概2-3个项目吧,其中包括给公司写的,也包括帮朋友做的免费小系统:)这话应该是在06年左右了吧,J2EE开始盛行,虽然当时还没有达到鼎盛的期间,自己选择是需要固定自己大方向的时候了,所以开始自学Java以及J2EE相关的知识,就这样开始了我的Java之旅,一直延续到2个月前把,都在做java相关的项目。当时效力是电力行业,为大唐国际发电股份有限公司做了生产管理系统,科技信息系统,人事系统,短信收发系统,还为一些电厂做了生产管理系统等等吧。这个期间用到的一些技术从语言上来说有Java,FoxPro(哈哈,很少有人还记得它吧,很古老,但是也为很多企业提升过效率,我们借此机会向微软致敬)以及HTML等,数据库的话呢包含Oracle,SQL Server, PI(不知道大家听过这个没,很NB的一个数据库),哦对,甚至还有Access,脚本呢用的最多就是JavaScript了,因为毕竟是做J2EE的项目,VBS也用过,解决过一些小的问题。当时运用了大量的开源,包括Yahoo UI,DWR,Spring,Hibernate,Struts,iBatis, Tomcat等等吧,一时想不起来太详细。Web容器呢,用了Weblogic以及Tomcat。其实操作系统也就那么2个,Linux当时用的是Red Hat和Windows server2000(其实这个server完全可以用来当开发机以及娱乐机,一直认为他的娱乐功能比XP强多了,没XP那么臃肿)。做这些项目的时候都是要负责和客户沟通,更改需求的确认,需求分析,代码编写,带新人等,注意,这里有一项就是需求的变动,我想这也是很多人对中国软件行业感到万般无奈的一个最重要的因素吧。哈哈
  • 当做完最后一个电厂的信息系统之后感觉自己的提高不会很大了,所以选择了离开,想到一个新的城市去看看世界,哈哈。在这个新的城市找到的第一份工作还是J2EE的开发,不过公司性质是当地一家本土企业,号称在前几年曾经是当地本土企业中数一数二的了,现在也只能用瘦死骆驼比马大去形容了,也许是由于哥们去的时间不对吧哈哈(太背了),给的工资完全达不到我的心里底线(钱其实对于一个追求提高的人来说真的不算是最重要的,可是如果连基本的生活都帮正不了的情况下,我想再有追求百分之八九十的人都会选择离开吧),所以呢3个多月之后就离开了这家公司,哦忘了说了,这里做的是工作流系统,参与了一些小的模块,以及单点登录,当时还研究了一下Liferay。
  • 其实本没有进入移动互联网开发的计划,可是有时候就是这样,身不由己,进了一家外资企业,这里做的是Location Based Service,我主要负责手机导航相关的工作,覆盖的手机平台有J2ME, BlackBerry 以及 Android,说到这里貌似哥们不知不觉的又回到了C/S的开发,不过在这同时,给公司内部也做了很多J2EE的项目,例如公司的门户网站,公司内部的release平台,以及team内部用的小工具。不过好景不长,从开发就转向了管理,一管就是3年,在这三年中不夸张的说去趟厕所都是跑着去跑着回,这还不是最杯具的,最杯具的是根本没有时间写任何代码!!!作为一个“不思进取”的人来说,是多么痛苦的事情。所以自己选择在自己空余的时间找一些项目做做,顺便创个收什么的,这样就接触了很多Outsourcing的项目,也了解了很多关于Outsourcing这个行业。
  • 最近呢,感觉自己会的东西越来越少,也许听起来很矛盾,不过我的想法是这样的,作为一名软件工程师来说,我们的目标是管理,这个没错,但是个人建议还是最少要写上15年以上的代码之后再去考虑管理,要不然你会很快被淘汰。所以好消息就是,哥们又能继续开发了,管理的事情交出去,哈哈,大度不:)。所以现在又开始学习C++, Linux, Makefile, CMake, Python, HTML5等知识,目前做的事情是车载导航,这个行业很少人接触,不过很给力的。

2. 北京-上海-西安-Sunnyvale

从工作环境上来说,其实所有公司都差不多,为了给自己申请一台高配置的电脑要煞费苦心,甚至有很多代码疯子选择自己掏钱买高配置电脑,不过我工作过的几家公司还好,这方面吝啬的只占50%吧,所以我感觉很幸福。

从工作机会上来说,不用说最好的就是硅谷了,各种世界级大公司,主要说一下国内的,北京上海都差不多,很多好公司,包括国内的,国外的分公司以及子公司,数量之巨大我想很多人都了解。在西安华为中兴已经成为了很多人眼中的最好软件公司,一个原因,就是给的钱多,因为华为他们在各个城市给的价钱都差不多,所以我们可以想一下,把北京的工资拿到西安来花是个什么感觉。其实西安也有聊聊几个很优秀外企,例如Thoughtworks,IBM, Emerson,被IBM收购的SPSS,NEC,Newegg等等吧,我就不一一列举了。下面就说一下我对以上公司的个人感觉,我们就用工作3年以上的一个Java程序员来去对比吧:

Thoughtworks -- Java 程序员的天堂,工资1W以上没有问题,不过据说管理方面被西安本土化了。

IBM -- 听起来挺唬人的,工资应该是在7k-9k左右,平时非常闲,不打卡,没有固定的工作时间(这点很人性),住房公积金会相对丰厚,我了解的几个team完全木有斗志(不代表所有),没有学习的激情,给人的感觉是混日子拿工资的天堂。

Emerson -- 工资不是很给力6k+吧

原SPSS -- 很Cool的公司,有强大的技术实力,福利待遇没得说,可惜被IBM收购以后很多东西都缩水了。

NEC -- 工资和Emerson应该差不多吧,面试过好多NEC的技术以及一些PM,个人不是很满意

Newegg -- 前几年很不错,现在好像萧条了很多

华为 -- 工资很可观,工作3年以上之后会有拿到更多内部股份的机会,年终奖丰厚,常年加班,包括周六周日,很是热闹,面试过很多华为的,一个都没招进来。

中兴 -- 比华为差那么一点点的公司,剩下都一样,也面试过很多,还是一个都没招进来。

以上西安的公司的管理以及工作方式都非常的本土化,个人感觉进取的激情很少,管理混乱,PM各种不专业,甚至让我感觉西安根本就没有真正意义上的PM。

 

3. 软件领域分析

给政企单位提供服务的领域,这个是铁饭碗,但是存在很多不公平竞争,不多说这个,再说下去保不齐这篇文章审核都不过了。你懂的。

互联网,很火,很热,甚至已经很成熟了,多少之前的创业者实现梦想的地方,有成功的,有失败的,竞争激烈,因为肉太多了。

移动互联网,现在很热,也很火,我将重点谈谈对移动互联网的个人看法。

在这里能赚到钱的却很少很少,多少投资也都砸进去了,收回的却微乎其微,也是导致很多创业者梦想破灭的“摇篮”,个人认为移动互联网开始很混乱,大家都看到了这片商机,也都付诸了行动,可是都是在两眼一抹黑地在这片混乱的战场上厮杀,当我们看到Nokia,Motola,Blackberry这样的巨人也在这片战场上倒下的时候,难免都会有些替他们感到惋惜。

现在炙手可热的iOS,Android的出现导致了很多人的退出,同时也有很多人参与了进来。Android作为一个开源的平台,为自己争取了很大的市场份额,优秀的程序架构加上快速开发的APIs,也吸引了无数的开发者,我就是其中之一,可是个人对Android的担忧就是由于开源而没有统一并且明确的标准,这难免让人担心会冲走J2ME的老路(前段时间看到了一个新闻,说是Google也注意到了这方面的不足,已经开始研究策略了);还有就是Android market,现在叫做Play store,虽然换了图标换了名字也换了排名算法,可是大家能看到的还是一堆一堆的垃圾软件排名非常的靠前,这难免让我这种有各种洁癖的人感到难受。相比较之下,目前最好的Software sotre应该就是App store了,感觉至少会比Play store公平那么一点点,嗨。。这种混乱不好避免,各种水军,各种刷,其实也能理解,都是为了利益。iOS的应用开发很快速,尤其是它的xCode,简直是开发者的天堂(个人感觉),可是从技术角度上来说,个人感觉Android的整体架构要比iOS强。但是Apple给我的感觉就是把现有的产品做到极致的一家公司,哪怕是一个非常微小的细节,是我们在工作和生活上学习的榜样。

 

4. 从技术角度看发展

对于开发语言简单的说,Java的鼎盛已快过去,C++王者要归来。为什么这么说?

Java现在覆盖的领域最大的市场份额现在来看应该是J2EE相关的项目,可是PHP还是能抢走很大一部分市场的,唯一J2EE能保住的就是企业级的开发了(虽然这就是J2EE出现的根本原因,虽然当时J2EE抢走了很多website的市场份额)。J2ME呢,随着Android很iOS的出现、Blackberry的倒下,已经快不复存在。J2SE来说(这里只是只client的开发,用Swing和AWT),超级慢的运行速度早就没有任何的竞争能力。

C++就像是一个家庭的主人,永远要负责这个家庭的安全一样,应用在各个领域,从各种开发板子,到我们看到的UI,无所不能,在这里对于开发者来说,唯一的挑战就是时间问题,不过随着越来越多的lib的积累,我想开发速度也是会慢慢提高的。

刚才提到UI,让我想到了openGL,这项技术也会更大面积的兴起,虽然覆盖面已经很大了。

对于脚本呢,个人比较推荐Python,高效率的开发,是每一个程序员的梦想,不是吗?

好了,说了这么多关于语言方面的,下面说一下关于开源项目的那点事儿吧。

开源项目是推动整个软件行业的一个完全不能忽略的一大块,要说整个软件行业是汽车的话,我想开源项目最少是发动机的一部分。可是我们在选型的时候往往面对的态度不对,当前大部分人用开源组件,都只是用,其中会有一部分人会对之有所改动,但是这就是我们的误区,我们一直在我们的项目基础上进行选择、进行对比,这时往往忽略了里面的代码实现,这样最终也只是用人家的项目而已。开源,什么是开源,开源就是别人写的代码你不用写了,但是不是你完全不用写了,你要知道,如果你不用开源,你同样要写和人家一样的代码,如果写不出来人家一样的代码,我想你还是先不要用开源,自己写吧,还能提高自己的能力,不知道我表达清楚没,如果理解到这一点,我想,你会用开源项目了。

 

对于测试,哈哈,这个应该是整个软件行业不论是国内还是国外都很头疼并且必须要做的事情,它决定着你的产品的成败!

很多国内的软件公司招了一堆号称叫做QA的人,每个人分上几百甚至几千的cases,之后坐在电脑前,输入-->点击-->观察结果,如果是预期的pass,如果不是预期的,打开Bug tracking工具,报bug。个人更喜欢和这类人叫做UE(User Experience)哈哈,完全自己给起的名字,其实也挺好听的。我心目中的QA应该是了解项目的整体代码架构的(说到这我插一句,大家都在做什么单元测试,之后呢,当作完了总结的时候都说意义不大,为什么会出现这种情况?因为还没有真正意义上了解测试的概念),我们的单元测试首先要从架构的测试开始,之后测试业务代码框架,测试完业务代码框架,再之后测试业务代码,这几个环节中用到的最多的是什么?Mockup data吧?好,具体怎么生成Mockup data我就不用多说了吧,每个项目不同,架构不同,这些data的结构都不同,这些data也确实是比较枯燥,但是非常有用!

 

5. 个人对一些公司的拙劣意见

  • 真正意义上的QA team,一定要选择技术强大的人,这个很重要的,还是那句话,决定产品的成败。
  • 不要盲目追求什么敏捷开发,因为不是所有人都适合,也不是所有公司,所有项目都适合,我们要做的首先就是要选好人
  • 让每一个职位上的每一个人了解他们的职责,并且告诉每一个人你当前阶段对他的预期是什么
  • 从公司到部门到每一个小team,都要由上至下定期的树立当前的目标
  • 让每一个人养成的Follow through习惯
  • 建立强大的Review机制

好了,就先写这么多吧,这次没有多说关于敏捷开发的事情,因为个人认为这个工作方式取决于“人”,强求不来。