关于作者

用户名:tuenhai
笔名:tuenhai
地区: kingdom
行业:其他

日历  

快速登录

+ 用户名:
+ 密 码:

在线留言


关注博客

本站统计

访问统计:
文章个数:39
评论个数:24
留言条数:12




Powered by BlogDriver 2.1

风随着意思吹

 

Mail: tuenhai#gmail.com 网址:www.tuenhai.com 30不惑, 自负, 写博是为了提高

文章

已锁定  (作者置顶)
此日志的浏览权限已被作者锁定,请同作者联系,发送短消息,如果你的身份符合作者的要求,点击此处可以进行浏览

- 作者: tuenhai 2006年02月19日, 星期日 09:03  回复(0) |  引用(0) 加入博采

“子不语怪力乱神”的两重境界
摘要:“子不语怪力乱神”的两重境界 查看全文

- 作者: tuenhai 2006年07月8日, 星期六 12:47  回复(0) |  引用(0) 加入博采

函数式编程语言Haskell入门(一)——Haskell编程资料

-函数式编程语言Haskell入门(一)——Haskell编程资料


www.tuenhai.com 20060529



Haskell是什么?
唐宗汉说:
Haskell“比 C++ 更快,比 Perl 更简洁,比 Python 更正规,比 Ruby 更灵活,比 C# 更规范,比 Java 更健壮,和 PHP 则毫无关系”。


函数式编程语言Haskell入门之网络学习资源



http://www.haskell.org/ Haskell主页
http://haskell.org/hawiki/ Haskell wiki
http://www.haskell.org/haskellwiki/Implementations Haskell工具下载
http://www-users.cs.york.ac.uk/~ndm/projects/winhugs.php Win下解释器下载
http://www.haskell.org/visualhaskell/ Win下解释器,编译器。要装VS2003

中文教程:
http://rufi.yculblog.com/post.58940.html rufi的Haskell教程
http://wiki.perlchina.org/main/print/Yet_Another_Haskell_Tutorial flw翻译的教程
http://www.acsu.buffalo.edu/~xluo2/haskell/ 另一个Haskell中文教程

有关文章:
http://svn.perl.org/perl6/pugs/trunk/docs/zh-cn/01Overview.html Haskell与Perl6
http://wiki.perlchina.org/main/show/Interview_with_Autrijus_Tang_perl_com Perl 国际化和 Haskell—采访唐宗汉
http://blog.csdn.net/xxmpp/archive/2005/08/29/467415.aspx Haskell简介
http://blog.csdn.net/xxmpp/archive/2005/09/19/484648.aspx  Haskell语法一
http://liubin.itpub.net/post/325/9755  haskell介绍
http://www.dircity.com/newspub/html/3-2/38169.html  关于Haskell

英文教程:
http://www.haskell.org/tutorial/ A Gentle Introduction to Haskell
http://www.isi.edu/%7Ehdaume/htut/ Yet Another Haskell Tutorial
http://www.haskell.org/~pairwise/intro/intro.html Haskell Tutorial for C Programmers

更多英文教程:
http://haskell.org/haskellwiki/Books_and_tutorials

上面的中文教程,为防止“年久失修”,tuenhai.com已经全文转贴在:
http://groups.google.com/group/tuenhai/
用haskell搜索可以很快找到。


为什么要写<函数式编程语言Haskell入门——Haskell编程资料>



这几天在看haskell的资料,多数是英文的。网上关于haskell的中文编程资料奇少,于是想动手把看过的有关英文资料翻译成中文。
1. 从哲学上来说,学习一种知识而没有与外界发生交互,相当于没有学习。
2. 顺便翻译,也不花费非常多的时间。
3. 看英文编程资料是比较郁闷的事情,因为要翻译,大脑就多了一个兴奋点,不太会睡着了。
4. 因为要翻译,人先天的思维惰性就会被克服一些。
不过,要说明的是,本人正处在英语学习阶段,翻译不一定准确,仅供参考(错误处请指正)

tuenhai.com的书橱里有不少直译的外国文学作品,拿起书就头大。本文自然以意译为主,文中代码在Windows XP调试通过(言外之意,没有调试通过的代码就略去了)。


Hugs 零起点



本节内容选自WinHugs Version 20051031的帮助。
安装好WinHugs后,从开始菜单启动,会出现下面的界面:

|| || || || || || ||__ Hugs 98: Based on the Haskell 98 standard
||___|| ||__|| ||__|| __|| Copyright (c) 1994-2005
||---|| ___|| World Wide Web: http://haskell.org/hugs
|| || Report bugs to: mailto:hugs-bugs@haskell.org
|| || Version: 20051031 _______________________________________________

Haskell 98 mode: Restart with command line option -98 to enable extensions


Hugs session for:
file:{Hugs}\libraries\Hugs\Prelude.hs
file:{Hugs}\libraries\Prelude.hs
Type :? for help
Main>

启动WinHugs解释器,标准库{Hugs}\libraries\Hugs\Prelude.hs 会自动载入。如果没有载入,可能是安装有错误。请查看安装说明。

使用Hugs就像使用计算器那么简单。也就是,你会用计算器就会用Hugs。输入表达式,回车,立即计算出结果。比如下面的例子:

Prelude> (2+3)*8
40

Prelude> sum [1..10]
55
Prelude>

开头的 Prelude> 表示Prelude模块已经加载,可以在 Prelude>后面输入表达式,会自动调用Prelude中定义的相应函数执行计算。
第一次,我们输入(2+3)*8,回车,返回值是40.
第二次,我们输入表达式sum [1..10],其中[1..10]表示1至10的list,sum是Prelude中预定义的函数,在这里表示把列表中的所有数相加。在Hugs实际是这样计算的:

1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 = 55

如果不嫌烦,也可这样来求值:

Prelude> 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10
55
Prelude>

试试:
Prelude> sum [1..10000]
代码是不是非常简洁。如果用其他语言来写,大都要写个for循环来计算。

虽然使用Hugs就象使用计算器那么简单,不过Hugs和大多数计算器不同,Hugs不限制数字的长度。在现代所谓的高级语言中,绝大多数都做不到这点。比如VS 2005, c++等,数字一长就会溢出。从这非常小的一点就可以看出,所谓的高级语言其实都是过时了的,因为程序员的时间比机器的时间更宝贵,现在机器的配置已经不是问题,为什么不让程序员写更少的代码,而让机器来做更多的事情呢。原来tuenhai.com在VS2005中专门写了一个函数来实现大数计算,在Hugs中就用不着这么做了。

Hugs的表达式还可以包含很多的数据类型,比如:numbers,booleans,characters,strings,lists,functions,还有user-defined datatypes.
请看下面的例子:

Prelude> (not True) || False
False
Prelude> reverse "Hugs is cool"
"looc si sguH"
Prelude> filter even [1..10]
[2, 4, 6, 8, 10]
Prelude> take 10 fibs where fibs = 0:1:zipWith (+) fibs (tail fibs)
[0, 1, 1, 2, 3, 5, 8, 13, 21, 34]
Prelude>

你不能在命令行里创建函数。要创建并使用函数,要写在文件里并在命令行里载入文件。
上面最后一个例子,我们定义的fib只是在当前表达式有效,并不能在后面的代码里引用它。还有,命令行的表达式只能是单行模式。

Hugs允许把整个程序作为值一样进行计算。例如,putStr "hello, " 是个很简单的程序,在屏幕上打印出"hello, ". 组合使用一个打印出字符串"world"的程序,可以这样:

Prelude> putStr "hello, " >> putStr "world"
hello, world
Prelude>

就象执行标准数学运行一样,类似操作也可以在程序之间进行。例如上面的例子。

在Hugs命令行键入表达式能立即返回结果。有两个特别的命令我们要记住:
:q 退出解释器。
:? 列出所有命令。这在你忘记某个命令的写法时非常有用。
在Hugs里,命令一般都用冒号:开头。
注意,终止键(一般是control-C 或者 control-Break)会终止编译或计算,打印出{Interrupted!},返回命令行等待输入。

在前面的例子中,我们已经使用过prelude中定义的函数,如sum,>>,take。模块是函数的集合,我们可以把包含自定义函数的模块写到文件中。请看下面的例子:

module Fact where
fact :: Integer -> Integer
fact n = product [1..n]

第一行:定义一个名为Fact的模块
第二行:双冒号之前的是函数名,在本例中是fact。双冒号之后是参数列表,用->来连接,第一个Integer表示一个Integer类型参数。最后一个Integer表示返回Integer的值,
第三行:函数的定义部分,n是参数,等号之后则是函数的逻辑部分。

我们把上面的代码保存到Fact.hs(保存路径下面节会讲到)。(在Hugs中约定,保存模块的文件名后缀用.hs,文件名通常用模块名) product函数是prelude中预定义的函数,用以计算数列中各数的乘积,用法和sum函数差不多。在数学中,n的阶乘通常写作n!,也就是fact n = n!
n! = 1 * 2 * ... * (n-1) * n
在数学中阶乘的定义:从1到所给数字中的所有正数相乘。

前面我们定义了一个函数,在使用这个函数之前,要把Fact.hs载入解释器。简单的方法就是使用:load命令。

Prelude> :load Fact
Reading file "Fact.hs":

Hugs session for:
/Hugs/lib/Prelude.hs
Fact.hs
Fact>

在WinHugs中,可以用菜单File,File Manager中载入新的模块。命令提示符变成Fact>表示已经成功载入。

注意,Hugs session for:中列出了已经载入的文件名,第一个总是标准库prelude。 Fact>表示已经载入Fact模块,可以用其中的函数进行计算:

Fact> fact 6
720
Fact> fact 6 + fact 7
5760
Fact> fact 7 `div` fact 6
7
Fact>

另一个例子:

Fact> comb 5 2 where comb n r = fact n `div` (fact r * fact (n-r))
10
Fact>

在上面这个例子中,我们在表达式中定义了comb,如果我们要在以后的代码中用它,就要把这个函数写到文件中。把下面定义加到Fact.hs文件中
comb n r = fact n `div` (fact r * fact (n-r))
重新加载Fact.hs,然后我们就可以随时使用comb函数:

Fact> :reload
Reading file "fact.hs":

Hugs session for:
/Hugs/lib/Prelude.hs
Fact.hs
Fact> comb 5 2
10
Fact>

象多数语言的入门教程一样,我们来写一个Hello World:

Prelude> putStr "Hello World"
Hello World
Prelude>

是不是很简单?如果你要通过外部可执行文件来运行上面的代码,你就要象下面这样把代码写到hello.hs文件中:

module Main where
main = putStr "Hello World"

编译器编译可执行文件一定需要定义一个名叫main的函数。如果只是在解释器中调试程序,函数名可以是其他名字。


开始使用Hugs



因tuenhai.com只有Windows环境,故Unix相关内容略去。
在WinHugs中用+或-符号来开关解释器环境参数。可以在下面的注册表项中自定义:
HKEY_CURRENT_USER\Software\Haskell\Hugs\Winhugs20051031
20051031是Winhugs的版本号。有个Option键,可以在值里设置主要参数。我的键值是:

-s -t -g -l -. +q -Q +w -k -o -O +u -I -T +A +R -H +98 -h917504 -p"%s> " -r"$$" -P".;{Hugs}\\libraries;{Hugs}\\libraries\\Hugs;{Hugs}\\my\\" -S".hs;.lhs" -E"&C:\\WINDOWS\\notepad.exe" -c40

上面注册表值中,-P后面是搜索目录设置,-E后面设置编辑器,默认是notepad.exe。
在安装WinHugs时已经初始化设置了主要的解释器环境参数。

我们也可以在WinHugs菜单File,Options中更改。tuenhai.com只更改了两处:
一. Compile time,Loading Files中加入自己的路径,把下面字符加在系统默认路径后面:

