‘壹’ 谈“80后”程序员为什么找不到工作
有很多80后程序员不仅找到了工作,而且工作的很好。这个世界是你们的,也是我们的,但最终是那帮孙子的们。
‘贰’ 如何成为有思想、创新的程序员
写这篇文章也源于我和新员工的一些谈话心得,一些基础比较薄弱的技术人员,看起来有点像没有思想和灵魂的程序员。你可能也会觉得国内有很多小企业出来的人或者刚毕业的人,会的最多也是CRUD和拖拉控件。我也接触过一些技术人员,他们告诉我他们再也不想搞技术了,因为技术是在太无聊了,特别年纪稍大一点的,想的最多的就是转行。曾经我非常惊讶于这样的状况,事实上,写程序是一件很有创造力的事情,但为何很多人都会觉得无聊呢。 随着年纪的增长,这些问题的答案慢慢变得清晰一些。在这里,我不敢说,我说的都是正确的,我只是在一直不停的探索。在探索之后,我对我的新员工说了以下的话:“进入我们公司,虽然我们也是很不起眼的刚创业的小公司,但是,你在这里需要做一些改变了。我知道你们以前的工作性质可能是上司给你交代任务,告诉你怎么做,然后你管也不管就照章办事,拉拉控件,以完成项目功能为首要任务。在我们这里,你需要成为一个有思想的程序员。有思想的程序员需要懂得如何使用聪明的脑袋瓜。事实上,很多人都不知道我们的脑袋瓜到底能做多少事情,不过,一旦你尝试了,你就会体会到‘不是做不到,而是想不到’。需要记住这些话,从思想上改变,从今天开始。首先,我们是做软件产品的公司,质量是产品生存的首要标准,产品质量的最低要求就是易用性;其次,我们要保证产品的质量,代码的质量首先要过关,标准编码方式、异常处理方式、代码的生命周期管理、编码的完整性都需要兼顾;第三,避免写一些垃圾代码和重复的代码,这需要动用你聪明的脑袋,我曾经写了10几个的CRUD产品,从而自主创新了控件关系映射、对象-对象映射、通用窗体框架,乃至我们现在的OSGi.NET产品和云计算SaaS商店平台,都是从这些重复的劳作中不断思索发明的。我看到设计模式的书时,可以骄傲的向同学们吹牛,我也设计过几个‘模式’;第四,学会发现问题,探索问题,积极询问,避免把问题遗留下来或者拖机取巧。浪费一个发现问题和解决问题的机会,相当于浪费提高自己的机会。最后,你要有信心成为一流有思想和灵魂的技术人员,别哪一天你离开尤埃时,丢我们的脸,:)。” 我不敢说,我现在多有思想,但是,我隐隐约约感觉到一些这样的有意思的东西。我崇拜“道法自然”,它告诉我违反规律就会受到惩罚,因此,我会时刻反省我是否有做错的事情,包括在平时编码、设计和架构的时候,以及平时生活上的为人处事。接下来,我介绍一下,我如何来发明我曾经的产品,希望能够给人一些启发。 1 我是如何发明了控件关系映射组件 控件关系映射的发明源自于我在参与一款MIS系统的设计,该系统是一个钢管管理系统,每一个钢管的信息有很多很多的属性,我记得钢管厂给我们的数据说明书里面,一个管子的信息有惊人的380多列。因此,我们在查询、修改、添加记录的时候,总是会有类似以下成片成片的代码。1 var add***Sql = "insert into Test(a1,a2,....aN) values(@a1,@a2,....@aN)";2 ...... 3 var para1 = new SqlParameter("@a1", SqlDbType.String, a1.Text.Trim(); 6 var paraN = new SqlParameter("@aN", SqlDbType.String, a1.Text.Trim(); (忽略中间的N-3行代码,以及查询、修改和删除的代码)我记得,我们一起做的另一个小伙拿了一个CRUD一千多个字段的表来向我们显耀说:“我他妈的把这功能实现了!”。我不知道大家是否反感这样的代码,反正我是厌倦了。当我想到这是一件很痛苦的事情的时候,我考虑了如何来解决它。经过一些思考,我惊讶的发现,所有的CRUD以及界面的流程都可以抽象为“输入-处理-输出-输入-处理-输出......”的过程,处理的过程实际上是获取输入,然后组装成SQL语句,最后在响应到界面。这个过程是以SQL语句为中心,SQL语句的参数来源于界面的控件或者界面类的其它成员,SQL语句执行的结果可能是跑到另一个页面、执行DataGrid绑定、执行下拉列表绑定、给控件赋值。因此,我想到一个方法,可以设计一个SQL映射的配置,即利用这个配置,直接将界面控件映射到数据库,并且也可以执行反向映射。以下是映射SQL的配置。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 以下是调用映射SQL语句实现CRUD中的一个操作。 1 namespace HumanDispSolution2 {3 public class login : CrmPage4 {5 private void btnLogin_Click(object sender, System.EventArgs e)6 {7 DataSet ds = this.ExecuteMapping("Login") as DataSet; 8 if(ds.Tables[0].Rows.Count > 0) //登入 9 { 10 System.Web.Security.FormsAuthentication.RedirectFromLoginPage(UID.Text,false);11 }12 else13 this.lAlert.Text = "alert('登录失败,请重新输入帐户信息!');";14 }15 }16 } 另外,我还编写了一个工具来自动生成这样的配置文件,从此以后,关于数据库的CRUD,我爽了!! 2 我是如何发明了通用窗体框架 控件关系映射的发明也是源于上面提到的钢管系统。当超过2个人一起参与一个复杂项目时,可能他们都需要操作主界面,在主界面加上各自模块需要的菜单、需要的界面元素,此外两个人设计的东西也完全不一致。这就造成一些问题了,因为如何实现两个人的集成就有一些麻烦,而且经常出现意外。于是我就发明了一个通用窗体框架,这个框架提供了以下功能:(1)集成用户权限;(2)集成数据访问;(3)插件式支持,每一个人都可以并行开发,集成时仅需要将配置文件集成一起就形成一个组装起来的软件了。 每一个开发人员只需要编写类似以下的配置文件就可以集成了: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 3 我是如何设计了对象-对象关系映射 ORM对于一些小型应用感觉有点庞大,但是对于大型应用,我想是一个比较总要的组件了。在我们使用ORM组件时,也经常会写以下代码。1 var user = new User(); 2 user.Name = NameTextBox.Text.Trim(); 5 OrmFactory.Save(user); 6 ----------------------------------------------7 var user = OrmFactory.QueryScalar(...); 8 NameTextBox.Text = user.Name; 9 ...... 如果一个MIS系统充斥了大量这样的代码,估计你也会腻味,从而丧失对编程的兴趣了。记得我刚才说什么来了,“有问题,意味着升华”,“做一个有思想的程序员”。因此,接下来的问题就是,我们如何来解决类似这样重复的劳动。我在2006年时想到的办法就是实现一个对象-对象的映射。首先,设计如下实体类: 1 public class UserEntity2 {3 ……4 [Member]5 public int Age; 6 [Control] 7 public string Name8 {9 get { return this._Name; } 10 set { this._Name = value; }11 }12 [Control("CardNo.Text")] 13 public string CardNo14 {15 get { return this._CardNo; } 16 set { this._CardNo = value; }17 }18 ……19 }20 21 public class EmployeeEntity22 {23 ……24 [Reference(typeof(UserEntity))] 25 public UserEntity User26 {27 get { return this._User; } 28 set { this._User = value; }29 }30 [Control] 31 public float PostSalary32 {33 get { return this._PostSalary; } 34 set { this._PostSalary = value; }35 }36 ……37 } 其次,调用ObjectEngine实现OO映射。A 实现表单类与实体类映射1 private void Map_Click(object sender, System.EventArgs e)2 {3 this.o = CZB.ObjectMapper.ObjectEngine.Map(this,typeof(EmployeeEntity)) as EmployeeEntity; 4 } B 实现实体类与表单类的映射1 private void InverseMap_Click(object sender, System.EventArgs e)2 {3 this.o.User.Name = "c.z.b in"; 4 this.o.User.Age = 19; 5 this.o.CompoInsurance = 0; 6 CZB.ObjectMapper.ObjectEngine.InverseMap(this,o); 7 } 4 我是如何设计OSGi.NET和SaaS商店产品 至于OSGi.NET和SaaS商店是我在不断思索通用窗体框架以及对现有科技的趋势的把握下,由几个很有创造力的编程人员,在建立了完善的产品保障体系下,构建起来的。这两个产品我会在后面介绍如何设计的。他们的设计我用了很长的时间。 我不是什么老鸟,希望我们在如此多的技术的世界中能够多多交流,共同进步。解决这些问题,不仅增加了编程的乐趣,更是增加了自己的见识,从而避免自己成为一个没有思想的程序员!我也知道,我们可以找到很多理由来反驳文中提到的做法和观点,但是,提高自己才是最重要的,不要去着急的否定一些什么,并给自己找借口。
‘叁’ 谈80后程序员薪水为何这么低
我们看看劳资双方的逻辑吧。
公司逻辑:公司希望看到每个员工在进入公司之后,有自己有成长的同时,为团队做出相应的贡献,简单地说就是先对得起公司给我们开出的薪水,然后自己又努力进取,表现出希望与公司一同发展的态度。如此,则提薪、升职之日不远!!!
工作中,很多时候、很多事情都让我们不爽,尤其是薪水方面。很多人为此跳啊跳地!从不考虑自己的时间成本,很多毕业后反复换工作的候选人薪水其实比始终如一在同一家公司工作的候选人薪水高不了多少,同时,前者还失去了很多走向管理岗位的机会,从一个基层开发职位跳到另一个基层开发职位,而后者多因在公司时间较长而走向管理岗位或成为公司核心开发人员。
之前提到,公司基于以下两点付劳动报酬给我们,其一是能力,其二是忠诚。每年的固定加薪就是公司对我们忠诚的一种回报。喜欢跳来跳去的80后程序员们,很多是永远没机会拿到这部分公司因忠诚而付给我们的薪水的……
下面分享些可以让我们拿到合理薪水、提高薪水的方法分享。
对应届80后程序员
现在因为就业压力非常大,很多应届生都降低了自己对薪水的期望转而更重视公司的发展和自己在工作中可能取得的进步与收获。这说明很多应届生一方面认为薪水是社会对自己的认可,另一方面又能清醒地认识到薪水也只是工作的一部分。他们会为争取一个好机会而适当降低薪酬要求。
在这方面有两个建议:
1、每个人的劳动都有价值,不要0起薪
记得前两年看到有个应届生对工作的期望薪水是0,后来这事还引起了社会大讨论。有专家甚至说,以后就业压力会越来越大,按这个趋势过不了多久就会有倒贴钱到公司找工作的学生了。每个人的劳动都有价值,我们可以适当降低对薪水的期望,但没必要作践自己。一个对自己劳动都不尊重认为自己的付出价值不高或者没有价值的人,是不会得到公司的认可和尊重的;不尊重我们劳动的公司也不值得一试。
2、 能力说话,不要盲目要价
每个行业都有自身的特点和薪酬架构。很多应届生尤其是本硕连读后找工作的候选人,对自己第一份工作的薪水应该要多少,没有一个准确的概念和认识。要谈到对薪水的期望时,我们会经常听到诸如四千、四千之类的回答。其实,薪水期望是多少并不是最重要的,我期望能看到候选人有充分的理由说明为什么要求这个薪水或者能为公司创造何种价值。所以,我会追问:“您要求这个薪水的理由是?”得到的答案多半领我失望。诸如:我值、你们公司这么大应该付得起、我们计算机系的同学都是这个薪水之类的回答,在我看来是不能说明任何问题的。能说明问题的是:候选人开发过多少代码,参与过多少项目,自己又有何种收获,达到了什么水平。公司永远不会为我们的文凭付费。
3、 薪酬包括薪水和福利两部分,务必打包考虑工作机会
确实不要在面试中主动谈及薪水,但可以主动了解一下公司的福利政策,比如:保险、公积金、加班补助、手机费、电话费等。之前听说过有这么个例子,一个应届生因为想确认一下公司是否有公积金而被淘汰了。那个HR的观点是:我这么好的公司,还能没这个,你这是对我们不信任。在我看来,就是叫招聘霸权。了解福利是我的权利,招聘方和义务说明。
如果薪水确实不能满足要求,那么了解一下福利。如果福利也不健全,那我建议考虑自己在公司能得到的东西和上升的空间(包括公司里面的和行业里面的)。之后,把这些因素加权考虑,再决定是不是接受机会。
‘肆’ 在中国,35岁后的程序员真的不好混了吗
在中国,35岁后的程序员确实不太好混了。因为年轻人脑袋转的比较快,想法比较多,而且时代在不断的创新,程序员年龄越大就有可能会跟不上时代的变化,也会逐渐被这个时代所淘汰。不仅如此,年龄比较大的程序员也很难能够承受得住工作的压力,万一身体出现一些毛病的话,公司也是很难能够承担得起的,而年轻人的身体底子好,可以接受熬夜。
年轻人的工资也比较低,尤其是刚进入社会的年轻人,他们虽然工作效率不是特别高,但是等到学习一段时间之后,也会渐渐的上手,就会给公司创造一些收益,老的程序员工资自然是非常高的,所以相比之下大家可能会更倾向于寻找年轻人。
‘伍’ 北京一位程序员自制700集免费教程获奖,这位程序员为何这么做
根据新闻的报道可以发现,有一位80后程序员自制了700多集免费的教程,并且获得了奖项,那么在这种情况之下也引起了不少人的关注,并且也引发了很多人的好奇,这一位程序员为什么会做出这样的事情?为什么会把自己的经验免费地分享给大家呢?相信有不少朋友对于这个问题也是非常的感兴趣。
只有每一个人在做事情的时候,都为其他人着想才能够让我们的社会变得更加和谐,更加美好,而在这一个过程中也能够让我们看到人性的光辉,让我们对于整个社会变得更加有信心,所以我们也希望作为程序员的精神能够感染更多的人,让越来越多的人在生活之中,愿意对其他人提供帮助。
‘陆’ 35岁以后的程序员有多惨
35岁以后的程序员,可能被公司列入裁员名单,因为年龄过大,所以公司方面会招聘更多年轻人,把这些老员工所替代,有这么几个原因:
1、程序员在做2、3年之后也就不会有什么新东西了,每天在做的都是一些重复的工作,所以很多人都说程序员是高级蓝领。
2、在有了一定的经验之后,很多人会转向系统架构或者项目管理的方向,写代码之类的工作都留给年轻人去做了。
3、程序员是一项枯燥并且高压性质的工作,长年累月的生活在这种节奏当中,对于身体健康也会有着或多或少的影响。
(6)80后程序员创新扩展阅读
大龄程序员提高自己的核心竞争力
《创新者的窘境》一书中提到,机构的能力包括:
1、资源
2、流程
3、价值
资源包括时间,技能,金钱,人脉等;流程指的是解决问题的方法,思维模式等;价值观就是自己认为什么重要。这三点放在每一个职场人身上也同样合适。对于技术人来说,会的编程语言和工具都是资源,框架设计,逻辑思维,数据分析这些都是流程;
是热衷做技术还是喜欢做管理,这就是个人的价值观。决定程序员是否具有优势的,是思维能力,是解决问题的框架,是快速学习,是个人管理,是创新与创造,是这些应用流程方面的能力。而这些,都需要时间的沉淀和项目的历练。
‘柒’ 如何成为有思想,创新的程序员
程序员要 多学习,多思考,会总结
程序员带领团队和自主创业是发展。
‘捌’ 程序员35岁以后可以干什么
还是写程序啊,因为这个在中国基本第一批程序人员也就差不多35岁左右,所谓不好干是由于多方面原因组成的,比如自身能力、公司问题等等,并不代表35岁以后就不能写程序。
‘玖’ 程序员就业前景怎么样
程序员就业前景不错,还是比较容易的,注意我指的是真正有实力的高级软件人才,如果还没有写几行代码就说自己是程序员,我想这样的程序员价值和卖白菜的也没有什么分别吧,最好做好工作难找的心理准备;要想在这个行业混的话,想进一些大公司,最起码编写的代码在一万行以上才有竞争力。