签到

05月06日
尚未签到

共有回帖数 0

    做月子

    等级:
    基础的重要性(程序员之路)
    学习编程有几年了,感觉走了不少弯路,而不少的学弟学妹又在重蹈我当初的覆辙,不免有些痛心。最近在网上也看了许多前辈们的经验建议,再结合自己的学习经历在这里谈谈基础的重要性,希望帮助大家少走些弯路。
    什么是基础呢?就是要把我们大学所学的离散数学,算法与数据结构,操作系统,计算机体系结构,编译原理等课程学好,对计算机的体系,CPU本身,操作系统内核,系统平台,面向对象编程,程序的性能等要有深层次的掌握。
    初学者可能体会不到这些基础的重要性,学习jsp,donet,mfc,vb的朋友甚至会对这些嗤之以鼻,但是一开始没学好基础就去学jsp或donet会产生很坏的影响,而且陷入其中不能自拔。
    我上大二的时候还对编程没什么概念,就上了门C++也不知道能干什么,老师说MFC也不知道是什么东西,看别的同学在学asp.net就跟着学了,然后就了解到.net,j2ee,php是什么了,就觉得软件开发就是用这些了,而上的那些专业课又与我们学的sqlserver啊,css啊,ajax啊,毫无关系,就感慨啊,还不如回家自学去就为一个文凭吗?
    还不如去培训,浪费这么多钱.于是天天基本上没去上什么课,天天就在做网站,几个学期就做了三个网站。感觉做这些网站就是学到些技巧,没什么进步,这些技巧就好比别人的名字,告诉你你就知道了,网上也都可以搜到。那时候就觉得把.net学好就行了,搞j2ee的比较难,搞api编程就别想了,操作系统更是望尘莫及了。后来随着学习的深入和看了网上许多前辈们的建议才对这些基础的重要性有所体会。
    虽然.net或java的开发并不直接用到汇编,操作系统这些,但是不掌握这些基础是有很大问题的,因为你只知其然不知其所有然,在mfc和.net里面控件一拖什么都做好了,很方便,但是出了问题可能就解决不了,有些在网上搜都搜不到。这就是基础没打好,不知道它的原理就不知道出错的原因。在学.net的时候常会讨论那些控件该不该用别人说尽量别用也不知道为什么?不让用是因为你在高层开发,你不知道它的原理出错了你可能解决不了,但其实是应该用的,不然人家开发它干嘛,但要在了解它的原理后去用就会很方便。
    要编写出优秀的代码同样要扎实的基础,如果数据结构和算法学的不好,怎么对程序的性能进行优化,怎样从类库中选择合适的数据结构。如果不了解操作系统,怎样能了解这些开发工具的原理,它们都是基于操作系统的。不了解汇编,编译原理,怎么知道程序运行时要多长时间要多少内存,就不能编出高效的代码。
    如果没有学好基础一开始就去学.net,java这些越往后就会觉得越吃力,它们涉及的技术太多了,而且不但在更新,对于三层啊,mvc,orm这些架构,你只会用也不明白为什么用,就感觉心里虚,感觉没学好。而你把面向对象,软件工程,设计模式这些基础学好了再去看这些就可以一不变应万变。
    大家不要被新名词、新技术所迷惑.NET、XML等等技术固然诱人,可是如果自己的基础不扎实,就像是在云里雾里行走一样,只能看到眼前,不能看到更远的地方。这些新鲜的技术掩盖了许多底层的原理,要想真正的学习技术还是走下云端,扎扎实实的把基础知识学好,有了这些基础,要掌握那些新技术也就很容易了。
    开始编程应该先学C/C++,系统api编程,因为它们更接近底层,学习他们更能搞清楚原理。学好了c/C++编程和基础,再去学习mfc,.net这些就会比较轻松,而且很踏实。假设学习VB编程需要4个月,学习基础课程和VC的程序设计需要1年。那么如果你先学VB,再来学习后者,时间不会减少,还是1年,而反过来,如果先学习后者,再来学VB,也许你只需要1个星期就能学得非常熟练。
    编程就好比练功,如果学习.net,mfc,vb等具体的语言和工具是外功(招式),对基础的学习就是内功,只注重招式而内功不扎实是不可能成为高手的。很多人会认为《射雕英雄传》中马玉道长什么都没有教郭靖,马道长教的表面看来是马步冲权实则都是内功心法,郭靖拜师洪七之后开始练习降龙十八掌凭借的就是这深厚的内功,吞食蝮蛇宝血又加上练习了周博通传授的九阴真经和外加功夫双手互博技之后,终于练就行走江湖的武
    功,由此可见马玉道长传授给了郭靖的是最基础的,也是最重要的观念,编程也好比盖高楼,根基没打好早晚有一天会挎掉的,而且盖得越高,损失也越惨重。这些底层知识和课本不是没有用也不是高深的不能学,而是我们必须掌握的基础。
    这些是个人的愚见,说的不是很清楚,大家可以看看这些前辈们的经验,相信看完后大家一定会有所体会的。说了这么多无非是想告诫大家要打好扎实的基础,不要只顾追求时髦的技术,打好基础再去学那些技术或是参加些培训,对自身的发展会更好的。
    基础这么重要怎样学好它呢?我觉得学好它们应该对照这些基础课程所涉及的方面,多看一些经典书籍,像算法导论,编程珠玑,代码大全等,这些经典书籍不仅能帮助我们打好基础,而且对我们的程序人生也能产生莫大的影响,相信认真研究看完这些书籍后,我们的程序之路会十分顺畅。然而这些书籍并不好读,有些甚至相当难读,国内的大学用这些书当教材的也不多,这些书又偏向理论,自己读起来难免会有些枯燥无味。于是就想到建一个论坛,大家共同讨论学习这些书籍,就会学的更踏实更牢固更有趣,这样就能为以后的学习打下扎实的基础。

    上书单:
    1.计算机科学概论
    计算机科学概论

    2.计算机数学基础
    高等数学
    线性代数
    概率论与数理统计
    离散数学及其应用
    离散数学教程(北大版)
    什么是数学
    具体数学:计算机科学基础
    3.C语言(原文中有谭浩强的书,但我把他删除了,因为这本书的编程习惯太恶劣了,看这本书的人基本上是研究回字有几种写法的人)
    C primer plus(本人朋友推荐,但由于我没有准备学C++,所以我个人没有推荐)
    The C programming language(个人推荐)
    C和指针
    C专家教程
    C陷阱与缺陷(个人推荐,尤其是使用C++的必看)
    c语言解惑
    C标准库
    你必须知道的495个C语言问题
    4.算法与数据结构
    数据结构(清华版)
    数据结构与算法分析—C语言描述
    编程珠玑(个人推荐)
    编程珠玑II(个人推荐)
    算法导论(个人推荐)
    计算机程序设计艺术卷1
    计算机程序设计艺术卷2
    计算机程序设计艺术卷3

    5.电子技术基础
    模拟电子技术(童诗白版)
    数字逻辑与数字集成电路(清华版)

    6.汇编语言(如果你想在编程这一行走的远,汇编是必学的)
    汇编语言(王爽版)
    80X86汇编语言程序设计教程
    Intel汇编语言程序设计
    IBM PC汇编语言程序设计(国外版)
    高级汇编语言程序设计
    保护方式下的80386及其编程
    黑客反汇编揭秘
    Windows环境下32位汇编语言程序设计

    7.计算机硬件原理
    计算机组成-结构化方法
    微机原理与接口技术(陈光军版)
    计算机体系结构(张晨曦版)
    计算机组成与设计硬件/软件接口
    Intel微处理器结构、编程与接口
    计算机体系结构(量化研究方法)
    编程卓越之道卷1
    编程卓越之道卷2
    深入理解计算机系统
    编码的奥秘
    8.数据库系统原理
    数据库系统概念
    数据库系统导论
    数据库系统实现
    高可用MySQL_构建健壮的数据中心(个人添加,其实Mysql数椐库是自由软件可任意使用,微软等其他大型商用数椐库与他相似)

    9.编译原理
    编译原理(清华第2版)
    编译原理及实践
    编译原理:原则,技术和工具
    现代编译原理-C语言描述
    高级编译器设计与实现

    10.操作系统原理
    操作系统概念
    现代操作系统
    链接器和加载器
    程序员的自我修养:链接、装载与库
    自己动手写操作系统
    操作系统设计与实现

    11.计算机网络(学计算机主要用于互联网,网络协议的必要性不言而喻了)
    计算机网络(Computer Networks)
    TCP-IP详解卷1
    TCP-IP详解卷2
    TCP-IP详解卷3
    用TCP/IP进行网际互联(第一卷)
    用TCP/IP进行网际互联第二卷
    用TCP/IP 进行网际互联第三卷
    12.软件工程和面向对象程序设计
    C++编程思想卷1
    java编程思想
    objective-C基础教程(学IOS开发必学)
    COCOA入门:使用objective-c(此书用作苹果MAC电脑开发使用,不过书中部分编程接口已经废弃学的时候要注意查看官方手册)
    GTK+程序设计(LINUX下的两个图形开发终端之一)
    GTK+编程范例(LINUX下的两个图形开发终端之一)
    软件工程(Software.Engineering)
    软件工程:实践者的研究方法
    深入浅出面向对象分析与设计
    head first设计模式
    道法自然:面向对象实践指南
    面向对象分析与设计
    敏捷软件开发:原则、模式与实践
    设计模式:可复用面向对象软件的基础
    测试驱动开发
    重构—改善既有代码的设计
    代码大全
    程序设计实践
    程序员修炼之道:从小工到专家
    卓有成效的程序员
    代码之美
    人月神话
    计算机程序的构造和解释
    观止-微软创建NT和未来的夺命狂奔
    代码优化:有效使用内存[美]克里斯・卡巴斯基
    编程高手箴言(梁肇新)
    游戏之旅-我的编程感悟(云风)
    13.windows编程基础 (由于个人使用微软VB十年却无任何进化空间,导致对微软的一切极其反感)
    Windows操作系统原理
    Inside Windows 2000
    深入解析Windows操作系统
    天书夜读:从汇编语言到Windows内核编程
    windows程序设计
    WINDOWS核心编程

    15.Linux/unix内核源代码和驱动程序
    Linux内核设计与实现
    LINUX内核源代码情景分析
    深入理解LINUX内核
    Linux内核完全注释
    Linux设备驱动程序

    16.C++语言(由于我的面向对象编程用的是Objective-C,这部分我是原文照抄)
    C++编程思想2
    Essential C++
    C++ primer
    C++程序设计语言
    C++语言的设计和演化
    Accelerated C++
    Effective C++
    More Effective C++
    Exceptional C++
    More Exceptional C++
    C++设计新思维
    深度探索C++对象模型
    C++沉思录
    C++ Templates: The Complete Guide
    C++ FAQs
    17.标准库STL使用
    C++标准程序库
    Effective STL
    泛型编程与STL

    18.STL源代码
    STL源码剖析

    19.java语言(安卓基础,个人血的教训,学完JAVA后,才能学安桌,不然程序只有外观,无内容)
    java编程思想
    Java编程规范

    20移动终端(个人添加)
    Android开发应用开发详解(安桌方面我只看过这本书)
    ipad and iphone app development(这不是一本书,是ITUNEU的一门免费课程,学之前一定要先掌握objective-c,英语要过四级)

    22游戏开发工具(个人领域不在这方面,我只列出开发工具)
    Cocos2D-x
    Unity3D

    楼主 2016-05-06 12:45 回复

共有回帖数 0
  • 回 帖
  • 表情 图片 视频
  • 发表

登录直线网账号

Copyright © 2010~2015 直线网 版权所有,All Rights Reserved.沪ICP备10039589号 意见反馈 | 关于直线 | 版权声明 | 会员须知