‘壹’ Python能用来做什么
Python 语言主要有以下用途:
1) 简单:Python 是一种代表简单主义思想的语言。阅读一个良好的 Python 程序就感觉像是在读英语一样,尽管这个英语的要求非常严格。Python 的这种伪代码本质是其优点之一,使用户能够专注于解决问题而不是去搞明白语言本身。
2) 易学:Python 有极其简单的语法,非常容易上手。
3) 免费、开源:Python 是 FLOSS(自由/开源软件)之一。简单来说,用户可以自由地发布这个软件的拷贝、阅读它的源代码、对它做改动、把它的一部分用于新的自由软件中。FLOSS 是基于一个团体分享知识的概念,这也是为什么 Python 如此优秀的原因之一:它由一群希望看到 Python 更加优秀的人创造,并被他们不断改进。
4) 高层语言:使用 Python 语言编写程序时,不用考虑如何管理程序使用的内存等底层细节。
5) 可移植性强:由于它的开源本质,Python 已经被移植在许多平台上。如果 Python 程序没有使用依赖于系统的特性,那么程序不用修改就可以在下述任意平台上面运行。这些平台包括 Linux、Windows、FreeBSD、Macintosh、Solaris、OS/2、Amiga、AROS、AS/400、BeOS、OS/390、z/OS、Palm OS、QNX、VMS、Psion、Acom RISC OS、VxWorks、PlayStation、Sharp Zaurus、Windows CE、Pocket PC 和 Symbian。
6) 解释型语言:编译型语言(如 C 或 C++)源程序从源文件(即 C 或 C++ 语言)转换到二进制代码(即 0 和 1)的过程通过编译器和不同的标记、选项完成,当运行程序的时候,连接器把程序从硬盘复制到内存中并且运行。而 Python 程序不需要编译成二进制代码,直接从源代码运行程序。
在计算机内部,Python 解释器把源代码转换成字节码的中间形式,然后再把它翻译成计算机使用的机器语言并运行。因此,用户不再需要操心如何编译程序、如何确保指定了正确的模块或包文件等细节,所有这一切使得使用 Python 更加简单。同时,由于只需要把 Python 程序拷贝到另外一台计算机上即可工作,这也使得 Python 程序更加易于移植。
7) 面向对象:Python 既支持面向过程的编程也支持面向对象的编程。在面向过程的语言中,程序是由过程或仅仅是可重用代码的函数构建起来的。在面向对象的语言中,程序是由数据和功能组合而成的对象构建起来的。与其他语言(如 C++ 和 Java)相比,Python 以一种非常强大又简单的方式实现面向对象编程。
8) 可扩展性强:如果希望把一段关键代码运行得更快或希望某些算法不公开,可以使用 C 或 C++ 语言编写这部分程序,然后在 Python 程序中调用它们。
9) 可嵌入性强:可以把 Python 嵌入 C/C++ 程序,从而向用户提供脚本功能。
10) 丰富的扩展库:Python 扩展库很庞大,可以帮助处理包括正则表达式、文档生成、单元测试、线程、数据库、网页浏览器、CGI、FTP、电子邮件、XML、XML-RPC、HTML、WAV 文件、密码系统、GUI(图形用户界面)、Tk 以及其他与系统有关的操作。只要安装了 Python,所有这些功能都是可用的,这被称作 Python 的“功能齐全”理念。除了扩展库以外,还有许多其他高质量的库,如 wxPython、Twisted 和 Python 图像库等。
‘贰’ 为什么现在有些人不愿意去学药学专业
我就是医学院药学专业的,毕业至今27年了。
我跟大部分药学毕业生不同的是,我在很多不同单位都工作过,医院药剂与中药炮制,制药厂新药研究,药检,天然提取物研究等等。
我跟大家说说药学毕业生的感受:
1、医院:在医院,不算后勤与管理层,就医学技术来讲,四个专业类别人员,包括医生,护师,化验与检查,药剂师。
在这四个专业技术人员里面,药剂师最不受待见,地位最低,当然医生地位最高。
2、制药厂:制药厂,一样有后勤,管理层与技术人员。在大点的制药企业,药学技术人员岗位有:新药研究,药品生产管理,质量管理,仓储,销售。其中前三个岗位会要求比较高的药学资历。
新药研究,西药基本都是仿制工作;中成药的话,要么古方改成现代剂型,要么名医名方做新药开发。
早些年,企业新药研究成果,关键并不在技术,而在于申报渠道是否通畅,这些年改进好多,可是还是有很多潜规则在里面,让科研技术人员没存在感。
生产管理与质量管理,往往是一对冤家,总有难以调合的矛盾,需要企业领导掺合。
药物销售,对专业技术要求并不高,可是确是最受重视的部门,重视的结果,往往就是他们的待遇比技术人员高,技术人员存在感很受打击。
3、药检:药检所一般是事业单位,一般接受企业有质量标准或者国家标准的药品检验,这里的检验结果具有法律效力。由于是事业单位,工作稳定,待遇比较好,是药学专业毕业生的理想就业去向。
4、植物提取物:以前有一家做迷迭香植物提取物的生物工程公司,由于市面上并没有成熟的提取技术,公司花了很大成本,请中科院的专家来研究,没有理想成果,反反复复生物工程工程专业博士硕士都聘请过,都没预期效果,公司差不多要放弃这个项目了。
偶然的原因,我接手了这个科研项目,花了差不多一年多时间,得出成果,并首先实现国内产业化。我后来查阅了以前的部分科研资料(企业保管不规范,有些资料可能参与人员离职时带走了,所以资料不全),研究方向可能是不正确的,出成果才怪。
我并不是说,那些专家不行,也许只是专业并不对口,他们并不擅长搞这些植物提取物研究,而相关企业领导并不懂这个行业,就引进了这个项目。
药学专业同学们,我可是为你们挣了一口气,虽然我现在离开医药行业,搞网络经济了,我还是很惦记着你们,加油!
药学专业是一个吃苦不讨好的专业,所以许多学生不喜欢学药学!药学的基本特点是实验多,课程难,就业差,工作苦,收入低!是付出和收入最不匹配的专业。
所以,同一所大学药学专业是录取分最低的专业,或者说被调剂最多的专业!
药学的就业方向:
首选药监局。公务员,是药学最好的就业方向,只是招聘职位少,竞争激烈!
其次读到博士,到学校教书。这也是比较轻松的职位!收入也好!
第三,硕士博士去药物研发单位。收入还好,只是工作压力大,加班是家常便饭!
第四,本科,硕士去药企质量部门。加班多,收入低,一般本科3000多,硕士4000左右。
综上所述,药学是不太好的专业,所以大家不喜欢选择读。
一,问题问的很奇怪,或者说很幼稚。任何专业都有人不愿意去学!药学也一样,有人想学,有人不愿意学,这非常正常啊。
二,药学是培养具备药学学科基本理论、基本知识和一定的实验技能,能够在药学领域从事药物研究与开发、药物生产、药物质量控制、药物临床应用和监督管理等方面工作的药学专门人才。不愿意从事这类职业的人,当然就不愿意学了。
三,药学专业不是目前非常热门的专业,但是就业前景还是比较广阔的,科研,院校,药企,公务员等等。尤其是重点大学的药学专业,就业比较有优势。
四,重点是,很多时候某个专业要看是什么学校设置。都是同一个专业,北大和一个二本末流大学都有,但那是一样么?药学专业亦如此。
任何专业都有有冷有热,有人不愿意去学!药学也一样,有人想进,有人想出,这非常正常啊。
以前三件宝:医生、司机和卖猪佬。不过,现在这些行业不吃香了!
以前司机、医生、卖猪佬是三件宝,收入稳定,风险低,好多人想进来。由于竞争激烈,工资低,药价高,要值副班,工作时间长,还有一些医患关系有冲突,出了问题要问责。
药学专业首先就业面窄,要不就去考公务员去政府卫生管理部门,要不就去制药厂从事药物开发、生产、检验,要不就去医院药房分药,要不就当医药代表,我接触的学药学的部分人进了制药厂……药学工作很多不是药学专业的人,都能做,所以都干些基础性的工作,前途暗淡,大家都知道。
现在的药国家开始控制价格,没有原先那么高的利润,油水少很多,患者也少买药,看来一切往钱看不行了,所以从事这个行业的人相对就减少了,就会导致更多的人不想学,现在工作也想跳槽。所以药学就业前景不是很好。
药学专业是一个低薪专业,虽在一个高利润为特色的行业里面,从事人员却拿着低工资。这个行业要发展只有两条路,第一爬到管理层,甚至当高管;第二,做销售,卖药。
这个专业是个需要高学历,高技能,高知识的专业,顶尖的人才非常稀缺而且发展很好,但是对于本科毕业者很难从事药物研发一类的工作,特别是如果高校水平本身有限,更难求职到满意工作,一定比例毕业生只能从事药物销售等工作,而这类工作本身并非药学专业能够带给你什么核心竞争力,而专业本身对口的行业或对应的就业岗位并不多,就业质量也一般,但是如果真正名校或行业背景院校毕业,比如博士毕业,有一定科研能力,从事药物研发工作,那么还是非常好的前景,有些专业就是属于金字塔顶类型的专业,但是有些专业对应就业范围广,行业广或行业前景好,可能就会更加热门一些,比如计算机,会计之类。所以从这几个维度去考虑,药学专业可能有些冷门了,但是并不代表所有人都不能学。
我确信我不喜欢药学专业,日后也绝不会考虑从事药学相关的科研工作。
本人非药学专业的,目前所了解一些有关药学方面的东西,如下:1. 我能理解药学作为一个实验学科所带来的各种不可避免的 实验性课程 ,但它们往往都是 大量重复性的工作 (尤其是一些医学或生物基础实验课程),极其枯燥和形式化。
我不觉得专业排名考前的好学生做这种实验比我做得好多少,我也不觉得一个初中生但凡了解实验步骤后会做不出这种实验。
2. 我不喜欢药学专业不意味着别人不喜欢,我没有发掘的专业乐趣不意味着别人也没发掘。我身边不乏有志于新药研发的同学,我觉得他们特别厉害。如果有人仔细思索过后仍然愿意在这条路上走下去,我衷心祝愿他能坚持所爱,有所成就。
当然一份热爱的事业可遇而不可求,仅凭热爱就献身的人太理想化了,每个人的背景条件都不一样,而现实和生活对所有人是有要求的,能扛住压力是真汉子!
3. 未来几十年 国民大 健康 一定会成为炙手可热的专业,但是想在其中分一杯羹的人一定要找对方向。
在 人工智能 大行其道的时代,传统的药学就业会面临很大程度的洗牌,药学生应当要在这方面有自己的判断力。
这些想法,早已超过了这个问题本身,而是以下回答,仅供参考。药学专业是一个低薪专业,在一个高利润为特色的行业里面,从业人员却拿着低收入。这个行业要拿到可以吹牛逼的收入水平只有两条路,第一爬到管理层,我指的是高管;第二,做销售,卖药。
其实不奇怪,这个专业开在医学院校,但是却更像化学,应该说我们的有机化学学的比化学专业的更好,一个合格的药学毕业生,化合物合成,分析,分离能力应该比化学专业的更牛逼。当然,大部分药学毕业生都不合格。不是学生的问题,而是学校的问题!学校太穷了!这个行业非常依赖生产工具,和生物专业一样,就算你是北大药学院的高材生离开那些动辄几十几百万的仪器,你啥都干不了。我们比较一下,和 社会 上大家公认的高薪行业计算机软件,金融等专业相比,招个程序员,一台电脑,一张桌子,一把椅子就可以开始干活了。招个药学生来做新药研发,或者简单点就做做质控,一台小液相基本就是20多万了,现在做研发质谱少不了,200万,还是低配。关键是作为药物工作的基本工具,液相色谱,有几个刚毕业的药学本科生能够熟练使用?
当然关键因素是这个行业大部分工作和个人能力没有太大关系,不管是研发,质控还是生产其实都是重复性的螺丝钉工作,这样的工作是拿不到高薪的,所以这个专业的大部分人都在愉快或者不愉快的卖着药。
现在比较火的就是临床医疗方向了,在中国还处于上升期,国内现在对这方面的人才需求比较大。
其实还是一分耕耘一份收获,你到底想要什么,自身要长远的去想一想。
首先在药品生产研发领域,生产制造本身就不挣钱,还有大批生物、化学、化工的人员来抢饭碗,而且他们似乎比我们更专业,药学人员根本没有优势。在科研领域,国内的药学研究简直是笑话。企业不会去搞研究,研究新药风险大成本高,他们只需要搞搞仿制药,挣几个小钱过日子就行了。由于缺乏产业支持,高校和研究所的研究,基本是空中楼阁,看似逼格满满,实际上都是水货。
其次在药品流通销售领域,更可悲,医药代表就一药贩子,像孙子一样伺候医生;药店药师相当于超市售货员,不断地向老百姓推销维生素和保健品,比超市推销员还让人鄙视。
药学专业不是大众化,热门的专业,所以有些人不愿意去读,当然并不是所有人的爱好兴趣都一样,所以有人选专业,会根据自己的喜好,和发展方向来选专业。
药业专业学也不是很冷门,所以还是会有相当一部分的选着这个专业的。且药业专业想要以后的路。更好还要往更高层次去读博士做科研,才能有所成就,如果只是普通的本科,就只能在医院药技师或是药店做销售。
当然现在这 社会 还是需要很多大量的药学专业人才的。
因为课程难又难找工作,所以不愿意呗。相比于金融、电商等行业,药学的孩子很苦的。
我虽然不是药学专业,但是也擦边,也是生命科学类。课程真的很难,什么分子生物学、生物化学、化工原理、有机化学、基因、药物学、微生物学等等,每次考同源重组机制,背那些蛋白因子调控过程,真心累。
累就累吧,至少让我找个好工作对吧?可是药学本科出来想找工作是太难了,工资还不高。
好不容易,考上研究生,又要学什么高级分子生物学、高级有机化学等,累啊。天天做实验,八点就要打卡,晚上因为实验失败或者必须接种啥的,熬到十二点是常有的事情,最后投了篇文章还被退回来了。
好不容易顺利毕业了,找到了工作,虽然工资比其他行业低了点,但是也勉强,自己告诉自己坚持就是胜利,可是公司也是累死累活,天天实验,吃力还不讨好,被折磨的精疲力尽,老了好几岁,看着同学的热门专业过得那么潇洒,心理自然失落。
所以,前车之鉴,又加上现在房子车子的现实问题,很多人(一般人,除了那些厉害的,立志从事药学)不愿意学药学,就是太苦了,还付出得不到回报。相比于他们的同学一出校门就拿高工资、工作还很轻松,心理自然不舒服。
不过,如果你有毅力和兴趣,药学读到博士、再到国外呆几年,也是大有成就的,就看你的志向有多高。
这里讲的药学一般是指医学院的药学,而不是指化工学院或理工大学的药学。这两者是有本质区别的,医学院的药学是指药理学,也就是就业在医院里当药剂师的行业。不过大家不愿学药学的原因还是就业前景不明朗,很多药学专业的学生只能当医药代表,而医药代表的工作实质上就是推销药物,而这行业确实是个说不清道不明的行业,涉及回扣和贿赂,很多人不愿进入这行业。
而理工大学的制药专业基本和制药企业有关,新药的研发难度大专业强,能独当一面搞药物研发的科研人员并不多。所以很多人还是会加入医药代表的行列去打开销售渠道。这就是药学怎么也不如临床医学那么热门那么吃香。
‘叁’ 初中毕业学什么技术有前途,有知道的吗
1、软件开发专业。
培养目标:培养具备软件开发工作所需的知识和技能,编码熟练度和规范性达到一定要求;具备调适能力、测试能力及文档编写能力的人才。
就业方向:从事外包软件开发工程师、游戏开发工程师、数据模型工程师系统分析工程师、系统设计工程师、游戏开发工程师等工作。
2、电子商务专业。
培养目标:培养具备管理、经济、法律及网络技术等方面的知识和基本技能,能在各类企、事业单位、金融机构及政府部门从事实际业务管理、策划、调研及研究工作的专门人才。
就业方向:从事电子商务平台规划、网络编程、电子商务平台安全设计、电子商务网页设计、站点管理与技术维护等工作。
3、设计专业。
就业方向:于广告公司、企业策划设计公司等设计部门担任平面设计、装饰设计、效果图设计、展示设计等工作。、
在这里我推荐新 华 电 脑 ,办校34年了,也上过央视,你可以考虑考虑
‘肆’ 程序员与游戏程序设计师的区别
你可以先去【绘学霸】网站找“游戏设计/游戏制作”板块的【免费】视频教程-【点击进入】完整入门到精通视频教程列表: www.huixueba.net/web/AppWebClient/AllCourseAndResourcePage?type=1&tagid=307&zdhhr-11y04r-423981481
想要系统的学习可以考虑报一个网络直播课,推荐CGWANG的网络课。老师讲得细,上完还可以回看,还有同类型录播课可以免费学(赠送终身VIP)。
自制能力相对较弱的话,建议还是去好点的培训机构,实力和规模在国内排名前几的大机构,推荐行业龙头:王氏教育。
王氏教育全国直营校区面授课程试听【复制后面链接在浏览器也可打开】: www.huixueba.com.cn/school/3dmodel?type=2&zdhhr-11y04r-423981481
在“游戏设计/游戏制作”领域的培训机构里,【王氏教育】是国内的老大,且没有加盟分校,都是总部直营的连锁校区。跟很多其它同类型大机构不一样的是:王氏教育每个校区都是实体面授,老师是手把手教,而且有专门的班主任从早盯到晚,爆肝式的学习模式,提升会很快,特别适合基础差的学生。
大家可以先把【绘学霸】APP下载到自己手机,方便碎片时间学习——绘学霸APP下载: www.huixueba.com.cn/Scripts/download.html
‘伍’ 我想知道郝斌老师为什么要从程序员转为去做老师。有真正知道的认给我解答吗
中国的程序员35岁是道坎,一般不是转行就是转文职
能继续搞开发写程序,或是成为项目经理的少之又少。
咱们国家现在主要还是做外包,一般的大学毕业生,不用太刻苦的
大学4年平均年代码量有8000行的,那些外包足能应付
人家雇个新大学毕业生,肯定比雇个35岁的程序员价钱低。
‘陆’ 软件开发的程序员每月工资普遍是多少
在北上广,新进的月6000-7000元
‘柒’ 初中毕业学什么有前途
初中生到技校肯定是学习职业技能的,技校有很多,一般来说正规专业的技校在设备、教学、就业、环境等各方面都很全面,选择时要到校先实际看看,看有哪些专业,毕业之后的就业问题是否能解决等这些问题。
汽年轻人做汽修,可以积累很多的汽车专业知识,对汽车构造会有深入了了解,随着年龄的增长,技术积累达到了一定的高度,可以向汽车行业的三个方向发展,
1技术,技术总监,负知责技术指导与技术培训。
2管理,售后经理,车间主任,负责售后服务的管理工作。
3销售,道销售顾问,卖车,买汽车保险等。从基础做起,积累经验,逐步提高,汽车行业发展前景广阔,坚持一定会有好前途!祝你成功!
‘捌’ 什么极限编程
ExtremeProgramming(极限编程,简称XP)是由KentBeck在1996年提出的。KentBeck在九十年代初期与WardCunningham共事时,就一直共同探索着新的软件开发方法,希望能使软件开发更加简单而有效。Kent仔细地观察和分析了各种简化软件开发的前提条件、可能行以及面临的困难。1996年三月,Kent终于在为DaimlerChrysler所做的一个项目中引入了新的软件开发观念——XP。
XP是一个轻量级的、灵巧的软件开发方法;同时它也是一个非常严谨和周密的方法。它的基础和价值观是交流、朴素、反馈和勇气;即,任何一个软件项目都可以从四个方面入手进行改善:加强交流;从简单做起;寻求反馈;勇于实事求是。XP是一种近螺旋式的开发方法,它将复杂的开发过程分解为一个个相对比较简单的小周期;通过积极的交流、反馈以及其它一系列的方法,开发人员和客户可以非常清楚开发进度、变化、待解决的问题和潜在的困难等,并根据实际情况及时地调整开发过程。
什么是软件开发
软件开发的内容是:需求、设计、编程和测试!
需求:不仅仅是用户需求,应该是开发中遇到的所有的需求。比如,你首先要知道做这个项目是为了解决什么问题;测试案例中应该输入什么数据……为了清楚地知道这些需求,你经常要和客户、项目经理等交流。
设计:编码前,肯定有个计划告诉你要做什么,结构是怎样等等。你一定要按照这个来做,否则可能会一团糟。
编程:如果在项目截止日,你的程序不能跑起来或达不到客户的要求,你就拿不到钱。
测试:目的是让你知道,什么时候算是完成了。如果你聪明,你就应该先写测试,这样可以及时知道你是否真地完成了。否则,你经常会不知道,到底有哪些功能是真正完成了,离预期目标还差多远。
软件开发中,客户和开发人员都有自己的基本权利和义务。
客户:
定义每个用户需求的商业优先级;
制订总体计划,包括用多少投资、经过多长时间、达到什么目的;
在项目开发过程中的每个工作周,都能让投资获得最大的收益;
通过重复运行你所指定的功能测试,准确地掌握项目进展情况;
能随时改变需求、功能或优先级,同时避免昂贵的再投资;能够根据各种变化及时调整项目计划;
能够随时取消项目;项目取消时,以前的开发工作不是一堆垃圾,已开发完的功能是合乎要求的,正在进行或未完成的的工作则应该是不难接手的。
开发人员:
知道要做什么,以及要优先做什么;
工作有效率;
有问题或困难时,能得到客户、同事、上级的回答或帮助;
对工作做评估,并根据周围情况的变化及时重新评估;
积极承担工作,而不是消极接受分配;
一周40小时工作制,不加班。
这就是软件开发,除此之外再还有其它要关心的问题!
灵巧的轻量级软件开发方法
一套软件开发方法是由一系列与开发相关的规则、规范和惯例。重量级的开发方法严格定义了许多的规则、流程和相关的文档工作。灵巧的轻量级开发方法,其规则和文档相对较少,流程更加灵活,实施起来相对较容易。
在软件工程概念出现以前,程序员们按照自己喜欢的方式开发软件。程序的质量很难控制,调试程序很繁琐,程序员之间也很难读懂对方写的代码。1968年,EdsgerDijkstra给CACM写了一封题为的信,软件工程的概念由此诞生。程序员们开始摒弃以前的做法,转而使用更系统、更严格的开发方法。为了使控制软件开发和控制其它产品生产一样严格,人们陆续制定了很多规则和做法,发明了很多软件工程方法,软件质量开始得到大幅度提高。随着遇到的问题更多,规则和流程也越来越精细和复杂。
到了今天,在实际开发过程中,很多规则已经难于遵循,很多流程复杂而难于理解,很多项目中文档的制作过程正在失去控制。人们试图提出更全面更好的一揽子方案,或者寄希望于更复杂的、功能更强大的辅助开发工具(CaseTools),但总是不能成功,而且开发规范和流程变得越来越复杂和难以实施。
为了赶进度,程序员们经常跳过一些指定的流程,很少人能全面遵循那些重量级开发方法。
失败的原因很简单,这个世界没有万能药。因此,一些人提出,将重量级开发方法中的规则和流程进行删减、重整和优化,这样就产生了很多适应不同需要的轻量级流程。在这些流程中,合乎实际需要的规则被保留下来,不必要的复杂化开发的规被抛弃。而且,和传统的开发方法相比,轻量级流程不再象流水生产线,而是更加灵活。
ExtremeProgramming(XP)就是这样一种灵巧的轻量级软件开发方法。
为什么称为“Extreme”(极限)
“Extreme”(极限)是指,对比传统的项目开发方式,XP强调把它列出的每个方法和思想做到极限、做到最好;其它XP所不提倡的,则一概忽略(如开发前期的整体设计等)。一个严格实施XP的项目,其开发过程应该是平稳的、高效的和快速的,能够做到一周40小时工作制而不拖延项目进度。
XP的软件开发是什么样
1极限的工作环境
为了在软件开发过程中最大程度地实现和满足客户和开发人员的基本权利和义务,XP要求把工作环境也做得最好。每个参加项目开发的人都将担任一个角色(项目经理、项目监督人等等)并履行相应的权利和义务。所有的人都在同一个开放的开发环境中工作,最好是所有人在同一个大房子中工作,还有茶点供应;每周40小时,不提倡加班;每天早晨,所有人一起站着开个短会;墙上有一些大白板,所有的Story卡、CRC卡等都贴在上面,讨论问题的时候可以在上面写写画画;下班后大家可以一起玩电脑游戏……。
2极限的需求
客户应该是项目开发队伍中的一员,而不是和开发人员分开的;因为从项目的计划到最后验收,客户一直起着很重要的作用。开发人员和客户一起,把各种需求变成一个个小的需求模块(UserStory),例如“计算年级的总人数,就是把该年级所有班的人数累加。”;这些模块又会根据实际情况被组合在一起或者被分解成更小的模块;它们都被记录在一些小卡片(StoryCard)上,之后分别被程序员们在各个小的周期开发中(Iteration,通常不超过3个星期)实现;客户根据每个模块的商业价值来指定它们的优先级;开发人员要做的是确定每个需求模块的开发风险,风险高的(通常是因为缺乏类似的经验)需求模块将被优先研究、探索和开发;经过开发人员和客户分别从不同的角度评估每个模块后,它们被安排在不同的开发周期里,客户将得到一个尽可能准确的开发计划;客户为每个需求模块指定验收测试(功能测试)。
每发布一次开发的软件(经过一个开发周期),用户都能得到一个可以开始使用的系统,这个系统全面实现了相应的计划中的所有需求。而在一些传统的开发模式中,无论什么功能,用户都要等到所有开发完成后才能开始使用。
3极限的设计
从具体开发的角度来看,XP内层的过程是一个个基于测试驱动的开发(TestDrivenDevelopment)周期,诸如计划和设计等外层的过程都是围绕这些展开的。每个开发周期都有很多相应的单元测试(UnitTest)。刚开始,因为什么都没有实现,所以所有的单元测试都是失败的;随着一个个小的需求模块的完成,通过的单元测试也越来越多。通过这种方式,客户和开发人员都很容易检验,是否履行了对客户的承诺。XP提倡对于简单的设计(SimpleDesign),就是用最简单的方式,使得为每个简单的需求写出来的程序可以通过所有相关的单元测试。XP强调抛弃那种一揽子详细设计方式(BigDesignUpFront),因为这种设计中有很多内容是你现在或最近都根本不需要的。XP还大力提倡设计复核(Review)、代码复核以及重整和优化(Refectory),所有的这些过程其实也是优化设计的过程;在这些过程中不断运行单元测试和功能测试,可以保证经过重整和优化后的系统仍然符合所有需求。
4极限的编程
既然编程很重要,XP就提倡两个人一起写同一段程序(PairProgramming),而且代码所有权是归于整个开发队伍(CollectiveCodeOwnership)。程序员在写程序和重整优化程序的时候,都要严格遵守编程规范。任何人都可以修改其他人写的程序,修改后要确定新程序能通过单元测试。
5极限的测试
既然测试很重要,XP就提倡在开始写程序之前先写单元测试。开发人员应该经常把开发好的模块整合到一起(ContinuousIntegration),每次整合后都要运行单元测试;做任何的代码复核和修改,都要运行单元测试;发现了BUG,就要增加相应的测试(因此XP方法不需要BUG数据库)。除了单元测试之外,还有整合测试,功能测试、负荷测试和系统测试等。所有这些测试,是XP开发过程中最重要的文档之一,也是最终交付给用户的内容之一。
XP中的重要惯例和规则
1项目开发小组(Team)
在XP中,每个对项目做贡献的人都应该是项目开发小组中的一员。而且,这个小组中必须至少有一个人对用户需求非常清晰,能够提出需求、决定各个需求的商业价值(优先级)、根据需求等的变化调整项目计划等。这个人扮演的是“客户”这个角色,当然最好就是实际的最终用户,因为整个项目就是围绕最终用户的需求而展开的。程序员是项目开发小组中必不可少的成员。小组中可以有测试员,他们帮助客户制订验收测试;有分析员,帮助客户确定需求;通常还有个Coach(教练),负责跟踪开发进度、解决开发中遇到的一些问题、推动项目进行;还可以又一个项目经理,负责调配资源、协助项目内外的交流沟通等等。项目小组中有这么多角色,但并不是说,每个人做的工作是别人不能插手或干预的,XP鼓励每个人尽可能地为项目多做贡献。平等相处,取长补短;这就是最好的XP开发小组。
2计划项目(PlanningGame)、验收测试、小规模发布(SmallReleases)
XP开发小组使用简单的方式进行项目计划和开发跟踪,并以次预测项目进展情况和决定未来的步骤。根据需求的商业价值,开发小组针对一组组的需求进行一系列的开发和整合,每次开发都会产生一个通过测试的、可以使用的系统。
计划项目
XP的计划过程主要针对软件开发中的两个问题:预测在交付日期前可以完成多少工作;现在和下一步该做些什么。不断的回答这两个问题,就是直接服务于如何实施及调整开发过程;与此相比,希望一开始就精确定义整个开发过程要做什么事情以及每件事情要花多少时间,则事倍功半。针对这两个问题,XP中又两个主要的相应过程:
软件发布计划(ReleasePlanning)。客户阐述需求,开发人员估算开发成本和风险。客户根据开发成本、风险和每个需求的重要性,制订一个大致的项目计划。最初的项目计划没有必要(也没有可能)非常准确,因为每个需求的开发成本、风险及其重要性都不是一成不变的。而且,这个计划会在实施过程中被不断地调整以趋精确。
周期开发计划(IterationPlanning)。开发过程中,应该有很多阶段计划(比如每三个星期一个计划)。开发人员可能在某个周期对系统进行内部的重整和优化(代码和设计),而在某个周期增加了新功能,或者会在一个周期内同时做两方面的工作。但是,经过每个开发周期,用户都应该能得到一个已经实现了一些功能的系统。而且,每经过一个周期,客户就会再提出确定下一个周期要完成的需求。在每个开发周期中,开发人员会把需求分解成一个个很小的任务,然后估计每个任务的开发成本和风险。这些估算是基于实际开发经验的,项目做得多了,估算自然更加准确和精确;在同一个项目中,每经过一个开发周期,下一次的估算都会有更过的经验、参照和依据,从而更加准确。这些简单的步骤对客户提供了丰富的、足够的信息,使之能灵活有效地调控开发进程。每过两三个星期,客户总能够实实在在地看到开发人员已经完成的需求。在XP里,没有什么“快要完成了”、“完成了90%”的模糊说法,要不是完成了,要不就是没完成。这种做法看起来好象有利有弊:好处是客户可以马上知道完成了哪些、做出来的东西是否合用、下面还要做些什么或改进什么等等;坏处是客户看到做出来的东西,可能会很不满意甚至中止合同。实际上,XP的这种做法是为了及早发现问题、解决问题,而不是等到过了几个月,用户终于看到开发完的系统了,然后才告诉你这个不行、那个变了、还要增加
哪个内容等等。
验收测试
客户对每个需求都定义了一些验收测试。通过运行验收测试,开发人员和客户可以知道开发出来的软件是否符合要求。XP开发人员把这些验收测试看得和单元测试一样重要。为了不浪费宝贵的时间,最好能将这些测试过程自动化。
频繁地小规模发布软件(SmallReleases)
每个周期(Iteration)开发的需求都是用户最需要的东西。在XP中,对于每个周期完成时发布的系统,用户都应该可以很容易地进行评估,或者已经能够投入实际使用。这样,软件开发对于客户来说,不再是看不见摸不着的东西,而是实实在在的。XP要求频繁地发布软件,如果有可能,应该每天都发布一个新版本;而且在完成任何一个改动、整合或者新需求后,就应该立即发布一个新版本。这些版本的一致性和可靠性,是靠验收测试和测试驱动的开发来保证的。
3简单设计,PairProgramming,测试驱动开发,重整和优化
XP程序员不但做为一个开发小组共同工作,还以两个人为一个小开发单元编写同一个程序。开发人员们进行简单的设计,编写单元测试后再编写符合测试要求的代码,并在满足需求的前提下不断地优化设计。
简单设计
XP中让初学者感到最困惑的就是这点。XP要求用最简单的办法实现每个小需求,前提是按照这些简单设计开发出来的软件必须通过测试。这些设计只要能满足系统和客户在当下的需求就可以了,不需要任何画蛇添足的设计,而且所有这些设计都将在后续的开发过程中就被不断地重整和优化。
在XP中,没有那种传统开发模式中一次性的、针对所有需求的总体设计。在XP中,设计过程几乎一直贯穿着整个项目开发:从制订项目的计划,到制订每个开发周期(Iteration)的计划,到针对每个需求模块的简捷设计,到设计的复核,以及一直不间断的设计重整和优化。整个设计过程是个螺旋式的、不断前进和发展的过程。从这个角度看,XP是把设计做到了极致。
PairProgramming
XP中,所有的代码都是由两个程序员在同一台机器上一起写的——这是XP中让人争议最多、也是最难实施的一点。这保证了所有的代码、设计和单元测试至少被另一个人复核过,代码、设计和测试的质量因此得到提高。看起来这样象是在浪费人力资源,但是各种研究表明事实恰恰相反。——这种工作方式极大地提高了工作强度和工作效率。
很多程序员一开始是被迫尝试这点的(XP也需要行政命令的支持)。开始时总是不习惯的,而且两个人的效率不会比一个人的效率高。这种做法的效果往往要坚持几个星期或一两个月后才能很显着。据统计,在所有刚开始PairProgramming的程序员中,90%的人在两个月以后都很认为这种工作方式更加高效。
项目开发中,每个人会不断地更换合作编程的伙伴。因此,PairProgramming不但提高了软件质量,还增强了相互之间的知识交流和更新,增强了相互之间的沟通和理解。这不但有利于个人,也有利于整个项目、开发队伍和公司。从这点看,PairProgramming不仅仅适用于XP,也适用于所有其它的软件开发方法。
测试驱动开发
反馈是XP的四个基本的价值观之一——在软件开发中,只有通过充分的测试才能获得充分的反馈。XP中提出的测试,在其它软件开发方法中都可以见到,比如功能测试、单元测试、系统测试和负荷测试等;与众不同的是,XP将测试结合到它独特的螺旋式增量型开发过程中,测试随着项目的进展而不断积累。另外,由于强调整个开发小组拥有代码,测试也是由大家共同维护的。即,任何人在往代码库中放程序(CheckIn)前,都应该运行一遍所有的测试;任何人如果发现了一个BUG,都应该立即为这个BUG增加一个测试,而不是等待写那个程序的人来完成;任何人接手其他人的任务,或者修改其他人的代码和设计,改动完以后如果能通过所有测试,就证明他的工作没有破坏愿系统。这样,测试才能真正起到帮助获得反馈的作用;而且,通过不断地优先编写和累积,测试应该可以基本覆盖全部的客户和开发需求,因此开发人员和客户可以得到尽可能充足的反馈。
重整和优化(Refactoring)
XP强调简单的设计,但简单的设计并不是没有设计的流水帐式的程序,也不是没有结构、缺乏重用性的程序设计。开发人员虽然对每个USERSTORY都进行简单设计,但同时也在不断地对设计进行改进,这个过程叫设计的重整和优化(Refactoring)。这个名字最早出现在MartinFowler写的《Refactoring:》这本书中。
Refactoring主要是努力减少程序和设计中重复出现的部分,增强程序和设计的可重用性。Refactoring的概念并不是XP首创的,它已经被提出了近30年了,而且一直被认为是高质量的代码的特点之一。但XP强调,把Refactoring做到极致,应该随时随地、尽可能地进行Refactoring,只要有可能,程序员都不应该心疼以前写的程序,而要毫不留情地改进程序。当然,每次改动后,程序员都应该运行测试程序,保证新系统仍然符合预定的要求。
4频繁地整合,集体拥有代码(CollectiveCodeOwnership),编程规范
XP开发小组经常整合不同的模块。为了提高软件质量,除了测试驱动开发和PairProgramming以外,XP要求每个人的代码都要遵守编程规范,任何人都可以修改其他人写的代码,而且所有人都应该主动检查其他人写的代码。
频繁地整合(Integration)
在很多项目中,开发人员往往很迟才把各个模块整合在一起。在这些项目中,开发人员经常在整合过程中发现很多问题,但不能肯定到底是谁的程序出了问题;而且,只有整合完成后,开发人员才开始稍稍使用整个系统,然后就马上交付给客户验收。对于客户来说,即使这些系统能够通过终验收测试,因为使用时间短,客户门心里并没有多少把握。
为了解决这些问题,XP提出,整个项目过程中,应该频繁地,尽可能地整合已经开发完的USERSTORY(每次整合一个新的USERSTORY)。每次整合,都要运行相应的单元测试和验收测试,保证符合客户和开发的要求。整合后,就发布一个新的应用系统。这样,整个项目开发过程中,几乎每隔一两天,都会发布一个新系统,有时甚至会一天发布好几个版本。通过这个过程,客户能非常清楚地掌握已经完成的功能和开发进度,并基于这些情况和开发人员进行有效地、及时地交流,以确保项目顺利完成。
集体拥有代码(CollectiveCodeOwnership)
在很多项目开发过程中,开发人员只维护自己的代码,而且很多人不喜欢其他人随意修改自己的代码。因此,即使可能有相应的比较详细的开发文档,但一个程序员却很少、也不太愿意去读其他程序员的代码;而且,因为不清楚其他人的程序到底实现了什么功能,一个程序员一般也不敢随便改动其他人的代码。同时,因为是自己维护自己的代码,可能因为时间紧张或技术水平的局限性,某些问题一直不能被发现或得到比较好的解决。针对这点,XP提倡大家共同拥有代码,每个人都有权利和义务阅读其他代码,发现和纠正错误,重整和优化代码。这样,这些代码就不仅仅是一两个人写的,而是由整个项目开发队伍共同完成的,错误会减少很多,重用性会尽可能地得到提高,代码质量是非常好。
为了防止修改其他人的代码而引起系统崩溃,每个人在修改后都应该运行测试程序。(从这点,我们可以再次看到,XP的各个惯例和规则是怎样有机地结合在一起的。)
编程规范
XP开发小组中的所有人都遵循一个统一的编程标准,因此,所有的代码看起来好像是一个人写的。因为有了统一的编程规范,每个程序员更加容易读懂其他人写的代码,这是是实现CollectiveCodeOwnership的重要前提之一。
5Metaphor(系统比喻),不加班
XP过程通过使用一些形象的比喻让所有人对系统有个共同的、简洁的认识。XP认为加班是不正常的,因为这说明关于项目进度的估计和安排有问题。
Metaphor(系统比喻)
为了帮助每个人一致清楚地理解要完成的客户需求、要开发的系统功能,XP开发小组用很多形象的比喻来描述系统或功能模块是怎样工作的。比如,对于一个搜索引擎,它的Metaphor可能就是“一大群蜘蛛,在网上四处寻找要捕捉的东西,然后把东西带回巢穴。”
不加班
大量的加班意味着原来的计划是不准确的,或者是程序远不清楚自己到底什么时候能完成什么工作。而且,开发管理人员和客户也因此无法准确掌握开发速度;开发人员也因此非常疲劳。XP认为,如果出现大量的加班现象,开发管理人员(比如Coach)应该和客户一起确定加班的原因,并及时调整项目计划、进度和资源。
XP中一些基本概念的简介
UserStory:开发人员要求客户把所有的需求写成一个个独立的小故事,每个只需要几天时间就可以完成。开发过程中,客户可以随时提出新的UserStory,或者更改以前的UserStory。
StoryEstimates和开发速度:开发小组对每个UserStory进行估算,并根据每个开发周期(Iteration)中的实际情况反复计算开发速度。这样,开发人员和客户能知道每个星期到底能开发多少UserStory。
ReleasePlan和ReleaseScope:整个开发过程中,开发人员将不断地发布新版本。开发人员和客户一起确定每个发布所包含的UserStory。
Iteration(开发周期)和IterationPlan:在一个Release过程中,开发人员要求客户选择最有价值的UserStory作为未来一两个星期的开发内容。
TheSeed:第一个开发周期(Iteration)完成后,提交给客户的系统。虽然这不是最终的产品,但它已经实现了几个客户认为是最重要的Story,开发人员将逐步在其基础上增加新的模块。
ContinuousIntegration(整合):把开发完的UserStory的模块一个个拼装起来,一步步接近乃至最终完成最终产品。
验收测试(功能测试):对于每个UserStory,客户将定义一些测试案例,开发人员将使运行这些测试案例的过程自动化。
UnitTest(单元测试):在开始写程序前,程序员针对大部分类的方法,先写出相应的测试程序。
Refactoring(重整和优化):去掉代码中的冗余部分,增加代码的可重用性和伸缩性。
小结
XP的一个成功因素是重视客户的反馈——开发的目的就是为了满足客户的需要。XP方法使开发人员始终都能自信地面对客户需求的变化。XP强调团队合作,经理、客户和开发人员都是开发团队中的一员。团队通过相互之间的充分交流和合作,使用XP这种简单但有效的方式,努力开发出高质量的软件。XP的设计简单而高效;程序员们通过测试获得客户反馈,并根据变化修改代码和设计,他们总是争取尽可能早地将软件交付给客户。XP程序员能够勇于面对需求和技术上的变化。
XP很象一个由很多小块拼起来的智力拼图,单独看每一小块都没有什么意义,但拼装好后,一幅美丽的图画就会呈现在你面前。
‘玖’ 想做程序员,学哪种语言好
其实这里说的语言也就是我们所熟知的编程语言。编程语言俗称“计算机语言”,种类非常的多,总的来说可以分成机器语言、汇编语言、高级语言三大类。程序是计算机要执行的指令的集合,而程序全部都是用我们所掌握的语言来编写的。
如今IT行业如此火爆必然吸引了很多人想加入其中,那么如此多的编程语言,我们该如何选择学习呢?究竟哪种编程语言或者哪些编程语言能在工作中给予我们最大的帮助?下面我就以TIOBE编程语言榜流行度较高的编程语言为例,详细为大家解答一下主流编程的用途,希望能对大家的编程语言学习有一定的借鉴意义。
Java 占比16.8%
Java是一种简单的,跨平台的,面向对象的,分布式的,动态的语言。时至今日,Java依旧是在科学应用中最好选择,包括自然语言处理。同时Java是默认的软件行业的应用程序开发语言,在金融服务行业的大量使用,投资银行和电子商务应用空间也非常之大。
C语言 占比14.9%
C语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。主要用于嵌入式开发,操作系统开发,文字处理程序开发等。它对编写程序限制少,灵活性大,功能强。现在C语言不仅用来编写系统软件,也用来编写应用软件。
C++ 占比7.4%
C++是C语言的继承,它既可以进行C语言的过程化程序设计,又可以进行以抽象数据类型为特点的基于对象的程序设计,还可以进行以继承和多态为特点,的面向对象的程序设计。很多游戏或者互联网公司的后台服务器程序都是基于C++开发的,在科学计算领域,近年C++凭借先进的数值计算库、泛型编程等优势在这一领域也应用颇多。
Python 占比6.9%
Python是一种解释型、面向对象、动态数据类型的高级程序设计语言。Python具有丰富和强大的库。它常被昵称为胶水,能够把用其他语言制作的各种模块很轻松地联结在一起。在神经网络、深度学习方面,Python都能够找到比较成熟的包来加以调用。而且Python是面向对象的动态语言,且适用于科学计算,这就使得Python在人工智能方面备受青睐。
C# 占比3.5%
C#是一种安全的、稳定的、简单的、优雅的,由C和C++衍生出来的面向对象的编程语言。它在继承C和C++强大功能的同时去掉了一些它们的复杂特性。主要用于客户端应用程序、web应用。在数据处理方面有着很好的模型与框架,灵活多变的数据库管理模式。支持多处理器多核的异步任务模型,多个异步任务之间可以自由调控,可以自行安排各个线程的执行顺序。
最终选择哪种编程语言学习,决定权还是在自己手中,希望大家通过仔细评估,结合自己的兴趣和职业规划作出最明智的学习选择。