前几天一个大学刚毕业的读者给我发私信,说他投了大概四十来份简历,软件开发相关的岗位一个面试通知都没收到。他问我是不是现在这行已经饱和了,新手根本没机会。说实话我当时不知道怎么回他,因为我想起自己刚入行那会儿,也投了小一百份简历,前两个月同样石沉大海。后来我才慢慢搞明白,问题不在行业饱不饱和,而在我到底有没有拿得出手的基础技能。今天咱们就掰扯掰扯,一个新手想干软件开发,到底该先学什么、怎么学。
很多人一听软件开发就觉得是写代码,其实写代码只是其中一环。软件开发这个事情,简单说就是把一个想法变成能用的软件产品的过程。你得先知道用户要什么,然后设计怎么实现,接着才是写代码,写完还得测试、修问题、上线、维护。新手最容易犯的错就是一上来就闷头学语法,学了半天不知道自己学的东西能干嘛。
我的建议是,先花两三天时间,把市面上常见的软件开发流程看一遍。不用深究,知道个大概就行。你就想明白一件事:你写的每一行代码,最终都是要给用户用的。有了这个意识,后面学起来方向感会强很多。
软件开发方向太多了,前端、后端、移动端、嵌入式,每个方向要学的东西不一样。新手最忌讳的就是什么都想学。我当时就是吃了这个亏,今天看网页开发教程,明天翻数据库的书,结果哪个都只学了个皮毛。
选方向有个简单的办法,看你平时用什么东西最多。喜欢捣鼓网页效果的选前端,对数据处理感兴趣的选后端,想做手机应用的选移动端。选定之后至少坚持三个月不要换。工具方面,一台能上网的电脑就够了,开发工具用免费的就行,没必要一开始就花钱买什么高级软件。
提示:新手入门阶段,学习环境越简单越好。别花三天时间配置什么炫酷的开发环境,能写代码能运行就行。
第一个技能是编程语言基础。不管你选什么方向,至少得熟练掌握一门语言。注意我说的是熟练,不是了解。什么叫熟练?就是你能不查资料写出一个完整的、能跑起来的小程序。变量、循环、条件判断、函数这些基本概念,你得闭着眼睛都能写出来。这个阶段大概需要一到两个月,每天至少保证两小时练习。
第二个技能是调试能力。这个我要重点说,因为太多新手不重视。代码写出来报错是家常便饭,关键是你得知道怎么找问题出在哪。学会看错误提示,学会在代码里打印中间结果,学会用开发工具一步步跟踪代码执行。这个技能比多背几个语法点重要十倍。我见过太多人一报错就懵,然后到处问人,其实错误提示里写得清清楚楚。
第三个技能是版本管理。说白了就是学会用工具记录你代码的每一次改动。别觉得自己一个人写代码用不上,等你改了半天发现改错了想退回去的时候,就知道有多重要了。现在常用的版本管理工具学起来很快,花个半天时间就能掌握基本操作,这绝对是性价比最高的投入。
第四个技能是数据库基础。哪怕你做前端,也难免要跟数据打交道。知道数据怎么存、怎么取、怎么关联,这是软件开发的基本功。不用学太深,会写常用的增删改查语句就行。这个大概花两周时间就能入门。
大部分日常开发工作用到的数学就是加减乘除和简单的逻辑判断。除非你做算法、图形学或者数据分析这些专门方向,否则不需要高深的数学知识。别被这个吓住了。
学完基础之后,你需要一个项目来检验自己。别做那种烂大街的什么计算器、待办事项列表。我建议你从自己的实际需求出发。比如你爱看电影,就做一个简单的电影记录工具,能添加、查询、标记已看。功能不用多,但每个功能你得从界面到数据存储完整实现一遍。
做项目的过程中你会遇到无数问题,这才是真正学习的时候。遇到问题先自己查资料想办法解决,实在搞不定再去问人。一个完整的项目做下来,比你被动看十个小时的视频教程管用得多。这个作品以后你面试的时候也能拿出来展示,比空口说会什么什么有说服力。
至于需要多久才能达到找工作的水平,这个真不好说。有人全职学三个月就找到了,有人边工作边学花了大半年。我自己是花了大概五个月,而且前两个月基本是在走弯路。所以如果你现在进展慢,也别太焦虑,方向对了就不怕路远。
说到底,软件开发这行的入门门槛其实不在智商,而在你能不能坚持把基础打牢、能不能耐着性子解决一个个具体问题。我那个读者后来按我说的调整了学习计划,前几天告诉我拿到一个实习机会了。当然实习只是开始,后面还有得学呢。你打算从哪个方向入手,或者正在学什么,遇到了什么卡住的地方,欢迎留言聊聊。