程序员怎么学,做程序员需要数学很好吗

伏羲号

程序员怎么学,做程序员需要数学很好吗?

感谢邀请。

程序员怎么学,做程序员需要数学很好吗

先说第一个问题,计算机专业出身,培训机构出身,甚至自学半路转行当程序员的朋友我都见到过。总体来说,随着计算机和网络现在的普及,年轻人的电脑基础知识都在提高,开发工具也越来越智能,程序员入门的门槛越来越低。一般来说,学习一下开发语言,数据结构,数据库,开发工具,再找几个开源项目改改练练手,可以认为是程序员入门。

但是我觉得入门只是程序员刚刚的起步,真正把程序员当成自己的主业工作,是需要全方位的学习和锻炼的。首先就是对开发程序要达到精通的地步,编程语言,算法,设计模式,架构,网络原理,服务器相关等都要逐一掌握。其次是一般大点的项目都是用到多种编程语言的,需在项目中做到很好的沟通和发现问题,就要掌握多种编程语言。最后就是纯技术方面外的能力是需要积累锻炼的,比如需求沟通,熟悉业务,文档书写,联调,集成测试,BUG处理,部署维护等等,这些都是项目里程序员必须要参与的。所以我认为成为一个合格的程序员,除了技术过硬外,至少还需要1-2年的正规公司项目研发经验。

再说第二个问题,不是所有程序员都需要数学很好,因为很多程序员在开发中并不会接触到很深的数学算法,而且现在还有很多现成的数学方法库可以直接调用,通用的方法一个函数就搞定了,不搞懂里面的实在也是可以的。但有些程序员岗位所涉及的业务是需要用到比较专业的数学运算的,这就需要有好的数学基础了,比如数据挖掘,图像处理,算法相关的开发等。

新手程序员如何自我提升?

从解决实际需求为目的开始学习。

从完整的例子开始模仿学习,掌握基础知识。

同时查看相关语言的基础文档。

需要学习哪些知识和软件?

本人是一个 Android 开发从业者,对于学习 Android 开发,在这里给出一点建议。

开发语言

Android 开发现在有两种语言可以学习,一种是 Java,一种是 Kotlin。

本人现在使用的 Java 开发,目前也在准备学习 Kotlin。

那么新人该学习哪种的?

大部分人觉得肯定是学习 Kotlin了呀,因为大势所趋嘛。

我也是赞同这种看法的,但还是有一点个人看法。

一方面是毕竟 Java 开发 Android 已经很久了,各种各样的书籍资料都有,想学习选择很多,而且 Kotlin 也是兼容 java 的,以后想转的话也是挺容易的。

另一方面是因为现在大部分公司还是在使用 Java 开发,进公司如果上一个项目是 Java 开发,而你又不懂 Java 开发,那么就有点麻烦了,所以我建议可以从 Java 入手,后面 Kotlin 一起学习,毕竟多一门语言不是坏处。

当然这样也有不好的地方,就是花费你更多的时间了,但是程序员嘛,我觉得多一门语言还是好的。

开发工具

Android 开发工具现在都是使用的 Android studio,以前是使用的 eclipse ,但当Android studio 出现后,慢慢的,就被取代了,还是大势所趋的意思在里面,所以语言选择哪种,你可以自己斟酌下。

书籍推荐

学习Java 的书籍

当然是首推《Thinking in java》,刚入门,建立一个正确的概念是必须的。我当年入门是根据学习发的书籍来的,因为我们是有Java 这门课程的,所以是按课本入门的。

学习 Android 的书籍

首推《第一行代码》第二版,绿色封面。我当年是第一行代码第一版入门的,学的挺有意思,是入门的不二选择。

然后其实我还看了《疯狂 Android 讲义》,这本书特点是讲的详细,各个方面都有讲到,但是入门学习的话,我感觉太慢了,我怕入门新手会失去耐心,毕竟纯理论的还是比较枯燥的。

然后 Android 进阶学习点什么呢,我这里是看的《Android 开发进阶从小工到专家》,这本书我感觉弥补了第一行代码缺失的高阶一些的内容,当你入门之后,自己做过比较复杂的项目之后,看着这本书,会让对以往的知识有更好的想法。

还有就是《APP 研发录》,这本书主要将的一些架构方面和对实战项目的一些分析,解开一些实战上遇到的问题。

以上是我的一些学习经验,希望有用。

我个人也是收藏了很多的计算机方面的资料,当然都是没有学习过得,当初只是想收集而已,所以有需要的也可私信,如果我有的话会免费赠送的。

喜欢的可以点个赞,给个关注。

^_^

做程序员需要什么基础?

想要做程序员就先要学编程,学编程需要有以下基础:

1、数学基础

初学编程者需要有高中及以上的数学基础,毕竟计算机的数学模型和体系结构等都是有数学家提出的,最早的计算机也是为数值计算而设计的。

2、逻辑思维能力的培养

要想成为一名优秀的程序员,最重要的是掌握编程思想。要做到这一点必须在反复的实践、观察、分析、比较、总结中逐渐地积累。

3、要有一定的编程思想

学习一门语言或开发工具,语法结构、功能调用是次要的,最主要是学习它的思想。例如学习 VC 就要学习 Windows 的内在机理、什么是线程等等。因此学一种思想是关键,有了思想,那么我们就可以触类旁通。

零基础能学编程吗?没有基础应该怎么学?

学编程需要一定的基础,这样讲是说明,有基础可以快速的上手掌握。但并不是代表没有基础就不可以学编程。

对于零基础的人来讲,自学是有一定难度的,没有人引导,容易卡在某一个问题上,长久得不到进展,或者进展缓慢,最可能的结果就是从入门到放弃。

想要从零基础变成一名合格的编程从业者还需要以下条件:

1、掌握编程思想必须在编程实际工作中去实践和体会。亲自动手进行程序设计是创造性思维应用的体现,也是培养逻辑思维的好方法。

2、要养成良好的编程习惯。编程习惯的好坏很大程度影响程序质量。良好的编程习惯可以使程序结构清晰合理,且使程序代码便于维护。

3、学编程就是从理论到实践再到理论再到实践的循环过程。当你发现编到一定程度很难再提高的时候,就要回头来学习一些计算机科学和数学基础理论。学过之后,很多以前遇到的问题都会迎刃而解,使人有豁然开朗之感。因此在学习编程的过程中要不断地针对应用中的困惑和问题深入学习数据结构、算法、计算机原理、编译原理、操作系统原理、软件工程等计算机科学的理论基础和数理逻辑、代数系统、图论、离散数学等数学理论基础知识。这样经过不断的学习,再努力地实践,编程水平一定会不断提高到一个新高度。

学编程其实并不难,只要有拼搏的精神以及能够耐得住寂寞,经过多方理论与实践相结合,快速成为一名合格的程序员根本没有想象中的那么难。

怎么做一个程序员?

首先,我不认为《算法导论》是所有程序员必须一开始就掌握和精通的内容。

我无意否认某些核心课程的重要性,但是我们必须看到——很多程序员并不懂程序员的三大浪漫——编译原理,图形学,操作系统,但这并不妨碍他们在日常工作中创造出各种有价值的软件。

之所以这么讲,原因是:

行业的门槛因技术的不断进步而降低 不是所有的程序员都需要系统而全面地学习才能胜任工作

这些年来,编程语言、开发工具的迅速发展,我们可以用C#、Java、Objective C这样的语言完成大多数开发任务(而不是在纸上打孔或者用汇编),用着Visual Studio这样爽的开发工具, 这并不是因为厂商大发慈悲要拯救程序员于水火之中,而是微软这样的厂商在取悦我们的老板和客户——技术发展的目的是降低软件开发的用人标准,进而降低软件行业的人力资源成本,更快、更好、更便宜地满足用户的需求。

从公司的角度来看,如果要求所有开发人员都是基础扎实、技能全面的,那么用人成本一定很高,我完全相信经过一定训练和挑选的***鸟毕业生在经理的正确管理下可以很好的开展工作,尽管他可能不懂算法和数据结构,C和C++基本不会,这并不妨碍他为公司创造价值,随着他开发经验的增长,在时间允许的情况下再去补充一些基础知识也是完全可以的。

其次,题主的情况,未必能承担系统而全面学习所带来的成本

几年以前有个“学生”,打引号是因为我并没有真正教过他,中专毕业,专业是钳工,曾经给我展示过胳膊上的长长的疤痕,说是被车床伤到的。

他要求跟我学的时候属于入门阶段,最开始学习的并不是什么三大浪漫,而是C#. 在掌握了一门编程语言后,很快自学了其他语言(甚至Delphi), 在一年后找到了一个小公司做些基本的开发工作,然后涉足安全领域,开发了各种工具,现在在一家安全公司上班,提升很快,收入不菲。前不久跟我聊他配合网监做一些取证和提审的工作经历。

2006年,我在武汉某个夜市的大排档上,凌晨2点多,看到一个服务员在忙里偷闲看一本计算机书籍(扫一眼就知道),仔细一看是一本Java入门书,聊起来才知道这妹子是护校毕业,但是对计算机有兴趣,就想在大排档当服务员攒学费去***鸟。她还拿出一沓油迹斑斑的信签纸,上面全是她写的程序,她说每次去网吧都要装开发环境,太麻烦了,所以干脆在纸上写。哥看不下去了,给一开软件公司的朋友打电话强烈推荐这妹子去实习,朋友一听情况表示拒绝,我说你只要给他管工作餐就好,不用发工资。1个月后这妹子进入试用期,2个月后转正,后来在朋友公司做了近两年,据朋友说开发能力很强,再后来,我就不知道了。

作为教师,感动我的总是这这样的“学生”,而不是那些坐在教室里花着父母的钱虚度光阴的学生。

可能有人会觉得这样的程序员是“野路子”,不登大雅之堂,但这一点都不妨碍他们兢兢业业的工作,为公司创造价值并且改变了自己的生活。

如果这些人要系统而全面的学习计算机专业的基础课程,得需要多少时间和金钱成本?他们所处的环境是否允许他们这样做? 他们不这样做,是不是就成不了“真正的程序员”?

好了,我们来谈谈什么是真正的程序员。

在我的意识里——能够根据客户的需求(或者上级的要求),选择恰当的技术方案(或者按照上级的指示)开展开发工作,在合理的时间内完成开发任务并达到质量要求的人,就是真正的程序员。

要成为这样的程序员,其实没那么难。

在这个答案里,我想把程序员分为两个层次:

L1- 能根据上级的指示,按照公司的要求和规范开展开发工作的,称为程序员。

L2- 能根据客户的需求,选择恰当的技术方案,制定合理的工作计划,独自或带领团队完成开发工作并达到质量要求,称为软件工程师。

我想题主可能想成为的是后者,而不是普通的编码人员,在我接触到的程序员中,其实很少有单纯从事简单编码工作的,他们大多数都是干的软件工程师的活。

软件工程师应该具备哪些能力呢?我们以前归纳过:

1. 分析问题的能力 2. 设计解决方案的能力 3. 编码实施的能力 4. 排除故障的能力

这四种能力如果要展开来讲,要写好长的,暂时就不写了。

开始回答——”如何成为“的问题。

科学家追求的是知识,工程师追求的是能力。而能力是很难从书本上的来的,只能从实践当中来。

我注意到题主的问题中,提到看书静不下心,看视频又觉得太慢,可能从一个具体的项目开始更能激发学习兴趣并且获得成就感。

先给第一种路径建议吧——从C语言开始.

之所以建议C语言,是因为C语言里没有那么多现成的、强大的类库,在不熟悉基本的语法、面向对象这些概念时C#其实比C语言难以理解,很难深入。学习C语言不仅限于对C语言语法的掌握,而是通过C语言的学习,建立程序设计的思维,比较深入地了解一些计算机系统的工作原理。

在我的教学班级中,我的教学内容是这样组织的,题主似乎也可以按照这种方式来学习:

第一阶段 高级程序语言的基本概念(编译、库、链接等),开发工具的使用(Visual Studio 2010), C语言的基本结构以及在VC中的一些差异,动手能力上达到能按照书本输入一个程序,能编译,能运行的结果即可。

第二阶段 变量、指针、表达式、函数、分支、循环、简单的输入与输出。

第一阶段和第二阶段的时间往往很短。

第三阶段 开始做第一个小程序(比如最简单的超市收银系统),这个时候学生开始头大,因为很多要用到的东西根本就没给他们讲过,即使网上查得到资料也未必都能用在项目里。学生被我带进一个接一个的坑里,我从不在第一时间告诉他们答案,总要他们冥思苦想抓耳挠腮一个星期了,下周上课的时候才开始讲解决的思路和方法。

经过1个月左右的折磨,他们基本可以完成一个单机版的的超市收银系统,完成比如输入(从键盘,扫描枪就免了)信息、修改输入、价格查询、汇总结账这样的功能。从知识层面上,结构体、指针、文件访问这些基本都解决了,顺带着把简单的查找、排序算法也学了。

可以说这是学生最痛苦的阶段,但是正是这个阶段开始培养他们的自学能力,这个太重要了。但是效果也很明显,到后期的时候,少数学生开始先于我提出解决方案了。

然后接着折腾,先带学生回顾做过的这个程序,看如何能做的更好,运行的更快,Review和重构。

由于是纯C完成的,程序总是看上去很混乱,修改、扩充也不是很方便,于是我们开始探索另一种编程思想——面向对象,C++上场,又是1-2个月,用C++重新写这个程序,在这个过程中,要求他们自己实现String类,封装数据结构和业务逻辑、数据访问......

到这里,一个学期结束了,第二学期要求学生把这个控制台的黑窗口改成图形用户界面。MFC不准用,只准用一个叫做Easy-x的图形库,而且只准用其中的putpixel函数来绘制点,一轮新的折磨开始,从画点、划线、逐点写汉字开始,绘制按钮、绘制文本框、响应鼠标和键盘,并且要求他们开始设计和实现TextBox, Button,Image这些类.....,,顺便把消息循环之类的机制也做了初步的了解和简单的实现。

到这时候,有的同学已经开始做出”高仿Windows"了,要不要太惊喜!

到这里,我基本可以相信我的学生不会为C#和Java发憷了,更重要的是——他们具备了真正的程序员所必须具备的核心能力——自学能力、独立解决问题。

“作为计算机专业出身的,混迹过几家大点公司的表示很不赞同。这样出来的仅仅只会是最低端的会写代码的员工。和真正的程序员或者软件工程师还有很大差距。整个学习过程都没有一点工程的思想和合作的思想,这在软件开发中是很致命的。这也是本科教育和培训机构的差距。可能这样学出来的很多外包公司都不愿意要,别说大的互联网公司和软件公司。

我的看法是:

1.不是公司里的所有程序员都需要是大牛 2.不是所有程序员在一开始都需要是大牛 2.不是所有人都要进BAT或者MS,IBM这样的大公司

第一,就像盖房子,有人设计结构,有人设计外观,有人砌墙,有人装修,软件行业分工必然是越来越细(全栈工程师则是另一个极端),越是在大的软件公司里越应该这样,最低端的会写代码的员工存在的价值还是很大的。

第二,人是会成长的。从学习路径的选择上,我一贯提倡”先博大、再精深”,在初学阶段用较快的速度(尽管看上去不扎实)涵盖较大的知识面,然后再根据需要或兴趣选择在某一个领域深入学习,没有什么不可以的。我反对的是一开始就投入过于理论、过于抽象的学科里去,这很难取得成就感(相比较于做实际的项目),会降低学生的学习积极性甚至打击学生的自信心,产生“我不是干这行的料”的想法,只有少数较有天赋的学生能取得较好的学习效果;作为教师,我们必须对大多数学生负责。在知乎的另一个回答里,我曾经表达过“脱离生源质量和培养目标谈学习方案是不切实际的理想主义”的看法,我们不可能要求软件行业的从业者都是211、985院校的毕业生,IT行业不可能是精英才能进入的行业。

从另一个角度,在学生获得了较宽广的知识面后,完全可以在第二、三学年深入地学习其他课程,而且学的较为轻松,进步速度也很快。

第三,并不是人人都需要进入大公司。作为名校毕业生,进入大公司当然是理想的选择。但是对于高职(专科学历)的学生,或者对于那些本来就不是计算机专业的人群来说,毕业时能在一个软件公司拿到3-6K(武汉薪资水准)就已经很高兴了,这能使他们脱离父母的供养,从经济上获得独立。在工作中再进一步提升专业知识和技能,还是可以成长为大牛的,到时候再通过漂亮的工作经历进入较大的公司或取得较高的职位是完全可以的,十几年来我已看到过不少这样的例子。

想起一件事来,有一年我公司做了一个CAD项目,验收的时候甲方通知我说从某大公司请了个“技术很强的技术总监”的人来参与验收,到现场的时候那小子客客气气地站起来说“*老师好”,接下来就哈哈哈了。

至于“工程的思想和合作的思想”,胡锐说的很对,在教学设计和实践中,“实用型、工程化”是我们一直坚持的原则,其实我们的学生在大一上学期就开始分组做课程设计、按模板编写各种项目文档(尽管真心写的很烂),每天提交工作日志(包括周末和节假日)...... 在这一点上,可能我们比多数本科院校做的好。

发表评论

快捷回复: 表情:
AddoilApplauseBadlaughBombCoffeeFabulousFacepalmFecesFrownHeyhaInsidiousKeepFightingNoProbPigHeadShockedSinistersmileSlapSocialSweatTolaughWatermelonWittyWowYeahYellowdog
评论列表 (暂无评论,88人围观)

还没有评论,来说两句吧...