2022年6月9日更新:由于简书平台长期失修,以及百度网盘误封视频,本文很多链接已经失效。本文写于2017年,距今已有五年多了。计算机技术日新月异,Web的前端和后端技术似乎早已过时,Java、C#也更新了很多次。今天看这篇文章的同学,不必拘泥于文中介绍的具体教程,了解整体思路即可。急需帮助的朋友,可以给我发私信,或者把你的问题或困惑发到我的邮箱,我会尽力解答你的问题。
我的最新文章将会发布在知乎账号王金格,欢迎大家关注。
本文献给那些立志成为优秀程序员,但又不知道从何开始的朋友。
编程从来不是一件无聊的事情,相反,它会给你带来无尽的快乐,它是一种创造事物的快乐,就像上帝创造了世间万物,在代码的世界里,你就是无所不能的创造者。
但如何尽快上手是大多数新手最关心的问题,本文就来聊聊编程入门的学习路径。
本文适合打算从事软件开发的人和还没有明确目标的学生。
如果你符合以上两点中的任何一点,那么请你耐心看完这篇文章,保证对你有很大的帮助。
看到很多文章推荐教程,列举了很多参考书,并不适合初学者。学习编程需要一步一个脚印,只有循序渐进才能熟练掌握。我个人认为没有理解能力差的同学,只有写得晦涩难懂的书。只要有好的学习方法,每个人都可以轻松学会编程。
因此本文只推荐每种技术最好的教程,这些教程一定既有深度又有趣,你一定会爱上看。推荐的教程(包括书籍和视频)大部分都是我在学习过程中学到的,经过对比发现,有些老师的讲课就像相声一样幽默,这才是真正的教育与娱乐相结合之道。
不用多说,让我们开始做正事吧。
1.技术路线介绍
本节仅介绍纯IT领域的技术路线,不考虑更先进的技术(例如计算机视觉,机器学习,人工智能等)。
技术路线是一条通往行业的路径,掌握了这条路径上的所有技术,就具备了在行业中工作的能力。因此,我们可以从各个公司的招聘岗位中找到技术路线的分类。
目前主要的软件开发技术路线有:Web后端、Web前端、iOS、客户端、数据库、嵌入式等等,在本节中我们会对这些技术路线进行简单的一一介绍,具体的学习内容我们会放在后面的章节中进行详细讲解。
1. Web 后端
这是当今互联网浪潮中软件开发的主力军,几乎所有的互联网公司提供的都是基于Web的服务(相对于基于客户端的服务而言),而这些服务的核心就在Web后端,也就是服务器端。
相对于Web前端来说,后端程序运行在服务器上,看不见摸不着,却起着至关重要的作用。我们日常生活中用百度搜索、发新浪微博、看腾讯视频、上淘宝购物,这些功能都是由后端程序实现的。
Web后端编程根据编程语言的不同可以分为几类:Java、PHP、Node.js。
Java 是一门古老的编程语言,在 Web 后端使用已有很长时间。由于 Java 代码通常结构清晰,可扩展性强,适合开发大型 Web 项目。例如,淘宝就是使用 Java 开发的。
PHP 是专门用于 Web 后端的脚本语言,简单易用,适合小型 Web 项目。
Node.js是一门新兴的技术,使用语言来开发后端,轻量,高效,性能好。
除了以上三种主流技术之外,Ruby on Rails、ASP.NET也可以用于后端开发,但是并不常用,本文不再赘述。
2. Web 前端
Web前端是一个大一统的世界,也就是我们常说的HTML+CSS+,而目前最新的版本是HTML5+CSS3+。因此,前端程序员只要学好这三门语言,就能成就大事。
3.
在移动互联网时代,成为使用最广泛的移动操作系统,自然需要大量的开发者,与Java Web类似,开发也是用Java语言。
4. iOS
iOS 是苹果手机的操作系统,自推出以来就受到全球市场的追捧,iOS 开发的需求量也很大,薪资水平通常也高于其他程序。iOS 以前是使用 C 语言开发的,近几年苹果发布了新的编程语言 Swift 语言,逐渐取代了 C 语言,成为 iOS 系统的主流开发语言。
5. 客户端
操作系统几乎已经占据了个人电脑的大部分市场,而客户端编程就是为你的个人电脑编写桌面应用程序。我们日常生活中使用的应用程序,比如电脑版的QQ,迅雷视频等,都属于这一类。
虽然我们每天都在使用客户端程序,但是随着云计算的日益发展,客户端已经不再是各个互联网公司首先考虑的平台,客户端相对于Web来说过于繁琐,无法及时更新,如果是可以通过浏览器提供的服务,就没必要考虑开发客户端软件,只有计算量和数据量非常大的软件才需要开发客户端版本,因此客户端开发岗位需求量并不大,主要集中在专业软件领域,比如各种图像处理软件的开发,软件编程IDE,大型企业内部管理系统等。
客户端开发常见的技术有:、Qt。
它是微软官方提供的客户端软件开发框架,采用C#语言编写,属于.NET框架的一部分,使用该开发程序非常方便、快捷。
Qt是一个跨平台的软件开发框架,一套程序可以同时运行在、Linux、、iOS、Phone等主流操作系统上,功能非常强大,对于想要开发跨平台客户端的公司来说,使用Qt确实可以省去不少麻烦,Qt主要使用C++语言来实现功能,也可以选择使用QML语言来描述界面。
除了这两种技术之外,还有MFC和WPF。MFC是微软早期的客户端框架,由于年代久远,开发效率低,现在用的不多了。WPF是微软推出的比较好的客户端框架,但由于推广不力,至今都没有得到广泛的应用。因此本文不对这两种技术进行讨论。
6.数据库
数据库开发作为一条单独的技术路线显得有些单薄,但是既然各大互联网公司都有数据库工程师的职位,所以还是单独列出来比较好。
说实话我对数据库技术路线不是很熟悉,按照我的理解应该是针对公司使用某个数据库系统,比如说做相关的开发和性能优化。
7.嵌入式
嵌入式开发比较底层,似乎离IT越来越远,但考虑到物联网的日益普及,嵌入式将迎来新的高潮。
如果有些术语不懂,请在评论中询问,或者百度搜索,或者干脆不说,毕竟作为编程初学者,这些技术路线可能不太容易理解。所以继续阅读吧,当你积累了足够的知识后,你自然会理解这些概念。本节只对这些技术路线做了简单的介绍。下一节我们开始学习之旅吧。
2.编程语言
作为一个什么都不会的菜鸟,学习编程的第一步当然是掌握一门编程语言,本节将介绍常见编程语言的学习路线。
首先我要明确一点,作为一名程序员,只懂一门编程语言是远远不够的,最好是精通1~2门语言,对其他所有常用语言都有基本的掌握。这个听起来可能有点吓人,其实不然。因为大部分编程语言都很类似,比如C、C++、C#、Java这些都可以称为类C语言,都是从C语言一步步拓展而来,掌握了其中一门,其他的就很容易掌握,应用可以举一反三。
1.C语言
信息技术专业的大学生,一般在大学一年级会选修C语言课程,这也可能是他们在大学期间选修的唯一一门编程语言课程。俗话说,老师可以领你进门,但实践出真知,学了C语言,就可以进入编程世界的大门,这话说得再贴切不过了。虽然有人主张学C语言作为第一门编程语言,但我觉得那太浮躁了,一开始还是要打好基础,不要追求炫酷的效果。C语言是一门高级语言,和计算机硬件也息息相关,通过指针操作可以真切感受到数据的流动,这是不可能做到的。所以我的建议是,不管你将来打算走哪条技术路线,C语言一定是你学的第一门语言。
可惜的是,由于我是在课堂上学习 C 语言的,所以对这方面的优秀教材了解不多。无论是学校里用的各种版本的《C 语言程序设计》,还是《The C》,都太枯燥了。据说有一本科普书叫《啊哈哈 C》,非常通俗易懂。请评论是否属实。也希望有其他好的教程可以帮我补充。
2.C#
很多人在学习了C语言之后,都会对C语言到底能干什么产生疑虑,如果这种疑虑不及时消除,恐怕大多数人都会失去继续学习的信心。然而C语言的使用对于初学者来说,是很难体会到的。所以接下来就要转向C语言的增强版——C#语言(读音:C sharp)。
C#是微软推出的一门面向对象的编程语言,“面向对象”将会是伴随程序员一生的一个词,所以从现在开始,我们应该时刻努力去理解:什么是面向对象。
简单来说,面向对象是相对于面向过程而言的,C语言是典型的面向过程的语言,因为C程序的执行流程可以很方便的通过画流程图来表示,强调程序员面向程序执行过程。C#是典型的面向对象语言,C#程序的执行过程通常很难用流程图来表示,这是因为程序员在写C#程序的时候,并没有考虑从头到尾的一个完整的过程,执行过程不是对象之间的调用关系。
虽然我已经尽力了,但上面这段话肯定不能让初学者真正理解面向过程和面向对象的关系。不过没关系,编程思想从来都不是纸上谈兵,必须充分实践才能领悟。
幸好我收集了一套完整的C#视频教程,以及后续的视频教程,学完这两个,对面向对象编程就会有一定的了解,虽然以后不一定从事客户端开发,但学这个会是一个好的开始,这两个内容可以帮助你更好的理解后续更深层次的Java Web和。看视频的时候一定要记在电脑上,这样才能记的深刻。
以下是视频教程链接:
C# 基本密码:87w5
密码:y6o1。这个视频可能是我见过的最有趣的视频,希望你不要错过。
3. Java(建议熟练掌握)
如果你先学了 C#,再学了 Java,就会发现两者惊人的相似。Java 在难度上和 C# 一样简单(甚至更简单),但用途却比 C# 广泛得多。这很大程度上得益于 Java 的跨平台特性,也让 Java 成为 Web 项目中的主力军。
推荐视频教程:
【传智播客黑马训练营Java基础】
地址1 官方网站
地址2 百度网盘 密码:fvvw
4. C++(建议熟练掌握)
并不是每个学生都需要学习 C++,掌握 Java 或 C++ 之一就足够了。不过,C++ 和 Java 并不是功能重复的编程语言,相反,它们主宰着各自的领域,就像 Java 主宰着 Web 领域一样。C++ 则主宰着对性能敏感的基础设施、视频图像处理等领域。掌握 Java 或 C++ 并不容易(尤其是 C++,它被认为是最难的编程语言),因此你可以选择其中之一。
我还没有找到任何好的 C++ 视频教程,所以我需要你的帮助和建议。不过有一些不错的书,比如《C++》,值得一读。
5.(建议熟练掌握)
它是前端开发的利器,对于前端工程师来说,掌握它是必须的,近些年甚至蔓延到了后端编程,以 Node.js 为代表的后端框架让它成为了一门全能型的编程语言,很有可能一统业界。
这是一门建议精通的语言,和Java、C++一样,当然这个要求只针对前端工程师,后端工程师不用花太多精力在这上面。
推荐教程:
【】HTML+CSS基础课程
【】入门
【】 进阶
【廖雪峰】教程
5.(可选)
它是近年来越来越流行的一种编程语言,随着众多库的出现,它在科学计算、Web、大数据、机器学习等领域展现出了惊人的实力。
和Java类似,它也是一门优秀的面向对象编程语言,而且更加简洁。但这不是重点。与前面所有的语言不同,它是一种动态类型语言。
上面提到的四种语言 C、C#、Java、C++ 都是静态类型语言,需要通过一种叫做“编译器”的东西把源代码编译成机器码,才能在计算机上运行。因此,必须事先指定所有变量,比如通常的写法
int i = 0;
变量i是预先指定为int类型的,因此被称为静态类型语言,即类型是静态的,不可改变。
动态类型语言,代表为
i = 0;
i = "Hello";
不需要指定变量的类型,随时可以给它赋不同类型的值,这就是动态类型语言的特点,这样方便很多,但代价就是代码需要在解释器上运行,而不是直接在 CPU 上运行,因此执行效率会低很多,这也是为什么通常说动态语言比静态语言“慢”的原因。
有了前面几门语言的基础,学习是一件很简单的事情,所以就不用推荐教程了,直接在网上搜一个介绍语法的博客就可以了。
6. PHP(可选)
程序员中间流传着这样一句话:“PHP是世界上最好的编程语言”。从这句话一出口,编程语言界就掀起了一阵腥风血雨。以至于PHP似乎已经成为了世界上最好的编程语言。语言的敌人,PHP遭到了人们的攻击。然而,它却在如此艰难的环境中生存了下来,并占据了Web市场的很大一部分。只能说PHP有其强大的优势。在开发Web项目时,PHP是非常快速和轻量级的。一种可以通过嵌入HTML来运行的脚本语言。因此,小型公司可以轻松地使用PHP来构建自己的Web业务。但是,当Web项目的规模达到一定程度时,PHP就有些力不从心了,需要像Java这样的重量级Web框架才能支撑。因此,根据应用场景选择合适的技术才是最重要的。
PHP 教程尚待发现...
7. Lisp
Lisp 是一门古老的语言,古老到大多数人早已忘记了它的存在。我也是近两年才了解到这门编程语言的。历史上消失的编程语言不计其数,但它在五十年之后依然活跃。能用在人工智能领域的语言寥寥无几,Lisp 就是其中之一。1958 年,人工智能先驱 John 发明了 Lisp 语言来解决人工智能领域的问题,比 C 语言的发明早了 14 年。但是,Lisp 所蕴含的编程思想比现在最流行的语言要早几十年。看看《黑客与画家》的作者、硅谷创业之父 Paul 是怎么说的
如果我们把流行的编程语言按照这样的顺序进行排序:Java、Perl、Ruby,你会发现,越晚出现的语言,越像 Lisp。
它模仿 Lisp,甚至包括许多 Lisp 黑客认为是设计错误的功能。至于 Ruby,如果你在 1975 年声称它是 Lisp 方言,没有人会反对。
现在的编程语言的发展,刚好赶上1958年Lisp语言的水平。
——“Lisp 为何如此先进?” Paul
我之所以在这里提到 Lisp 语言,并不是因为它有多好用(其实 Lisp 并没有太多的实际应用),而是因为它蕴含着强大的编程理念,一种与 C 系列语言完全不同的理念。我对 Lisp 的了解,或许一点儿也不,仅限于道听途说,先是通过王音的博客,后来又通过《黑客与画家》,这两位大师对 Lisp 的大力推荐,让我很想做点尝试。可惜一直没能抽出时间专心研究,网上关于 Lisp 的参考资料也非常少。目前,最流行的两种 Lisp 方言就是 Lisp 和 Lisp,有兴趣的朋友可以关注一下,如果碰到好的教程,也可以分享给大家。
8. 其他语言
还有一些并不是那么广泛使用但在特定领域却非常流行的语言,比如C、Ruby、Go等,它们都有着各自不可替代的作用,不过在初始阶段,你不必太关注这些小众语言,因为从上面说的热门语言切换到这些小众语言是很容易的。
3. 计算机基础
现在学习计算机基础知识还晚吗?
当然不是,现在才刚刚开始,有了上面的编程基础,我们才能深入学习计算机体系结构、操作系统、计算机网络、算法等知识,这些知识虽然不能像编程那样看到实际的效果,但却是提高水平的关键。
1. 计算机架构
计算机架构告诉我们计算机是由哪些硬件构成的,它们各自完成哪些任务,以及它们如何组合成一个有机整体。它们是物理上实实在在的东西,相当于计算机的骨架,支撑着其上的软件系统。
对于程序员来说,这部分知识不需要太深入,我推荐一本必读的书:
《深入理解计算机系统》E.,David R. O'
我推荐阅读英文版,因为读完这本书后我深深感受到英文可以写得如此简单易懂,甚至有些我觉得用中文无法解释清楚的东西。
最好买纸质版,这样可以多做笔记,以后需要的时候再查阅。如果经济不允许,也可以从这里下载电子版,但扫描质量很差,可能会影响阅读心情。
我在阅读《深入理解计算机系统》这本书的过程中写了一系列博客,欢迎分享你的想法~
2.操作系统
操作系统是计算机上运行的最重要的系统软件,它在计算机开机时开始运行,在计算机关机时结束。操作系统对于在其上运行的应用软件至关重要,这也导致了Linux两大派系长达百年之争。应该不难理解,学习操作系统可以帮助你更高效地开发应用程序。
有关操作系统的课程尚未添加。
3.计算机网络
互联网是这个时代最伟大的发明,学好计算机网络才能胜任未来的工作,因为这些工作都和互联网有关。
推荐一套计算机网络视频教程:
美合制作《六个月成为网络高手》
本教程内容非常丰富,讲解也非常详细,只要你耐心看完整个教程,就能看到计算机网络的精髓。
4.算法
算法无疑是程序员的基本功。推荐书籍:
算法简介
这本书介绍的算法很全面,如果你认真看完并且自己去练习每一个算法,一定会收获颇丰。
5. 其他
其他的计算机基础知识,比如数据库技术、计算机图形学、多处理器编程、网络与信息安全等也都是值得学习的,但每个人的精力有限,没必要全部掌握,可以选择自己感兴趣的部分进行局部强化。
4. Java Web 后端开发
学习完第2、3节提到的知识,基本上就可以称得上是一名合格的程序员了,接下来就是根据市场情况选择一门专长技术,准备进入找工作阶段了。
第一部可以称为《九阳神功》,修炼的是内功,第二部则是《九阴真经》,是征战沙场的利器,两者相辅相成,缺一不可。
这一节先从后端开发开始讲起,第一节我们讲了三种主流的后端开发方式:Java Web、PHP、Node.js,三者思路是一样的,只是实现方式不同,我主要以 Java Web 为例。
从简单的C语言控制台程序到形式应用程序,我们接触到的软件形态越来越多,越来越复杂,Web应用程序和前面两种完全不一样,我们习惯的软件都是通过一个Setup.exe安装包安装到电脑上的,所以叫客户端,而对于其他软件,比如百度搜索、腾讯新闻、淘宝等,我们习惯叫它们网站,但其实它们也是软件,叫做Web应用程序,是运行在服务器(服务器就是放在机房里的高性能计算机)上,通过浏览器供用户访问的软件。
我们首先需要了解Web程序的工作原理,为什么用户可以通过浏览器访问运行在服务器上的程序?它们是如何利用HTTP协议进行通信的?用户数据存在哪里?了解了这些基本逻辑之后,我们就可以学习如何编写程序来实现我们所需的功能。
推荐一套Java Web视频教程:
《黑马程序员30天轻松精通》
链接:密码:93kt
完成本教程后,你将能够开发简单的网站,但不足以满足实际工作的需要。
为了提高开发效率,市面上出现了很多优秀的开源Web框架。在Java Web领域,主要有三大框架——、和,它们为开发者提供了很多便利,基本是Java Web程序的标配。三大框架可以更深入的了解如何设计软件架构,例如MVC、IOC等。
推荐视频教程:
《视频教程》链接:密码:ey64
《视频教程》链接:密码:05ij
《视频教程》链接:密码:if0e
需要提醒大家的是,Web技术发展迅速,各种框架层出不穷,即便是三大框架也终有一天会过时(似乎大部分互联网公司都已经转向更轻量更高效的框架了)。我们学习不是为了使用某个工具,而是要掌握它们的设计思想。当你掌握了三大框架的设计理念,相信在面对其他新兴框架的时候,你也能很容易地透过现象看本质,找到共通之处。
5. Web 前端
Web前端和Web后端共同完成整个Web项目的开发,前后端分离也是Web软件最好的设计理念。
前端需要使用HTML语言来制作网页,用CSS来描述网页的样式,用CSS来为网页提供动态特性,这些技术在第2节中已经给出了教程,很容易掌握,在逻辑上也不像后端程序那么复杂。
但前端技术不止于此,和后端类似,前端框架层出不穷,数不胜数,如今各种流行的框架如React、.js、Vue.js等都需要我们多去尝试,多去深入了解,才能明白为什么需要这些框架,能帮我们做什么。对每个框架都有了基本的了解,在选择技术的时候才能安心。由于本人前端水平有限,就不做过多的推荐了,有一篇很不错的文章推荐给大家:
前端工程 - 基础知识
六,
经过近几年的快速发展,已经成为了全球最优秀的手机操作系统,并且依然生机勃勃。学习主要就是学习如何使用SDK提供的API来实现各种功能,深入了解的运行机制。
推荐一本参考书:
郭林的《第一行代码》
这本书思路清晰,讲解生动,很适合初学者阅读,有了这些基础,真正做实际项目的时候,会遇到更多实际问题,比如图片缓存,界面卡顿,屏幕适配等等,这时候你只需要针对性的去寻找解决方案,或者利用现有的开发框架,你的经验就会慢慢增加。
7. 成为编程专家
这篇文章从开始写到现在已经有好几个月了,很多次都想停下来,但最后还是写完了。我经常感到惭愧,因为我并不是编程界的大佬,但我却敢于写出这样一篇博文。如果你已经读到这里,请谨慎对待本文中的所有文字。这里没有任何真理,只是我的一些分享,可能并不适合所有人。
当然,对于如何成为一名编程专家,我没有经验。但是,经过多年的探索,我想给你一些具体的建议:
最后祝大家在技术的道路上勇敢前行,成为编程高手!
8. 特别推荐:参考资料
Java在实际生活中有哪些项目应用?
Lisp 为何如此先进?(翻译)Paul
扫一扫在手机端查看
我们凭借多年的网站建设经验,坚持以“帮助中小企业实现网络营销化”为宗旨,累计为4000多家客户提供品质建站服务,得到了客户的一致好评。如果您有网站建设、网站改版、域名注册、主机空间、手机网站建设、网站备案等方面的需求,请立即点击咨询我们或拨打咨询热线: 13761152229,我们会详细为你一一解答你心中的疑难。