改自早前一篇《如何优雅地进入IT世界》,以滥竽充数。为达字数要求,忍痛删减;响应老师的倡导,最大限度弃用粗语和网络语。
要求
以小组为单位写一篇教程,要求不超过三页A4纸,内容自拟,可以使用参考话题,也可以自定话题。
作业标题统一为:《3页A4纸XX教程》
1. 用浅明雅洁的语言,破除知识的魔咒,让高中文化程度的人可以看懂。
2. 既要介绍操作方法,又要解释原理,要让读者知其然,又知其所以然。
3. 硬指标:让读者看完之后,就会上手操作。
4. 风格:语言清楚,畅达,幽默最好,但不要为逗乐而逗乐。
5. 篇幅:不超过3 页A4 纸(3300 字是上限)。
IT者,Information Technology也,乃信息技术之意,简释之就是处理信息的技术合集,笼统地说包括软硬件两大部分,个人出于兴趣去接触,软件是个很好的选择,零成本,可操作性高,故而此处只讨论软件部分。
IT是个魅力十足的神奇世界,它不像别的领域那样只可远观难以把玩。你若对医学感兴趣,最多抓只老鼠研究研究,不可能有机会在人身上动刀子;你若对园艺感兴趣,大抵只能买几样盆景,一般人无法真正去大规模种植、管理和营销。IT则好比文学,你写首打油诗就步入了文学殿堂,你写个「Hello World」就进入了IT世界。而这一切都是极易上手、无需成本的。
然而IT比文学复杂得多,小学生作文与莫言的书用的都是那么些字,而在IT界中不同领域、不同层面所用到的技术则截然不同,一辈子都没法了解全部。我们所能做的,是通过一些基础知识入门,然后选择自己感兴趣的方面再深入学习。
编程语言
我们不妨就从最简单的「Hello World」开始,从编程开始。
众所周知,计算机运行靠的是01码,我们称之为机器码(机器语言),计算机能识别,人看着就头大了,于是出现了汇编。汇编使用了人能看懂的自然语言中的单词代替对应的机器码,比如用「ADD」表示两数相加,瞬间有了可读性。但汇编毕竟是机器语言的直译,编起复杂程序时依然使人抓狂。别说复杂程序,即使是入门书上的例子乍一看都高深莫测,一个简单的功能就需要好几句汇编。
于是伟大的发明陆续诞生,便是我们现在常听说的C、C++、Java、Python一众,汇编被称为低级语言,而它们被称为高级语言。学习编程,若想速成,可以从Python入手,若想打实基础,还是老老实实从C开始。比起其他语言,C更底层,更接近硬件,更有助于掌握编程的思想精髓。而话说回来,学C其实也不难,其规模并不大,我们奉为圣经的《C程序设计语言》一书仅用了前面的一百多页就把C讲清楚了。
C之后就是C++。C++涉及到所谓面向对象的思想——世间万物皆对象——这一思想的出现又是编程语言的一大质跃,具体怎么回事这里不提。Java和Python也是面向对象语言,但C++与C一脉相承,它们的语法是一样的,自然是深入学习的首选。虽然Java和Python用途甚广,但你不必担心,学会C++之后,其他语言掌握起来轻而易举。
语言只是工具,要熟稔但不必死扣,重要的是编程思想,思想到位了,掌握一门新语言是分分钟的事,或者说根本不需要掌握,用的时候搞本书查一查就行。同时,对于编程而言,最重要的并不是看书学习,而是实际动手操作。除了完成书上的习题之外,最好能尝试去实现一些自己的想法,比如小游戏,比如手机端的APP,或者做个小网站,挂在自己电脑上,别人可以访问,成就感满满,再正式些,申请个域名,租个服务器,都可以开始创业了!想想还有点小激动,但这一切都是建立在牢实的基础之上的。
基础知识
在实际应用中,若想做好程序,光学语言是片面的,还需要其他一些必备基础,它们使你对程序、对计算机了解更全面、更透彻。
■ 数据结构与算法
既已编程,又何能脱离数据结构与算法,前者管数据在计算机里的存储形式,后者管程序解决问题的流程。虽然许多语言做好了封装,不要你操心这些,但掌握一点基本思想是十分必要的。这些东西锻炼人的思维能力,不止编程,在其他地方也大有裨益。许多人对算法兴趣浓厚,智商大考验,这种考验甚至脱离于IT,进入了数学领域,深入下去,你会为那些妙不可言的算法感到惊叹。
■ 数据库
刚接触数据库时我如同发现了新大陆,原来除了文件系统还有其他存储数据的方式,它是如此神奇,功能强大,又操作灵活。重要的是,许多程序都需要数据库支持,因此是编程必备。
■ 操作系统
操作系统是人和计算机之间的桥梁,它管理着计算机所有的软硬件资源。程序运行于操作系统之上,就如船只浮于水,你若对它不够了解,做程序便只能停留在面上,你的浆划不到水里,船也没法更好地控制。举个简单的例子,不了解线程的工作原理,怎么做多线程软件呢?
■ 计算机网络
网络在当今的IT界扮演着越来越重要的角色,不联网的计算机就如脱离社会的人,几近于废。于编程而言,不学网络就写不了任何与网络相关的软件;于素养而言,一个不懂网络的人怎么好意思说自己懂点IT!
■ 计算机组成原理
如果你对计算机这复杂玩意儿的构成及原理很感兴趣,这方面的知识不容错过。它是揭开计算机神秘面纱的关键,小到编码与指令,大到存储与I/O,是了解计算机硬件的好途径。它看似对编程没有直接影响,更多的是属于素养型的知识,但学通之后猛一回头,相信你对程序设计会有更高层次的领悟。
基础拓展
■ 编译原理
当你程序写到一定程度,成就感会渐渐消失,因为你所用的高级语言都进行了一定程度的封装,你接触不到它们的工作原理,这个时候就该编译原理登场了。编译是将高级语言转换为机器语言的过程,是将人类思想翻译给计算机去执行的必由之路。编译原理告诉你高级语言的工作机理、它们是如何被设计出来的、为什么一句代码这样写可以那样写却不行。
■ 汇编语言
除非做一些特殊产品,现在已经很少使用汇编,况乎业余人士。若你学有余力,可以适当了解;若你兴趣浓厚,我也不拦着你成为大神。当然话说回来,汇编对于IT素养是不可或缺的,百度百科有言:「至今为止,还没有程序员敢断定汇编语言是不需要学的。一个不懂汇编语言的程序员,只是三流的程序员,这是大部分人的共识。」
应用方向
基础学好之后便可以选择一些自己感兴趣的方向深入了解了,遗憾的是,众多的应用方向虽然有趣,但若不从事这样的行业,我们大抵也只能停留在纸上谈兵的层面。而既兴趣使然又何所谓呢,仍然抑制不住自己挖掘理论知识的冲动吧。
■ 嵌入式
嵌入式是一个应用极广的方向,工业中的车床、监控,航天领域的卫星、火箭,上网用的路由器、交换机,生活中的汽车、智能家居……只要是一台实现了一定程度自动化的用电机器,就无不涉及嵌入式系统。
■ Linux
Linux是主流的操作系统之一,相比Windows,它更像程序员的标配。它的艺术在于开源,以及强大的命令行工具,就编程而言,比Windows便捷得多。它是服务器界的主流,是安卓的庐山真面目,唯有走进Linux,才真正走进了操作系统。
■ 云计算
云是一个比较新的概念,现在计算机的许多硬件技术都发展到了一定的瓶颈,单台计算机的计算能力十分有限,而超级计算机又贵得离谱,于是人们考虑将计算机联合起来使用,正所谓众人拾柴火焰高。现在如火如荼的云存储、云服务器想必大家都有耳闻,或者已经在用了。但云依然处在初级阶段,不论是消灭服务器、把任务分摊到千家万户的去中心化思想,还是壮大服务器和网络带宽、让我们几乎用一台显示器就能完成所有事情的零客户端思想,都远远没有发展到理想之境。而我相信云的力量还远不止于此,只有想不到,没有做不到。
■ 存储
人类所远不能及的能力,计算机有二,其一计算,其二存储。数据在计算机中的组织机理可谓妙哉,存储的金字塔结构、存储介质、文件系统、云存储等等都很有意思。存储是计算机离普通用户最近的部分,上网也好,听歌也罢,我们几乎每天都在电脑和手机里存取东西。4G以上的电影拷不进FAT32的U盘、迅雷会员的离线下载、网盘的云秒传,无不与日常生活息息相关。
■ 无线通信
我们天天在使用手机,也好奇着手机通信如何实现。上面基础部分的计算机网络大抵覆盖了有线通信的内容,而人类普遍所用的通信基本上就是有线和无线两类,在这里补一补无线,你就理解全面了。并且现在无线的分量越来越重,4G手机的网速能秒杀绝大部分家庭宽带,笔记本、平板、手机无不如饥似渴地接进WiFi,有线正被无线蚕食鲸吞,甚至无线充电也早在摸索如何商用。
■ 语音、图像处理
如果你对语音输入、二维码、指纹识别、人脸识别这类技术有兴趣,千万小心,它们远不像表面看起来那么好玩,背后全是枯燥的数学在支撑。
最后
IT是个日新月异的行业,光顾着技术研究而不跟着前沿走是闭关锁国的陋习。硬件配置翻番那么快,新产品的叠代那般迅猛,资讯跟踪真可谓逆水行舟不进则退。在学习技术的同时,多看看市场上的风云变幻,既是需要,也是乐趣。
2017年2月7日 苏州