怎么才能成为一个优秀的程序员

从零开始,需要的基础知识有哪些(包括数学,和硬件方面都有那些?)?
以后打算靠这个做一番事业,现在都有哪些方向呢?
最后请推荐一些书籍,谢谢了
非专业人士无开尊口= =
3个问题
1、数学和硬件的基础知识需要准备哪些
2、什么研究方向比较好
3、推荐一些书籍,自学用

我转别人的,我也是初学,我觉得说的蛮好的

如果你是一位想学习编程的朋友,我经过多年的学习总结出来了一个学习的线路希望对你有所帮助。要学习编程是要有很大恒心和毅力的,首先你要明确自己的目标,想好自己编程是为了干什么。如果你学习仅仅只是一时想编出QUAKE和成为比尔盖次的冲动,那么我劝你还是不要开始学习,因为这样的目标很难支持你日后大量的学习。而且你的年龄不能太大(最好是中学或者大学生)。如果你想好目标并决定开始奋斗,那就让我们开始吧。如果你一开始对电脑一无所知,那么你应该先熟悉一些电脑的一些最基本的原理和操作,这个不需要特别细致的学习,只要大概知道二进制和一些基本操作就可以了。接下来你应该先学习BASIC语言,这个语言并不会耽误你太多的时间,学习它完全是为了入门,让你对电脑编程有一个比较初步的认识。这时候你应该多编一些小的程序,知道一些最基本每条语句的功能,搞清楚一些基本的数据结构(尤其是数组)对于一些其余用途的函数最好不要做任何学习,因为这样只会分散你的注意力。当你能够可以熟练的运用BASIC编出猴子选大王,以及电脑出题考试之类的程序时,你就可以开始后面的学习了。接下来如果觉得自己接受能力强的话就可以开始学C了(注意不是C++),如果感觉有困难也可以先学Pascal过度一下。还有很重要的一点就是千万不要一开始就学VB,DELPHI,VC之类的东西,这些东西在一开始学会对你造成很坏的影响。有可能会把你引入另外一个错误的学习方向而忽略了真正应该掌握的东西。学C主要是学过程话的程序设计,学会把自己的程序分成许多的函数(或过程),养成良好的编程习惯。这时可以多看一下高人的程序,不一定要懂意思,主要是学会别人程序的格式(比如变量如何起名,怎么划分函数)。除开掌握基本的控制流语句外,应该学习一些很简单的I/O函数和数学函数。C的学习主要是你舍弃原来BASIC程序那种把所有语句积成一大堆的风格,要学会使用函数,提高代码重用性。对于指针之类的东西如果实在看不懂可以先不去管,到后面会有办法。当你能够比较自如的用C编写一些小的计算程序时,你就可以开始你的数据结构的学习了(数学的学习主要是在学校,自己要多用心)。数据结构你可以一点一点漫漫看,并不需要专门空出一段时间来专门研究,这样的目的是让你能够很好的掌握它,要学会用数据结构的知识来规范自己的程序设计和提高程序的效率。学完C我认为接着最好学习汇编。这个或许有许多人都会反对,然而我个人认为这样是很好的。从最基本的DOS汇编开始,买本《IBM PC汇编程序设计》(清华黄皮)一定要一点一点吃透,实在看不懂就跳,反复的严读是一定可以看懂的。汇编是一定要掌握的,因为它涉及到很多最基本的知识。掌握了汇编和对I/O有了个很彻底的认识后,应该去学编译原理。这个东西并不要精通,但是一定要知道,在大脑里要有一个这样的概念,这对你对程序语言的控制能力都有很大的帮助。这样最基本的学习就算完成了。一般智力正常的人前一段东西应该都是可以掌握的。接着后面的学习就要看你自身的造化了。这个时候你应该研究一下数据结构,不要分散自己学习的注意力,要知道数据结构是异常重要的(相信我,绝对没错)如果你觉得自己已经对于树,连表,堆栈之类的东西和排序,递归之类的算法已经十分清楚,就可以开始学习C++了。学习前一定要有个正确的认识,那就是C和C++是两个不同的东西。学习C++是为了学习面向对象的程序设计,这个时候你对于指针应该也能够掌握了(有汇编的基础),主要抓住C++和C相比的一些新特性,对于多态之类的特性要注意理解掌握,如果没有搞懂就坚决不要往下学习。一些基本的概念掌握以后可以看一些别人设计的程序,学习别人怎么利用面向对象的方法来设计程序的。这个东西也是人之间拉开档次的一个环节,可以和数据结构放在同等重要的地位。我就见过有的人都大学毕业了还搞不懂virtual到底是怎么一回事情。其实我认为学到这里你已经为你成为一个优秀的程序员打下了很好的基础,你已经能够应用C++,懂得面向对象程序设计,对数据结构掌握很好,掌握汇编和编译原理。接下来的学习就是基于操作平台的了,一般是先学windows(Microsoft毕竟是老大),先学win32 api,搞请windows基本消息机制和原理,有汇编基础基本上不会碰到什么困难。其实只要会了API,其余什么MFC,VCL都是囊中之物了,都不过是对于API的封装而已。VC,C++Builder都可轻松拿下,这只是开发工具的问题。以后的OLE(ActiveX),.NET,数据库就要看自己的发展方向而定了。我在这里强调的是前面的基本能力的学习,后面操作平台虽然知识体系庞大,然而毕竟比较死,更好掌握。最后编程能力的高低主要还是有以下几点决定:1。编程的习惯 2。数学能力(包括逻辑思维,分析问题的能力) 3。对数据结构的认识能力 4。经验的多少(包括多使用语言的掌握能力)
温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2018-08-29
1、迷恋技术,保持对代码的热情

