小白大困惑之C语言
Tofloor
poster avatar
Z819722530
deepin
2011-12-05 05:10
Author
我开始看《Linux C编程一站式学习》,但是有一个小问题没弄明白。例 1.1. Hello World

#include

/* main: generate some simple output */

int main(void)
{
        printf("Hello, world.\n");
        return 0;
}

这个要在哪里输入才能保存成.c文件?
#################################################################

回楼主,请看这个

http://wiki.linuxdeepin.com/inde ... F%E4%B8%8A%E6%89%8B
Reply Favorite View the author
All Replies
2 / 2
To page
s.******[email protected]
deepin
2011-12-14 05:21
#21
一个人的编程水平不能简单的用代码行数衡量, 比如我一个3万行的haskell项目C语言要30万行才能实现。 所以编程能力和看书一样, 不在多在于精, 代码写的多只能说你经验比较丰富。
懒猫Haskell黑客屌爆了!
Reply View the author
stephen
deepin
2011-12-14 06:09
#22
一个人的编程水平不能简单的用代码行数衡量, 比如我一个3万行的haskell项目C语言要30万行才能实现。 所以编程能力和看书一样, 不在多在于精, 代码写的多只能说你经验比较丰富。

多于10万行之后,多少都一样了。我个人认为,写代码,能力其实就是经验。如果经验不够丰富,没有碰到过足够多的现实问题,那就不可能写出质量很高的程序来。

如果真要在各种语言之间比,3万行的Haskell隐藏掉了多少底层的细节啊?如果用C写上30万行的代码,那基本上底层的各种实现,各种基础算法都是熟透了。用C写,可是各种最基础的数据结构和算法都要自己实现的,C库里基本上没啥东西可用的。
Reply View the author
186******98
deepin
2011-12-14 07:36
#23
[quote]一个人的编程水平不能简单的用代码行数衡量, 比如我一个3万行的haskell项目C语言要30万行才能实现。 所以编程能力和看书一样, 不在多在于精, 代码写的多只能说你经验比较丰富。

如果真要在各种语言之间比,3万行的Haskell隐藏掉了多少底层的细节啊?如果用C写上30万行的代码,那基本上底层的各种实现,各种基础算法都是熟透了。用C写,可是各种最基础的数据结构和算法都要自己实现的,C库里基本上没啥东西可用的。[/quote]
我说的这个对比, 是说不能用简单单单的代码行数就量化一个程序员的能力, 更重要的是看代码的质量和代码里表现的算法和原理。
如果写了10万垃圾代码, 是很多, 但是并不表示能力强。

我举的 haskell 例子主要是想说, 高质量的代码数量在不同语言是不一样的, 比如 haskell 这种表现力及其丰富的语言, 10万行是可以实现编译器级别的东西的, 比如 GHC。

还有我不赞成 haskell 3万行是隐藏了多少底层细节, 我还不是用最基本的算法一个一个堆积出来的, 代码少主要是 haskell 语言可以用一两行就表达 C 语言要很多行才能表现的算法。
haskell 是因为语言的语法表现力决定了代码行数少, 而不是隐藏了多少细节。
Reply View the author
186******98
deepin
2011-12-14 08:12
#24
我看到很多刚开始学习编程的人存在很多思想误区, 认为这个世界上只有 C/C++ 是最好的编程语言, 不能不说这是中国教育制度的悲哀。

首先, 程序是用于人们解决问题的工具, 最高效快速解决问题的语言就是最好的语言。

比如, 如果你直接写内核模块跟硬件打交道, 就不要用什么OOP去封装啊, 怎么直接就怎么来, 这种情况C语言就适合。

比如, 写桌面应用, 就不要用C, Python或JS可以更快更简洁的实现, 不要说 Python/JS 慢, 自己可以测一下, 桌面应用多少是时间是在运行下面的 C 函数接口, 多少时间是在运行 Python (或JS) 的逻辑控制, 就一目了然了, 如果你非要用 C 来装牛X, 我只能说你是在浪费自己的编码时间, 好好先研究一下什么是 gobject-inspection 吧。

比如, 写安卓应用, 用Java最好, 你用 C++ 去写, 后台算法和调用默认控件还可以, 如果想像Java那样控制细节就别想了, 安卓框架不会给你多少自由度的。

