2018 给学弟学妹的建议
2018 给学弟学妹的建议
目前的互联网行业已经完全不是它刚开始盛行的样子了。在互联网爆火🔥的初期,你可能会简单用一下语言就能找到一个不错的工作[1]。那时候,即使是没有学历支撑直接从培训班出来的基本也都找到了还算是不错的工作。但是,现在已经完全不一样了。
面试的难度可以说一年比一年难,学的人越来越多,和你竞争的也越来越多,特别是像面试阿里、腾讯、字节跳动这样的大厂,你可能要和更多人去竞争。“面试造火箭,入职拎螺丝” 想想也是正常,毕竟这么多人去竞争那少数的 offer,如果不难点的话,区分度就没那么明显了
学习计算机专业的越来越多,和你竞争的也越来越多,需求就那么一些,人多了之后,平均工资水平以后应该不会和其他行业差别这么大。但是,我个人感觉技术厉害的还是会很吃香。只是,普通的程序员的工资可能比不上前几年了
学历越来越重要,有些公司招聘会要求全日制统招本科(专科基本没希望了),我同事都在偷偷的考在职研究生了
所以如果想学习,需要趁早,做在同龄人中拔尖的那一部分。
下面是一些我觉得还不错的一些建议,希望对大家有帮助。
养成学习和计划的习惯
无论在学校还是以后的工作中, 都要养成终身学习的习惯。
学习这东西不仅仅是为了应对考试,更要应对以后工作中对你的要求和实现自己梦想需求,在校期间可以考考驾照、会计等证。
不管多远,你迟早要自己开车的,学校附近的驾校比外面便宜的多,而且这是你时间最充裕的时候
学学会计相关的知识,对你以后理财、投资都有帮助
坚持学英语,尤其是口语
养成团队协作习惯
在平常学习的工程中,大家可以能是单独完成学习任务,但在工作中,需要团队协作。所以应该在工作前学会一些团队协作的软件和方法。
在大一学完第一门编程语言的时候,我那时是C
语言, 我想你也一定顺利的通过考试和考核了,在这其中是否发生了粘贴复制别人的代码,而且发生了找不到自己最初那个版本的困扰。这时候你需要一个版本控制软件来帮你记录版本变更和团队协作。
建议你在大二上学期开始初步使用 git
来管理你的代码以及和你小组内的成员进行团队协作,git
是你开始工作必须会遇到的第一个软件,无论你是要做后端还是前端。如果你用不好它,那你可能会删除你未来同事的代码,这样你会很尴尬的。不如提前学好它,毕竟删除同学的代码,也就删了
git 学习教程
入门文章 https://www.liaoxuefeng.com/wiki/896043488029600
官方文档 https://git-scm.com/docs
视频 https://www.imooc.com/learn/1052
如果你看完文档或者了解 Git 你会发现 GitHub
这个是我的主页: https://github.com/zhangyunan1994
不过 GitHub 有时会无法访问,在学习的时候建议你使用国内的 gitee, 这个是中文版的,速度很快,支持私有的仓库
这个是我的 gitee 主页: https://gitee.com/zhangyunan1994
建议同学在大二开始使用,比如在Java
课程或者在数据结构
的习题中,将作业交到 gitee
上, 一方面教给学生单独使用 git
,另一方面也可以让学生初步学习下如何协作
在初次使用的时候应该学会使用分支
、合并
、推送
、强制推送
等功能
等到小组结组开发时应该学会如何处理冲突和协作
根据我当时课程推荐一些辅导
有些课程的具体时间可能会记混
时间 | 课程 | 辅导 |
---|---|---|
大一上 | 线性代数 | 看看书,多做题就好了,这个对以后对算法题和统计分析有帮助 |
大一上 | 离散数学 | 多看书,如果可能找一些算法题看下,图书馆应该有,矩阵是必须要掌握的 |
大一下 | C 语言 | 大部分人接触的第一门语言,一定要认真学,在老师讲课的同时可以看一下 慕课网C语言,如果时间富裕的话,建议开始用 git 来管理你的代码,少打两把游戏可能就学会了,记得高数不要挂科哦 |
大一下 | C 语言课设 | 建议用 git 来管理你的代码,并尝试将其发布到 github 或者 gitee |
大二上 | 数据结构 | 好多算法都依赖于数据结构,这时候可以随堂看一下 《算法基础》和《数学之美》这两本书,要认识到数据结构的重要性和应用场景 |
大二上 | 数据结构课设 | 如果这时候顺利的话,应该可以运用 git 来管理你的代码了 |
大二上 | 数据库设计 | 一般会用 SQLServer 给大家讲数据库的设计和 SQL 语句的使用,这个将来是你工作中遇到做多的知识,学的越扎实越好,另外大部分企业使用的是MySQL ,这个安装更简单,大部分SQL是通用的,建议有时间看一下 与MySQL的零距离接触 和 菜鸟教程,一定要具备创建数据库和增删改查的能力 |
大二上 | 操作系统 | 学习一下操作系统的相关技术了,重点学习下 Linux 命令,推荐 《Linux 命令与shell脚本编程大全》,学习 linux一定要学会 Vim 的简单实用 |
大二上 | 建议 | 这时候建议你看一下 HTML 、CSS 学会一些页面的编写,这个相对简单一点,持续学一下,至少可以做一下简单的页面 |
大二下 | 计算机网络 | 这个一定要知道一个URL 从浏览器地址栏回车到显示页面中间经历了什么 |
大二下 | 组成原理 | 这本书好难背呀,一定要熟记和理解了 |
大二下 | Java | 不要这时候看《Java 编程思想》这本应该是工作之后看的,你这时候可以看一下《Head First Java》或者 《Java 核心技术卷 1》,一定要找本薄点的看,不然容易睡着的,也可以看看视频https://www.imooc.com/learn/85,这个有三季,这个时候一定要学会 java + jdbc 完成简单的小功能,比如图书系统,宿舍系统之类的,如果可以用上maven 也是很好的 |
暑假或其他时间 | Java | 在学习了java之后,就需要学习一些框架了,从简单的 SSM 开始,以下会给出相关资源 |
大三上 | xml 和 html5 | 这个也是工作中遇到很多的,最好彻底掌握,毕竟这个很早就开始学了 |
大三上 | oracle | 学了 SQLServer 和 MySQL,这门课就没那么难了,主要考察你的动手和思考能力 |
大三上 | 建议 | 这时候就要用 SSM 做一个完整的系统,建议4个人一组,并且使用git作为版本控制,团队之间有分工 |
大三下 | java企业开发 | 这时候会再学习一遍 SSM ,如果你有理解错的地方,这时候一定要和老师交流,如果没有理解错,就在巩固一遍,顺便学一下Spring Boot |
暑假 | 建议 | 准备一下毕业设计方向,学学新知识 |
大四上 | 毕设 | 准备毕设,看看能不能把所学的用上,如果不打算考研了,可以准备看看面试要求了 |
如何获取资源
慕课网 https://www.imooc.com/
百度网盘找资源 http://www.rufengso.net/s/name/Java
百度直接搜
找老师和学长要,尤其是已经毕业的学长,他们很多
CSDN、思否、博客园、简书等博客网站搜
淘宝买一下,一般10元1个T的那种
推荐一些书籍和教程
教程 | 类型 | 适用时间 |
---|---|---|
《码农翻身》 | 书籍 | 到了大二可以买本看看,挺有意思的一本书 |
《宽客人生》 | 书籍 | 从物理学家到数量金融大师的传奇 [My Life as a Quant: Reflections on Physics and Fin] |
《算法基础》 | 书籍 | 学数据结构时开始看,要一直看,有个《算法导论》那本太厚,容易劝退,先看这本比较好 |
《Java 核心技术卷 1/2》 | 书籍 | 学 Java 时开始看 |
《Head First Java》 | 书籍 | 学 Java 时开始看,和上者选其一,这本更有趣 |
《Linux 命令与shell脚本编程大全》 | 书籍 | 学习Linux时开始看,大学阶段一直看 |
《vim 实用技巧》 | 书籍 | 初次接触 Vim 时看看,没事多看看就好 |
《深入理解Java虚拟机》 | 书籍 | 大四上学期看看,主要是多背背,面试容易问 |
git 教程 | 文档 | https://www.liaoxuefeng.com/wiki/896043488029600 |
git 教程 | 官网文档 | https://git-scm.com/docs |
git 教程 | 视频 | https://www.imooc.com/learn/1052 |
Java入门第一季 | 视频 | https://www.imooc.com/learn/85 |
Java入门第二季 | 视频 | https://www.imooc.com/learn/124 |
Java入门第三季 | 视频 | https://www.imooc.com/learn/110 |
与MySQL的零距离接触 | 视频 | https://www.imooc.com/learn/122 |
我自己在写的 | 文档 | https://github.com/some-big-bugs/growth |
一些好的文档项目推荐
注意: 不要好高骛远,要找自己会的那部分一点一点看,一点一点的学
名称 | 描述 |
---|---|
free-books | 免费书籍 |
awesome | awesome 合集 |
javaok | 必看!java后端,亮剑诛仙。java发展路线技术要点。 |
JavaGuide | 【Java学习+面试指南】 一份涵盖大部分Java程序员所需要掌握的核心知识。 |
advanced-java | 互联网 Java 工程师进阶知识完全扫盲:涵盖高并发、分布式、高可用、微服务、海量数据处理等领域知识,后端同学必看,前端同学也可学习 |
CS-Notes | 📚 技术面试必备基础知识、Leetcode、计算机操作系统、计算机网络、系统设计、Java、Python、C++ |
interviews | Everything you need to know to get the job. |
toBeTopJavaer | To Be Top Javaer - Java工程师成神之路 |
fullstack-tutorial | 🚀 fullstack tutorial 2019,后台技术栈/架构师之路/全栈开发社区,春招/秋招/校招/面试 |
android-interview-questions | Your Cheat Sheet For Android Interview - Android Interview Questions |
AndroidNote | 安卓学习笔记 |
spring-analysis | Spring源码阅读 |
SpringCloudLearning | 《史上最简单的Spring Cloud教程源码》 |
mit-deep-learning-book-pdf | MIT Deep Learning Book in PDF format (complete and parts) by Ian Goodfellow, Yoshua Bengio and Aaron Courville |
miaosha | ⭐⭐⭐⭐秒杀系统设计与实现.互联网工程师进阶与分析🙋🐓 |
spring-boot-demo | spring boot demo 是一个用来深度学习并实战 spring boot 的项目,目前总共包含 63 个集成demo,已经完成 52 个。 该项目已成功集成 actuator(监控)、admin(可视化监控)、logback(日志)、aopLog(通过AOP记录web请求日志)、统一异常处理(json级别和页面级别)、freemarker(模板引擎)、thymeleaf(模板引擎)、Beetl(模板引擎)、Enjoy(模板引擎)、JdbcTemplate(通用JDBC操作数据库)、JPA(强大的ORM框架)、mybatis(强大的ORM框架)、通用Mapper(快速操作Mybatis)、PageHelper(通用的Mybatis分页插件)、mybatis-plus(快速操作Mybatis)、BeetlSQL(强大的ORM框架)、upload(本地文件上传和七牛云文件上传)、redis(缓存)、ehcache(缓存)、email(发送各种类型邮件)、task(基础定时任务)、quartz(动态管理定时任务)、xxl-job(分布式定时任务)、swagger(API接口管理测试)、security(基于RBAC的动态权限认证)、SpringSession(Session共享)、Zookeeper(结合AOP实现分布式锁)、RabbitMQ(消息队列)、Kafka(消息队列)、websocket(服务端推送监控服务器运行信息)、socket.io(聊天室)、ureport2(中国式报表)、打包成war文件、集成 ElasticSearch(基本操作和高级查询)、Async(异步任务)、集成Dubbo(采用官方的starter)、MongoDB(文档数据库)、neo4j(图数据库)、docker(容器化)、JPA多数据源、Mybatis多数据源、代码生成器、GrayLog(日志收集)、JustAuth(第三方登录)、LDAP(增删改查)、动态添加/切换数据源、单机限流(AOP + Guava RateLimiter)、分布式限流(AOP + Redis + Lua)、ElasticSearch 7.x(使用官方 Rest High Level Client)。 |
正确提问
我们平时任何时候都离不开提问,特别是初学的时候,但是真正知道如何正确的提问的人很少。问别人问题前不要来一句 “在吗”,你说你问了在吗我是回复好还是不回复好呢 ?
更多关于如何提问的内容,详见 github 上开源版『提问的智慧』 https://github.com/ryanhanwu/How-To-Ask-Questions-The-Smart-Way/blob/master/README-zh_CN.md,抽时间看一下,我想看完之后应该会有很多收获。
健康生活
我一直觉得这一方面是最重要的,我想很多人和我一样会无意识间忽略它,等到真的身体不舒服了,你才开始意识到健康生活的重要性。
除非万不得已,不要熬夜了。熬夜的危害就不用多说了,秃头加内分泌失调,你懂得!
看电脑 45 分钟之后,起来走5分钟,看看远方放松一下。不要觉得这 5 分钟浪费时间,相反,这 5 分钟可能为你带来更大的效率提升。
适当健身,保持一个不胖的身材。
高效搜索
建议搜索顺序 google > bing > 百度 > 其他
善于总结
学习完任何一门知识后,你可能当时看视频感觉老师讲的挺容易懂的。但是,过几天后你发现你忘的一干二净,别人问你一个类似的问题,你一点思路都没有。所以,我推荐你学完一门知识后不光要及时复习,还要做好总结,让知识形成一个体系。另外,你可以假想自己要给别人讲这个知识点,你能不能把这个知识点讲清楚呢?如果不能,说明你对这个知识点还没有彻底了解。这也就是人们经常说的费曼学习技巧。
总结的方式:
有道云笔记、OneNote……这类专门用来记录笔记的软件上;
在 github 或者gitee 上写文档,这也能锻炼你git使用,建议找 4~10 个人一起写,这样大家能相互学习
思维导图xmind;
通过写博客输出
多用 Github
没事多去 Github 转转,如果有能力可以参与到一些开源项目中。多看看别人开源的优秀项目,看看别人的代码和设计思路,看的多了,你的编程思想也会慢慢得到提升。除了这些优秀的开源项目之外,Github 上面还有很多不错的开源文档、开源资料什么的,我觉得对我们平时学习都挺有帮助。Github 用得好还能装一下,毕竟人家还是一个全英文网站,咳咳咳。
实践
多去实践,将学到的东西运用到实际项目中去。很多人都找我抱怨过没有实际项目让自己去做,怎么能有项目经验呢?如果实在没有实际项目让你去做,我觉得你可以通过下面几种方式:
在网上找一个符合自己能力与找工作需求的实战项目视频或者博客跟着老师一起做。做的过程中,你要有自己的思考,不要浅尝辄止,对于很多知识点,别人的讲解可能只是满足项目就够了,你自己想多点知识的话,对于重要的知识点就要自己学会去往深处学。
Github 或者码云上面有很多实战类别项目,你可以选择一个来研究,为了让自己对这个项目更加理解,在理解原有代码的基础上,你可以对原有项目进行改进或者增加功能。
自己动手去做一个自己想完成的东西,遇到不会的东西就临时去学,现学现卖。
注意代码规范
从学习编程的第一天起就要养成不错的编码习惯,包、类、方法的命名这些是最基本的。
推荐阅读:
阿里巴巴Java开发手册(详尽版)https://github.com/alibaba/p3c/blob/master/阿里巴巴Java开发手册(详尽版).pdf
Google Java编程风格指南:http://www.hawstein.com/posts/google-java-style.html
Effective Java第三版中文版: https://legacy.gitbook.com/book/jiapengcai/effective-java
关于打造个人 IP 的问题
无论是学生开始已经工作,如果能让面试者先知道你这个人,然后你才投的简历,对你面试或者以后的成长都有帮助。
比如有的学生可能还没毕业就已经有个非常著名的博客或者项目,这样的人出去找工作肯定事半功倍,那如何打造自己的 IP 呢?
这个我也没什么办法,只能说尽量去做一些能提高知名度的事情。
写博客,一边学习一边总结
使用 Github,这个在一些公司是加分项
参加一些开源项目的讨论,最好能直接参与修改
在一些有排名的网站刷排名
当然起个好名字也挺重要的,毕竟这个名字可能伴随你的技术生涯
后记
时间有限,内容不一定全
其他资料,可以 zyndev@gmail.com
注释:
1: 听当时导员和学长说的,在 08 年你毕业就能找到工作,在 10 年你会点编程就能找到工作