;{Hugs}\my\

上面;是多个搜索路径的分隔符,{Hugs}是WinHugs的安装目录,my是我新建的目录。
我在WinHugs的安装目录下新建了一个my文件夹,自己写的程序都放到这个文件夹里。同时要把这个文件夹的路径加入WinHugs的搜索路径中去,这样在命令行中引用任何自己的文件,都只要写文件名,而不用写路径。就象上节,:load Fact就可以加载Fact文件。

二. 在Hugs Options的WinHugs条,我把默认外部编辑器改成了EmEditor。


Hugs命令行的使用



Hugs能用命令行载入文件,检查或修改参数。几乎所有命令都用冒号:开头,可以用首字母缩写的方式使用常用命令。比如可用:l,:s,:q分别代替:load,:set,:quit命令。

多数Hugs命令带有参数,用空格分开。字符串常量可以包含空格,换行或者其他特殊字符。举例:

:load My File

上面的命令载入了两个文件,My和File。
下面的命令则只载入一个文件:

:load "My File"
:load "My\SPFile"
:load "My\ \ File"
:load My" "File

一般,我们不在文件名包含空格和特殊字符,也不包含引号。

tuenhai.com注:在WinHugs中载入文件,不能加文件扩展名,否则会失败:

Hugs> :load Fact.hs
Reading file "Fact.hs":
ERROR - Unable to open file "Fact.hs"

去掉扩展名:

Hugs> :l Fact
Reading file "D:\Program Files\WinHugs\my\\Fact.hs":

Hugs session for:
file:{Hugs}\libraries\Hugs\Prelude.hs
file:{Hugs}\libraries\Prelude.hs
file:{Hugs}\libraries\Hugs.hs
file:{Hugs}\my\\Fact.hs
Fact>

用putStr打印出字符串:

Prelude> putStr "Hello, world"
Hello, world
Prelude>

用++连接字符串:

Prelude> "Hello" ++ ", " ++ "world"
"Hello, world"
Prelude>

解释器不会执行含有语法错误,类型错误,或引用一个未定义变量的表达式:

Prelude> sum [1..)
ERROR: Syntax error in expression (unexpected `)')
Prelude> sum 'a'
ERROR: Type error in application
*** expression : sum 'a'
*** term : 'a'
*** type : Char
*** does not match : [a]
Prelude> sum [1..n]
ERROR: Undefined variable "n"
Prelude>

一个比较容易出错的地方是:没有应用于特定表达式的show函数,也就是没有该类型的Show类的实例。例如我们在模块里定义了一个类型T:

module Test where
data T = A | B

把这个模块保存到my文件夹Test.hs.然后用:l Test命令加载,命令提示符变成Test>表示已经加载成功。下面我们来测试一下:

Test> A
ERROR: Cannot find "show" function for:
*** expression : A
*** of type : T
Test>

要消除上面的错误,就要添加一个Show类的派生实例。最简单的方法是用下面的方法定义模块:

module Test where
data T = A | B deriving Show

然后Hugs就能计算和显示类型T的值:

Test> A
A
Test> take 5 (cycle [A,B])
[A, B, A, B, A]
Test>

要注意的是,我们可以用:set命令改变解释器的环境参数。

如果我们不带参数使用:set命令,就列出当前的所有参数设置。下面是tuenhai.com的设置:

Test> :s
TOGGLES: groups begin with +/- to turn options on/off resp.
s Print no. reductions/cells after eval
t Print type after evaluation
g Print no. cells recovered after gc
l Literate modules as default
. Print dots to show progress
q Print nothing to show progress
Q Qualify names when printing
w Always show which modules are loaded
k Show kind errors in full
u Use "show" to display results
I Display results of IO programs
T Apply 'defaulting' when printing types
A Auto load files
R Enable root optimisation

OTHER OPTIONS: (leading + or - makes no difference)
hnum Set heap size (cannot be changed within Hugs)
pstr Set prompt string to str
rstr Set repeat last expression string to str
Pstr Set search path for modules to str
Sstr Set list of source file suffixes to str
Estr Use editor setting given by str
cnum Set constraint cutoff limit

Current settings: +wkuAR -stgl.qQIT -h917504 -p"%s> " -r$$ -c40
Search path : -P.;{Hugs}\libraries;{Hugs}\libraries\Hugs;{Hugs}\my\
Source suffixes : -S.hs;.lhs
Editor setting : -E&E:\soft\study\EmEditor\EmEditor.exe
Compatibility : Haskell 98 (+98)

在Windows环境,执行:set命令修改参数后,会将变化记录到注册表相应键值(参见本文前面部分)。

我们也可以在Hugs中使用系统命令行,方法就是使用转义符! 比如在WinHugs中敲入:!dir 就是列出当前目录内容。多数时候,我们可以使用exit命令离开系统命令行返回Hugs。

可以用:?命令列出所有Hugs的命令:

Hugs> :?
LIST OF COMMANDS: Any command may be abbreviated to :c where
c is the first character in the full name.

:load load modules from specified files
:load clear all files except prelude
:also read additional modules
:reload repeat last load command
:edit edit file
:edit edit last module
:module set module for evaluating expressions
evaluate expression
:type print type of expression
:? display this list of commands
:set set command line options
:set help on command line options
:names [pat] list names currently in scope
:info describe named objects
:browse browse names exported by
:main run the main function with the given arguments
:find edit module containing definition of name
:cd dir change directory
:gc force garbage collection
:version print Hugs version
:quit exit Hugs interpreter

:module 命令改变当前模块。比如上面第一行:Hugs> :? 其中Hugs>表示当前模块是Hugs,我们要改变到系统模块Prelude,可以这么做:

Hugs> :m Prelude
Prelude>

:m是:module命令的缩写形式。命令提示符变成Prelude>表示切换当前模块成功。如果不指定模块名,就切换到最近载入的模块。要注意的是,只能在已经载入的模块内切换。通常,已经载入的模块显示在命令行中。

:cd dir命令用来改变当前工作目录到dir。如果不指定路径,将忽略该命令。

:gc命令可以强制垃圾回收,并打印出已回收的字位数目:

Prelude> :gc
Garbage collection recovered 95766 cells
Prelude>

:quit命令用来退出Hugs。

:load [filename ...]命令清除先前加载的模块,然后尝试从列出的文件中加载定义(definitions),如果某个文件有错误就暂停加载并显示错误信息,修正错误后会启动:reload命令。
在某些系统,在使用:edit命令后会自动执行:reload命令。(在Windowns系统中,解释器和编辑器在执行独立进程时例外)
如果不指定文件名,:load命令清除先前加载的definitions,只保留prelude中提供的definitions.
:load命令会到指定路径搜索用户输入的模块文件,首先搜索精确匹配的文件,如果找不到,系统会尝试加上.hs和.lhs后缀进行搜索。如果你输入:load Array,如果在工作目录下没有名为Array,Array.hs,Array.lhs的文件,系统就会从标准库中加载Array。

:also [filename ...]命令用来附加文件。和:load不同的是,:also不清除先前加载的模块。
(不过,在上一次Reading file以后你又修改了先前的模块,在执行:also前会重新加载修改过的文件)
举例:你先前加载了下面的文件:

Hugs session for:
file:{Hugs}\libraries\Hugs\Prelude.hs
file:{Hugs}\libraries\Prelude.hs
file:{Hugs}\libraries\Hugs.hs
file:{Hugs}\my\\Fact.hs

原来加载了四个文件,你要再加载Test.hs。如果用:l Test命令来加载的话就变成这样:

Hugs session for:
file:{Hugs}\libraries\Hugs\Prelude.hs
file:{Hugs}\libraries\Prelude.hs
file:{Hugs}\libraries\Hugs.hs
file:{Hugs}\my\\Test.hs

可见,:l命令清除了除默认加载的文件以外的文件。

原来加载囝四个文件,如果用:also Test来再加载Test.hs就变成:

Hugs session for:
file:{Hugs}\libraries\Hugs\Prelude.hs
file:{Hugs}\libraries\Prelude.hs
file:{Hugs}\libraries\Hugs.hs
file:{Hugs}\my\\Fact.hs
file:{Hugs}\my\\Test.hs

可见,:also不清除先前加载的所有文件。
如果成功加载,下面命令顺序是等价的:

:load
:also f1
.
.
:also fn

:reload重复最近一次:load命令。如果上次载入文件后,没有任何文件被修改,:reload将不起作用。

:project [project file]加载工程。

:edit [file]启动编辑器编辑文件。

:names [pattern ...]用来搜索所有已载入编译器的函数名称。如果不带任何参数,按字母顺序列出所有名称。
:names参数能接受1个或多个参数,命令行将打印出1个或多匹配的结果。例如:

Prelude> :n fold*
foldl foldl' foldl1 foldr foldr1
(5 names listed)
Prelude>

:names命令可以用通配符,*匹配任意字符,?匹配单个字符,\c精确匹配c。也可以指定匹配范围,如[a-zA-Z]匹配所有字母:

Prelude> :n *map* *[Ff]ile ?
$ % * + - . / : < > appendFile map mapM mapM_ readFile writeFile ^
(17 names listed)
Prelude>

:type expr命令用来不执行计算而打印出表达式的类型:

Prelude> :t "tuenhai.com"
"tuenhai.com" :: String
Prelude> :t putStr "tuenhai.com"
putStr "tuenhai.com" :: IO ()
Prelude> :t sum [1..10]
sum (enumFromTo 1 10) :: (Num a, Enum a) => a
Prelude>

注意,使用:set +t命令设置参数后,Hugs能自动显示多数表达式的类型:

Prelude> :set +t
Prelude> sum [1..10]
55 :: Int
Prelude>


关于WinHugs



WinHugs比较适合Haskell初学者练习使用。在WinHugs中某些库可能不适合使用。因此,大的工程不推荐使用WinHugs。
Hugs 98的标准库有:Array, Char, Complex, IO, Ix, List, Locale, Maybe, Monad, Numeric, Prelude, Random, Ratio, and System,在WinHugs中默认加载Prelude库。我们在学习Haskell要用到其他库的函数,这时可以在默认加载文件中加入import语句加载其他库。
在WinHugs中,默认加载的是下面的文件:

Hugs session for:
file:{Hugs}\libraries\Hugs\Prelude.hs
file:{Hugs}\libraries\Prelude.hs
file:{Hugs}\libraries\Hugs.hs

Prelude.hs是一个标准库,Hugs.hs中包含了main函数。试一下下面的命令:

Hugs> map Char.toUpper "Hello World"
ERROR - Undefined qualified variable "Char.toUpper"
Hugs>

因为没有加载Char库,程序出错。我们在Hugs.hs中用import语句加载Char库。点击WinHugs中列出的
file:{Hugs}\libraries\Hugs.hs
会自动调用默认编辑器打开Hugs.hs文件,文件内容修改为:

module Main where
import Char
main = putStr "Hello World"

然后在WinHugs中用:r命令重新加载文件:

Hugs> :r
Reading file "D:\Program Files\WinHugs\libraries\Hugs.hs":
Reading file "D:\Program Files\WinHugs\libraries\Char.hs":
Reading file "D:\Program Files\WinHugs\libraries\Data\Char.hs":
Reading file "D:\Program Files\WinHugs\libraries\Hugs\Char.hs":
Reading file "D:\Program Files\WinHugs\libraries\Data\Char.hs":
Reading file "D:\Program Files\WinHugs\libraries\Char.hs":
Reading file "D:\Program Files\WinHugs\libraries\Hugs.hs":

Hugs session for:
file:{Hugs}\libraries\Hugs\Prelude.hs
file:{Hugs}\libraries\Prelude.hs
file:{Hugs}\libraries\Hugs\Char.hs
file:{Hugs}\libraries\Data\Char.hs
file:{Hugs}\libraries\Char.hs
file:{Hugs}\libraries\Hugs.hs

从上可见,Char库已经加载。这时我们再用Char库里的函数就不会出错了:

Main> map Char.toUpper "Hello World"
"HELLO WORLD"


《函数式编程语言Haskell入门(一)——Haskell编程资料》就到这里。以上也是tuenhai.com的学习过程的记录,我是从零开始的,想必本教程很适合从零开始自学Haskell的初学者。本文续篇请关注tuenhai.com。
(更多文章请访问www.tuenhai.com 2006529)

- 作者: tuenhai 2006年05月29日, 星期一 09:37  回复(0) |  引用(0) 加入博采

已锁定
此日志的浏览权限已被作者锁定,请同作者联系,发送短消息,如果你的身份符合作者的要求,点击此处可以进行浏览

- 作者: tuenhai 2006年05月28日, 星期日 09:08  回复(0) |  引用(0) 加入博采

VS.NET 学习方法论——tuenhai的 VS.NET 学习之旅

VS.NET 学习方法论——tuenhai的 VS.NET 学习之旅


www.tuenhai.com 20041212



题记 : 即使你没有一点编程经验,只要你愿意,并理解本文介绍的学习方法,你也可以象作者一样轻松、愉快地步入程序设计之门。让我们一起开始激动人心的 VS.NET 之旅。


一.通过 Internet 获取知识的能力是网络时代最重要的能力



在 26 岁的时候,给自己定下目标, 35 岁之前必须掌英语和程序设计。至今刚过而立,程序和英语都学得不怎么样,对学习方法倒是有所体悟,愿与大家分享。

在此先介绍一下tuenhai(tuenhai.com)的情况。26岁前主要从事语文教学,对计算机及英语可以说一窍不通。说出来可能让您笑话:计算机不会上网;英语不认识音标。水平虽然不怎样,志向却比天高,下决心改变自己,说干就干,花7000大洋购来电脑,开始自学计算机。26岁,人生翻开新篇章。

首先把自家电脑来个开膛破肚,把硬件拆了装,装了拆(可怜我的主板,修了几次,还是报废;显卡由于带电插拔烧断了“脚”,还是手机店的朋友帮忙焊接上的)。为了从网上快速查找到需要的教程文章,忍痛每月花100大洋窄带包月,想当时Down个X片足足用了两天两夜,结果下集只有声音没有图像,还把他听完,呜乎!

一向提倡在工作中学习,学的东西要和工作相关,工作和学习互相促进。做语文教师虽也可以自学计算机,但觉得进程太慢了(那时所在学校还未设计算机课程)。于是,刚学计算机不到半年的人“一不小心”就成了电脑教师。还好基本是入门级培训,不过也逼着我学得更快。本来是用拼音加加输入法的,因为工作关系,只好改用五笔。全国计算机等级考试要考DOS,于是又学了DOS。本来用FrontPage做网页,现在改用Dreamweaver MX,还有FireWorks MX,Flash MX也懂一点。对着主板随机手册和英文词典尝试几次,开机CMOS也可以进出自如。什么系统优化,GHOST系统备份都不在话下。做的网页虽然界面不怎么样,IP日访问量却是每天300以上(20060519tuenhai附注:那时日访问量300ip自我感觉就不错了,现在日访问量30000也不觉得咋样)。直到29岁,对Windows应用编程却还是一点不懂,VB6删了装,装了删,反复几次,觉得很难,始终未跨过编程第一道门槛。

前日跟在嵊州信息港工作的 MM 交流,言及在自学 Visual Studio .NET 程序设计, MM 问:你在闭关学习吗?tuenhai回答 : 你 ” 赞助 ” 学费的话tuenhai也许会考虑考虑。是的, 网络是所大学,最大的大学,网络可以改变世界,终将改变世界。网络更可以改变人生,可以让我们的学习生活无比精采,只要你懂得利用,善于利用。 现在已是网络时代,网络交流基本弥补了自学的不足,通过网络交流、学习更有学校教育所没有的优势。

你看到这里,如果你没有接触过程序语言,想了解一下 Visual Studio .NET 是个什么 ” 东东 ” ,你会如何做?第一,查手头书籍。个人开个计算机图书馆是不现实的,要查找的知识往往在手头书籍中找不到;第二,打电话问朋友。朋友懂不懂是个问题,即使懂,他有没有空?他有空,他不清楚你这边的实际情况,他说的并不一定是你想要的,或者他说的你不一定听得懂;第三,上图书馆查资料;第四,上书店;第五,跑去问老师;第六, ……

是的,传统是这么做的。但现在是网络时代了。你完全可能在不到一分钟之内找到你想要的答案。上网,打开 Internet Explorer ,在地址栏输入 http://www.google.com ,然后回车,在打开的页面中间输入框中敲入Visual Studio .NET 语言注意中、英文中间有个空格。然后再回车,页面显示:约有 66 , 900 项符合 Visual Studio .NET 语言 的查询结果,以下是第 1 - 10 项。 (搜索用时 0.12 秒) 怎么样,还用tuenhai给你介绍 Visual Studio .NET 是什么东东吗。你就尽情地点击文章标题,查看您需要的知识吧。

“ 软件是一个过去的时代, Web Service 将要来临。 ” 微软高级副总裁李开复说, ”Web Service 本身可以说是一个赌博,一个风险 ; 因为你可以相信,也可以不相信这件事情的发生。tuenhai只能说微软把整个公司都赌下去了,我们赌的未来就是 Web Service 。 ”你可不要告诉tuenhai你比盖茨厉害多了。我们追求超越盖茨不一定现实,但我们可以早一步接触网络,利用网络。


二.学习编程的过程中,既要善于向高手寻求帮助,更要乐于指导初学者。在交流中学习编程,其乐无穷



29 岁,开始从事企业管理工作。由于工作的关系,要用到 Microsoft Office 办公软件, Office 办公软件中有个 Visual Basic For Application ( VBA )语言,是 VB 的一个子集,具备 VB 的所有优点,内置于 Office 中,只能在 Office 中创建、编程和运行,可以录制宏并自动转换为代码。由于初次接触编程语言,感到自学 VBA 有难度。每逢在学习中遇到难题、困惑的时候,tuenhai就到会到网上寻找学习资源,寻找答案。很快就找到关于 Microsoft Office 的极好社区,如 OfficeFans(http://www.officefans.net) , ExcelHome(http://club.excelhome.net/) ,于是立即在社区注册名字,学习 VBA 时中碰到疑问就到社区去问,每次都有网友热心解答。比如tuenhai的工作需要经常在 Excel 工作表第十行前插入空白行,要先选取工作表,鼠标指针定位到指定行,然后单击右键,选 ” 插入 ” 。重复操作,不胜其烦。于是在 OfficeFans 提问,经版主 kengzeng 指点,得到如下 VBA 代码:

Sub insert()
Sheets(“sheet2”).Rows(“10:10”).Insert
End Sub

原来要四步操作,现在一按快捷键就完成了。tuenhai原来并不懂 VBA ,对 ” 集合 ” 、 ” 对象 ” 、 ” 方法 ” 、 ” 属性 ” 、 ” 事件 ” 、 ” 枚举 ” 等编程概念也不甚了了,但由于有网上高手的指点、帮助,tuenhai仍旧可以在工作中应用 VBA ,多次应用下来,用到的一些 VBA 代码不去死记也差不多会背了,对 VBA 的一些概念、理论开始有所了解。

万事开头难。学习一开始碰到难题,如果解决不掉,就可能从此放弃学习了,如果这时有热心人解答他的疑问,然后在实际中立即可以应用新知识,新知识得到了即时巩固,学习的兴趣得到激发和增强,学习就得以继续和深化。当然,对于有 ” 悬梁刺股 ” 精神的朋友,自己看书刻苦钻研也可能会解决所有疑难问题,但那毕竟是极少数,多数人是象我这样的普通人。

来而不往非礼也。在网上得到诸多大侠的指点,总感到好像欠了谁什么似的,就想到编一本电子书,把常见的 Excel VBA 学习教程集中到一起,可以帮助初学者快速入门。 2003 年 6 月较空闲,刚好自己对 Html 语法也懂一点,就花了二周的时间,搜集整理了一本电子书,叫《 Microsoft Excel 学习一点通教程》,其中重点内容是 Excel VBA 。把电子书放到 OfficeFans 上供网友下载,极受欢迎。tuenhai为什么编这本电子书呢?真的是比较空闲的缘故?有空去泡 MM 不是很好,何必去做枯燥的文字整理工作,其实是存有 ” 私心 ” 的?

什么 ” 私心 ” ?助人即助己。 ” 佛 ” 渡人其实也是为了渡己啊。tuenhai为了领悟这个道理,诸子百家,佛道儒易医,无所不涉,并在生活中曲折浮沉,这样还是用了 ”30 年 ” 时间(太夸张了,一出生就 …… ?呵呵),各位比我聪明,应该早就明白此理。

为什么助人即助己?
在学术上帮助别人,指点别人,就要站在别人的角度考虑,思考别人的思考,打破了小我的思维局限。

从信息角度讲,个人自修,知识的附加信息量较小,而在帮助别人过程中,存在人与人的信息交流,在信息交流中,知识信息得到强化。举一个例子,小孩子生活在英语环境中, 3 岁即口语流利,而我们的学校教育,大学毕业,英语学了十多年,还是哑巴英语的大有人在,为什么?小孩子记一个单词或句子,是在和外界信息交流中记忆的,确切地说,小孩子记住了当时信息交流的情境,通过情境的自然记忆实现单词或句子的自然记忆。学习口语如此,学习编程何尝不如此呢?你在某个问题上指点过别人,你的记忆印象可能就特别深,如果是个人看书自学,对于某个问题当时虽然理解,但附助记忆的情境信息量很小,时间长了就容易遗忘。所以,在学习编程的过程中,多和别人交流,多向高手虚心求教,多指点初学者,是在人为创造学习情境,在情境中强化记忆,强化理解。李阳提倡 ” 疯狂英语 ” 学习法,我则提倡 ” 疯狂编程 ” 学习法,也就是创造一切机会和别人交流编程经验,从交流中进行强化训练和学习。但也要注意,交流是手段不是目的。

交流编程经验的途径有很多:如论坛交流,媒体投稿, QQ 、 ICQ 等通讯软件交流。个人觉得 CSDN 为我们提供的 ”blog 专栏 ” 非常好,您可以一边学习编程,一边记下心得,通过个人专栏和大家交流。

VBA 是 VB 的应用分支,tuenhai在工作中应用 VBA ,并自然地对 VBA的概念、理论有了初步了解,这时再去看 VB 的教程,就感到分外亲切。因为 VBA 和 VB 在本质上是没有区别的。tuenhai终于可以跨入 VB 编程之门了。



三.从应用入手,从解决实际问题出发,在完成项目的过程中,逐步掌握程序设计理论与技巧



程序语言种类很多, Pconline 的 工具平台 就列有 VB/VB.NET 、 VC/C# 、 Delphi 、 Java 、 C++Builder 等。到底学什么语言好呢?在 Google 输入语言 比较,查到一篇文章《编程语言的宗教狂热和十字军东征》,第一段就是:

业余程序员最喜欢做的一件事就是对不同的语言进行比较。 Java 是否比 C ++好? C #是否会成为终极语言?凡此种种。从专业程序员的角度看来,这是最低级无趣的游戏。其一,在项目诸元确定之后,通常并没有选择语言的余地;其二,语言的生存本身就是一个达尔文主义的问题:设若两种语言有明确的可比较性,其中较劣的那一种必定早已被淘汰出局,又何来比较的必要?

我基于两个原则选择程序设计语言:其一,适合自己的就是最好的。
其二,如果不知道什么适用自己,那么优先选择 Microsoft 的程序设计语言。我选的是 VB (每个人的具体情况不,我的选择不一定适合你),目前只考虑开发普通 Windows 应用软件,并希望 Windows 应用软件的开发和 MicroSoft VBA 的应用互相促进,说穿了,是精力有限,最好是一种语言,到处应用。于是在网上 Down 了 N 多的电子书,收藏夹里 VB 网站一大堆。发现,除了 CSDN , VB 社区论坛的人气大多不旺。第一次接触 VB ,没有基础,业余自学,如何快速掌握 VB 程序设计?
如有足够的时间(业余自学,时间显然不足),有足够的耐心(恰恰本人是耐心不那么足的人),可以按照教程一个一个控件学习、练习,这个过程无疑是有益的,但对我来说显然是过于枯燥的。或许如此下去,半年以后, VB 基础比较好了,但可能不到半年,早就放弃习了。这就要另辟蹊径。设想是,一开始就定下一个软件项目,带着目的去学,以一个控件为核心,在完成项目的过程中,逐步掌握 VB 控件的使用和编程基本理论。项目基本完成的时候, VB 编程也就入门了。由于是带着项目去学,目的明确,学习过程就不会枯燥。如果你做共享软件,你的项目创意又比较好,你 VB 编程入之门之日,也许你的软件也就可以为你带来 Money 了,呵呵!

开发一个什么样的软件呢? SUN 提出了激动人心的口号 :” 网络就是计算机 ” 。计算机的应用主要在于网络,于是定位于开发网络应用软件。tuenhai经常到网络社区论坛交流,注册时要一项项填写信息,发言时也要一项项填写信息,感觉很费时间,打算自己编程来实现自动注册,自动发言。  

2003 年 5 月学 VBA 时想用 VBA 实现在论坛自动注册和发言,实现起来有难度,就在网上找替代软件,找到了 ” 按键精灵 ” ( http://www.vrbrothers.com/) ,按键精灵是一个模拟鼠标键盘动作的软件。通过制作脚本,可以让按键精灵代替您的双手,自动执行一系列鼠标键盘的动作。 觉得很不错,就编写了一个脚本,用按键精灵自动实现如下功能:打开 Internet Explorer ,输入并打开网址,移动鼠标到指定座标,输入字符,然后按回车完成注册 a 或发言。比起手工输入,用按键精灵省力不少,但是不同网站,输入框的座标不同,要手动抓取,有没有更方便的软件呢? 按键精灵社区 里有人讲到 EzScript ( http://ezscript.seed.cx/ ) 功能更多,试用后发现在 Windows XP 里反应不灵敏,再在 Google 狂搜,找到了 PCWorker ( http://www.pcworker.net ) 。 PCWorker 配合网络填表软件 FORMGHOST ,可实现双击注册或发言,需要的话,还可在标题加上随机数,而且 PCWorker 代码的可读性较强,且作者能及时听取网友意见对软件加以改进。PCWorker 虽然好用,但要实现从网络中获取信息并作出判断(比如提取超链接),这是 PCWorker 类软件不能胜任的。(20060519tuenhai附注:2005年又发现了模拟精灵,可能是目前同类软件中最好的。这是后话了。)

于是决定用 VB6 来实现自己的想法。 2003 年 10 月开始学习 VB6 ,到 11月,项目基本完成。tuenhai是怎么做的呢?

首先浏览各 VB 网站有关文章,发现用 WebBrowser 控件能实现tuenhai所要求的功能。其次,大量搜集 WebBrowser 控件相关文章和代码。
用 Google 搜寻。如用 ”WebBrowser” 为关键词搜索,共有 7 , 260 , 000 项查询结果 。
CSDN 论坛 搜索。
导航到 http://expert.csdn.net/Expert/Forum.asp ,登陆论坛,点击 ” 搜索 ” ,选 ” 全部社区 ” ,用 ”WebBrowser” 为关键词,然后点击 ” 对选择的大类进行搜索 ” ,哇,有 300 篇有关 ”WebBrowser” 的帖子。CSDN 文档 搜索,导航到 http://www.csdn.net/search.asp ,搜索框中输入 ”WebBrowser” ,选择 ” 文档 ” ,再单击 ” 搜索 ” 按钮,找到 57 篇 ”WebBrowser” 相关文档。在实际编程中遇到困难,还可以到 CSDN 论坛 提问,寻求帮助。tuenhai就曾在 CSDN 论坛 问了不下十个有关 WebBrowser 有关问题,并都得到了解答。由于善于运用以上三步, 1 个半月时间,tuenhai的软件基本出炉, VB 编程也已基本入门。

在学习 VB6 的同时自然接触到 Microsoft Visual Studio .NET (简称 VS.NET )。
在十年之前, Visual Basic 1.0 成为数以百万计的开发人员的革命性的应用程序开发语言。现在, Visual Studio .NET 为未来的十年做好了准备(有点象为 Microsoft 打广告,你说呢), VS.NE 是用于创建下一代应用程序的理想而又现实的开发工具,是一个从一开始就是为 XML Web 服务创建的开发环境。通过允许应用程序通过 Internet 沟通和共享数据, XML Web 服务使业务能够从 Internet 转换为用于集成和传送它们的核心商业价值的真正平台。 Visual Studio .NET 和 XML Web 服务提供简单、灵活、基于标准的模型,允许开发人员从新的和现有的代码汇编应用程序,而与平台、编程语言或对象模型无关。
VS.NET 2003 中主要有包含以下几种开发工具:
Visual Basic .NET 2003
Visual C# .NET 2003
Visual C++ .NET 2003
Visual J# .NET 2003
有人说, ” 学习要面向未来 ” , 2003 年 12 月,tuenhai的主要开发工具从 VB6 转为 VB.NET , 2004 年 1 月 1 日 ,tuenhai把新开发的软件从 VB6 升级为 VB.NET ,并正式命名为“论坛发帖软件工具下载版”(又叫“论坛自动发贴软件”,“论坛自动发帖器”,“论坛批量发帖软件”,“论坛自动发贴工具”,“论坛快速发帖器”,“论坛发贴机”,“论坛快速发帖器”)

在转向 VB.NET 的时候,tuenhai考虑:

第一. VS.NET 的本质是什么?

VS.NET 是从一开始就是为 XML Web 服务创建的开发环境。通过允许应用程序通过 Internet 沟通和共享数据, XML Web 服务使业务能够从 Internet 转换为用于集成和传送它们的核心商业价值的真正平台。学习要面向未来,就要学习最新的技术,现在的学习为将来的应用作铺垫。

tuenhai的软件要突出两点,一是基于 Internet 的应用,二是要应用 XML 技术。这样,就可以在应用中尽快掌握新技术,否则,只是为学习而学习,无疑会是比较枯燥,也容易遗忘。

第二.原来用 VB6 写的”论坛发帖软件工具下载版”,主要用到 WebBrowser 控件,网页加载速度慢,会下载图片, Flash 等许多不需要的东西,在 VS.NET 中可考虑用其他方法实现同样功能。

在 CSDN 诸位朋友的帮助下,并参考许多资料,tuenhai的“论坛自动发贴机”已基本具备 .NET 特征。
代码举例:1. “论坛自动发贴机器”应用了 XML 技术VB6 中, INI 文件通常用来保存系统信息、配置信息,读写 INI 文件要用到 API 函数,使用起来不是很方便。在 VS.NET 中,已经没有必要用 INI 文件来保存和读取一些信息了,可以改用 VS.NET 中的读写 XML 文件的类。而且,在 VS.NET 2003 的后续版本中,处理 XML 有关功能将得到进一步增强。
读取 XML 到 DataGrid 代码:

Public MyXMLDataSet As New DataSet(“XMLDataSet”)
' DataSet 是数据的一种内存驻留表示形式,无论它包含的数据 ' 来自什么数据源,它都会提供一致的关系编程模型。
MyXMLDataSet.ReadXml(“regid.xml”) ' 读入 XML 文件
form1.DefInstance.DataGrid1.DataSource = MyXMLDataSet 'DefInstance 是 form1 的共享属性
strName = MyXMLDataSet.Tables(0).Rows(0).Item(“name”).ToString '    从 DataGrid 中读取用户名信息。

从 DataGrid 更新信息到 XML 文件代码:

Dim MyXmlDataSet As DataSet
MyXmlDataSet = CType(DataGrid1.DataSource , DataSet) ' 类型转换
MyXmlDataSet.WriteXml(“regid.xml”) ' 把信息写入 XML 文件


如果不用 DataGrid 控件,读写 XML 文件中特定信息可以更简单:

Dim xmlInfo As New XmlDocument
xmlInfo.Load(“info.xml”) ' 载入 XML 文件
Dim str As string=xmlInfo.Item(“RegInfo”).Item(“name”).InnerText ' 用 ”Item” 可以逐级往下读数据
xmlInfo.Item(“RegInfo”).Item(“pass”).InnerText=“MyPass”
xmlInfo.Save(“info.xml”) ' 保存信息到 xml 文件

tuenhai原来打算用 INI 格式来保存“论坛自动发帖机”的注册信息和发言信息,但是,一则读写 INI 不是很方便,二则 XML 在软件开发中越趋重要,于是一开始就用 XML 文件来保存有关信息。在刚接触 VS.NET 时本不知 XML 为何物,现在可自如在“论坛发贴软件工具”读写 XML ,是否有点 ” 高手 ” 的感觉呢?(陶醉一下先)

2. 用 HttpWebResponse 相关类 GET 和 POST 信息用 GET 方式读取网页源代码:

Dim httpReq As System.Net.HttpWebRequest 'HttpWebRequest 类对 WebRequest 中定义的属性和方法提供支持,也对使用户能够直接与使用 HTTP 的服务器交互的附加属性和方法提供支持。
Dim httpResp As System.Net.HttpWebResponse
Dim url as String=“ http://www.Tuenhai.com  'tuenhai的小站
Dim httpURL As New System.Uri(url)   
httpReq = CType(WebRequest.Create(httpURL) , HttpWebRequest)
httpReq.Method = “GET”
httpResp = CType(httpReq.GetResponse() , HttpWebResponse)
Dim reader As StreamReader = _
New StreamReader(httpResp.GetResponseStream , System.Text.Encoding.GetEncoding(“GB2312”)) ' 如是中文,要设置编码格式为 ”GB 2312” 。
Dim respHTML As String = reader.ReadToEnd() 'respHTML 就是网页源代码
httpResp.Close()

向服务器 POST 信息:

Dim httpUrl2 As New System.Uri(“ http://www.Tuenhai.com ? ” & “name=1&pass= 6” ) ' “&” 号后面是 ' 注册信息,改成你自己的
Dim req As HttpWebRequest
req = CType(WebRequest.Create(httpUrl2) , HttpWebRequest)
req.Method = “POST”
req.ContentType = “application/x-www-form-urlencoded”
Dim bytesData() As Byte = System.Text.Encoding.ASCII.GetBytes(“name=1&pass= 6” )
req.ContentLength = bytesData.Length
Dim postStream As Stream = req.GetRequestStream()
postStream.Write(bytesData , 0 , bytesData.Length) ' 以上为向网络服务器 POST 信息

Dim res As HttpWebResponse = CType(req.GetResponse() , HttpWebResponse)
Dim reader As StreamReader = _
New StreamReader(res.GetResponseStream , System.Text.Encoding.GetEncoding(“GB2312”))
Dim respHTML As String = reader.ReadToEnd() 'respHTML 为 POST 后网络服务器返回的信息
MsgBox(respHTML) ' 可用 MsgBox 查看返回的信息
res.Close()


3. 用正则表达式从网页源代码中提取网址
得到网页源代后,我们可以对源代码进行处理,比如提取其中的链接, Email 地址,图片地址, Flash 等等,这在论坛自动发贴软件工具中很有用。

Dim r As System.Text.RegularExpressions.Regex
Dim m As System.Text.RegularExpressions.MatchCollection
Dim respHtml As String = “http://www.NETsh.Net/subdomains/f_s_o.php?leibie=shangmao” ' 以这个地址举例
strRegex = “http://([\w]+\.)+[\w]+(/[\w.?]+)+leibie[=]{1}[\w]+” ' 用这个正则表达式可以提取上面地址。通用 ' 的提取链接正则表达式为 ”http://([\w-]+\.)+[\w-]+(/[\w- ./?%&=]*)?” 。  
r = New System.Text.RegularExpressions.Regex(strRegex , System.Text.RegularExpressions.RegexOptions.IgnoreCase)
m = r.Matches(respHTML)
Dim i As Integer
For i = 0 To m.Count - 1
MsgBox(m(i).Value)
Next i


四.掌握并利用大量网络资源来辅助 VS.NET 的学习,你将事半功倍。



现在tuenhai的“论坛自动发贴器下载版”已经用 .NET 全面改写,并用上继承,重载,多线程等,所有这些在 VB6 中能否实现,从 VB6 转到 .NET 是否明智?

从 2003 年 10 月开始学习 VB6 编程, 11 月半用 VB6 完成第 1 个软件——“自动发帖工具下载版”,到 2004 年 1 月 17 日 用 VB.NET 技术改写“论坛发贴工具下载版”。可算基本入门。原来没有一点编程基础,全部用的业余时间,没有当面请教一个老师。如果学得还算顺利的话,很大部分要归功于掌握并利用大量网络资源。下面列出tuenhai所掌握的 VS.NET 网络学习资源,有什么遗漏希望大家能指出。

1.  微软技术支持在你学习 VS.NET 的过程中,有疑问首先要向 Microsoft 求助。
如果你不懂得利用 Microsoft 提供的庞大的学习资源,我要告诉你,你舍近求远了。
( 1 )首先,你要安装 MSDN ,他比市面上所有的 VS.NET 书籍详细。tuenhai为了装 MSDN ,可是牺牲了 98 和 XP 双启动,改成 Windows XP 单系统。装了 MSDN 后,你要学习正则表达式, VS.NET 2003 中点击 ” 帮助 ” ,再点击 ” 搜索 ” ,然后输入 ” 正则 ” ,一回车,哇,找到 470 个主题,这下你慢慢研究吧。实在研究不透,也不用急,还有 Google 和 CSDN 呢。
( 2 )在线 Microsoft .NET 框架 SDK 快速入门教程,可配合 MSDN 使用。http://chs.gotdotnet.com/QuickStart。
( 3 ) 微软中国社区http://www.mscommunity.com
( 4 )在线 中文 MSDNhttp://www.microsoft.com/china/MSDN/
在线英文 MSDN, 考考你的 E 文,不过有金山词霸在,tuenhai都不怕,你还用怕什么呢http://msdn.microsoft.com/

为什么选择 VS.NET ,为什么看好 VS.NET ,看看 Microsoft 的 Help 文档有多详尽就知道了。如果你不去利用 Microsoft 提供的庞大的 Help资源,是不是有点对不起盖茨呢!

2. CSDN http://www.csdn.net/CSDN 号称中国最大的开发者网络,确实不假。tuenhai最常去的是 CSDN 的文档 http://www.csdn.net/develop/论坛 http://community.csdn.net/

只要你善于利用搜索功能,你在开发中遇到的许多问题可在 文档 和 论坛 中找到答案。如果你在开发过程中遇到疑难,而你又认为 Bill Gates 帮不上你的忙,那么,你就上 CSDN 吧,一定会让你满意的。教你两个绝招,
第一招,是 ” 搜索大法 ” 。遇到问题,首先是在 CSDN 的 文档 和 论坛 进行搜索,看有无类似答案。如不行,再下一招。
第二招, ” 提问大法 ” ,只要有礼貌有诚意地在论坛提问,一定有许多人乐于回答你的问题。

3.  其他相关网站、专栏有不少网站开辟 VS.NET 专栏,常去看看,必有收获。
太平洋开发特区 http://www.pconline.com.cn/pcedu/empolder/net/
赛迪的 NET 专区 http://tech.ccidnet.com/col/1135/1135.htmlCSDN 上 Latitude 的 VS.NET 专栏 http://www.csdn.net/develop/author/netauthor/Latitude/
孟宪会之精彩世界( http://dotnet.aspx.cc/)
博客园( http://www.cnblogs.com/ )
博客堂( http://blog.joycode.com/ )
北京希望电子出版社图书素材资料下载 http://www.b-xr.com/
清华大学出版社 VS.NET 源码下载 http://www.wenyuan.com.cn/zxtsxz.asp还有tuenhai的小站(做个广告) http://www.Tuenhai.com

4.  国外编程学习资源如果你的 E 文不错,不妨上 E 文网站去取经。  http://www.startvbdotnet.com
http://www.vbdotnetheaven.com
http://www.vbaccelerator.com
http://www.vbcity.com/
http://searchvb.techtarget.com/
http://www.vbwire.com/
http://builder.com.com
http://www.developer.com
http://www.codeproject.com
http://www.dotnetjunkies.com
http://www.planet-source-code.com/
http://www.a1vbcode.com/
http://www.freevbcode.com/
http://www.vbcode.com/
http://sourceforge.net/
http://www.syncfusion.com/FAQ/WinForms/
http://www.123aspx.com
http://panopticoncentral.net/
http://www.regexplib.com/
http://www.harding.edu/USER/fmccown/WWW/vbnet_csharp_comparison.html
http://www.only4gurus.com/v2
http://www.gotdotnet.com
http://www.programmersheaven.com/
http://www.aspnetpro.com
http://www.dotnetgenius.com/
http://www.devx.com/dotnet
http://www.devhood.com
http://www.devshed.com/
http://www.devarticles.com/
http://www.c-sharpcorner.com/
http://www.csharphelp.com/
http://authors.aspalliance.com/aldotnet/examples/translate.aspx
http://www.developerfusion.com/
http://www.dotnet247.com
http://www.codestudy.com

当然,还有一个地球人都知道的,全球最大的知识仓库,tuenhai不说,你也早就应该知道的,那不是 http://www.google.com 又是什么!
(更多文章请访问www.tuenhai.com 20041212)  

                     

- 作者: tuenhai 2006年05月25日, 星期四 17:00  回复(0) |  引用(0) 加入博采

在Visual Studio 2003中用ImessageFilter接口实现截获键盘消息

在Visual Studio 2003中用ImessageFilter接口实现截获键盘消息


www.tuenhai.com 20040516



IMessageFilter 接口I MessageFilter 接口允许应用程序在消息被调度到控件或窗体之前捕获它。可以将实现 IMessageFilter 接口的类添加到应用程序的消息泵中,以在消息被调度到控件或窗体之前将它筛选出来或执行其他操作。若要将消息筛选器添加到应用程序的消息泵中,请使用 Application 类中的AddMessageFilter 方法。
Application.AddMessageFilter 方法添加消息筛选器以便在向目标传送 Windows 消息时监视这些消息。
[Visual Basic]Public Shared Sub AddMessageFilter( ByVal value As IMessageFilter )
参数value您要安装的 IMessageFilter 接口的实现。
备注使用消息筛选器来防止引发特定事件,或在将某事件传递给事件处理程序之前使用消息筛选器对其执行特殊操作。消息筛选器对特定线程是唯一的。
若要防止调度某消息,传递给该方法的 value 参数实例必须用处理该消息的代码重写 PreFilterMessage 方法。该方法必须返回 false。
警告 向应用程序的消息泵添加消息筛选器会降低性能。
示例[Visual Basic, C#, C++]
必须先提供 IMessageFilter 接口的一个实现,然后才可以使用消息筛选器。下面的类创建一个名为 TestMessageFilter 的消息筛选器。此筛选器阻止与鼠标左键有关的所有消息。
[Visual Basic]
' Creates a message filter.
Public Class TestMessageFilter
Implements IMessageFilter

Public Function PreFilterMessage(ByRef m As System.Windows.Forms.Message) _
As Boolean Implements IMessageFilter.PreFilterMessage
' Blocks all the messages relating to the left mouse button.
If ((m.Msg >= 513) And (m.Msg <= 515)) Then
Console.WriteLine("Processing the messages : " & m.Msg)
Return True
End If
Return False
End Function
End Class


用Esc键退出程序
Implements IMessageFilter

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 'assign message to app and form
Application.AddMessageFilter(Me)
End Sub

Public Function PreFilterMessage(ByRef m As System.Windows.Forms.Message) As Boolean
Implements IMessageFilter.PreFilterMessage
Dim keyCode As Keys = CType(m.WParam.ToInt32(), Keys) And Keys.KeyCode
If keyCode = Keys.Escape Then
End  '结束程序。我们在此可以调用各种方法、过程。
End If
End Function
(更多文章请访问www.tuenhai.com 20040516)

- 作者: tuenhai 2006年05月25日, 星期四 17:00  回复(0) |  引用(0) 加入博采

用WIKI形式进行头脑风暴

用WIKI进行头脑风暴,让我们的工作充满逻辑


www.tuenhai.com 20050519



这是一个逻辑的的世界
从某种意义上来说,这个世界上不存在偶然的事物.
这是一个充满逻辑的世界.做成功一件事情只有两个要素:
一.头脑理解的逻辑和事物本身逻辑相符或相近.
二.按逻辑执行
只有理解了的东东,我们才能深刻感觉它.
我为什么非常注重管理流程,管理规范?管理流程和规范只是手段,是为了让我们做事的逻辑尽量和事物本身的逻辑相符.
比如写文章,一种写法是信笔写去,无拘无束.写起来很爽,我不推崇这样的写法.闭着眼睛也许能走到北京,但走到无名小沟时可能性会更大一些.
我写文章是严格按逻辑来写的:

一.列出我写文章要实现的目的

二.通过什么方式来实现我的目的

三.根据上面两条列出文章的大提纲

四.实施

逻辑把握正确,文章肯定成功.
运作一项事业,也不过是理出逻辑,执行逻辑的过程.把一项事业成功的要素从大到小列出来,然后去执行.
而一项事业之所以失败,要么没有掌握逻辑,要么执行不力……
哲学是最深层次对事物逻辑的把握,哲学正确,执行得力,一个人没有可能不成功的.所以,看一个人理解的哲学正确与否,首先看他是否成功.真正的哲学肯定是入世的.

用wiki让进行头脑风暴,让我们的工作更有逻辑
2005年4月以来,我在公司里力推管理规范,管理流程,为的是让我们的工作更有计划,更有理性.
我们再来温习一下事情成功的两个要素:理出逻辑,执行.
为了理出逻辑,我们经常要进行face to face头脑风暴,这是理出事情逻辑的好方法.
由于时间关系,我们不可能在所有时候都以fact to face 的形式进行头脑风暴,这时候我们就需要以书面形式进行头脑风暴.
书面形式的头脑风暴有以下几种形式:
论坛形式
Blog形式
WIKI形式
……
运用得好,哪一种形式都可以进行较好的头脑风暴.
公司目前在用论坛的形式进行交流,有论坛当然比没有论坛好,每个人都可以随意提出自己的看法,可以相互启发.但论坛形式有一个致命弱点,就是各种讨论的逻辑性不强,甚至没有逻辑性,不成体系.我心目中理想的讨论形式是树形讨论,每个论点(贴子)都是一个分枝,或叶子.同种性质讨论属于同片叶子或分枝.而论坛形式讨论却是散落地上的一大堆叶子,或树枝,或根.
我曾提出用共同维护Blog形式来加强工作的逻辑性,可能我上次没有讲得很清楚. 我的想法是,把有关工作,或者说项目作为Blog的栏目,先由逻辑性较强的人(或者说对某事物认识最透的人)把一棵树的根,树干和枝先搭起来,以后每个人想到什么点子,或想法,都加到树上相应位置,这样在潜移默化中培养每人人的整体观和逻辑性.同样是书面形式的讨论,交流,但逻辑性大大增强.这时候叶子不是普通的叶子.(突然想起了"菩提本无树……"或者"见山不是山……")
我只是对WIKI有所了解,并没有实际用过. WIKI应该是较好的用来加强工作(实际上是文档)的逻辑性的工具.
如果是一个人做事,也没有必要用WIKI,完全可以把要做的事情,各个要素写在纸上,然后按计划逐条执行.然而,我们要做的是大事业,要更多人参与细化"逻辑"——计划书,项目需求,功能规格,可行性分析,竞争对手分析……在这个时候,先由一个人理出基本逻辑,再由各人往上填各自的"点子",是否有其必要呢?(更多文章请访问www.tuenhai.com 20050519 上海浦东世外桃源)

ccton 于 2005-06-12 01:25 PM 发表评论: × | IP 经过几年的思考,我已经逐渐在抛弃对完美的树型的追求。觉得似乎... 经过几年的思考,我已经逐渐在抛弃对完美的树型的追求。觉得似乎应该是一种对象模型的形式。对象-属性。 一个对象之所以挂接到所谓的树上,只不过是因为在它的众多属性之中,具有一个属性与这棵树的某个节点的要求相适应;那些所谓的树,全都是属性树。我不是在讲绕口令吧? :)ccton the freaktuenhai 于 2005-06-11 08:59 AM 发表评论: × | IP to jockey: 兄弟走在了我的前面,有机会定当向兄弟请教... to jockey: 兄弟走在了我的前面,有机会定当向兄弟请教.兄弟说得很经典: 纯的WIKI形式的工作模式,只是一个外表,要使其产生巨大的潜能发挥,还需要运用各种心理学\设计学及社会学原理来进行重新构思.那时候的WIKI,可能已经不单单只有WIKI,而可能结合了RSS\BLOG等相关技术结合了.   团队协调,沟通工作做得相当好,WIKI形式的工作模式才能发挥作用.本公司暂时没有采用,这是重要原因.人心齐,泰山移.人心齐,谈何易! jockey 于 2005-06-11 05:29 AM 发表评论: × | IP 我们通过半年多WIKI形式,与属下的数百名员工进行对于各项事物的专... 我们通过半年多WIKI形式,与属下的数百名员工进行对于各项事物的专题讨论,但是实际运用下来,发现了很多WIKI不能解决的问题,这是产品的完成程度有关,还和人自身的交流习惯有关.纯的WIKI形式的工作模式,只是一个外表,要使其产生巨大的潜能发挥,还需要运用各种心理学\设计学及社会学原理来进行重新构思.那时候的WIKI,可能已经不单单只有WIKI,而可能结合了RSS\BLOG等相关技术结合了.如果有机会,真希望可以和屠先生好好聊聊.tuenhai 于 2005-05-21 06:17 PM 发表评论: × | IP TO BigY非常感谢你指点,Google新闻组方式感觉不错,还未去尝试... TO BigY非常感谢你指点,Google新闻组方式感觉不错,还未去尝试.To游子树形讨论,是我的一个构想,具体如何实施,何时实施,要有时机.到有较多人对此感兴趣时,就方便实施了. BigY 于 2005-05-20 08:49 AM 发表评论: × | IP 对于公司管理,技术手段保证沟通是必要的,但手段很多,不止一种... 对于公司管理,技术手段保证沟通是必要的,但手段很多,不止一种或两种。* 新闻组方式。这种方式实际上很类似于BBS,但它可以按线索组织和管理,甚至实现按线索方式的导出,对程序员有一定的吸引力。可以参考Google的新闻组; * Blog。Blog相当于是“广播式”传播,一人写、多人读。有些人不愿意参与讨论,但愿意在网上发贴子,这种模式很好用。惟一要担心的是秘密的泄露;* Wiki。Wiki是一种多人参与式的写作,对于讨论、发散思维、发现问题、提出见解,有一定的好处; * 其它的,如DocBook,可以协助大家写文档、输出为说明书、在线帮助等。游子 于 2005-05-19 10:49 PM 发表评论: × | IP 树形讨论不错啊,就怕上面的叶子太多太杂太重,将树压断了,与树... 树形讨论不错啊,就怕上面的叶子太多太杂太重,将树压断了,与树根联系不上了会是如何。。。[biggrin]

- 作者: tuenhai 2006年05月25日, 星期四 16:59  回复(0) |  引用(0) 加入博采

项目经理的人生规划——给张先生的信

项目经理的人生规划——给张先生的信

www.tuenhai.com 20050513


题记:一位项目经理事业发展遇到了瓶颈,tuenhai又能给他怎样的建议呢?
项目经理事业发展的困惑
2005-5-12
16:33:19
张 ( 感冒+发烧 )
你好!打扰,我是从网上看到你文章,知道你的联系方式的。我想看一下你们的网站,但是 发现 http://www.tuenhai.com 无法打开啊!
2005-5-12
17:13:31
成功学本质:付出永远比得到更有价值  king#tuenhai.com
域名解析出了点问题,正在处理中
2005-5-12
17:13:53
张 ( 感冒+发烧 )
谢谢!
2005-5-12
17:20:04
张 ( 感冒+发烧 )
冒昧的问一句,能否找个时间你聊一下。我现在是一家公司的项目经理,最近感觉自己的事业发展遇到了瓶颈 ,百思不得其解,从你发表的文章来看,你是比较成功的。所以想向你请教一下!
2005-5-12
17:20:46
成功学本质:付出永远比得到更有价值  king#tuenhai.com
请教不敢,你可以写个文档,以提高沟通效率
张先生的自述

以前的经历
从何说起呢 ?
还是从头说起吧, IT 人员的事业发展道路,有种通俗的说法是:技术-》管理 ,工作快十年了,我的发展经历差不多也是按照这个思路发展的。
自己认为自己有一个优点就是:自信 。大学毕业时,在全系 100 多位同学中,自己是唯一一位没有进入国有企事业单位的 ( 那时候,还有分配,但是自己来自农村,父母是农民,所以从没有进入电信、银行这类“好单位”的奢望 ) , 自己相信凭自己的能力和努力应该做的不错。
由于大学期间就跟着老师做软件项目,毕业后顺利进入了一家软件公司,开始了自己的 IT 生涯,从程序员做起 , 高级程序员、分析员、项目主管、项目经理 。这样一步步走过了,基本还算顺利,和身边的同龄、同学相比自己也算混的不错。
也许正是由于自己的自信,刚开始工作就敢接项目,以至于同在一家公司的几位师兄成了我负责的项目组成员。当时自认为做的系统还不错(后来,随着经验的增长,才发现当时做的系统还是有点 ” 垃圾 ” ,嘿嘿 ! )。
工作的的第三年进入了一家台湾软件公司,在这家公司工作 4 年多的时间,是自己成长的关键阶段,在次期间自己认识到了自己的差距,同时也认识到国内软件产品与外资公司的产品质量有很大差距,夸张一点说,有天壤之别 。也才认识到自己以前做的系统实际上很“垃圾”。在此期间,无论是个人的技术水平,还是软件开发的过程把握能力,自己都有了很大的提高 。在这家公司自己又从一名程序员成长为、系统分析人员、项目主管。最后成为该公司大陆分公司的负责人 ,那时也算时自己人生的一个小高峰 。
后来由于台湾市场的原因 ( 以及老板格局不够大也有点关系 ) ,该公司逐步萎缩 。自己继续提升、发展空间也就非常小了 。虽然当时的待遇非常好,继续工作下去工作也很稳定;但是考虑到自己的长期发展,自己考虑再三后,自己选择了离开 。
2002 年,进入目前这家公司,当时进入这家公司基于三方面的考虑: 1) 当时,有三家外资(约 1 亿 RMB )共同投资该公司 ( 当时自己的思路:有大的投资,就会有大的发展,个人发展的机会就比较大 ) 。 2 )该公司的战略方向是通信行业 ( 我很看好这个行业,以前那家公司是做 ERP 的 ) 。 3 )当时,这家公司宣称正在进行 CMM 3 认证 ( 自己对这方面有比较浓厚的兴趣,当时已经积累了很多这方面的知识,当时国内通过 CMM 认证企业还不是很多 ) 。
由于当时该公司没有管理方面的招聘职位,我是作为一名技术人员进入该公司,进入时的薪水相对前面那家公司有一定的下降 . 。(当时,这两点自己都考虑过,认为是可以接收的、也是合理的)。
进入这家公司后,短时间内就走完了,技术人员- 分析人员- 管理人员的角色转换 。
在这家公司做【项目管理】,与以前做【项目主管】不同之处在于:基本上可以脱离技术,项目管理的体系结构也比较健全。也就是在此期间全面、完整的学习了项目管理体系的的理论知识,并得到实践,在项目管理方面得到了比较大的提升。这是在这家公司最大的收获。
自己在次期间的工作还是不错的:顺利完成了几个集成项目、软件开发项目。特别完成了该公司最大的软件项目(软件费用约几千万元,项目组规模 100 左右人,历时 13 个月)。
而且在公司 CMM 3 评估过程中,该项目作为主要的评审项目,所以该项目的项目管理还是很规范的 。
目前的处境及困惑
但是,困惑自己的是:自己下一步如何发展?
从这几年公司的变动来看,公司的架构变动的可能性很小(不会新增部门),原先的部门各有人负责,而且变动机率很小。
从公司目前的组织架构以及公司的人事变动规律来看:结束目前的项目后,自己以后还一直做项目经理,继续提升的机会几乎没有,而且项目的规模和难度都不会超过以前的项目难度。也就是说工作几乎没有挑战性,工作没有挑战性就以为着能力提升空间也就很小 。只是薪水还可以 !
自己的分析如下:事实求是的讲,自己再被提升(部门经理、副总)机会很小了。原因可能存在几方面:
可能没有建立与高层的密切关系(虽然各方面的关系还不错)。
公司的平台就是这么大 。
可能高层认为自己的能力有限(这一点不是很确定,也无从得知,但是自己从来都是很自信的)。
4) 公司内部的权利分争,造成的。(实际上只想把工作做好,不喜欢参与权利纷争)
如果继续这样发展下去,虽然没有工作之忧,但是也不会有大的发展 。但是随着年龄的增长,这样下去也不是长久之计 。
另外说明一下,在这家公司项目经理是隶属于项目管理部 。采用矩阵式的项目管理模式:当有项目时从项目管理部调项目经理,从各技术部门抽调技术人员组成项目组。
最近的尝试
目前自己的求职思路有几种:
1) 找一家有发展空间的公司,开始可以从项目经理做起,最好是新公司(确保发展空间) .
2) 直接应聘分公司、办事处的负责人,向业务、管理方面发展 。
3 )找几个志同道合朋友一起创业。(这个风险稍微大一点, 另外也没有形成完整的思路,所以没有着手尝试 )。
根据前两条思路自己进行了尝试,但是发现自己结果并不如人意:要么薪水很低,要么就是只做技术(自己对技术有点厌烦了,特别是与发展思路不符) . 自己分析的原因: 1 )可能是自己定位错误。 2 ) 简历中没有表达出自己的特长 。 3 ) 自己知识结构不完备 。 4 )能力不够 。这些都是自己在猜测,一直没有得出结论 。所以心中十分困惑 。
期待与你交流 !
2005 年 5 月 12 日

tuenhai的人生规划——给张先生的信
张先生 :
很荣幸能有机会有你探讨关于人生规划的话题!
感谢网络 , 使我这个 2004 年 12 月 31 日 还不属于网络的人 , 现在坐在浦东世外桃源办公 , 离陈天桥办公室不到 三公里 .
感谢网络 , 使我与众多不认识的朋友能有较好的沟通 . 这正是我所推崇的 . 无论见面 ,MSN,QQ, 都不是最高效的沟通方式 . 我会把我的观点都摆到 tuenhai.com, 供关注我的朋友参考 . 同样 , 若有朋友想听听我的意见 , 也只要告诉我一个网址即可 .
事实上 , 能认真考虑自己人生规划的人极少 . 见过许许多多工作非常认真的人 , 但都不知去研究如何使自己人生价值最大化 . 同一个人 , 向东走可能是甘泉 , 向西走就可能是荒漠 . 在 tuenhai 看来 , 能考虑自己人生规划的人就是不错了 . 张先生无疑是那种聪明人 . 也许他当下不能作出最好的选择 , 但他终究会找到使自己人生价值最大化的道路.
就计算机技术而言 , 我们公司随便找出一位就可能比我强,但在人生策划上 ,显然我更胜一筹 .
tuenhai 多年教书 , 一朝出来 , 发现一无所长 , 然后边工作边学计算机 , 虽然主要是在传统行业做 , 但总算对计算机入门了 . 有我这样计算机水平的 IT 界人士到处都是 , 但为什么我现在能坐在上海浦东世外桃源 ?
从用人者角度看 , 通常从二个方面评价一个人 :
一 . 能力
二 . 可信指数
哪一个 boss 敢放心大胆起用能力强而不可信任的人 ? 对中国企业家而言 , 许多时候 , 可信指数往往是第一位 , 能力反而在第二位 .
Tuenhai 能力虽然不是最强 , 但至少是可信的人 . 2005 年5 月5 日 ,tuenhai 和一位叫惠的漂亮 MM 在天钥桥避风塘吃夜宵 .
MM:    你可以在工作之余自己带领团队创业
tuenhai: 我不会这么做 , 这样我会心里不踏实
MM:    你这是愚忠
我想 , 任何一位 Boss 都乐意用这样 ” 愚忠 ” 的人的 .
可信的人就能成功吗 ?
不见得 .
能力强 , 可信指数高的人不一定就能得到重用 . 你的能力 , 你的人格 , 人品 , 还应该被 ” 相关 ” 人士知道 , 其中可能就有你的 Boss, 你的合作伙伴 .
因此 , 站在被用者角度 , 成功有三个要素 :
能力
可信度
影响力——你的能力和可信度被多少人知道了
打个比方 , 在 100 人里面
40 人能力不错
10 人能力和可信度都还好
1 人能力还可以 , 可信度较高 , 知道他的人也较多 .
上述三种人 , 你属于哪一种呢 ?
董事长经常跟员工说:我们在给客户提供服务时,一定要把我的优点说出来,你不说别人怎么知道呢?我们花较多精力去做一个东东,做得比别人都好,但自己不说,客户可能不知道我们的优秀之处,我们一说,客户可能就会注意,就会觉得我们真做得好.
比如博客中国,左上角LOGO,就点出了"全球第一博客门户".我们做各项产品服务时,一定要把自己的优越处说出来.

tuenhai是怎么策划自己的人生的呢 ?
我在计算机方面虽然深度不够 , 但还算比较广 , 做过网页 , 写过软件 , 研究过网络营销 , 基本具备 IT 业管理者的应该具备的专业知识 .
Tuenhai 是有信仰的人——基于对哲学的透彻认识 , 而非传统宗教 . 还算得上一个非常真诚的人 .
我在传统企业工作时 , 业余认真写计算机相关文章 , 基是对自己成功哲学——"付出永远比得到更有价值" 的实践 , 同时也在积累人缘,积累成功的机缘 .
我在 csdn 的一篇讲述学习方法的文章 , 点击量已过 2w .我的文章都是以启发为主,而非讲述知识.我写文章的原则之一是尽量使读者获益最多.  帮助别人有两种方式:   一是物质上助人,比如施舍金钱,修桥铺路 二是精神上助人,使人无惑. 这两种助人方式并不是同一个等量级的.
文章对人的帮助也分两个方面:
一是知识灌输
二是理论启发
知识灌输和理论启发对人起的作用并不在同一个等量级.因此,我写文章更注重的是理论探讨和启发.
不断写文章,不断启发别人,不断为自己的成功积累机缘.迟早,助人即助已会逐步体现出来,这种体现的表现形式,可能就是遇到梦幻级的创业伙伴,可能是自己想到了非常好的创业点子,可能是表现为某段时间运气特别好……
帮助别人是播种,在收获的同时要不断播种,要做百年企业,而不是坑蒙拐骗,透支未来.
在 2004 年年底 , 我现在的 boss读到了我的文章 . 我猜测 ,他当时对我下了如下判断 :
专业素质较强 , 但强到何种程度有待考察
是个可用之人
至少 ,” 可用 ” 这个判断不会错 , 他就毫不犹豫地起用 tuenhai, 才会在我到公司的第一天就任命我为公司副总 . 这个时候, 他充分显示出了一个企业家的魄力.基本上,就这个举动,就把 tuenhai "收买"了.
我第一天切入 IT 业就任副总 , 好像是比较成功 . 但这些都是表象 . 本质在于我的成功哲学 . 我到处宣称 : 我在哲学上已经无惑 .
成功哲学 , 是哲学指导下的成功学 .
我始终认为 , 我所理解的成功哲学 , 是世上最科学的成功哲学 .
科学的成功哲学是利他思维 , 讲究多付出 , 积累成功的机缘 .
科学的成功哲学重在过程 , 结果倒是其次——那是不求自得的东东 .
我想 ,tuenhai.com 的读者不少 , 可能就没有人能真正理解我的成功哲学——人的本性在于喜得而患失 . 既然 张 先生期待与我交流 , 我就在与上海 MM —— Judy chat 的同时写下本篇 , 无论如何,一个小时的键盘敲击也值了回票 .(更多文章请访问www.tuenhai.com 20050513 上海浦东莲中路)

- 作者: tuenhai 2006年05月25日, 星期四 16:59  回复(0) |  引用(0) 加入博采

某公司《新员工DNS辅导制度》

某公司《新员工DNS辅导制度》


www.tuenhai.com 20050509


题记:2005年6月8日,公司又有一“猛”将加盟。员工Rongdede用王春生带来的BugFree给我上了一个“Bug”(事务跟踪),让我辅导新员工熟悉公司的规范管理流程(DNS)。tuenhai老老实实,耐耐心心解决这个 Bug 的同时,利用晚上的半小时来发一个小“牢骚”:)
管理太琐碎了,空降兵也许是万能良药
管理的大原则定了以后,就要大而化小,根据公司实际进行各项管理改进。这个改进过程是很复杂,也是很琐碎的,也是每一个人在潜意识里都不想做的事情。公司要发展,管理必须要跟上。但潜意识里大家都对严格规范的管理流程有所抗拒,怎么办?最好的办法是请一个空降兵,这个空降兵有显赫的简历,拿出来足以吓死网络上的大虾小牛。这个空降兵一到,所有管理上存在的问题相信会迎刃而解。在空降兵到来之前,各家就该怎么做就怎么做,“速度”第一。管理毕竟是有点专业的名词,俺们草根怎么会懂呢?空降兵一来,甭管他对网络是否较熟悉,他只要把一套套管理制度一照搬,相信各项管理问题不复存在,执行力也会大大提高。

某公司《新员工DNS辅导制度》
1. 凡新员工进入公司,公司指派一人为新员工的导师, 辅导内部管理系统的使用.
2. 公司另指派一人,负责新员工辅导期结束的验收工作.
3. 辅导期一般为一周,如需延迟需要提前说明.
4. 一般由新员工的直接上司或直接上司指定的人作为新员工的导师.
5. 以上工作流程都用BugFree进行记录. 在上Bug进行事务跟踪时,要说明以下几点:   谁辅导谁 辅导内容
由谁验收
辅导起止日期
验收日期

6. 辅导内容:
每天上班先登陆内部网12.34.5566.7788
Subversion: 客户端的安装;基本使用方法Add ,Commit, Update,Rename,Delete
工作Mail: 命名规则;客户端(DreamMail)定时收信的设置;工作邮件列表的导入,使用
工作日志辅导:工作日志的重要性;工作日志的写法
内部论坛使用辅导:每天到灌水区灌水一次,到有关区参与讨论
其他相关内容
一周内全程辅导,点滴关怀,争做最佳导师
7. 验收者要对各项目辅导内容逐一验收,要对别人负责,也要对自己负责,要写验收评述.
8. 采用公司各组交叉验收的方法.
8.1 由验收者创建Bug,把Bug指派给辅导者
8.2 辅导者通过编辑Bug写下每天的辅导内容
8.3 完成辅导后,辅导者把Bug指派给验收者
8.4 验收者对被辅导者进行验收,并写下辅导评述,如通过则关闭Bug,如未通过则指出问题,并再把Bug指派给辅导者
9. 新员工NB论坛帐号和工作Mail由R代为开通.
新员工的Subversion个人目录和BugFree帐号由X代为开设.
NB论坛用真名,工作Mail=姓的全拼+名的第一个字母+.fa.com@8.com
Subversion个人目录名=姓的全拼+名的第一个字母
邮件列表成员维护分工:
公司全部同事: all@all.com 由T负责
web项目组:  web@web.com 由R负责
桌面项目组:desktop@desktop.com 由W负责
公司经理组:manager@manager.com 由T负责(更多文章请访问www.tuenhai.com 20050509 上海浦东世外桃源)





tiankongyu 于 2005-06-20 01:46 PM 发表评论: × | IP 管理需要结果 过程是可以控制的 n... 管理需要结果过程是可以控制的如果在采用前没有明确的管理目标 再好的管理工具也是枉然 否则就应当去尝试实践让结果或者事实去说话你应当清楚管理效益的漏洞所在哲学,她会不会是我的生命? 一个热爱哲学思维的年轻人王者之剑 于 2005-06-17 08:42 PM 发表评论: × | IP bugfree曾试用了一下,显然还没有达到作者所说的微软思想,可以考... bugfree曾试用了一下,显然还没有达到作者所说的微软思想,可以考虑一下 URTracker国内软件,价格便宜,功能不错,缺点是.net+SQL Server只能运行在windows 服务器上。 tuenhai 于 2005-06-15 01:36 PM 发表评论: × | IP 就在昨天晚上,我还在思考自己的定位,BigY这样说,会让tuenhai无... 就在昨天晚上,我还在思考自己的定位,BigY这样说,会让tuenhai无地自容的.我的自负仅仅是在哲学观上,而在IT经验上明显有所欠缺,断然不敢有任何托大.我只能说在尽量以比较真诚开放的心态去面对每一位朋友,从而获得一些朋友的错爱罢了.大公司有大公司的长处,小公司有小公司的长处,如果小公司以大公司同样的做法,结果可想而知.希望有机会当面向兄弟请教. 关于激情与精明的算计,有不少朋友对我指出,我的文章不太讨某些人的喜欢,比如过于自负,过于理想主义等.言下之意,文章是应该针对读者进行"精明的算计"的. 我为之思考良久,诚实重要,还是基于"商业"的精明算 计重要,两者能否兼顾? 最终,我还是要选择诚实,哪怕因为诚实失去一些东东,我想,要失去的总是要失去的,要得到的总是会得到的.最终任何人都是公平的. BigY 于 2005-06-15 01:18 PM 发表评论: × | IP 每天不看tuenhai,再做IT也枉然。虽然对你们的商业模式不是很了解... 每天不看tuenhai,再做IT也枉然。虽然对你们的商业模式不是很了解,而且对站长方式获得利益也不看好,但成功毕竟是成功。中国自古就是“成者王侯败者寇”,只要未来把屁股擦得干净,大家还是一样仰视。象以前的温州人,象现在的陈天桥,象未来的屠和庞…… 如果不是老大不小,说不定也会投奔上海了。创业人要的就是激情,没激情,那就是精明的算计了,对贵公司肯定是不好的。 tuenhai 于 2005-06-15 11:52 AM 发表评论: × | IP 初创公司需要空降兵吗?经综合讨论:一.如果空降兵对公司所从事... 初创公司需要空降兵吗?经综合讨论: 一.如果空降兵对公司所从事的行业非常熟悉,也就不是空降兵,而是同等高度的对接,这样的"空降兵"也就不是"空降兵",初创公司非常需要这样的"空降兵" 二.如果空降兵对公司所从事的行业不熟悉,这样的空 降兵是很有问题的,jockey说得好:任何一个国际知名企业(并且长寿的企业),空降兵原则只能作为管理的辅助,而空降兵的能力再强,也一定要符合企业整理战略思路的范畴内发挥。轻易的改变员工的工作环境和激发抵触、防备意识,只能使原本有创伤的企业雪上加霜。 flywithmoon 于 2005-06-15 09:45 AM 发表评论: × | IP 个人比较推崇上层领导“无为而治”,中层管理者“敢为天下先”,... 个人比较推崇上层领导“无为而治”,中层管理者“敢为天下先”,下级员工“对自己负责”。太多繁琐的东西,反而打消了个人的积极性。期待空降兵解决问题在短期内是有效,但是空降兵难道就没有问题了,说不定长此以往他带来的问题更多。最后就只能是不断的整合。 tuenhai 于 2005-06-15 08:52 AM 发表评论: × | IP BigY的话深深切中要害:"有些人对屠的公司表示怀疑,认为没有经... BigY的话深深切中要害:"有些人对屠的公司表示怀疑,认为没有经历过挫折。这是正确的。这种挫折不是个人经历所能代替的。个人有过挫折、有过辉煌,只能表示个人的成熟,而不是公司的成熟。" 本人没有创业的经历,没有运作大公司的经历,因此我清楚知道自己的定位,如明日帝国所说,管理是一种体验型资本. 我会在Blog 里谈一些管理的想法,但不代表公司的管理事务我大小一把抓.更多的管理工作,是让有实际管理经验的人才去操刀,而我在管理上起的作用,仅仅是中立的旁观,中立地提出自己的建议. 人要有自知之明,这句话说来容易,做起来挺难,是BigY和明日帝国给我上了一课.jockey 于 2005-06-13 05:06 AM 发表评论: × | IP 这个管理模式,有待商榷和实践证明。另外,所谓空降兵原则,不感... 这个管理模式,有待商榷和实践证明。 另外,所谓空降兵原则,不感苟同。这个原则从深层含义上,有愚弄员工的潜意识存在,个人主观意识太强,只能使所谓“牛人”自我感觉膨胀,但是实际遭遇碰到比原先更多的挫折感,从而恶性循环。 任何一个国际知名企业(并且长寿的企业),空降兵原则只能作为管理的辅助,而空降兵的能力再强,也一定要符合企业整理战略思路的范畴内发挥。轻易的改变员工的工作环境和激发抵触、防备意识,只能使原本有创伤的企业雪上加霜。 用一句很浅显的道理来说,低调是管理者的必修课之一。 对于网络公司员工的招聘,我一般采用几个参考点: 1、不要迷信名牌大学和名牌企业的背景 2、心理年龄一定要低于实际年龄3、除了专业学术,有很多独特的爱好和个性空间 4、热爱这个企业及他所工作的产品,用热恋的态度工作,不计个人时间成本 5、眼光远,野心强,不满足于现状并不断自我学习6、对于企业及产品所面对的市场人群非常熟悉并自身带有代表性特征,在受众群中具有意见领袖的特征 7、敢于发表自己的意见,不论对错 8、永远觉得自己所工作的产品只有60分 猪虎豹鹰狼 于 2005-06-12 00:31 AM 发表评论: × | IP 怎么这么多“猛将”啊?! 难道你们不能在内部发现并培养人... 怎么这么多“猛将”啊?!难道你们不能在内部发现并培养人才吗?多了无益,两个足以!!!“猛将”1 = 老板----最终决策“猛将”2 = 老板----凝聚下属,树立老板威信 hello 于 2005-06-10 04:51 PM 发表评论: × | IP 我对你的这个系统持怀疑态度,不明白为什么你的老板会同意你这样... 我对你的这个系统持怀疑态度,不明白为什么你的老板会同意你这样做。不要和ERP一样,炒做的利害,但不实用 office + email +IM足够BigY 于 2005-06-10 01:53 PM 发表评论: × | IP 屠的很多想法和作法都极有意思。比如用BugFree做为日常工作的沟通... 屠的很多想法和作法都极有意思。 比如用BugFree做为日常工作的沟通和管理工具,这在一般的IT公司里,只会当成软件开发的Bug提交和管理工具,而不会把它扩大化。但仔细想一下,这个东西确实要把它日常化、习惯化,否则根本用不起来、用不好。这样一来,管理工作就成了一个比较好玩的事情,就是做什么、怎么做、用什么工具、如何把它习惯化,就是平常所说的企业文化之类。企业文化是什么?就是公司化的做事方式、公司内的沟通语言。一个新公司的好处是,什么都可以成为可用的、有用的工具,但不好的是,无法知道能坚持多久。 现在屠总和庞超人,以及所有的员工,都是靠激情做事,是超常规发挥。深圳蓝凌的老板有一个公式,说一个人或一个公司的业绩=能力*激情。能力再强,没有激情,什么事都干不成。能力一般,但激情很大,他会想方设法把事情做好。虽然有些“人有多大胆、地有多大产”的嫌疑,但我还是对这句话奉若神示。有些人对屠的公司表示怀疑,认为没有经历过挫折。这是正确的。这种挫折不是个人经历所能代替的。个人有过挫折、有过辉煌,只能表示个人的成熟,而不是公司的成熟。微软强大但不可怕,就因为他没有经历过失败,不象IBM,那才是真可怕,他什么时候都可以从失败中涅磐,这种百年老店本来底蕴就厚,而他的人老成精,又给这种底蕴以非常大的风险承受力。正是风光也风光过,惨也惨过,所以谁也打不死它了,除非他自己不想活了。

- 作者: tuenhai 2006年05月25日, 星期四 16:59  回复(0) |  引用(0) 加入博采

tom.com域名战略失误,浪费千万推广费用

tom.com域名战略失误,浪费千万推广费用


www.tuenhai.com 20051026



tuenhai有一个Alexa排名1万的小网站,挂着一个门户网站的新闻推广代码,每天大概可以带来20大洋的收入。本文并不是讨论广告联盟,说明一点,网站的推广是要花钱的。而域名的好记与否,很大程度上影响着网站推广效果。比如163.com和tom.com,花同样的钱,以同样的方式推广,因为域名的差异,效果大不相同。我这里说千万,其实经年累月下来,相差的何止千万呢?

这里简单介绍一下中国最NB的个人网站hao123.com, 就这样一个看上去最简单不过的网址站,估计月广告收入就在100万以上。王通(globrand.com)在分析hao123.com成功原因时, 特别把Hao123的域名策略单列一条,无疑是非常有见地的。 “hao123系列网站中的域名都没有什么特速的意思,但是都比较好记。” hao123的站长为什么不把网站命名为tom123或者john123?
2005年1月19日发布的第15次中国互联网报告显示,网民中高中(中专)以下占57%,高中(中专)占9%。
2005年7月21日发布的16次中国互联网络发展状况统计报告显示,截止到2005年6月30日,中国的网民总数为10300万人,首次超过一亿人口,同2005年1月相比,中国网民总数半年增加了900万人,增长率为9.6%。网民中高中(中专)以下占14.2%, 高中(中专)占31.3%。
从这两次报告大略可以看出(之所以说大略,因为报告有明显漏洞),网民文化水平是偏低的。hao123的成功让众多“网络精英”跌破了眼镜,也使越来越多的人认识到“低俗”是当前中国互联网的最大特征之一。这也说明为什么中国Alexa排名1000以内的网址站会一抓一大把了。
tom域名虽然短,但取了个洋名,对网站的推广很不利的。 你打一个电话给你的朋友试试:喂,我在上tom. 另一个说,喂,我在上163。那边的反应会有什么不同?tom.com给网民的潜意识的感觉:这不是国内的门户网站。也许你听了也不相信,网民中还有许多人不会拼tom这个词的发音。你叫他怎么替你去口啤传播呢!
查了一下互联网实验室中国互联网海外上市公司股票每日行情 ,2005年10月25日,baidu价格79.810美元,以2,579,346,907.33美元的市值居于首位,163网易以股价81.390?美元,市值2,546,659,078.98美元居于次席。虽然股价时时变动,光凭一个域名也不能决定什么,但一叶知秋,从中可以看出丁磊的眼光确实与众不同。
个人以为,中国大门户中,从域名有利于推广角度看,第一名是163网易。数字域名,对于任何文化层次的网民都适合,非常好记。丁磊光域名这一个决策,和其他大门户相比,就可以为网易省下以千万计的推广费用。
再来点评一下其他有关域名,sohu,sina,china虽然都很短,但都不算最好记。最好记的是数字,其次是简单的汉语拼音如baidu。sohu这样既不是拼音,也不是英语,实是三不象。
sogou.com这个域名比较烂,很多人搞不清到底是sougou还是sogou,倒是便宜了sougou.com,不花一分钱推广,每天也有不少自然流量——有人在为他的推广买单。
zhongsou.com同样很烂,比较长不说,许多南方人搞不清zh和z,ong和on。

域名的确定,对于一个网络公司来说,是个战略问题。战略二个字,说来容易,做好真难。域名起得不够好,可以使一个公司凭空浪费1000万RMB, 你信吗?其实,对于TOM这样一个大公司来说,仅仅是1000万吗? (更多文章请访问www.tuenhai.com 20051026)

附:中国最NB的个人网站:HAO123.COM
 http://www.globrand.com/2005/08/01/20050801-11160-1.shtml

 CNNIC发布第十六次中国互联网络发展状况统计报告 http://tech.163.com/special/m/000915U6/mxh16netview.html

 2005年CNNIC网络调研报告 http://www.iresearch.com.cn/html/online_users/detail_free_id_20859.html

免费二级域名申请,免费域名空间申请,免费一级域名申请,什么是中文域名,什么是二级域名,域名注册信息查询,网站推广计划书,网站推广的方法,如何进行网站推广,如何推广自己的网站,什么是网站推广,网站推广软件破解版,网站推广策划书,个人网站的推广,网站推广专家注册码,免费产品推广网站,网站推广软件下载,网站推广成功案例,网站推广策划方案,如何推广个人网站,网站发布与推广,网站推广专家破解版,google网站推广,怎样推广自己的网站,网站推广软件破解,网站推广企划书,北京网站推广公司,电子商务网站推广,个人网站推广方案,商务网站推广案例,网站推广的好处,北京网站建设和推广,如何做好网站推广,网站推广功能要求,一毛网站推广专家,网站推广工具下载,电子商务网站的推广,网站推广的作用,北京网站推广方案,阿里巴巴网站推广,网站推广注意事项,如何免费推广网站,怎样做网站推广,网站推广的重要性,旅游网站的推广,山西网站推广平台,网站推广破解版,百度网站免费推广,网站的维护与推广,怎么样推广网站,乘风网站推广系统,优秀网站推广联盟,网站推广的方式,


- 作者: tuenhai 2006年05月25日, 星期四 16:59  回复(0) |  引用(0) 加入博采