编程初学者学习、就业指南
最近面试了一些实习生,发现很多同学对于如何学习、如何找工作还是有不少困惑。这里我总结了一些经验,希望对初学者有所帮助。
经验这个东西,需要时间去摸索,需要实践去试错,在不断尝试不断学习中才能获得。如果在初学阶段能够有指路人提供一些建议和方向,那绝对会少走很多弯路。
技术要靠自学
一个非常突出的矛盾点是,学校所教的内容与实际工作所需完全脱节。这一点在我上学的时候就是这样,现在依然如此。不过我意识得比较早,在我刚接触学校专业课程之后就发现,这些课程太理论,教材太陈旧了,根本无法满足我对技术的需求。所以我在大学期间我基本全部在自学,自己研究技术。
究其原因,其实也不难理解。国内本科教育主要还是在培养基础理论知识,实践和应用基本都是辅助。在计算机技术这块,教材的更新迭代速度远远比不上技术的发展速度。尤其在前端领域,新框架、新轮子层出不穷,出教材的这些教授学习都来不及,更别说出教材。而且大学的专业也不会分那么细,基本上教一些通用的理论基础、编程基础就差不多了。专业对口肯定是比不上外面的培训班的,那些毕竟是针对就业速成的,都是干货,并且以实战为主。
所以,对于技术这块,还是要靠自学。尤其是想从事这个行业的话,一定要早做准备,积累技术经验,等到快毕业前再去学习,已经很晚了,和其他早就开始自己钻研技术的同学比起来,差距就会很明显。
怎么自学技术
兴趣是最好的老师,这句话绝对没错。对技术感兴趣的同学,甚至不需要指导,就已经在自学的路上了。因为兴趣,你会主动去尝试一些新技术,或者捣鼓一些新玩意,尝试的过程中会遇到各种各样的问题,在解决问题的过程中,你就已经在学习了,并且通过解决问题的过程来学习,效果是最好的。
对于兴趣没有那么浓厚,不知道该如何下手的同学,该怎么办呢?我的解法是,给自己创造需求。
比如,给自己建一个网站,用来写写博客,记录学习过程。在这个过程中,你会遇到很多问题。比如如何搭一个网站,用现成的博客系统,还是纯手撸?现成的博客系统的话如何部署?如何绑定域名?手撸的网站前后端分别用什么语言,什么框架,哪些组件?我需要实现哪些功能?页面是纯静态部署,还是带服务端渲染?各种方案各有哪些优缺点?……
在各种各样的问题中,尝试去找到自己的解决方案,在这个过程中,你就已经在学习各种各样的知识和技术了。
精力有限,需要集中
前面也讲到,技术经验一定是需要时间去积累的,只能不断去学习去实践。但计算机技术上,永远有学不完的技术。对于技术方向的选择上,最好也要聚焦。全栈不是一件坏事,但是对于目前国内的就业环境来说,大部分的工作岗位还是比较细分的,专门的全栈岗位非常少。对于精力有限的同学来说,最好是专注于一个方向去打好基础,有余力再去横向扩展。不过有精力又喜欢折腾的同学,可以尝试各种方向,不要被一种技术所局限,实现目的有各种各样的方式,选择适合自己的就好。
另外,大学期间还要应对各种考试、作业、实验、论文,还要陪室友打游戏、陪男女朋友吃饭、逛街、看电影,还有各种社团活动,以及其他各种各样的事情。真正留给你自学技术的时间,其实很有限。我当年学校的课基本都是翘课,学业也基本上是应付考试为主,把这些时间都用来研究技术。但尽管如此,我还是花了很多的时间在玩游戏、看电影、社团活动上。人精力是有限的,很多分散精力的事情也是难以避免的。只能说尽可能去集中精力,减少分散精力的事情。
举一个例子,最近一段时间面试到的一些实习生,很多简历里都有各种各样的竞赛得奖,比如蓝桥杯。我具体不太了解这个竞赛的含金量,但是就我面到的一些同学来看,有很多非常水的同学。与其把精力花在这些竞赛上,不如把这些时间花在学习技术上,打好基础上,效果会更好。(能力特别强的同学除外)
关于开源
面试过程中,有几个同学向我讨教经验,说到想做一些开源项目,加入开源社区,问我有没有什么建议。
我觉得这个想法非常好,但顺序不太对。不是想做开源项目而做开源项目。而是当你遇到一个问题,并且通过你的项目解决了某类问题。这时候如果你想开源,帮助到其他人,那就直接代码提交到 GitHub 开源就完事了,你的项目足够好,能够解决别人的问题,自然而然会有人关注,会有人使用。
但对于大部分同学来说,很难做到。刚起步的你们,甚至很难遇到真正困难的问题,更别提做出解决这些问题的方案了。
其实,开源项目也并不是那么遥不可及,很多项目也是由各种各样的贡献者添砖加瓦不断完善不断补充而成。当你用到一些开源项目,并且遇到问题的时候,不要停留在搜索阶段。当你搜不到解决方案的时候,尝试去看下项目源码,看看原因出在哪里,如果这个问题还没有人提过,你可以提一个 issue,如果问题很明确,可以尝试去解决,然后提交 PR。在这样的过程中,你是真正遇到问题,并且去尝试解决问题,这样的经历对于你学习和成长是非常有帮助的,并且在这个过程中你还可以帮助到开源项目,成为开源项目贡献者大军的一员。
最近我在重新搭建我的博客系统的过程中,用到了 nuxt 生态的一些新项目,并且也遇到了各种各样的问题,给其中多个项目都提交了 PR。在这个过程中,我自己也学到了很多,我觉得对我成长最大的一件事情就是,我对开源项目“祛魅”了。我内心不再觉得那些开源项目有多么神秘,因为他们也是人写的,也是各种各样的贡献者提交 PR 组成的。项目未必能覆盖所有的情况,总会有一些未考虑到的情况,会被你遇到。随着使用的深入,你总会遇到各种各样的问题,这时候主动去找到问题,并且提出解决方案,在不知不觉中,你会发现,原来你已经融入这个社区了。
关于实习工作
有同学没有实习过,向我了解实习工作到底是什么样的,需要那些能力和知识。
先说一下我对实习这件事情的理解,实习是一件“双赢”的事情。对于公司来说,实习生是一个廉价的劳动力,可以帮助公司完成一些简单的工作,减轻正式员工的负担。对于实习生来说,实习是一个学习的过程,可以在公司里学到一些实际工作中的技术和流程,也可以锻炼自己的沟通能力、团队协作能力等等。
因此,其实公司对于实习生的要求没有那么高,主要还是做一些杂事。基础知识扎实,能够独立解决一些简单问题,能够良好沟通协作,就可以了。
但问题在于现在这个行业的竞争比较激烈,一个 HC 有很多人在竞争,这个情况下只能从里面挑能力更强的人进来。所以有时候,你没拿到那个 offer,并不是公司要求太高,而是你的竞争对手太卷,能力太强。
在这种情况下,只能不断提高自身的能力,才能增强竞争力,才能有更多的机会拿到心仪的实习 offer。
关于找工作
大厂还是小厂,我觉得有条件的情况下,还是优先选大厂。大厂相对规范,相对稳定,并且有利于提升简历的背景,也利于后面继续换别的大厂工作。一个都是不知名小厂的简历,和另一个都是知名大厂的简历,你觉得哪个简历被用人单位选中的概率更高?
但是,大厂的竞争会比较激烈,没拿到大厂 offer 的情况下,也可以先去小厂积累经验,等到有了更多的经验和能力,再去尝试大厂。最好不要去外包公司,去了外包公司,基本上就很难再去大厂了。
简历该怎么写
最近发现一些简历里面,都不约而同提到一个前端低代码平台,并且结构都很相似。问到实现细节上,又不太答得出来。不确定是不是一些教程上提到的这个项目。
大学生本身项目经历很少,确实简历内容会相对简单。但与其在简历中写一些这样教程中的看起来很高大上的项目,不如自己去做一些小项目,把这些项目写到简历上。这样的项目,你是真正参与过的,你是真正了解的,你是真正可以讲出来的。这样的项目,会让你在面试的时候更有底气。最好是能直接部署到线上,贴上访问地址,能够直接体验到效果,更有说服力。我记得我当年第一次去面试的时候,带了个 surface pro,给面试官看了下我之前做过的一些作品,面试官当场就说你这也太牛了,轻松通过了面试。
付费咨询
面试的过程中很多同学会问我很多问题,给他们解答之后,都觉得受益匪浅。受他们启发,我感觉可以尝试一下付费咨询。毕竟在这个行业摸爬滚打了这么多年,创过业、待过外企、上市公司,也面试过很多人,对于学习、就业方向有一些自己的看法和经验,可以分享给有需要的同学。
如果你有关于学习方向、就业方向等相关的问题,可以通过下面的方式联系我,约个时间聊个半小时到一小时。费用的话,先定个 ¥198
吧。
- 邮箱: hi hadb.me