王森:程序设计师忏悔录

 更新时间:2016年11月25日 17:16  点击:1494
不久前,蔡学镛先生发表了两篇分别叫做"程序与香鸡排","再论香鸡排"的文章,受到的回响之大,据说连作者本人都接到该文的转寄。足以见得该文的内容道出了台湾程序设计师心里最深处的想法。所以,本文想针对台湾程序设计师来做讨论,看看身为一个程序设计师,究竟犯了什么过错,导致大家宁愿卖鸡排也不愿再继续写程序。璩美凤小姐为自己惊动台湾社会的行为写了真情忏悔录,我们也该真诚地检讨一下自己。
本文:
在台湾,大部分的人都有个认知,就是"搞硬件的比搞软件的要好赚","做SA/SD比coding地位要高"。那些做ID Design的家伙待的公司所发的股票,永远比搞Software Design的人待的公司发的还多,股价也高出好几倍。搞SA/SD的人,在公司地位好象也比单纯写程序的人高。于是我的父亲有一次问我:"是不是搞硬件的人智商比较高?","是不是搞分析设计的人比较有地位?"
事实上,在学生时期我就认识不少人,有的人因为程序写不过别人,所以转换跑道专攻硬件;也有人觉得每天面对示波器和逻辑分析仪让他们头痛,工程数学也学不过人家,所以转行搞软件。到了实际上面对许多前来接受教育训练的学员之后,发现有人是因为写了十几年BIOS和driver,觉得乏味而没有前途,所以想试看看应用程序的开发;有人则是因为受不了客户每天改需求,而且写IOS和driver的人好象比较少,价格比较高,因此想学习如何撰写系统软件。询问那些上高阶课程的朋友,有的人发现自己只会胡做SA/SD唬烂老板和客户,所以希望重新打好基础,从基本的coding做起;有的人则因为写程序写太久,觉得应该往上走向SA/SD的路子,毕竟老了程序就写不动了。这个世界上什么样的人都有,绝对不能以小羡大。就很像搞政治的老是骗我们台湾只分成外省人和本省人;搞帮派的人告诉我们警察是带着枪的流氓。实际上,每个族群大家在没有被分化之前都相处的和乐融融,而虽然有警察掳妓勒索,上班时间跑去聚赌,但是也有开我们罚单时酌情轻罚的警察,和保护我们身家性命的警察。
即使如此,身为一个程序设计师还是要问,那为什么写程序的好象地位就是比较低? 笔者认为,这是进入门槛的问题。会做相同事情的人多了,就会削弱那样技能的价值。就很像考过MCSE/MCSD证照的人,通常比起考过SCJP/SCJD证照的人要来的没价值,前者因为考过的人实在太多,而后者考过的人少,仅是如此而已。但是绝不是代表考过MCSE的人,素质就比考过SCJP的人要差,也不代表考过SCJP的人,实力真的比较高段。相信求学的时候您一定遇过一种人,他实力也不怎样样,可是考试的时候他x的就是考的比我们高,怎么我们心里就是不服,可是大多数老师偏偏就是比较喜欢分数高的人。因此,满坑满谷的人自称会写程序,老板不愁找不到可以做project的人,你要求的薪水和价格很高? 没关系,找个学校刚毕业的小子,写的比你快,写的比你好,用的技术比你新,更重要的,价格比你这个老屁股便宜一半。所以程序设计师在雇主心中的地位日益低落,自然有迹可循。
使用PHP 模板类进行编程很有好处,但是有时也会碰到一个问题,比如说输出一个表格,但是表格行数要到运行的时候才知道,如留言板、BBS、购物网站之类,经常会碰到这个问题。这时做美工的人无法决定在HTML文件中用几行表格,如果在PHP代码文件中写循环输出,又会让美工、PHP程序员看代码都不方便,美工的人会说,这里的表格哪里去了?我要修改表格的颜色背景之类怎么办?PHP程序员也会说,怎么这里突然有一个<tr>、<td>,做什么用?会嵌在HTML文件哪里?。
使用PHP模板类编程一般把这种不确定个数的HTML 元素当成一个“ block ”,对 bolck 的编程类似于在代码中写一个循环。在比较常用的PHP模板类(如 FastTemplate 和 PHPLib )都有这种功能。写嵌套的block 类似于写多重循环。现在举例说明在 PHP4 里面的 IntegratedTemplateExtension 类中block 的编程方法,例子中用的是两重循环,外层block 是GoodsList,里层block 是GoodsListOfSomeType 。
基本设置:假设我们写的代码放在C:TestPHPPHP4GoodsList.htm 和 C:TestPHPHTMLGoodsList.php 中。将C:TestPHPPHP4 在Web Server 上设成虚拟目录 /testphp 并且给与脚本执行权限,确认C:TestPHPHTMLGoodsList.htm 无法通过远端浏览器访问。假定PHP4安装在C:php4,在 php.ini 里面设置 include_path = ".;C:php4pear"
以下是GoodsList.htm的内容:
<html>
<head>
<title>购物袋里的商品清单</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<style type="text/css">
<!--
body,p,br,td,tr,table { font-size: 9pt}
-->
</style>
</head>

