听说做一个成功的程序员需要精通数学,页小弟我是一个学医的中专生,没有学过高中数学!该怎样学好数学

听说做一个成功的程序员需要精通数学,页我是一个学医的中专生,没有学过高中数学!该怎样学好数学?
听说做一个成功的程序员需要精通数学,页我是一个学医的中专生现在转计算机了,没有学过高中数学!直接学了asp,结果惨了,学习新的语言如VC/C++就学不下去了? 我该怎么办,我的数学知识需要从什么级数开始学起,需要先学高中一\二\三年级的数学吗? 有没有专家可以提供,关于学好计算机数学的所有课程和书籍啊? 应该如何去学,先学什么,再学什么,可以按学习顺序编排出来给我吗? 先谢谢了?

------解决方案--------------------
关键看 成功 和 程序员 怎么定义了?
首先看看程序员这个定义,有些人把开发人员统称为程序员,这样的人可能 是 多能型的人物, 从架构设计,算法设计,编码 通通可以搞定。若是达到这个级别,是需要很好的数学能力,退一步,即使数学不是很好,逻辑思维能力一定很好才行。

有些人把开发人员分为系统分析员,高级程序员,程序员等。如此,则程序员指用代码去实现 指定算法和接口(按照要求编写一个一个的函数)人。印度人称,程序员是一个蓝领,高中生即可胜任。如果按照这个定义,程序员并不需要太强的数学知识和逻辑思维能力。

另外,不同行业的软件开发对 逻辑或者数学能力 要求也不尽相同,如MIS系统,包括使用.net, asp 设计一个小型的MIS系统,不见得需要多强的数学知识,而对于操作系统,图形图像处理,模式识别,人工智能,数值计算则需要很强的数学知识或者逻辑思维能力。
  
毕业已经十多年了。在实际工作中发现,一般的编程工作并不需要高中以上的数学知识,但是在软件开发中 确实需要 较强的逻辑思维能力,抽象能力。 抽象能力差的人把简单的工作复杂化。一个简单的功能竟写出了大片的代码,逻辑混乱,goto 语句满天飞。 而抽象能力好的人,模块的划分非常清晰,可以将复杂的工作简单化,模块复用性高,耦合性低。这种能力和数学好坏可能没有严格的本质的关联,需要在编程中逐步强化,凝练。只有有心,勤于思考,不满足现状,喜欢重构,喜欢阅读/分析别人的代码,你的程序设计能力会逐步提高的。现实生活中经常见到,在软件开发中,一个专科生可以写出比博士生更好的代码。
  
对于软件开发而言,数据结构,面向对象 等程序设计方法和思想可能比数学本身更重要。

对于计算机这个专业,
经院派 认为 在学习计算机专业可之前,需要学习一大堆数学知识,而各种编程语言在用时再学业不完。按照这种教学法,普通人(非牛人)在校时间被大部分数学和各种专业课所累,到毕业时,编程能力很一般,无法立即投入到实际开发工作。不过,这种观点也不错,但这种教学法比较适合培养精英人物。
实战派认为,不必把大量时间浪费在将来可能永远也不会用到的 数学知识上,从一上大学开始就用尝试用最新的开发工具写程序。等毕业时可以立即使用最流行的开发工具参与项目的开发中去。
  
前段时间有一场沸沸扬扬的论战,袁峰代表前者,金旭亮 代表后者,各有一大堆 追随者,但到底也没有 争出高低。



  



------解决方案--------------------
先把高一,高二,高三的数学学完,然后学习高等数学,线性代数,概率论,然后学习离散数学,组合数学,工程数学,具体数学,然后学习数论和近世代数。具备了数学知识还要学习C语言和C++基础。学完C语言基础还要把数据结构,编译原理,操作系统这3们课程学好,特别是要多做下里面的一些算法题目。如数据结构要动手实现一些链表,堆栈,队列,二叉树和图类等等的相关算法。编译原理要做一些算法实验如文法分析,语法分析,语义分析的实验,最好能实现一个简单的编译器。操作系统要模拟实现银行家算法,鸵鸟算法,哲学家就餐问题算法和几种作业调度算法等。学完这些后还要学习一下算法的设计与分析,如递归与分治算法,贪心算法,分支限界法和NP完全性理论等。然后可以学习一下计算机图形学,数字图像处理,计算机密码学中的一些算法,比如:计算机图形学中的中点圆和中点椭圆算法,图形的缩放,平移和旋转算法,数字图像处理中的图像的边缘检测算法,离散余玄变换,快速傅立叶变换等等,计算机密码学中的MD5加密算法,RSA算法和DES算法等。然后看一些人工智能和人工神经原网络方面的算法,如遗传算法,退火算法,A*算法等。有兴趣的话还可以看下模式识别。如果想更全面地学习计算机还要学习下计算机网络,数据库原理,计算机体系结构,微计算机接口技术,软件工程等方面的知识。最好对Linux下的程序设计有所了解,比如可以看下Linux下的开源项目,Linux内核的源码,Linux的驱动程序编写以及嵌入式Linux方面的东西。对java和C#也应该有所了解。比如熟悉java中的一些开发框架如struts,Hibernate,Spring等等,当然同时也要熟悉JSP。如果对软件加密解密和软件逆向工程感兴趣的话还要学好汇编语言。另外数字电路技术,模拟电路技术,信息论和通信原理也应该学好,这样才可以将软件与硬件结合起来。
一些必要的教材就不多介绍了,这里重点推荐几本关于数学和算法的书。有了大学数学的基础后,学习数学可以看下吉米多维其的题目。算法可以看《算法导论》和《计算机程序设计艺术》这2本书都很经典。