日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

如何成为有思想、创新的程序员

發布時間:2024/4/11 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 如何成为有思想、创新的程序员 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
寫這篇文章也源于我和新員工的一些談話心得,一些基礎比較薄弱的技術人員,看起來有點像沒有思想和靈魂的程序員。你可能也會覺得國內有很多小企業出來的人或者剛畢業的人,會的最多也是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();
4?var?para2?=?new?SqlParameter("@a2",?SqlDbType.String,?a1.Text.Trim();
5?......
6?var?paraN?=?new?SqlParameter("@aN",?SqlDbType.String,?a1.Text.Trim();

?

(忽略中間的N-3行代碼,以及查詢、修改和刪除的代碼)我記得,我們一起做的另一個小伙拿了一個CRUD一千多個字段的表來向我們顯耀說:“我他媽的把這功能實現了!”。我不知道大家是否反感這樣的代碼,反正我是厭倦了。當我想到這是一件很痛苦的事情的時候,我考慮了如何來解決它。經過一些思考,我驚訝的發現,所有的CRUD以及界面的流程都可以抽象為“輸入-處理-輸出-輸入-處理-輸出......”的過程,處理的過程實際上是獲取輸入,然后組裝成SQL語句,最后在響應到界面。這個過程是以SQL語句為中心,SQL語句的參數來源于界面的控件或者界面類的其它成員,SQL語句執行的結果可能是跑到另一個頁面、執行DataGrid綁定、執行下拉列表綁定、給控件賦值。因此,我想到一個方法,可以設計一個SQL映射的配置,即利用這個配置,直接將界面控件映射到數據庫,并且也可以執行反向映射。以下是映射SQL的配置。?1?<?xml?version="1.0"?encoding="utf-8"?>
?2?<CrmMappings?Class="HumanDispSolution.login"?>
?3?????<MappingSQL?GenType="None"?Name="Login"?Value="select?UID,Name,Sys_User.RID,Role?from?Sys_User,Sys_Role?where?Sys_User.RID=Sys_Role.RID?AND?UID=@UID?AND?Password?=?@PWD"?SqlOpType="SELECT"?CmdType="Text"?>
?4?????????<SqlParams?>
?5?????????????<SqlParam?Name="@UID"?ControlID="UID"?ParamType="String"?IsFile="False"?>
?6?????????????</SqlParam>
?7?????????????<SqlParam?Name="@PWD"?ControlID="PWD"?ParamType="String"?IsFile="False"?>
?8?????????????</SqlParam>
?9?????????</SqlParams>
10?????????<SqlResults?>
11?????????????<SqlResult?Field="Name"?MemberID="UserName"?IsStatic="True"?AssemblyName="HumanDispSolution"?StaticTypeName="HumanDispSolution.UserConfig"?>
12?????????????</SqlResult>
13?????????????<SqlResult?Field="UID"?MemberID="UserID"?IsStatic="True"?AssemblyName="HumanDispSolution"?StaticTypeName="HumanDispSolution.UserConfig"?>
14?????????????</SqlResult>
15?????????????<SqlResult?Field="RID"?MemberID="RID"?IsStatic="True"?AssemblyName="HumanDispSolution"?StaticTypeName="HumanDispSolution.UserConfig"?>
16?????????????</SqlResult>
17?????????????<SqlResult?Field="Role"?MemberID="Role"?IsStatic="True"?AssemblyName="HumanDispSolution"?StaticTypeName="HumanDispSolution.UserConfig"?>
18?????????????</SqlResult>
19?????????????<SqlResult?InvokeMethod="Log"?IsStatic="True"?AssemblyName="HumanDispSolution"?StaticTypeName="HumanDispSolution.Logger"?>
20?????????????????<InvokeParam?Value="登入系統"?>
21?????????????????</InvokeParam>
22?????????????</SqlResult>
23?????????</SqlResults>
24?????</MappingSQL>
25?</CrmMappings>

?

以下是調用映射SQL語句實現CRUD中的一個操作。?1?namespace?HumanDispSolution
?2?{
?3?????public?class?login?:?CrmPage
?4?????{
?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?????????????else
13?????????????????this.lAlert.Text?=?"<script?language='javascript'>alert('登錄失敗,請重新輸入帳戶信息!');</script>";
14?????????}
15?????}
16?}

?

另外,我還編寫了一個工具來自動生成這樣的配置文件,從此以后,關于數據庫的CRUD,我爽了!!

?

2 我是如何發明了通用窗體框架

?

控件關系映射的發明也是源于上面提到的鋼管系統。當超過2個人一起參與一個復雜項目時,可能他們都需要操作主界面,在主界面加上各自模塊需要的菜單、需要的界面元素,此外兩個人設計的東西也完全不一致。這就造成一些問題了,因為如何實現兩個人的集成就有一些麻煩,而且經常出現意外。于是我就發明了一個通用窗體框架,這個框架提供了以下功能:(1)集成用戶權限;(2)集成數據訪問;(3)插件式支持,每一個人都可以并行開發,集成時僅需要將配置文件集成一起就形成一個組裝起來的軟件了。

?

每一個開發人員只需要編寫類似以下的配置文件就可以集成了:?1?<?xml?version="1.0"?encoding="utf-8"??>
?2?<MainForm>
?3?????<Menus?Name="菜單">
?4?????????<Menu?Name="系統(S)"?LeftIndex="3"?TopIndex="1"?Command=""?Class="">
?5?????????????<Menu?Name="登錄管理"?LeftIndex="1"?TopIndex="1"?Command=""?Class=""/>
?6?????????????<Menu?Name="歡迎"?LeftIndex="2"?TopIndex="2"?Command=""?Class="CZB.Framework.WelcomeForm"/>
?7?????????????<Menu?Name="退出"?LeftIndex="3"?TopIndex="3"?Command="Close"?Class=""/>
?8?????????</Menu>
?9?????????
10?????????<Menu?Name="數據導出(B)"?LeftIndex="2"?TopIndex="3"?Command=""?Class="">
11?????????????<Menu?Name="導出Excel"?LeftIndex="2"?TopIndex="2"?Command=""?Class="SalaryManagement.UI.frmExport"/>
12?????????</Menu>????????
13?????</Menus>
14?????
15?????<ToolButtons?Name="工具欄">
16?????????<ToolButton?Name="工具欄名稱"?Index="1"?ImageIndex="1"?Visible="true"?Roles=""?Command="HideOrShow"?Class="工具欄名稱"?/>
17?????????<ToolButton?Name="工具欄名稱1"?Index="2"?ImageIndex="2"?Visible="false"?Roles=""?Command=""?Class="工具欄名稱1"?/>
18?????</ToolButtons>
19?</MainForm>

?

3 我是如何設計了對象-對象關系映射

?

ORM對于一些小型應用感覺有點龐大,但是對于大型應用,我想是一個比較總要的組件了。在我們使用ORM組件時,也經常會寫以下代碼。1?var?user?=?new?User();
2?user.Name?=?NameTextBox.Text.Trim();
3?user.Password?=?PasswordTextBox.Text.Trim();
4?......
5?OrmFactory.Save(user);
6?----------------------------------------------
7?var?user?=?OrmFactory.QueryScalar(...);
8?NameTextBox.Text?=?user.Name;
9?......

?

如果一個MIS系統充斥了大量這樣的代碼,估計你也會膩味,從而喪失對編程的興趣了。記得我剛才說什么來了,“有問題,意味著升華”,“做一個有思想的程序員”。因此,接下來的問題就是,我們如何來解決類似這樣重復的勞動。我在2006年時想到的辦法就是實現一個對象-對象的映射。首先,設計如下實體類:?1?public?class?UserEntity
?2?{
?3?????……
?4?????[Member]
?5?????public?int?Age;
?6?????[Control]
?7?????public?string?Name?
?8?????{
?9?????????get?{?return?this._Name;?}
10?????????set?{?this._Name?=?value;?}
11?????}
12?????[Control("CardNo.Text")]
13?????public?string?CardNo?
14?????{
15?????????get?{?return?this._CardNo;?}
16?????????set?{?this._CardNo?=?value;????}
17?????}
18?????……
19?}
20?
21?public?class?EmployeeEntity
22?{
23?????……
24?????[Reference(typeof(UserEntity))]
25?????public?UserEntity?User
26?????{
27?????????get?{?return?this._User;?}
28?????????set?{?this._User?=?value;?}
29?????}
30?????[Control]
31?????public?float?PostSalary?
32?????{
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商店是我在不斷思索通用窗體框架以及對現有科技的趨勢的把握下,由幾個很有創造力的編程人員,在建立了完善的產品保障體系下,構建起來的。這兩個產品我會在后面介紹如何設計的。他們的設計我用了很長的時間。

?

我不是什么老鳥,希望我們在如此多的技術的世界中能夠多多交流,共同進步。解決這些問題,不僅增加了編程的樂趣,更是增加了自己的見識,從而避免自己成為一個沒有思想的程序員!我也知道,我們可以找到很多理由來反駁文中提到的做法和觀點,但是,提高自己才是最重要的,不要去著急的否定一些什么,并給自己找借口。

總結

以上是生活随笔為你收集整理的如何成为有思想、创新的程序员的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。