软件开发软件学什么要学什么技能

为何要学编程?如何学编程?用什么语言最好?有什么好书?_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
评价文档:
为何要学编程?如何学编程?用什么语言最好?有什么好书?
上传于||暂无简介
大小:13.43KB
登录百度文库,专享文档复制特权,财富值每天免费拿!
你可能喜欢评论-1250&
trackbacks-0
首先说下什么叫&完美软件开发&,想象一下,完美的圆在现实中是不存在的,现实中的圆只能是对完美的圆的回归,但完美的圆描述了圆的构成规则,完美软件开发意义与此相同,它试图描述软件开发的规则和铁律。但既然现实中不存在,探讨完美状态又有神马意思?好,那我们再来看一个完美状态:
牛顿第一定律说:任何一个物体在不受任何外力或受到的力平衡时,总保持匀速直线运动或静止状态,直到有作用在它上面的外力迫使它改变这种状态为止。
这显然也是一个完美状态或者说理想状态,现实中也是不存在的,那这东西又有神马意义?
个人感觉探讨软件开发的完美状态,就和探讨软件中的牛顿定律一样,虽然它现实中不存在,但对现实却有着极大的指导意义。单纯想做个高手,比如高手什么的是不太用的上这种探讨、这种书的,但要想把握下全局,这种探讨、这种书就有点意义了。
那怎么去探讨这种完美状态?
这类书,包括《人月神话》往往是用归纳法写出来的。但这样一来就会先天有种限制:一个人的眼界经历是有限制的,而软件世界其实无限宽广,编译器和信息管理系统的差别可能比人和猪的差别还大。所以一用归纳法,又说不清楚自己结论的边界,书就很容易偏颇。所以这本书用演绎法来写,用逻辑链来推导,看过三体的可能知道黑暗森林定律是咋整出来的,但把逻辑链用在这类书里,恐怕还很少人这么干。
看几条逻辑链。这书预设了几个前提,所有逻辑链都基于这几个前提。
软件是一种固化的思维
意识指导行动
项目所能耗费的资源是有限的
重复做同样的工作会降低效率
&下面列几条书里的逻辑链。
关于量化管理的:
软件是一种固化的思维&&思维的本质是概念和逻辑&&&概念和逻辑无法直接度量和精确度量&&&度量过程中需要很多的主观判断&&&以目标为导向的,以个人为中心的量化管理(相关的激励和惩罚)将崩溃&&&参照无歧义数据(函数复杂度等)的判断将成为程序员评价中的辅助手段&
关于流程尺度:
软件是一种固化的思维&思维固化本质上不可能是例行公事&&&现场的人需要较大的自主空间&&软件的流程粒度需要比较大,而不能规定工作细节,手册化。&&可以把流程等价于一种打断,从这个尺度上可以度量当前流程的程度是否过于繁重。
关于开发模型的选择:
重复做同样的工作会降低效率&预先没有对既定问题的分析和准备,会导致同样的工作做多遍&&纯粹的迭代会导致某些预先可以发现的问题得不到处理,进而导致不必要的重复,最终会降低组织总体生产效能
关于在何处终结需求开发:
项目所能耗费的资源是有限的&&&&需求如果无限扩张,会造成以有限资源做无限工作的局面,最终导致忙中出错&&&&在广度上,由于软件的应用环境处在变动之中,导致需求天生有越来越多的趋势。&&在广度上,对不做那些需求要有清楚定义。&在深度上,需求的明确是一渐进的过程。&指望在初期某一截止时间点,澄清所有需求是不现实的。但能够澄清的,没有澄清却又导致效能降低。&&在深度上,要使需求开发的细致程度有所定义
关于设计中的正交:
软件是一种固化的思维&&&思维的固化体现为概念和逻辑的固化&&&为保证简单性,逻辑要尽可能的少&&概念要尽可能正交
当然只有这些逻辑链是不够的,还需要补充例子,对逻辑链的具体含义进行阐释。
就拿最后一条逻辑链来说,你如果相信它是对的,再去看设计和代码,就会看出许多新问题,比如:在《敏捷软件开发:原则、方法与实践》里给出过一个关于门的例子。
Robert C.Martin的例子说:在安全系统中,有一些门,这些门可以被加载和解锁,并且知道自己是开着还是关着。
class&Door
virtual&void&Lock()&=0;
virtual&void&Unlock()&=0;
virtual&bool&IsDoorOpen()&=0;
接下来,一种更高级的门出现了,这种门如果开着的时间过长,就会发警报,这种门被称为TimedDoor。
因为要定时出发某些事件,所以TimedDoor要用到定时器,而定时器的基本创建机制是:
class&TimerClient
virtual&void&TimeOut()=0;
class&Timer
void&Register(int&timeout,&TimerClient*&client);
任何TimerClient都可以向Timer注册自己,而Timer则会按照指定的时间间隔来调用TimerClient的TimeOut()。
到现在为止,Timer、TimeClient、Door在概念上是正交的,没什么问题。
接下来,为了使TimedDoor具有定时发警报的功能,这三个概念要产生交互了。
处理方法可以有很多,第一种方法Door从TimeClient继承,这种方法的正交程度最不好,接触面过大,像Robert&C.Martin在书里说的,很多Door根本和定时不定时没有关系,但一旦让Door从TimerClient继承,那就不管什么门都有了定时的特征,这种关联毫无道理。
第二种方法是让TimedDoor分别继承TimerClient和Door(多重继承)。Robert&C.Martin认为自己会优选这个方式。
从正交的角度看,在这种方式下,TimedDoor只和与自己有关的部分产生关联,正交性已经非常好了。
如果仔细想想,就会发现Robert&C.Martin的第二种方法其实还是有问题。
门是否计时报警是一个功能,是否能录像也是一个功能,是否能自动发消息也是一个功能。
这些功能甚至可能是动态配置的,如果都用多重继承来解决,那会衍生出各种各样的对象,如:VideoDoor,TimeVideoDoor,MessageDoor,TimeVideoMessageDoor等等。这好像并不是什么好事。
这意味着正交的程度也许还是可以提升。
如果不让自己的思维局限于所有东西必须都是对象,那么就可以找到其他解法。我们可以认为定时报警功能是门的可组合部分,是使用关系而不是继承关系。也就是说,并不认为应该独立存在着TimerClient这样的类,而认为这是一种偶然的组合。否则的话,XXClient这样的类会漫天飞。想象一下,门、马桶等都可以是TimerClient,也可以是Motor的Client。
上面就是书中部分对正交的讨论和分析,这类讨论和分析会针对几乎所有主要软件开发的领域展开。好处是似乎可以多想到,多看到一些别人没看到的东西,坏处是这样一来很多地方会有点抽象。所以总的来看,这书适合愿意琢磨事,愿意思考本质问题的人,不适合喜欢做事,不喜欢思考的人。
除了用演绎法来重新解构软件开发之外,这书还做了的一件事情是:探讨软件开发各个领域间的关系。做软件的都知道,管理好&项目结果好,流程好&项目结果好,开发模型&好项目结果好,设计编码好&项目结果好。但一实际操作起来,负责不同事情的人,总是会起冲突,做流程的和做现场编码的总是捏不到一起去,因为不同部分间一方面是配合协作,一方面则是共同竞争有限资源。而为了配合好,显然任何一部分都要停在某个程度上,这个也比较抽象,是这个书另一个探讨的地方。
再写下去就太长了,书的说明就此打住。
最后说两句其他的。
看过我别的文章的人,应该大致知道,我比较喜欢写本质的东西,喜欢用一种哲学思辨的方法来看待东西。从立刻有用的角度看,其实这类文章和书挺差的。但我有时候想《人月神话》也不是立刻有用,也还许多人看,所以可能这种对本质的思考还是有用的吧,所以就还是坚持把书写出来了。
接下来会写点怎么把书写出来的东西,算是给想写书的做点分享。
--------------------------------------------------------------
理想流 + 软件 =&理想流 + 人生 = ??理想流 + 管理 = ??理想流 = 以概念和逻辑推演本质,追求真理。
阅读(...) 评论()学软件开发要培养什么技能?_百度知道
学软件开发要培养什么技能?
我现在是高中生我现在要培养什么技能?比如我现在什么学科对软件开发有好处?我选理科的
提问者采纳
逻辑思维,算法分析,编程技能以及一门基础编程语言和一门高级编程语俯怠碘干鄢妨碉施冬渐言。这应该是最起码的啦。。。希望能帮得上你。
基础编程语言和高级编程语言是什么意思?
基础的C/C++ 是很多大学编程语言的首选课程,当然也有开设汇编语言的,至于高级编程C#、Java等。当然我所说的基础是入门的意思,其实C、C++、C#、Java都归为高级语言行列!
提问者评价
其他类似问题
为您推荐:
您可能关注的推广
软件开发的相关知识
其他2条回答
逻辑思维能力是首位,经常做一些智力题会很有帮助的
那我现在应该注意什么,现在可以先学着去的
思考问题的方式,我建议你看看算法,看表面全是智力题,但是都可以归纳为程序问题,比如鼠兔同笼,我们都听过,但要是归纳出一个解决此类问题的抽象方法,就是编程的思想
就是多做一些高难思维题咯?
恩,我想对于你做这些还是很切实际的,把思路弄懂是最重要的,至于编程的语法都是相通的,精通一门就可以触类旁通
基础编程语言和高级编程语言是什么意思?编程的语法又是什么?
你的分类不太合适吧,应该是低级编程语言和高级编程语言,这个高级与低级不是相对人而言,而是相对于计算机而言的,低级编程语言就是计算机可以直接识别的,大家都知道计算机只识别0和1,计算机刚出现的时候,编写一段简单的程序是件困难的事情,那时候的代码就是原始的01组成的字符串,后来随着计算机技术的发展,得益于解释程序和编译程序,人们可以使用接近人类的语言(自然语言)来编写程序,你写的程序,比如int a= 1; a=a+1;这句话的意思是一个整型变量a初始值是1,它加1得到结果为2。你可以理解,但是计算机看不懂,他只认0和1,这就要借助于编译程序,将刚才的程序,向计算机做翻译,变为01的组合,他才明白。这样的编程语言相对就算计是很高级的,所以是高级编程语言,现在市面上主流开发语言无一例外均为高级编程语言。亲~,手打累死我了,你明白了吧?
数学,物理。都有很大帮助。
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁400-656-3385
学编程应该看哪些书,有没有什么好书推荐?
提问者采纳
1.算法导论(第2版)
2.代码大全(第2版)
3.C++ Primer中文版(第4版)
4.设计模式:可复用面向对象软件的基础
5.浪潮之巅
6.Java编程思想(第4版)
7.Java核心技术 卷1:基础知识
8.Java核心技术 卷2:高级特性
9.人月神话
10.Linux内核编程
11.C程序设计语言(第2版新版)
12.黑客与画家:硅谷创业之父Paul Graham文集
13.编程之美:微软技术面试心得
14.代码之美
15.软件随想录:程序员部落酋长Joel谈软件
16.架构之美
17.国外计算机科学经典教材:Unix & Linux大学教程
18.深入理解计算机系统(原书第2版)
19.UNIX网络编程 卷1:套接字联网API
20.UNIX网络编程 卷2:进程间通信
21.自动机理论、语言和计算导论
22.软件架构的艺术
23.Effective C++中文版
24.Effective Java中文版(第2版)
25.PHP & MySQL Web数据库应用开发指南(第2版)
26.PHP经典实例(第2版)
27.C++ 编程思想 第1卷
28.C++ 编程思想 第2卷
两卷合订本
29.Linux内核设计的艺术:图解Linux操作系统架构设计与实现原理
30.数据库系统导论(原书第8版)
31.Python参考手册(第4版)
32.Python灰帽子
33.提高C++性能的编程技术
34.从网管员到CTO:网络设备配置与管理实战详解
35.深入理解计算机系统(修订版)
36.UNIX编程艺术
37.深入理解Java虚拟机:JVM高级特性与最佳实践
38.Microsoft.NET框架程序设计
39.代码整洁之道
40.编程珠玑(第2版)、编程珠玑(续)
41.大话设计模式
42.C#开发宝典
43.深入理解Linux内核(第3版)
44.UNIX环境高级编程 (第2版)
45.WCF服务编程:.NET开发者决战SOA的制胜利剑(第3版)
46.现代编译原理:C语言描述 (虎书)
47.高级编译器设计与实现 (鲸书)
48.编译原理(第2版)(龙书)
49.Windows核心编程 (第5版)
50.C++标准程序库:自修教程与参考手册
51.设计原本:计算机科学巨匠Frederick P.Brooks的思考
52.软件框架设计的艺术
其他类似问题
等你来回答
开班日期:滚动开班
培训周期:1个月以内
开班日期:滚动开班
培训周期:1个月以内
开班日期:电话咨询
培训周期:一周以内
开班日期:电话咨询
培训周期:一周以内
优质教育机构
根据需求定制课程
400-656-3385
扫码下载厚学网APP
扫一扫定制课程
微信号:ihouxue
Copyright & 2007-
All Rights Reserved. 江苏厚学网信息技术股份有限公司.

我要回帖

更多关于 开发软件学什么 的文章

 

随机推荐