零经验素人,怎样找到一份软件开发的工作?

找开发工作都要求有经验的,怎么破?

记得我初到京城开始找工作时,最痛苦的莫过于,看到所有的软件开发岗位都要求有工作经验。甚至我在有一次失败的面试之后,对着面试官绝望地问道:“想找工作要有经验,可是不工作哪来的经验,您说我应该怎么办?”

当时那位面试官只是推了推鼻梁上的眼镜,沉默了一会儿,有些同情地说:“回去等我们通知吧,再多学习学习。”

时至今日,我已然明白找不着工作这个问题,并不是出在公司的招聘要求上,而是出在了我自己当时的认知水平上。因为公司开门做生意,要在激烈的市场竞争中生存下来,肯定是希望以有限的成本找到最合适的人才。

而自己却抱着“进了公司,我肯定能学会怎么工作”这样的想法,错误地把责任归咎于公司的招聘政策,这显然是本末倒置的。

当然,我后来也找到了软件开发的工作,开启了职业生涯。只是绕了不少弯路,回过头看,有些事情我懂得更早的话,或许命运会有所不同。

因此,我打算结合自己的体会,说一说一位零经验素人,如何为自己创造经验,找到一份软件开发的工作。

学会一套技术体系

在这里我想明确一个前提,那就是求职者是零经验,而不是零知识。假如说求职者从来没有接触过计算机的理论知识,只是羡慕软件开发者的光环,那本文是不适合的。求职者还是应该花时间,先将基础理论学好,并掌握一门编程语言。

我想大多数有志于软件开发的求职者,一定都已经掌握了一门编程语言。求职者已经可以用编程语言解决一些特定的数学或者算法问题。但对于想找一份工作来说,这还是远远不够的。

还要再学习什么?应该学会一套技术体系,解决一类问题。

记得我那会儿为了找工作,把一本厚厚的java语言程序设计给啃了下来,里面的知识点也都认真上机操作了。但这些知识储备仅够用于笔试,在面试环节,人家问的多是体系化的内容。

例如什么是MVC架构、使用过哪些框架、数据如何存储,缓存如何设计等。坦白说,第一次被问的懵圈还情有可缘,但如果第三次、第四次还张口结舌,答非所问,那就不应该了。

那么,没有经验,我们就要给自己创造出经验了。一个很好的办法就是实践“做中学”的理念。微软的资深技术人邹欣老师,他多年以来一直坚持利用自己的业余时间在高校中传播、讲授“做中学”,并著有《构建之法》一书,系统地论述如何实践“做中学”,这本书是一个相当好的参考。

临渊羡鱼,不如退而结网。求职者要去实践开发一个完整的系统,功能简单一些都没问题,“小而全”就可以。之所以要强调完整性,是因为这样的工程实践不是做一个课堂作业,而是要可用。

在工程中要从系统全局来思考问题,这样才会将目光放在如何运用一套技术体系来解决问题。做这样的实践时,求职者不必一个人埋头苦干,可以找同学好友一起研究琢磨。如果能找到有经验的专业人士给予指导,则是效果最好的。

九步法做一套系统出来

选取什么样的系统去实现,这个可以根据个人的喜好来。例如微信式的通信软件、单机游戏、信息管理工具等。甚至就做一个大学里最常见的工程作业:学籍管理系统。

选好了要做的工程,接下来最重要的就是一定要自己完成。有太多的理由不去做完这件事了,例如我就想去多面试几次碰碰运气;爸妈催得急,家里坐不住;看到别的同学顺利入职,心里着急,于是就拿别人做的项目过来看上几眼,自认为是学会了……

对于这一点,我也没有别的好办法。我只知道一字一字地手敲一万行代码之后,比没这么做之前要踏实得多,面试时应对各种细节问题也都有把握得多。

下面我就以学籍管理系统为例,分成九个步骤,说明怎么把这个系统做出来。

