学习编程的建议 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
momo5269
V2EX    问与答

学习编程的建议

  •  
  •   momo5269 2011-03-18 06:23:29 +08:00 9891 次点击
    这是一个创建于 5374 天前的主题,其中的信息可能已经有所发展或是发生改变。
    我想要自学编程,虽然资料很多,却总担心不够因为我高中就离开学校了。虽然看了很多给新手的建议和入门指导,但是心里总是没底。我快要埋没在太过丰富的信息里了。教程也很多,语言选择也很多。当初听到的大人们的建议都是要从C开始,而很多朋友说直接从Java、C++、C#等OO语言学起,我都迷糊了,实在是难以分辨那个才是对的。由于周围会的人多,了解一些东西,这反倒成为了我学习的障碍.......

    对于这种情况,大家有什么建议吗?我该怎么做?
    59 条回复    1970-01-01 08:00:00 +08:00
    Livid
        1
    Livid  
    MOD
    PRO
       2011-03-18 06:34:33 +08:00
    先从 Python 开始吧。

    非常适合初学者的语言。
    BB9z
        2
    BB9z  
       2011-03-18 10:38:37 +08:00
    不太严格地点一下。
    可以这样划出三层:机器,语言,思想。
    编程的直接目的是用程序语言操纵机器,根本目的其实是解决*人*的问题,机器和语言其实都是工具,至于上层思想殊途同归。
    不同的语言有它们所适用的领域,我建议你有两种方案:
    1. just 选一个*你自己*喜欢的语言
    2. 决定好你将来的发展方向,然后选择语言
    有可能的话了解下相关语言的发展史,对选择语言应该有帮助。
    xiluo
        3
    xiluo  
       2011-03-18 10:52:45 +08:00
    想更了解计算机,选C
    想更快写出一些项目,Web或桌面之类的应用,选Python或Java
    --拙见。
    TheOnly92
        4
    TheOnly92  
       2011-03-18 10:56:07 +08:00
    首先想想你到底要编些什么程序,再选择比较简单的语言入门。掌握好之后,要选择其他语言也行,继续保留也行。如果是 Windows 的话 Basic 入门也可以,其他系统 C 比较好吧,对基础来说。最重要的是,你必须知道自己究竟要写些什么,然后一直朝着那个方向前进,慢慢学习。
    xiaojay
        5
    xiaojay  
       2011-03-18 11:11:35 +08:00
    python +1
    无所不能的python啊
    dreamer
        6
    dreamer  
       2011-03-18 11:19:40 +08:00
    建议你学习编程的时候顺便看一下《Unix 编程艺术》这本书。

    这篇文章也值得一看:http://coolshell.cn/articles/2439.html

    个人觉得了解一下 Hacker culture 会增加你对编程的激情。最近我对 hacker 文化很着迷。
    momo5269
        7
    momo5269  
    OP
       2011-03-18 11:39:16 +08:00
    @BB9z 我是这样想的,基础知识与深入的语言:编码的奥秘→深入理解计算机系统→计算机程序的构造和解释→Lisp语言。这是针对你说的第一点。

    而第二点,这才是我的难点........我不清楚发展方向,也不清楚那些语言适合新手学习,因为说这种语言好,那种语言好的太多了,不知道信谁的...Python我之前就开始学,但是刚看了几章,又听见别人说学xx才好...................我一开始是准备做点桌面应用、独立游戏的方向去想的。
    levn
        8
    levn  
       2011-03-18 11:54:04 +08:00
    roamlog
        9
    roamlog  
       2011-03-18 12:01:52 +08:00
    @momo5269 先确定自己想做什么, 再决定去学什么语言吧?
    momo5269
        10
    momo5269  
    OP
       2011-03-18 12:13:42 +08:00
    谢谢大家,我是准备做一些小的应用和独立游戏,之后就是用于工作。那么,我学Python就可以了,对吗?
    liuxurong
        11
    liuxurong  
       2011-03-18 12:29:37 +08:00
    英语好不好?英语好倒是上手很快
    sqbing
        12
    sqbing  
       2011-03-18 12:58:41 +08:00
    @momo5269 我觉得python虽然上手快,功能强,但是还是应该从c开始,倒不是因为真的用c来干嘛,c里很多处理问题的方法放到别的地方一样实用
    算法也适当了解一些,配合你学习的语言
    momo5269
        13
    momo5269  
    OP
       2011-03-18 13:09:44 +08:00
    @liuxurong 就是英语不好,所以才很迷惑
    thewei
        14
    thewei  
       2011-03-18 13:11:08 +08:00
    @momo5269 C语言与数据结构应该先学习一下,对编程的思维有影响。
    chloerei
        15
    chloerei  
       2011-03-18 13:16:36 +08:00
    @momo5269 小的应用和独立游戏对应什么平台?直接找对应平台的的API的原生语言。比如iphone是ObjectC(我猜的,不懂iOS),用python写应用和游戏可能遇到怎么部署的问题。

    推荐C,Lisp,算法,计算机系统,编译原理那些什么的是向着计算科学方向去的,我倒觉得这些深层的不如自己觉得需要时候再补,应该直接往目标去。
    momo5269
        16
    momo5269  
    OP
       2011-03-18 13:16:49 +08:00
    @thewei 这是我想要买实体书的书目:《软件随想录:程序员部落酋长Joel谈软件》《Python基础教程:第2版》《C程序设计语言(第2版新版)》《C程序设计语言(第2版新版)习题解答》如何?
    momo5269
        17
    momo5269  
    OP
       2011-03-18 13:20:11 +08:00
    @chloerei 那是第二部分,我的想法是这样的:
    ①入门语言与基础
    ② 7楼的内容
    ③ 更深入
    因为我不知道该如何构建学习框架,能给出什么建议吗?
    chloerei
        18
    chloerei  
       2011-03-18 13:21:09 +08:00
    @momo5269 软件随想录 是博客吹水合集,好看。C程序设计语言 和习题,我觉得看完也不知道怎么写一个应用和游戏。
    Mianco
        19
    Mianco  
       2011-03-18 13:30:33 +08:00
    要不从html/css/Javascript学起,上手快,学完就能做东西。
    momo5269
        20
    momo5269  
    OP
       2011-03-18 13:31:36 +08:00
    @chloerei 实际这是一个折中的办法,因为既然Python适合新手,C不得不学,那么都要就好了。先学Python,然后学C,C我是在高中NOIP小组学过一丁点点。

    7楼的只是用来到一定程度之后填补知识空缺的,是一个朋友给我的建议,不过“计算机程序的构造和解释→Lisp语言”是我自己加的。
    chloerei
        21
    chloerei  
       span class="ago" title="2011-03-18 13:33:02 +08:00">2011-03-18 13:33:02 +08:00
    @momo5269 首先抱歉打错了名称,iOS是Objective-C

    重看了一次帖子,既然python你已经”看了几章“了,就继续吧。python的书也多。
    chloerei
        22
    chloerei  
       2011-03-18 13:42:25 +08:00
    @momo5269 Python对你的好处是这样

    一是胶水语言,什么方面都可以沾上。很多库都有python的接口,比如gnome的gtk库是用C写的,但是它提供了python接口,提倡小应用用python这样的语言写而不是用C。

    二是跨平台,虽然跨到手机难点。这样不会捆绑在某个公司的私有技术。

    三是书多,数据结构和算法什么的也有python描述的书。

    学python的话,你会知道写一个程序是怎么用的,逐渐会知道写一个应用其实很多时候是调用别的库提供的接口。然后你发现你找到了自己想要写的东西,但是用python写在部署的时候会有麻烦(比如用户不愿意在手机安装一个python),你就开始研究该平台本地的语言。在你开发的过程中发现有个部分特别慢,你就开始研究底层,开始混合语言编程,这个时候你会逛逛 v2ex,回答别人”怎么学习编程“的问题……
    chloerei
        23
    chloerei  
       2011-03-18 13:43:29 +08:00
    你会知道写一个程序是怎么用的 => 你会知道写一个程序是怎么样的
    momo5269
        24
    momo5269  
    OP
       2011-03-18 13:49:10 +08:00
    @chloerei 谢谢了!那我就继续学python吧!虽然还没学多少呢....入门书籍《Python基础教程:第2版》就可以了吧?我有很多电子书但是看不下去,这也是没学下去的原因之一。
    BB9z
        25
    BB9z  
       2011-03-18 14:00:40 +08:00
    好热闹。
    @momo5269 补一本数据结构的《数据结构与算法分析 C语言描述》Mark A Weiss的,C描述好处就是比较纯粹,没有像C++,Java那么多“包装”的讨论。
    “基础知识与深入的语言:编码的奥秘→深入理解计算机系统→计算机程序的构造和解释→Lisp语言”这个路子我认为可能有问题,但不好说……

    “不知道信谁的”,“但是刚看了几章,又听见别人说学xx才好” 这个能理解,其实他们说得都对,但这是在特定情况下的,单看表面矛盾的言论实在太多了。现实中很多问题没有对错、好坏之分,只有在特定情形下合不合适。开发中也一样,要处理很多折中问题。
    需要自己作选择,并承担起一切后果。而且现实中最终能不能成,也要靠运气。

    像Joel,37signals的经验是不能直接照搬的,东西方环境有差异。巨大的成功离不开时代背景,决策时不要被少数成功的光环所迷惑,总体的情况才是可信的。

    居然说了这么多空话……
    chloerei
        26
    chloerei  
       2011-03-18 14:02:00 +08:00
    @momo5269 这本书我没看过,看其他pythoner意见了: )。挑书可以相信直觉,翻翻目录看充不充实,看看作者的文字合不合胃口。有人喜欢严肃的书,我就喜欢语言比较轻松的书。挑好了就一本看到底不要三心两意,当然,发觉自己真的被坑了就上豆瓣打个一星。

    别看这本:《dive into python》,专门用苦涩的语法晒优越。
    Aragon
        27
    Aragon  
       2011-03-18 14:05:23 +08:00
    @momo5269 电子书能不看还是不看为好,阅读,特别是学习,最好还是纸质书。如果偏要看电子书,那么最好用Kindle或者iPod Touch这类设备看。

    我自己就是个用电脑看电子书看到后来成看网页的过来人。后来还是购买实体书看,觉得踏实。
        28
    bigzhu  
       2011-03-18 14:09:04 +08:00
    用 python 是对的.适合初学者,但是也可以学的很深.
    不要死看书,自己写些小程序和脚本.
    momo5269
        29
    momo5269  
    OP
       2011-03-18 14:11:59 +08:00
    @BB9z 谢谢!原书绝版了....淘宝商城的可信吗?
    @Aragon 我觉得也是实体书踏实,看屏幕时间长了就浮躁......
    xsmile
        30
    xsmile  
       2011-03-18 14:12:23 +08:00
    关键要动手,在实践中自然就会发掘和学习到深层次的东西。语言什么的,真的要看你的工作性质了...
    Sean
        31
    Sean  
       2011-03-18 14:13:00 +08:00
    我觉得学习编程从选择哪门语言开始入手,不是好的开端。
    学习编程是为了让计算机按照我们要求去运行,那么我们的要求就不能异想天开,要在计算机能力范围内的,所以要了解计算机的"能力"。
    明确自己的要求,"为了学习编程",找到与自己要求相近的一些应用。了解这些应用都是使用什么语言开发的?如果开发的?这些语言比较的话各有哪些优缺点?
    然后,选择一眼就相中的那个语言,去边学习边实现自己的相法。
    选择语言的时候,只要你相中,就觉得舒服就可以了。与选女朋友一样,不需要说出来一、二、三点理由的。我就是喜欢,怎么样着吧。有人觉得python优雅、有人觉得丑陋。只要你喜欢就行了!
    momo5269
        32
    momo5269  
    OP
       2011-03-18 14:13:30 +08:00
    @BB9z 那只是个大概路子,其中很多东西还是需要从电子书和百科维基里参考的。
    @bigzhu 谢谢!
    chloerei
        33
    chloerei  
       2011-03-18 14:16:55 +08:00
    @Sean 表扬一下我这个Rubyer去给别人推荐Python吧~
    momo5269
        34
    momo5269  
    OP
       2011-03-18 14:19:54 +08:00
    @xsmile 我现在是眼高手低.......虽然知道行动很重要,但很害怕走错了路...因为之前犯过类似的错误
    @Sean 我是接触的多了才很迷茫的,我想找一个适合无基础新手的语言,之后学其他的就不会很难了.......选择语言是为了开始,之后还是要接触学习许多其他语言的。我接触的应用或者游戏用什么语言的都有,接近自己想法的不知道是什么编的......倒是知道一个是Delphi的。
    Aragon
        35
    Aragon  
       2011-03-18 14:25:40 +08:00
    @momo5269 对于选择语言的问题,楼主看看这个,可能有点启发http://www.cnblogs.com/bitfan/archive/2011/03/13/1982744.html
    momo5269
        36
    momo5269  
    OP
       2011-03-18 14:35:24 +08:00
    @Aragon 谢谢,看来就是Python了。我因为高中离校,所以数学不行,我有本教我老师上大学计算机系时的Pasca程序设计(第二版)l,却看不懂稍微深一点的问题(涉及到线性代数与图论)......
    ray58750034
        37
    ray58750034  
       2011-03-18 14:42:28 +08:00
    Java适合初学,因为严谨。 学Java有两个结局, 一是有了编程思想, 以后改任何语言都可以; 二是没学到编程思想, 以后只要按部就班还是可以写简单的程序。 学Java基本上不会出现彻底不会编程的人。
    Python适合已经有程序思想的人, 它比Java更像编程语言,说白了,用好Python要天赋。

    Java设计的目的就是为了批量学习、批量生产。 而Python Ruby 这类很动态的语言是由一群很有个性的人组织起来的,所以要想加入他们,就必须先接受他们的思想,不然很难有进展。

    然后语言的诞生都是有其应用目的的,可以从自身需求出发,找到适合自己的。 如果是以编程入门为主,Java挺好的, 尤其是Java的设计一直很规矩,日后转其他语言都用的上。
    spark
        38
    spark  
       2011-03-18 16:33:47 +08:00
    纯WEB而言,php和python哪个更适合入门?
    chone
        39
    chone  
       2011-03-18 16:51:38 +08:00
    python好,容易上手却又强大。
    如果觉得python直接上有点难,不妨先学学html先建立一个认识。
    c不太推荐
    xsmile
        40
    xsmile  
       2011-03-18 17:12:09 +08:00
    @ray58750034说的非常好,非要选个语言的话,就选择java吧。掌握了java,其他语言不在话下。
    bigbrother
        41
    bigbrother  
       2011-03-18 17:17:29 +08:00
    学C打打基础吧

    我遇到一个半路学编程的,直接学PHP,居然不知道对一个变量重新赋值,会覆盖掉原来的值,悲剧啊
    chloerei
        42
    chloerei  
       2011-03-18 17:34:45 +08:00
    @bigbrother 函数式编程没有变量,算不上悲剧
    bigbrother
        43
    bigbrother  
       2011-03-18 17:37:16 +08:00
    @chloerei 函数式编程没有变量是啥子意思呢,第一次听到这个说法,不要笑我菜。。。
    chloerei
        44
    chloerei  
       2011-03-18 17:43:51 +08:00
    @bigbrother 比如 Erlang 里面,它给一个变量赋值

    > A = 1.
    1

    之后这个变量就不能再赋值,否则会抛出一条异常

    2> A = 2.
    ** exception error: no match of right hand side value 2

    实际上 = 号不是赋值操作,是匹配运算。对于只学过数学的人,可能对这种 = 号更容易理解。
    Jet
        45
    Jet  
       2011-03-18 17:52:45 +08:00
    1、不管学什么语言,不要偷懒,把书上的每个例子都敲一遍。(python我用这个方法3天搞定。)
    2、C是必修。
    3、不要学C++,无比垃圾的语言。
    too
        46
    too  
       2011-03-18 19:07:39 +08:00 via iPod
    本帖很多信息,请允许我mark一下
    bcxx
        47
    bcxx  
       2011-03-18 19:09:56 +08:00
    @Jet 看到第3点我笑了...

    还是从python开始吧,比较好上手,楼主加油!
    Ricepig
        48
    Ricepig  
       2011-03-18 19:41:04 +08:00
    看《计算机程序的构造和解释》书和相关OpenCourse视频

    至少学习一门命令式的语言(Imperative Language),比如C

    至少学习一门函数式的语言(Functional Language),比如Javascript或者Lisp

    然后动态语言啥的就看爱好了
    momo5269
        49
    momo5269  
    OP
       2011-03-19 06:54:06 +08:00
    @Ricepig 我也是这样想的,但是有人告诉我《计算机程序的构造和解释》对我太早了,所以我才写成7楼那个样子
    @chone 我学过一点点HTML,但是因为是看网页,做各种机械的例子,没坚持下去。倒是给希望帖子、文章时使用HTML代码打下了基础.......

    大家的建议(指入门)基本分为Python、C和Java。其中Python最多,C都说是必修。所以我还是那么想的,先学Python,差不多了就学C,然后再填补计算机原理等知识,再学Lisp。同时保持使用Python来做事情。
    momo5269
        50
    momo5269  
    OP
       2011-03-19 14:05:43 +08:00
    除了用Python 2.7,JetBrains PyCharm怎么样?
    kejinlu
        51
    kejinlu  
       2011-03-19 14:09:38 +08:00
    @momo5269 决定下来之后,不要顾虑这样顾虑那样。 不管什么时候你都无法绝对的做好准备。从现在开始,安装好编译器运行环境,找一段代码运行起来,然后慢慢理解。这个时候你必然回去翻看语法
    bcxx
        52
    bcxx  
       2011-03-19 14:14:02 +08:00
    @momo5269 那些都是IDE,挑一款适合自己的用就好了
    leafsong
        53
    leafsong  
       2011-03-19 14:29:16 +08:00
    哈哈,好好的论坛不做,跑这里来发,鄙视一下
    如果你真想学编程,首先要问自己的一件事
    我学编程想做什么,或者说是,假如自己已经是个编程高手,第一件事要做什么
    momo5269
        54
    momo5269  
    OP
       2011-03-19 14:44:57 +08:00
    @kejinlu
    @leafsong 因为我在群里问,得到的回答是啥都有....................
    leafsong
        55
    leafsong  
       2011-03-19 14:52:15 +08:00
    @momo5269 呵呵,你还没回答我问题呢,看我能不能帮你
    momo5269
        56
    momo5269  
    OP
       2011-03-19 15:19:54 +08:00
    @leafsong 做什么答案不是说了吗?游戏和应用。应用主要是我以前总是感觉手头的一些工具不好用,想自己做,还有很多需要解决的问题什么的,这些都是做应用的目的。游戏则是独立游戏,这个不用我多说吧?
    lychee
        57
    lychee  
       2011-04-05 21:35:10 +08:00
    其实啊 就个人感觉C和python都很值得学习的 楼主就大胆开始吧 有时候制定太遥远的计划根本没什么用 计划赶不上变化 学完书上的基本知识之后就可以找个结构良好的小程序 研究一下他 试着扩展它 或者重新实现一个 实践出真知呢
    OnlyBlue
        58
    OnlyBlue  
       2011-10-03 20:06:59 +08:00
    单纯讨论哪种语言好有意义吗?我觉得重点是这一句话:"我是准备做一些小的应用和独立游戏"。所以我建议楼主应该看看开发小的应用和独立游戏的主流的语言和工具是什么,再从中选出适合自己的,这样不好吗?
    Echoldman
        59
    Echoldman  
       2011-10-03 20:18:14 +08:00   1
    如果是长期学习、不是快速突击的话,先学习C语言是非常正确的,你看看其他什么C++、Java、Python、Objetive-C等等,完全是都需要C语言的基础知识的
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     4020 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 85ms UTC 04:09 PVG 12:09 LAX 20:09 JFK 23:09
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86