红联Linux门户
Linux帮助

Linux下编程入门

发布时间:2005-05-05 00:54:25来源:红联作者:非你不要
介绍

使用了Linux一段时间后,很多朋友都希望能为这个开放辕马世界做自己的贡献,更多的参加到这个open source的社团里。面对无数的自由软件,对于一个稍微不太普通的用户来说去解开一个tar文件,然后修改makefile去编译辕马都是很常有的。我们不满足简单的编译和使用别人的程序,我们应该亲自参加到这个开发辕马的创作之中。对于一个初学者来说,面对五花八门的开发工具,如何选择呢?
使用什么开发工具去开发Linux程序呢?我们这里做个简单的介绍。这里是你成为Linux hacker征途上的第一步。


编程模式

让我们开始第一步。作为一个初学者应该首先使用什么样的编程风格或者说编程模式呢?有很多的选择,例如基于函数的、基于过程的开发,还有面向对象的开发等等。要成为一个好的programmer,对于初学者,最好使用某种语言对各种编程模式都尝试一遍。

Comp.lang.functional 讨论组里面的FAQ中定义了面向函数的语言,说“"a style of programming that emphasizes the evaluation of expressions, rather than execution of commands. The expressions in these language are formed by using functions to combine basic values. A functional language is a language that supports and encourages programming in a functional style."

在Linux平台下面,比较常见的面向函数的开发语言有:ML、Haskell、Scheme等。

面向过程的语言是一种把程序要完成的动作分割成一个一个“过程(procedures)”的语言。一个典型的面向过程的开发语言的组织结构,我们可以看看流程图,就可以感觉出来。最常见的面向过程的开发语言就是Pascal和C语言了。

面向对象的开发语言的核心就是用对象来表征所要执行的主体。例如要开发一个高速公路的模拟系统,他首先定义一个交通工具的类,包括所有交通工具的公共属性;然后继承这个类,可以派生出汽车类、自行车类等等。Linux平台下最常见的面向对象的语言是C++、Java、Python、Smalltalk和 Eiffel等。

还有混合的语言,你可以用多种编程模式去写自己代码,例如PHP和Perl。

如何选择?一般来说最好每种模式都有一个了解。最好这样开始你的编程旅程,首先给自己定一个小project。有了一个清晰的目标后,选择编程语言和编程模式就容易了。如果使用某种语言开发起来容易,那么你就先学习使用这种语言。

例如,我开始想学习更多的关于数据库和web编程的时候,我决定建一个书籍数据库,包括我拥有的书的信息还有我要计划购买的书籍信息。经过我的查找比较,我认为我的想法可以用PHP和MySQL来实现更方便。然后我就学习了PHP和MySQL的一些知识,完成了这个小的系统。

我个人的编程体会,我至少使用了4种语言,包括:C、PHP、SQL和Perl。
C 语言是最灵活和方便的开发语言,在Linux下使用最多的开发语言就是它了。一旦学会了C语言,我们就可以非常容易的学习和使用其他的语言了。所以我建议你学习C语言编程。C语言是一种高级语言,它编写内核级的代码和驱动程序都非常方便。Linux下面有很多开发C语言的函数库和开发工具,我们都可以方便的使用它们,这也是使用C语言开发代码的好处。

PHP是Hyper-text Processor的缩写,是一种解释执行的语言,一般来说运行在web服务器端。如果你会C语言,那么最多花一天的时间就可以学会PHP。PHP给你在web编程方面很大的方便。

SQL 是Standard Query Language的缩写,就是标准的访问数据的查询语言。很多PHP程序中都包含了使用SQL语言去访问数据库的代码。SQL基本上使用有点类似英文的语法,所以学起来非常容易。如果你学习PHP和C,那么SQL可以简单的顺便学习。
Perl是一种使用比较广的教本语言。很多语法来自C和UNIX的SHELL工具。Perl拥有很多的可以添加的模块,在CPAN计划中。使用这些模块,开发程序编得非常容易了。

下面是一个perl程序例子:

#!/usr/bin/perl
# NMSU Job grabber
# Matt Michie (mmichie@linux.com)
#
#Copyright (c) 2000, Matt Michie (mmichie@linux.com) (All rights reserved.)
#
#Redistribution and use in source and binary forms, with or without
#modification, are permitted provided that the following conditions are met:
#
#Redistributions of source code must retain the above copyright notice,
#this list of conditions and the following disclaimer.
#
#Redistributions in binary form must reproduce the above copyright notice,
#this list of conditions and the following disclaimer in the documentation
#and/or other materials provided with the distribution.
#
#The names of this programs contributors may not be used to endorse or
#promote products derived from this software without specific prior
#written permission.
#
#THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
#``AS IS AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
#LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
#A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR
#CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
#EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
#PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
#OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
#WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
#OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
#ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#
#Instructions for use:
#
#You must have LWP installed to fetch the jobs. If you wish to use the
#e-mail notification you also must have sendmail installed.
#
#The script has the following command line flags:
#
#-v : Print the version
#
#-t : Max threshold to include the salary in statistics calculations
#
#-b (number) : Boundary of salary after which program will shoot off an
# e-mail
#
#-m (email address) : Tell the program to notify you with email. The arguement
# is a valid e-mail address.
#
#-q : Quiet mode, don print statistics, automatically used in email mode.
#Example use:
#
#fetch.pl -b 7.50 -m mmichie@linux.com
#
#This tells the program to fetch the jobs list and only send e-mail
#notification if there are any jobs with higher pay than $7.50.
#

