设为首页 收藏本站
开启辅助访问 快捷导航
菜单
猿人部落 主页 资讯 查看内容

学习编程基础知识,进阶成为更优秀的程序员

2019-7-26 18:10 发布者: 小心滴 评论 0 查看 979
“脚本小子”常常从某些网站上复制脚本代码,然后到处粘贴,却并不明白此中的方法与原理 ​​当你看到编程语言编进课

“脚本小子”常常从某些网站上复制脚本代码,然后到处粘贴,却并不明白此中的方法与原理
​​当你看到编程语言编进课本的时间,看到一个文科生也在编写Python步调举行数据分析的时间,你就会发现,这是一个万物皆互联网的期间,也是一个全民编程的期间。而在这个全民编程的期间中怎样有效提升本身,让本身在猛烈的竞争情况中脱颖而出,我想这是各人都在思索的题目。

平凡步调员VS精良步调员

盘算机安全行业有一个著名的词叫做“脚本小子”,指的是只会使用一些别人的工具扫描一些别人已知的弊端的“黑客”,“脚本小子”常常从某些网站上复制脚本代码,然后到处粘贴,却并不明白此中的方法与原理,因而“脚本小子”通常形容一些底子不踏实的入门黑客,“脚本小子”和“黑客”是盘算机安全范畴相去甚远的两类人群,安全范畴尚已如许,而更为广泛的软件开发范畴亦是云云。一个开发者的底子踏实与否,在和他互助的时间就能看得出来。

而关于平凡步调员和精良步调员,最大的区别就在于此,底子不踏实的步调员,其技能的天花板是很低的,当到达肯定水平之后,通常反面的发展,都只会原地踏步,倘佯不前,而提升往更深的范畴,盘算机的底层底子知识,是必不可少的。

常常有些同砚有如许的疑问,我是学习前端的、我是做客户端的又大概是我是写Java的等等,如许有须要学习编程底子知识吗?感觉这应该是很多同砚都有过的思索,“我是专长于某种语言的,应不应该学习更加底层的知识?”我以为只要从事盘算机编程的同砚都应该增补大概学习一些盘算机的底子知识,精良的步调员不应该把本身范围于某种语言,而是应该放眼去看整个范畴。当某种语言的使用到达肯定阶段之后都会寻求更高条理的阶段去发展,那通常意味着会更靠近底层一些。

举个例子:当你使用某种语言,你是否相识这种语言对对象内存的管理方法、是否相识语言的线程、进程和锁同步等机制呢?而这些内容都可以在使用体系中补全,当相识了使用体系之后,学习新的语言时明白这些内容只不外是对知识的迁移和明白,原理无需重复学习。 固然,如许的例子还能找到很多,关于盘算机网络、关于盘算机构成原理等等。因此只要往更深条理去发展的话,就应该增补干系的底层原理,这些通用的底子知识,对你日后学习其他知识会有很好的资助,也是你“打怪”提升成为更加精良的本身的必由之路。

工作中的底子知识

互联网大厂,不管是“行业老大哥”百度、腾讯、阿里还是“行业新星”美团、滴滴、拼多多、头条等等,在人才雇用的时间总更青睐于底子踏实的人,一方面是大部分高校结业出来的同砚项目履历都比力少,观察底子知识可以或许轻易筛选符合的人选,而另一个方面则通常是底子踏实的人担当本领更强,可以或许更快学习新的知识,更可以或许满意企业的需求。

如果把时间线拉长到五年以致十年去看,去观察一些履历丰富的大厂从业者,你会发现那些底子踏实的开发者总是可以或许在新的技能或题目面前更轻易的捉住重点,比如学习Go语言,当底子单薄的人还在纠结语法的时间,他们已经在调研goroutine和channel了,又比如在调研框架,当部分人还在看API的使用文档的时间,那些底子踏实的开发者已经在相识架构了,踏实的底子加上日积月累的效应,所能带来的差距是很大的,因此互联网大厂都更青睐于底子踏实的人才。

