C#初学者们,请离代码生成器远点!!!
在程序开发的世界里,各路前辈们为了提高所谓的编码速度,搞出了各式各样的代码生成器,来避免所谓的重复的人为机械地粘贴和复制代码,以此来提高生产力。
早几年前,我可能会认为这样的做法真得有用,特别是在编码速度上。
是的,有时候代码生成器是可以帮助我们开发者生成模板化的,规范化的,大批量的机器代码。
但许多人就将它当做了程序开发的利器,没有代码生成器完全没法写代码了,也没办法工作了。
觉得自己会用几款代码生成器好像很牛的样子。得意的在老板们,或是不懂技术的技术经理们面前炫耀:“XXX们,你看我的工作效率多高,你们的需求,你们想要的功能我只需要简单的代码生成就可以快速地搞定。”。
这种做法就好比别人把一头宰好并切好的牛肉放到你面前,再问你:“把这些牛肉放进冰箱需要几步?”
答案你也许知道了吧?没错,三步。
1.打开冰箱门;
2.放牛肉进冰箱;
3.关上冰箱门
很简单是吧?
那么,如果别人给你的是一整头牛,而不是切好的牛肉,再问让你把这头牛放进冰箱,你又怎么办呢?
上面的这个案例其实与开发者(特别是初级开发者)使用代码生成器有着同样的道理。
使用代码生成器的时候,这生成器就好比切好的牛肉,开发者在使用时不关心代码生成器的底层是如何封装的,也不知道内部逻辑是如何处理的。就好比不知道也不用关心那头牛是怎样被宰的,如何解剖的一样。
庖丁解牛是怎么来的?是屠夫们经过反复的实践,掌握了牛的结构、经络之后达到的一种境界。
在开发的世界里也是同理。
我见过不少开发者(绝大多数是.NET开发者,因为笔者主要专注.NET的开发)都是习惯并喜欢使用代码生成器来生成项目,甚至整个解决方案都能为他们生成就最完美了。
他们中有些人已经有5,6年或者7,8年的开发经验,不再是初学者了,但却还在用着传统的某某的代码生成器生成着传统的三层架的解决方案,在前端UI代码中充斥着各种DataTable和DataSet,各种if...else...逻辑判断,各种SQL语句拼接。。。
不知道看到此处的你是否正经历着相同的处境或者是经历过相同的场景?
也许你说:”我不是这样的开发者啊。“
那么作为热衷于开发的我感到很欣慰了,但这样的朋友应该不在多数,不然国内的.NET开发环境不会成如今这个要死不活的样。我的观点准确吗?
究其原因,不外乎是这样的:
在早年前,很多接触程序开发(本文主要是C#)的人中,都是看中互联网的高薪而加入到开发者这个大军中的,他们为的是钱途,而不是前途。他们不是真正意义上喜欢,或者说是热爱编程。
他们的骨子里或者根本就只是把程序开发当作多赚点钱的捷径。
他们在想:”我就在程序界里混几年,等资历老了,有个几年的开发经验或者是不停地跳槽,薪水自然就会不断地往上涨。等混到了30岁,就有资格做高级工程师,做项目经理,做项目主管了。有没有过硬的技术都不重要的。“
所以,如你,我,他所见到的如今的国内开发环境,真正热爱编程这份事业的,愿意深入研究技术的人很少,因为他们的目的根本不在于此。
他们只想通过简单的代码生成器来”赚快钱“,他们在编程界里呆了几年之后,还是不知道C#的面向对象编程思想,不知道泛型是什么,更没听说过反射,委托,事件,不知道还有设计模式,领域驱动设计。。。反正他们就知道有个叫“代码生成器”的东东。甚至还惊讶地问:”原来C#还有这么些啊?“
试想一下,如果代码生成器都能搞定我们的编程工作,那像Microsoft,Google,百度,阿里,腾讯等等这样的以技术为驱动的科技公司为什么不直接写一堆代码生成器就好了,何必每年养成千上万的开发者呢?
再说得具体一些,比如我们使用某某代码生成器来生成三层架构(这是很多C#初学者在入门或者开发生涯的前几年中最熟悉的套路),这个架构中包含三层:实体层,BLL,以及DAL。
随着一个项目需求的不断变更,你的数据表结构是不是也会变更。那么,问题是不是来了,每次变更表结构,你是不是需要重新生成这三层的代码,然后把原来的代码替换掉。
如果你在这三层的任意一层中添加了自己的代码,替换时是不是又会遇到问题呢?
那你有没有想过,有没有办法能解决这些问题呢,而不是一味地抱着代码生成器过日子。代码变更完,对应修改UI中的逻辑判断后就万事大吉。
笔者描述了这么多,想表达的是(特别是对于C#初学者来说):刚入门或者初级阶段,更多地要手写代码,多熟悉.NET Framework中的类库,老是想着:“代码生成器能帮我搞定的”是学不到真正的高级编程知识和技术的。
如果你执拗地喜欢利用传统的代码生成器去解决你项目中大部分工作,那么恭喜你,你入错行了,请趁早离开以免被坑得越来越深,因为你不热爱这个事业,你迟早也会走的,这样只会浪费你的宝贵的青春。
结束语
如果选择了.NET这条路,请用心,认真对待,因为这是你的事业,你的付出也会得到回报。
C#初学者们,请离代码生成器远点!!!的更多相关文章
- 大型web系统数据缓存设计
1. 前言 在高访问量的web系统中,缓存几乎是离不开的:但是一个适当.高效的缓存方案设计却并不容易:所以接下来将讨论一下应用系统缓存的设计方面应该注意哪些东西,包括缓存的选型.常见缓存系统的特点和数 ...
- 关于Mongodb的全面总结
MongoDB的内部构造<MongoDB The Definitive Guide> MongoDB的官方文档基本是how to do的介绍,而关于how it worked却少之又少,本 ...
- 大型web系统数据缓存设计-l转载
原文地址:http://www.wmyouxi.com/a/60368.html#ixzz3tGYG9JwC 1. 前言 在高访问量的web系统中,缓存几乎是离不开的:但是一个适当.高效的缓存方案设计 ...
- JavaScript学习(一) —— 环境搭建与JavaScript初探
1.开发环境搭建 本系列教程的开发工具,我们采用HBuilder. 可以去网上下载最新的版本,然后解压一下就能直接用了.学习JavaScript,环境搭建是非常简单的,或者说,只要你有一个浏览器,一个 ...
- 求两条线段交点zz
"求线段交点"是一种非常基础的几何计算, 在很多游戏中都会被使用到. 下面我就现学现卖的把最近才学会的一些"求线段交点"的算法说一说, 希望对大家有所帮助. 本 ...
- 选择HttpHandler还是HttpModule?
阅读目录 开始 理解ASP.NET管线 理解HttpApplication 理解HttpHandler 理解HttpModule 三大对象的总结 案例演示 如何选择? 最近收到几个疑问:HttpHan ...
- ES6 有什么新东西
ES6 有什么新东西? 你可能已经听说过 ECMAScript 6 (简称 ES6)了.ES6 是 Javascript 的下一个版本,它有很多很棒的新特性.这些特性复杂程度各不相同,但对于简单的脚本 ...
- bsp STEP
Web开发不仅现在比较流行,将来也会.我来谈一下最近bsp application项目的体会吧,属初学者,请各位多多指教. SAP 的web开发方法有很多种,bsp只是其中一种,而bsp开发有可以分 ...
- Oracle数据库初级学习 2
今天我们介绍Oracle数据库中剩余的查询方法,今天的查询方法会比昨天的更为复杂一些(PS:我也是个初学者,请见谅..). 一.分组函数 分组函数是为了区分同一个表中的不同数据而建立,其关键字为GRO ...
随机推荐
- mybatis中#和$符号的区别(转)
mybatis做为一个轻量级ORM框架在许多项目中使用,因其简单的入门受到了广大开发者的热爱.在近期项目中再做一个相关的开发,碰到了#.$符号这样的问题,之前没怎么注意过,通过学习之后,有了点感悟,分 ...
- oracle 主键自增 设置----杜恩德
<div id="topicList"> <div class="forFlow"> <div class = "pos ...
- 为 Azure IoT Edge 设备部署 Azure Stream Analytics 服务
在前面的两篇文章<Azure IoT Edge on Windows 10 IoT Core>和<Azure IoT Edge on Raspberry Pi 3 with Rasp ...
- 《Spark大数据处理:技术、应用与性能优化》【PDF】 下载
内容简介 <Spark大数据处理:技术.应用与性能优化>根据最新技术版本,系统.全面.详细讲解Spark的各项功能使用.原理机制.技术细节.应用方法.性能优化,以及BDAS生态系统的相关技 ...
- springMVC(4)---生成excel文件并导出
springMVC(4)---生成excel文件并导出 在开发过程中,需要将数据库中的数据以excel表格的方式导出. 首先说明.我这里用的是Apache的POI项目,它是目前比较成熟的HSSF接口, ...
- BZOJ1036 (其实这只是一份板子)
我说我是不是完蛋了啊... ...昨天考试线段树写错,调了好久才调回来:今天做这道树链剖分辣鸡操作题,TM写错了4个地方!先是建树为了省常数打了一个build结果初值赋错了,然后又是线段树!getma ...
- python logging一个通用的使用模板
import os import logbook from logbook.more import ColorizedStderrHandler from functools import wraps ...
- MarkDown的用法
# 一级标题## 二级标题### 三级标题#### 四级标题##### 五级标题###### 六级标题# 无序标题- 文本- 文本- 文本# 有序标题1. 文本2. 文本3. 文本# 图片链接[张驰博 ...
- thinkphp3.2.3使用ajax 的一些坑——使用AjaxReturn()后,直接返回null,模板文件不起作用
从接触thinkphp到今天,填完此坑,必有其他的坑有会冒出来.哎!这个填坑之路我想是没有尽头的了. 最近,需要使用ajax完成一些操作,一开始想Ajax简单啊,不过是一种提交数据的方式,不过是害苦了 ...
- IDLE3.6.3 Mac版不支持中文输入解决办法
最近安装了IDLE 3.6.3版本 但是在IDLE中要输入中文注释时发现虽然输入法切换到了中文,但输入的还是英文.然后我在IDLE外试了下,输入中文没问题,于是就确认应该是IDLE的问题. 网上查询到 ...