比如, 你写编辑器, 类似 elisp 那样的语言就是最好的, 不要提什么 Eclipse, elisp 的热替换机制在运行的时候就能动态改变自己的代码和状态, 可以上 emacswiki 上看看那上面的插件, 你自己挨个数上几年就知道了什么才叫 “插件”。

比如, 桌面环境, 像  gnome-shell 这种内嵌 spidermonkey 解释器的 js 代码最快, 也是动态调试的。

比如, 做网站后台, PHP就最适合, 你非要用其他语言, 光是写和其他程序打交道的接口就会累死你。

比如, 写编译器, 像 haskell 严格类型推导的数学语言最适合, 自己 Google 唐凤当年用多少时间写了 Perl6 编译器的实现 (Pugs)然后再和我讨论 haskell 是否够强大。

还有 Ruby, Scala, Erlang, Ocaml, 等等很多强大的解决特定领域问题最好的语言。

所以我想给初学编程的人一点建议:先问自己想做什么? 然后再选择一个最 “适合” 的语言。
如果可以, 最好每年学习一门新的语言, 不要到了 40 岁还只知道 C/C++/Java 。
Reply View the author
stephen
deepin
2011-12-14 08:27
#25
[quote][quote]一个人的编程水平不能简单的用代码行数衡量, 比如我一个3万行的haskell项目C语言要30万行才能实现。 所以编程能力和看书一样, 不在多在于精, 代码写的多只能说你经验比较丰富。

如果真要在各种语言之间比,3万行的Haskell隐藏掉了多少底层的细节啊?如果用C写上30万行的代码,那基本上底层的各种实现,各种基础算法都是熟透了。用C写,可是各种最基础的数据结构和算法都要自己实现的,C库里基本上没啥东西可用的。[/quote]
我说的这个对比, 是说不能用简单单单的代码行数就量化一个程序员的能力, 更重要的是看代码的质量和代码里表现的算法和原理。
如果写了10万垃圾代码, 是很多, 但是并不表示能力强。

我举的 haskell 例子主要是想说, 高质量的代码数量在不同语言是不一样的, 比如 haskell 这种表现力及其丰富的语言, 10万行是可以实现编译器级别的东西的, 比如 GHC。

还有我不赞成 haskell 3万行是隐藏了多少底层细节, 我还不是用最基本的算法一个一个堆积出来的, 代码少主要是 haskell 语言可以用一两行就表达 C 语言要很多行才能表现的算法。
haskell 是因为语言的语法表现力决定了代码行数少, 而不是隐藏了多少细节。[/quote]

一个人如果写10万行代码(不管哪种语言)之后还是写着很垃圾的代码,那也真是这个人的造化了。。。

我指的细节,可能比你想像的要更细一些。比如字符串匹配的算法,有几个人会自己实现KMP算法?比如常用的集合、列表、字典这些数据结构,在C语言中都是要自己实现的,但是在其他高级语言中,很少有人会去自己实现。

语法的表现力,其实就是语法隐藏的细节的多少。再拿我常说的Quick的例子,用高级语言实现的人,包括用Haskell(我也看过Haskell的quicksort,3行代码就搞定了),基本上都会用到“范型”这样的概念,就是说,程序员一般是不会过多的去考虑数据类型的问题,而只用考虑算法本身。而用C语言实现时,这个人则会更多的去发现在计算机最地层的实现原理,数据结构在内存中究竟如何存放,如何比较。

一个写了10万行C代码的人和一个写了10万行Haskell代码的人的区别是,C语言的程序员对于最底层的数据结构和算法非常熟悉,而且写程序的时候会非常不自觉的去考虑程序的执行效率,他更注重过程。Haskell的程序员则对一些较高层次的算法更熟悉一些,他更关注如何去解决问题,更注重结果。但是要说比较这两个程序员的编程能力,我觉得是不可比较的,各有强项。

不少大公司对代码量有要求,但其实这个要求并不是死的,这个要求的本意并不是说一定要求你写过这么多行代码。而是说,只要你的代码量超过这个数,那你的编程能力就一定合格了,优秀了。一个人可能写个好多次Hello World,但要写出10万行的Hello World,我相信没这样的人。同时,这些公司要看的只是一个数量,而不关心你用的是什么语言,哪怕你用VB写过10万行的代码,你也是非常非常牛的人了。

