① 软件开发初学者应该看什么书
学习软件开发都需要看《c和指针》、《c缺陷和陷阱》、《c专家编程》,这三本书是一个初级C程序员必看的三本书,同时也是应届新员工必须好好学习的教材,非常适合刚毕业的大学生学习 。
另外还有:
C++语言提升:
《Effective C++:改善程序与设计的55个具体做法》
《More Effective C++:35个改善编程与设计的有效方法(中文版)》
《C++沉思录》
《C++Templates中文版》
《深度探索 C++ 对象模型》
《泛型编程与STL》
一个由C转向C++的程序员,从来没有系统的学习过C++的语法,往往是用到的什么学习什么。如果要系统入门,《C++ primer》倒是不错。
设计类《代码大全》:
《重构-改善既有代码的设计》
《代码整洁之道》
《实现模式》
《程序员应该知道的97件事》
这几本书一般讲的是函数以及更低层次的设计。《代码大全》完完整整的读完过,而且做了很多的笔记,获益良多。《重构》就不必说了,其他几本书前面大致看了一下,也非常不错,计划有时间要好好学习一下。
架构:
《软件体系结构的艺术》
《领域驱动设计:软件核心复杂性应对之道》
《软件架构师应该知道的97件事》
《企业应用架构模式》
《面向模式的软件体系结构卷1:模式系统》
《软件架构设计》
《架构师需要知道的97件事》
敏捷开发:
《测试驱动开发》
《敏捷软件开发——原则、模式与实践》
《Scrum敏捷项目管理》
《硝烟中的Scrum和XP——我们如何实施Scrum》
《敏捷软件开发》
② 初学者java程序员怎样快速提升自己技术
一、提升对java技术的思考
很多人口里嚷着要提升java技术,行动也有,但就是不奏效,是怎么回事呢?因为行动前没有好好的思考,比如老是盯着已经掌握熟练的java技术练习,你为什么不考虑多练练你不熟习的java技术呢?那么应该思考些什么关于java技术的问题呢?
1、这个技术能解决什么问题(why)
2、比较适合在哪些场景应用(where+when)
3、这个技术跟我已经掌握的哪个知识或技能类似,有什么差别、有什么特点、有什么优点和缺点(what)
4、了解前面的问题后,你在开始考虑提升java技术那么效果会比较好。
二、善于模仿,把他人的变成你的
你的代码刚开始是怎么学会的呢?不外乎模仿,但是模仿也有诀窍,有的人模仿的快,有的人模仿的慢。时常强调,多去看看其他人的代码是怎么编写的,你可以从其他人的代码中模仿出很多的东西,甚至你可以尝试去修改其他人的代码,让它跟你的想法更加接近,看看你下次是不是可以这样做,看看学习效率有没有提高或者变得简单,长此以往,你的java技术一定会有质的提升。
③ adobe系列软件有哪些,都叫什么名字
Adobe DN 样机软件
链接:https://pan..com/s/1HtVFhcUmRWzPpoYAMDEHvA
adobe dimension 2020是由原来的Project Felix软件升级更名而来的,是一款强大的3d设计软件,其最大的特色在于可以将Photoshop和Illustrator制作的图片文件转换为3d模型,实时创建真实的3d图像,让用户的品牌更加立体化,能够应用于产品模型,品牌可视化效果,包装设计等领域。adobe dimension 2020也称之为adobe dimension3.0,这是因为两个版本一个是根据年份命名,一个是根据版本命名,事实上是同一软件。通过此软件,用户可以引入Ps和Ai文件,在工作流程中进行编辑并支持画板。同时支持3D格式,可以导入Autodesk FBX,STL,Sketchup SKP和OBJ文件。
④ 有哪些适合自学的编程书籍推荐
一般来说c语言是编程入门基础
推荐c语言程序设计 何钦铭 颜晖主编
有配套的pta习题还有视频
⑤ 操作系统
1980年,IBM推出了IBM PC新机型,它采用INTEL 8086CPU,具有160KB的磁盘驱动器和其他的输入输出设备。为了配合这种机型,IBM公司需要一个16位的操作系统,此时就出现了三个互相竞争的系统:CP/M-86、P-System,以及微软公司的MS-DOS。最后微软的MS-DOS取得了战争的胜利,成为IBM新机型的操作系统。1981年,微软花费半年时间编写的MS-DOS 1.0和IBM PC同时在IT界亮相。当时的MS-DOS为了适应IBM的计划以及和CP/M系统相兼容,在许多方面的设计都和CP/M相似。但那时CP/M系统仍是业界标准,MS-DOS的兼容性受到人们怀疑。
资料是老了点,但够用了,呵呵
在接下来的几年中,微软公司的MS-DOS在各种压力中推出了1.1、1.25几个改进版本。这时MS-DOS才得到了业界同行的认可,DEC、COMPAQ公司都采用MS-DOS作为其PC机的操作系统。
1983年的3月,微软公司发布了MS-DOS 2.0,这个版本较以前有了很大的改进,它可以灵活地支持外部设备,同时引进了UNIX系统的目录树文件管理模式。这时的MS-DOS开始超越CP/M系统。
接着,2.01、2.11、3.0版本的MS-DOS问世,MS-DOS也渐渐成为了16位操作系统的标准。
1987年的4月,微软推出了MS-DOS 3.3,它支持1.44MB的磁盘驱动器,支持更大容量的硬盘等。它的流行确立了MS-DOS在个人电脑操作系统的霸主地位。
MS-DOS的最后一个版本是6.22版,这以后的DOS就和Windows相结合了。6.22版的MS-DOS已是一个十分完善的版本,众多的内部、外部命令使用户比较简单地对电脑进行操作,另外其稳定性和可扩展性都十分出色。
DOS的优点
DOS曾经占领了个人电脑操作系统领域的大部分,全球绝大多数电脑上都能看到它的身影。由于DOS系统并不需要十分强劲的硬件系统来支持,所以从商业用户到家庭用户都能使用。
1、文件管理方便
DOS采用了FAT(文件分配表)来管理文件,这是对文件管理方面的一个创新。所谓FAT(文件分配表),就是管理文件的连结指令表,它用链条的形式将表示文件在磁盘上的实际位置的点连起来。把文件在磁盘上的分配信息集中到FAT表管理。它是MS-DOS进行文件管理的基础。同时DOS也引进了UNIX系统的目录树管理结构,这样很利于文件的管理。
2、外设支持良好
DOS系统对外部设备也有很好的支持。DOS对外设采取模块化管理,设计了设备驱动程序表,用户可以在Config.sys文件中提示系统需要使用哪些外设。
3、小巧灵活
DOS系统的体积很小,就连完整的MS-DOS 6.22版也只有数MB的样子,这和现在Windows庞大的身躯比起来可称得上是蚂蚁比大象了。其实想启动DOS系统只需要一张软盘即可,DOS的系统启动文件有IO.SYS、MSDOS.SYS和COMMAND.COM三个,只要有这三个文件就可以使用DOS启动电脑,并且可以执行内部命令、运行程序和进行磁盘操作。
Windows系统固然是当前最流行的操作系统,但微软向下兼容的特点决定了Windows是基于DOS的,Windows95、Windows98、WindowsME都是以DOS为基础。Windows系统体积的庞大、代码的繁冗使得Windows系统极不稳定。当Windows出现了问题,而其本身又无法解决的时候就只有使用DOS来完成任务了。
4、应用程序众多
能在DOS下运行的软件很多,各类工具软件是应有尽有。由于DOS当时是PC机上最普遍的操作系统,所以支持它的软件厂商十分多。现在许多Windows下运行的软件都是从DOS版本发展过去的,如WORD、WPS等,一些编程软件如Fox Pro等也是由DOS版本的FoxBase进化而成的。
同时DOS的兼容性也很不错,许多软件或外设在DOS下都能正常地工作。
DOS的不足
虽然DOS有不少的优点,但同时它也具有一些不足。DOS是一个单用户、单任务的操作系统,只支持一个用户使用,并且一次只能运行一个程序,这和Windows、Linux等支持多用户、多任务的操作系统相比就比较逊色了。
DOS采用的是字符操作界面,用户对电脑的操作一般是通过键盘输入命令来完成的。所以想要操作DOS就必须学习相应的命令。另外它的操作也不如图形界面来得直观,对DOS的学习还是比较费力的,这对家庭用户多少造成了一些困难。
DOS对多媒体的支持也不尽人意。在DOS中,大多数多媒体工作也都是在Windows 3.x中完成,那时的Windows 3.x只是DOS的一种应用程序。但Windows 3.x对多媒体的支持也很有限,无法支持3D加速卡等技术。对互联网也没有一个十分令人满意的解决方案。
这些都显示Windows等操作系统代替DOS是历史的必然。
DOS作为一个曾经辉煌一时的操作系统霸主,对于现在的人们还是有不小的作用。它的小巧灵活对于电脑修理人员来说有很大用处。Windows中许多故障还只能DOS下解决。另外学习DOS对学习其他的操作系统,如Linux、UNIX等也有一定帮助。
自从微软1985年推出Windows 1.0以来,Windows系统经历了十多年风风雨雨。从最初运行在DOS下的Windows 3.x,到现在风靡全球的Windows 9x、Windows 2000,Windows几乎代替了DOS曾经担当的位子,成为了新一带的操作系统大亨。
鲜艳的色彩、动听的音乐、前所未有的易用性,以及令人兴奋的多任务操作,使电脑操作成为一种享受。点几下鼠标就能完成工作,还可以一边用“CD播放器”放CD,一边用WO
RD写文章,这是多么悠闲的事情,这都是Windows带给人们的礼物。
最初的Windows 3.x系统只是DOS的一种16位应用程序,但在Windows 3.1中出现了剪贴板、文件拖动等功能,这些和Windows的图形界面使用户的操作变得简单。当32位的Windows 95发布的时候,Windows3.x中的某些功能被保留了下来。
Windows的流行让人们感到吃惊,几乎所有家庭用户的电脑上都安装了Windows,大部分的商业用户也选择了它。一时间,蓝天白云出现在世界各个角落。
Windows 98是Windows 9x的最后一个版本,在它以前有Windows 95和Windows 95 OEM两个版本,Windows 95 OEM也就是常说的Windows 97,其实这三个版本并没有很大的区别,它们都是前一个版本的改良产品。越到后来的版本可以支持的硬件设备种类越多,采用的技术也越来越先进。Windows ME(Windows千禧版)具有Windows 9x和Windows 2000的特征,它实际上是由Windows 98改良得到的,但在界面和某些技术方面是模仿Windows 2000。微软声称在Windows ME中去除掉了DOS,不再以DOS为基础。但实际上并不是如此,DOS仍然存在,只不过不能通过正常步骤进入,各种媒体上已有《恢复WindowsME的实DOS模式》一类的文章出现。Windows 2000即Windows NT 5.0,这是微软为解决Windows 9x系统的不稳定和Windows NT的多媒体支持不足推出的一个版本。它分为Windows 2000 Perfessional和Windows 2000 Sever两种版本,前者是面向普通用户的,后者则是面向网络服务器的。后者的硬件要求要高于前者。
Windows的优点
Windows之所以如此流行,是因为它有许多吸引用户的地方。
1、界面图形化
以前DOS的字符界面使得一些用户操作起来十分困难,Mac首先采用了图形界面和使用鼠标,这就使得人们不必学习太多的操作系统知识,只要会使用鼠标就能进行工作,就连几岁的小孩子都能使用。这就是界面图形化的好处。在Windows中的操作可以说是“所见即所得”,所有的东西都摆在你眼前,只要移动鼠标,单击、双击即可完成。
2、多用户、多任务
Windows系统可以使多个用户用同一台电脑而不会互相影响。Windows 9x在此方面做得很不好,多用户设置形同虚设,根本起不到作用。Windows 2000在此方面就做得比较完善,管理员(Administrator)可以添加、删除用户,并设置用户的权利范围。多任务是现在许多操作系统都具备的,这意味着可以同时让电脑执行不同的任务,并且互不干扰。比如一边听歌一边写文章,同时打开数个浏览器窗口进行浏览等都是利用了这一点。这对现在的用户是必不可少的。
3、网络支持良好
Windows 9x和Windows 2000中内置了TCP/IP协议和拨号上网软件,用户只需进行一些简单的设置就能上网浏览、收发电子邮件等。同时它对局域网的支持也很出色,用户可以很方便得在Windows中实现资源共享。
4、出色的多媒体功能
这也是Windows吸引人们的一个亮点。在Windows中可以进行音频、视频的编辑/播放工作,可以支持高级的显卡、声卡使其“声色具佳”。MP3以及ASF、SWF等格式的出现使电脑在多媒体方面更加出色,用户可以轻松地播放最流行的音乐或观看影片。
5、硬件支持良好
Windows 95以后的版本包括Windows 2000都支持“即插即用(Plug and Play)”技术,这使得新硬件的安装更加简单。用户将相应的硬件和电脑连接好后,只要有其驱动程序Windows就能自动识别并进行安装。用户再也不必像在DOS一样去改写Config.sys文件了,并且有时候需要手动解决中断冲突。几乎所有的硬件设备都有Windows下的驱动程序。随着Windows的不断升级,它能支持的硬件和相关技术也在不断增加,如USB设备、AGP技术等。
6、众多的应用程序
在Windows下有众多的应用程序可以满足用户各方面的需求。Windows下有数种编程软件,有无数的程序员在为Windows编写着程序。
此外,Windows NT、Windows 2000系统还支持多处理器,这对大幅度提升系统性能很有帮助。
Windows的不足
Windows众多的功能导致了它体积的庞大,程序代码的繁冗。这些都使得Windows系统不是十分稳定,也背上了“瘟旧屋”、“瘟酒吧”的称号。一些Windows系统补丁、防死机的软件都应运而生。系统的不稳定使得一些用户在使用时提心吊胆,生怕突然出故障,导致自己的工作成果化为清烟。
Windows也是一个十分脆弱的系统,有时一个小故障就有可能导致系统无法正常启动。
它对于自身的修复能力实在不敢恭维,故障的解决不能很好地支持,许多修理工作必须在DOS下完成。
Windows系统是漏洞百出,虽然有些漏洞并不会干扰用户的一般操作,但在网络方面的漏洞却能对用户造成影响。这些漏洞使一些人有入侵系统和攻击系统的机会,其中有利用NetBIOS进行非法共享,对Windows 9x系统进行蓝屏攻击等。
虽然Windows的操作比较简单,但有时候却不是很灵活,有些工作还需要DOS的辅助。
但无论如何,Windows使更多的普通人能够更方便地使用电脑。从这点来看,它对PC时代的贡献简直是无与伦比的。
⑥ 打算几个人疯狂的看法么我
“写这篇文章(也许会写成一本书),我想讲述一个程序员从学习编程开始,到第一份作250元工资,再到后来月薪6-7万的成长历程。就讲我为什么要做程序员,讲我怎样入门,学习……这篇文章里不会有太多技术方面的东西,就是一个程序员的成长历程,也许有些内容在你身上都会找到影子。”
点开绝影的博客,只有一个主题——《疯狂的程序员》,却有了142255次点击: 953个评论(截止记者发稿),而这个博客不过开张了一个多月。《疯狂的程序员》大概分为学校、公司、创业三个阶段,讲述了一个普通程序员的故事,却引起了圈里的强烈共鸣。应网友的要求,带着大家的好奇和疑问记者采访了博客主人绝影。
记者:究竟是什么原因使你创作这篇系列小说而且保持很快的频率去坚持?
绝影:早在去年5月份的时候,我和几个朋友开始准备创业的事情,当时我们准备上一个酝酿了很久的CASE。这个CASE我们认为很有前途创业也很有意义,那时候我们就想,从我们创业开始,我们就写篇小说,记录我们创业的点点滴滴,最后CASE做完了,小说也出来了,小说的名字就叫《疯狂的程序员》。
当时我们真的觉得我们很疯狂,特别是我认为我的朋友,他超前的理念和对未来的展望真的让我觉得我们在做一件非常有意义也非常疯狂的事情。――这种理念和我们的热情不是一般人所具有的。
记者:有没有“导火线”事件让你最终下定决心来写?
绝影:年底那段时间,我感觉我的情绪非常不好,非常烦躁,据我了解我很多朋友、同行也和我差不多,年底了,情绪起伏很大。那段时间,我开始和朋友在群里讨论这个问题,我很想帮助朋友也帮助我自己把心情稳定下来,因为心情对工作的影响是很大的。我问:我们应该怎么办?群里一个叫简单的人的朋友说:“写小说,拍电视,开公司,慈善工程,到国家安全机构工作。”虽然他可能是说着玩,但我忽然想起5月份的计划,而且那段时间我不是很忙,所以我跟他们说:“写小说,是个好点子。”
记者:未来是否有出版的打算?
绝影:我开始写这篇小说的时候并没有打算到出版,毕竟作为一个程序员自己主要的工作还是写程序。小说写到这里,有几家出版社跟我有些联系,考虑到如果签了出版合同就无法在Blog上发表小说全文,所以我在群里作了一些调查,大部分朋友还是支持出版。所以现在就继续写,如果有好的出版社也可能会考虑出版。
记者:小说可以理解为你分享你的感悟么?有人会问“你凭什么写东西来影响别人,你的经历和体会有什么过人之处”。这个问题你会怎么回答?
绝影:写这部小说的目的并不是要分享我的感悟,我只是想把一个程序员成长历程原原本本记录下来,供大家参考。
别人问我“你凭什么写东西来影响别人,你的经历和体会有什么过人之处”,我会告诉他,我不是什么“资深”,也不是什么“专家”,比起很多人,我也的确没有什么过人之出,也谈不上什么“感悟”。我并没有告诉大家你应该怎样怎样学习,或者你应该怎样怎样做,或者学什么什么好。我把我成长的经历,我的经验和一些我自己的看法告诉大家,你觉得有道理,正确的,你可以记住。你觉得什么讲得不对,或者是在吹牛,你大可以一笑了之。
记者:你的该系列引起了程序员圈内不小的反响,看到网友的关注、评论你的心情怎样?
绝影:当初写这部小说的时候,我并没有想到会有这么多人来关注、能够引起这么多共鸣。在网友们的评论中,很少有骂我的,我认为是我站的角度不一样。从一开始,我就把自己放在一个普通程序员的角度,讲一个普通程序员的故事,也许你已经是个成功的程序员,甚至做到了项目经理、软件架构师,当你来看这篇小说,也许你能回忆起N年前的你。也许你还是个学生正在学习写程序,当你来看这篇小说,也许会觉得小说写的正是你。也许你刚接触程序员这个领域,当你来看这篇小说,也许会让你对“程序员”有个完整的立体的认识。
记者:读者们是否体会到了你创作的意图、他们怎么反应……作为创作者你怎么看待这些?
绝影:当初在写的时候,我还真怕很多人不了解我的创作意图,有些朋友告诉我:要写技术性的文章,否则大家只喜欢能博人一笑的文章。但是现在来看,很多读者的确体会到了我的创作意图,大部分人的评论并不是简单地“搞笑”、“支持”等等。当然,我会很关心这个问题,因为如果大家对文章的理解偏离了我的创作目的,那么这篇小说是相当失败也没有任何意义的,我不会继续下去。
记者:你认为你的创作让大家得到了什么,你自己得到了什么?进一步来说,你觉得你辛苦的创作得到的这些值得么?
绝影:我认为这篇小说针对的最主要的群体应该是刚学习写程序或者刚加入程序员这个行业工作不久的年轻人。在“公告”里我说了,他们最需要的并不是什么高级技术,现在高级技术的书很多。有些人也许会认为一个高手带我或者一本好书就能让我立刻从菜鸟变成大虾。我要告诉他们,不是这样,没有这样的人也没有这样的书。我想让大家知道的是写程序和做任何工作一样,都要一步一个脚印踏踏实实地来,至少小说中的“绝影”就是这样。
我创作这篇小说觉得很值得,很有意义。本身我从程序员开始,最后一步一步到公司的项目经理。像老总这样级别的人,他们也许无法也没机会去了解、理解程序员这个群体,但是我能。我不光是希望我带过的程序员,也希望整个“程序员”这个群体都能有更多人来关注。
也许我可以在群里面跟大家讲一些我的经历,经验,但不可能群里的所有人天天都在线,随时都能看到。所以写成小说,发到Blog上,让更多的人看到,这是件很有意义的事情。
记者:你怎么看待程序员这个职业,有没有什么话要共勉?
绝影:我想说“程序员”首先是“人”。“程序员”的人生不应该是枯燥无味整天跟机器打交道,也不应该如圈外描述那样“连找女朋友都困难”。所以大家在小说中看到“绝影”的生活也是丰富多彩,有自己的想法,有自己的朋友。所以我希望所有的“程序员”或者希望成为“程序员”的朋友,能有丰富多彩地生活,能去处心浮气躁踏踏实实地去学习不断提高自己,能充满热情满怀希望地去面对工作。同时我也想告诫大家,不要因为小说中的“绝影”学的32位汇编就盲目跟风,“闻道有先后,术业有专攻,如是而已”,任何事情,只要把他做到及至,都会很成功。
同时我也很感动,大多数时候我都是半夜两三点才发表文章,很多朋友跟我说:“等也要等到看了小说才睡觉。”我想对这样朋友真诚地说声谢谢,谢谢你们的支持。
绝影的博客:“写这篇文章(也许会写成一本书),我想讲述一个程序员从学习编程开始,到第一份作250元工资,再到后来月薪6-7万的成长历程。就讲我为什么要做程序员,讲我怎样入门,学习……这篇文章里不会有太多技术方面的东西,就是一个程序员的成长历程,也许有些内容在你身上都会找到影子。”
点开绝影的博客,只有一个主题——《疯狂的程序员》,却有了142255次点击: 953个评论(截止记者发稿),而这个博客不过开张了一个多月。《疯狂的程序员》大概分为学校、公司、创业三个阶段,讲述了一个普通程序员的故事,却引起了圈里的强烈共鸣。应网友的要求,带着大家的好奇和疑问记者采访了博客主人绝影。
记者:究竟是什么原因使你创作这篇系列小说而且保持很快的频率去坚持?
绝影:早在去年5月份的时候,我和几个朋友开始准备创业的事情,当时我们准备上一个酝酿了很久的CASE。这个CASE我们认为很有前途创业也很有意义,那时候我们就想,从我们创业开始,我们就写篇小说,记录我们创业的点点滴滴,最后CASE做完了,小说也出来了,小说的名字就叫《疯狂的程序员》。
当时我们真的觉得我们很疯狂,特别是我认为我的朋友,他超前的理念和对未来的展望真的让我觉得我们在做一件非常有意义也非常疯狂的事情。――这种理念和我们的热情不是一般人所具有的。
记者:有没有“导火线”事件让你最终下定决心来写?
绝影:年底那段时间,我感觉我的情绪非常不好,非常烦躁,据我了解我很多朋友、同行也和我差不多,年底了,情绪起伏很大。那段时间,我开始和朋友在群里讨论这个问题,我很想帮助朋友也帮助我自己把心情稳定下来,因为心情对工作的影响是很大的。我问:我们应该怎么办?群里一个叫简单的人的朋友说:“写小说,拍电视,开公司,慈善工程,到国家安全机构工作。”虽然他可能是说着玩,但我忽然想起5月份的计划,而且那段时间我不是很忙,所以我跟他们说:“写小说,是个好点子。”
⑦ 华为面试请教,请各位前辈指教,万分感谢!
一、优秀程序员必备七要件
程序员是一个要求技术含量很高的职业,同时要求有不断进取的精神和不达目的决不罢休的精神状态,以下就是简单总结的如何做个有些的程序员,希望对各位的求职和工作能够有所帮助。
1.踏实的工作态度。低承诺,高实现:如果你的承诺确实是管理人员想听到的,
他就会喜欢你。但是,如果不能按照承诺及时交付软件,他就不会再喜欢你。而且如果你没有承诺的也超额完成,可想而知,老伴对你的印象会有多大的改变。但是切忌,如果自己真的有能力还是应该提前说出来,只要不过分夸大就好。万事适可而止、恰到好处就好。
2、认真负责,少犯错误。软件很可能会因为一个细小的错误而不能正常运行,所以说不要在软件中放入错误,优秀的程序员不在他们的代码中放入错误。尽量精准的设计,会让你的工作事半功倍。
3、充满热情,努力工作。作为一个优秀的程序员是充满热情和努力工作的,他们具有很强的组织性,而且讲究方法,他们有能力将事情结构化。此外,大多数程序员勤奋工作的热情是令人难以置信的。他们呕心沥血,不眠不休就是为了最后的胜利,如果你也具备这种精神,那么你就算半个合格的程序员。
4、有预见性,知道未知因素。看到别人看不到的未知因素,并且提前做好预备工作,这说明你至少是个有经验的程序员。你的前途可以说是一片光明。
5、有团队合作精神,能善于和别人相处。一般开发工作都是以小组进行的,所以一定要与小组成员友好相处,软件开发是小组成员协调努力的结果。不要把功劳归结为某个人,同时也不要把错误看作是别人的错误。
6、坚持到底,善始善终。其实开发软件是一件非常辛苦的工作,所以一旦认定目标,就要朝向最终目标努力努力再努力,始终朝向最终目标。这其实也是非常重要的能力。特别是在与一些人面谈工作时,你要寻找的一件事情就是在小组已经交付的产品上他实际参与的工作。具备这种能力是作为一个优秀程序员的必备条件。
7、超凡的学习能力。在软件技术领域,技术的更新日新月异,所以作为程序员必须学习不断涌现的技术,掌握尽可能多的技能。优秀的开发人员是渴望学习的人。善于学习的人才能在这一领域立于不败之地。也是程序员必须具备的条件之一。
二、程序员的职业要求
一般的程序员都有四年的在专业领域的学习,需要一个在程序领域的学士学位获得者,不论是数学方面的还是工程方面的都是可以的。大约有20%的人在这一领域的计算机科学和工程学拥有更高的学位。还有很小一部分程序员是自学的,尽管一些专业性的学校或者综合大学可以提供,但是也需要一些别的途径来提供相关的人才。尽管学历是比较重要的,但是公司经常把重点放在应聘者的工作经验上,很多刚从大学毕业的大学生虽然有引人注目的学位证书,但是他们找不到工作是因为他们缺乏经验。一个程序员虽然有正规的学历,但是如果一个人拥有程序设计的深厚知识背景或者丰富的工作经验的话,那么他的机会要比有学历的应届毕业生大得多。所以要尽量抓住有用的工作和实习机会,这样的话在毕业后你就会发现,多实习让你有更多的经验,在找工作的时候就有更多的机会。
对于职业程序员,另外一个重要的方面就是,程序员需要不断提升自己的业务技术,你的技术必须一直保持在一个较高的水平,并且要不断发展,程序员也要寻找贸易的机会,要参加研讨会,在周刊上发表文章和接受职业教育,这些使程序员在自己的领域中分级或者不断并排前进。
三、一位大四程序员的面试经历和体会
1.面试经过
大约在年前我接到了台湾瑞晟(Realtek)苏州公司的面试通知,通知我2月21日到苏州工业园区面试,接到面试后的几天我把一些专业课温习了一遍,特别是C++和数据结构,由于大学几年里,我一直专研这些方面,加上通过了高级程序员的考试,对于一些常用的算法我差不多也 达到了烂熟于胸的地步,当时的感觉是如果问了我这些方面的问题我应该是没有问题的!
21日那天我被安排在4:30面试,由一位技术人员单独给我面试,在问了一些简单的问题之后 ,他给我出了一道编程题目,题目是这样的:
(由于具体面试的题目比较烦琐,我将其核心思想提取出来分解成……(乱码)
1) 写一个函数计算当参数为n(n很大)时的值 1-2+3-4+5-6+7......+n
哼,我的心里冷笑一声!没想到这么简单,我有点紧张的心情顿时放松起来!
于是很快我给出我的解法:
long fn(long n)
{
long temp=0;
int i,flag=1;
if(n<=0)
{
printf("error: n must > 0);
exit(1);
}
for(i=1;i<=n;i++)
{
temp=temp+flag*i;
flag=(-1)*flag;
}
return temp;
}
搞定!当我用期待的目光看着面试官的时候,他微笑着跟我说,执行结果肯定是没有问题! 但当n很大的时候我这个程序执行效率很低,在嵌入式系统的开发中,程序的运行效率很重要 ,能让CPU少执行一条指令都是好的,他让我看看这个程序还有什么可以修改的地方,把程序 优化一下!听了这些话,我的心情当时变的有点沉重,没想到他的要求很严格,之后我对程序 进行了严格的分析,给出了改进了的方案!
long fn(long n)
{
long temp=0;
int j=1,i=1,flag=1;
if(n<=0)
{
printf("error: n must > 0);
exit(1);
}
while(j<=n)
{
temp=temp+i;
i=-i;
i>0?i++:i--;
j++;
}
return temp;
}
虽然我不敢保证我这个算法是最优的,但是比起上一个程序,我将所有涉及到乘法指令的语 句改为执行加法指令,既达到要题目的要求而且运算时间上缩短了很多!而代价仅仅是增加了 一个整型变量!但是我现在的信心已经受了一点打击,我将信将疑的看者面试官,他还是微笑 着跟我说:“不错,这个程序确实在效率上有了很大的提高!”我心里一阵暗喜!但他接着说这个程序仍然不能达到他的要求,要我给出更优的方案!天啊!还有优化!我当时真的有点崩 溃了,想了一会后,我请求他给出他的方案!然后他很爽快的给出了他的程序!
long fn(long n)
{
if(n<=0)
{
printf("error: n must > 0);
exit(1);
}
if(0==n%2)
return (n/2)*(-1);
else
return (n/2)*(-1)+n;
}
搞笑,当时我目瞪口呆,没想到他是这个意思,这么简单的代码我真的不会写吗,但是我为 什么没有往那方面上想呢!他说的没有错,在n很大很大的时候这三个程序运行时间的差别简 直是天壤之别!当我刚想开口说点什么的时候,他却先开口了:“不要认为CPU运算速度快就 把所有的问题都推给它去做,程序员应该将代码优化再优化,我们自己能做的决不要让CPU做 ,因为CPU是为用户服务的,不是为我们程序员服务的!”多么精辟的语言,我已经不想再说 什么了!接着是第二个问题:
他要求我用一种技巧性的编程方法来用一个函数实现两个函数的功能n为如:
fn1(n)=n/2!+n/3!+n/4!+n/5!+n/6!
fn2(n)=n/5!+n/6!+n/7!+n/8!+n/9!
现在用一个函数fn(int n,int flag)实现,当flag为0时 ,实现fn1功能,如果flag为1时实现fn2功能!他的要求还是效率,效率,效率!说实在话, 如果我心情好的话我应该能给出一种比较好的算法,但我那时真的没有什么心思再想了,我在纸上胡乱画了一些诸如6!=6*5!的公式后直截了当的跟他说要他给出他的答案!面试官也没有 说什么,给出了他的思路:
定义一个二维数组 float t[2][5]存入[2!,3!,4!,5!,6!},{5! ,6! ,7!,8!,9!]然后给出一个循环:
for(i=0;i<6;i++)
{
temp=temp+n/t[flag][i];
}
最后得到计算值!呵呵,典型的空间换时间的算法!
这些总共花了50分钟的时间,还有十分钟我就跟他很随意的聊聊天,聊了一些编程以及生活 的问题,那时的我已经很放松了,因为我知道这次面试结果只有一个:失败。5:30的时候面试官要我等通知,于是我离开了他们公司。这就是面试的整个经过!
2.由面试想到的
真的是很失败啊!我记得那天下好大的雨,气温也很低,我边走边想,从5:30一直走到7:30 ,全身都湿透了,又冷又饿,但是我只是一直走,脑子里面充满了疑惑,我也想让雨把自己淋 醒!看到这里有些朋友可能觉得那些面试题目不算什么如果让自己做的话肯定能全部答对,我 肯定相信你,因为我从未怀疑过中国程序员的能力,我认为中国有世界上最好的程序员,我也 从未认为自己是高手,所以我做不出来不代表中国程序员比台湾或者别的地方的程序员差,所以我就从我的角度,我的所见所想来谈一些感想:
不错全世界都有优秀的程序员,中国也不例外,但是我疑惑的是:到底中国和台湾或者国外 的优秀的程序员的比例到底是多少?台湾我不知道,中国100个程序员里有几个是优秀的呢?我 根本算不上,从上面的表现就足以说明一切了!是1个?5个?10个?50个?这个数字我不敢乱 猜,恐遭网友一顿痛骂,那么我们国内有多少人学习计算机呢?拿我们学校来说,计算机97级 4个班,98级5个班,99级10个班,2000级17个班,人多了,老师怎么办?我们学校的做法是让 研究生上课,然后呢?补考一抓一大把,大把大把的补考费落入了学校的口袋,还说现在的学生素质低!真是好笑,我都不知道学校这么做是为了什么,为国内培养大量的程序员吗?学生 们能真正学到计算机知识吗?好了,我敢讲,在我们学校学习编程学生和优秀程序员(注意我 指的是优秀,只会编几个糟烂程序的人算不上)的比例应该是100:0.1 在这种比例下虽然我们中国学习编程的人铺天盖地,但是想想有多少个人能真正为中国软件 业发展作出贡献,有多少人能真正写出优秀的程序名扬海外!
我从学习编程以来,不管是自学还是老师指导,从来都是解决问题就好,编出程序来就行, 我的疑惑是:我们有真正的强调过程序的效率,程序的质量吗?我们有仔细分析过我们写的东 西,看看有没有可以改进的地方,看看有没有简单的方法来达到同样的目的呢?我问心自问, 我发现,我从来没有对我写出来的程序进行过优化,最多就是进行详细的测试,然后Debug, 但是这就足够了吗?
这些天我偶尔发现我曾经写过的一个游戏,那是一年做为 其中一员时候,感觉应该拿点东西出来,然后花了一个星期的时间写出来的!程序不算复杂,但是用到了不少数据结构的东西,也用到了一些精彩的算法,加上windows的界面和游戏的可 玩性,写完后受到了不少好评,我当时真的很佩服自己!
但是现在看呢:没有一句注释,好多 丑陋的函数名比如:void chushihua(),好多没有必要的变量,可以用简单语句完成工作的我 使用华丽的算法,大量使用全局变量.....,说不好听的话,六百多行的程序除了能运行之外就是一陀屎!如果一年前我能听到一些反面意见的话,大概我能早一点觉悟,但是自原代码在 网站发布以来听到的都是赞美之词,没有一个人向我提出程序改进的意见,这又说明了一个什 么问题呢?很值得思考啊!
还有一个疑惑是:我们说的和做的真的一样吗?我在学校的时候曾经受学院指派承办过一个 计算机大赛,请了一个老师出决赛的题目,主要是一些算法题目,这个老师可能是我上大学以 来唯一敬佩的老师了,从程序调试到打分,对于每个程序都仔细分析其时间效率和空间效率, 然后综合打分,四十个人的卷子,老师从下午三点一直调试到晚上十点,在有些写的精彩的语 句后还加上批注。我真是高兴很遇到这样的老师并且和他做深入的交流,但在事后,却发生了 一件不愉快的事,在比赛中获得第二名的学生找到我,说他程序全部调试成功应该给他满分, 并且应该得第一,我说不过他,最后调出了他的原程序和第一名的原程序对比,错,两个程 序都运行的很好,这时,那个同学开口了:“我的程序写的十分简捷明了,仅仅数行就完成了 题目要求,而他的却写了一大堆,为什么给他的分多过给我的分。”我当时很是气愤,如果不 是老师负责的话,那么现在第一名和第二名的位置真的要互调了,拜托,不是程序的行数越少 程序的质量就越高,我记得我跟他大谈这方面的道理,最后说服他了!哈哈,但是我,只能说 说而已,我不知道还有多少人一样,说起来头头是道,但心里却压根就从未重视过它!
四、优秀的编程人员应该掌握的十种编程语言
优秀的编程人员应该掌握的十种编程语言
引:位于圣地亚哥软件编程公司Interknowlogy.com CEO Tim Huckaby表示,“我的一个导师曾经告诉我编程语言仅为一种语言。若你是一名优秀的程序编制人员,编程语言就是一些句法变换而已,并没有其他重要部分。”
在求职过程中能够了解多些编程语言,无疑是有很大优势的。
确实,以量取胜是有优势的。当然不排除存在一些恰好在合适的时间、合适的地点正好知晓合适的编程语言的情况,不过绝大部分编程者都会善意建议你阶段性学习一种新语言,这对于作为一名合格的网站开发人员来说,是非常有必要的。
位于圣地亚哥软件编程公司Interknowlogy.com CEO Tim Huckaby表示,“我的一个导师曾经告诉我编程语言仅为一种语言。若你是一名优秀的程序编制人员,编程语言就是一些句法变换而已,并没有其他重要部分。”
不过,Huckaby表示,当时他的公司还在初创期,暂时不会考虑增添新人,不过知晓特定编程语言的入门级别人员有所例外。
Huckaby表示,“我们会聘用那些有激情、态度端正、聪明的刚从学校毕业、懂得.Net或Java语言的学生,因为这种人员,我们可以再次对他进行.Net培训。”
加州Sebastopol市Grandview Systems的软件开发负责人Wayne Duqaine表示,“不要只集中在一两种语言上。当我在1969年开始时,FORTRAN、COBOL和S/360 Assembler是当时流行的语言。而今,Java、C和VB则是通用的程序编制语言。十年的时光中,有许多新语言都变成了流行语言。我粗略的计算一下,在三十年的时光中,我已经学会了近24种不同语言。”
五、几道经典C语言笔试题
1.
int main()
{
int i, n = 20;
for (i = 0; i < n; i--)
printf("*");
return 0;
}
Change/add only one character and print '*' exactly 20 times.
(there are atleast 3 solutions to this problem :-)
2. display below like:
1
212
32123
4321234
543212345
3. search for maximum and minimum value, before save into arrange for any 5 natural number (use multiful for grammer)
ex)
save to any 5 natural number
30 20 75 15 64 <enter>
minimum : 15
maximum : 75
4. use ms-sql of join grammer. show query fot result
Table.1
ac_country
--------------------------------------
country_cd country_nm
--------------------------------------
kor koera
jpn japan
usa usa
cha china
Table.2
ac_currency1
-------------------------------------------
country_cd currency_cd currency_nm
-------------------------------------------
kor won W
jpn yen Y
usa usd US
# Result
-------------------------------------------
country_nm currency_cd currency_nm
-------------------------------------------
korea won W
japan yen Y
usa usd US
Result Query :
5.use ms-sql of join grammer. show query fot result
table.1
account
--------------------------------------
userid cost date
--------------------------------------
use01 10,000 2007-01-02
use02 5,000 2007-01-03
use05 7,000 2007-01-03
use03 5,000 2007-01-03
use01 5,000 2007-01-04
use04 5,000 2007-01-05
use02 10,000 2007-01-05
use01 1,000 2007-01-05
table.2
userinfo
-----------------------------------------------
code userid money register
-----------------------------------------------
AAA use01 8,500 2007-01-02
AAA use02 5,000 2007-01-03
AAA use03 2,000 2007-01-04
AAA use04 4,500 2007-01-05
BBB use05 5,500 2007-01-02
table.3
stateinfo
-------------------------------------
connect state indate
-------------------------------------
AAA-use01 Yes 2007-01-03
AAA-use02 No 2007-01-05
AAA-use03 No 2007-01-04
AAA-use04 Yes 2007-01-05
BBB-use05 NO 2007-01-04
#result
----------------------------------------------------------
userid money account_count account_total state
----------------------------------------------------------
use01 8,500 3 16,000 Yes
use02 5,000 2 15,000 No
use03 2,000 1 5,000 No
use04 4,500 1 5,000 Yes
Result Query :
6. show 2 query each fot result.A, result.B
table.data_table
-----------------------
F_DATE
-----------------------
2007-04-17 11:42:55.200
2007-04-18 01:45:33.403
2007-04-18 01:47:01.500
2007-04-17 11:40:15.000
2007-04-18 11:41:25.700
2007-04-18 11:41:49.420
2007-04-17 11:44:58.000
2007-04-18 11:45:23.340
#Result.A
----------
F_DATE
----------
2007-04-17
2007-04-18
Result Query :
#Result.B
----------
F_DATE
----------
2
Result Query :
⑧ 程序员应该知道的97件事中文版
http://..com/share/.html
⑨ 什么是浮点数啊
浮点数是表示小数的一种方法。所谓浮点就是小数点的位置不固定,与此相反有定点数,即小数点的位置固定浮点数的实现在各种平台上差异很大,有的处理器有浮点运算单元(FPU,FloatingPointUnit),称为硬浮点(Hardfloat)实现。
整数可以看做是一种特殊的定点数,即小数点在末尾。8086/8088中没有浮点数处理指令,不过从486起,CPU内置了浮点数处理器,可以执行浮点运算。
一般的浮点数有点象科学计数法,包括符号位、指数部分和尾数部分。 有的处理器没有浮点运算单元,只能做整数运算,需要用整数运算来模拟浮点运算,称为软浮点(Softfloat)实现。
扩展推荐:
编程学习过程中可以看得书推荐。《代码大全(第二版)》出自着名IT畅销书作者史蒂夫·迈克康奈尔之手,曾被《软件开发》杂志授予优异产品震撼大奖。
《每个程序员都应该知道的97件事情》( 97 things every programmer should know )对于编程初学者来说这本书都可以算上一个优质的入门书籍。本书提供了丰富的编程实践及理念,提供了大量的实例,并且书的排版格式阅读起来十分简洁方便
《计算机程序设计艺术 (第一卷)》由着名的计算机科学家教授Donald Knuth编着,并得到行业内众多顶尖程序员的一致好评。甚至连比尔盖茨也对这本书赞誉有加。
⑩ 学习软件开发都需要看什么书
学习软件开发都需要看《c和指针》、《c缺陷和陷阱》、《c专家编程》,这三本书是一个初级C程序员必看的三本书,同时也是应届新员工必须好好学习的教材,非常适合刚毕业的大学生学习 。
另外还有:
C++语言提升:
《Effective C++:改善程序与设计的55个具体做法》
《More Effective C++:35个改善编程与设计的有效方法(中文版)》
《C++沉思录》
《C++Templates中文版》
《深度探索 C++ 对象模型》
《泛型编程与STL》
一个由C转向C++的程序员,从来没有系统的学习过C++的语法,往往是用到的什么学习什么。如果要系统入门,《C++ primer》倒是不错。
设计类《代码大全》:
《重构-改善既有代码的设计》
《代码整洁之道》
《实现模式》
《程序员应该知道的97件事》
这几本书一般讲的是函数以及更低层次的设计。《代码大全》完完整整的读完过,而且做了很多的笔记,获益良多。《重构》就不必说了,其他几本书前面大致看了一下,也非常不错,计划有时间要好好学习一下。
架构:
《软件体系结构的艺术》
《领域驱动设计:软件核心复杂性应对之道》
《软件架构师应该知道的97件事》
《企业应用架构模式》
《面向模式的软件体系结构卷1:模式系统》
《软件架构设计》
《架构师需要知道的97件事》
敏捷开发:
《测试驱动开发》
《敏捷软件开发——原则、模式与实践》
《Scrum敏捷项目管理》
《硝烟中的Scrum和XP——我们如何实施Scrum》
《敏捷软件开发》