四月 30
现在软件分包真是方兴未艾,让我想起了多年前那场与“豆腐渣工程”的斗争,“严禁分包转包”成了建筑工程老板们需要谨记的重要法规。
项目层层分包的背后是利润的层层锐减,金字塔底部的项目真正实施者,很可能是这个利润瓜分运动中获利最少的人,毕竟项目来源掌握在人家手里,一个人在市场中的地位决定了他能够获得的利益,要想获得项目必须出让利润,这样的后果当然是项目资金的缺乏。
软件行业是一个人力密集、知识密集的行业,软件开发的成本大部分都是人力成本,资金的缺乏必然带来开发人员项目收入的减少,缺乏最直观的金钱刺激,人员的投入将很难保证。
人们喜欢关注建筑项目的层层分包带来的“豆腐渣”,那么软件领域的“豆腐渣”呢,软件分包不是不行,而是需要一个正常的市场秩序,只有保证了真正开发者的利益,项目的质量才有保证。
又想起楼上来做项目的哥们了,上次谈话才知道他们的公司也是层层分包进来参与我们项目的,不由得担心起我们的项目了。
四月 25
今天做了一次Phone Interview,有一些收获,赶紧总结。当然我是被测试者,至于面试的公司就不方便透露了哈。
首先是自己的英语水平,太差。我现在再不能将我自己的英文差归咎于大学教育了,毕竟那么多的人都可以学好。当面试官要求我全程英文回答时,说实话我是傻眼了,让我读写没有问题,“说”实在是心中的痛。唉,惭愧之极。
其次是技术细节的掌握不好。今天提到的问题,基本上都是我日常开发中一再用到,并且熟知的,但是一旦让我解释起来就感觉力不从心,话到嘴边却说不出了,究其原因其实就是对于技术的掌握还不那么透彻,对于细节还不那么了解,还有一些原因就是自己平时要求不严,很多名称概念都在混用乱用,唉,出现了张冠李戴的问题,不能用“紧张”来解释吧。
教训就这些,收获不能说不多,上次HR的Interview结束后我就说,应该时常参加一下高水平的面试,能够知道自己的问题在哪里,对于自己的进步实在是不错的促进,这可能就是考试的最大作用吧。
以后的任务应该明确了,首当其冲的应该是自己的英语,特别是口语,要想实现自己的理想目标,这一关必须过!其次是在平时的工作中注意技术的积累,必须夯实基础!基础,一再提到,基础是一切。切记切记。不能什么东西都不求甚解,对于知识的掌握必须准确!
四月 11
作技术工作已经好多年了,呵呵,其间每次遇到问题,总是会去Google搜索,基本上每次都可以从上面得到想要的答案,时间长了,总是会那些分享自己问题解决办法的人们抱着感激,同时也觉得有些许的愧疚,学习和分享应该是同等的。
不知是什么原因,分享的习惯始终没有形成,在工作中得到的许多新知都没有能够写下来,懒惰?不会,可能是心里面的自私心理作祟吧,我这个人始终还是不够Open。
需要改变了……
四月 07
这两天在学习的过程中遇到了一些莫名其妙的问题,所有的语言初学者应该都会去写那么无聊无趣的”Hello World!”程序吧,那么来看看我的第一个C++ Hello World:
#include
int main()
{
cout << "Hello World!" << endl;
return 0;
}
保存为test.cpp。
按照我之前的记忆,这个简单的小程序肯定是没问题,我在Cygwin的命令行里面输入:
g++ test.cpp -o test
满以为……呵呵……结果却是
test.cpp: In function `int main()’:
test.cpp:5: error: `cout’ undeclared (first use this function)
test.cpp:5: error: (Each undeclared identifier is reported only once for each function it appears in.)
test.cpp:5: error: `endl’ undeclared (first use this function)
说cout和endl都没有定义!不可能!
我到网上一通乱找,翻来翻去,那些C++的教程全都和我一样,却没有提到我的错误,难道是我错了?是不是我的GCC装得有问题?
没辙了,后来我在gcc的include目录里面打开iostream文件来看才知道,里面使用了std的名字空间!如果上面的程序要想编译通过必须这样写:
#include
using namespace std;
int main()
{
cout << "Hello World!" << endl;
return 0;
}
就没问题了。
我看了一下《C++ Primer》,里面第8章提到了std名字空间,原来标准C++所有的组件全部定义在这个名字空间下,如果要使用标准C++组件,就必须using它,Lippman先生给出的建议是在一个头文件里面统一引用所有要用的组件,这样就不用麻烦每次都写using语句了。
C++的世界已经不像我想象的那样了。
四月 07
首先声明,我将要学习的是标准C++(ISO C++ Standard)。
现在介绍一下我的学习环境:
操作系统:Windows XP Service Pack 2
编辑环境:Eclipse + CDT、CygWin + VI、PuTTyCyg
编译器 :GCC (the GNU Compiler Collection)
之所以选择Eclipse是因为我对VI还不太熟悉,而且也不想用那些巨大的C++ Builder、Visual Studio等等(国内很多人都在用VC++6.0,我觉得外观太丑了,连字体都不能换,呵呵偏执),我这个人比较怪异,学C++就应该用自由开源的工具,既小巧也高效。
GCC编译器的Windows版本(姑且让我这么说)是CygWin,它可以在Windows环境下模拟出完整的Unix/Linux C++编辑编译环境,emacs、xemacs一应俱全。作为Windows下面的跨系统的C++编译调试环境,CygWin十分方便。
下面我就来讲讲环境的安装:
CygWin、puTTyCyg安装
登陆www.cygwin.com,点击页面最右边的”Install CygWin Now”链接,下载最新版的Setup.exe安装文件。
下载完成之后,双击setup.exe文件开始安装,出现”Cygwin Net Release Setup Program”对话框,告诉你CygWin的安装需要从网上下载,点击”下一步”,这个时候Cygwin会提示你选择安装源(Choose A Download Source)建议大家选择第二项”Download Without Installing”,这样可以先把安装文件下载到本地,以便日后的多次安装。
点击”下一步”,这个时候会提示你选择下载的保存目录,指定一个,姑且叫做”x:\cygwin”,如果出现网络中断或者其他情况,需要断点续传的时候,Cygwin的安装文件会自动指向这里的,这一点它做的还不错。
点击”下一步”,进行网络设置,需要代理的朋友可以在这里设置,继续。
“下一步”,这时Cygwin开始到服务器获取下载服务器镜像列表,接下来会出现许多的服务器,Cygwin会从你的选择中自动选出速度最快的服务器进行下载,在本地文件的下载目录里面就会建立相应的子目录,经过我的测试,推荐大家直接选择http://mirrors.kernel.org这个服务器。
“下一步”,Cygwin会提示你”Select Package”,其实就是让你选择要安装那些模块,缺省是”Default”,建议在”All”上面点击,选择成”Intall”,这样就可以下载所有的组件了。
“下一步”,就开始下载了,耐心等待,直到下载完成。如果需要断点续传,那么在第五步的时候选择”ReInstall”,CygWin会自动去判断下载了那些文件,还有那些没有下载,呵呵这么怪异的断点续传,还是头回见。
下载完成之后,再次启动setup.exe,这时就要选择”Install From Loal Directory”,然后再选择安装目录,选择下载文件所在的目录”x:\cygwin”,Cygwin会自动在众多的下载目录里面选择上次下载完成了的那个,贴心,呵呵。
“下一步”就又出现第5步出现的对话框,选择”All Install”开始安装,等待完成。这样GCC的环境就安装好了,要启动Cygwin,只需要到安装目录里面启动cygwin.bat就行了。
不过,缺省的Windows命令窗口无法全屏,用起来实在不爽,没关系,用PuttyCyg可以实现Linux Shell下面的众多功能,建议安装,过程很简单。大家可以在网上搜搜看。
Eclipse + CDT 3.0.2安装
Eclipse的安装就太简单了,到Eclipse.org上面下载最新的稳定版本,3.0以上就行,直接解压就行了。CDT是Eclipse的IDE插件,专门提供C/C++开发环境的,同样也是在Eclipse.org上面下载解压到指定目录就可以用了。至此,我整个的学习环境就算搭建完成了,等到熟悉了,我在Linux上面再搭建一个C++的开发环境。
四月 07
基于某种需要,开始恶补C++的基础知识。虽然写程序也不是一两年了,C/C++的知识也是一再学习,但是每次都无疾而终,不了了之。惭愧,在现在Java/.NET大行天下的时代,我却发现C++对我充满了吸引力,呵呵,脑子可能有问题。
为了能够取得良好的学习效果,我选择了一本很好书——《C++ Primer》(第四版),这本书对于初学C++的人真是太合适不过了,每一个知识点都反复举例,力求澄清混淆,给人深刻印象,也消除了我多年来对C++的很多误解。
但是,干干的去看书,实在是效果不好,结合实际的项目学习新知识想必每个程序员都知道这是事半功倍的办法,所以我选择几个实际的C++项目来进行学习,希望可以提高学习的效果。作为初学者,实现算法应该是学习语言比较好的一种项目实做方式,我选择了《算法I-IV (C++实现)》作为辅导书。
下面的笔记,很可能是混乱的、零碎的,甚至有些东西在高手看来是可笑的,但是我自己在学习C++过程中的体会,记下来,对自己的提高一定有帮助。