前几天一个做设计的朋友突然问我,说想转行做软件开发,问我该从哪儿下手。我当时愣了一下,因为这个问题我被问过太多次了,但每次回答完,对方基本上都是三天热度就放弃了。说实话,不是他们不够聪明,而是市面上大部分的入门建议都太"标准"了,什么先学计算机原理、再学数据结构、然后刷算法题,这套路对于非科班出身的人来说,简直就是劝退指南。
我自己也是半路出家,踩过的坑不比谁少。所以今天想换个角度聊聊,如果你真的想入门软件开发,到底应该先抓哪些东西。
很多人一上来就说"我要学编程",但编程这个词太大了。你是想做网站前端、后端服务、手机应用,还是数据分析、自动化脚本?方向不同,需要掌握的基础知识差别很大。
我记得自己当年就是没搞清楚这个,买了一堆书,有网页设计的、有数据库的、还有手机开发的,结果每本翻了前三章就搁灰了。后来一个前辈跟我说,你先选一个方向,花两周时间只碰这一个东西,做出来一个小玩意儿,不管多丑。这句话点醒了我。
如果你实在不知道选哪个,我建议从网站开发入手。因为它反馈快,你写完代码刷新浏览器就能看到效果,这种即时满足感对新手特别重要。
不管你选哪个方向,有三样东西是躲不掉的。
第一是逻辑思维。说白了就是你能不能把一件复杂的事情拆成一步一步的操作。比如"把大象放进冰箱"这个老梗,你得分三步走:打开门、放进去、关上门。写代码就是这个道理,你得学会把需求拆解成机器能执行的步骤。这个能力跟数学好不好关系不大,更多是练出来的。
第二是调试能力。代码写错了怎么办?你得会找问题。新手最怕看到报错信息,一看到红色警告就慌了。其实报错信息是好东西,它在告诉你哪里出了问题。我刚开始的时候连报错都不看,直接去问别人,后来被骂了几次才学会自己先读三遍错误提示。
第三是查资料的能力。这个可能比前两个还重要。你遇到的大部分问题,网上都有人遇到过。能不能用搜索引擎精准描述你的问题,能不能快速判断哪个答案靠谱,这直接决定了你的学习效率。
提示:如果你英文不太好,刚开始可以只看中文资料,但等你入门之后,一定要慢慢习惯看英文文档。最新的技术资料基本都是英文的,翻译版本通常滞后很久。
关于第一门编程语言学什么,网上能吵翻天。我的建议很简单:看你的方向。想做网页前端就学网页脚本语言,想做后端可以选通用型语言,想做数据分析就学统计计算类的语言。别纠结哪个"最好",对于一个新手来说,能让你最快做出东西的语言就是最好的。
我最开始学的时候选了一门公认"优雅"但门槛高的语言,结果两个月都没做出一个像样的东西,差点放弃。后来换了一门上手简单的,一周就写了个小工具,那种成就感一下子就把我拉回来了。
不要贪多,一门语言学扎实了,再学第二门会快很多。因为编程的核心概念是相通的,变量、循环、条件判断、函数这些,换到哪门语言都一样。
我见过太多人,教程看了一大堆,笔记记了好几本,但一让上手写就懵了。编程这件事,看一百遍不如自己敲一遍。哪怕你是照着教程抄代码,也要自己动手敲,因为在敲的过程中你会遇到各种小问题,而解决这些小问题的过程才是真正学东西的时候。
给自己定个小目标,比如做一个简单的待办事项列表、一个计算器、或者一个个人主页。项目不用大,能跑起来就行。做的过程中你自然会遇到问题,带着问题去查、去问,这样学到的知识才是活的。
能。绝大部分日常开发工作用到的数学知识不超过初中水平。只有做算法、图形学、机器学习这些特定方向才需要比较强的数学功底。刚开始入门完全不用被数学吓住。
这个真不好说。有人全职学习三到六个月就能入职,有人边工作边学花了一年多。关键看你每天能投入多少有效时间,以及有没有做出能拿得出手的项目。别跟别人比进度,跟自己比就行。
说了这么多,其实入门软件开发最大的门槛不是智商,也不是基础,而是你能不能坚持下去。我见过太多聪明人半途而废,也见过不少"笨人"靠笨功夫熬出了头。如果你现在还在犹豫要不要开始,我的建议是先动手写一行代码,哪怕就是让屏幕上显示一句话。开始了,后面的路自然会慢慢清晰。