<body bgcolor="#FFFFFF" text="#000000">
<table width="700" border="0" cellspacing="0" cellpadding="0" height="90">
<tr>
<td colspan="5">&nbsp;</td>
</tr>
<tr>
<td colspan="5">
<div align="center">{UserName},您的购物袋里有以下商品:</div>
</td>
这章节搜集了很多编译时会产生的错误情况。
 1. 我用匿名CVS得到最新版的源代码包, 但没有配置脚本文件! 2. 我在配置 PHP 在 Apache下工作时出了问题。
 它说不能找到 httpd.h, 可是我看它就在那里! 3. 当我运行conifgure时,它说它不能找到include文件或 一些库: GD, gdbm, 或其它的一些包! 4. 我在编译文件 language-parser.tab.c时, 出错,提示: yytname undeclared. 5. 当我运行 make, 起初正常但 最终失败了,在连接最后的应用时,出错说找不到一些文件。
 6. 在连接 PHP 时, 出一堆错说 undefined references。
 7. 我不清楚怎样在 Apache 1.3下编译PHP。
 8. 我按照步骤一步一步安装了Apache模块(Unix下), 可是在浏览器里打开 PHP 脚本时它却问我是否要保存。
 9. 系统说使用: --activate-module=src/modules/php4/libphp4.a, 可那文件根本不存在, 我只好改成 --activate-module=src/modules/php4/libmodphp4.a 好了,它不工作了! 该怎么办? 10. 我要把PHP编译成Apache的静态模块,用: --activate-module=src/modules/php4/libphp4.a 可是系统说我的编译器不是 ANSI 兼容的。
 11. 我用 --with-apxs编译PHP时, 我总是得到一些奇怪的错误。
 12. 在 make时, 我得到很多关于microtime错误, 还有许多 RUSAGE_ stuff. 13. 我想升级PHP,我在哪可以看到我现在运行的PHP 的当初配置安装时所使用的./configure 一行的内容? 14. 编译带GD库的PHP时,它不是给一些奇怪的错, 就是执行时产生 segfaults 段错误.
1. 我用匿名CVS得到最新版的源代码包, 但没有配置脚本文件!
你必须安装 GNU autoconf 包,这样可以从 configure.in生成配置脚本文件. 只要运行在CVS服务器得到源代码的顶级目录下的 ./buildconf。
 (注意, 除非你运行configure --enable-maintainer-mode 选项, 配置脚本是不会重新生成, 即使configure.in 文件已更新, 所以当你发现 configure.in 改变了,你也要手工做一遍. 在config或config.status 运行后应该在你的Makefile里能看到象@VARIABLE@这样的标号。)
2. 我在配置 PHP 在 Apache下工作时出了问题。
 它说不能找到 httpd.h, 可是我看它就在那里!
你要告诉 configure/setup 脚本 Apache 的顶级目录的位置。
 就是说你要标明 --with-apache=/path/to/apache , 而不是 --with-apache=/path/to/apache/src.
