‘壹’ 一个程序员所必须学习的有哪些,以及自我修养是什么
一个优秀的程序员必须不断学习的课程:
1、专业的的理论教程,系统的知识学习面。
要成为一名出色的程序员,从数据结构、算法。数据库都需要系统全面的了解和认识,并可以灵活运用。对自己所从事的编程语言要灵活调用。
2、不断尝试,乐于挑战。
编程高手都是从不断的失败和尝试中走出来的,所以对于一个刚入门的新手来说,任务就是不断的去编程,发现自身存在的缺陷,以及更熟练的掌握各种数据接口的调试和数据调用的应用。
3、好学,不耻下问。
成功都是建立在无数次尝试的基础上的,同时也需要利用前辈们已经得出的一些规律,尽量的少走弯路。
4、保持良好的心态。
编程每天对着的都是一些枯燥的单词以及数据,所以保持一个良好的心态是至关重要的,只有拥有一个良好的心态,才是端正自己学习和勤奋的根本。
5、善于从生活中发现需求。
每一个程序都是为了满足网名的一种需求,所以发现网名的的需求,并把这种需求利用程序解决,可以极大的促进自己的职业发展。
6、扩大自己的视野。
编程的同时,我们也要紧跟时代的步伐,学习更多的前进的经验以及技术,更好的为自己所用。
‘贰’ 程序员如何写学习笔记
呵呵,基本就三个要点。
1.问题描述(应用场景)
2.代码
3.总结
‘叁’ 程序员对学习过的知识要怎么复习
最近一个月,我在准备面试。以前工作的时候忙,没来得及追根究底,趁这次面试的机会好好的研究了java底层原理,感觉很有成就感。忙了一个月,有些学习上的心得,记录一下:1、分解知识再复杂的知识也是由一个个单一的知识点组成,分解它们,逐一攻克。比如说jvm虚拟机,可以分为公享区域(堆、元空间)和私有区域(栈、程序计数器、本地方法区),栈里面又有很多栈帧,栈帧又可以分为局部变量表,操作数栈等等。2、用思维导图做好存档思维导图就好像一个个房间,A房间将JVM,B房间讲gc,假设你学了jvm相关的内容,就把这些知识存档到jvm那个房间。3、不求甚解作为一个要通过技术改变世界的码农,怎么允许自己不求甚解呢?不是不求甚解,而是暂时的不求甚解,因为有些底层原理,我们很难一下子弄明白,比如spring源码,那怎么办?今天看一遍,不是很懂;明天再看一遍,懂一点了;后天再看一遍,恍然大悟,这是一个循序渐进的过程。4、努力回忆我趁每天早上跑步的半小时,努力回忆学过的知识,因为已经做过思维导图了,所以回忆相对比较轻松。此外还有晚上睡觉时,也是回忆知识的绝好时间,以至于我常常失眠到一两点。一旦发现某些知识回忆不起来,立马打开电脑复习,这种经过努力回忆的知识点,记得更牢,理解更深刻。5、努力实践无论你怎么努力,总有一些你不知道的知识点,如果你觉得准备得差不多了,那赶紧去面试。我之前把面试看成被面试官虐的过程,被面试官问得哑口无言,因此心惊胆战,但昨天一个电话面试,让我喜欢上了面试,因为我把面试当成朋友间的技术聊天,相互学习而已,即便有一些问题没答上来。我很庆幸,面试官启发了我。挂完电话之后,赶紧补上不会的知识。
作者:把大象装进冰箱
链接:https://www.jianshu.com/p/bfbfac6bafb5
来源:简书
简书着作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。
最近一个月,我在准备面试。以前工作的时候忙,没来得及追根究底,趁这次面试的机会好好的研究了java底层原理,感觉很有成就感。忙了一个月,有些学习上的心得,记录一下:
1、分解知识
再复杂的知识也是由一个个单一的知识点组成,分解它们,逐一攻克。比如说jvm虚拟机,可以分为共享区域(堆、元空间)和私有区域(栈、程序计数器、本地方法区),栈里面又有很多栈帧,栈帧又可以分为局部变量表,操作数栈等等。
2、用思维导图做好存档
思维导图就好像一个个房间,A房间将JVM,B房间讲gc,假设你学了jvm相关的内容,就把这些知识存档到jvm那个房间。
3、不求甚解
作为一个要通过技术改变世界的码农,怎么允许自己不求甚解呢?
不是不求甚解,而是暂时的不求甚解,因为有些底层原理,我们很难一下子弄明白,比如spring源码,那怎么办?今天看一遍,不是很懂;明天再看一遍,懂一点了;后天再看一遍,恍然大悟,这是一个循序渐进的过程。
4、努力回忆
我趁每天早上跑步的半小时,努力回忆学过的知识,因为已经做过思维导图了,所以回忆相对比较轻松。此外还有晚上睡觉时,也是回忆知识的绝好时间,以至于我常常失眠到一两点。一旦发现某些知识回忆不起来,立马打开电脑复习,这种经过努力回忆的知识点,记得更牢,理解更深刻。
5、努力实践
无论你怎么努力,总有一些你不知道的知识点,如果你觉得准备得差不多了,那赶紧去面试。我之前把面试看成被面试官虐的过程,被面试官问得哑口无言,因此心惊胆战,但昨天一个电话面试,让我喜欢上了面试,因为我把面试当成朋友间的技术聊天,相互学习而已,即便有一些问题没答上来。我很庆幸,面试官启发了我。挂完电话之后,赶紧补上不会的知识。
‘肆’ 程序员学习时做笔记吗怎样做笔记
我一般用Leanote记笔记, 适合程序员, 因为支持代码高亮.
‘伍’ 程序员应该怎么学习
1、选定方向
编程的世界是多元纷繁的,大的方向就分前端开发、后端开发、移动开发、云计算、数据处理、智能硬件、物联网、虚拟现实等等,光编程语言都几十种。如果没有做过功课,贸然进入只会分分钟懵逼。所以最好是根据自己的兴趣爱好再结合市场前景,先选定一个方向,再选择一门语言,然后头也不回的深深扎进去。
2、优化学习方式
做好笔记,记录经验,我们大多数人并没有过目不忘的神技,很多时候我们学了也不一定马上掌握,需要过后花时间慢慢领悟,而且还有忘掉的风险,所以对于重要的知识点都要做好笔记。
3、多看官方文档,外文资料
互联网是一个更新迭代很快的行业,所有编程语言都会不断的更新新功能和修复旧Bug,网上查的资料很有可能是旧的解决方案,现在已经不适用了。所以最好最快的方法就是查看官方文档。
4、动手做项目
我们学习编程的最终目的就是用所学的做出具有一定功能的项目,而做项目又是最好的学习和巩固知识的方式。如果前期能力不足就先做一些简单的功能模块,一步一步慢慢来,不要一开始就要实现各种酷炫炸天功能,遇到不会的就在网上查, 现在互联网这么发达,获取资源也及其方便。
自学过程中的一些注意事项
1、要善于构建大的知识框架体系,不要执着于细枝末节的知识点。中国的应试教育培养出来的人都喜欢啃细节,对于自学来讲这是大忌,比如在遇到一个函数的时候,非要把这个函数的参数,返回值都弄得清清楚楚才肯罢休。
2、先学重要的知识点,用不到的可以暂时放一放,因为你时间有限,遇到比较难的知识点,如果不是特别重要的,就跳过去,当你哪天用到的时候再来好好的研究,带着问题去学习,你会发现学习难的知识点也没有那么痛苦。
3、要善于查资料,互联网就是最好的老师,遇到问题先网上查,至少能够解决你98%的问题,因为你遇到的问题别人肯定也会遇到,除非你已经到了高处不胜寒的境界。
‘陆’ 程序员学习时做笔记吗怎样做笔记
程序员推荐使用Leanote, 它专为程序员定制的
Leanote云笔记的功能特点:
有两款编辑器, 富文本(支持代码高亮!!!)和Markdown
云同步: web端, 桌面端, 手机端, 全覆盖与云同步
桌面端支持三大平台, 连Linux都支持
集成博客功能, 一键将笔记公开为博客, 博客主题可定制
....还有很多特性
开源
‘柒’ 程序员怎么能牢记学习过的东西
1、要明白你能做什么,而不是记住怎么做
其实,代码可以构建的功能有无数种可能性!你可以设想通过代码构建任何内容,只有你想不到的,没有构建不了的。学习一种新语言是一件非常令人激动的事情。
查看问题以及代码示例,并通过这些示例学习如何利用这种语言以及/新概念完成工作,这都非常重要,但我们无法记住所有的信息,不要做无谓的尝试!你可以在今后需要实现的时候,再反过来查看,刚开始的时候,你只需要记住这种概念可以实现什么样的功能。
在我深入研究React.js时,这种方式给予了我的学业很大帮助。实现的可能性太多了,你有无数种方式传递props、创建新state、组合组件——实在太多了!就像一个大谜团!我了解到React可以实现非常多的功能,虽然我无法确切告诉你该如何做,但我知道存在这种可能性,这很重要。
2、在需要时寻找所需的代码
就像学说一门新语言,你知道自己想说什么,但你不知道该怎么说。编程语言也是如此!
在我刚开始学习编程时,人们称Google为“终极工具”。那时我就在想:我使用Google已经很多年了……我错过了什么吗?
后来才发现:重要的不是搜索内容,而是搜索的方式。无论你想寻找什么答案,网上都有,就看你怎样才能找到了!
在用外语与其他人交谈,或用一门新语言编程时,你可以通过Google找到如何表达。你不必记住括号放在何处,或者这里是逗号还是分号。应该使用圆括号还是大括号这种问题很容易出错,而且也很容易解决!只需快速搜索,两秒钟就能找到答案。
但是,我有几次因为未能写出完美的语法而感到内疚。有语法问题那就有呗!重要的是你知道自己要做什么,然后只需要记住该如何做即可!
3、从何处下手?
学习一门新的编程语言必然会令人不知所措,还会引起混乱。当有人说:“放手去做就好了!”时,我会觉得很迷茫,我该从何处下手呢?最终我发现:你永远也无法为需要构建的功能做好准备,你唯一能做的就是走一步看一步,先动起来。
如果说每次没有遇到任何问题、不需要搜索任何技术、不需要寻求别人的帮助、也不必返工就能成功构建一个项目,我就可以拿到一美元的话,那么我告诉你……到目前为止我一美元也没拿到!犯错是学习过程中的一部分。
犯错是学习、发展和提高程序员技术力的一部分。而学习故障排除和调试代码则更重要,而不仅仅听别人说:“我也遇到过这个问题,你所需要做的就是……”。
我强烈鼓励你尝试自己解决问题。努力奋斗。不要害怕搞乱或破坏你的代码。必要的时候,可以重新构建整个项目。在学习新知识(例如编程)时,一遍遍重复才能学到真技术。一遍又一遍,直到你全部掌握为止。
4、如何实现呢?
找到你想要构建的东西,然后开始动手!不要犹豫不决。反复尝试和失败。当你不确定想要完成的功能时,请花点时间研究问题。分解成块。弄清楚如何解决每个块。
然后,再想法把所有块聚拢到一起。如果你忘记了如何编写for循环,或者忘记了高阶函数会返回什么,那也无需担心。你可以参阅文档或指南,然后再继续。
有时这是一个缓慢的过程,但非常值得。最终,你会越来越有自信,而且有很多想要实现的新想法。
你会记住如何实现吗?不会。
但是,你可以参考过往的项目, 在Google上寻找答案,或者阅读论坛。答案都是现成的,你需要做的只不过是找到答案而已。
‘捌’ 请问下程序员要学些什么 程序员又有哪些分类
这个就多了去了,你可以先从招聘网站之类的地方看看公司的职位要求,就知道胜任工作所需的技术,也可以看看有哪些不同的方面。这样就有目标了。
至于学习资料网上很多。
如果你着急找工作,学点网页前端的技术,这玩意儿入门门槛低,学习周期短。其他的要求的不是一点两点的技术,而是很多。
‘玖’ 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、阅读优秀程序员的代码,是一种享受,你很少遇到思维的阻力,你可以尽情的享受简单之美。
‘拾’ 作为一名程序员,有必要写一个独立博客吗
其实建议的话,时间充足的话可以写个博客,记录自己的学习工作历程,自己的成长过程,自己的技术发展过程,也算是分享的过程。