
如何成为有思想、创新的程序员
写这篇文章也源于我和新员工的一些谈话心得,一些基础比较薄弱的技术人员,看起来有点像没有思想和灵魂的程序员。
你可能也会觉得国内有很多小企业出来的人或者刚毕业的人,会的最多也是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
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 =