你对我的意思有个小误解,
1、两个人的代码两都超过一定的数之后,这两个人的编程水平就不能但看代码量来决定。10万行代码经验的人跟1000行代码经验的人差距很大,但是10万行代码经验的人跟100万行代码经验的人,可能并没有多少区别。
2、并不是说代码两达不到10万行就不合格,首先10万这个数字就是一个虚数,只是一个针对大众平均出来的一个值,而且这个值肯定也是比期望的“合格值”要高的,定这么高的要求,本来就是这些公司的一个筛选手段,一个应聘者,如果自己值写过几千行代码,那么一看到10万这个数字就会自动退缩了,但一个有7、8万行代码经验的人就不会放弃,而会冲上去。
Reply View the author
z85525006
deepin
2011-12-16 19:13
#26
我觉得“Linux编程方面的书籍”有些笼统了。Stephen 也许可以在选择方向上给点建议…………[/quote]

我的建议就是,要么不要学C,要学C就得静下心来苦读苦练几年,代码量能够超过10万行,能够参与大型C语言的开源项目。如果没有决心学到这个程度,学C就没多大意义了,就是纯浪费时间,现在没多少应用型的产品会用C去最为主要开发的语言了。如果学C能学到这个程度,那么即使将来不用C,学其他的语言也都只是几个小时的功夫。[/quote]
10万行用A4纸打印出来有多少张?[/quote]

这为兄台也说的不是没有道理.
但是光写代码,不涉及 设计模式 那是很吃亏的.
那你就是苦自己了.
我现在也刚涉及 设计模式 不久,以前也是用C语言光写GTK+代码,太累了,后来看到了设计模式,所以有一些感悟,软件的重用性和维护性,还有开发效率.
不要纠结与某个语言有没有前途,有没有前景,千万不要跟风。
选择一门语言,专心的学习,那才是对的事情.就我们计算机学院来说事,第一学期开C语言,学生就入门了,没有深入学习其它的东西,下个学期又开个C++,他们也没学到什么,再下个学期,开个java,还是没有学到什么.(但是也不排除有个别同学专注于某门语言苦心学习的)
如果就开一门语言,再这个语言上涉及其它的东西,比如线程,进程,管道,socket....,那么学习把这些学通了,不是简单的掌握语法而已,那么接触其它的语言就很容易上手的.
初学者不要学那么多语言,当你精通一门语言,你可以涉及另一门语言。
因为再软件开发领域,需要多种语言的配合,你可以用C语言给python写库(我没尝试过,刚学的python),还有其它一些东西.
java, c, c++, python, php,都是可以让你入门的语言.提升的语言,你就选择一门.
现在的linux的桌面开发,python的效率比较,就是因为封装的比较好,所以可以好好的使用,用C语言来写GTK+,是吃力不讨好的事情.
在一个环境,用好的语言干对的事情那就OK了。
初学者就不要纠结了,专心学习一门语言,不要太浮躁了.
Reply View the author
stephen
deepin
2011-12-16 19:25
#27
这为兄台也说的不是没有道理.
但是光写代码,不涉及 设计模式 那是很吃亏的.
那你就是苦自己了.
我现在也刚涉及 设计模式 不久,以前也是用C语言光写GTK+代码,太累了,后来看到了设计模式,所以有一些感悟,软件的重用性和维护性,还有开发效率.
不要纠结与某个语言有没有前途,有没有前景,千万不要跟风。
选择一门语言,专心的学习,那才是对的事情.就我们计算机学院来说事,第一学期开C语言,学生就入门了,没有深入学习其它的东西,下个学期又开个C++,他们也没学到什么,再下个学期,开个java,还是没有学到什么.(但是也不排除有个别同学专注于某门语言苦心学习的)
如果就开一门语言,再这个语言上涉及其它的东西,比如线程,进程,管道,socket....,那么学习把这些学通了,不是简单的掌握语法而已,那么接触其它的语言就很容易上手的.
初学者不要学那么多语言,当你精通一门语言,你可以涉及另一门语言。
因为再软件开发领域,需要多种语言的配合,你可以用C语言给python写库(我没尝试过,刚学的python),还有其它一些东西.
java, c, c++, python, php,都是可以让你入门的语言.提升的语言,你就选择一门.
现在的linux的桌面开发,python的效率比较,就是因为封装的比较好,所以可以好好的使用,用C语言来写GTK+,是吃力不讨好的事情.
在一个环境,用好的语言干对的事情那就OK了。
初学者就不要纠结了,专心学习一门语言,不要太浮躁了.