3. 当我运行conifgure时,它说它不能找到include文件或 一些库: GD, gdbm, 或其它的一些包!
你可以看看 configure 脚本,那些头文件或非标准库的位置,要送一些特殊的标志给C预处理器。例如: CPPFLAGS=-I/path/to/include LDFLAGS=-L/path/to/library ./configure
Smarty实例教学 实例篇(三、使用ADODB连接数据库)
前两个月因为工作上的原因一直很忙,所以没有及时完成这个教程,正好今天周六不用加班,抽个空完成它吧! 在开始新的的教程的时候,我
先把以前的我写的那个教程中的一些错误的地方修改过来,在这里要感谢 nesta2001zhang兄弟,是他找出了文章中的一些错误,否则真的被别人
骂"误人子弟了"(说来真是惭愧,我的初稿发布后后就发现在一大堆的问题,后来一些时候发重新修改后的文件中居然也出现了错误,真是不应
该...)
在上几篇教程中的:
=========================================================
while($db->next_record() && $i > 0)
{
$array[] = array("NewsID", csubstr($db->f("iNewsID"), 0, 20),
"NewsTitle", csubstr($db->f("vcNewsTitle"), 0, 20));
$i--;
}
=========================================================
应该更改为:
=========================================================
while($db->next_record() && $i > 0)
{
$array[] = array("NewsID" => $db->f("iNewsID"),
"NewsTitle" => csubstr($db->f("vcNewsTitle"), 0, 20));
$i--;
}
=========================================================
为什么这样改呢?因为第二种方法更清晰明了一些,实际上第一种方式所执行的效果与第二种方法没什么差别,而且那几个程序我都曾经调试过,
没有任何问题.
好了,那我们今天就先来说说ADODB.说到ADODB,可能做过ASP的都知道WINDOWS平台的ADO组件,但我们这里的ADODB不是微软的那个数据库操
作组件,而是由php语言写的一套数据库操作类库,先让我们来看看它倒底有什么样的优点.
1. 以标准的SQL语句书写的数据库执行代码在进行数据库移植时不用更改源程序,也就是说它可以支持多种数据库,包括ACCESS.
2. 提供与微软ADODB相似的语法功能.这一点对于从ASP转行到PHP的人们是一大福音,它的很多操作都与WINDOWS中的ADODB相似.
3. 可以生成Smarty循环需要的二维数组,这样会简化smarty开发.这一点是等会我给大家演示.
4. 支持数据库的缓存查询,最大可能的提高查询数据库的速度。
5. 其它的实用功能.
--------------     

明白你想问什么     

--------------     

漫无边际的提问近乎无休无止的时间黑洞。最能给你有用答案的人也正是最忙的     

人(他们忙是因为要亲自完成大部分工作)。这样的人对无节制的时间黑洞不太     

感冒,因此也可以说他们对漫无边际的提问不大感冒。
    

如果你明确表述需要回答者做什么(提供建议,发送一段代码,检查你的补丁     

或是别的),就最有可能得到有用的答案。这会定出一个时间和精力的上限,     

便于回答者集中精力来帮你,这很凑效。
    

要理解专家们生活的世界,要把专业技能想象为充裕的资源,而回复的时间则     

是贫乏的资源。解决你的问题需要的时间越少,越能从忙碌的专家口中掏出答案。
    

因此,优化问题的结构,尽量减少专家们解决它所需要的时间,会有很     

大的帮助--这通常和简化问题有所区别。因此,问“我想更好的理解X,     

能给点提示吗?”通常比问“你能解释一下X吗?”更好。如果你的代码     

不能工作,问问它有什么地方不对,比要求别人替你修改要明智得多。
    

------------------------     

别问应该自己解决的问题     

------------------------     

黑客们总是善于分辨哪些问题应该由你自己解决;因为我们中的大多数都     

曾自己解决这类问题。同样,这些问题得由你来搞定,你会从中学到东西。
    

你可以要求给点提示,但别要求得到完整的解决方案。
    

----------------     
[!--infotagslink--]

