1. 怎样自学C++,以成为程序员
每个人的情况不一样,我下面的描述可能并不适合每一个看到这篇文章的人。
一、C/C++语言
如果你的基础很差, 建议不要一开始就学C++语言,从C开始学起,对程序有个初步的认识,循序渐进。C语言的书嘛,先买一本 300 页以内的,把书中的每一个例子都通过键盘敲打进去到 Visual studio里面去,然后单步执行,逐行调试去看各个变量的值。或者自行添加一些printf语句去输出变量的值。这样当你看完一本书后, 你就有编写小程序的感觉了。
记住,千万不要偷懒,不敲进去,自以为聪明, 能看懂, 或者直接从光盘复制。偷懒的代价是会花费更多的时间学习,最后还没有学会,给自己的自信心造成巨大打击,再也不想学程序了。
C语言看完一本书后,下来你就可以买一本C++的书看了。 C++的书也是一样, 必须300页以内的那种,不要一来就想学《C++ Primer中文版》这样的好书, 因为太厚了,怕你没有信心能够看完,即使你很有信心,花费一年的时间才看完,不值得。这种经典的厚的好书, 适合作为资料查阅,不适合挨个细节都看。
还是要提醒各位,一定要把书中的例子挨个敲打到电脑里面, 单步执行。一定不要从光盘复制, 一定要单步执行。
经过两本书的磨练, 估计你对C/C++肯定有比较深入的了解了, 下来应该可以进入实战了。
二、带界面的应用程序
学会了C/C++语言本身,可能还没有什么成就感,毕竟都是控制台的程序, 老是输出一串字符串, 整天面对各黑框框,成就感估计不是那么爽。要是能搞个带UI界面的程序就爽了。
下来就看个人的志向了, 如果走微软路线, 那你下来学MFC好了,如果要走开源路线, 那开源跨平台的界面库多得是。
通用的并且简单的就是 wxWidget 了, 官方网站为 www.wxwidgets.org/ 。你下载后看具体的例子, 把里面的例子程序敲到你的 visual studio 里面, 去调试, 看运行的结果, 你也可以试着去修改例子, 添加按钮,响应按钮事件等。
走到这一步, 恭喜你,可以照葫芦画瓢的搞个小应用程序了, 还带界面。
三、网络应用程序
语言搞懂了,UI程序也会了, 下来该学学网络咯, 现在那个程序不需要联网啊,懂网络对你理解很多程序非常有帮助。但是网络应用程序从哪里入手呢 ?
我来告诉你,从《UNIX网络编程》这本书入手吧,这本书可以教会你网络套接字的底层原理,把上面的例子好好学习,自己动手写一个回应服务器。写一个服务器端,在写一个客户端。服务器端请务必学会 select 这个简单的多路复用模型,这样你才能慢慢的深入里面 poll , epoll ,IOCP 之类的模型。
四、文件操作
所有的程序,基本都会用到文件的读写操作,windows系统有自己的文件操作API, 比如CreateFile, DeleteFile 等,请新手不要学windows的文件操作API, 新手请学标准C语言的文件操作函数,简单易学还跨平台。就那么几个函数,三下五除二你也就学会了, fopen, fclose, fread , fwrite, fseek, ftell 就这么几个而已。
五、深刻理解内存与指针的关系
作为一个C/C++程序员, 从学习程序的头一天开始,就要和内存的分配释放作斗争。你必须理解内存与指针的关系。怎么样才能理解呢, 请大家去看 《高质量C/C++编程》里面自带的几个经典例子吧。把那几个例子搞得清清楚楚, 基本能够理解其中的原理了。
六、仔细研究apache源码
学程序非特别是C/C++程序,非3年之功可以出山,三年对一个C/C++程序来说是一个从量变到质变的过程,三年的项目实战经验,可以让你接触到一个完整的应用程序所需要具备的骨架。但是这个阶段你写的代码,可能充满BUG, 会宕机,运行效率很差,自己回头看看一年前写的代码,可能自己都感觉恶心, 看不下去。没有关系,这种感觉是每一个进步青年都会有的。要提高自己的代码水平, 还是要像高手学习。你可能要问,公司同事的水平一般, 水平好的人家也不愿意给我讲。没有关系,开源的代码就是你像高手学习的最佳途径,开源代码是高手留下的练功秘诀, 你看了后你会突然感觉茅塞顿开, 感觉自己的水平差人家太远了。我为何要推荐apache的源码呢?
apache的源码是高手中的高手写的,执行效率和程序架构堪称一绝。里面的很多思想是所有程序都通用的,搞懂了, 很多模块你也可以直接拿来使用。apache对内存池的使用, 对线程池的使用, 对模块结构的封装,非常具有实际意义。要是你能把apache的源码吃个透彻,每一个细节都搞明白了为何人家要这么实现,我可以给你说,“恭喜你 , 你离传说中的高手已经不远了。”
七、修炼C++
我上面说的基本都是修炼C的, 要修炼C++, 还得再花3年功夫, 才有可能练成C++高手。C++太博大精深了,其中最复杂的莫过于泛型编程思想,不要以为能写个模板类就认为泛型编程不过如此而已。仔细看看STL源码, Boost 源码, 你就知道泛型编程有多么的博大精深了。修炼C++, 可以从用C++封装的MFC, wxWidget入手, 看高手如何通过C++语言, 封装这样庞大的UI库,里面应用了很多的C++机制, 最典型的就是多态机制, 还有很多的设计模式应用可以研究。
八、深研设计模式
设计模式是程序设计的灵魂,是通用方法,当你面对一个大型项目的时候,如何设计一个有弹性的系统,是所有系统分析员应该掌握的技能。在设计模式的研究上,要结合实际的项目进行。
2. 现在程序员一个月的工资大概多少
你好,程序员的工资在不同公司不同职级都是不一样的,以鹅厂为例,达到架构师的能力年薪会达到百万,具体如下。
1、腾讯工程师岗位职级
鹅厂去年宣布调整职级,取消了原有的 6 级 18 等(1.1-6.3 级)的职级体系设计,将专业职级体系优化为14 级(4-17 级)。与之相对应的是,统一置换为“专业职级+职位称谓”。
关于绩效的考核,腾讯的绩效考核分为 2 部分,业务评价和组织管理评价,一般一年2次考核(6月、12月),实行末尾淘汰制。
腾讯的技术晋升也不容易。在腾讯旧的职级体系下,T3-3 升 T4-1 是一个大坎,停留在 T3-3 超过 5 年的不在少数,停留 7 年的也有。一旦进入 T4 级别,就是腾讯的专家工程师了,腾讯研发人数将近 2 万人,T4 级别的人数大概也不超过 500 人,这还是在近两年 T3 到 T4 级别人数增多的情况下。
鹅厂T4架构师作为“IT架构灵魂人物”的角色,他们不仅做着架构师的本职工作,还同时做程序开发,写核心代码的工作。另外,架构师依旧是技术高手,编程能力依然是一流的。
但根据当前的市场需求,互联网大厂们对于普通java开发人才需求逐年锐减,而对互联网架构师人才的需求招聘量已经上升到50%,因此薪资更是不可同日而语。
对于想学习互联网架构师的同学来说,北大青鸟、课工场等优秀品牌都是不错的选择。课程根据招聘需求制定,包含全部分布式微服务技术,对标鹅厂T4、阿里P8级别架构师。
希望我的回答对你有所帮助!
3. 如何成为一名程序员 6种方法来成为一名程序员
目录方法1:网络编程1、了解网络编程的含义。2、浏览不同的网站,了解它们的外观。3、学习至少一种头脑风暴技术/方法,并学习一个用来实现头脑风暴的软件。4、熟悉网站结构。5、赶紧学一门图形设计的课程。6、了解网络下部构造的基本情况。7、学习HTML和CSS语言。8、学习XML及其相关技术,比如XSL和XPath(不是必需,仅作推荐)。9、先建立简单的静态网站,直至你熟悉并习惯HTML语言。10、学习客户端脚本语言。11、熟悉你所学的客户端脚本语言。12、学习至少一种服务器端脚本语言。13、学完服务器端编程语言之后就开始创建一个试验项目。14、获得你的网站,开始用你自己的网页实验。方法2:桌面软件编程1、弄清楚桌面软件编程是怎么回事。2、了解不同的电脑硬件结构。3、学习一种入门级(小孩子学的那种)编程语言。4、学习程序化、面向对象、函数设序设计规范的入门。5、学习一种程序化程式设计语言的入门课程。6、学习至少一种高级建模技术,比如UML 或ORM。7、开始编写一些小的主控台应用程式或类似的应用程式。8、学习一门你选择的编程语言的更高级课程。9、应用你所10、至少再学习一门编程语言规范的入门课程。11、试着比较你所学的两门编程语言。12、利用你学过的一种语言来学习可视化编程概念。13、开始把你所学的知识运用到你设计的软件小工程中。14、创建一个虚拟的"毕业工程"。15、通过学习更高级的课程、更加注意细节以及在网上学习搭建架构的技巧,来加深对你学过的可视化架构/库/包的理解。16、搜索其他含可视化元素的包/库并学习它们。17、学习图形学课程(而非图形设计)。18、成为游戏程序员(不是必须的)。方法3:分布式程序设计1、处理分布式应用编程。2、快速了解通信系统及其硬件。3、熟悉网络硬件结构和设备,比如集线器、接线台和路由器。4、学习网络协议的课程。5、学习XML 语言,并熟悉它。6、开始学习一门shell脚本语言。7、开始时用上你学的脚本知识,只运用程序化程式设计。8、使用你所学的脚本语言,写出实现机器之间通信的脚本。9、转移到桌面脚本/编程语言。10、专注于语言的核心部分,尤其hi那些支持网络。11、学习分布式应用设计与结构的课程。12、使用你所学的编程语言来了解服务部分建构和服务。13、学习如下技术中一种或更多。方法4:库/平台/框架/核心编程1、了解什么是核心编程。2、学习一门支持创建可重复使用内容/包的编程语言,如果你还没学过的话。3、学习一门UML 和ORM的高级课程。4、学习软件工程的课程。5、学习至少一个模块,基于内容的、面对对象的和 事件驱动编程技术和概念。6、进一步了解不同的操作系统及其支持的编程架构。7、集中学习独立平台架构、编程语言和技术。8、如果到目前为止你学习的编程语言具有ANSI/ISO/EEE/W3C标准版本,那么掌握这些标准。9、尝试模拟简单的、已经建立的库,尤其是开源的库。10、在你的编程领域内寻找开源的包。11、学习不同方法。方法5:系统编程1、了解系统编程的定义。2、跟着"桌面应用程序员"的前三个步骤。3、学习线性代数的入门课程。4、学习微积分课程。5、学习逻辑学和/或离散数学课程。6、了解不同的"准操作系统"。7、学习计算机硬件结构的课程(或者作为替代,看看书)。8、深入理解不同的计算机硬件平台。9、初步熟悉你所选择的硬件平台/操作系统的汇编语言。10、学习ANSI C 和 C++ 语言,还有程序化程式设计的一些概念。11、在你选择的平台上理解并实践C/C++标准库。12、搜索网络资源、书籍和课程来理解你的平台独特的C风格。13、用C/C++练习编写高级代码。14、学习更高级的Assembly。15、学习操作系统设计的课程。16、寻找并阅读你所选择的平台的相关文章。17、练习你已经掌握的知识。18、以最有益的顺序学习语言。方法6:编程科学1、了解编程科学家是做什么的。2、累积和四年制计算机科学学历同等多的科学知识。3、选择特定的领域。4、考虑获取更高级的学历。5、了解你选择的编程领域的相关技术和编程语言。成为程序员是一个日积月累的过程,需要日复一日年复一年的技能增长。编程本身是有趣的,并且有回报(脑力层面、精神层面、经济层面)。这份指南不能保证你轻松当上程序员。不要神化下面这些步骤,从中你大概能了解在现今编程界如何成为一名程序员。
方法1:网络编程
1、了解网络编程的含义。网络应用是指设计在网络结构顶层的软件部分。这就意味着这些应用是通过诸如火狐或IE之类的浏览器来处理的。架构于网络结构的顶层并不一定要连接到网络。这就是说网络应用建立在如下标准网络技术的顶层:HTTP
FTP
POP3
SMTP
TCP
IP协议
HTML
XML
Coldfusion
ASP
JSP
php
ASP.NET
2、浏览不同的网站,了解它们的外观。(右击,选择"查看源"或按F12。)寻找网站类型/内容的多样性,而非数量。通常你需要访问以下网站类型中至少一种: 团体网站(商业公司,非营利机构/组织,政府组织)
网络索引引擎(搜索引擎,meta搜索网站,专业化搜索引擎,目录)
数据挖掘网站
个人网站
信息/网络全书式网页(维基,数据单,技术规格,人工列表目录,博客和日志,新闻和新闻机构网站,黄页,等等。)
社交网站(社交门户,书签网站,记录笔记网站)
合作网站(这包含了上面提及的目录,比如维基和博客)
3、学习至少一种头脑风暴技术/方法,并学习一个用来实现头脑风暴的软件。例如:头脑风暴图和微软Visio。
4、熟悉网站结构。指的是创建概念化网络范式、网络地图和导航结构。
5、赶紧学一门图形设计的课程。尽量学习至少一个图形编辑/操作软件包(不是必须的,但强烈推荐)
6、了解网络下部构造的基本情况。包括了解以下: 基本网络服务协议(HTTP,FTP, SMTP和POP3或IMAP4)
网络服务器软件(最好其中一个就是你以后主要工作的平台)
网络浏览软件
邮件服务器和客户端软件
7、学习HTML和CSS语言。或许你还想要"所见即所得"软件包来编辑HTML。
8、学习XML及其相关技术,比如XSL和XPath(不是必需,仅作推荐)。
9、先建立简单的静态网站,直至你熟悉并习惯HTML语言。
10、学习客户端脚本语言。多数人要么学Java,要么学VB,但也有一些人学习Perl和DHTML。
11、熟悉你所学的客户端脚本语言。潜意识里提醒自己只用你学的那个语言。只有在你熟悉你的客户端脚本语言之后才能进入下个步骤。
12、学习至少一种服务器端脚本语言。如果你只用一种服务器软件,那就学其中一种编程语言。否则,你得每个服务器软件都学至少一种编程语言。
13、学完服务器端编程语言之后就开始创建一个试验项目。
14、获得你的网站,开始用你自己的网页实验。
方法2:桌面软件编程
1、弄清楚桌面软件编程是怎么回事。多数桌面软件程序员都是编写商务需要的代码,所以好好了解一下商业及其组织和经济结构将对节省时间、提高效率大有裨益。
2、了解不同的电脑硬件结构。看看数字电路设计和电脑结构的入门级课程,但是也有人认为这对于刚起步来说太超前了,所以看两三篇说明的文章(比如 这一篇 和 这一篇)就够了。学完第一种编程语言后你可以再返回这个步骤。
3、学习一种入门级(小孩子学的那种)编程语言。不要因为你不是个小孩子就不好意思去学。这些入门级语言能大大减轻你正式学习第一门编程语言时的痛苦和压力。然而这一步也不是必须的。你也可以在上一步之前完成。
4、学习程序化、面向对象、函数设序设计规范的入门。
5、学习一种程序化程式设计语言的入门课程。无论你以后选择何种编程语言,在某种程度上它都要求程序化程式设计。此外,据多数程序员反映,程序化程式设计总的来说是了解编程的一个很好的切入点。
6、学习至少一种高级建模技术,比如UML 或ORM。
7、开始编写一些小的主控台应用程式或类似的应用程式。你可以利用编程书中的常见小练习。选择一个工具,用你所学的编程语言编写程序。
8、学习一门你选择的编程语言的更高级课程。确保进展之前先理解下列概念,并能熟练运用。对程序用户输入输出信息。
程式化设计语言写成的程序中的逻辑流程和执行流程。
声明、分配和比较变量
编程结构分支,比如if..then..else 和 select/switch..case.
循环结构,比如while..do, do..while/until, for..next.
创建、调用程序与函数的编程句法
数据类型及如何操控
用户定义数据类型(records/structs/units)及其使用
如果你的语言支持超载函数,理解它。
你选择的语言的内存处理方式(指针,变量窥视,等等。)
如果你的语言支持运营商超载,理解它。
如果你的语言支持delegates/函数指针,理解它。
9、应用你所学的高级技能 面向对象的规范
10、至少再学习一门编程语言规范的入门课程。推荐学习每种范式的编程语言,多数高级程序员确实是这么做的,然而,通常你开始时只学一种,应用所学知识训练了一段时间,获得了编程的鲜活经验,然后接着学习另一种。试试下面的语言: 逻辑编程范式
函数编程范式
面向对象的范式
11、试着比较你所学的两门编程语言。评估各自利弊。通常可按以下方法完成拿出你在学习第一门编程语言时编写的简单范例,现在用第二门语言重新编写。
创建一个工程,尽量用上两种语言完成它。有时取决于你选择的工程和语言,你可能仅用一门语言还无法完成这个工程呢!
写一份两种语言之间相似结构和独特之处对比的速查表或一览表。
尽量使用另一门语言找到模仿这两门语言中独特之处的办法。
12、利用你学过的一种语言来学习可视化编程概念。几乎所有的编程语言都具有支持可视化编程和其他支持控制台或类似控制台编程的版本/库。同时进行的包括: 初步了解事件驱动编程。在某种程度上,多数可视化编程依赖事件及事件处理(用上你选择的语言)。
尽可能多的尝试桌面软件,理解软件是做什么的。多数软件开发公司会提供产品的测试版,你可以拿来测试软件。在完善用户界面方面保持更新。
阅读关于图形用户界面的文章或教程。
13、开始把你所学的知识运用到你设计的软件小工程中。尽量把你的编程专业知识运用到你日常生活中的问题上。比如,编写程序,批量重命名文件,视觉上比较文本文件,复制目录里的文件名到内存/文本文件之类的东西。刚开始简单一点。
14、创建一个虚拟的"毕业工程"。把这个放到最后完成,用上你到目前为止学到的可视化编程技术。
15、通过学习更高级的课程、更加注意细节以及在网上学习搭建架构的技巧,来加深对你学过的可视化架构/库/包的理解。
16、搜索其他含可视化元素的包/库并学习它们。
17、学习图形学课程(而非图形设计)。对于想要写出吸引人的用户界面元素的程序员来说,这将大有裨益。
18、成为游戏程序员(不是必须的)。很大程度上游戏编程是被当作桌面编程的。如果你想成为游戏程序员,完成这些步骤后你需要进一步学习游戏编程。对于游戏程序员而言,图形学课程是必须的,后续步骤中第二门语言应该选择逻辑/函数编程语言(最好是Prolog或Lisp)。
方法3:分布式程序设计
1、处理分布式应用编程。分布式应用编程被许多人认为是最难学的一种,它要求计算机和通信技术中的不同知识。
2、快速了解通信系统及其硬件。这个步骤不是必须的,但是对于理解网络拓扑结构很有用。
3、熟悉网络硬件结构和设备,比如集线器、接线台和路由器。
4、学习网络协议的课程。在你开始分布式应用编程之前,你需要好好理解"开放系统互联 (OSI) "模型、以太、IP、TCP、UDP和HTTP 。
5、学习XML 语言,并熟悉它。
6、开始学习一门shell脚本语言。对基于Windows的编程,可以是任何能与Windows脚本宿主兼容的脚本。对基于linux的编程,Bash脚本和 Perl就够了。对这两个平台都强烈推荐Java,原因如下: 几乎所有操作系统的都支持脚本宿主(Windows 脚本宿主默认支持java ,大多数Linux发行版都有支持java脚本控制的包)。
许多开发者认为它很容易学。
当你需要学第二门编程语言(C,C++,C#,Java和J#都有ALGOL开源句法)时,它拥有的ALGLO开源句法就能使你熟悉更多编程语言
通过学习java,你会熟悉网页的客户端脚本,这可谓一大福利!
7、开始时用上你学的脚本知识,只运用程序化程式设计。之后,根据你的脚本语言和它所支持的,你可以用上更高级的编程技巧和范式。所有的脚本语言在某种程度上都有程序化程式设计的一些方面。
8、使用你所学的脚本语言,写出实现机器之间通信的脚本。学习完成这个所必需的东西。简单的通信就足够了。
9、转移到桌面脚本/编程语言。一个比较好的是多范式语言,比如python。简单了解第二门语言。有许多理由让多数程序员选择java。然而,在这个领域内C#正在获得多数优势。Java和C#被青睐的原因如下:它们是面向对象的编程语言,使大量程序员免遭实现细节之苦,因为它们都支持组成部分(代码单元、预编译,它们可以执行特定任务,并被用到其他程序中)。
它们支持事件驱动编程,在某种程度上还支持OO和程式化程序设计。
建立语言的架构按属性分布(比如Java)。
有许多现成的包来处理。社交网络同时作为开源代码和架构内置包,这使得程序员继续其他人工作更加容易。
10、专注于语言的核心部分,尤其hi那些支持网络。少注意用户界面元素,比如输出,窗口设计和技术等。
11、学习分布式应用设计与结构的课程。可以通过书本、网上教程或学术课程来完成。然而,十分有必要理解分布式应用的结构及其概念。
12、使用你所学的编程语言来了解服务部分建构和服务。
13、学习如下技术中一种或更多。推荐你每一种都了解以下。多数分布式应用程序员不会止于一两门编程语言,他们会每个操作系统各学至少一种语言。这是因为如果你希望你的应用"分布式",你应该至少为每个主要的操作系统各提供一个版本。公共对象访问代理体系结构(CORBA)
简单对象访问协议(SOAP)
异步JavaScript和XML(AJAX)
分布式组建对象模型(DCOM)
.NET远程处理
XML 网络服务
方法4:库/平台/框架/核心编程
1、了解什么是核心编程。核心程序员几乎都是高级程序员,已经从编写应用转变为给其他程序员编写代码汇编。
2、学习一门支持创建可重复使用内容/包的编程语言,如果你还没学过的话。
3、学习一门UML 和ORM的高级课程。多数库开发者使用其中一种,或两种都用。
4、学习软件工程的课程。
5、学习至少一个模块,基于内容的、面对对象的和 事件驱动编程技术和概念。你所学覆盖越多编程范式和语言,你就能成为越成功的库/包程序员。
6、进一步了解不同的操作系统及其支持的编程架构。
7、集中学习独立平台架构、编程语言和技术。
8、如果到目前为止你学习的编程语言具有ANSI/ISO/EEE/W3C标准版本,那么掌握这些标准。无论何时尽可能使用标准代码。
9、尝试模拟简单的、已经建立的库,尤其是开源的库。这在成为库/包程序员的早期阶段十分有用。从简单的包开始,比如单位转换和中间科学计算包。如果你是大学生,利用你的非编程课程,尝试把这些课程的方程式与核心科学用作库。
10、在你的编程领域内寻找开源的包。首先下载包的二进制/可执行文件。尽量去用,并发现它的利弊。之后,下载源,尽量弄明白它是怎么完成的。尝试再创造这些库或其部分。刚开始,看完代码再做;之后,先做再看代码。后期阶段,尝试完善那些库。
11、学习不同方法。给程序员分发、配送内容。通常,库/包程序员倾向于以递归和/或迭代的思想来思考他们面临的所有问题 。尽量把每个问题当作一个小问题的汇编(一系列更小的任务)或一个重复的不断缩小问题范围直至把这些更小的范围彼此堆到一起的处理过程去思考。
库/包程序员倾向于概括化。也就是说,当面临一个特定的简单的问题时,他们通常会想到一个更为概括的问题,并努力解决这个更概括的问题,如此,小问题便不攻自破。
方法5:系统编程
1、了解系统编程的定义。系统编程处理的是编程的"科学",而不是具体的编程实现。不要把你自己栓到特定平台上。
2、跟着"桌面应用程序员"的前三个步骤。
3、学习线性代数的入门课程。
4、学习微积分课程。
5、学习逻辑学和/或离散数学课程。
6、了解不同的"准操作系统"。这可以通过以下途径完成:了解操作系统是如何安装的。
了解在一台PC上如何安装不同的操作系统(不是必须的,但作为推荐)
安装不止一种操作系统。不要在系统中安装任何辅助包,相反,仅利用操作系统本身提供的函数。
7、学习计算机硬件结构的课程(或者作为替代,看看书)。
8、深入理解不同的计算机硬件平台。
9、初步熟悉你所选择的硬件平台/操作系统的汇编语言。稍后你会学习其他平台/系统的汇编。
10、学习ANSI C 和 C++ 语言,还有程序化程式设计的一些概念。
11、在你选择的平台上理解并实践C/C++标准库。尤其注意标准模板库(STL)和活动模板库(ATL)。
12、搜索网络资源、书籍和课程来理解你的平台独特的C风格。
13、用C/C++练习编写高级代码。
14、学习更高级的Assembly。
15、学习操作系统设计的课程。
16、寻找并阅读你所选择的平台的相关文章。如果你选的是基于Unix的操作系统就会容易得多。充分理解你今后将要用来工作的系统。
17、练习你已经掌握的知识。首先创建小的系统软件。如下通常很有用: 试着重创你系统中已有的小工具。
试着把其他系统中的应用移植到你的系统里。
18、以最有益的顺序学习语言。此处是唯一强调第一门编程语言的地方。首先学习ANSI C 而不是 C++、C#、Java 、D。然后学习 C++。限制你第一门语言仅为C是因为系统编程要求程序员熟悉如下概念:源代码真实、完全的编译
低级对象输出文件
链接二进制
低级机器语言/汇编编程。C语言被某些人认为是伪饰过的/更容易学习的汇编语言。只要你愿意,它还支持插入汇编语言代码,并且它只是程序化的(像汇编)。
方法6:编程科学
1、了解编程科学家是做什么的。编程科学家是十分高级的程序员,他们不开发程序,但他们研究计算科学,比如密码学、编程语言和数据挖掘算法。没有深入的学术研究是很难达到这个水准的。
2、累积和四年制计算机科学学历同等多的科学知识。可通过如下其中一种完成: 获得真实的学术学历(这也是通常情况)。
从现代大学中获得该学历要求的课程大纲,自学课程或 分开一门门学。理论上这样做也可以,但还是推荐第一种做法。
3、选择特定的领域。越具体越好。这取决于你的偏好。但是这里给出计算机编程领域中一些主要的课题:算法设计(例如搜索、分类、密码、解码、错误检测 等)
编程语言/编译器设计/最优化
人工智能领域(模式识别,语音识别,自然语言处理,神经网络)
机器人技术
科学编程
超级计算
计算机辅助设计/模式(CAD/CAM)
虚拟现实
计算机图形学(计算机图形学通常和图形设计或图形用户界面设计混淆,计算机图形学是研究如何表示和操控计算机系统中的图形的领域)
4、考虑获取更高级的学历。或许你想追求硕士学历或博士学历。
5、了解你选择的编程领域的相关技术和编程语言。
小提示不管你想尝试哪种编程,不管你想达到何种水平,考虑去学校或本地社区大学上课。不要被诸如“计算机科学”一类的术语吓到。你参加的任何不需要预备课程的课程都应该集中教一些编程的基础知识。在上课之前先咨询一下老师或客服,确保这门课是你想要的,像“计算机文化”这样的课很有可能更多地集中在教你更熟悉办公应用之类。
4. 现在程序员一个月的工资大概多少
根据北上广深历年数据来看维持在一两万左右但是这中间也看个人能力和水平进行薪资计算
对项目经理负责,负责软件项目的详细设计、编码和内部测试的组织实施,对小型软件项目兼任系统分析工作,完成分配项目的实施和技术支持工作。
世界上第一位程序员是英国着名诗人拜伦的女儿AdaLovelace,曾设计了巴贝奇分析机上解伯努利方程的一个程序。她甚至还建立了循环和子程序的概念。由于其在程序设计上的开创性工作,AdaLovelace被称为世界上第一位程序员。
计算机科学发展到今天(21世纪初期),程序员从事的人群很多,分工也不相同,从大的方面可以分为以下几类:asp程序员、web前端开发程序员、delphi程序员、php程序员、powerbuilder程序员、C程序员、linux程序员、net程序员、vb程序员、java程序员、javascript程序员、C++程序员、Python程序员、ABAP程序员、android程序员、iOS程序员。
30%的技术人员从门户网站获取开源技术信息,剩下的70%的技术人员都是从专业的开源社区和开源厂商的技术网站上获取信息,包括有SourceForge、LinuxToday、OpenOffice和IBMdW等。
5. 找c++方面的职位越来越少,c++程序员的出路在哪
不认可C++方面的职位越来越少的说法。我是一名有十多年C++开发经验的程序员。并没有感到岗位少,反而是招聘越来越难了。
其实有这种感觉也不足为奇。最近几年,程序员这个群体的数量急剧增长。各种培训机构如雨后春笋般冒出来,大部分是教授JAVA或者前端技术,C++相关的培训机构则寥寥无几。其中最主要的原因,如果不是科班出身选择C++语言,学习起来堪比天书。
随着互联网的发展,能短时间将某个idea落地变的越来越重要。JAVA、PHP、Python、GO等语言,甚至JS都以其框架多生态好,在竞争中占据领先地位。但是不容忽视的是,其他语言是各领风骚三五年,C++从来没有跌出前五名。可见他们在业界内的地位,用常青树来形容它都不为过。
C++语言最重要的优势是内存自管理。这也是为什么它的框架,乃至类库都非常少的主要原因。内存自管理需要具备操作系统、计算机原理的理论基础知识,是大家觉得它比较难的根本所在。在实时控制,高并发等领域,C++语言的优势非常明显。比如证券行业的交易系统,大多是由C++语言编写。
了解到以上情况之后,题主应该就能明白具体的出路所在。
我们喜欢弯道超车,不喜欢做踏实的工作。所以,我们只关心现成的什么框架啊什么的,基础的没人做。
不得不承认,你说的这种现象确实存在,当今C++的职位确实不如以前,但也不不是说没有出路,只要你够专业,够精通,任何一门语言都还是有用武之地
1.以前因为开发语言相对比较少,而且更多的是进行底层开发以及行业性软件开发,所以c++应用应该说也非常广,特别是visual c++在某段时期还是比较有热度的。而c++在做底层硬件开发,服务程序开发都是有其独特的魅力。这张图是不是特别熟悉,又能做界面,又能做底层。
2.后来开发语言日益增多,而技术和应用也在不断发展,比如后面应用广泛的java,还有当今发展很快的python,无一不是 社会 不断发展的产物,互联网的发展催生了web开发,人工智能的发展催生了python语言,所以其他语言相对而言热度有所降低,导致很多人看不到未来,是不是需要转语言等等。
3.不过c++还是有很多领域应用,很多细分领域和还在使用,另外做服务器端开发还是不错的,现在很多 游戏 服务器都是c++开发的。另外,我不得不说的,语音、视频这方面还是c++,现在很多语音聊天,视频直播,不也是c++开发的吗?所以c++不会过时,继续在擅长的领域腾飞吧
C++语法太过度设计了,里面一大堆平时很少用到的语法,语法又极其灵活很容易出现错误,对使用者的要求比较高。学习成本也很高,做一个C ++项目要有很严格的编码规范来限制编码,从而防范由于对语法了解不深导致的错误。编写详尽的编码规范这也是一件很麻烦的事,加大项目的工作量。因此用c++的项目越来越少了
C++适合开发核心模块,不适合开发应用逻辑为主的项目。
C++语言不会是正方向。怎么说呢,C语言是最佳的的过渡底层学习。工作中都是c++的衍生工具软件,qt几年我学过的,需求在北京还不算少。或者就像大多数说的走嵌入式方向的底层开发,不过只会c++肯定是不够的。总之就像你学java开发,只会java开源软件坑定是不够的,还需要框架项目接口的知识。服务期间怎么连接的,传输过程之类的(我对java不算太了解,勿喷)。
一句话,核心算法都是c++语言写的,高层应用用c++的少了。但是话又说过来,如果你精通c++语言,学其他的语言,只是一星期的功夫而已。
开源项目越来越多,C/C++主要面向的基础组件都比较成熟了,搬砖拿来会用就行。
没有新的理论和平台,基础的东西无需太多关注。只有新方向出现,才需要基础组件的大量更新,这时候C/C++才会短暂性的繁荣。
从C++学 Java JavaScript C# python 都不过是几个礼拜的事情,自己不愿意学习坐在那怨天怨地?
因为golang开始慢慢蚕食c++
6. 学习软件编程未来可以从事哪些岗位
学习软件编程未来可以从事哪些岗位。首先学习软件编程未来是可以从事软件相关的工作,关系最为密切的就是软件研发工程师,也就是俗称的程序员,当然程序员还可以细分为前端程序员、后端程序员、移动端程序员、服务端程序员等等。还有比如软件实施、运维、测试、设计、分析、咨询、销售等等,包括还有项目管理之类的。
学习软件编程其次也可以从事互联网行业相关的工作岗位,研发、设计、运营都可以。
希望对你有帮助。
7. 要做程序员需要学会什么
其实简单来说,程序员的工作就是使用编程语言,根据需求写出一个程序。
但是,在这个过程中,涉及如下几个方面:
使用的编程语言 程序员需要选择一门或者多门语言来编程,不同的语言适合编写不同的程序,目前主流编程语言包括,Java、JavaScript、Python、C++、php以及其他小语种等等,每种编程语言适合开发的程序有所不同。目前从程序应用分来,主要可以分为三类a 企业应用,主要用于解决企业业务。各种企业管理后台系统,银行系统,公安系统,图书管理系统等等。
b 互联网应用,面向互联网用户,为互联网用户提供各类服务。比如现在的京东淘宝各类电商系统等。
c 移动应用,各类在移动端使用的APP,有面向互联网用户的APP,也有面向企业内部的APP。
目前相对而言,在移动应用和互联网应用方面,资本投入比较热的风口,程序员的薪资较高。企业应用,发展了很多年,相对平稳。
2. 明白需求,实现需求
需求就是编写程序的要求。一个程序要编写成什么样子,具备哪些功能,都是由需求来具体说明。程序员要需要能看懂需求文档,并且能准确地使用编程语言,根据需求中的要求来编写成程序。企业开发的项目,往往会由该程序的架构师提供一个程序框架,程序员在该框架的规范下进行编程,实现需求的功能,以确保程序的规范、可读,以及可维护性。
3. 日常工作写程序
一个软件开发一般流程是产品经理根据用户需求做一个项目出来,然后UI设计师做一些图片设计,前端开发编写页面,后台开发编写核心编程,然后介入一些大数据和人工智能,通过测试之类上线实施,后期还有运维进行相关维护。
程序员一般大多指的是前端和后台写代码程序的开发人员,除了编写代码,可能还需要通过接口和其它系统对接,实现系统间的数据交换。像单体测试,是程序员对自己写好的程序单元进行测试,检测这个程序单元数据输入和数据输出是否符合预期等等。测试出来的问题,需要修改正确,然后再测试,直至没有问题。和同事共同开发的时候也需要联合测试,以及用户测试过后如果存在BUG继续进行修改。
8. 程序员岗位职责范本
程序员需要具有良好的沟通能力、理解能力及团队精神,责任心强,能承受较大的工作压力。那么程序员 岗位职责 都有哪一些你知道吗?了解相关精彩内容请参考我为大家精心准备的程序员岗位职责范本,希望对你有所帮助,如果喜欢可以分享给身边的朋友喔!
▼▼▼ 相关推荐 ▼▼▼
★ 渠道销售主管的岗位职责概述 ★
★ 关于银行大堂经理主要工作岗位职责 ★
★ 酒店保洁员岗位职责 ★
★ 公司行政前台的岗位职责 ★
程序员岗位职责范本篇1
1. 负责公司产品PC、移动客户端核心业务模块代码实现
2. 保证前端的运行性能,表现及研发质量
3. 独立负责VR项目的研发
4. 与策划人员、后端人员、美术人员进行有效的沟通协作
程序员岗位职责范本篇2
1. 熟练掌握HTML5、CSS3、JavaScript开发,熟练掌握切图,布局等技术,对符合WEB标准的网站重构有丰富 经验 ;
2. 熟练使用Angular,Vue,React中至少一种JS框架,并掌握ES6/ES7,能独立开发常用组件;
3. 熟练使用各种调试、抓包工具,能独立分析、解决和归纳问题;
4. 对CSS/Javascript性能优化、解决多浏览器兼容性问题有一定的经验;
5. 熟悉各种常用设计模式和常用MVC框架;
6. 掌握用户体验和交互的操作流程和UI设计原则,在web交互方面有深刻的见解;
程序员岗位职责范本篇3
1、对项目经理负责,负责软件项目的详细设计、编码和内部测试的组织实施,对小型软件项目兼任系统分析工作,完成分配项目的实施和技术支持工作。
2、协助项目经理和相关人员同客户进行沟通,保持良好的客户关系。
3、参与需求调研、项目可行性分析、技术可行性分析和需求分析。
4、熟悉并熟练掌握交付软件部开发的软件项目的相关软件技术。
程序员岗位职责范本篇4
① 根据需求文档,或者功能清单,进行软件功能设计;
② 根据功能设计,进行软件代码编写;
③ 负责管理软件开发的源代码,记录版本变化;
④ 负责软件测试/开发环境的搭建与维护;
2) 参与公司对外合作的软件开发工作
① 作为企业的程序开发人员参与软件开发工作;
② 负责对接供应商的程序员,监督软件开发的进度与代码质量;
③ 负责接手供应商移交的代码,并进行源代码管理;
3) 在用软件的维护工作
① 维护软件运行的环境,定期检查 操作系统 日志;
② 维护软件运行的系统参数;
③ 协同运维人员为HelpDesk团队提供二级支持。
程序员岗位职责范本篇5
1、完成项目安排的开发任务和代码编写工作;
2、按照项目需求的详细设计文档和规范编码;
3、对公司的软件平台或项目相关模块进行单元测试并通过;
4、修改软件测试后反馈的缺陷与漏洞;
5、对公司现有的软件平台日常的维护工作
6、对使用公司或部门产品/框架提出反馈意见;
7、完成 其它 与IT相关的辅助工作(软件支持、系统检测等);
8、软件项目相关的文档编撰和 说明书 制作演示等工作;
9、定期完成相关 工作 报告 (日志、周报、月报等),向IT经理汇报。
程序员岗位职责范本篇6
1. 能理解业务逻辑,对业务模型进行设计,编写出规范的设计文档;
2. 按照 工作计划 和进度完成系统模块的开发任务,保证开发的质量;
3. 沟通需求和开发中遇到的相关问题;
4. 完成上级安排的其他工作。
程序员岗位职责范本篇7
1.根据系统设计文档负责自己模块的详细设计;
2.负责模块的代码开发;
3.负责已开发模块的测试及维护;
4.相关技术文档的起草。
程序员岗位职责范本篇8
unity3d高级游戏程序员 1、使用unity3d引擎开发3d休闲、棋牌、卡牌游戏
2、与策划、美术、产品人员讨论开发需求及技术实现细节
3、编写高效、稳定、安全的代码
4、负责游戏上线后的优化与迭代开发
任职资格:
1、3年以上unity3d游戏开发经验,有成功项目经验者优先;
2、熟悉常用数据结构和算法,有良好的代码编写习惯,结构清晰、命名规范、逻辑性强
3、熟练掌握3d渲染相关知识,对dx/opengl有一定了解,熟悉各种主流特效、3d效果的实现方式
4、对资源优化、内存及性能优化有一定的研究,了解常用设计模式
5、热爱游戏,对游戏有自己的理解,做过卡牌,棋牌游戏的优先考虑
程序员岗位职责范本篇9
职责描述:
1、负责游戏核心玩法、游戏逻辑系统等开发工作;
2、负责底层通信系统、图形系统、引擎及编辑工具相关开发,游戏客户端程序性能优化。
任职要求:
1、计算机类或相关专业本科及以上学历,两年以上游戏或互联网行业编程工作经验;
2、熟练使用c/c++/java/c#/objective-c/python中的一种或多种,具备扎实的编程语言基础,熟练掌握数据结构与常见算法;
3、热爱游戏,踏实肯干,工作态度积极向上;
4、有u3d相关项目经验者优先;
5、具备手机游戏或客户端游戏开发经验者优先;
6、熟悉ios或android系统原理,熟悉移动终端环境特性及相关解决方案者优先。
程序员岗位职责范本篇10
主程序员-游戏开发lead software engineer 维塔士 上海维塔士电脑软件有限公司,维塔士,维塔士 主程序员-游戏开发
lead software engineer
职责:
设计客户端结构,编写核心代码
领导客户开发团队,确保产品满足项目进度和质量要求
与客户、设计和项目经理协调游戏的需求和技术
负责游戏客户端各功能模块的设计和监督执行
负责游戏客户端的人员配置、进度和质量控制
负责初级和高级员工的培训和发展
经理安排的其他工作
responsibilities:
design the structure of client side and write the core code
lead the client side development team, make sure that the proct can meet the project schele and quality requirements
coordinate with the client, design and project manager about the requirements and technique of game
responsible for the design and oversee implementation of each functional mole of the game client
responsible for the personnel allocation and schele and quality control of the client side of game
responsible for training and developing of junior and senior
other tasks assigned by the manager
任职要求:
计算机科学或相关领域的学士学位,或同等的培训和专业经验
对游戏开发有热情,愿意投身于技术工作
4年以上游戏客户端开发经验
至少一个流行的游戏引擎,如unity或unreal的使用经验
精通游戏客户端逻辑框架、系统架构、性能分析、测试、安全技术等
熟练掌握c++或c#,有人工智能、图形和渲染经验优先,有管理经验者优先
有手机游戏背景开发经验者优先
深刻理解面向对象的设计与开发理念,熟悉设计模式,有丰富的实践经验
良好的沟通能力,高度的责任感和职业精神,能在高压下工作
逻辑思维 能力强,思维严谨
有领导团队的经验
良好的英语读写能力,口语能沟通为佳
qualifications:
bachelor degree in computer science or related field, or equivalent training and professional experience.
have the enthusiasm for game development, willing to dedicate himself to the technical work
have 4 years or more experience of game client development.
experience with at least one of the popular game engines such as unity or unreal
proficient in game clients logic framework, system architecture, performance analysis, test, security technology, etc
proficient in c++ or c# ? experience in ai, graphics and rendering is a plus but not compulsory supervision ? management experience is a big plus
have mobile game background development experience is a plus
have a deep understanding of object-oriented design and development of ideas, familiar with design pattern and rich practical experience
good communication skills, high sense of responsibility and professional spirit, can work under high pressure
have a strong logical and rigorous thinking ability
experienced in leading a team
good at listening, speaking, reading and writing in english, fluent in oral english
程序员岗位职责范本相关 文章 :
★ 试用期职员工作总结范文10篇
★ 最新通用员工手册范本7篇
★ 专业技术人员工作总结范文10篇
★ it个人工作总结范文精选10篇
★ 软件部门职责最全合集
★ 程序员个人年终工作总结2021模板十篇
★ 程序员2021年终工作总结报告范文
★ JA软件工程师岗位职责精选范本5篇
★ 程序员个人工作总结最新范文5篇
★ 程序员职业规划范文(2)
var _hmt = _hmt || []; (function() { var hm = document.createElement("script"); hm.src = "https://hm..com/hm.js?"; var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(hm, s); })();9. IT面试经验:C/C++程序员需要掌握哪些知识
概括来说,开发中常用到的功能:串口通信、网口通信、数据库访问、数据加解密处理等等。这些方面的知识都要掌握的,细说的话主要有以下几个方面:
一、语言相关
1、基础(Basic)
(1)变量与基本类型:语言内置类型、常量、变量的初始化、变量的作用域、变量的 限定符、变量引用、枚举; (2)typedef 和#define;
(3)数值与指针:数组定义与初始化、多维数值、指针操作;
(4)表达式:算术/逻辑计算、位运算、优先级、类型转换;
(5)语句:简单语句、声明/定义语句、复合语句、条件/循环控制语句、异常处理语 句;
(6)函数:函数声明、参数传递、堆栈概念、函数重载;
(7)标准IO:条件状态、缓冲区、文件流、字符流、本地化;
(8)类和数据抽象:类的定义与声明、类的构造函数、静态成员、拷贝构造函数、操 作符重载、类型转换;
(9)面向对象编程:数据(封装)抽象、继承、多态(动态绑定);
2、进阶(Advance)
(1)模板与泛型编程:模板定义、实例化、类模板成员、重载、特化; (2)智能指针:auto_ptr、shared_ptr、scoped_ptr;
(3)STL容器:顺序容器(vector、list、deque、queue、priority_queue、string)和关 联容器(map、set、multimap、multiset); (4)STL算法:迭代器、算法; (5)常用复杂数据结构:hash_map、boost.any、boost. array、boost. regex、boost. variant、 boost. multi_array、boost. pointer_container;
3、高级(Expert)
(1)高级泛型编程:表达式模板、模板元编程、Concept编程;
(2)程序架构,内存池,线程池;
(3)高级抽象:boost.mpl、boost.lambda、boost.fusion、boost.proto;
(4)范式应用:boost.spirit;
(5)应用程序库:boost.asio 、boost.graph、blitz++、Loki、CGAL、uBLAS;
二、系统相关
1、基础(Basic)
(1)Windows API之基础服务:文件系统、注册表、内存管理、DLL、多媒体;
(2)Windows API之内核对象:句柄、信号、线程、进程、互斥、事件、文件映射、 命名管道、邮槽、计时器、完成端口;
(3)Windows API之图形设备接口:设备上下文、打印、字体、笔/刷、路径、区域、 位图;
(4)Windows API之图形用户界面:窗口、标题、菜单、状态栏、消息、图标、按钮、 编辑框、组合框、列表框、滚动条、通用对话框;
(5)环境配置及Shell编程:环境变量、右键菜单、属性、关联; (6)Socket编程; (7)Web相关API; 2、进阶(Advance)
(1)MFC/ATL:文档视图结构、对话框、通用控件、OleDB、WinInet; (2)COM、自动化、ActiveX:Office开发、IE插件、VBA; (3)高级图形系统:OpenGL、DirectX; (4)二次开发:ObjectArx;
三、计算相关
1、计算机图形学
(1)向量:点积、叉积、求模、单位化、复合运算;(basic)
(2)矩阵:算术运算、平移/旋转/缩放/错切等变换、求逆、特征值;(basic) (3)四元组合欧拉角:与其他表示转换;(advance) (4)参数曲线/曲面:贝塞尔、(非)均匀有理样条;(advance) (5)三维几何体的构造与描述;(expert) 2、计算几何
(1)几何查找与判断:点与线、线与线、点与多边形;(basic) (2)多边形:简单多边形、凸多边形、多边形三角剖分;(advance) (3)凸壳及其应用;(advance) (4)Voronoi图/三角剖分及其应用;(advance) (5)多边形的交与并;(expert) (6)平面图;(expert) 3、数值计算
(1)数值计算的三大任务:求值、解方程(组)、函数逼近;(basic) (2)数值计算的误差、适定性、稳定性;(basic)
(3)解线性方程组直接方法:Gauss消元法、三角分解法;(basic)
(4)解线性方程组一般迭代方法:基本迭代、Jacobi迭代、G-S迭代、SOR/SSOR迭代; (advance)
(5)解线性方程组的变分迭代法:共轭梯度、预处理共轭梯度法;(expert) (6)解非线性方程组迭代方法:Newton迭代法、Newton-Raphson迭代法、同伦算法; (expert)
(7)求解矩阵特征值:乘幂法与反乘幂法、Rayleigh商迭代法、QR法、Krylov子空间 法;(expert)
(8)插值:多项式插值、样条插值;(advance) (9)数值积分:Simpson公式、Gauss积分;(basic) (10)解常微分方程:欧拉法、Runge-Kutta法;(advance) (11)解椭圆方程:有限单元法、有限差分法、边界元法;(expert)
希望可以帮到您,谢谢!
10. 程序员要具备什么技能
一名合格的程序员需要掌握哪些技能呢?
熟练掌握开发工具
做为一名程序员至少熟练掌握两到三种开发工具的使用,这是程序员的立身之本,其中C/C++和JAVA是重点推荐的开发工具,C/C++以其高效率和高度的灵活性成为开发工具中的利器,很多系统级的软件还是用C/C编写。而JAVA的跨平台和与WEB很好的结合是JAVA的优势所在,而JAVA即其相关的技术集JAVA One很可能会成为未来的主流开发工具之一。其次,能掌握一种简便的可视化开发工具,如VB,PowerBuilder,Delphi,C Builder,则更好,这些开发工具减小了开发难度,并能够强化程序员对象模型的概念。另外,需要掌握基本的脚本语言,如shell,perl等,至少能读懂这些脚本代码。
熟知数据库
为什么数据库是如此重要?作为程序员,他们自然有自己的理由:很多应用程序都是以数据库的数据为中心,而数据库的产品也有不少,其中关系型数据库仍是主流形式,所以程序员至少熟练掌握一两种数据库,对关系型数据库的关键元素要非常清楚,要熟练掌握SQL的基本语法。虽然很多数据库产品提供了可视化的数据库管理工具,但SQL是基础,是通用的数据库操作方法。如果没有机会接触商业数据库系统,可以使用免费的数据库产品是一个不错的选择,如mySQL, Postgres等。
对操作系统有一定的了解
当前主流的操作系统是Windows,Linux/Unix,熟练地使用这些操作系统是必须的,但只有这些还远远不够。要想成为一个真正的编程高手,需要深入了解操作系统,了解它的内存管理机制、进程/线程调度、信号、内核对象、系统调用、协议栈实现等。Linux作为开发源码的操作系统,是一个很好的学习平台,Linux几乎具备了所有现代操作系统的特征。虽然Windows系统的内核实现机制的资料较少,但通过互联网还是能获取不少资料。只有对操作系统有一定的了解后,你会发现自己上了一个新的台阶。
懂得网络协议TCP/IP
在互联网如此普及的今天,如果您还没有对互联网的支撑协议TCP/IP协议栈有很好的掌握,就需要迅速补上这一课,网络技术已改变了软件运行的模式,从最早的客户/服务器结构,到今天的WEB Services,再到未来的网格计算,这一切都离不开以TCP/IP协议栈为基础的网络协议支持,所以,深入掌握TCP/IP协议是非常必要的。至少,你需要了解ISO七层协议模型,IP/UDP/TCP/HTTP等常用协议的原理和三次握手机制。
明白DCOM/CORBA/XML/WEB Services存在的意义
随着技术的发展,软件与网络的无缝结合是必然趋势,软件系统的位置无关性是未来计算模式的重要特征之一,DCOM/CORBA是当前两大主流的分布计算的中间平台,DCOM是微软COM(组件对象模型)的扩展,而CORBA是OMG支持的规范。程序员需要做的不仅仅是利用商业的开发平台来开发软件,而是要理解这些技术的初衷,即为什么需要这项技术,如果你能理解了这一点,再回头看这些技术的具体实现,就如庖丁解牛,迎刃而解。XML/WebServices重要性不言而喻,XML以其结构化的表示方法和超强的表达能力被喻为互联网上的“世界语”,是分布计算的基石之一。
不要将软件工程与CMM分开
现代大型软件系统的开发中,工程化的开发控制取代个人英雄主义,成为软件系统成功的保证,一个编程高手并不一定是一个优秀的程序员,一个优秀的程序员是将出色的编程能力和开发技巧同严格的软件工程思想有机结合,编程只是软件生命周期中的其中一环,优秀的程序员应该掌握软件开发各个阶段的基本技能,如市场分析,可行性分析,需求分析,结构设计,详细设计,软件测试等。一句话可以概括我的看法:“创意无限,流程保证”。
拥有强烈的好奇心
什么才是一个程序员的终极武器呢,那就是强烈的好奇心和学习精神。没有比强烈的好奇心和学习精神更好的武器了,它是程序员们永攀高峰的源泉和动力所在。