程序员怎么学(程序员怎么学数学)
C程序员怎么学习
一、知识点学习
①字符串
1、strlen()函数的返回值是什么类型的?
2、字符串strlen() 的值,是否和他占据的内存空间相同?
3、你是否知道strcpy 函数存在的潜在风险?如何避免?
4、如果一个字符串没有字符串结束符,而调用str 开头的库函数,会发生什么?
5、Strcpy(),strcat(),strcmp(),strncpy(),strncat(),strncmp()内部到底是如何运行的?这些函数到底对源字符串和目标字符串做了些什么?你是否观察过它们运行时两个字符串内存的变化?
6、上面这些函数使用时,各有哪些需要注意的地方?
7、你会几种字符串查找操作?
8、c语言中有字符串这个数据类型吗?
9、对字符串进行操作的时候,是否为字符串结尾符预留存储位置?不然的话容易造成非常访问内存。
二、数组
1、你肯定知道,定义“int a[10]; ”, a[10] 这个元素是无效的。
2、你知道几种数组初始化的方法?
3、数组和指针有千丝万缕的联系而又不同,你是否对他们在不同情况下的使用进行过详细的总结?
4、“int calendar[10][20]; ”,这是一个什么样的数组?它拥有 10 数组类型的元素,还是 20 个?
5、“int a[10]; ”,数组名 a 在本质上是一个什么?你是否打印过 a 的值?
6、你知道几种获取数组某元素的方法?
7、指针和数组相同吗?什么时候相同?什么时候不同?
8、用指针和下标访问数组元素,那种方式更快?
三、结构体
1、你知道什么是位域结构体吗?如何定义它?如何使用它?
2、你知道字节对齐对结构体占用内存空间大小的影响吗?如何计算结构体占用内存的大小?
四、宏
1、你知道宏的本质是什么吗?函数?语句?类型定义?或者其他?
2、你知道语言设计者为什么设计宏吗?这些原因目前是否仍然成立?
3、你会设计带有参数的宏吗?
4、你知道使用宏的参数的的时候的注意事项吗?
5、你会设计带有可变参数的宏吗?
6、你知道使用宏有什么劣势吗?
7、你有没有更好的替代方案?
五、枚举
1、是否可以指定枚举中各项的值?
2、如果不指定值,枚举的第一个值是多少?
3、枚举的值是否可以是负数?
4、定义枚举的时候,你是否专门定义了枚举的最小值和最大值?
六、switch
1、switch©中的 c 的数据类型有哪些?
2、你是否在所有的switch 中都加了 default 语句?
3、是否在所有的case 中都加了 break 语句(一般情况的做法)?如果你不加 break ,将会发生什么?
七、static
1、static的三个主要作用是什么?
2、static的修饰的局部变量是保存在什么地方的?全局变量哪 ?
3、static修饰的全局变量和函数,在其他的文件中是否可以访问?如何访问?
4、你知道static 是 c 语言中实现封装和隐藏的利器吗?你是否经常使用?
5、定义在不同源文件中的static 全局变量,编译器是否允许他们的变量名称相同?他们在内存中的地址是否相同?函数那?
八、const
1、你是否经常使用const 来表明不能够被更改的变量?
2、你是否经常使用const 常量来代替宏?
3、下面四种情况,你知道是各表示什么意思吗?
int i_value= 10;
const int* pvalue = i_value
int const *pvalue = i_value
int* const pvalue= i_value
const int* const pvalue = i_value
4、你知道const 常量如何初始化吗?
九、sizeof
1、对于字符数组,strlen 和 sizeof 的值是否相同?
2、S izeof本质上是函数还是宏?
3、S izeof的返回值是什么类型?
十、指针
1、“int *p; ” p , p , *p 他们的值分别表示什么含义?
2、你定义的指针初始化了没?
3、你理解指针的指针的概念吗?你会使用吗?
4、“int *pi_value; pi_value = 0x100000; ” pi_value + 1 的值是是多少?
5、你会定义函数指针吗?
6、你会使用函数指针调用函数吗?
7、关于指针和数组,请参见知识点数组。
十一、动态分配内存
1、动态分配的内存是保存在什么地方的?
2、什么情况下使用动态分配内存?
3、动态申请内存一定要释放,否则会内存泄露。你是否使用过内存检测工具?
十二、函数
1、如何查看函数在内存中的地址?
2、如何给一个函数指针赋值?
3、你是否会定义可变入参函数
4、你是否可以区分函数的形参与实参?
5、如何定义函数名,以准确的表达函数的用途?
6、你是否使用const 来修饰函数入参和返回值,以表的特定的含义?
7、递归如何使用?
十三、变量
1、全局变量,局部变量,常量分别保存在内存中的什么地方?
2、不同类型的变量,你是否知道其作用域?
3、全局变量和局部变量是否可以重名?你是否在这样做?
4、局部变量在函数退出后是否有效,为什么?
5、全局变量为什么不允许定义在头文件中?有何危害?
十四、连接(Linux)
1、链接位于编译过程的那个阶段?
2、动态链接库和静态链接库使用时有何区别?
3、如何 对 动态链接库 进行 动态加载 (不用重启程序而加载链接库)?
4、动态链接有何优点?
5、动态链接库中是否定义了非static 的全局变量?你是否知道这是一个非常危险的动作?
6、动态库中的全局变量(非static )和函数(非 static )是否可以和上层全局变量和函数重名?重名后会发生什么事情?
十五、运行时的数据结构(Linux)
1、你知道什么是段的概念吗?
2、可执行程序可以分为几个段?每个段保存的是什么内容?
3、如何查看可执行程序各个段的大小?
4、当函数被调用时发生了什么?
5、你有没有试过程序的栈空间最大有多大?程序超过此大小会发生什么?
6、你使用的系统的栈是向下生长的,还是向上生长的?
十六、Include
1、如何避免对同一头文件的多次include ?
十七、声明
1、什么是 声明 ,什么是定义?
2、你是否会运用c 语言声明的优先级规则?
十八、关于 复杂度 :
1、软件的首要技术使命 是 管理复杂度。
2、优秀程序员的 一个特质 是将复杂的事情简单化,而非将简单的问题复杂化。所以,他们一般会选择简单的解决方案。
3、极尽机巧,复杂的解决方案,除了将新手搞得晕头转向之外,别无他用。
4、阅读优秀程序员的代码,是一种享受,你很少遇到思维的阻力,你可以尽情的享受简单之美。
程序员如何学习?
软件开发分很多方向,有java、C、C++、PHP、android、ios等,你先要选择一个方向。或者,你先选择一种语言学习吧,我个人建议你先学习JAVA,简单易学,易于理解。
当你学完JAVA后,可以做前端开发,后台开发,也可以做移动端android开发。至少其它的前端语言啊,后台语言啊,等你学扎实一门语言后,你就可以触类旁通了。
最重要的是,选择好方向后,抓紧时候赶紧去学吧。与其把时间花在选择上,还不如抓紧时间学,干就完了!
游戏程序员需要学什么
首先让我们来谈谈什么是程序员,以及程序员需要做哪些事情?
选择做程序员,是源于真正意义上的兴趣和喜欢,在做程序员的这几年,我的生活也在一步步的提升,但同样,不可否认在我个人眼里,程序员的工作就像选择其他种类的工作一样,只是一份职业,一种在社会上存身立足的手段。
在校时,以及工作后都曾这么的想过:做一个IT从业人员,做一个程序员,做上个一二年,然后向提升下,做一个项目经理什么的。或许,可以开一家自己的小软件公司,或许做一名软件顾问,再或许开一个网站,开发一个自己的小软件。或者,真的不行的,利用做程序员这几年的积蓄做一些小买卖 转行另谋生计。总之,感觉做程序开发将是人生的一个过渡,可若真的按这种思路过渡,就将是用我人生的青春年华大好时光的五六年,或者更多时间。
下面一些事情是做程序员必须思考的:
(一) 你适合当程序员吗,你知道编程序是怎么回事吗?
1、 程序员意味着要编程序。(如果你仅仅想得到一份高薪水的工作,喝喝咖啡就等老板发薪水,我奉劝你还是另找一份更合适的工作,譬如练摊,真的,兄弟,这份工作不适合你)
2、你是学文的还是学理的,编程序也许需要浪漫,但更需要逻辑和严谨。(说坦白点就是,在你没有找到乐趣以前,它很枯燥)
3、你有对新技术追求的热情吗?你有刨根问底的探索精神吗?(热情绝对是最重要的!你仔细思考一下自己的性格适合当程序员吗?)
4、当程序员决不是什么好差事,时刻需要学习,需要思考。(直到你成为那个可以引导别人去学习和思考的人,你才可以偷偷的嘿嘿笑,又一群傻蛋)
5、程序员的未来很迷茫。(但我认为关键看你自己!我希望你是一个有追求的人,不仅仅是混碗饭吃。因为真正的乐趣在于创造;如果你能改变软件业的历史,那才是英雄;不想成为Bill Gates,不想成为Dennis Ritchie和 Bjarne Stroustrup,我会说你没有追求。
6、当程序员还是很有乐趣的。(当你学到新知识时,当你有新的思想见解时,当你有新的产品问世时,和知己探讨你的成果时…我问你,觉得这些是乐趣吗?)
7、当程序员不易也不难。(世间事有难易乎?为之…;不为…。你有决心和信心吗?)
8、你舍得花钱买书吗?(读好书绝对是学习编程的最佳捷径。你一定会说,现在电脑书籍真他妈的贵,没法子,谁让知识和技术在人家的脑袋,在人家的书里呢;等你写书时可以把价格定低一点,记着还有好多没钱但想买书的兄弟很困难呀。要舍得买书,买好书,不好的的书不如不读,其害大于其益,关于买什么书,你可以问高手或看候捷的书评;准备一个小本子记录你想买的书的名字,逛书店时看看,如果好就买下,记住要读,别光买不看。)
9、我告诉你,程序就是:任何有目的的、预想好的动作序列,它是一种软件。
10、编程序就是编写程序。
11、你想好了吗?(如果你想好了还是决定要当程序员,可以继续往下读;否则,你可以继续寻找别的出路了。)
(二) 作为一个合格程序员每天该做的事是什么
1、总结自己一天任务的完成情况
最好的方式是写工作日志,把自己今天完成了什么事情,遇见了什么问题都记录下来,日后翻看好处多多;
2、考虑自己明天应该做的主要工作
把明天要做的事情列出来,并按照优先级排列,第二天应该把自己效率最高的时间分配给最重要的工作;
3、考虑自己一天工作中失误的地方,并想出避免下一次再犯的方法
出错不要紧,最重要的是不要重复犯相同的错误,那是愚蠢;
4、考虑自己一天工作完成的质量和效率能否还能提高
一天只提高1%,365天你的效率就能提高多少倍你知道吗?(1+0.01)*365 = 37 倍;
5、看一个有用的新闻网站或读一张有用的报纸,了解业界动态
闭门造车是不行的,了解一下别人都在做什么,对自己能带来很多启示;
6、记住一位同事的名字及其特点
你认识公司的所有同事吗?你了解他们吗?
7、清理自己的代码
今天完成的代码,把中间的调试信息,测试代码清理掉,按照编码风格整理好,注释都写好了吗?
8、清理自己的桌面
当日事当日毕,保持清洁干净的桌面才能让你工作时不分心,程序员特别要把电脑的桌面清理干净;
电脑程序员怎么学???
程序员的岗位需求很多,例如大型网络公司、软件开发公司等等都需要程序员。
程序员需要学习:
1、掌握数据及其转换、数据的机内表示、算术和逻辑运算,以及相关的应用数学基础知识;
2、理解计算机的组成以及各主要部件的性能指标;
3、掌握操作系统、程序设计语言的基础知识;
4、熟练掌握计算机常用办公软件的基本操作方法;
5、熟练掌握基本数据结构和常用算法;
6、熟练掌握C程序设计语言,以及C++、Java、Visual Basic中的一种程序设计语言;
7、熟悉数据库、网络和多媒体的基础知识;
8、掌握软件工程的基础知识,了解软件过程基本知识、软件开发项目管理的常识;
9、了解常用信息技术标准、安全性,以及有关法律、法规的基本知识;
10、了解信息化、计算机应用的基础知识;
11、正确阅读和理解计算机领域的简单英文资料。
程序员必备技能:
1、熟练开发工具
做为一名程序员至少熟练掌握两到三种开发工具的使用,这是程序员的立身之本,其中C/C++和JAVA是重点推荐的开发工具,C/C++以其高效率和高度的灵活性成为开发工具中的利器,很多系统级的软件还是用C/C++编写。
而JAVA的跨平台和与WEB很好的结合是JAVA的优势所在,而JAVA即其相关的技术集JAVAOne很可能会成为未来的主流开发工具之一。
其次,能掌握一种简便的可视化开发工具,如VB,PowerBuilder,Delphi,CBuilder,则更好,这些开发工具减小了开发难度,并能够强化程序员对象模型的概念。
另外,需要掌握基本的脚本语言,如shell,perl等,至少能读懂这些脚本代码。
2、熟知数据库
作为程序员,他们自然有自己的理由:很多应用程序都是以数据库的数据为中心,而数据库的产品也有不少,其中关系型数据库仍是主流形式,所以程序员至少熟练掌握一两种数据库,对关系型数据库的关键元素要非常清楚,要熟练掌握SQL的基本语法。
虽然很多数据库产品提供了可视化的数据库管理工具,但SQL是基础,是通用的数据库操作方法。如果没有机会接触商业数据库系统,可以使用免费的数据库产品是一个不错的选择,如mySQL,Postgres等。
3、了解操作系统
当前主流的操作系统是Windows,Linux/Unix,熟练地使用这些操作系统是必须的,但只有这些还远远不够。
要想成为一个真正的编程高手,需要深入了解操作系统,了解它的内存管理机制、进程/线程调度、信号、内核对象、系统调用、协议栈实现等。
Linux作为开发源码的操作系统,是一个很好的学习平台,Linux几乎具备了所有现代操作系统的特征。虽然Windows系统的内核实现机制的资料较少,但通过互联网还是能获取不少资料。懂得网络协议TCP/IP。
在互联网如此普及的今天,如果您还没有对互联网的支撑协议TCP/IP协议栈有很好的掌握,就需要迅速补上这一课,网络技术已改变了软件运行的模式。
从最早的客户/服务器结构,到今天的WEBServices,再到未来的网格计算,这一切都离不开以TCP/IP协议栈为基础的网络协议支持,深入掌握TCP/IP协议是非常必要的。
至少,需要了解ISO七层协议模型,IP/UDP/TCP/HTTP等常用协议的原理和三次握手机制。
4、明白DCOM/CORBA/XML/WEBServices存在的意义
随着技术的发展,软件与网络的无缝结合是必然趋势,软件系统的位置无关性是未来计算模式的重要特征之一,DCOM/CORBA是当前两大主流的分布计算的中间平台,DCOM是微软COM(组件对象模型)的扩展,而CORBA是OMG支持的规范。
XML/WebServices重要性不言而喻,XML以其结构化的表示方法和超强的表达能力被喻为互联网上的“世界语”,是分布式计算的基石之一。
5、不要将软件工程与CMM分开
大型软件系统的开发中,工程化的开发控制取代个人英雄主义,成为软件系统成功的保证,一个编程高手并不一定是一个优秀的程序员。
一个优秀的程序员是将出色的编程能力和开发技巧同严格的软件工程思想有机结合,编程只是软件生命周期中的其中一环,优秀的程序员应该掌握软件开发各个阶段的基本技能。
如市场分析,可行性分析,需求分析,结构设计,详细设计,软件测试等。
6、需求理解能力
程序员要能正确理解任务单中描述的需求。在这里要明确一点,程序员不仅仅要注意到软件的功能需求,还应注意软件的性能需求。
要能正确评估自己的模块对整个项目中的影响及潜在的威胁,如果有着两到三年项目经验的熟练程序员对这一点没有体会的话,只能说明他或许是认真工作过,但是没有用心工作。
7、模块化思维能力
作为一个优秀的程序员,他的思想不能局限在当前的工作任务里面,要想想看自己写的模块是否可以脱离当前系统存在,通过简单的封装在其他系统中或其他模块中直接使用。
这样做可以使代码能重复利用,减少重复的劳动,也能使系统结构越趋合理。模块化思维能力的提高是一个程序员的技术水平提高的一项重要指标。
如何自学成为程序员
自学程序员的方法
对于初学者来说,可以采用视频+书籍的方式进行学习,这两种方式形成互补关系,另外阅读代码也可以帮助你解决问题,了解最佳做法,这里的阅读代码是书籍,博客文章,开源代码等等。
编程教学视频可以让你迅速掌握编程语法等,但通常比较生动,浅显,不成系统。而书本比较深入,系统,但是枯燥,但是最好的方法是书和视频的结合。
在阅读代码后,你需要自己实际去写代码。可以是任何东西。可以是小的编码任务或者一个小模块,必须确保你能将之付诸于实践,并用某种方式使用你学到东西。如果你不这样做,你会发现你对编辑器无从下手,知识等待使用的时间越长,知识这把斧头就越钝,等待学习新知识的时间就越久,你就越难以将其融入到代码中。
要做程序员需要学会什么?
要做程序员需要学会什么
程序员的岗位需求很多,例如大型网络公司、软件开发公司等等都需要程序员。
程序员需要学习:
1、掌握数据及其转换、数据的机内表示、算术和逻辑运算,以及相关的应用数学基础知识;
2、理解计算机的组成以及各主要部件的性能指标;
3、掌握操作系统、程序设计语言的基础知识;
4、熟练掌握计算机常用办公软件的基本操作方法;
5、熟练掌握基本数据结构和常用算法;
6、熟练掌握C程序设计语言,以及C++、Java、Visual Basic中的一种程序设计语言;
7、熟悉数据库、网络和多媒体的基础知识;
8、掌握软件工程的基础知识,了解软件过程基本知识、软件开发项目管理的常识;
9、了解常用信息技术标准、安全性,以及有关法律、法规的基本知识;
10、了解信息化、计算机应用的基础知识;
11、正确阅读和理解计算机领域的简单英文资料。
程序员必备技能:
1、熟练开发工具
做为一名程序员至少熟练掌握两到三种开发工具的使用,这是程序员的立身之本,其中C/C++和JAVA是重点推荐的开发工具,C/C++以其高效率和高度的灵活性成为开发工具中的利器,很多系统级的软件还是用C/C++编写。
而JAVA的跨平台和与WEB很好的结合是JAVA的优势所在,而JAVA即其相关的技术集JAVAOne很可能会成为未来的主流开发工具之一。
其次,能掌握一种简便的可视化开发工具,如VB,PowerBuilder,Delphi,CBuilder,则更好,这些开发工具减小了开发难度,并能够强化程序员对象模型的概念。
另外,需要掌握基本的脚本语言,如shell,perl等,至少能读懂这些脚本代码。
2、熟知数据库
作为程序员,他们自然有自己的理由:很多应用程序都是以数据库的数据为中心,而数据库的产品也有不少,其中关系型数据库仍是主流形式,所以程序员至少熟练掌握一两种数据库,对关系型数据库的关键元素要非常清楚,要熟练掌握SQL的基本语法。
虽然很多数据库产品提供了可视化的数据库管理工具,但SQL是基础,是通用的数据库操作方法。如果没有机会接触商业数据库系统,可以使用免费的数据库产品是一个不错的选择,如mySQL,Postgres等。
3、了解操作系统
当前主流的操作系统是Windows,Linux/Unix,熟练地使用这些操作系统是必须的,但只有这些还远远不够。
要想成为一个真正的编程高手,需要深入了解操作系统,了解它的内存管理机制、进程/线程调度、信号、内核对象、系统调用、协议栈实现等。
Linux作为开发源码的操作系统,是一个很好的学习平台,Linux几乎具备了所有现代操作系统的特征。虽然Windows系统的内核实现机制的资料较少,但通过互联网还是能获取不少资料。懂得网络协议TCP/IP。
在互联网如此普及的今天,如果您还没有对互联网的支撑协议TCP/IP协议栈有很好的掌握,就需要迅速补上这一课,网络技术已改变了软件运行的模式。
从最早的客户/服务器结构,到今天的WEBServices,再到未来的网格计算,这一切都离不开以TCP/IP协议栈为基础的网络协议支持,深入掌握TCP/IP协议是非常必要的。
至少,需要了解ISO七层协议模型,IP/UDP/TCP/HTTP等常用协议的原理和三次握手机制。
4、明白DCOM/CORBA/XML/WEBServices存在的意义
随着技术的发展,软件与网络的无缝结合是必然趋势,软件系统的位置无关性是未来计算模式的重要特征之一,DCOM/CORBA是当前两大主流的分布计算的中间平台,DCOM是微软COM(组件对象模型)的扩展,而CORBA是OMG支持的规范。
XML/WebServices重要性不言而喻,XML以其结构化的表示方法和超强的表达能力被喻为互联网上的“世界语”,是分布式计算的基石之一。
5、不要将软件工程与CMM分开
大型软件系统的开发中,工程化的开发控制取代个人英雄主义,成为软件系统成功的保证,一个编程高手并不一定是一个优秀的程序员。
一个优秀的程序员是将出色的编程能力和开发技巧同严格的软件工程思想有机结合,编程只是软件生命周期中的其中一环,优秀的程序员应该掌握软件开发各个阶段的基本技能。
如市场分析,可行性分析,需求分析,结构设计,详细设计,软件测试等。
6、需求理解能力
程序员要能正确理解任务单中描述的需求。在这里要明确一点,程序员不仅仅要注意到软件的功能需求,还应注意软件的性能需求。
要能正确评估自己的模块对整个项目中的影响及潜在的威胁,如果有着两到三年项目经验的熟练程序员对这一点没有体会的话,只能说明他或许是认真工作过,但是没有用心工作。
7、模块化思维能力
作为一个优秀的程序员,他的思想不能局限在当前的工作任务里面,要想想看自己写的模块是否可以脱离当前系统存在,通过简单的封装在其他系统中或其他模块中直接使用。
这样做可以使代码能重复利用,减少重复的劳动,也能使系统结构越趋合理。模块化思维能力的提高是一个程序员的技术水平提高的一项重要指标。
就业方向:
1、网络开发
现在网络已经成为世界通讯的一座桥梁,好像Javascript、PHP、Ruby这几类开发语言大部分是用作网络开发方面。
2、企业软件开发
JAVA、C#、VB这几类开发语言都实现了面向对象开发的目标,更多时候用于企业系统的开发。
3、系统软件
C语言、C++、Object-C这些软件更多是用在系统软件开发,嵌入式开发的方面。
当然,这分类不是绝对,像JAVA、C#、VB很多时候也用于动态网站的开发。在很开发项目都会使用集成开发的方式,同一个项目里面使用多种开发语言,各展所长,同步开发。
零基础小白如何成为程序员?需要学习哪些内容?
首先就是一定要对电脑,计算机知识储备丰富一些,然后就是对于很多的文化都是要有定的了解的,需要学习的其实就是制造表格还有一些其他的东西
程序员怎么学?
程序员一般有初中学历就可以自学。书籍可以购买C语言等等的教程,比较适合新手。
程序有javascrip、C++、Python程序员、ABAP、android、iOS等等,种类丰富。天赋和知识这些都是次要的,首先需要有热爱的心,但是程序员的确对数学和英语有一定要求。
程序员考试上:凡遵守中华人民共和国宪法和各项法律,恪守职业道德,具有一定计算机技术应用能力的人员,均可根据本人情况报名参加相应专业类别、级别的考试。无其他特别要求,只要有这个能力就可以报名。
扩展资料
岗位分类
计算机科学发展到今天(21世纪初期),程序员从事的人群很多,分工也不相同,从大的方面可以分为以下几类:asp程序员、web前端开发程序员、delphi程序员、php程序员、powerbuilder程序员、C程序员、linux程序员、net程序员、vb程序员、java程序员、javascript程序员、C++程序员、Python程序员、ABAP程序员、android程序员、iOS程序员。