请教下,如何系统的自学编程知识?

  • 总是注册不成功
    您自己也可以试一下
  • z
    zenodante
    目前自学了c和arm汇编,一直在写cortex m4上的图像引擎。。。兴趣最重要,有兴趣的目标最促进学习了
  • f
    ffcactus
    还有人怀疑学习些硬件知识、汇编、C以及操作系统原理的重要性。可见半吊子程序员还是不少的。
  • 2
    2047
    我不知道你说的基础指的是什么,如果是你说的socket、多线程那随便一本教你零基础开发的都会有提到,如果是ff大神说的汇编、计算机原理之类的话,抱歉LZ现在需要的是多做东西,而不是你所谓的“打好基础再来开发这样能提高工作效率避免进度缓慢”,不明白对一个初学者树那么高门槛干什么
  • t
    tobewind
    拜托你别混淆概念,对楼主来说,这些重要吗?C和操作系统原理倒还罢了,汇编又有什么必要?
  • g
    godzillaqqq
    汇编、C 重要,但不是初学者看的,你随便整个CODE出来跑跑先,能顺利跑完再来谈效率优化编程到了一定境界自然就会想去学汇编、C 刚入门说这些就是扯谈
  • l
    lvcha
    半路出家的悲哀就是:
    没有工作经验没人要你,没人要你就没有工作经验。 把这个环破了就行。

    学什么都是按需要来的。
    全是工具。
    拥有思想一切都手到擒来。
  • 蜜桃精小勺
    “在信息时代,客观障碍已不复存在,所谓障碍都是主观上的。如果你想研发什么新的技术,你不需要几百万美元的资金,你只需要在冰箱里放满比萨和可乐,再有一台便宜的计算机,和与之献身的决心,你即可拥有任何你想拥有的编程深度!”
    ——————————约翰 卡马克
  • 望远镜一代
    msrk
  • f
    ffcactus
    你没看楼主自己也说了吗, 很多东西看上去会, 但是就是说不出个所以然来。 归根结底就是背景知识太少,基础知识缺乏。
    我之前说学学汇编,但不强调实践,指的是你可以不亲自去写汇编,但是得了解计算机程序到底是以什么方式运行的,你的一条语句对应于哪个汇编语句。

    等你了解汇编了, 那啥高级语言都差不多, 无非就是写法不一样罢了。
    等你了解汇编了, 你会知道为什么一个程序这样些会运行快些,那样写会运行慢些。
    等你了解汇编了, 你会了解所谓的指针,引用到底是怎么回事。
    等你了解汇编了, 最重要的是在你脑海里程序和机器之间将会搭建一个桥梁,虽然这个桥梁很难直观的感觉到, 但他就是存在。 这就好比当你许好了物理,再去学化学;学好了生物学再去学社会学一样。
  • f
    ffcactus
    你所谓的多做东西就是把别人的代码拿来然后上网查查资料,再东改西改,最后弄成自己可以用的吧。你这样就算是做10个项目,最后肯定还是说不上个所以然来,至少你去稍微好点的公司面试想通过都非常难。
    若是想自己慢慢搭建个简单的东西,以此来深入了解来学习,那基本上也是不可能。你没广泛的基础知识根本搭建不出来。
    说白了就是你基础有多牢,就能走多远。
  • X
    X9999
    +1
    我就是,野路子出生搞C++
    操作系统和计算机组成都没看过,吃了一大堆亏。

    就如同上面的人所说的,最快的入门方法就是找个项目来做,遇到不懂的地方才去学。
    看再多的书没用要实践才能明白。

    [本帖最后由 X9999 于 2013-3-11 11:35 编辑]
  • l
    lvcha
    看你搞什么了。搞c++的话对底层有些要求。
    搞上层的话其实要求一般。
    研究研究软件架构,编程思想啥的其实也挺有意思。
    比如现在有人求你帮忙写套有特别需求的进销存系统, 怎么样写出个高效好维护的系统是个脑力劳动。
  • m
    maystrange
    看lz的意思是想自学打打基础
    那么建议找些经典的基础类书籍看看,数据结构,操作系统之类的书必看
    这些才是编程基础
    再有,学好c语言,c语言是伴随着UNIX系统发展起来的,而UNIX系统是编程世界的基石。
  • 求摸摸小手
    简单说几句吧,作为一个初级码农,讲一下我的理解,不一定正确,但也算是经验之谈,希望可以帮助到LZ

    首先,你说你的兴趣是做网站,所以,你要先明确下来,你是想做一个漂亮的网站给访客看,还是想去处理网站的数据

    如果是前者,你就要学习 HTML/CSS、javascript、ajax、PHP等等

    如果是后者,你还需要学习数据库数据库、框架、设计模式啥的

    在学习这些的过程中你还会接触到一些数据结构上的东西

    至于转手机开发的话,先学java或者C吧,有了这些基础之后,再学安卓或者IOS开发更容易一些,并且那时候,从观念上、思想上更容易接受一些

    顺便关于计算机的硬件知识、网络只是也需要有所了解

    至于eclipse的性质和工作原理,你不需要明白。。。等到了最后,你能看懂eclipse源码的时候,你自然会明白,而事实是,你不需要明白那些照样没问题

    建议你还是选中一门语言去学习吧,选中一门往死了学,等你学到半死的时候,再去学其他的,也就触类旁通很容易了,多嚼不烂

    暂时就想到这么多,希望可以有所帮助吧
  • s
    shiny
    单片机编程难还是电脑软件编程难?
  • 刘泪
    第一次听人说学好了汇编后高级语言会融会贯通的。高级语言是抽象的啊,完全掩盖了最底层的实现,一定程度上完全是一种逻辑的游戏,你从最底层去理解大脑还不乱成一锅?
    你学好汇编去理解C还好商量,去理解c++就已经吃力得要命了,你再妄图从汇编的角度去理解c#和java甚至python和ruby这些现代语言那是找死。
    别的不说,看你这样头头是道,你先给给大家讲讲怎么从汇编的角度理解模板?
    汇编是计算机的基础不假,要是按你说的得从汇编入手理解语言,我觉着还是从数学入手理解更快点。
  • 刘泪
    单片机的规模已经限制了它的难度不会是最高的那个。
    最难的不是实现,而是项目的架构,尤其是大型软件项目,前期架构上的不完善可能直接导致项目的流产。

    不过貌似现在漫天的写过两三年程序连基础语法都没掌握扎实的都自称架构师了。
  • m
    mitaosi
    单片机入门难;电脑编程新手建议先学python、javascript这类脚本语言和JAVA
  • m
    marsghost
    单片机跟硬件更紧密些,最好有一些硬件方面的知识。电脑软件的话因为操作系统把硬件都屏蔽起来了,所以和OS的API接口打交道会多一些。所以难点不太一样。不过从语言上来说,单片机用的C还是不太难的

    本帖最后由 marsghost 于 2013-3-11 23:13 通过手机版编辑
  • 0
    00的粉丝
    楼主如果数学逻辑不牛,就别学编程了
    而且都毕业几年了还搞编程没出路
    刚毕业可能由公司要你涨经验
    你现在毕业几年了没经验 谁要你啊,不要你又学不来经验
  • b
    birdie
    我觉得楼主还是仔细研究研究Python吧。

    别以为是一个脚本语言……其实啥都能干。相对而言结构严谨,同时各种实现也比较简单。

    另外推荐个网站 http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html
    看看现在的主流到底是些啥
  • h
    henvelleng
    1 现如今一种汇编都不懂的基本等同于不懂C。见过一些连C99标准都一无所知的所谓C程序员,恐怕他们是从来没见过真正的C代码项目是什么样的

    2 C++程序员确实让人从心底里害怕,原因在C++本身的矛盾,根本没完全抽象好,很多语法现象背后的事情要程序员自己明白,而这些破事涉及到cpu处理函数参数和返回值的一系列细节。于是现在大量的C++程序员把C++当成是有模板库的C在用而不自知,但写得却比C难看而狼狈很多

    3 见过乱套设计模式的,开口闭口设计模式,架构一炮污,直接吓尿

    以上纯吐槽,跟LZ一点关系都没有
  • 刘泪
    这C++都用到模板,你怎么都不好意思再说人家用的是C吧。
    恕我愚钝,我是真想不出长成C一样的模板……
  • h
    henvelleng
    模板只是模糊类型的一种方式

    实际上很多时候模糊了类型并不一定就是好事,比如C里面严格要求不能省略struct关键词,开源社区也强调不允许通过typedef来省略struct的书写,当然这也是因为C的struct不支持绝大多数运算符

    但不是说没有模板就不能实现泛型,就不能实现智能指针的引用计数了
  • f
    ffcactus
    我有说可以理解高级语言的所有内容吗?既然你搞IT的,逻辑怎么还如此混乱。
  • m
    mitaosi
    既然你搞IT的,逻辑怎么还如此混乱。
  • 那一枪的风情
    我可以负责地说,这个帖子里说话最靠谱的就是ffcactus,但是很遗憾:一来,这帖子里半吊子出家的码农太多,这些码农都是当年PHP、ASP、JAVA、.net一路走过来的,对包括计算机组成原理、操作系统、数据机构之类的基础知识接触不多,同时没做过汇编程序,而且从潜意识里比较抵制这些基础知识,从ffcactus给的建议最靠谱最踏实,但是在本帖里被喷得那么厉害就能看出来了;二来,看楼主的想法,似乎也是把自己的目标定位在这种半吊子码农上,也就是说学会一些基本的B/S开发、数据库开发、手机APP之类的开发技术就行了,这样的话,ffcactus的建议确实不适合楼主。
  • 刘泪
    你可以说最靠谱吧,也可以说最不靠谱。跟个刚进大学的人这么说倒是真靠谱,毕竟这些大道理啥时候抛出来都能吓唬人。
    但是你对一个已经工作N年的人再这么说,那就是让他直接学到老了。要注意人家楼主是想转行,等这些大道理啃完都老得没人要了……
    话说但凡科班出身的大多都要学汇编和计算机原理吧,出了社会写写javanet之类的人一大把,算不上是辱没门楣吧。
  • 那一枪的风情
    确实是这样的,现在太多程序员连基本的数学概念都没有建立起来,最突出的一点就是对算法的运用,不过你师兄口中的程序员,跟社会上那些写JAVASCRIPT、PHP、ASP,搞系统集成,编编数据库程序来讨生活、混饭吃的程序员不是一码事,他说的那种程序员的工作重点应该是注重于架构设计、算法研究等方面的,这种档次的程序员,在国内起码也是资深项目经理、系统分析师或者首席架构师这个档次了,如果是做学术研究,估计混个985副教授问题不大。

    [本帖最后由 那一枪的风情 于 2013-3-12 17:52 编辑]
  • l
    lvcha
    半吊子码农可耻的撸过
  • L
    Lucifer6E
    design pattern和algorithm是比较难的~但是学会了之后一生受用啊~
    不如去学学ios或者安卓开发吧~不然就Python~容易找工作啊~
    看书学编程不如看看GitHub什么的呢~书是学理念用的~

    [本帖最后由 Lucifer6E 于 2013-3-12 18:11 编辑]
  • l
    lvcha
    楼上几位估计其实钻牛角尖了。
    我们把编程换成“英语”吧,其实很像的,都是应用技术,也可以当作理论研究对象,对吧。
    对于中国人来学英语来说,
    2种人,一种是当作应用来学的,是用英语来做什么什么,跟老外聊天,看看原版小说,看看美剧啥的。
    一种是当作语言来研究的,研究语法,研究英美文化,研究语言演化,研究翻译的信雅达等等。

    第一种人要是想也可以靠语言吃饭啊。不过是靠语言作为载体来做其它的事情而不是精研语法或者英美文化等,譬如混外企。
    第二种人无疑是少数,第一种人牛逼了也可以努力提高自己转换成第二种人。第二种人当然很轻松可以胜任第一种人的工作。
    第一种人也需要第二种人的知识,但是,基本的就够了。

    好,回到“码农”身上。

    啥叫合格的码农?
    够用就合格。
    你想找码农的工作,你不会因为你的code能力来限制你在工作的发挥,就是合格。
    你想写代码帮自己完成某些事情,你不会因为你的code能力限制你没办法去做或者做的很痛苦,就是合格。

    反正我想要的我都会了,我不会的都是我不认为我现在需要的。
    我是第一类人,暂时没兴趣当第二类人。

    在回到“楼主”身上

    “至于说最后的目的呢,其实我自己是希望能达到一个能独立做开发的程序员的水平,甚至于有能力会转行去写代码。
    这里呢,又出现了由于知识不系统而出现的问题:我其实不清楚程序员的分工是什么样的。
    我不清楚做网站前端和后端的区别是什么,我也不清楚什么是设计什么是开发。

    就我自己来说,我自己的兴趣是做网站,同时也对 UE、UI 设计特别感兴趣。
    另外也希望学习到手机 App 的开发。”
    显然是第一类人。

    你们跟人家扯计算机原理,汇编干毛啊,
    不带这么欺负人的。

    楼主的需求很简单, 选个技能树,
    坑爹微软路就是.net
    名门正道就是我大java
    歪门邪道就是python ruby等等等。

    一路点到头就行了。
    做好了都是一样滴。点错了中间洗点也是简单滴。

    他们说的那些基本的,你就知道几种基本数据结构就行了。不用特别去学,正常的语言都会捎带手讲讲。
    重要的速度写起来,边干边学才好提高。
    学会了术,等你对道有需求了自然就会深入的。大学教的都是你没用到根本体会不到的。
  • l
    lvcha
    楼上对技能树评价完全是屁股决定脑袋,别做评选依据。
    楼主要是对java,python,ruby啥的感兴趣可以一起交流
  • o
    ohya
    如果真对编程感兴趣,建议读一下SICP,是曾经MIT计算机系入门课程6.001的教材。Peter Norvig,Paul Graham在amazon的评论说明了这本书的地位。
  • l
    lvcha
    楼上对技能树评价完全是屁股决定脑袋,别做评选依据。
    楼主要是对java,python,ruby啥的感兴趣可以一起交流
  • 鱼丸
    撸主? 你是不是感觉更混乱了?
  • B
    BlackGod
    做网站 涉及crud的 你选择任一编程语言 但我看楼主是偏重于前端的 那学学html5和css,js就好了 能用好你也是大牛了
  • l
    lizitaisha
    MARRRKKK
  • b
    birdie
    真正靠谱的评论来了……

    还是推荐楼主入我大Python神教,领略TOOWTDI(There's Only One Way To Do It)精髓对于半吊子程序员的巨大鼓舞。
  • b
    banditcat
    …………………
  • 黑色地板
    从数学入手,实机操做一下机械计算机,然后写一些machine codes。弄完这三样再去学汇编。否则会和ff一样基本功不扎实。
  • 愈液愈美丽
    喷了lz想做网站一帮人推荐学c和汇编,lz就跟着w3school和cousera学吧,推荐先学java,然后javascript,node.js和jquery,然后基本上就可以随便玩了,python什么的有兴趣就搞搞。不过不如多写程序强。推荐先学java一是可以搞android开发,二是java的编程比较规范易理解,上手不太容易写出“错”的程序来。然后针对lz的兴趣,javascript可以前后端一锅端了,jquery和node.js这种技术,几年之内也不用担心过时,而且国内的需求会越来越旺盛。
  • w
    will_ann
    楼主,看了不少前面同行的回帖(如果他们真的是程序员),现在也谈谈我的看法。
    如果你是想做做网站等一些偏应用层方面的程序,而且希望在短时间内有一些进步和成果,那么确实不用去看什么汇编,硬件体系结构之类的东西。去网上找个实例教程,弄懂,然后以这个为起点,慢慢向周围扩展学习。我相信很多程序员都是这样过来的,即使他没有系统学习过汇编和OS。这一点,我很同意2047版主的看法。
    在实践中学习,不会耽误你夯实基础。别听某楼所说的,又是汇编又是体系结构的,这些东西等你稍微做过一些项目的时候再研究也不迟(到那时候,你才会真的需要这些,现在不需要)。加油吧。
  • 再来一发
    计算机专业的路过,根据lz的背景给点建议

    如果lz是为了自己而学:

    初级:
    c++入门教材 (买本入门的,学习下c的语法和面向对象的思想,一开始别看c++编程思想这种太难的,这本书现在还在我家积灰)
    数据结构(用c++写的,学习经典算法,经典数据结构)---- 这所有书里,这本最重要
    (如果不喜欢c++,换jave之类的面向对象语言都行)

    中级:
    数据库
    TCP/IP 详解(有3本,是经典教材)(或者买本CCNA的中文版看下也行,对理解网络基本概念很有帮助)
    unix或者linux入门教程


    高级:
    操作系统
    图形学
    离散数学
    编译原理
    人工智能


    能自学到中级课程基本就算圆满了,以后学啥都不怕了,高级的几门课,特别是编译原理基本就是自虐。如果不搞理论研究,不需要自己做一个c++编译器出来,就不用看了。

    实战的时候baidu+google足够了

    其实看完这些,写出来的东西还是比较糟糕的,有良好的编程习惯和思考方式才是关键,这个实在没法教。lz自己做几个简单小软件后,应该就能学会了。

    另外:等级做的东西上点规模了,学习下算法的优化,版本控制,单元测试。

    [本帖最后由 再来一发 于 2013-12-22 23:23 编辑]
  • s
    shixn
    还在跟VC 6.0 mfc奋战的飘过…高深的一概不懂,够用就得
  • 不落凡尘
    一路下来
    看到连汇编都说出来,我简直喷了
    就好像有个人说要做顿饭,然后他教人种菜养猪一样。

    84L靠谱

    [本帖最后由 不落凡尘 于 2013-12-22 23:24 编辑]
  • 任豚
    我觉得,关键是要动手写,不写看得再多也没有用,当然我只会C,CPP,FORTRAN
  • a
    alexacc
    LZ想系统学一下编程知识,居然有人告诉他不要学C,笑死我了。