星期六下午一个朋友让我写一个小程序,说他核对数据很麻烦,要干三天而且容易出错,我听了他的要求,觉得容易,答应替他做一下。
本来想着简单,可是真动起来却费劲,用VBA整整花了6个小时。
交给他,10秒之内完成所有的工作,他很兴奋,对我说:“太好了,请你吃饭!”
我开玩笑地说:“LZ忙活了那么长时间,你就一顿饭就打发了!唉!”
“那还咋地就一个小程序嘛,你一会儿就搞定了,还想咋样”他以为不过尔尔。
我说:“没有啦,给你开个玩笑。”,朋友帮忙怎么会要钱呢我想知道在他心里,这个活的价值所在。
回来后我想想这些年的经历,从没有想过如何定义一个软件的价值和价格,给别人写程序,也是别人给多少拿多少,可是就很多人来说,他们心目中估计从来没有估量过一个软件真正的价值所在,更不会体谅一个程序员的辛苦。
衡量我那6个小时的价格,如果按那个朋友工作三天来算,一天他的工资应该有200多元,3天就是600多元,这个工作他每年都做,就按3年算也是1800元〖前提:我帮助他持续改进,这个我肯定会做。〗,核心的问题是我帮助他提高了工作效率和效益,这隐形的价值没有办法估算。
昨天给儿子 名,老师听说我是搞IT的,让我帮忙写一个分班程序,学校每年分班都要忙活好一阵子,我想都没有想就答应了,问我多少钱赶紧说不要钱,再不识体我也不会在这儿犯傻。
后来又要我写一个排课表程序,问到价格,估计不超过2000元而且还犯难,我就婉拒了,因为听了她们的需求挺复杂,真要动手写并不容易,算法复杂,短时间难搞定的。
回来我就琢磨分班程序,没想法,无法动手,昨天晚上睡前想也没有想到好招,吃了根雪糕后,想好了。
今天晚上过来写,刚准备开始,又迷糊了,觉得前面想好的有问题,不行。
这个小程序写起来可能1个小时就完成了,可是前后思考的功夫却多了去,哪怕一个小程序也折磨人啊!
在我心目中,做诸如管理系统、数据库应用、没有根值入系统核心的工具等软件的都不算有真正有技术含量的活儿,只有在操作系统底层动心思折腾出开发平台类并且应用纯C++的软件才称得上真正意义的开发,我始终认为:做一般的应用系统、使用目前流行工具如C#、Java或其他语言对于一般人经过学习都可以胜任,这和其他工种没有本质区别,可能明显的区别在于软件开发这个行当里,需要更多的积累、打磨、沉浸和不断地与时俱进的继承和扬弃。
所以,在我内心也就从没有认为我是程序员,做的东西很多但谈不上价值,没有价值的东西谈什么价格
希望有一天,有个轻松的心态做个象样的、有价值的开发,这样,到老了,咱也就无愧地认为自己当过程序员了。
分班小程序:
Dim LoopCount As Integer ‘临时计数
Dim IALL As Integer ‘学生总数
Dim ClassCurNum(8) As Integer ‘记录当前班级学生数
Dim INumOfPerClass As Integer ‘每个班级的人数
Dim DtStart As Date ‘开始时间
Dim DtEnd As Date ‘结束时间
Dim IClassCount As Integer ‘班级数
‘Option Base 1
Sub 初始化()
‘分7个班
IClassCount = 7
‘每班最多50个学生
INumOfPerClass = 50
‘学生总数
IALL = 305
‘开始时间
DtStart = CDate(“2006/9/1”)
‘结束时间
DtEnd = CDate(“2008/8/31”)
‘计数清零
ClassCurNum(1) = 0
ClassCurNum(2) = 0
ClassCurNum(3) = 0
ClassCurNum(4) = 0
ClassCurNum(5) = 0
ClassCurNum(6) = 0
ClassCurNum(7) = 0
End Sub
Sub 分班()
Dim DtTemp As Date
Dim DtMax As Date
Dim DtMin As Date
Dim IYear As Integer
Dim IMonth As Integer
Dim Rng As Range
初始化
DtTemp = DtStart
LoopCount = 1
Do While DtTemp
‘取时间范围
IYear = Year(DtTemp)
IMonth = Month(DtTemp)
If IMonth = 12 Then
DtMin = CDate(Trim(Str(IYear)) + “/12/1”)
DtMax = CDate(Trim(Str(IYear + 1)) + “/1/1”)
Else
DtMin = CDate(Trim(Str(IYear)) + “/” + Str(IMonth) + “/1”)
DtMax = CDate(Trim(Str(IYear)) + “/” + Str(IMonth + 1) + “/1”)
End If
‘搜索
With Sheet1
For Each Rng In .Range(“E2:E” + Trim(Str(IALL)))
If CDate(Trim(Rng.Text)) >= DtMin And CDate(Trim(Rng.Text))
.Range(“F” + Trim(Str(Rng.Rows.Row))) = Str(GetClassNo)
End If
Next
End With
‘准备分配下一个月
IMonth = IMonth + 1
If IMonth = 13 Then
IMonth = 1
IYear = IYear + 1
End If
DtTemp = CDate(Str(IYear) + “/” + Str(IMonth) + “/1”)
Loop
MsgBox “分班完毕!”
End Sub
Function GetClassNo()
If ClassCurNum(LoopCount)
GetClassNo = LoopCount
ClassCurNum(LoopCount) = ClassCurNum(LoopCount) + 1
‘准备下一个取班级
LoopCount = LoopCount + 1
If LoopCount > IClassCount Then
LoopCount = 1
End If
Else
‘学生已经满了
‘准备下一个取班级
LoopCount = LoopCount + 1
If LoopCount > IClassCount Then
LoopCount = 1
End If
‘需要保证递归不溢出
GetClassNo = GetClassNo
End If
End Function
Sub 统计分班结果()
Dim DtTemp As Date
Dim DtMax As Date
Dim DtMin As Date
Dim IYear As Integer
Dim IMonth As Integer
Dim IRowNo As Integer
初始化
DtTemp = DtStart
IRowNo = 4
Do While DtTemp
IYear = Year(DtTemp)
IMonth = Month(DtTemp)
With Sheet2
.Range(“C” + Trim(Str(IRowNo))) = Statistics(1, “男”, IYear, IMonth)
.Range(“D” + Trim(Str(IRowNo))) = Statistics(1, “女”, IYear, IMonth)
.Range(“E” + Trim(Str(IRowNo))) = Statistics(2, “男”, IYear, IMonth)
.Range(“F” + Trim(Str(IRowNo))) = Statistics(2, “女”, IYear, IMonth)
.Range(“G” + Trim(Str(IRowNo))) = Statistics(3, “男”, IYear, IMonth)
.Range(“H” + Trim(Str(IRowNo))) = Statistics(3, “女”, IYear, IMonth)
.Range(“I” + Trim(Str(IRowNo))) = Statistics(4, “男”, IYear, IMonth)
.Range(“J” + Trim(Str(IRowNo))) = Statistics(4, “女”, IYear, IMonth)
.Range(“K” + Trim(Str(IRowNo))) = Statistics(5, “男”, IYear, IMonth)
.Range(“L” + Trim(Str(IRowNo))) = Statistics(5, “女”, IYear, IMonth)
.Range(“M” + Trim(Str(IRowNo))) = Statistics(6, “男”, IYear, IMonth)
.Range(“N” + Trim(Str(IRowNo))) = Statistics(6, “女”, IYear, IMonth)
.Range(“O” + Trim(Str(IRowNo))) = Statistics(7, “男”, IYear, IMonth)
.Range(“P” + Trim(Str(IRowNo))) = Statistics(7, “女”, IYear, IMonth)
End With
IRowNo = IRowNo + 1
IMonth = IMonth + 1
If IMonth = 13 Then
IMonth = 1
IYear = IYear + 1
End If
DtTemp = CDate(Str(IYear) + “/” + Str(IMonth) + “/1”)
Loop
MsgBox “统计完毕!”
End Sub
Function Statistics(ClassNo As Integer, Xb As String, IYear As Integer, IMonth As Integer)
Sheets(“sheet1”).Select
Dim ICount As Integer
With Sheet1
For Each Rng In .Range(“C2:C” + Trim(Str(IALL)))
If Trim(Rng.Text) = Xb And CInt(Range(“F” & Trim(Str(Rng.Rows.Row)))) = ClassNo And Month(Range(“E” & Trim(Str(Rng.Rows.Row)))) = IMonth And Year(Range(“E” & Trim(Str(Rng.Rows.Row)))) = IYear Then
ICount = ICount + 1
End If
Next
End With
Sheets(“sheet2”).Select
Statistics = ICount
End Function
统计分班结果:
文章知识点与官方知识档案匹配,可进一步学习相关知识Java技能树首页概览91545 人正在系统学习中 相关资源:ExWinner成套 价软件
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!