前几天一个做行政的朋友给我打电话,说她想转行做软件开发,问我有没有什么速成的路子。我问她为什么突然想学这个,她说刷短视频看到有人学了几个月就月薪过万,心动了。我跟她说,这事能成,但绝对不是什么速成班能解决的,我自己当年就走过不少弯路,花了差不多大半年才真正摸到门道。
说实话,市面上讲软件开发学习路线的内容太多了,但大部分要么是培训机构画的饼,要么是技术大牛站在高处讲一些新手根本听不懂的东西。我今天想从一个普通人的角度,把这条路线重新捋一遍。核心就两条线:一条是技术能力怎么一步步搭起来,另一条是你怎么知道自己真的学会了。
我见过太多新手一上来就纠结学哪个语言,是学网页开发还是学手机应用开发。这个纠结本身没错,但纠结太久就变成了拖延。我记得我刚开始的时候,光是选语言学就花了两个礼拜,今天看别人说这个好,明天看别人说那个有前途,结果啥也没学进去。
后来我一个做技术总监的老乡跟我说了一句话,我到现在都记得。他说你不管学什么,先用一个东西做出一个能跑起来的小玩意儿再说。哪怕是个计算器,哪怕是个记事本。这句话点醒了我。我选了一个方向,花了大概三周时间,做了一个特别简陋的待办事项小工具。代码写得一塌糊涂,但当我第一次看到自己写的东西能在浏览器里点来点去的时候,那种感觉真的不一样。
所以技术路线的第一段,我建议你花两到三周,集中精力只做一件事:了解最基本的变量、条件判断、循环这些概念,然后用它们做出一个最小的东西。不要贪多,不要同时看三套教程。这个阶段的目标不是学得多深,而是让自己相信我能做出东西来。
接下来进入第二阶段,大概需要一到两个月。这时候你要开始理解数据是怎么组织和流转的。简单说就是学会用代码去处理一批数据,比如从一堆用户信息里找出符合条件的人,或者把一组数字按照大小排好序。这个阶段你会接触到函数、数据结构这些东西。我当时的笨办法是每天逼自己写一个小练习,比如统计一段文字里每个字出现了多少次。写了大概四十来个练习之后,突然有一天就开窍了。
第三阶段就是真正做项目了。这个阶段没有固定的时间表,因为每个人的节奏不一样。我的建议是找三个类型的项目各做一个:一个纯展示型的,比如个人主页;一个带交互的,比如在线问卷;还有一个带数据存储的,比如简单的记账本。做完这三个,你对软件开发的基本流程就有感觉了。
提示:做项目的时候一定会卡住,这太正常了。我第一个项目卡在一个特别蠢的地方,按钮点击了没反应,查了两个小时才发现是名字写错了一个字母。这种错误每个新手都会犯,别觉得自己笨。
这个问题其实比技术本身更重要。很多人学了半天,跟着教程能敲出来,关掉教程就懵了。我自己也有过这个阶段,那段时间特别沮丧,觉得自己是不是不适合干这个。
后来我发现了一个特别简单的检验方法:能不能把这个东西讲给别人听。不是照着笔记念,而是用自己的话,把一个功能的实现思路说清楚。比如你做了一个登录功能,你能不能跟别人说清楚用户输入密码之后,到你确认登录成功,这中间发生了哪些事。如果能说清楚,那你就是真懂了。如果说着说着自己都绕进去了,那就是还没通。
还有一个办法就是改需求。你自己做的东西,试着加一个小功能,或者改一下原来的逻辑。如果你能比较顺利地改出来,说明你对代码是有掌控力的。如果改一个地方崩三个地方,那说明底子还不牢。
大部分日常开发用到的数学真的不多,加减乘除加上一点逻辑判断就够了。除非你要做算法或者图形处理相关的方向,那确实需要补数学。我数学就一般,高考勉强及格,但不影响我做普通的项目开发。
最后我想说的是,软件开发这件事,入门真的不难,难的是持续做下去。我见过太多人学了三个礼拜就放弃了,也见过学了半年还在原地打转的。区别不在于聪明不聪明,而在于有没有真的动手去写。你看一百个小时的视频,不如自己动手写十个小时的代码。这个道理听起来像废话,但真正做到的人太少了。
我现在也还在学新的东西,有时候也会卡住,也会烦躁。上周我就因为一个环境配置的问题折腾了一下午,最后发现是版本不匹配。你说气不气人。但这就是这个行业的日常,习惯了就好。