《写给下一代的工程师–小保尔》之下一代电脑工程师该学啥?
工作忙、系统新,先发一篇旧文打底;后天再发新文上来。
《写给下一代的工程师》之下一代电脑工程师该学啥?
今天是09年3月29号:小保尔的外公来接小保尔坐火车去外地(东北)看外婆了。
小保尔:
告诉你,别嘲笑我哦,我刚刚送你上了火车就开始想你了……
给你做点什么呢?
你知道的,我们一直假设你是下一代的工程师的。当然,如果你不做也就算了。如果你要做(电脑工程师的话)那么你一定会做最好的,对吗?所以我发誓一定不会教一些“乱七八糟”[1]的东西糊弄你!
我们假设你将来是一位出色的电脑工程师也不是全无来由的,我们发现在你一岁多的时候电脑已经是你最喜欢的宠物了(电脑怎么又成了宠物[2]呢?)。如果你现在认为你自己是爸爸妈妈最喜欢的宠物,那么你也可以暂且这样认为吧;因为爸爸妈妈不会虐待你,所以我们知道你也绝对不会虐待你的弟弟妹妹,以及电脑(这一点不需要说理由了吧?你从没见过外婆、外公虐待他们家的小花猫吧?……因为他们很爱她呀!)
还记得你一岁多的时候去公园玩得很高兴,也交了很多朋友。因为我们教会了你说一句问候语:“你好,我叫小保尔”。你看问候语多有用?我们来教你的宠物—电脑来说这句问候语吧!
请打开微软公司的Microsoft Visual Studio2008 (简称为VS2008)这个软件,在你爸爸妈妈的电脑上安装的都是2008这个版本,因为今年是2009年,(微软还没有出2009版本哦)所以这个Microsoft Visual Studio2008就是最新版本的软件哦。其实你没必要一定要用最新的2008版本,我保证我下面写的例子程序在以前的版本 Microsoft Visual Studio2003(VS2003)、VS2005以及VC++6.0上都能运行通过。
下面是在Visual Studio上运行的一个叫“Hello World”的入门程序,你只需要打开VS2008的程序输入界面,把下面的程序原样输入进去就可以直接运行的。当然如果你感觉打字麻烦也可以直接用拷贝、粘贴的方法输入,不过那样你就体会不到程序员编写程序的“写”的感觉了哦。
不过,暂时不会自己编写程序,而是会修改别人的程序,也是不错的学习起点哦。
————————————-
//源程序&注释如下:
using System;//这一句是说引用C#系统的一段程序“System程序”,如果删除这一句VS的编译器会不认识Console.这个函数的
//所以我们要用 using System这句话告诉编译器,到System这段程序中去查Console这个函数的用法
namespace ConsoleApplication1Hello_IamCsharp1//我们把程序打个“包”叫ConsoleApplication1Hello_IamCsharp1–你好我是C#!
{
class Program//因为我们在做“面向对象”的程序,所有程序我们都放在称为“类”的结构里面。
{
static void Main(string[] args)//程序从这里“Main”开始执行,static这个是静态的(不变的),args是“参数”的意思
{
Console.WriteLine(”Hello World! I am C#(CSharp).”);//显示输出问候语,你好(世界),我是C sharp.
Console.ReadLine();//等待输入任意键,再继续。
}//Main过程到这里结束
}//类class Program 到这里结束
}//(命名空间)namespace ConsoleApplication1Hello_IamCsharp1(这个程序”包”到这里结束)
小保尔,程序运行得怎么样,它(这段程序)有没有向你问候说:“Hello world! I am C#”呀?
你能不能尝试一下修改它,让他说一些别的问候语呀?比如:“Hello world! 我是 C#下的问候程序。……你好,你是谁呀?”。然后由你(小保尔)自己输入自己的名字“Xiao Baoer”,然后C#程序再次说(输出)“你好,Xiao Baoer”。这种(互动)问候的程序很有用呢,标准答案我们放在后面的文章里。
今天我们只写了几行代码,先学习用C#和C++编写“Hello world”(你好这个世界)这样的入门程序,(但是我们已经学习了不少有用的内容了)我们用到了一个非常著名(Famous)的写程序方法:“面向对象”[3]。下次我们来讲一讲Basic语言和谭浩强老师的故事,以及为啥向你推荐C++,我保证只教你最有用的东西;对于那些大人都搞不清楚的所谓“流行”的东西,我的态度是:知道就好,对你们来讲知道就够了[4]。
[1]乱七八糟:做事没有先后主次~但自然有其存在和发展的道理~这就是我们正常思维里的乱七八糟~;但在技术发展领域有时候的确也可以用“存在既是真理”来解决我们生活中的一些现象~,这初看起来有点矛盾,但让我们换一个角度来观察和理解还是有办法解决和统一的哦!
[2]宠物:你可以知道以下一些事实,一般地人为了消除孤寂或娱乐的目的而豢养的小型动物,其中猫、狗、鸟和鱼最为常见。大多数宠物在主人那里会受到很好的对待,也有少数主人虐待动物。宠物一般是哺乳纲或鸟纲的动物,因为这些动物大脑比较发达,有的大脑能相当于3至5岁左右的幼儿的大脑,所以容易和人交流。
[3]面向对象:准确的为面向对象程序设计(英语:Object-oriented programming,缩写:OOP),指一种程序设计范型,同时也是一种程序开发的方法论。它将对象作为程序的基本单元,将程序和数据封装其中,以提高软件的重用性、灵活性和扩展性。[1]当我们提到面向对象的时候,它不仅指一种程式设计方法。它更多意义上是一种程序开发方式。在这一方面,我们必须了解更多关于面向对象系统分析和面向对象设计(Object Oriented Design,简称OOD)方面的知识。如果你有兴趣,就自己到网上查些资料吧。http://www.google.cn/search?hl=zh-CN&q=%E9%9D%A2%E5%90%91%E5%AF%B9%E8%B1%A1&btnG=Google+%E6%90%9C%E7%B4%A2&meta=&aq=f&oq=
————————————————————————————————–
[4] 小保尔还是学龄前儿童,而他的哥哥、我的学生们也只是中小学生,所以他们既不可能去读懂 K&R 或《C++ Primer》,也不可能遍历谭浩强“大师傅”的过百多本教材,所以笔者(Baoba)要尝试用他们看得懂的语言,达到启蒙的目的就好了。
2009年3月31日于9:58 am
C++的练习也放下面,小保尔在独立完成之前不要看哦……
//C++做这样的问候程序编码看起来要简洁一些……
// C01_HelloWorld090331a.cpp : C++写的问候程序,带互动(交互)功能。
#include “stdafx.h”//stdafx.h : 是标准系统的包含文件,或者在stdafx.h里写包含文件的名字……那么stdafx.h就理解为标准系统包含文件的包含文件了,呵呵理解一下就好了。
int _tmain(int argc, _TCHAR* argv[])//程序从 _tmain这里开始执行,这个_tmain就称为“入口”了
{
char name[20];//名字放在这个name变量里,20是名字的最大长度,比如: Xiao Baoer;
printf(”Hello world, 你叫什么名字呀?”);//这是程序在输出(在控制台屏幕显示)问候语, Hello world(你好世界),你叫什么名字呀?
scanf(”%s”,name);//让你,使用者输入你的名字,比如:Xiao Baoer
printf(”你好 %s, 我的名字是C++\n”, name);//这里程序会输出:你好 Xiao Baoer, 我的名字是C++(\n是让程序回车换行)
/*scanf(”%s”,name);*/ //这一行是暂停等待使用者的再次输入(任何输入) 用/* */就不执行了,称为注释掉了;
return 0;//返回,这段程序就结束了,返回个虚的(这里没什么用处的)0作为程序成功执行后的结果了……
}
2009年3月31日于10:20 am
少壮不努力,老大做it。令郎小小年纪可不要选错行啊。如果要学着编程,开发环境选unix/类unix+gcc+gdb+vim/emacs,呵呵,个人喜好。
2009年4月2日于10:30 am
# supernova 评论道:
2009年3月31日于10:20 am e
少壮不努力,老大做it。令郎小小年纪可不要选错行啊。如果要学着编程,开发环境选unix/类unix+gcc+gdb+vim/emacs,呵呵,个人喜好。
——————————————
谢谢指教!
gcc+gdb+vim/emacs在我们周围好象用得不多。尤其是和微软的平台比较?
抽时间一定好好研究一下gcc+gdb
编辑器用惯微软的.Net了没办法。
老实讲IT领域的”乱七八糟“的系统也是不少,都搞恐怕搞不精;尤其是我们又和教育打交道,有时候我们会不由自主的钻到学问的”故纸堆“里出不来。
取舍确实难啊。
2009年4月7日于7:28 am
补充一篇:面向对象的“Hello World”写法:
// Class1Trace090401.cpp : 第一个类(面向对象的Hello World)第2个程序 改进1-Trace .print
//
#include “stdafx.h”
class Trace {
public:
Trace() {noisy=0;}
void print(char* s) {if (noisy) printf(”%s”,s);}
void on() {noisy=1;}
void off() {noisy=0;}
private:
int noisy;
};
int _tmain(int argc, _TCHAR* argv[])
{
Trace t1;
t1.on();//t1.off();
t1.print(”Hello World1\n”);
t1.off();//t1.on();
t1.print(”Hello World2\n”);
t1.on();//.off();
t1.print(”Hello World3\n”);
//cin.get();
//其它略……
char name[2];
scanf(”%s”,name);
return 0;
}