- 博客(75)
- 资源 (4)
- 收藏
- 关注
原创 浅谈程序员团队建设
前面聊过我为什么反对寄希望于内部培训提升员工技能的方法?和创业阶段敏捷开发产品原型,有个网友在微博上问我怎么解决项目成员不熟悉项目运行的平台的困难,140个字没办法全说明白,因此写一篇文章解释一下我对团队建设的看法。首先我认为IT技术变化实在太快,各种技术层出不穷,日新月异,团队很难做到在每个领域都紧跟时代的脚步,有的时候甚至是要被迫放弃自己熟悉的技术,为了某个项目或者产品不得不进入一些陌生的
2012-05-08 02:40:30 16744 30
原创 创业阶段敏捷开发产品原型
公司成立不到几个月,团队一共3个人,决定做一个手机上的自动化测试软件,目标是一次编写在三个手机平台上运行,使用自然语言编写的自动化测试程序,产品介绍视频:iQA介绍。 这是我们两个月的研发成果,采用敏捷的方式研发:1. 首先团队经过几次讨论,对产品应该为客户解决的问题有一个大概的了解。讨论中,由于自己也不知道最后产品应该做成什么样子,只是知道要跨平台,要使用自然语言编程,
2012-04-21 23:20:56 7175 1
原创 我为什么反对寄希望于内部培训提升员工技能的方法?
在微博和博客上我已经是不止一次反对,而且是强烈反对以内部培训的名义,提升员工技能的方法了,比如这篇 员工培训之我见。 我认为常说的辅导(Coach),不应该是一个填鸭式的教育,遗憾的是,我到现在还没有理解辅导的方式,在本文里就不对其做什么探讨。本文里我们谈谈内部培训,首先来看看员工对内部培训的意见:1. 不少人实际上是发自内心排斥内部培训的,放在周末吧,觉得占用了休息的时
2012-04-21 00:38:11 17671 28
原创 时间管理的小技巧(续)
接着前面时间管理小技巧里的讨论,说说拖沓的问题,就我个人来说,拖沓主要由两个原因组成:1. 这个事情实在是不情愿做,比如跟客户吵架……2. 今天很累,没心思干活……对于第一点,最好就是授权出去,让别人做,例如推给老板,例如指派下属解决。如果实在是逃不掉,就尽早做,所谓早死早超生。对于第二点,如果这个事情处理起来估计不超过2分钟(比如电话订个票),那就什么也不要想
2012-03-28 17:23:01 5374 2
原创 时间管理的小技巧
这里分享一下我现在用的时间管理小技巧。看过一些书,觉得很多都是讲理论性的东西,感觉说的都是因为我生也有涯,事情无限多,所以要将有限的生命集中在对自己最重要的事情上,随之而来的就是:1、 先做重要且紧急的;2、 再做重要不紧急的;3、 再做紧急不重要的;4、 最后再做不紧急也不重要的。那么现在问题来了,什么事情是重要的,什么事情又是紧急的?我觉得重要的事情就是符合你价值观的,俗一
2012-03-27 23:30:20 6456 2
原创 员工培训之我见
这是我在微博上写的几个评论,总结了我对企业内部员工培训的一些看法,其实我很赞成做内部培训,但这种培训不应该是以传授知识为主,而应该是以讨论为主,有时间我会再发一篇博客探讨内部讲座的好处以及操作方式。我认为不应该特意去为员工购买培训或者准备内部培训,就是福利好的大公司的内部培训也并不是所有人都抢着去听,我还碰到人嫌培训占用他的业余时间或者工作时间拒绝参加的情况。企业又不是慈善机构,有效的培训应该
2012-03-01 15:41:01 5652
原创 应用程序调试技术视频观看指南
这是第一部分,Windows平台下的应用程序调试技术讲座视频, 视频购买地址:http://product.china-pub.com/3502590 对于研发公司IT支持人员,项目或开发经理,设置事后可跟踪的BUG跟踪以及分析服务系统,建议选择观看:1、应用程序调试技术第1讲 准备调试环境2、应用程序调试技术第2讲 管理符号文件与源代码3、应用程序调
2012-03-01 15:35:50 5287
原创 应用程序调试技术视频各集技术概述
这是第一部分,Windows平台下的应用程序调试技术讲座视频, 视频购买地址:http://product.china-pub.com/3502590 第1讲 准备调试环境 调试符号文件的作用; 创建符号文件的方法; 在调试器里有无符号文件的区别; 公开符号版本和私有符号版本的区别; 创建公开符号文件的方法;
2012-03-01 15:34:51 4843
原创 米饭项目管理学 - 对CMMI的理解
我觉得不管是CMMI还是什么标准,思路无非就是保证交互的稳定一贯性,可以说是以不变应万变。它是一个方法论,一个做事的方式,微软自己有自己的一套方法论(好像有一个叫MSF的东西),IBM这些公司应该都有,殊途同归。怎么个以不变应万变?比如说做个米饭,先把工序分解,准备米,准备水,淘
2011-07-12 21:07:04 4458
原创 软件自动化测试—代码覆盖率
软件自动化测试—代码覆盖率在中提到了代码覆盖率,我很久没有去书店了,不知道是不是出了新的版本,觉得书里面关于代码覆盖率方面的知识有些地方没有讲,在这里补充一下。先回顾一下如何查看代码覆盖率 创建一个C#工程WildChar(无所谓是类型库工程还是命令行程序工程),假设我们要写一个将字符串按单词成对反转的程序。将下面的代码贴到工程的一个cs文件中:Program.cs
2009-12-19 23:15:00 7903
原创 Visual Studio调试之断点技巧篇补遗
讲完Visual Studio调试之断点技巧篇以后,翻翻以前看得一些资料和自己写的一些文章,发现还有几个关于中断程序的技巧在前面的文章里面遗漏了,决定还是在这里总结一下。当然啦,如果你知道这些技巧,忽略这篇文章好了,:)在程序启动的时候将调试器附加上去可能有人会对这个问题有一些争议,因为大部分情况下我们只需要在调试器(Debugger)里面直接启动被调试程序(Debuggee)就可以在程序
2009-10-10 11:28:00 5987 2
原创 Visual Studio调试之断点技巧篇
不知道能不能算是技巧啦,写出来放到首页贻笑大方而已。函数断点在前面的文章Visual Studio调试之避免单步跟踪调试模式里面我讲了如何设置函数断点,说实话,我个人喜欢设置函数断点,而不是在代码行里面设置断点。一般来说,函数断点在下面几种情形下有用:1. 例如调试一个网站程序,你通过分析网站的日志发现最有可能发生错误的函数,打开调试器并将调试器附加到程序上去,设置函数断点
2009-09-29 21:38:00 6469 1
原创 Visual Studio调试之断点进阶篇
在上一篇文章Visual Studio调试之断点基础篇里面介绍了什么是断点,INT 是Intel系列CPU的一个指令,可以让程序产生一个中断或者异常。程序中如果有中断或者异常发生了以后,CPU会中断程序的执行,去一个叫做IDT的部件查找处理这个中断(或者异常)的例程(Handler)。IDT是操作系统在启动的时候初始化的,至于IDT的细节问题,例如什么是IDT,怎样编写一个IDT的例程,怎样 初始
2009-09-27 12:37:00 5615
原创 调试JavaScript/VB Script脚本程序(ASP篇)
在文章调试JavaScript/VB Script脚本程序(Wscript篇)里面,有网友问我如何调试ASP里面的脚本程序,我不知道他问得是调试ASP网页里面的VBScript ASP代码,还是ASP.NET网页里面的JavaScript/VBScript客户端代码,所以我就在这篇文章里面先将调试ASP网页里面的ASP代码这种情况都解释一下吧。估计ASP这个玩艺用的人已经很少了,但是还是有很多
2009-09-14 13:43:00 4653
原创 调试JavaScript/VB Script脚本程序(IE篇)
JavaScript/VB Script脚本程序一般有两种执行方式,一种是嵌入在宿主程序里面执行,比如在IE浏览器里面执行;另外一种,在资源管理器里面双击执行(虽然还是通过另外一个程序解释执行,但是给人的感觉毕竟是直接运行)。这两种方式,都可以使用Visual Studio来进行调试,先看大家用得比较频繁的网页脚本程序的调试:1. 要调试网页里面的脚本程序,调试器需要宿主程
2009-09-13 18:25:00 5027
原创 调试JavaScript/VB Script脚本程序(Wscript篇)
在日常的操作系统维护过程中,有时我们也会写一些小的脚本程序来简化系统管理工作,例如调用一些WMI函数来自动安装卸载程序之类的。在实际工作中,我发现程序员对脚本抱怨最多的就是脚本程序很难调试这个缺点,特别是调试.vbs等WSH程序的时候,总是:1. 在资源管理器里面双击一个.vbs文件。2. 程序里面发生了一个错误,例如异常,或者编程逻辑错误。3.
2009-09-13 18:14:00 4984
原创 在WPF中使用ItemsControl控件来实现线状图控件(一)
在前面的文章里面提到了如何使用ItemsControl编写一个直方图控件(还没有写完,今天因为有急用就先写线状图的编写方法了),因此在阅读这篇文章之前,推荐先阅读下面几篇文章:1. 使用ListBox控件来实现直方图控件(一)2. 使用ListBox控件来实现直方图控件(二)3. 使用ListBox控件来实现直方图控件(三)4. 使用
2009-07-27 16:57:00 7556
原创 使用ListBox控件来实现直方图控件(三)
洋洋洒洒几千言以后,在前一篇文章的最后终于看到一丝曙光了— 至少有一个看起来像直方图的玩意了。使用ItemsControl来实现直方图有以下几个优点:1. 省去了手工布局X轴坐标上刻度的问题,否则的话,我们必须写类似下面的代码来布局X轴坐标的刻度。 double tickMarkWidth = LineChart.ActualWidth / CategoryTickM
2009-07-24 18:41:00 2197
原创 使用ListBox控件来实现直方图控件(二)
前一篇文章里面讲到了实现一个直方图控件所要注意的问题,既然是一个控件,那么需要先将给用户调用的API调用出来。如果读者有使用Office Excel的经验的话,就会发现,制作一个直方图,实际上只需要显示直方图的数据就可以了,如下图所示: 上图,再分解一下,可以看到每一个Series是一个系列的数据(比如一个数组);而每一个Category可以看成是用来识别一个数据的标识(例如数组的下标
2009-07-22 17:20:00 2943 4
原创 使用ListBox控件来实现直方图控件
最近在做一个WPF方面的项目,需要用到一些统计功能,需要制作一些直方图和线状图。一般来说,传统的直方图和线状图的编写方法都是:1. 确定X轴和Y轴,把刻度分别在X轴和Y轴上画出来。2. 画出X轴和Y轴,比如分别加上两个箭头之类的装饰品。3. 然后根据Y值,a. 对于直方图,将Y值转换为直方图里面矩形的高度,根据X值确定矩形在X轴的位置
2009-07-16 16:55:00 2318
原创 在WebBrowser控件中获取鼠标在网页上点击的位置
在WebBrowser控件中获取鼠标在网页(不是浏览器窗口)上点击的位置,只有代码了,没有讲解: private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e) { webBrowser1.Document
2009-07-13 01:17:00 3823 1
原创 使用WPF Resource以及Transform等技术实现鼠标控制图片缩放和移动的效果
程序要实现的目的是通过鼠标来控制图片的缩放和移动的效果,也就是说可以鼠标在程序界面上拖动图片,通过鼠标滚轮放大和缩小图片。这种功能在图片浏览程序里面再普通不过了,一般来说,如果是在MFC或者Winform里面实现这两个功能的话,都是通过处理鼠标的移动和滚轮事件,在这两个事件处理函数里面,获取鼠标的位置和滚轮滚动的偏移量,然后针对性地更改图片的位置和高宽度来做的。 比如说,在Winform里
2009-06-22 11:14:00 4647
翻译 让人混淆的UnmanagedType.LPStruct列集指令(翻译)
原始文献地址:http://blogs.msdn.com/adam_nathan/archive/2003/04/23/56635.aspx 在列集有多种非托管表现形式的托管数据类型时,MarshalAsAttribute属性可以改变列集(Marshaling)行为。一般来说,使用MarshalAsAttribute的难点是如何在它的构造函数里面选择正确的UnmanagedType枚举
2009-03-15 17:18:00 1634
原创 引起FileNotFoundException原因通用分析过程
有的时候,你在双击一个托管程序,或者使用Assembly.Load方法加载一些Assembly的时候,CLR会抛出System.FileNotFoundException,这种异常经常让人误解。例如有一个托管程序A,引用了dll B,虽然A和B都在同一个文件夹里面,但是当你试图运行A的时候,还是会有类似下面的异常抛出来:Unhandled Exception: System.I
2009-03-10 01:24:00 3595
原创 为什么连接字符串一定要用StringBuilder(介绍CLR Profiler)
当然啦,很多人开始学习C#的时候,就已经听到过来自多方的警告,连接字符串的时候一定要用StringBuilder,不要使用String直接连接的方式,而且也都知道其中的原因,例如什么因为String是一个固定的变量,不能更改,每一次String连接的操作实际上都是创建了一个新的String实例。可能很少有人知道具体的数据是什么,因为我们不能尽信书本上说的,一定要有一些实验数据才可以。 让我
2009-03-10 01:19:00 2939 2
原创 用C#编写一个进程外的COM组件示例代码讲解
代码的链接在《用C#编写一个进程外的COM组件》,小技巧:如果你要同时看示例代码和讲解的话,可以用浏览器分别打开示例代码和这篇文章,然后使用Windows提供的纵向平铺窗口功能就可同时看两篇文章了。 TestComVisibleClass.cs里面定义了我们要发布给COM客户程序的.NET对象,由于我们的.NET进程外组件需要调用几个COM库的API,因此在ComHelperClass里面
2009-02-21 15:26:00 3705 2
原创 用C#编写一个进程外的COM组件
我在以前的一篇文章《COM互操作 - 在VB 脚本里面使用.NET类型》里面写过如何在COM客户端程序里面使用.NET组件,但是这些.NET组件都属于进程内的组件,即COM客户端需要将CLR和.NET组件都加载进自身进程的内存空间里面才能使用。上一次在MSDN中文论坛上看到有网友问如何使用C#编写一个进程外的COM组件,由于在使用regasm.exe注册.NET组件的时候,regasm.exe将.
2009-02-20 18:56:00 3871
原创 VC编写的程序不能在其他机器上运行的解决方案(续)
我在前面的文章里面提到由于side-by-side问题导致的VC编写的程序不能正常启动的问题的解决方案,这种方法是针对于单个可执行文件的解决方案,但是有的时候你可能会碰到另外一种情况—也是由于side-by-side问题导致的,你的程序支持插件,当你的程序试图加载一个依赖于CRT的DLL的时候,Windows告诉你不能加载DLL。 比如微软在06年发布了CLR的开源版本,你在自己机器上用V
2009-02-19 20:40:00 2269
原创 调试时设置条件断点
一个好的调试器,能够帮助程序员处理很多自动化的工作。试想下列的情形:1. 错误是发生在一个循环当中,只在循环遍历了若干次以后,才会出现。2. 错误只在程序中某个变量为一个特定的值,才会出现,而这个变量的值是在程序运行的过程中随机设置的。3. 多个线程都要调用同一个函数,而你只想在某几个线程执行这个函数的时候,中断程序的执行。在上面列出
2009-02-18 18:43:00 12017
原创 C#语法造成的小问题(编译原理知识)
昨天跟看到一篇帖子,说的是C#里面针对byte类型的计算,+号操作符和+=操作符对于数据类型的隐式转换有两种不同的处理方式,例如下面的代码是不能编译通过的:using System; public class ByteOp{ public static void Main() { byte b = 1; b =
2009-02-17 21:45:00 5735 8
原创 列出.NET程序所依赖的Assembly
有的时候你可能会碰到.NET程序在发布机上不能启动的问题,.NET程序告诉你有的Assembly不能加载,你想看看.NET程序到底依赖于哪些Assembly的话,可以试一下下面的程序(注意:你只能在可以执行这个.NET程序的机器上运行下面的程序):1. using System;2. using System.Collections.Generic;3. using S
2009-02-16 17:51:00 2941
原创 VC编写的程序不能在其他机器上运行的解决方案
有的时候,你在Visual C++上面经过好几个月的辛勤努力,终于将程序编写完成并且测试完毕,然而当你试图在客户的发布机上运行刚写好的程序时,有可能会碰到类似下面的错误,操作系统告诉你“由于应用程序配置不正确,应用程序未能启动。重新安装应用程序可能会纠正这个问题”:一般情况下,这个问题都是由于程序不能找到所需要的C运行库(CRT)而引起的。 在Windows XP SP2以后,
2009-02-15 21:41:00 1859
原创 调试存储过程
Visual Studio提供了存储过程调试功能,你可以在Visual Studio里面直接调试存储过程里面的T-SQL语句,察看存储过程局部变量的值,以及设置断点等等。 这里是设置过程和操作步骤:1. 启动Visual Studio,并且点击菜单里面的“ 工具(Tools)”à “连接到数据库(Connect To Database)”。2. 在弹
2009-02-14 17:11:00 1697
原创 调试WPF数据绑定(Data Binding)错误
WPF的数据绑定功能很强大,允许你在Xaml文件里面直接指定控件要绑定数据的属性,甚至可以绑定到一个函数的返回值里面。但是强大方便的背后是增加的调试的难度,有的时候你给出了错误的Binding Source和Path,在界面上显示的结果就是一片空白,很难搞明白是什么地方设置错了。WPF数据绑定内建了跟踪机制。调试程序的时候,如果 数据绑定发生错误的时候,WPF会在Visual Studio
2009-02-13 18:18:00 3360
原创 COM套间对.NET程序使用COM对象的影响(下)
由于所有的COM对象都会被分配到一个相应的套间里面,因此在.NET里面,为了方便.NET程序调用COM对象,每一个.NET线程都会被分配到一个套间里面――即使你没有在代码里面指定线程运行的套间。在.NET线程里面创建的COM对象都会被分配到特定的套间里面,如果两个.NET线程 被分配到了不同的套间里,那么两个线程之间互相调用COM对象就需要列集函数调用。在.NET 2.0以后,默认情况下.NE
2009-02-12 18:18:00 1404
原创 COM套间对.NET程序使用COM对象的影响(中)
COM里面,套间是一个 想象中的边界,用来在多线程环境中安全使用线程安全和线程不安全的COM对象。什么叫做线程安全的COM对象呢?再多线程环境中,如果这个COM对象自己实现了同步机制,可以被多个线程同时调用而不破坏对象内部数据的完整性的话,那么这个对象就叫做线程安全的对象。然而COM对象有一个目标就是,即使在多线程环境里面也可以安全地使用线程不安全的COM对象。也就是说,即使COM对象内部没有实现
2009-02-11 13:45:00 1550
原创 COM套间对.NET程序使用COM对象的影响(上)
在COM时代里,套间是用来简化多线程环境下使用COM对象的,然而在.NET里面,微软又放弃了套间的概念,这样给我们在.NET里面使用COM对象的时候造成了很多的麻烦。例如有的时候你会发现在有的线程里面创建了COM对象并将它的引用保存在全局变量里面,在其他的线程里面使用的时候,却发现.NET扔出一个InvalidCastException的异常,发生这种情况大多数都是因为两个.NET线程运行在不同的
2009-02-10 23:06:00 1539
开发人员技能清单
2012-04-21
版本控制系统进阶--使用VSTF将项目开发流程集成进来到工具当中
2009-08-11
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人