兴趣是最好的老师,如果不是最初对编程充满兴趣,应该很少有人会选择程序员这个行业,但同时程序员是一个有点乏味枯燥的工作。如果你不迷恋技术,对代码充满热情,那你只能做一个平淡的程序员。
2、在实践中成长,磨砺技术
程序员是一个在实践中成长的职业。你看再多书,听再多的视频课,自以为学到很多东西,但正在接触项目的时候,就两手发软,头脑空白了。最好的提方法,是正在参与到项目中去,最好是能参与从设计到开发到测试到维护一整套的整套流程。

3、加班虽苦但也是提高的过程
虎虎在之前的文章中说过:毕业之后的前三年最为重要,要认认真真钻研技术,积累经验,至少能在某一方面成为技术达人。程序员加班是很正常的事情,要加班工作,加班学习,同时在这段时间要注意多总结,注意工作方法,合理安排时间,提高工作效率。你现在的付出是为了以后的成功!
4、不怕失败,学会寻找成就感
新程序员由于技术水平、经验的欠缺,写出的程序bug多,执行效率低,可能被同事嘲笑(我发现这还是普遍现象),然后被上司责怪,内心充满有挫折感。要学会自我减压,相信挫折与失败只是暂时的,发奋图强。在工作中要学会寻找成就感,哪怕你只是完成一个小功能,优化了一段代码,都是你辛勤付出的结果,是你能力提高的体现。
5、要学会写文档
不要以为程序员只要负责写代码,如果是那样,你永远不能有上升的空间了。因为不管是走技术路线,还是管理路线,都离不开文档,方案文档,技术文档,产品介绍文档,管理文档等等,是你了解开发流程,产品运营的必由之路。
6、学会复制粘贴
现在的开发资料已经非常的充实,遇到难以解决的问题不要过分纠结,为难自己,请打开搜索引擎搜索一下。毕竟,你做的是工作,不是在学校做研究。
7、细节决定成败
不少程序员都有这样的习惯,好不容易思考出解决问题的方法,迫不及待的把代码写出来,功能也实现了,立马提交代码完事。殊不知你的代码中还有不少细节需要完善,大到内存泄露、资源释放、代码是否高效,小到注释是否规范,都是你必须关注的问题。且不谈这些细节问题对你做出来的项目的影响,就是对你编程习惯的影响也是深远的。本回答被网友采纳
第2个回答  2010-12-29
一 :程序开发人员一定要具备一定的英语能力,任何一个程序员的成长都需要

一定的编码能力,如美工、测试、数据库维护等;像你说的数学或者硬件知识则
要有初步的了解就可以,在开发不同的项目都会有专门的人员对你进行业务和流
程的说明,因此你不用担心知识储备不足。

二:现今主流的开发主要有两个方面.net和java,当然不排除其他的技术,但现
在如果某一家软件公司要招人,条件往往都会标明人员的技术方向是.net还是
java或者两个方面都掌握的人才,.net多适用于快速开发的项目和应用程序,
java则多应用于大型网站具备高安全性,各有优点,不过.net较java易于上手
和开发,建议你走这一开发方向。

三:如果你打算走开发这条路子,建议你到培训机构去学习,接受系统的培训多
少比一个人自己摸索要强许多,
(C#基础教程(第2版))——图灵出版社、
(C#本质论(第2版))——图灵出版社、
(C#和.NET 2.0实战:平台、语言与框架)——图灵出版社;
这些书主要是.net方面的开发语言也是C#,对于C语言这种面向过程的语言,你如果有兴趣也可以去研究。
希望我的回答能对你有所帮助,祝你能走向编程之路。
第3个回答  推荐于2018-03-07
优秀的程序员要具备很强的分析,和思维能力,我是一个Java JSP 的程序员,以我自己的感觉,程序员的理解能力要很强,因为我们做一个业务系统需要了解这个业务的逻辑,才可以去开发,至于学什么语言,我觉得只要你可以精通一种语言,其他的你就都可以自学的。但是C除外。

至今我都不是很懂那个,我刚开始学的时候就是学的VB,但是我觉得可以直接学JAVA。你可以选择JAVA .NET C# 这都是现在很流行的。
如果你可以的话C是最好的。我们单位C的 开的工资是我们的几倍。你要学一种语言,就必须先了解他的思想,所以你还是先看看理论上的东西吧。呵呵,其实程序员挺枯燥的,你要有思想准备哦。最大的困难就是你需要让自己有恒心。本回答被提问者和网友采纳
第4个回答  2010-12-29
《C程序设计(第三版)》
《C专家编程》
《C陷阱与缺陷》
《数据结构》
《算法导论》
《现代软件工程》
《数据结构与算法分析:C语言描述》
《C和指针》
.......把这些看懂,应该够你成为一名初级C程序员了~