相关文章

  • photoshop设计一幅大鱼海棠动画片海报制作实例教程

    今天小编在这里就来给各位photoshop的这一款软件的使用者们来说一说设计一幅大鱼海棠动画片海报制作的实例教程,各位想知道具体制作步骤的使用者们,那么各位就快来看看...2016-09-14
  • C#开发Windows窗体应用程序的简单操作步骤

    这篇文章主要介绍了C#开发Windows窗体应用程序的简单操作步骤,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-04-12
  • C++调用C#的DLL程序实现方法

    本文通过例子,讲述了C++调用C#的DLL程序的方法,作出了以下总结,下面就让我们一起来学习吧。...2020-06-25
  • 微信小程序 页面传值详解

    这篇文章主要介绍了微信小程序 页面传值详解的相关资料,需要的朋友可以参考下...2017-03-13
  • C#使用Process类调用外部exe程序

    本文通过两个示例讲解了一下Process类调用外部应用程序的基本用法,并简单讲解了StartInfo属性,有需要的朋友可以参考一下。...2020-06-25
  • ps怎么制作倒影 ps设计倒影的方法

    ps软件是一款非常不错的图片处理软件,有着非常不错的使用效果。这次文章要给大家介绍的是ps怎么制作倒影,一起来看看设计倒影的方法。 用ps怎么做倒影最终效果&#819...2017-07-06
  • C语言程序设计第五版谭浩强课后答案(第二章答案)

    这篇文章主要介绍了C语言程序设计第五版谭浩强课后答案(第二章答案),小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2021-04-02
  • 使用GruntJS构建Web程序之构建篇

    大概有如下步骤 新建项目Bejs 新建文件package.json 新建文件Gruntfile.js 命令行执行grunt任务 一、新建项目Bejs源码放在src下,该目录有两个js文件,selector.js和ajax.js。编译后代码放在dest,这个grunt会...2014-06-07
  • 微信小程序二维码生成工具 weapp-qrcode详解

    这篇文章主要介绍了微信小程序 二维码生成工具 weapp-qrcode详解,教大家如何在项目中引入weapp-qrcode.js文件,通过实例代码给大家介绍的非常详细,需要的朋友可以参考下...2021-10-23
  • uniapp微信小程序:key失效的解决方法

    这篇文章主要介绍了uniapp微信小程序:key失效的解决方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-01-20
  • Photoshop设计商务名片的5种常见思路分享

    今天小编在这里就来给Photoshop的这一款软件的使用者们来说下计商务名片的5种常见思路,各位想知道的使用者,那么下面就快来跟着小编一起看一看吧。 给各位Photosho...2016-09-14
  • 将c#编写的程序打包成应用程序的实现步骤分享(安装,卸载) 图文

    时常会写用c#一些程序,但如何将他们和photoshop一样的大型软件打成一个压缩包,以便于发布....2020-06-25
  • PHP常用的小程序代码段

    本文实例讲述了PHP常用的小程序代码段。分享给大家供大家参考,具体如下:1.计算两个时间的相差几天$startdate=strtotime("2009-12-09");$enddate=strtotime("2009-12-05");上面的php时间日期函数strtotime已经把字符串...2015-11-24
  • 微信小程序 网络请求(GET请求)详解

    这篇文章主要介绍了微信小程序 网络请求(GET请求)详解的相关资料,需要的朋友可以参考下...2016-11-22
  • 微信小程序自定义tabbar组件

    这篇文章主要为大家详细介绍了微信小程序自定义tabbar组件,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2021-03-14
  • 微信小程序如何获取图片宽度与高度

    这篇文章主要给大家介绍了关于微信小程序如何获取图片宽度与高度的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-03-10
  • WPF实现类似360安全卫士界面的程序源码分享

    最近在网上看到了新版的360安全卫士,感觉界面还不错,于是用WPF制作了一个,时间有限,一些具体的控件没有制作,用图片代替了。感兴趣的朋友一起跟着小编学习WPF实现类似360安全卫士界面的程序源码分享...2020-06-25
  • 微信小程序实现点击导航条切换页面

    这篇文章主要为大家详细介绍了微信小程序实现点击导航条切换页面,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2020-11-19
  • 微信小程序手势操作之单触摸点与多触摸点

    这篇文章主要介绍了微信小程序手势操作之单触摸点与多触摸点的相关资料,需要的朋友可以参考下...2017-03-13
  • 微信小程序(应用号)开发新闻客户端实例

    这篇文章主要介绍了微信小程序(应用号)开发新闻客户端实例的相关资料,需要的朋友可以参考下...2016-10-25