信任大部分同砚在笔试大概口试过程中都有被观察底子知识的履历,就比如编程语言中关键字volatile的作用就常常作为口试官观察应聘者底子知识的标题,对于一些涉及Java的口试,信任也有被问到volatile对比synchronized的区别等等的题目,咋一看还以为是考语言层面的知识。实在volatile这个关键字固然从外貌来说只是一些编程语言中用于声明变量的关键字,不少同砚也能说出关于此中的一二,但实在这个关键字的背后所涉及的原理就是《盘算机构成原理》中的存储器条理结构操持,相识存储器的条理结构的同砚显着可以或许比不相识的要明白得更深并复兴得更好。

对于工作中所涉及的关于盘算机底子知识的场景就更多了,IO读写思量壅闭,多线程并发思量同步,服务摆设思量内存占用,网络传输思量带宽服从等等,不可胜数;而对于工作中常见的疑难杂症、摸不着头脑的Bug,底子踏实的人通常更轻易道破此中玄机,因而底子踏实的同砚在工作中通常可以或许更胜任有难度的工作,得到更大的发展。

学习《编程必备底子知识》,戳这里

这里关于工作中的底子知识,我也想在分享一个真实的履历,在这里履历内里,各人都可以或许看到底子知识的紧张性。

几年前,我们负责一个与底层盘算资源(简朴来说底层盘算资源就是CPU、GPU和FPGA之类的资源)干系的SDK项目。硬件侧的盘算资源是封装为16个“盘算单位”向软件层提供服务的。在操持中,为了维护盘算使命状态的划一性,必要在软件层和硬件层都维护下发使命的状态。但是要在软件层和硬件层都维护使命的状态,难点就在于两头使命状态的划一性(由于不管是软件层还是硬件层,都有很多非常的情况会影响这个划一性)。

其时第一个方案是实行去掉软件层关于状态的缓存,而在软件必要获取状态时都通过接口查询硬件中的状态;但此中通讯的开销非常昂贵,而且对于毫秒级别的使命会导致通讯频率非常的高,因而整个方案由于状态划一而带来的开销黑白常大的,以是终极这个方案被否掉了。

之后的方案讨论了好久,过程就不多说了。终极的方案是参考了TCP协议的可靠性来操持整个状态同步的,为什么参考了TCP协议呢?TCP协议可以维护客户端和服务端之间通讯报文的可靠性,因而在我们操持的时间,就把软件层类比为客户端,硬件层类比为服务端,16个“盘算单位”类比为TCP协议中的“滑动窗口”,在下发的使命和返回的结果中携带“ACK”信息,以此来实现了软件和硬件的使命状态划一性,大大低落了为了状态同步而带来的通讯开销,而且TCP协议也是历经磨练的,可靠性可以包管,参考TCP协议实现远比本身重新造轮子的资本要低。在这个履历内里,盘算机底层的底子知识所发挥的作用是很大的,如果没有鉴戒到这些底子知识中的操持,这个项目大概就大为延期,以致直接“短命”了。

固然对于这种难度级别的开发,大概在各人的学习、工作生存中并不多见,而且信任大多数从事开发的同砚都是繁忙于业务逻辑的开发,对底子知识的感知甚少。而有些知识就是如许,寻常感觉不到他的存在,可真到关键的时间,才恨“书到用时方恨少”。以是要想在浩繁的开发者和猛烈的竞争当中脱颖而出,要在未来的工作中独当一面,踏实的底子知识是必不可少的,是的,你大概很难找到拒绝学习底子知识的来由。

学习更多编程底子知识:盘算机构成原理+使用体系+盘算机网络在这里插入图片形貌



路过

雷人

握手

鲜花

鸡蛋
收藏 邀请
上一篇:云计算是什么?新手学习云计算的学习路线下一篇:前端大作业(期末复习)

相关阅读

一周热门

头条攻略!

日排行榜

相关分类