月度归档:2013年10月

Windows下编译 ImageMagick 的php API


转自:http://blog.csdn.net/golden_chan/article/details/5712266

首先,需要的软件包有:

PHP5.2.5 源码包[http://www.php.net/downloads.php]

bindlib_w32 [http://www.php.net/extra/bindlib_w32.zip]

win32build [http://www.php.net/extra/win32build.zip]

PHP5.2.5 Win32 二进制包 [http://www.php.net/downloads.php]

ImageMagick 6.3.8-0 Windows版源码 [http://www.imagemagick.org/download/windows/]

Imagick 2.1.0RC3 源码包 [http://pecl.php.net/package/imagick]

MagickWandForPHP 1.0.6 源码包 [http://www.imagemagick.org/download/php/]


说明一下:

php源码包就不用说了,编译需要php的源码的。

bindlib_w32 是为了编译一个resolv.lib

win32build是php编译最基本的一些lib文件和include文件。

php的二进制包是因为需要/dev/php5ts.lib文件,当然,你可以选择自己编译生成,但你的工作量将因此增加很多倍。

ImageMagick的windows源码是用来编译windows下的lib文件,同时,编译MagickWand和Imagick都还需要部分源码。

Imagick是PHP官方提供的一个ImageMagick的扩展,而MagickWandForPHP 则是ImageMagick官方提供的。


此外,还需要一些环境:


Microsoft Visual Studio 6, Cygwin


ok,现在开始。


       建立一个目录 E:/develop,然后分别建立两个子目录,ImageMagick,PHPBuild。将ImageMagick源码直接解压到ImageMagick目录下;将php5.2.5的源码解压到PHPBuild目录,同时,将bindlib_w32解压到PHPBuild/bindlib_w32下,win32build 解压到 PHPBuild/win32build 下。


       首先进入ImageMagick/ImageMagick-6.3.8/VisualMagick/configure,用VC6打开configure.dsw,编译,这样就可以把ImageMagick的编译配置文件生成。生成之后,运行当前目录的configure.exe,第二页选择Static Multi-threaded DLL runtimes (VisualStaticMTDLL).,Build Options什么都不选。Edit ‘magick-config.h’的根据自己的情况来定。直接下一步,下一步,完成,稍等一会儿,ImageMagick/ImageMagick-6.3.8/VisualMagick就会生成一个VisualStaticMTDLL.dsw.


        用VC6打开,Build ==> Set Active Configuration…,打开,选择All Release。然后,直接BuildèRebuild All。这个编译的过程耗时较长,所以可以考虑安装官方说明文档的说法,冲杯咖啡,慢慢等。


        编译完成之后,在ImageMagick/ImageMagick-6.3.8/VisualMagick/lib下会有17个以CORE_RL_开头的Lib文件,和两个原来就有的X11.lib和Xext.lib。


       将ImageMagick/ImageMagick-6.3.8/和ImageMagick/ImageMagick-6.3.8/magick加入VC的Include目录里边,将ImageMagick/ImageMagick-6.3.8/VisualMagick/lib加入Lib的目录里。


       接下来,进入PHPBuild/bindlib_w32,用vc打开bindlib.dsw,release编译,将生成的resolv.lib覆盖PHPBuild/win32build/lib下的同名文件。


解压PHP的二进制版本,并将目录添加到系统环境变量的Path里。

运行Cygwin,进入PHPBuild/php-5.2.5/ext,执行

  1. php ext_skel_win32.php –extname=imagick  
  2. php ext_skel_win32.php –extname=magickwand  


这样,ext目录下就会生成两个新的目录,imagick和magickwand,将之前下载的两个扩展的源码分别直接解压覆盖两个目录的同名文件。并将php二进制包的dev/php5ts.lib分别复制到两个目录中。


       下面就得改dsp文件了。将这些替换原有dsp的相应内容。

magickwand.dsp:

  1. !IF  “$(CFG)” == “magickwand – Win32 Release_TS”  
  2. # PROP BASE Use_MFC 0  
  3. # PROP BASE Use_Debug_Libraries 0  
  4. # PROP BASE Output_Dir “Release_TS”  
  5. # PROP BASE Intermediate_Dir “Release_TS”  
  6. # PROP BASE Ignore_Export_Lib 0  
  7. # PROP BASE Target_Dir “”  
  8. # PROP Use_MFC 0  
  9. # PROP Use_Debug_Libraries 0  
  10. # PROP Output_Dir “Release_TS”  
  11. # PROP Intermediate_Dir “Release_TS”  
  12. # PROP Ignore_Export_Lib 0  
  13. # PROP Target_Dir “”  
  14. # ADD BASE CPP /nologo /MT /W3 /GX /O2 /I “../..” /I “../../Zend” /I “../../TSRM” /D “WIN32” /D “NDEBUG” /D “_WINDOWS” /D “_MBCS” /D “_USRDLL” /D “COMPILE_DL_MAGICKWAND” /D ZTS=1 /YX /FD /c  
  15. # ADD CPP /nologo /MT /W3 /GX /O2 /I “../..” /I “../../main” /I “../../Zend” /I “../../TSRM” /I “../../win32” /I “../../../bindlib_w32″ /D MAGICKWAND_BACKEND=/”ImageMagick/” /D “WIN32” /D “MAGICKWAND_EXPORTS” /D “COMPILE_DL_MAGICKWAND” /D ZTS=1 /D HAVE_MAGICKWAND=1 /D ZEND_DEBUG=0 /D “NDEBUG” /D “_WINDOWS” /D “_MBCS” /D “_USRDLL” /D “ZEND_WIN32” /D “PHP_WIN32” /FR /YX /FD /c  
  16. # ADD BASE MTL /nologo /D “NDEBUG” /mktyplib203 /win32  
  17. # ADD MTL /nologo /D “NDEBUG” /mktyplib203 /win32  
  18. # ADD BASE RSC /l 0x406 /d “NDEBUG”  
  19. # ADD RSC /l 0x409 /d “NDEBUG”  
  20. BSC32=bscmake.exe  
  21. # ADD BASE BSC32 /nologo  
  22. # ADD BSC32 /nologo  
  23. LINK32=link.exe  
  24. # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib php5ts.lib /nologo /dll /machine:I386  
  25. # ADD LINK32 CORE_RL_zlib_.lib CORE_RL_xlib_.lib CORE_RL_wmf_.lib CORE_RL_wand_.lib CORE_RL_ttf_.lib CORE_RL_tiff_.lib CORE_RL_png_.lib CORE_RL_libxml_.lib CORE_RL_lcms_.lib CORE_RL_jpeg_.lib CORE_RL_jp2_.lib CORE_RL_jbig_.lib CORE_RL_filters_.lib CORE_RL_coders_.lib CORE_RL_bzlib_.lib CORE_RL_wand_.lib CORE_RL_magick_.lib CORE_RL_Magick++_.lib wsock32.lib php5ts.lib resolv.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 /nodefaultlib:”LIBCMT.lib” /force /out:”../../Release_TS/php_magickwand.dll” /libpath:”../../Release_TS” /libpath:”../../Release_TS_Inline” /libpath:”../../../bindlib_w32/Release”  
  26. # SUBTRACT LINK32 /pdb:none  
  27. !ELSEIF  “$(CFG)” == “magickwand – Win32 Debug_TS”  


 

 

 

imagick.dsp

  1. !IF  “$(CFG)” == “imagick – Win32 Release_TS”  
  2. # PROP BASE Use_MFC 0  
  3. # PROP BASE Use_Debug_Libraries 0  
  4. # PROP BASE Output_Dir “Release_TS”  
  5. # PROP BASE Intermediate_Dir “Release_TS”  
  6. # PROP BASE Ignore_Export_Lib 0  
  7. # PROP BASE Target_Dir “”  
  8. # PROP Use_MFC 0  
  9. # PROP Use_Debug_Libraries 0  
  10. # PROP Output_Dir “Release_TS”  
  11. # PROP Intermediate_Dir “Release_TS”  
  12. # PROP Ignore_Export_Lib 0  
  13. # PROP Target_Dir “”  
  14. # ADD BASE CPP /nologo /MT /W3 /GX /O2 /I “../..” /I “../../Zend” /I “../../TSRM” /D “WIN32” /D “NDEBUG” /D “_WINDOWS” /D “_MBCS” /D “_USRDLL” /D “COMPILE_DL_IMAGICK” /D ZTS=1 /YX /FD /c  
  15. # ADD CPP /nologo /MT /W3 /GX /O2 /I “../..” /I “../../main” /I “../../Zend” /I “../../TSRM” /I “../../win32” /I “../../../bindlib_w32” /D “WIN32” /D “IMAGICK_EXPORTS” /D “COMPILE_DL_IMAGICK” /D ZTS=1 /D HAVE_IMAGICK=1 /D IMAGICK_BACKEND=/”ImageMagick/” /D ZEND_DEBUG=0 /D “NDEBUG” /D “_WINDOWS” /D “_MBCS” /D “_USRDLL” /D “ZEND_WIN32” /D “PHP_WIN32” /FR /YX /FD /c  
  16. # ADD BASE MTL /nologo /D “NDEBUG” /mktyplib203 /win32  
  17. # ADD MTL /nologo /D “NDEBUG” /mktyplib203 /win32  
  18. # ADD BASE RSC /l 0x406 /d “NDEBUG”  
  19. # ADD RSC /l 0x409 /d “NDEBUG”  
  20. BSC32=bscmake.exe  
  21. # ADD BASE BSC32 /nologo  
  22. # ADD BSC32 /nologo  
  23. LINK32=link.exe  
  24. # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib php5ts.lib /nologo /dll /machine:I386  
  25. # ADD LINK32 CORE_RL_zlib_.lib CORE_RL_xlib_.lib CORE_RL_wmf_.lib CORE_RL_wand_.lib CORE_RL_ttf_.lib CORE_RL_tiff_.lib CORE_RL_png_.lib CORE_RL_libxml_.lib CORE_RL_lcms_.lib CORE_RL_jpeg_.lib CORE_RL_jp2_.lib CORE_RL_jbig_.lib CORE_RL_filters_.lib CORE_RL_coders_.lib CORE_RL_bzlib_.lib CORE_RL_wand_.lib CORE_RL_magick_.lib CORE_RL_Magick++_.lib wsock32.lib php5ts.lib resolv.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 /nodefaultlib:”LIBCMT.lib” /force /out:”../../Release_TS/php_imagick.dll”  /libpath:”../../Release_TS” /libpath:”../../Release_TS_Inline” /libpath:”../../../bindlib_w32/Release”  
  26. # SUBTRACT LINK32 /pdb:none  
  27. !ELSEIF  “$(CFG)” == “imagick – Win32 Debug_TS”  

因为我只需要Release的dll,所以Debug部分我没改。(这些内容,参考DIrk的Magickwand的编译以及他提供的dsp文件)


用VC6打开,选择release模式,编译。

成功后将会在PHPBuild/php-5.2.5/Release_TS下生成php_magickwand.dll 和 php_imagick.dll。编译过程就结束了。


PS:

我生成的php_imagick.dll和php_magickwand.dll


UPDATE:


嗯,关于安装,不得不说的

ImageMagick/ImageMagick-6.3.8/config

这个目录是ImageMagick的配置文件

php方面的安装,只要把dll复制到php的ext目录,再修改php.ini,加上extension=php_imagick.dll或extension=php_magickwand.dll


而配置文件部分

我是将这个config目录复制到了php的二进制文件夹的extra目录,改名为imagemagick_config,主要是方便管理和方便辨识

然后添加一个系统环境变量MAGICK_HOME,指到这个目录即可

Linux平台php开发环境速建(Windows系统下)


转自:http://my.hupu.com/Anew_G/blog/6011243.html

1.使用Virtual box安装LAMP或LNMP集成包。


地址:http://www.wdlinux.cn/wdlinux_CentOS_5.5 (默认密码wdlinux.cn 其他请看说明或站内搜索)


安装完成后,继续安装中文输入法和图形界面


yum -y install scim*
yum -y install fonts-chinese
yum -y install fonts-ISO8859-2
cd /usr/share/fonts/
fc-cache -fv
reboot


重启后


yum groupinstall ‘GNOME Desktop Environment’ -y
如果用startx命令启动图形界面失败,则如下
yum install xorg-x11-server-Xorg
仍旧不行?用这个
yum reinstall xorg-x11-server-Xorg


2.安装虚拟机增强工具

点击完后


yum install kernel-devel  
yum install gcc 
ln -s /usr/src/kernels/2.6.18-……-i686 /usr/src/linux //省略号处用TAB键自动补全
进入到桌面上那个点击后挂载的光盘,获得所在路径并进入,然后

sh VBoxLinuxAdditions-x86.run


成功后屏幕可自适应调整与在win之间进行文字复制


3.升级php


cd /tmp

wget -c http://dl.wdlinux.cn:5180/soft/php-5.3.10.tar.gz

tar zxvf php-5.3.10.tar.gz

cd php-5.3.10

./configure –prefix=/www/wdlinux/php-5.3.10 –with-config-file-path=/www/wdlinux/etc –with-mysql=/www/wdlinux/mysql –with-iconv –with-freetype-dir –with-jpeg-dir –with-png-dir –with-zlib –with-libxml-dir=/usr
–enable-xml –disable-rpath –enable-inline-optimization –with-curl –enable-mbregex –enable-mbstring –with-mcrypt=/usr –with-gd –enable-gd-native-ttf –with-openssl –with-mhash –enable-ftp –with-apxs2=/www/wdlinux/apache/bin/apxs

(上面这段直接复制到终端)

make

make install

rm -f /www/wdlinx/php

ln -s /www/wdlinux/php-5.3.10 /www/wdlinux/php

service httpd restart


4.配置phpmyadmin

到官网用wget下载后,解压到网站根目录(使用前mysql密码不能为空)

进入phpmyadmin文件夹

cp config.sample.inc.php config.inc.php

重启apache


5.配置vim

yum -y install vim-enhanced

cp /usr/share/vim/vim70/vimrc_example.vim ~/.vimrc

vim ~/.vimrc

随便找一行加入

set nocompatible


set fileencodings=ucs-bom,utf-8,gbk,default,latin1

set number 永久显示行数

set nobomb 无BOM格式

set t_Co=256

http://www.vim.org/scripts/script.php?script_id=2340 这个下个主题

主题放到:/usr/share/vim/vim70/colors

进入vimrc中,开一行加上 colorscheme ZZZ(ZZZ为主题名字,如molokai)

继续在vimrc中加入

filetype plugin on

autocmd FileType php set omnifunc=phpcomplete#CompletePHP



/* 打开了 phpcomplete ,Ctrl+X(插入模式下)打开函数列表,Ctrl+N(P)进行函数选择补全。ESC取消提示 */

http://www.vim.org/scripts/script.php?script_id=1355 下载 php-doc.vim


cp ./php-doc.vim /usr/share/vim/vim70/autoload/php-doc.vim

vimrc中加入:

source ~/.vim/php-doc.vim

inoremap :call PhpDocSingle()i

nnoremap :call PhpDocSingle()

vnoremap :call PhpDocRange()



/* 配置好了php documentor */

http://www.vim.org/scripts/script.php?script_id=1658

解压缩后把 plugin,doc,syntax,nerdtree_plugin 四个目录复制到/usr/share/vim/vim70/ 目录下



/*配置树形结构(在树形中o进入文件)Ctrl+W+h(l)在树形和文件中切换。*/

http://ctags.sourceforge.net/

解压后进入文件夹./configure && make && make install



http://vim.sourceforge.net/scripts/script.php?script_id=273

解压后

cp ./doc/taglist.txt /usr/share/vim/vim70/doc/

cp ./plugin/taglist.vim /usr/share/vim/vim70/plugin/

在vimrc文件中添加

set tags=tags;

set autochdir



/* 以后再需要的目录中ctags -R即可 */

http://www.vim.org/scripts/download_script.php?src_id=754

解压出来的东西cp到/usr/share/vim/vim70

vimrc中

let g:winManagerWindowLayout=’NERDTree,TagList|FileExplorer’

在vim中用:WMToggle调用


6.美化美化


这个依个人所好


7.配置Git

yum install curl curl-devel zlib-devel openssl-devel perl cpio expat-devel gettext-devel

wget http://www.codemonkey.org.uk/projects/git-snapshots/git/git-latest.tar.gz

tar xzvf git-latest.tar.gz

进入目录

autoconf

./configure

make

make install

git –version

完成


PHP图像处类库 MagickWand


转自:http://www.open-open.com/lib/view/open1328843850046.html

MagickWand 是PHP的一个扩展程序,通过它建立起与ImageMagick的交互,进行图片的处理。它是默认的GD图象函数库的绝佳替代方案。从安全性和易用性来说,在PHP中使用MagickWand比使用命令行ImageMagick要安全快捷的多。另外 imagick也可用于PHP中作为ImageMagick的替代方案。

MagickWand 有两种形式,

  1. 只是建立与ImageMagick的交互,这种情况必须先安装ImageMagick,优点是扩展程序文件小(一般几百K),可以快速升级ImageMagick版本,不过WINDOWS临时目录需要特殊权限。
  2. 扩展程序本身包含了ImageMagick,优点是不需要额外安装ImageMagick,临时目录不需要特殊权限,但扩展程序文件比较大(一般4M以上),。

MagickWand 默认并没有在PHP的安装包里,需要去PHP网站上下载,并在PHP.INI中打开此扩展。


下面是一个使用 MagicWand 的代码片段:


01 $magick_wand=NewMagickWand();


02 MagickReadImage($magick_wand,'rose.jpg');


03 $drawing_wand=NewDrawingWand();


04 DrawSetFont($drawing_wand,"/usr/share/fonts/bitstream-vera/Vera.ttf");


05 DrawSetFontSize($drawing_wand,20);


06 DrawSetGravity($drawing_wand,MW_CenterGravity);


07 $pixel_wand=NewPixelWand();


08 PixelSetColor($pixel_wand,"white");


09 DrawSetFillColor($drawing_wand,$pixel_wand);


10 if (MagickAnnotateImage($magick_wand,$drawing_wand,0,0,0,"Rose")
!= 0)


11   {


12     MagickEchoImageBlob(
$magick_wand );


13   }


14 else


15   {


16     echo
MagickGetExceptionString($magick_wand);


17   }

安装方法:

  1. 下载 php_magickwand_q16_st.dll for 5.2.x
  2. 将其放在PHP的扩展目录
  3. 在php.ini文件总增加 extension=php_magickwand_q16_st.dll
  4. 重新启动apache

如何计算程序员自身的价值


转自:http://www.educity.cn/career/case/201003261410161142.htm

    “价值”这个词,很正式,俗一点就是一个“钱”字。可以说这个字是当今社会的一个核心。无论经济活动、社会活动那个能离开这个字呀!“人为财死,鸟为食亡。”可能是人生的一个真实的写照吧!

    回到现实生活之中,我们常常听到程序员抱怨自己的工资很低,抱怨自己的付出和自己的报酬严重背离,有的甚至不考虑自己工作能力和工作贡献,以别人的工资或社会岗位工资来确定自己的报酬。同时我们也常常听到公司的老板的抱怨软件公司不赚钱,最大的成本都花在员工的工资上了,自己在给员工打工。那么我们怎么能够计算程序员自身的价值呢?我们怎么看待程序员价值值与不值呢?我感到程序员自身价值有两个方面,一个方面是程序员的收入价值,一方面是程序员市场价值。程序员收入价值比较简单,就是程序员的年收入。例如一个程序员的年收入是5万。则这个程序员收入价值就是5万。程序员市场价值是指程序员本人编制的软件产品销售价值和预期的销售价值。例如,有5个程序员一年之中为一个客户编制了一个软件,软件售价5万元,假定我们忽略了销售成本和维护成本等,5个程序员水平大致相同,则一个程序员的市场价值就是1万。

    程序员的收入和程序员市场价值往往是不相同的:

    1)当大学生刚刚参加工作的时候,由于能力的限制,很少能编好程序,大部分时间都花在学习上,但是,他还是获得工资报酬。但是他的市场价值为0。这个时候,程序员是正收入。

    2)当程序员具备编程能力,投入到编程工作之中,程序员不但获得工资报酬,其劳动成果也变成的公司的收入。假定公司能收支平衡,而且分配比较合理,那么程序员收入价值于程序员的市场价值相当。

    3)当程序员具备较强的编程能力,投入到编程工作之中,程序员不但获得工资报酬,其劳动成果也变成公司的收入。假定公司产生利润,而且分配比较合理,那么程序员的收入价值就会低于程序员市场价值,其差价就是程序员给公司的利润贡献。

    4)当公司出现亏损的时候,程序员收入价值就会大于程序员的市场价值。

    通过以上分析我们可以看出,程序员的市场价值是程序员收入价值的基础,当程序员收入价值远远低于其市场价值的时候,程序员就会感到收入太少,分配不公,不愿意在公司长期呆下去。当程序员收入价值高于或等于其市场价值时候,公司老板只能维持或靠吃老本来维系公司的运作,维持不下去公司只好倒闭。另外,程序员的市场价值要小于公司的软件销售收入。

    就目前的中国软件企业运行状况而言,中国软件业早已告别了暴利时代,残酷的竞争使得软件的公司利润趋于下降。有的软件公司在竞争中倒闭,大部分在维持中维持。究其原因很多,但是大部分软件公司都是靠开发项目来维持生计。而项目都是靠用户需求来驱动的,因此,开发出来的软件往往是定制的,不可复用。一些好的软件公司,往往在一个行业中积累了大量的行业知识和软件开发的程序。通过程序积累系统积累,形成了行业系统的开发工具和通用软件。使得程序的复用性大大增强,逐步形成了行业软件的优势,这样公司发展很好。

    无论从程序员个人的收入价值或市场价值,还是软件公司的运行状况来看。其核心是软件本身的市场价值。如果一个软件市场价值很高,则程序员的市场价值就会很高,公司的利润就会很高。一个软件市场价值往往取决于这个软件的复用性或商品化程度。假定一个软件销售价格为1万,预期的销售个数达1000个时,其市场价值就会达1000万,假定这个软件是由5个人开发的,相关销售、维护、管理费用不计,则一个程序员的市场价值就会达200万,尽管这个程序员年收入只有5万。但是程序员的市场价值是很高的。有了高的市场价值,就有了增加工资、奖金报酬的基础,就会有增加收入的希望。一般开明的公司都会根据程序员的市场价值的大小来,来定义程序员报酬的。只有这样公司才能留住人才,才能获得更大的利润。

另外一种情况,当一个程序员的市场价值达到一定数值的时候,如50万、100万的时候,而收入价值处在较低的水平,例如,5万,6万,程序员往往会产生单干的念头,以期获取更大的收入价值。但是,程序员往往会忘记市场价值的实现并不仅仅在于软件本身,还涉及到资金、资质、市场、销售、安装、维护、服务等各种环节。所以个人开软件公司人数挺多的,但是成功的并不占多数。好的程序员往往不是好的老板,就是这个道理。

    现实当中,大学生程序员年收入在2万元比比皆是,普通程序员年收入在4-5万居多,高级程序员在10万以上也不在少数,超过20万年收入的程序员也时有耳闻。

    如果我们平均一下程序员的年收入,估计在5万左右。假定公司的利润率为50%,全部由程序员贡献,那么程序员的市场价值也就在7-8万之间。这就意味着程序员一生(35年计)市场价值也就280万。这与比尔盖茨巨大财富相比是多么的渺小呀!这同时意味着中国程序员市场价值有很大的增长空间。

    认识程序员的自身价值的目的。

    第一,就是希望程序员不要单看自己的收入价值,不要埋怨自己的收入低,而是要更多看看自己的市场价值到底有多高。

    第二,市场价值就是编制满足用户需求的软件,如果这个软件销售不出去,程序员再辛苦都白费,市场价值为0。程序员应该争做具有市场价值的软件,同时尽力帮助软件实现销售。

    第三,市场价值最大化就是多编制可复用的程序,以提高单个软件开发效率,以降低人力成本,提高利润率。

    第四,市场价值最大化就是多编制商品化软件,在编制定制软件还是通用软件选择中,它可以成倍地提高程序员的市场化价值。

    第五,有了程序员市场化价值认识后,程序员和公司可以共同地为促进市场化价值作出贡献,并到达员工提高收入,公司提高利润的双赢局面。

    中国的程序员市场化价值相对较低,导致程序员收入不高,程序员技术水平降低,最终导致软件质量下降。我们要关注程序员市场价值的提高,技术水平的提高,使得软件行业通用能软件所占的比重大大增加,软件公司的收入大大增加,只有这样我们的程序员的收入大大增加,我们的软件才有更高的质量和更大的市场。