本文已独家授权给刘欣老师的《码农翻身》公众号,谢绝任何媒体和公众号转载,违者必究。

大多数大学生接触的第一门编程课便是C语言,这对于一个完全不懂计算机的人可能是噩梦。不少人初次上C语言课都会被指针绕得晕头转向,然而大部分编程工作并不需要你关心指针的使用。此外,C语言对可视化编程并不友好,用C语言编写图形化界面十分繁琐。在这种情况下,很多大学生都会问C语言能做什么?

C语言看似简单,实则无比强大,它主要的用途是系统级编程,操作系统,数据库,编译器,虚拟机等等,可是,并不是每个人都愿意去尝试或者有机会接触。这会导致大多数人学了C语言并没有多少成就感和兴趣,甚至因为这门课怀疑自己能不能学好编程,或者拿到计算机专业的毕业证。

事实上,这样想是多虑的。并不是每个计算机专业的学生将来都要去搞操作系统,编译器或嵌入式开发,应用型人才大有可为。你完全可以先从应用层入手,获得成就感和兴趣,再深入钻研底层开发。

在我眼里,编程是世界上最好的工作。既可以凭此获得报酬,还可作为兴趣爱好,享受解决问题的那种成就感。所以,当你第一次学编程或者对编程开始失去兴趣时,不妨从Web入手,先做一个网站。Web开发所用到的语言大多数都是所见即所得类型,学了马上可以做出一个可视化的作品,很有成就感。

Web开发是最简单的,而且开发语言也多种多样,比如JavaScript、PHP、JAVA、Ruby、Python等。互联网上关于Web开发的学习资料是最多最丰富的,大多数问题都可以通过搜索引擎找到解决方案。这对初学者十分友好,降低了编程的挫折感。尽管受到移动互联网的冲击,但不可否认,网站是互联网最普遍的应用形式,并将长期存在下去。如果你想做Web开发,Just do it!

Web开发分为前后端,前端包括HTML、CSS和JavaScript等,后端包括Node.js、JAVA、Python、PHP、Ruby等。如果你想做一个静态网站,只需要学习前端技术即可。前端技术本身难度不大,但浏览器适配和响应式布局稍微有点棘手。初学者完全不必理会,先做出一个静态网站即可。当你做出第一版静态网站时,你一定会兴奋,因为这是你自己的作品。

网站做好后,你可能想更新网站内容,但手动更新又比较麻烦。这时你可以选择一门简单的后端语言,尝试下服务器搭建、前后端数据交互和Linux命令行操作等等。后端技术优先推荐Python、PHP和JAVA,三者选其一即可。人生苦短,我用Python。Python内置了大量丰富的函数供你直接调用,有些语言写很多行的函数,Python一行代码搞定。此外,Python作为程序员必备的脚本语言,在爬虫、科学计算、AI等领域也很出彩。利用这个机会学习下,技多不压身。

除了Python,PHP效率也不低。作为世界上最好的语言(:-D),PHP为Web而生,PHP可以直接嵌入HTML标签,十分方便。经典的LAMP或者LNMP搭配更是世界上绝大多数网站的标配(L:Linux,A:Apache,N:Nginx,M:MySql,P:PHP)。最后推荐的当属老大哥JAVA,在国内可能就JAVA程序员最多了,所以学了就业肯定不愁。不过,JAVA的难度要Python和PHP稍高点。

学了后端语言后,你可以做一个动态网站了。不过,还差一个数据库,推荐MySQL。如果你不想学SQL语句,可以寻找后端语言对应的MySQL图形管理应用。但是,当你的数据量较大或者经常存取数据时,建议学习下基本的SQL语句以提高效率。当你前端和后端都学完了,你就可以随性所欲的做你想做的网站。做出来后,记得分享给你的好友和家人,他们的鼓励是你前进的动力。

这就完了吗?万里长征才刚踏出第一步。

为什么我的网站这么慢?可能是因为前端静态资源CSS或者JavaScript太大或者加载方式不对。你得学习下代码优化、静态资源压缩打包和页面渲染原理吧。为什么查询数据怎么慢?你得学习下数据库优化吧。有小伙伴想和你一起开发网站,怎么让别人快速看懂你的代码?你得学习下代码模块化(低耦合,高内聚)和接口设计吧。为了使你网站稳定,你还会遇到很多问题。但通过前面学习,相信你已经学会了如何独立排查和解决问题了。独立解决问题的能力是程序员最基本的能力之一。

网站稳定了,你可能想设计出类似于热门内容和推荐内容等。一看需要用到排序算法和推荐算法,恍然大悟,数据结构和线性代数被你学成了狗屎。不停的责骂自己,当年上课的时候干啥去了。不要着急,相信你现在回头再去看时,一定能学进去。因为学了,你马上就可以用。现在你终于明白,数据结构中的时空复杂度、线性表、栈和队列、树、图、排序和查找是怎么用的。

诶,课本里的C代码怎么和我写的Python和JAVA这么相似。仔细搜索发现,C语言才是这些语言的祖师爷。顿时心生悔意,要是当年好好学C语言,现在也不会这么吃力。种一棵树,最好的是十年前,其次是现在。赶紧学吧,少年!现在网站也像模像样了,想知道浏览器怎么运行的吗?HTTP协议是啥?不用搜了,赶紧回去看计算机网络,”三次握手”必须烂熟于心。

终于有一天,服务器死机了。这下你得学习下服务器运维,了解下服务器工作原理吧。世界上绝大多数服务器系统都是Linux,Linux系统你得学习下吧。多线程多进程貌似见过?你已经学过了,就在操作系统那本书里,老师讲的时候你没认真听。这下你恍然大悟,原来学校里的课是有用的,只是自己没发现。这样你又回去把计算机组成原理和微机接口原理复习了下,了解了Byte和Bit的区别,了解了二进制编码,了解了汇编语言等等。

大道至简,心中有剑于无形。现在你明白了,编程语言只是术,而计算机基础课才是心法。万变不离其宗,你不再恐惧编程,也不再把自己限定在某一种语言。你开始不满足于只做网站,你想做APP、游戏、编译器或嵌入式开发等。通过之前的学习,你学会了如何用项目去驱动学习,学会了独立解决问题,学会了快速上手一门编程语言,学会了前后端如何交互等等。即使你以后不做Web开发,这些能力都是通用的,伴随你一生。

现在,恭喜你,你已经是一名软件工程师了!