你们计算机学院学的语言太少了。我本科期间,因为课程需要接触到过的语言有:C、C++、Java、VHDL、VerilogHDL、x86汇编、mips汇编、OpenMP/MPI(不能算是独立的语言,算是超算的扩展),还有其他一大堆东西,比如Makefile、Bash、XML等等,你都可以认为算不上语言的语言。

其实我说10万行的代码量,就隐含着要学其他的东西,比如你说的模式设计。如果真有人能够做到埋头写10万行代码,不学其他所有的东西,那这人真神了。学东西是在写代码时自然而然的需求。你写着写着,就会觉得用的东西不给力,要学点新的东西了。
Reply View the author
Z819722530
deepin
2011-12-17 04:37
#28
我去年买了一本《系统程序员成长计划》,一直看不懂。在解决如何HELLO WORLD!的问题之后,以及看了各位革命同志的帖子之后,最近几天觉得它变得亲切些了。我决定还是学C好了,因为我买的那本书,而且deepin百科里面的那本书似乎比较好懂。
Reply View the author
z85525006
deepin
2011-12-17 22:49
#29
我看到很多刚开始学习编程的人存在很多思想误区, 认为这个世界上只有 C/C++ 是最好的编程语言, 不能不说这是中国教育制度的悲哀。

首先, 程序是用于人们解决问题的工具, 最高效快速解决问题的语言就是最好的语言。

比如, 如果你直接写内核模块跟硬件打交道, 就不要用什么OOP去封装啊, 怎么直接就怎么来, 这种情况C语言就适合。

比如, 写桌面应用, 就不要用C, Python或JS可以更快更简洁的实现, 不要说 Python/JS 慢, 自己可以测一下, 桌面应用多少是时间是在运行下面的 C 函数接口, 多少时间是在运行 Python (或JS) 的逻辑控制, 就一目了然了, 如果你非要用 C 来装牛X, 我只能说你是在浪费自己的编码时间, 好好先研究一下什么是 gobject-inspection 吧。

比如, 写安卓应用, 用Java最好, 你用 C++ 去写, 后台算法和调用默认控件还可以, 如果想像Java那样控制细节就别想了, 安卓框架不会给你多少自由度的。

比如, 你写编辑器, 类似 elisp 那样的语言就是最好的, 不要提什么 Eclipse, elisp 的热替换机制在运行的时候就能动态改变自己的代码和状态, 可以上 emacswiki 上看看那上面的插件, 你自己挨个数上几年就知道了什么才叫 “插件”。

比如, 桌面环境, 像  gnome-shell 这种内嵌 spidermonkey 解释器的 js 代码最快, 也是动态调试的。

比如, 做网站后台, PHP就最适合, 你非要用其他语言, 光是写和其他程序打交道的接口就会累死你。

比如, 写编译器, 像 haskell 严格类型推导的数学语言最适合, 自己 Google 唐凤当年用多少时间写了 Perl6 编译器的实现 (Pugs)然后再和我讨论 haskell 是否够强大。

还有 Ruby, Scala, Erlang, Ocaml, 等等很多强大的解决特定领域问题最好的语言。

所以我想给初学编程的人一点建议:先问自己想做什么? 然后再选择一个最 “适合” 的语言。
如果可以, 最好每年学习一门新的语言, 不要到了 40 岁还只知道 C/C++/Java 。

王勇这个说的对啊,就是用对的语言干对的事情.
如果在linux桌面开发效率来说,当然首选 python.(封装好,代码容易看)
如果非要C来装牛X,减缓了开发效率,那就是傻逼的行为了.
....等等例子就不举了.
无论是你在 window平台还是linux平台。
都不会阻碍你前进的道路.
Reply View the author
shiweifu
deepin
2011-12-18 05:58
#30
我去年买了一本《系统程序员成长计划》,一直看不懂。在解决如何HELLO WORLD!的问题之后,以及看了各位革命同志的帖子之后,最近几天觉得它变得亲切些了。我决定还是学C好了,因为我买的那本书,而且deepin百科里面的那本书似乎比较好懂。


那书不错,去年看过。知识循序渐进,讲的有重点,而且代码都是用的着的。
不像有些书,写了一陀,就是没说清具体有啥用
Reply View the author
2 / 2
To page