废话不多说,就问你java基础学没学,你是初学者?程序员?这都不妨碍你收藏学习java干活!
没有学过Java基础>>>的同学,基础不牢固的程序猿,都可以在巩固一下!
进入IT领域,就像进入大海—浩瀚而广阔。然而,它又很容易让人迷茫,不知所措。所以,在IT的海洋中,找好一艘船特别重要,这艘船带你前进、减少迷失。这艘船或许是一个人,或一本书,又或许是一篇文章。
然而在现实的大学生活中,在我们普通院校中,其实更多的可能是忙忙碌碌,或者碌碌无为。或者就是按照课本循规蹈矩,学着一些陈旧,或者自己不喜欢的东西。到最后就是那种啥都会、啥又都不会的人。
在学习一门语言,或者一门技术,你首先要先了解这门技术,这门语言在世界,在中国的市场份额。以及火热程度。有些语言渐渐暗淡。而有些语言逐渐兴起。
当前比较火热的语言大致有:
Java、python、c、c(嵌入式)、javascript、typescript、c#、R、go、kotlin(安卓)、scala(大数据)、ruby、php、matlab、dart(flutter跨平台移动端)、swift(苹果)、objective -c(苹果)、shell脚本、lua脚本等等。
选择一门语言要根据你的方向来。比如你要学习后端。那就java、python、php、c#、或node.js。如果搞安卓那肯定java、kotlin、js(混式开发)。如果大数据那肯定是java、scala最好,其次python也行。如果搞人工智能算法那肯定是python、matlab。数据分析可以考虑R、python、matlab。如果你想搞爬虫,那python肯定最好选择,当然java等其他语言都可以。如果你是竞赛ACMer。那c 肯定是你的拿手菜、也不排除部分鬼才用java哈。
笔者从大众角度还是建议要熟悉掌握一门编程语言。对于作为学习的基础语言。建议从java或者c 开始。后续可以学习python。go等语言。
热门方向
对于方向,虽然笼统的说有web开发、大数据、人工智能、物联网、云计算、运维、测试、网络安全等等。但是对于普同学软件的大学生来说主要的还是·前端、后端、运维、大数据、测试这些。
对于很多人说的或者当前炒的火热的人工智能、爬虫那些。我只能说很大程度那就是一个坑吧。因为大公司除了一些做搜索引擎的百度、谷歌、360他们利用爬虫 算法 存储做搜索引擎。而其他大公司他们都有自己产生的数据、他们更多致力于这些数据的处理,分析。而不是想着怎么爬。还有就是理性看待培训机构的python吹,python是很方便简单,是能干很多事情。
对于鼓吹的爬虫学到后面的拓展方向。要么是扩大量分布式方向拓展。要么就是分析JavaScript各种加密。如果是安卓等app还要反编译看源码查看java代码的逻辑。而AI方向众所周知一般非985/211硕士很难找到。并且AI重要的是数学和算法,跟编程语言关系也不大。python仅仅是一个工具而已。
根据方向市场大部分需求还是前端、后台、算法(要求很高)。前端和后台的需求远远超过其他的方向人员。因为所有网站的其他开发功能都要依赖于前端和后台。并且随着html5流行。web能干的事情也越来越多。这也极大的抢占了桌面应用和原生安卓、苹果应用。所以个人建议后端、前端、运维三个方向选择一个。当然。具体选择方向还是要根据兴趣来,你喜欢大数据(工程类要求不是很高,数据挖掘算法要求高),人工智能,爬虫,游戏开发,桌面开发等你都可以做。只不过再选择方向时候要尽早。不要好高骛远。根据自己所在院校、自己实际水平。以及计划研究自己想要研究的。
自身定位
你是想要进大厂,还是想进小公司呢?
对于一个普通本科生,很可能真正步入学习的时间不多。并且能够掌握的知识的广度和深度也是有限度的,还要考虑学习环境的影响。要慎重选择学习的侧重点。
相进大厂,那么如果裸的只会java后端技术是不够的。在校招阶段进大厂更多知识的要求不是广度,而是深度。比如操作系统,网络,数据结构和算法,以及jvm,和java的基础知识需要熟练掌握。而框架和一些高级中间件需要你了解或简单应用。但是大厂就那几个,竞争压力还是比较大的。
想进小公司,其实很多小公司的要求特别高,并且很多小公司干的活也多一定程度能够使得技术快速成长,也有不少人先到小公司积累技术然后跳大厂。小公司更多看中你会的技术有哪些,会那些框架,中间件而相对不太注重那些底层。
如果你要就业一定要提前几个月准备面试,准备基础,进行复习,工众号:【编程领域】查看
同时,也不要有心理包袱,不要认为自己是双非的大学就进不了大厂,如果学习的早,自身积累够多,够扎实,用心准备那么进大厂也是没问题的。
解决学习障碍:
个人感觉在学校的学习过程中主要有两大障碍。一个是个人障碍,另一个是学校障碍。
个人障碍:
不了解就业的压力。总把事情交给’明天’,以后。或者把领域看的很简单,又或者好高骛远,看不上当前所学,又不拓展新知识。
还有 混日子等临近毕业补习找工作。这种就是低薪码农,和容易被淘汰的。IT的每一个技术栈都很深,都需要长期的沉淀才能变强。
考研党会认为:我要考研。我要考研,我不要学这个,我要做研究。你做研究,研究生基本是算法或者底层深入的研究。有些甚至连基本知识、语法都不会,准备用宝贵的两年半去从0开始么。这里就不再吐槽了。如果想要考研的也要为自己的将来打算做铺垫。比如你想将来研究机器学习算法。你可以刷刷题提高编程思维能力,学个爬虫能够抓取一些数据。为自己以后做个铺垫。
学校障碍:
这个可能有些学校好一些。但是对于我们学校的教学方案和课程。真的很想吐槽一下。虽然学习是个人的事情,但是在当前教育制度下很多学校也有无法推脱的责任。
课程陈旧、冷门课程:IT发展迅速、技术更迭较快,然而很多学校课程甚至5、6年都不改。就比如我自己我们疯狂学C#,sqlserver,windowsapp(windows应用商店app),.net微软这些玩意。如果认真学习出来真的是没啥用——不迎合市场。对于这些,如果你是忠于技术的感觉还是要有所取舍。如果你要是钻研你自己的技术一直钻研下去那么你肯定会慢慢沉淀,收获很多。但是学科成绩就会降低甚至是挂科。对于其他更深的影响这里就不分析了。
还有些学校疯狂开设相关性不大的课程 比如日语,疯狂开硬件课程。确实占用大量学习时间。如果在遇到一些要求很严格的老师,真的是欲哭无泪。
对于这些障碍,你要认清自己大学期间想要收获的是什么。然后自行决定取舍。如果你是想从事技术就业,个人感觉学业成绩没那么重要、可以多关注技术,多做项目对成长、就业的好处会更大。但是对于操作系统,数据结构和算法,网络这些课程也是程序员内功区分的很大准则。还是要认真学习的。
这里通过个人过程浅谈一些java方向学习的建议
java基础:
包过安装环境,第一个helloworld,命名规范,数据类型,运算符,控制语句和方法,数组,字符串,面向对象,异常,泛型,以及一些api 例如正则、math、大数等模块。这部分比较简单,跟着书上、视频、博客的demo跟着敲就能够理解。对于一些模块不一定需要立即完全掌握。比如Math类有很多数学计算方法,你掌握一些常用的求平方、根号可以以后用到再慢慢积累。还有正则和大数模块在入门阶段要求也不是很高。
java 进阶:
对于进阶部分的内容。都是java处理问题的利器!,并且都很重要。
IO(熟练掌握):在后面javaEE开发中,或者实际项目中。很多涉及到文件传送,需要对IO的api熟练掌握,并且io的拓展也比较多有NIO,BIO等等。
集合(熟练掌握):Map和List在开发过程中使用是非常多的。并且在面试中也会常问Hashmap,currentHashMap,ArrayList、LinkList相关内容。并且在写算法题,写项目时候集合也是必不可少的部分。
网络编程(了解):了解socket编程,tcp/udp编程。如果喜欢网络编程或者想研究通信方面或者一些网络传输中间件要深入了解网络编程。
多线程(先了解熟悉):这部分内容比较深。在入门学习可先了解熟悉,因为等java有一定基础还需要对多线程进行深入学习。因为在大型项目中会涉及到线程安全问题、同步问题。都需要多线程方面的知识。
反射(先了解):反射的功能比较强大,对于很多人来说还是太难了。这部分在入门学习建议了解。如果后面有能力可以深入学习。因为当前流行的spring,mybatis很大程度是依赖反射去完成的。
jdbc(掌握):jdbc在jsp/servlet中关于数据库的操作几乎必不可少,这部分在javaEE会二次学习。
javaswing(直接跳过):java在桌面编程并没有太大优势,虽然eclipse,idea,webstrom,pycharm等众多编辑器是java开发的。但java开发桌面效率还是偏低。难度偏大。但是很多老师的课程设计会基于javaswing的管理系统。如果你想学也可以研究吧。但是个人觉得还不如多花点时间用web做一个管理系统呢。
学习拓展
除了对于后端学习,了解或掌握一些其他技能还是很有必要的。
前端:html/js/css 以及jquery,一套以上ui框框(easyui或者layui)能够熟悉使用(小全栈)。有能力可以接触vue,react等流行js。
算法:各个大厂对工程师的数据结构和算法要求都挺高,建议可以刷letcode,剑指offer(牛客),pat(牛客),这些算法在面试会经常问道或者出现在笔试。喜欢的也可以刷hdu,poj增强算法思维和能力。对于刷题入门。推荐从杭电oj第11页或者pat乙级开始入门。可能刚开始刷题会遇到困难。但是刷题一方面能够锻炼思维,另一方面可以巩固java的一些语法和集合使用。当你对程序复杂度有了概念,在开发时候对你有很大帮助的,你的思考点就不仅仅是实现功能,还有效率。
爬虫:当前爬虫算是一个比较火但是不太拿的上台面的一门技术。可以通过爬虫(python/java都可以)增强对接口的认识。为自己工作的反爬做做准备。并且在课余之际也可以做些有趣的东西。
git 当多人协同开发,git等svn是必不可少的,提前掌握git,备份代码。为开源社区做一份贡献。
linux 服务器基本是linux(centos和ubuntu居多),linux也是程序员必备技能。建议装个双系统(ubuntu)为日常学习使用,当然,这途中会遇到很多坑,需要自己踩。
一定要注重网络,操作系统,数据结构和算法积累。
推荐刷题网站:
letcode,牛客,PTA,杭电oj,poj,(cf,atcoder,vjudge有能力者考虑)
推荐IT交流社区
博客园(自由度更高),csdn,掘金,StackOverflow(境外),,开源中国,简书,头条
笔者一些建议:
多动手,做一些项目实践而不是空理论,但项目不要做太多,或者没一些成长性的。太多的项目也是个负担。
多逛IT社区,多逛交流群,多关注一些博主公众号。增加学习途径。
找一些伙伴一起学习、交流、互助,毕竟一个人还是很孤单的。不要被搞其他技术的人影响,根据自己兴趣,找到一些志趣相同的人一起成长学习。
笔者不知道自己说错了多少,也不知道这篇文章会不会随着时间推移而变成一堆废话。当然笔者水平也有限,只是表达一些个人在学习途中的迷茫和建议,不知道是否会误导一些青年。建议要选择性阅读。当然,至于笔者写过的一些blog,如果各位遇到笔者能够解决的一些问题,我也很乐意和大家一起讨论!
如果对 JAVA>>>、python、前端、大数据、人工智能等感性趣欢迎关注我的个人工众号交流:【编程领域】