use LWP::Simple;
use Getopt::Std;

$version = Job Grabber 0.01;

getopts(vqt:m:b:) || die "Check your command line args! ";

if ($opt_t != 0) {
$max = $opt_t;
}
else {
$max = 20; # Max threshold to include salary in count
}

$min = 0; # Min threshold to include salary in count

$highest = 0; # Highest salary
$total = 0; # Total jobs counted
$count = 0; # Total jobs which fall inside min/max thresholds

$oncampus = "http://www.nmsu.edu/~pment/oncampu.htm";
#$offcampus = "http://www.nmsu.edu/~pment/offcampu.htm";

$URL = $oncampus;

if ($opt_v) {
print "$version ";
exit(0);
}
if ($opt_m && !$opt_q) {
$opt_q = true;
}

&fetch_page;
&stats;

if ($opt_m && ($highest > $opt_b)) {
&email;
}
elsif (!$opt_b && $opt_m) {
$opt_q = 1;
}

sub fetch_page {
unless (defined ($page = get($URL))) {
die "There was an error getting URL: $URL ";
}

@page = split(/ /, $page);

foreach $line (@page) {



$line =~ s/<[^>]*>//g; # strip HTML codes
if (!$opt_q && $line =~ /On campus job postings as of:/) {
print "$line ";
}
elsif ($line =~ /SALARY:/) {
push @pay, (split (/:/, $line))[1];
}
}
}

sub stats {
foreach $elm (@pay) {
$total++;
next if ($elm <= $min || $elm >= $max);

if ($elm > $highest) {
$highest = $elm;
}

$count++;
$accum += $elm;
}

if ($count == 0) {
die "Eiiiiiiiiiieeeeeeeeeeeeeeeeeeee divide by zero :( ";
}
else {
$avg = $accum / $count;
}

if (!$opt_q) {
print "Total jobs listed: $total ";
print "Number of jobs counted for pay: $count ";
print "Highest hourly pay: $$highest ";
printf "Average hourly pay: $%.2f ", $avg;
}
}

sub email {
open(SENDMAIL, "|/usr/lib/sendmail -oi -t -odq")
or die "Can fork for sendmail: $! ";

print SENDMAIL <<"EOF";
From: Job Grabber <$opt_m>
To: $opt_m <$opt_m>
Subject: Jobby

Total jobs listed: $total
Number of jobs counted for pay: $count
Highest hourly pay: $$highest Average hourly pay: $$avg
EOF

close(SENDMAIL) or warn "sendmail didn close nicely";
}

从上面的代码中你可以看到,大部分的代码都是“过程”,使用与C类似的语法风格。这对于熟悉C语言的开发者来说,可以大大提高开发速度。例如使用了 printf函数,这个函数就和C的pritnf语法一样。其实在perl中还有其他的与printf语法一样的函数,我们可以自由选择。

开发工具


在Linux开发程序一般来说有两个主要的编辑器,vi或者vim,还有Emacs。这些文本编辑器如何选择?你可以都试试看,然后选择自己喜欢的。反正它们都可以让你输入文本,都可以让你生成源代码。我个人来说,喜欢vim,简洁而好用。

GCC是GNU C Compiler的缩写,是GNU/Linux下最好的编译器之一。这个编译器稳定,而且文档齐全,大部分的自由软件都是用他编译的。如果你使用C,那么就可以选择gcc。

GNU的debugger工具是gdb,有非常好的调试特性。不过对于初学者来说也许使用起来有点麻烦,你可以先试试ddd来调试你的代码。

还有其他的有自己IDE的开发语言,但是我还是建议你用vim或者emacs来开始你的编写代码的过程。


总结

Linux是开发者的天堂。开发者可以控制特定的硬件环境,还可以创建自己的工具使得自己的生活更加轻松。通常来说,学习编程的最好的方法就是读别人的代码,然后看它们是怎么做的。Linux和开发辕马使得你有机会看到别人的辕马,好好去学习吧。


一些资源

http://perl.com
http://python.org
http://www.ruby-lang.org/en/
http://www.cpan.org/
http://www.php.org
文章评论

共有 13 条评论

  1. wymam 于 2006-11-08 17:55:01发表:

    学习中!

  2. 于 2006-11-08 11:32:55发表:

  3. MOCEL 于 2006-04-29 01:35:24发表:

    学习了

  4. jemney 于 2005-10-26 22:19:02发表:

  5. 飞鹰 于 2005-10-21 00:32:45发表:

    学习了

  6. 新新 于 2005-09-23 00:11:08发表:

    顶~~~

  7. zz123 于 2005-08-01 00:13:15发表:

    顶下

  8. 何哥 于 2005-07-05 00:18:22发表:

  9. zz123 于 2005-06-26 00:15:36发表:

    我顶哦

  10. chentong 于 2005-06-14 10:56:58发表:

  11. uu 于 2005-06-04 16:16:55发表:

    一堆洋文看不懂唉

  12. chentong 于 2005-05-27 01:06:04发表:

  13. thej 于 2005-05-15 17:36:55发表: