软件开发学习课程及将来工作环境简介_第1页
软件开发学习课程及将来工作环境简介_第2页
软件开发学习课程及将来工作环境简介_第3页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

...v.关于学习曲线-计算机课程的先后顺序是怎样的?每门课都讲的什么?

计算机的根底学习课程应该是:数学根底:高等数学,线性代数,概率论

语言根底:C语言

数据构造:离散数学,数据构造和算法分析

硬件根底:模拟电路,数字电路,计算机组成原理

其他专业课:操作系统,数据库原理,编译原理,计算机网络

高级语言学习:Java或者Python或者......

如果是专业学习,建议从上到下,从左到右依次学习。如果是兴趣学习,可以只学习C语言和数据构造,然后直接进入高级语言学习,你甚至可以直接学习java,连C和数据构造都跳过去。

如果你想以后从事开发工作,跳过根底课程会使你非常非常懊悔!!!因为你要么回头重新学根底知识,要么只能徘徊在Coder的层次上,永远成为不了一个Programmer或者架构师。这些根底课程将是决定薪水数量级〔k,10k,100k.....〕的关键因素。

如果你不明白我在说什么,或者依然坚信“数组就足够了〞这些鬼话。

那么我们来谈谈一个简单的小应用。用户有假设干粉丝,用户可以发送一些字〔最大140字〕,然后他的粉丝可以看到。很简单吧,对,这就是微博。

我们有很多种做法,比方最简单的Coder会这么做:将用户id和发表的内容存到数据库中,〔如果聪明点,还会将用户id加个索引〕他的粉丝刷新页面的时候我们从数据库获取其关注人的列表,然后对关注人发送的信息按照发布时间排序输出。

这么做似乎没什么问题,问题在于有个叫姚晨的家伙有1000多万个粉丝,同时还有百万人在刷新页面!

如何解决呢?网上流传了一些新浪微博架构的分享,里面用到了队列〔就是那个先进先出的队列!〕用来“削峰填谷〞,用了memcache来做缓存〔一致性Hash来保证可用性〕等等,如果没有数据构造根底,恩,你懂的。

高等数学,线性代数,概率论:这些课程也许不会在软件开发中经常用到,但是这些是学习算法的根底,不学也行。相当于武术中的静心,调节气息。

C语言,很好的入门语言,大学课程本身在于教授语法,以便大家在以后学习数据构造等问题上有个可以沟通的语言根底,和实际开发环境使用差异比拟大。武术中的武当长拳。

离散数学是数据构造的入门课,学了以后对理解数据构造和算法又很大的帮助,如果没学,也能学习后者,只是会麻烦一些,且会有“无根〞的感觉,时间紧X的可以考虑学习数据构造的同时,手头放一本离散数学,结合在一起看。武术中的内功心法,不解释。

模拟电路可以不看,数字电路是计算机组成原理的根底,可以直接学习组成原理,但是有了数字电路根底会方便理解组成原理。计组原理是讲述计算机如何运行指令的课程。相当于解剖学?学了能让你知道如何优化出招,打哪最疼~^_^

操作系统,数据库原理,编译原理,计算机网络必须看,这几本书并非只是学习相关知识,最重要的看点是:真正的讲述如何用技术解决实际问题的范本,我们平时遇到的很多头疼的问题,其实前辈们都已经遇到过了,而且他们使用的是非常好非常好的思路。比方资源竞争,比方搜索,没错,答案就在这些书。相当于令狐冲的“破剑式〞,是实战案例宝典。

只学C能成为高手吗?

可以,练会了武当长拳至少可以当教练。^_^

现实中不管愿意不愿意,都或多或少的要和别的课程有交集,至少,C语言的指针,如果你知道计组原理里面讲到有个东西叫地址存放器的时候...理解起来会方便的多。上面几篇说的都比拟务虚,这篇文章我们来聊点实际工作中的场景。这是我毕业前非常想知道,可是又偏偏没有人告诉我的,我相信还没有毕业的同学中,一定也有想了解这方面情况的。当然,我尽量将自己看到的想到的说出来,但是个人的经历实在是有限,难免有所遗漏和错误,权当抛砖引玉,希望能有更多的大神参加讨论,给后来的师弟师妹们一点思路。

一个典型的中国式开发团队是怎么样的人员构成呢?程序员在其中的作用又是如何?

这里我说说我熟悉的几个场景:企业级开发,科研式开发,互联网企业。

企业级开发:这类系统往往是一个企业的重型业务系统,业务涉及财务,结算,生产安排等方面。典型应用是通信企业的OLAP,银行业务系统等。这类系统的一个特点是,参与人员多,业务极为复杂,需求相比照拟稳定,平安稳定性要求极高。鉴于此系统的特点,瀑布模型是其首选的开发方式。以某公司的工资系统为例,参与人员一般有工程负责人,需求方,需求分析员,系统分析员,设计人员,开发人员,测试人员和部署人员构成。其最简构成是需求方〔财务室或者人力资源〕和开发人员。需求方提出需求〔每月月初计算所有员工工资并自动发放,然后发送工资单〕,需求分析员经过和需求方沟通,将需求细化〔每自然月1日凌晨0:05进展计算,1:00前完成,具体步骤是从员工管理系统中取出所有员工列表和需要发放的工资数额,依次对每个员工工资扣减社保和个人所得税局部,同时生成工资单,通知银行结算,发送〕。系统分析员确定系统规格〔系统采用java开发,任务采用crontab定时,员工管理系统的对接接口为RPC调用,银行结算采用SOA,为内部的SMTP效劳,每员工的处理时间不得超过10秒,当员工数少于XX人时整个过程预计在YY分之内计算完成,当员工数增加时,考虑添加新的计算节点,按员工号进展并行处理〕。设计人员进展概要和详细设计〔如接口的具体字段,输入检查,错误如何处理等,更详细的可能会到类和方法定义〕,开发人员拿到设计说明书进展编码和连调,测试人员对开发人员的代码进展测试,测试无误后,交由部署人员部署至生产环境,经需求方验收后正式上线。从上面的例子可以看出,正常情况下,开发人员其实就是名副其实的“码农〞,在这种情况下,自己能发挥的余地很小,更多的时候考验的是一个人的开发速度,bug数。很多外包开发,尤其是对日外包,一般都和这种情况类似。现实中很多小型企业系统开发现状是:除了需求方,其他事情就由有限的几个开发人员全部完成,这样对人的要求突然就变高了,沟通能力,设计能力,编码甚至测试能力都要面面俱到,做的好的,对需求了如指掌结果“挟天子以令诸侯〞独当一面的也不在少数。

科研式开发:这种开发模式其实之前很少见,我也是有缘参加到了某企业的科研机构才得以了解,现在各行业的应用研究逐渐深入,这种开发已经比拟普遍,比方某些互联网企业的推荐算法研究,大数量分析方法研究等。这种开发的特点是,参与人员比拟少,对数学要求稍高,需求非常频繁〔甚至远远高于互联网开发〕,除了结果正确,代码质量几乎没要求。这种工程的目的是为了验证某个方法论,比方如何计算富士山的重量。团队构成是有限的几个研究人员和更有限的开发人员〔多数情况下研究人员就是开发人员〕。一般流程是研究人员提出方法〔各局部构成*密度*体积的加和〕,开发人员快速将其理论映射为可以运行的代码,导入数据进展计算。而后将运行结果与实际结果〔可参考与富士山类似的其他山峰的质量,如果的话〕进展比照,而后不断的对理论和相关阈值进展调优,最终得到一套方法论并进展论文发表申请专利等。可以看出,开发人员在这类工程中,自由度比拟大,要求对方法论有彻底的了解,有时由于人员有限,甚至还需要和科研人员一起调阈值,搞数据,说不定论文发表时还能混个第三作者什么的玩玩。而科研不离数学,尤其是计算机应用研究方面,所以数学还是比拟重要的,了解一些数学分析方面的知识会好很多。至于为什么对代码质量几乎没有要求,是因为理论到产品还有一些路要走,一旦时机成熟了,会有更专业的队伍专门把理论封装成产品。你的代码几乎是要被扔掉的,就像草稿纸一样,除非你写的已经足够好,但是在时间有限的情况下,很难做到这一点。至于开发人员的开展,未来很有可能会走上科研这条路,当个科学家也是不错的。互联网开发:很多人非常喜欢的模式。特点是业务相对简单,对响应速度要求高,需求变更比拟频繁。互联网开发是公认的对开发人员计算机素质要求较高的,主要原因就是在于,其他工程很少会有互联网应用那么多的客户和访问量。这就导致一般企业开发没什么问题的设计,用到互联网上就会成为灾难。大家最近经常抨击的12306,就是一个典型的例子。互联网工程的典型配置是产品经理,美工,页面人员,js开发,效劳器端开发,运维人员。产品经理画出产品设计图和主要的流程图,美工对产品进展美化,页面人员〔也叫Builder〕负责将美工的psd做成html和css,js嵌入js代码而后与效劳器端进展交互,运维人员需要监控和部署效劳器及配置网络。在这些人员中,除了产品经理和美工,其他人员一般都是计算机专业的毕业生,由于个人兴趣不同逐渐走到了不同的岗位,当然也有多面手,什么都能做的。这里我主要说说我所熟悉的效劳器端开发。效劳器端的主要工作是在保证大访问量的情况下,产品流程仍然能够得到正确的执行〔仔细想想,聚划算的秒杀其实挺难做的〕。主要的工作语言包括但不限于php,java,python,c,c++,甚至shell。由于互联网应用多半情况下业务流程都比拟简单但是用户量大且不能连续,所以大家的兴趣一般都集中在比拟“纯〞的技术问题上,比方提高程

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论