Files
CategoryResourceRepost/极客时间专栏/左耳听风/程序员练级攻略/70 | 程序员练级攻略:零基础启蒙.md
louzefeng d3828a7aee mod
2024-07-11 05:50:32 +00:00

146 lines
12 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<audio id="audio" title="70 | 程序员练级攻略:零基础启蒙" controls="" preload="none"><source id="mp3" src="https://static001.geekbang.org/resource/audio/2d/8f/2d8817d9ebe4736e6200f26710fad08f.mp3"></audio>
如果你从来没有接触过程序语言,这里给你两个方面的教程,一个偏后端,一个偏前端。对从零基础开始的人来说,最重要的是能够对编程有兴趣,而要对编程有兴趣,就要有成就感。而成就感又来自于用程序打造东西,所以,我推荐下面这份不错的入门教程。
第一份入门教程,主要是让你体会到编程是什么。
- [《与孩子一起学编程》](https://book.douban.com/subject/5338024/) 这本书以Python语言教你如何写程序是一本老少咸宜的编程书。其中会教你编一些小游戏还会和你讲基本的编程知识相当不错。
- 两个在线编程入门的网站:[Codecademy: Learn Python](https://www.codecademy.com/learn) 和 [People Can Program](https://www.peoplecanprogram.com/) 你也可以在这两个网站上学习Python只不过是英文的。
然后,你可以到 [CodeAbbey](http://www.codeabbey.com/index/task_list) 上去做一些在线编程的小练习。
第二份入门教程,主要是让你做点实际有用的东西。嗯,做个网页吧。
- [MDN的 Web开发入门](https://developer.mozilla.org/zh-CN/docs/Learn/Getting_started_with_the_web) MDN全称是Mozilla Developer Network你可以认为是Web方面的官方技术网站。这个教程会带着你建立一个网站。然后你可以把你的网页发布在GitHub上。
这两份教程都很不错,都是从零开始,带着你从环境准备开始,一点一点地从一些简单又有意思的东西入手,让你感觉一下编程世界是什么样的,相信这两个教程可以让零基础的你喜欢上编程。
# 编程入门
在这时我们使用Python和JavaScript作为入门语言。Python就不用多说了语法比较简单有大量的库和语法糖是零基础的人学习编程的不二之选。而JavaScript则是前端的语言为了让你更有编程的成就感所以这也成了一门要学习的语言。注意对于计算机专业的学生来说一般会使用Pascal做为入门的编程语言但我觉得编程入门还是要以培养兴趣为主所以还是选一些能让人有成就感的语言会更好
## 入门语言Python
如果你想更为系统地学习一下Python编程我强烈推荐你阅读下面这两本书。它们是零基础入门非常不错的图书里面有大量的更为实用的示例和项目可以快速给你正反馈。
- [Python编程快速上手](https://book.douban.com/subject/26836700/)
- [Python编程从入门到实践](https://book.douban.com/subject/26829016/)
这两本书除了编程语法方面的讲述有所不同之外其他都差不多主要是通过书中的示例来强化你对编程的学习。第一本偏文本处理包括处理Word、Excel和PDF第二本中有一些Web项目和代码部署方面的内容。如果可能的话你可以把两本书中的示例都跑一遍。如果你时间有限的话我推荐你看第二本。
[编辑植入极客时间上也有Python入门的视频课程。]
## 入门语言JavaScript
如果想入门学习JavaScript我主要推荐以下在线教程。
- [MDN JavaScript教程](https://developer.mozilla.org/zh-CN/docs/Web/JavaScript)你可以认为这是最权威的JavaScript官方教程了从初级到中级再到高级。
- [W3School JavaScript教程](http://www.w3school.com.cn/js/)这个教程比较偏Web方面的编程。
- [JavaScript全栈教程廖雪峰](https://www.liaoxuefeng.com/wiki/001434446689867b27157e896e74d51a89c25cc8b43bdb3000)这是廖雪峰的一个比较偏应用的教程也是偏Web方面的编程同时包括涉及后端的Node.js方面的教程。
## 操作系统入门Linux
学习编程你还需要会玩Linux虽然Windows占据着更多的桌面市场但是你还是要了解Linux。这里你可以看一下W3CSchool上的在线教程 [Linux教程](https://www.w3cschool.cn/linux/)。
## 编程工具Visual Studio Code
这里主要推荐时下最流行也是最好用的Visual Studio Code这个工具潜力十足用它开发Python、JavaScript、Java、Go、C/C++都能得心应手([教程](https://jeasonstudio.gitbooks.io/vscode-cn-doc/content/)
## Web编程入门
如果玩到这里你觉得有趣的话可以学习一下Web方面的入门知识。**为什么是Web而不是别的其他技术呢因为你正身处于第三次工业革命的信息化浪潮中在这个浪潮中Web互联网是其中最大的发明所以这是任何一个程序员都不能错过的**。
关于Web编程有下面几个方向你要学习一下。
<li>
**前端基础**。要系统地学习一下前端的知识也就是CSS、HTML和JavaScript这三个东西。这里还是给出MDN的相关的技术文档页面 [CSS文档](https://developer.mozilla.org/zh-CN/docs/Web/CSS) 和 [HTML文档](https://developer.mozilla.org/zh-CN/docs/Web/HTML) 。**文档很大你要学习的并不是所有的东西而是了解CSS和HTML是怎么相互作用来展示数据的然后不用记忆文档中的内容这两个文档是用来查找知识的。** 另外你可以简单地学习使用JavaScript操纵HTML。理解DOM和动态网页可以参看 [W3Schools的JavaScript HTML DOM的教程](https://www.w3schools.com/js/js_htmldom.asp))。
</li>
<li>
**后端基础**。如果你想省点事不想再学一门新的语言了那么你可以直接用Python或者Node.js这两个技术在前面提到的廖雪峰的那个教程里提到过。当然如果你想试试另外一种脚本型的也是比较主流的编程语言那么可以搞搞PHP它也是很快就可以上手的语言。学习PHP语言你可以先跟着 [W3School的PHP教程](http://www.w3school.com.cn/php/index.asp) 玩玩其中有连接数据库的MySQL的教程。然后以 [PHP的官网文档](https://php.net/manual/zh/) 作为更全的文档来学习或查找相关的技术细节。
</li>
下面是一些学习要点:
- 学习HTML基本语法。
- 学习CSS如何选中HTML元素并应用一些基本样式。
- 学会用 Firefox + Firebug 或 Chrome 查看你觉得很炫的网页结构,并动态修改。
- 在一台Linux机器上配置LEMP - Ubuntu/Nginx/PHP/MySQL这个环境。
- 学习PHP让后台PHP和前台HTML进行数据交互对服务器响应浏览器请求形成初步认识并实现一个表单提交和反显的功能。
- 把PHP连接本地或者远程数据库 MySQLMySQL 和 SQL现学现用够了
这里你可能会问我入门时有三个后端语言一个是Python一个是Node.js一个是PHP你对这三门语言怎么看老实说Python我还看好一些PHP次之Node.js最后。原因是
<li>
Python语言的应用面还是很广的。当然性能可能会有一些问题但是用于一些性能不敏感的和运维或是一些小工具相关的还是非常好用的。另外Python的应用场景其实还是很多的包括机器学习和AI也有Python的身影。用Python来做一些爬虫、简单的中间件、应用或是业务服务也是很不错的。
</li>
<li>
PHP也是一个比较主流的简单的语言PHP在目前来说还是一个比较主流的语言但其发展潜力有限虽然可以让你找得到工作但是一般玩玩就行了
</li>
<li>
Node.js 号称 JavaScript 的后端版,但从目前发展来说,在后端的世界里,并不能承担大任,而且问题很多。一些前端程序员用它来做后端的粘合层,我个人觉得这样做法只是掩盖前后端配合有问题,或是接口设计思维上的懒惰,我还是希望前端程序员应该认真学习一门真正的后端语言。
</li>
当然,这里只是让你感觉一下,**Web前端编程的感觉只是为了入门而已。所以对于这些语言你也不用学得特别精通感觉一下这几个不同的语言就可以了然后知道相关的文档和知识在哪里这样有助于你查阅相应的知识点**。
# 实践项目
无论你用Python还是Node.js还是PHP我希望你能做一个非常简单的Blog系统或是BBS系统需要支持如下功能
- 用户登录和注册(不需密码找回)。
- 用户发贴(不需要支持富文本,只需要支持纯文本)。
- 用户评论(不需要支持富文本,只需要支持纯文本)。
你需要从前端一直做到后端也就是说从HTML/CSS/JavaScript到后面的PHPPython/Node.js再到数据库。这其中需要你查阅很多的知识。
这里有几个技术点你需要关注一下。
1. 用户登录时的密码不应该保存为明文应该用MD5+Salt来保存关于这个是什么希望你能自行Google
1. 用户登录后,对于用户自己的贴子可以有“重新编辑”或 “删除”的功能,但是无权编辑或删除其它用户的贴子。
1. 数据库的设计你需要三张表用户表、文章表和评论表它们之间是怎么关联的你需要学习一下。这里有个PHP的blog教你怎么建表你可以 [前往一读](https://code.tutsplus.com/tutorials/how-to-create-a-phpmysql-powered-forum-from-scratch--net-10188)。
如果你有兴趣,你可以顺着这个小项目,研究一下下面这几个事。
- 图片验证码。
- 上传图片。
- 阻止用户在发文章或评论时输入带HTML或JavaScript的内容。
- 防范SQL注入。参看[PHP官方文档](http://php.net/manual/zh/security.database.sql-injection.php) 或 [微软官方文档](https://technet.microsoft.com/zh-cn/library/ms161953%28v=sql.105%29.aspx?f=255&MSPPError=-2147217396)或者你自己Google一下。
上面这些东西不是什么高深的东西但是可以让你从中学到很多。相信你只需要自己Google一下就能搞定。
## 小结
接下来我总结下今天的内容。首先我推荐了Python和JavaScript作为入门语言以让你尽快上手获得成就感从而激发你想持续学习的热情。随后介绍了Linux操作系统、Visual Studio Code编程工具、Web编程入门等方面的学习资料并给出了学习要点。最后我给出了一个实践项目帮助你理解和巩固今天所学的内容。
消化好了今天的内容,就准备好精力迎接后面的挑战吧。下篇文章中,我们将正式入门学习该如何编程。
下面是《程序员练级攻略》系列文章的目录。
- [开篇词](https://time.geekbang.org/column/article/8136)
<li>入门篇
<ul>
- [零基础启蒙](https://time.geekbang.org/column/article/8216)
- [正式入门](https://time.geekbang.org/column/article/8217)
- [程序员修养](https://time.geekbang.org/column/article/8700)
- [编程语言](https://time.geekbang.org/column/article/8701)
- [理论学科](https://time.geekbang.org/column/article/8887)
- [系统知识](https://time.geekbang.org/column/article/8888)
- [软件设计](https://time.geekbang.org/column/article/9369)
- [Linux系统、内存和网络系统底层知识](https://time.geekbang.org/column/article/9759)
- [异步I/O模型和Lock-Free编程系统底层知识](https://time.geekbang.org/column/article/9851)
- [Java底层知识](https://time.geekbang.org/column/article/10216)
- [数据库](https://time.geekbang.org/column/article/10301)
- [分布式架构入门(分布式架构)](https://time.geekbang.org/column/article/10603)
- [分布式架构经典图书和论文(分布式架构)](https://time.geekbang.org/column/article/10604)
- [分布式架构工程设计(分布式架构)](https://time.geekbang.org/column/article/11232)
- [微服务](https://time.geekbang.org/column/article/11116)
- [容器化和自动化运维](https://time.geekbang.org/column/article/11665)
- [机器学习和人工智能](https://time.geekbang.org/column/article/11669)
- [前端基础和底层原理(前端方向)](https://time.geekbang.org/column/article/12271)
- [前端性能优化和框架(前端方向)](https://time.geekbang.org/column/article/12389)
- [UI/UX设计前端方向](https://time.geekbang.org/column/article/12486)
- [技术资源集散地](https://time.geekbang.org/column/article/12561)