怎么提高php内功,有什么平民一点不要氪金的手游推荐?
当然有啦,小妹为你推荐几款!
好玩的手游并不少,只不过大多数的都需要氪金才能玩的舒服,这样对平民玩家来说并不是很友好,毕竟玩个游戏谁也不想只当陪衬而已。其实不氪金又耐玩的好手游也不是没有,只是看能不能找到而已
《魔灵召唤》是一款卡牌养成类的MMORPG手游,由韩国Com2uS公司研发推广。已经上线多年依然保持着9.5分的高评分,可见游戏的质量非常的不错。
游戏的玩法和网易的阴阳师非常相似,只不过整体画面比较偏向欧美风格,可以说阴阳师很多元素都借鉴了本作。游戏国内还暂无代理,不过可以直连去玩国际服,游戏无需氪金,但是比较肝,是一款非常耐玩的精品之作。
2:元气骑士《元气骑士》是一款2D像素风的暗黑类手游,在国内玩家的口碑非常高。游戏的玩法多样,装备系统非常庞大,别看画面比较复古,但是好玩的元素非常多。
游戏并不氪金,最贵的皮肤也才15块钱,而且买不买都不影响游戏的体验,可以说运营商是非常的良心了。 这款手游非常耐玩,很多人都已经玩了多年依然舍不得删除。
3:圣斗士星矢ol《圣斗士星矢ol》是通过正版授权的一款回合制卡牌养成手游,也是由天美独立研发的动漫IP改编的精良作品。游戏无论是建模还是打斗效果都非常华丽,可以说是有着满满的情怀。
游戏并不氪金,低氪和白嫖玩家也可以玩的很好,这也是腾讯少有的评分非常高的游戏,目前游戏已经运营多年依然人气火爆,非常值得一玩。
4:召唤与合成《召唤与合成》是一款比较偏向休闲的轻度手游,三消+RPG的玩法比较创新,虽然画面并不是非常的华丽,但是玩法还是比较吸引人的。游戏有着大量的关卡可以去挑战,并且附加策略、解谜探索等多种元素在其中,别看游戏小众还比较“朴素”,玩起来的话是相当的上瘾。
5:重装战姬《重装战姬》上线并不是太长时间,二次元机甲娘化的搭配让玩家眼前一亮。横版动作类的模式也比大多数千篇一律的回合制手游更有诚意。游戏并不是需要氪金,如果佛系玩下去的话,一天只需上线半个小时就差不多了。
不过如果想玩好,还是需要肝的。不氪金是不氪金,想变强就需要花费时间在游戏中。这款手游也同样是比较重度的手游,一些稀有材料需要玩家反复的刷多次副本。但是即便这样,本作的评分依然很高,是一款非常耐玩的手游。
以上五款都是非常好玩的良心手游,当然也并不需要氪金就可以玩的很好,在质量上也是国内大多数手游中出类拔萃的。
如果闹游戏荒,又不想花太多钱在游戏上,可以挑选一款试玩一下,保证不会后悔。
喜欢的记得点赞关注小妹哟!么么哒!
前端常用的框架有哪些?
如今的前端已经不再像以前一样就是简单的写写页面和调调样式而已,现在的前端越来越复杂,知识点越来越丰富。
要做WEB前端,就需要知道前端到底是什么,需要学习那些知识;前端至少要懂的三个部分:HTML,CSS,JavaScript(简称JS),那首先先明确这三个概念:
HTML负责结构,网页想要表达的内容由html书写。
CSS负责样式,网页的美与丑由它来控制
JS负责交互,用户和网页产生的互动由它来控制。
web前端发展至今,演变出了无数的库和框架;说到库第一时间想到的是不是jquery?在小编刚接触库的时候也是从jQuery开始的;今天我们就来说说前端发展到现在都有哪些好用的库框架;
1.Bootstrap中文网
Bootstrap,让你的页面更简洁、直观、强悍、移动设备优先的前端开发框架,让web开发更迅速、更简单。它还提供了更优雅的HTML和CSS规范,它即是由动态CSS语言Less写成。有着丰富的网格布局系统以及丰富的可重用组件,还有强大的支持十几的JavaScript、jQuery插件以及组件定制等。
Bootstrap中文网地址:http://www.bootcss.com/
2. Layui
layer是一款口碑极佳的web弹层组件,是一款采用自身模块规范编写的前端 UI 框架,遵循原生 HTML/CSS/JS 的书写与组织形式,门槛极低,拿来即用。layui 首个版本发布于2016年秋,她区别于那些基于 MVVM 底层的 UI 框架,从核心代码到 API 的每一处细节都经过精心雕琢,非常适合界面的快速开发。
Layui官网地址:https://www.layui.com/
3.ElementUI
Element-Ul是饿了么前端团队推出的一款基于Vue.js 2.0 的桌面端UI框架,手机端有对应框架是Mint UI 。适合于Vue的UI框架;
官网地址:http://element-cn.eleme.io/#/zh-CN
4.Mint UI
Mint UI 是 由饿了么前端团队推出的 一个基于 Vue.js 的移动端组件库,Mint UI 包含丰富的 CSS 和 JS 组件,能够满足日常的移动端开发需要。通过它,可以快速构建出风格统一的页面,提升开发效率。
官网地址:http://mint-ui.github.io/
5.angular
AngularJS诞生于2009年,由Misko Hevery 等人创建,后为Google所收购。是一款优秀的前端JS框架,已经被用于Google的多款产品当中。AngularJS有着诸多特性,最为核心的是MVW(Model-View-Whatever)、模块化、自动化双向数据绑定、语义化标签、依赖注入等等。
官网地址:http://www.angularjs.net.cn/
6.React
React 可以非常轻松地创建用户交互界面。为你应用的每一个状态设计简洁的视图,在数据改变时 React 也可以高效地更新渲染界面。React 起源于 Facebook 的内部项目,因为该公司对市场上所有 JavaScript MVC 框架,都不满意,就决定自己写一套,用来架设Instagram 的网站。做出来以后,发现这套东西很好用,就在2013年5月开源了。
官网地址:http://react-china.org/
7.vue.js
近几年最火的前端框架当属Vue.js了,Vue.js是一个构建数据驱动的 web 界面的渐进式框架。Vue.js 的目标是通过尽可能简单的 API 实现响应的数据绑定和组合的视图组件。很多使用过vue的程序员这样评价它,“vue.js兼具angular.js和react.js的优点,并剔除了它们的缺点”。授予了这么高的评价的vue.js,也是开源世界华人的骄傲,因为它的作者是位中国人--尤雨溪
该如何学习大数据知识?
我们身处一个“技术爆炸”和“共享、开源”的时代,先进技术的更新迭代速率超过了历史上任何一个时期,而且这些技术也不再闭塞,人人都可以接触并学习。终身学习已经是我们每个人不得不面对的问题,这一点在大数据/人工智能领域体现的尤为明显:层出不穷的新技术,一方面为我们带来了便利,但同时也使我们面临难以高效学习和选择的窘境。因此,在这样的时代背景下学习大数据知识,需要有相适应的逻辑和方法。
本文试图帮助各位读者用好各类“共享、开源”的学习工具以及学习渠道,躲过各类新手容易误入的“深坑”,以最小时间成本和经济成本,优质地完成目标技术的学习和掌握。
本文首先分析了时代背景,继而对目前大数据领域的人才梯队进行了划分,最后给出了大数据/人工智能人才从菜鸟到高手的进阶指南。
一、背景铺垫
“技术爆炸”以及“共享开源”是这个时代最有特色的标签,笔者认为二者是互为因果且紧密联系的,首先在“技术爆炸”的时代,对于走在技术发展最前沿的研究团队来说,“技术变现”的最好手段就是“共享开源”。反观互联网、移动互联发展成熟之前,信息是十分闭塞的,某项技术创新一旦出现就需要第一时间注册专利,技术需要靠政府来保护,而技术变现的唯一途径就是出卖专利或者组织生产形成产品。
现如今互联网及移动互联已经发展的十分成熟,新的信息会以极低的成本在极短的时间内传遍世界的每个角落,所以处在技术前沿的研究团队仅需要在第一时间将自己的工作成果上传到“arxiv”或者“github”之类中立的共享、开源网站,便会立即得到全球舆论的共同保护,这样的力度要远远强于某个国家的专利保护。
随后,只要新技术确有应用价值或者学术价值,那么各类资本巨头、科技大鳄以及相关的各类组织便会排着队上门送出丰厚的offer,对于前沿团队来说,技术变现的时间点要远远早于技术产品化的时间点。
其次,因为“技术爆炸”总有新的技术等待着前沿团队去研究发现,所以前沿团队保持领先的最好方法不是捂着现有成果不放,而是尽快“共享开源”实现变现,然后投入到新的研究工作中。
最后,“共享开源”也在很大程度上促进了“技术爆炸”,无论任何技术、科技的长足发展都需要一个庞大人才体系来支撑,反观历史上的各个时期,分享知识、培养人才的渠道主要是“学校”,这一渠道不但形式单一而且往往具备相当的门槛,会将相当一部分“有志青年”挡在门外。
而在如今这个时代,知识传播最快速的渠道是互联网,由于“共享开源”,世界上最优质的教育资源以及最先进的学术、技术理念忽然间没有了任何门槛,面向全部个体无差别开放,结果就是只要某一技术、科技领域有了很大的突破并具备广阔的应用前景(如大数据、人工智能),那么相应的人才梯队会在短时间内自动补齐跟上。
站在大数据学术前沿的研究团队只需要一往无前地开拓疆域,其后的人才梯队随即会自动开展“新技术论证”及“技术产品化”等“保障”工作,保障这一技术领域及相关行业的健康发展,来进一步促进资源向金字塔尖的前沿团队汇聚,支撑其开拓工作。
我们将上文提到的人才梯队划分为:菜鸟筑基、初入江湖、登堂入室以及华山论剑四个等级:
菜鸟筑基:本阶段的人才以大数据基础理论的学习为主,尚不能胜任真实的项目或者工作;
初入江湖:本阶段的人才已经具备了初步的大数据实践的能力,建议通过实践(做项目、打比赛等)来更好地带动学习;
登堂入室:本阶段的人才需具备大数据科研论文的调研、阅读和理解能力,能够成功地将论文中的算法进行复现;
华山论剑:本阶段的人才能够独立地开展大数据新技术的研究工作,具有发表原创性论文的能力。
下文将针对处于不同阶段的大数据人才,给出不同的修炼、升级建议。
二、菜鸟筑基
1. 最好的资源往往是公开的
读过背景铺垫后相信已经不需笔者再解释为什么最好的资源往往是公开的,在此直接给出一些获取高质量资源的渠道。首先推荐国外的三个网站,分别是“Coursera”、“Arxiv”以及“Github”。
Coursera是全球顶尖的在线学习网站,由业内极具学术造诣及分享精神的大咖创办。Coursera上的课程相对比较基础,应该是“小白”起飞最好的平台,在这里推荐吴恩达(Andrew Ng)开设的“机器学习”以及“深度学习”。对于国内学生来说最大的问题可能就是英语了,在这里需要明确一点,如果各位想要成为真正的高手,那么英语是永远绕不过去的坎,业内最新、最好的资料无一例外都是英文,即便是来自国内的顶尖高手在发论文时都不会选择用中文。
其实对于绝大多数人,英语并不应该被当作一门“学科”来学习,而应该被当作“工具”来用。具体的做法也没有捷径,就是看到不懂的单词立即查,单词不用刻意去记忆,下次遇到不会就再查一次,一切以快速弄懂句子含义为目标。
Arxiv以及Github是各位读者未来会特别常用的两个网站/工具,Arxiv上有最新最全的共享论文,论文中会对各类算法进行详尽的阐释,Github上有最新最好的开源代码,这些代码往往是对某种算法的实现,具体的使用方法网上有许多教程,在此不做展开。
读者可以简单的理解为Arxiv是修炼内功的地方,而Github是修炼外功的地方。只练内功不练外功是无法解决实际问题的,但只练外功不练内功又往往毫无威力,一定要内外兼修。最后再向大家介绍一个神奇的网站名叫“gitxiv”,会帮助各位找到论文与代码的对应关系。
2. 不要看书、不要看书、不要看书
一门学科怎么入门呢?菜鸟在面对这个问题时,最容易踩入的“深坑”就是找一本权威的书来从头学起,一旦踏入此坑,轻则荒废自己数周时间,重则对某一门学科彻底失望终生。首先好书本来就不多,往往可遇不可求。其次即便遇到好书,为了保证学术性,书中用语往往“严谨”但难懂,且会从学科的早期历史为读者打下“坚实基础”,讲到最近的技术手段时又戛然而止。最后,就算读者倾尽数月之功力,坚持读完了,笔者可以用血淋林的亲身实践告诉你,书中前半部分的内容一般人肯定会忘的。
当然也有特殊情况,如果各位已经确定了自己的研究方向,并且有高人/导师指点,给出了相应领域内必读好书的名录,这一类书还是值得一看的。不过在看的时候也要注意,不要纠结于某些细节问题,看不懂的地方可以先记下来,这类细节往往会在各位后面实践过程中的具体场景下恍然大悟。
正确的做法一句话就可以概括,好书是用来查的而不是用来啃的,什么时候来查呢?下文会逐步解答。
3. 找对好基友,连滚带爬往前走
现在已经不是一个单打独斗,凭着跌落断崖后找到一本秘籍闭关几年就能横扫天下的时代了,无论是像Hinton(推翻了BP算法的BP算法之父)这样的泰斗,还是像何凯明(发best paper像一般人发paper一样容易的神奇学霸)这样的新秀,都处在各自非常靠谱的团队中与小伙伴们共同探索。好基友不需要多,有一两个真正靠谱的就已经足够,至于队友的重要性后文会慢慢阐释。
菜鸟筑基这部分最后要给出的建议就是,千万不要在这个阶段停留太久,不要等“准备好了”再去着手实践,因为这里的“准备好了”往往包含菜鸟的不自信,不去进一步提升自己是永远准备不“好”的。一般情况下,想做“计算机视觉”或者“自然语言处理”等偏AI方向的同学在完成吴恩达的《深度学习》课程后,想做“数据挖掘”的同学在完成吴恩达的《机器学习》课程后,就可以选择相应的实践项目准备进入下一阶段了。
那么我们该选择什么实践手段呢?最佳的情况是有大神带队做真实项目,但是这样的机会往往可遇而不可求,在此不展开讨论。普罗大众型的办法是参加一个大数据比赛项目,现在国内的“阿里天池”以及国外的“Kaggle”都是开放式的大数据比赛平台,平台上会有各种组织发布的各类真实项目供大家实践、比赛。读到这里各位心里可能还存有很大的疑问:“就算学会了基本课程,在没有人带的情况下能上手实践吗?”,下文将陆续回答如何“连滚带爬”的进行实践。
三、初入江湖
1. 找到一个最高的baseline
这里的“baseline”可以理解为前人已经做出成果,当自己恰好需要去做相同工作时的参照。对于上文提到的情况,如果有大神带队进行实践的话,那么带队大神此前的实践经验就成为了全体小队成员的“baseline”。那对于没有“大神”资源的广大读者是否有更通用的解决办法呢?答案是肯定的。如果读者目前对于一类问题无从下手,例如刚刚学完“深度学习”的课程,但是不知道如何去做“自然语言处理”类的项目,最好的办法是利用好国内的“万方”以及“知网”这样的论文查询平台,去查询相关领域国内普通高校的学位论文,这样的论文绝大部分都是中文并且会在论文中介绍大量的基础背景知识,正好满足了我们的需求。
如果是对某一技术方的特定知识点不明所以,例如在做“自然语言处理”方向的项目,但却不太了解“LSTM”,则可以利用好国内的诸如“知乎”、“简书”以及“CSDN”这类的知识分享网站,只要不是太新的理论,都可以找到相应的博文或者解答。使用上述两类渠道的共同技巧是,多搜几篇文章对比着看。同一个概念或者技术,一篇文章很难全面描述清楚,并且由于文章作者不同,解释问题的出发点也不尽相同,所以如果各位遇到看不懂某篇文章的情况时,不用急躁,接着看下一篇文章就好。另外,前文提到的“好书”在这里就可以用来查了,读者会发现原来想记都记不住的知识点,只要“查”完并且“用”过,那么一般想忘都忘不掉。
这里对baseline所谓“高”的定义是,越接近学术前沿,实践效果越好,就认为越“高”。一般情况下,可参照的成果越“高”,中文文献就越少。
文章写到这里不知是否回答了上一章节提出的疑问,上一章节提到的“连滚带爬”指的就是我们在选定某一实践方向后,根据实践的最终成果再回过头来对我们的相关知识进行“查漏补缺”的过程。这样的学习过程,目标性更强,参与者完全有针对性的去学习,学到的东西可以立即实践,从而避免“学过就忘”的尴尬。
2. 合理追求quick win
笔者曾经仔细地研究过为什么女生逛街会“不知疲倦”,得到的答案是,女生每逛一家店铺,看看店铺中的鞋子/衣服/包包就能得到一定的兴奋点,在得到一个兴奋点后就想着直奔下一个兴奋点。类比到我们做项目/打比赛的过程中,我们需要为自己的团队设置这样的“兴奋点”,让团队成员都能够享受到“quick win”的快感,来支持大家继续推进。
而取得“quick win”的关键是要将手中的工作/任务合理划分成若干“稍微努力一下就能达到”的子任务,这中间的细节过于复杂,在此就不展开讨论。一个teamleader需要做的最重要的事,就是帮助团队合理划分任务而不断取得“quick win”,一个人只要具备这样的能力,无论技术高低都能够团结一批志同道合的小伙伴。
3. 你最大的动力往往来自DDL(Deadline)
有那么一句成功学的佳句是“每天叫醒我的不是闹钟而是梦想”,这句话听起来很励志,但对于90%的人来说就是胡扯,我们回首望去发现每天叫醒我们的往往是“上班迟到后被扣的工资”或者是“晚到实验室后老板的杀气”,这就是现实,听起来很残酷但是我们完全可以利用好它。具体到我们的升级以及项目推进中,能让我们不断向前的最大动力往往是“在DDL前无法完成任务后小伙伴们的鄙视”以及“完成quick win后带来的成就感”。
做好这一点除了上一小节提到的要合理划分任务之外,最重要的就是有一个靠谱的teamleader不断的进行推进(push),每到既定节点后雷打不动的推进。最后要啰嗦一句,根据马斯洛需求层次理论,梦想应该属于模型顶层的“自我实现需求”,如果一个人可以被“梦想”叫醒,那么这个人的其他需求应该已经被很好的满足了,所以我在这里真诚的祝福大家终有一天可以在早晨被自己的“梦想”叫醒。
四、登堂入室及华山论剑
如果有一天各位发现自己在工作实践中,需要不断地关注最前沿的论文,并且需要不断地尝试复现论文中的算法来用于实践,那么要恭喜各位已经跨入了大数据/人工智能领域高手的行列了。登堂入室与华山论剑两个阶段的区分不是特别明显,因为论文读得多了,总会有些自己的新想法,这些想法经过实验验证后就可以去发论文。反过来,即便你发表过前沿论文也还是需要继续跟进其他论文。
1. 朋友圈决定了你人生的高度
在这一小节的开始,笔者首先要端出一碗毒鸡汤,即便是在这个“开源、共享”的时代,学术/技术资源的分布还是极度不平均的,并且这样的不平均会越来越明显。究其原因有两个,第一个原因可以援引在清华17级研究生开学典礼上某校领导的一句话来阐释----“最有效果的研究手段就是与相当水平的同行当面交流”,翻译一下就是高手越多的地方就越容易产生高手,这会导致高端人才分布的越发不平均。
另外,做学术前沿研究的经济成本是很高的,国内某顶尖AI公司全球研发工作一个月的电费开销就能达到千万级别。即使是普通的AI项目,服务器、GPU的成本也会导致普通的研究人员根本无法找到充足的经费来支持自己的研究。
喝完毒鸡汤也要来一些正能量,虽然资源分布不平均了,但人才通道仍然是开放的,只不过门槛越来越高而已,我身边就有毕业四五年后,也能够一边工作一边复习考上清华研究生,最终接触到前沿科学研究的例子。数据派就是一个汇聚了清华顶尖大数据/人工智能资源的开放组织,有心的小伙伴可以点击“阅读原文”加入组织~(主编现在可以把刀放下了,这波广告打的笔者自己也有些猝不及防)
2. 选择永远比努力更重要
这个标题听起来又像是一碗“毒鸡汤”,但这就是血淋林的生活带给笔者的经验。笔者见过某个算法团队自己闷头搞了几个月研究毫无进展,经过大神点播后一个月内完工的情况。
下面举一个更戏剧性的例子,自然语言处理曾经在20世纪70年代左右有过界限分明的两个学派之间的激烈交锋,一拨是希望通过语法规则来做语音识别的“规则派”,另一拨是基于统计方法的“统计派”,这两拨从事相同领域研究的学者竟然分别召开自己的学术会议,即便出席同一大会竟然也要分场开小会。
到了20世纪90年代“统计派”的识别率已经达到了90%以上,而“规则派”仅有不到70%,胜负已分(吴军老师的《数学之美》一书中对这段历史进行了详尽有趣的阐述)。但试问如果有一名博士生在20世纪70年代将自己学术方向定为“规则派”,到了20世纪90年代的时候他该做何感想?
到了“登堂入室”这个阶段之后,做好选择显得尤为重要,这样的选择不仅仅限于学术方向,也涵盖例如“做学术”还是“做产业”等等更广义的范围。一个可以参考的经验是,如果人生的重大决策失误,基本要用五年来挽回,大家要考虑清楚自己有几个这样的五年。
3. 唯一的限制往往是自己的妥协
看看本小节的标题,读者可能会觉得本文这下要以“毒鸡汤”收尾了。但其实在这里“妥协”并不是一个贬义词,笔者认为它起码是个中性词。从某种意义上讲,每个人最终都会达到某种“妥协”,而不妥协就意味着背后存在与现状不匹配的野心或者欲望,什么时候野心和欲望跟现实匹配了,也就一定会“妥协”。这就是华山论剑的秘密,每个能站在顶峰的人都必定抱着某种超乎常人的野心或者欲望,当然这里的野心或者欲望是广义的,也同样指对于学术的追求。
最后,“毒鸡汤”不负众望的要出现了,根据笔者的观察,每个人的“妥协点”并不是自己设定的,一般情况下自己也无法影响,所以每个人最终要走到的高度往往是确定的。
但从笔者的角度看来,并不觉得站在华山之巅就一定是好的,真正的“好”是能够坦然接受自己的“妥协点”,并且能够在自己的“妥协点”安安心心、高高兴兴的工作和生活下去,这才是最具智慧的选择。
计算机类的学哪个技术比较好呢?
关于计算机的学习,首先希望你能够先打好基础,先学好基层编程语言。
不管你是如何选择了这门专业,我想告诉你的是这是一个很深的领域,没有热爱不如尽早转行。(以下介绍计算机学习路线及思路)
C语言
编程语言是编程的工具,计算机相关专业的学生必须具备足够的编程能力。当然,关于“最好语言”的争论从来没有休止过,这里要强调一下:语言的选择真的没那么重要,你现在学了Java,很有可能将来需要做python的工作,学习语言的过程最重要是语言的机制。要记住,在入门阶段不应过多的去考虑哪种语言更有前景。
对于初学者来说,以C语言入门自然是不错的,大多数大学也乐此不疲,当然其中不乏直接上手C++、Python的学校。对于C语言来说,不要求你学的多好,但一定要学的扎实,它决定了你以后学习任何一门语言的速度。
数据结构与算法
掌握了C语言之后,接下来就会接触到数据结构与算法,实际上初学者很难分清什么是数据结构、什么是算法。这是一门颇有难度又饶有趣味的专业课,对于注重就业的高校来说,这部分的知识并没有足够强大的师资力量去支撑,这也导致了老师讲的不够透彻,学生也不愿意花精力去学习。从就业角度来说,对于开发中小型的系统,基础的数据结构与算法是足够用的,但这并不适合大型项目的开发。不熟悉这一块内容的学生,基本在工作3-5年后都会遇到瓶颈。而像BAT这类的互联网大厂招聘应届生时是非常重视数据结构与算法的,因为他们需要懂得这些知识的人才去做大项目的一颗颗螺丝钉,而非全能的瑞士军刀。计算机专业的学生都会知道ACM,这是计算机领域的顶级程序设计竞赛,能够在比赛中得奖更是难上加难。一个优秀的ACMer需要付出常人2-3倍的努力才能有所成就,如果要入ACM的坑,一定要莫大的毅力才可以,中途放弃是不会有任何回报的。对于本科生来说,即使不以ACM为目标,这部分的内容,仍然是攻坚克难,需要反复琢磨的基础知识。
Linux
计算机专业的学生不能不会Linux,不管你的学校开不开这门课程,你都要学,而且要用得和Windows一样熟才行。很多初学者以为Linux很难,其实非也,既然是操作系统,Linux开发出来也是给用户用的,只不过专业人士用的多一点罢了。很多操作都是非常简单的,而且在学习Linux的过程中,你会逐渐拓展自己的视野,你会了解到如何挂载镜像,如何配置虚拟机,如何使用命令行(linux下的命令行可以在windows的powershell里使用,非常好用)。而且如果你要学习嵌入式开发,Linux更是必不可缺的要求。
面向对象语言
你的第二门语言可能是C++、JAVA、C#等等,这些语言都有一个共性:OOP(面向对象编程)。这和C语言的面向过程编程不一样,你不会再写一大堆混乱的函数来实现不同的功能,你要开始通过类与对象来做更好玩的事情。如果你的C语言基础打得非常好,再学任何一门语言你都会是轻松的。唯一困难的就是思想的转变,面向过程编程思想–>面向对象编程思想。到这个时候你就已经真正进了计算机专业的大门了,虽然这个时候你才大一下学期或者大二上学期。这个时期你一定要多学东西,当然第二门语言并不意味他将成为你的全部,我也推荐你去接触一下C++、Python。刚刚入门的小白需要迅速增加知识储备,越广泛越好,你了解的越多,你越能明白你自己以后想要的是什么。
数据库与SQL
毋庸置疑,数据库的基本操作都是要会的,无论你以后是做什么方向的工作,所有的工程都是要有后台数据库的。初学者最好使用Mysql + 可视化工具Navicat进行学习,当然学校有自己的要求就按学校的来。一般SQL的学习都是穿插在理论学习之中的,即使以后你不是专门要做数据库这方面的工作,SQL的大多数操作都是必须会的知识。
GitHub
大学课程里不会有一门课教授GitHub,这属于自学的内容。Github对于程序员的开发是非常有用的。GitHub除了可以当代码仓库,最出色的方面还是它的版本控制和协同开发,这对于开发者来说是非常有用的。GitHub的基本操作非常简单,命令行操作也就几个常用的命令,基本上1-2天都能学会,出现了不懂的地方继续充电。
web前端开发
HTML+CSS 近两年挺火热的一个方向,产生的原因在于前后端分离的趋势,前端的定义也不仅仅局限于切图、美工之类的工作,从基础的HTML+CSS到各种前端框架都是这个方向的学生要学习的。推荐直接学习HTML5+CSS3,它们是HTML+CSS的新标准,虽然有些浏览器(例如ie,前端开发者永远不可避免的浏览器)不兼容新的标准,但是随着时间的推移,新的标准必然会取代旧的标准,尤其是HTML的canvas标签要深入的学习,没有一个网页出来效果是单纯的文字。
JavsScript
前端三剑客除了HTML+CSS,当然还有JavaScript,初学者迷惑JavaScript与Java的关系,这里告诉你,它们的关系就和雷锋与雷峰塔,张三与张三丰的关系一样!!!一点关系没有。当然JavaScript也有新的标准那就是ECMAScript6(ES6),JavaScript本身并不是严格的面型对象编程的语言,但是新的标准能够更适应面型对象编程,能够提高开发者的工作效率,当然也是有部分浏览器不能实现完全支持ES6标准。当然学JS的同时要顺便把Jquery学了,它们大多数是相通的。
前端框架
学前端要比学后端更要掌握时代的趋势,不断学习新的事物,才能立足于前端。永远不要认为前端简单而学前端,任何一个深入学习过前端的人都会告诉你,前端的水比后端深多了。前端三大主流框架Vue、AngularJS、React,不推荐全都学习,每个公司都有自己的标准,能够有针对性的学习也是很好的。
web后端开发
后端开发有很多种形式,Java、Python、Go、PHP都能做。
Java全家桶
这里以Java为例,毕竟现在大学教育都主要以Java为主要课程,授课流程基本都是从Java SE 到Java Web,再到Java EE、Java ME。小白估计又懵了,这里说的Java SE就是我们平时说的Java,它的英文是Standard Edition,这也是后面所有java技术的基础,同样,如果你要做Java后台开发,Java SE的基础一定要打牢。而Java Web是Web后端的基础,Java Web工程师现在也是就业的热门岗位,是后端开发的重要内容。Jsp+Servlet+Javabean是Java Web的基本组成,这也是MVC的一种基本框架,它能帮助你做出一个简单的系统项目,但是不得不说的是,没有HTML+CSS的前端技术,做出来的东西是在是太丑了。致力于做Web后端的同学,前端的知识也要有所了解才行。而Java EE,它的英文是Enterprise Edition,它是面向企业级开发的一个语言平台,熟练掌握Java EE的各种特性是后端程序员的必修课。Java ME,英文名称Micro Edition,它是一种面向嵌入式的语言平台,学校开设课程的不多,除非是要专门学习嵌入式,不然不需要过深的研究。
操作系统与计算机网络
这两个课程是计算机专业的基础课程,java开发的一个主要特点就是多线程,而对于操作系统的整体认知都要来源于这门课程,你需要知道什么是并发运行,IO设备到底是如何管理的,计算机到底是如何运行的。Java的工程大多规模较大,需要应对高并发的一些情况,一个后端开发者应熟练的使用stream APi控制对象集合,掌握RxJava这种具有函数编程风格的库或者框架。在Java网络编程领域,哈诺德 (Elliotte Rusty Harold) 的那本《Java网络编程》是非常经典的书籍,非常有必要去踏实的学习这一部分的内容。网络开发的经典框架是Netty,它是一种异步的、事件驱动的网络应用框架,能够快速开发高性能的网络服务器和客户端。JVM的底层机制在很多情况下都有非常重要的作用,这时候你一定会接触到Vert.x,这里不需要过深的研究,只要掌握其核心组件就可以了。
后端框架
后端框架的基础就是MVC,也就是之前说的Java Web的三大组成,但是企业中通常会用更方便的SSH(Spring + strtus2 + Hibernate)或者SSM(Spring + SpringMVC + MyBatis),没有好坏之分,不同的公司也会用不同的标准,Java框架的发展虽然赶不上前端的速度,但也是不断变化的,自然是要不断学习。
Android与IOS开发
安卓原生开发
手机已经改变了人类的生活,各种各样的App层出不穷,而手机系统中80%以上都是Android系统,不到的手机系统是20%IOS,还有几乎可以忽略不计的其他系统。所以Android开发已经是现在App开发的主力军了,而Android开发一直以来都是基于Java语言的,直到这两年突然出来的黑马Kotlin。所有学习过Java的人都会了解过Kotlin,他们会惊叹Kotlin的友好,但是不得不说的是,Java还是现在的主流,Kotlin用在开发中还是有许多不稳定的情况,新技术的推广估计还要再等几年。要去熟悉Android的SDK,熟悉JNI机制,要不不断用各种项目练手,GitHub上很多不错的项目都可以fork下来自己学习。
IOS原生开发
国内IOS虽然受众不及安卓,但也是需要App的啊,现在的IOS开发基本上也有两种语言,Objective-C和Swift,其中OC的使用还是多一点,学习IOS开发一定要紧跟IOS系统的发展,去年9月份苹果公司推出了IOS的第11个版本,不要从很老的版本开始学。
游戏开发
很多学生喜欢打游戏,对于计算机专业的学生,想做游戏的也不少,许多学生想学但是不知道该怎么学。但实际上,国内大学几乎没有开设游戏相关专业的,在这个领域最顶尖的大学是美国南加州大学(USC)。
端游、手游开发
在图形图像处理这方面,这C++/C#这两种语言是非常优秀的,千万不要以为Java能做任何事情,在游戏领域真正的老大是这两门语言。游戏开发自然离不开游戏引擎,大的游戏公司一般都有自主研发的游戏引擎,而市面上的主流引擎以Unreal(使用C++语言)和Unity 3D(使用C#语言)为主,而Unity 3D有免费的个人版本,更适合学习与小团队开发,所以市场份额更高。之前Unity还支持JS和Boo,不过已经取消了对Boo、JS的支持,即Unity目前只支持C#语言。端游这方面,没有基础的同学可以从C++入门,之后学习C#,并尝试使用Unity引擎开发小的Demo。而手机App中必不可少的一类软件就是手机游戏软件,手游开发注定是要走向辉煌的。Unity当然可以做手游,王者荣耀就是用Unity制作的。
计算机图形学与Shader
如果说语言是外功,那么算法就是内功,而图形学就是游戏开发领域的必修内功。各种图形算法可能比数据结构与算法中的内容还要复杂,对数理知识的要求更高。很多开发者不屑于算法学习,认为我只要做出好看的作品就可以了,但实际上不是这样的,计算机这个领域就是这样,只要你想深入学习一些东西,算法永远是不可避免的。有的大学生做了两、三个Demo就去应聘,能够头头是道的讲出来自己是如何用引擎做出来的,但是一问到底层机制却说不出来,这就是内功修炼匮乏的原因,而且工作的时间越长表现的越清晰。这部分你应该熟练的掌握DirectX或OpenGL至少一种图形接口库,深入理解图形处理的机制。在图形学领域的另一个难点就是Shader着色器,这个东西决定了你做出来的作品是基于外表的好看还是基于内在的好看,前者只要有绚丽的贴图、纹样就能做出来,但是后者确实要深入理解游戏引擎渲染机制,掌握掌握纹理映射、光栅处理、GPU机制的综合体现。这里推荐siki老师的教程,在游戏教学方面的视频都是非常好的资源。不要以为这就完了,还有GLSL和HLSL等着你去学,shader真的不是看几个视频就能学好的东西。
页游、手游开发
不过对于学习来说我们就不用考虑那么多了,像cocos2d-x引擎支持C++、Lua、JS三种语言的编程,是国内第一游戏引擎,全球第二游戏引擎(仅次于Unity),除此之外还有Egert、Layabox在国内公司的招聘中也经常出现。这些引擎大多都支持的一门语言就是JS(包括TypeScript)。
数字媒体
Adobe全家桶 如果想要致力于学习这方面的内容,Adobe系统的Ps(图像处理)、AI(矢量图制作)、Au(音频处理)、Pr(视频处理)、Ae(视频特效处理)都是要会操作的。不需要精通,毕竟不是做专业的美工师。像这些软件不需要去购买高昂的视频去学习,许多网上课程已经足够学会基本操作类,如果想进阶最好是购买一本专业书籍来帮助提升。
FFmpeg
这个软件更偏向与计算机专业,其中的操作不如Adobe的简单,但是对计算机专业的学生还是很友好的,它是通过命令行来操作的,包含libavcodec(一个用于多个项目中的音视频解码器库)和libavformat(一个音视频格式转换库)。
3dmax与maya
3D图像建模领域的两大巨头,这就偏向于美工的技术了,需要一定的美术功底。这两个软件的基本功能都没有什么差别。
虚拟现实
3D立体技术包括3D建模与3D显示,虚拟现实就是基于3D显示的一种技术,这个领域最基本的语言是C++,与C#,基本都是通过游戏引擎渲染出来的。
人工智能
人工智能不同于传统的前后端开发,它对线性代数、高等代数的要求很高,许多计算都是通过矩阵来做的。许多小白会对人工智能(AI)、机器学习(DL)、深度学习(DL)感到迷惑,这里总结一下,机器学习的目标是实现人工智能,而深度学习是机器学习的一种方法,除此之外还有决策树学习、贝叶斯学习等方法。
Python
现在最火热的一门语言,在人工智能领域尤为吃香。Python语法简单,各类第三方库能够在许多不同的领域发挥作用,以至于已经有部分的高校开始尝试用Python作为计算机专业的入门语言来讲授。即使是在Web开发方面,Python Web也毫不逊色。不过还是让Python在属于它的领域大放光彩吧。
CNN(Convolutional Neural Network)
翻译过来就是卷积神经网络,它是一种新型的人工神经网络结结构,利用这种技术在图像和语音识别方面能够得到更优的预测结果,这种技术通常用在深度学习中。Tensorflow它是机器学习领域的一个开源软件库,它能够支持Python、C++、Java、Go等多种语言。我们在用Python做机器学习的时候大多会用到TensorFlow库和numpy库,想学习人工智能的同学一定要掌握好TensorFlow,TensorFlow是最流行的,但不一定是最好的,它也有自己的一些缺点,所以不要以为机器学习只能使用TensorFlow。
OpenCV(Open Source Computer Vision Library)
人工智能自然会涉及图像处理,计算机视觉以及模式识别,而这个视觉库。如果想学习像人脸识别,动作识别等领域的知识,这个库是一定要学好的。这个库主要接口是C++语言,在图形图像处理这部分C++是占有统治地位的语言,当然也有支持Python的接口。
大数据开发
Scala 现在的大数据人才大多还是以Java语言为主,之所以写Scala是因为在后端开发部分写了Java的相关内容,这里想讨论点别的。这门语言因为有Spark的存在,被使用的概率多了不少。它是一门非常适合函数式编程的语言,而且这种语言兼容Java,能够运行在JVM上,也可以调用Java的类库,是大数据方向的学生不可不学的一门语言。
Hadoop
Hadoop是Apache公司下的一个大数据通用处理平台,它是大数据方向的必修课,学习Hadoop不仅仅是学会搭建集群,还要掌握使用Hive(Hadoop架构之上的数据仓库)对数据进行精炼、查询、分析,通过HDFS(Hadoop分布式文件系统)来处理大规模的数据集等等。
MongoDB
大数据方向的学生不能局限于结构化的数据库,像MongoDB这样的非结构化数据库才是将来工作使用的主流数据库。
网络安全
密码学 解密与加密永远是网络安全的重要组成部分,密码学一定要系统的学习,因为网络安全的整个学习过程都要围绕密码学展开,很多学校没有专业的密码学课程,或者根本不知道什么是密码学。这就需要多买几本经典的密码学书籍来看看了,而且要多花精力来学习才行。
黑客攻防
网络安全方向的学生一定要以一个黑客的标准来要求自己,这里的黑客是指白帽黑客(不明白的可以参考百度百科黑客),这里就需要深入的学习Unix/Linux的底层机制了,市面上大多数的服务器都是以Unix/Linux为操作系统的,很少是Windows。要深入了解计算机网络模型的安全机制,理解防火墙的工作原理。对于Web安全、漏洞分析、0Day攻击、IDS(入侵检测系统)、网络渗透都要有较深的理解、
逆向工程
分为不同的平台,诸如Windows、Android、IOS等等,逆向工程要深入了解计算机组成原理,熟练掌握汇编语言,能够用C/C++进行基本的编程。逆向工程有许多分析工具可以用,例如IDA Pro、WinDbg等等,这些调试工具能够大大提高逆向分析的效率,要熟练掌握。
计算机领域现在已经渗透到各行各业,各种计算机相关的岗位层出不穷,上面仅仅罗列了一些我们熟悉的方向,当然热门的方向还有物联网、嵌入式、区块链等等,由于知识储备非常有限,对这些领域了解的不多,所以就不班门弄斧了。文章涉及多个领域的专业内容,可挑选自己感兴趣的部分进行阅读,文章仅供参考,每个人的学习路线还是要有自己兴趣所决定的。
本文也是赠予初学者参考,计算机是人类发展的必然,前景广阔。希望以上内容能帮上忙。
就是自己写不出来?
能看懂代码,就是自己写不出来,很可能这只是你认为的“懂了”,并不是真正的懂了。
01. 细节能懂,但是整体不懂每个编程语言的语法是有限的,如果是常用语法的话更是没多少了,一个项目中,随便拿出几行代码你可能知道是什么意思,但是并不能说:你能看懂每一行代码,就能看懂整个项目。你可能还需要知道:
项目是做什么用的?项目用到了哪些框架和组件?代码是如何分层的?
项目分成了几个模块?每个模块的作用是什么?模块和模块之间是如何配合工作的?
细节上,至少要了解方法的作用?哪些地方可能调了这个方法?如果修改方法的逻辑,是否会对项目其他功能造成影响?
如果是业务相关的项目,对数据结构的了解,也是非常有必要的。
02. 代码能懂,但是业务不懂如果是业务相关的项目,脱离了业务去看代码是不切实际的。
业务流程是怎么样的?系统在整个业务流程中处于什么位置?上下游系统都有哪些?是如何交互的?
业务模块都有哪些?流程是怎么样子的?如果有前端页面的话,需要按照前端--后端--数据库这个完整的流程去学习。
代码上有些看起来不合理的地方,也需要结合业务场景来看;反过来也一样,代码看起来写的很好,但是业务流程不一定对。
03. 看的懂,写不出来怎么办很多外行人,甚至程序员新手,会认为写代码最重要的是“写”,其实想比写重要的多,所以如果你写不出来代码的话,先反思一下自己是不是拿到需求之后就直接动手写代码了?
个人认为,在正式敲代码之前,你还需要:
新功能还是对老功能的修改?
如果是新功能的话,你需要从项目整体考虑这个功能;
如果是老功能完善的话,需要对这个功能有充分的了解,本次修改涉及哪些代码?对原有流程有哪些改变和影响?
新增一个方法前,先确认有没有现成的方法可以复用?修改一个方法之前,先确认会不会对其他功能造成影响?
如果代码分了多层,需要确认在哪一层进行修改,不要破坏项目原有的结构;
甚至变量、方法起名,你也需要遵守代码规范,看看项目其他的变量、方法起名是遵照的什么规范。
总之,要想写出好代码,不仅要了解细节也要了解整体,不仅要了解技术也要了解业务,写之前要多想,设计要充分。
我将持续分享Java开发、架构设计、程序员职业发展等方面的见解,希望能得到你的关注。