第一步:分析需求。就是自己想学籍管理应该包含哪些功能,例如可以登记学生信息,可以查询信息,可以修改数据;考试后记录考分,学期末老师填写评语;记录学生的奖惩情况等。

第二步:简单设计。之所以说是简单,因为对于零经验求职者来说,也不可能进行太深入的思考。例如就思考学生信息会包括哪些内容,将这些内容整合到一起形成一个结构。再思考这个结构会具备怎样的行为,这样对数据的操作就出来了。

第三步:技术选型。这时候求职者要对BS或者CS结构有基本的了解,知道实现BS需要web+server+db的方式;而cs则是client(PC/Mobile)+server+db。这一步往往需要求职者进行大量地学习,但不必学到100%,对每一种技术学到核心的20%就可以动手工作了。

至于开发语言,可以是java、php、python、C#等,甚至就用C语言做一个命令行界面的程序也没关系。在这一步里也还要学会使用IDE开发工具,能够编译、调试程序。

第四步:定义核心对象。不要一上来就奔着画UI界面去了,这个工作很吸引人,但对于一套完整的系统来说,并不是最重要的工作。这一步我们已经确定了开发语言,那么就可以在代码编辑器里为系统的核心对象进行定义了。例如学号字段用长整型;姓名字段用字符串;性别用字符型等。

第五步:增加对象的操作。核心对象定义出来了,那必然要对它施加操作,系统才能得以运行。例如学生信息对象有了,那么要增加一个叫张三的学生,代码应该怎么写呢?顺着这样的思路,就可以把新增方法给实现出来了。

接下来还要思考,数据虽然有了,但都在内存里,程序一退出数据就没了,数据怎么保存呢?这样又可以将数据库引入进来了,再编写与数据库通信的代码。

第六步:编译自测。不要写了很多代码之后再去编译并运行看结果。一定要刚好写完一个功能就立即编译并调试结果。代码少的时候,问题也容易排查,这样对增强自己的信心很有好处。

如果求职者会使用单元测试来覆盖业务代码,那就更是加分项了。软件开发的世界里有许多理论与工具,对于零经验者来说可能头绪太过于复杂,所以暂时不会使用单元测试也没关系。不过起码要能通过运行结果判断功能是否正常。

第七步:迭代。当功能一个一个被开发出来时,会发现需要定义新的对象了,这时候就要继续新增对象并增加操作。实际上就是重复第四步到第六步的工作,这也是开发人员在工作时的实际状态。

第八步:绘制UI。这时候终于可以画界面了,之所以将这一步放在最后,是因为所有的核心操作都已经定型。业务逻辑在实现过程中已经得到了反复确认,UI只需要呈现已有的业务逻辑就可以。

第九步:系统测试。所有代码全都写完,这的确是一件值得庆贺的事,但还远未到结束的时刻。求职者要鼓起勇气来不断地测试自己开发的系统,而且要邀请同学或者老师来试用自己的系统。

因为自己的目光里总会有盲区,别人也许很容易就发现系统存在的问题。遇到问题并解决问题,往往是技术成长的捷径。而一套自己开发的系统,能够经受试用检验并被认可,“做中学”的目的也就达到了。

结语

软件开发是一项智力密集型的劳动,要进入这个职业确实存在一定的门槛。如今我在公司面试新人的时候,也不止一次听到他们抱怨说“没经验就没工作,可没工作哪来的经验?”

我总会想起当年自己也发出这样怨言的时候,所以我都会耐心地给他们说一些如何获得经验的方法。虽然不知道我当时的话能给他们提供多大的帮助,但我想他们也应该会思考并做出行动吧。时至今日,我想这些新人们也一定都走上了工作岗位,有了很好的职业发展。

上述的九步法也许并不是很完善,它只是出自于我的个人思考。如果能有人补充完善并提出更好的办法,那真是功德无量的事情。但对于迷茫中的求职者来说,不妨先去尝试一下,起码比什么都不做只是抱怨要强。

我也希望能有更多喜爱软件开发的求职者,能够顺利获得机会并大展鸿图!

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值