通过老电脑学习编程指引--给12岁的我准备的礼物

前言

回想起我当年接触电脑的过程比较艰难:我很小就渴望能有一台真正的电脑,不懂电脑是怎么回事只是疯狂的喜欢,但是因为条件所限一直到上大学也没有如愿。考上大学的那个暑假,我得到了一台“电脑”,现在知道我知道这个所谓的电脑只是一台杂牌的学习机,它没有鼠标,只有一个非常难用的键盘,按键很涩需要很用力才能按下去,有时猛地按下去又按出一串来。没有软硬盘或者其他存储,关机就清空内存下次只能重新一个个字母敲。没有显示器,只能接到电视上当显示器。这样的“电脑”已经很让我高兴了,因为在此之前属于我的“电脑”是一张硬纸板,硬纸板印刷成键盘的模样,按键的部位摸上去是凸起的,旁边印刷着五笔字型的口诀:王旁青头兼五一,……。我就是在这张毫无按键反馈的纸板键盘上练习“指法”,还把五笔字根背的滚瓜烂熟(现在忘光了)。

正是有了硬纸板电脑的经历,才衬托出学习机电脑的好。后来,靠着一个印刷粗糙的仅有几张纸的Basic编程手册,我能编出个所谓的“程序”,其实啥功能也没有,只是在屏幕上显示点东西而已。新鲜劲过去之后我很困惑,这就叫电脑了?这样的“编程”有什么用?

我的第一台真正的电脑是大学一年级下半年和同学凑钱买的一台二手电脑,是电脑市场中二手电脑中最便宜的一台,我们是对价格极度敏感的用户,除了价格之外,我们对其他的什么都不敏感。CPU既不是Intel也不是AMD的而是非主流的来自中国台湾的VIA威盛(具体型号好像是Cyrix MII),内存32M,硬盘好像是40GB的,总之所有配件都是落伍的,慢的像牛一样。

不管它有多少缺点,它都是属于我的第一台真正的电脑,通过这台电脑我第一次写下了:hello, world

我常常想,如果真有时间穿梭,我能穿越到我中学时期,我会给那时候的我带去什么礼物?如果给我10分钟时间,我会对那时候的我说些什么呢?

这个问题我考虑了很久,人生感悟的话我不想说,现在的感悟也未必是对的,即便是对的对一个十来岁的孩子说人生感悟也是白费,感悟这东西需要自己去亲身体会,经历之后才能悟出来。那送个什么呢?我想送一台旧电脑,外加一篇学习电脑的指引,这些相当于打开新世界的钥匙。

时空隧道穿越是不切实际的,十几岁的我不可能拿到这个礼物了。

正文

一 老电脑能用来编程吗?

完全可以!多老的都可以!

应该这样想:再老的电脑也曾经“年轻”过。既然当年有人用它编程,就说明它可以编程!

决定编程速度的最重要因素是人,而不是电脑。200元的二手电脑与20000元的新电脑在打字速度上没有差别,在阅读文档上也没有差别,在80%的任务上也没有显著差别。

二 电脑老化了影响功能吗?

电脑老化的表现可能是:主板电池没电,电容漏液,电源不稳定,灰尘堆积导致散热变差,屏幕亮度变暗……这些问题如果严重会导致电脑报错、无法开机或者频繁死机。

但只要老电脑还能正常开机运行,它的功能就不会因为老化而受限制。

三 编程有哪些方向?

小到一个门铃,大到操作系统全都需要程序才能运作,都需要编程。编程有哪些方向这是一个大问题,我尝试用通俗的话概括一下:

单片机:基于单片机芯片的开发,偏硬件多一些,主要用C语言。举几个简单的例子:机器人,稍微有一些“智能”的电器,物联网的一些简单的终端等等。

汇编语言:是一种靠近硬件的低级语言,已经很少有单独使用的机会,通常用于调试、分析、优化、破解等场景。

Win32:Windows下的应用程序都统称为Win32,许多语言都可以开发Win32程序,包括C++、VB(已死)、Delphi(已死),虽然并不常见但其实C语言也可以编写Win32程序。还有微软推出的.NET框架下的一系列编程语言:C#、VB.Net、F#、J#(已死)

Linux:通常用于服务器,主流编程语言是 C、C++、Java

Web前端:就是我们常说的网站,Web前端指的是网站看得见的部分,涉及的技术有HTML(HTML5)、CSS(CSS3)、javascript。

Web后端:为前端提供内容的是后端,可以简单的认为后端决定了显示什么内容,前端决定了显示成什么样子。涉及的技术有PHP、ASP、JSP、CGI、Python等等。

移动开发:手机在许多方面都取代了电脑,所以移动开发也被认为是未来的方向,移动开发按照手机阵营分为:iOS、Android、Windows Phone、Symbian、BlackBerry OS等。但是除了iOS、Android之外其他阵营都已经死了或者正在死,即使编出程序也没有地方运行,所以值得选择的只有iOS和Android平台。

安全:安全严格的说不算编程,也不限定某一种语言,而且对网络,系统,平台,加解密等技术的攻防运用

四 老电脑无法胜任的方向

如果你电脑比较老,有的方向不适合你,以下是被排除的方向:

1 Web前端,Web前端因为面向的是直接用户,所以要选择和主流用户相同的使用环境(浏览器)。而主流浏览器都不再支持WinXP了,支持XP的最新的IE浏览器是IE8、Chrome是49.0.2已经远远落伍了,所以要学习Web前端至少要Win7操作系统。

2 移动编程,Android开发需要安装Android Studio,使用Java或者Kotlin编程语言,如果电脑性能不佳会非常非常慢,严重影响开发效率,通常还需要一块固态硬盘代替老式的机械硬盘。iOS开发只能使用OS X操作系统,只能安装于苹果Mac系列主机,所以老电脑基本上与移动编程无缘了,如果能忍受慢可以选择Kotlin,虽然同样慢,但是它的开发效率比Java高的多。Android编程需要调试,建议在性能不佳的电脑上使用真机调试(低端Android手机非常便宜),这样可以绕过龟速的Android模拟器。

其实这个推荐很难,Android开发需要安装Android Studio,使用Java或者Kotlin编程语言,如果电脑性能不佳会非常非常慢,严重影响开发效率,通常还需要一块固态硬盘代替老式的机械硬盘。iOS开发只能使用OS X操作系统,只能安装于苹果Mac系列主机,所以无法推荐。

3 XP支持的最高.NET Framework是4.0、DirectX是9,如果要使用新平台的新特性,也需要新操作系统至Win7。

五 编程语言的推荐

Web后端:推荐PHP。推荐理由:流行度,平台占有率

Win32编程:推荐C++、C#

Linux编程:推荐C++

移动开发:推荐Kotlin语言。

此外,还有一个平台无关的JAVA也值得学一学,它既可以开发Web前端(applet)也可以作为服务器后端(JSP),还可以做成桌面应用程序,但是它编出来的程序在Windows下不能像Win32程序一样直接运行,必须在外面套一层exe的“壳”。

六 关于IDE的争论

IDE是集成开发环境,有人喜欢它也有人不喜欢它,但有一点是确定的:许多IDE无法在老电脑上运行,拿微软官方IDE来说吧,Visual Studio 2017,光安装包就20多GB,安装过程只勾选必要的组件安装下来就已经20GB,多选几项就直逼30GB(微软官方文档说完整安装需要130GB)。安装后随便创建一个项目动辄上百兆。相对其他硬件而言,硬盘算是最便宜而且可以独立升级不影响平台架构的了,可以忽略磁盘占用。但安装下来之后的VS,后台程序一遍遍的扫描改动,读写缓存,硬盘疯狂的吱吱嘎嘎,基本上敲个字符都要卡一下,老电脑根本无法运行。

这里推荐一些适合老电脑使用的轻量级IDE:CodeLite、Codeblocks、Sharp Develop、Qt Creator

其他常见的IDE还有:phpstorm、eclipse、netbeans

还有一些功能强大的文本编辑器:Sublime Text、UltraEdit、Notepad++、EditPlus等等。经过配置也可以胜任大部分IDE的工作,但运行速度和资源占用比IDE少的多。

七 开发的额外成本

真实的生活不是偶像剧不是武侠片,可能有人经济条件能得到一台电脑已经是很难得,不能再负担其他成本,所以我再列举一下开发的成本供参考:

1 Win32编程和Web前端编程不需要任何额外成本,因为开发环境和使用环境是相同的。

2 Web后端编程如果只是学习编程技术也不需要成本,因为Windows下有集成的IIS、Apache、Nginx等可以把电脑当成服务器用。如果想让编出的程序让别人访问到就需要额外成本了,最少需要一个域名和一台虚拟主机,按最低价计算域名是60元/年,主机是200元/年,如果是学生可以申请学生主机,价格优惠幅度很大。如果想获得更大的自由度可以购买一台虚拟机(而不是虚拟主机),按最低价计算大约每年400元。

3 如果是移动编程或者使用Visual Studio的高版本,老电脑会非常慢,提升性能最直接的办法是:换固态硬盘,最小容量最低价格大约是100元。

4 大部分编程方向都可以单机进行,Android开发必须联网(尤其是环境搭建),联网的成本就是在运营商接宽带的成本,大约每月100,我使用的天津联通每月最低是140元左右。

5 单片机的开发需要购买开发板(学习板)、各种芯片、下载器、IC、面包板、功能模块、杜邦线、鳄鱼夹、电表……等许多电子元器件。虽然种类很多但这些东西都不贵,100元就能把必需的备齐开始起步。如果想弄比较复杂的功能,单片机就勉为其难了,需要Arduino、树莓派(raspberry pi)、友善之臂等性能更强的硬件平台,价格大约在300元以上。

八 老电脑硬件升级

关于老电脑升级可以遵循以下指南:

1 能凑合用就不要升级,老电脑通常都没有升级的必要,因为升级和买新的花的钱差不多了。

2 如果老电脑能安装Win7,那么花100块钱买一个固态硬盘当C盘系统盘,能获得明显的性能提升。

3 不支持Win7的老电脑如果要升级就升级内存,加个1G的内存效果比升级其他的都明显,运气好的话只需要不到二十块钱(淘宝,二手,包邮)。

九 老电脑的维修

老电脑的维修挺让人头疼的,许多老电脑送修人家根本不给修,因为维修费至少50元起步,而这个电脑回收的话可能还不值50块钱。而且不得不用旧电脑学习的朋友通常居住的地方也比较偏远,即便想修理也未必有条件。所以,掌握简单的维修技能是很有必要的,以下针对老电脑常见故障给出诊断和修复方法:

1 死机

如果电脑频繁死机应首先想到软件问题(木马、病毒之类的),排除软件问题(格式化硬盘彻底重装系统后)后如果仍然频繁死机则应考虑硬件问题,硬件问题中又应重点关注硬盘坏道问题和芯片散热问题。硬盘坏道问题用软件扫描的方法可以确认或排除;散热问题比较麻烦一些:老电脑的主板上除CPU之外,有两个“大芯片”,离CPU近的叫北桥芯片,离CPU远的叫南桥芯片。南桥芯片的发热少一些,而且耐热能力也强一些,所以需要散热的硬件通常有CPU和北桥芯片。最简单的办法就是用手摸(先摸大地放电),如果死机与升温之间存在直接关系就说明死机是由过热引起的。老电脑的风扇慢、灰尘多都会一定程度影响散热,但都不会到死机这么严重更直接的原因通常是硅脂干了。为了让芯片与风扇之间紧密贴合所以要在二者之间涂一层导热硅脂,时间长了之后会干掉影响散热效果,解决办法就是买新的硅脂涂上。硅脂的价格几十上百元的都有,最便宜的硅脂价格大约为5元。

2 重启

与死机一样,如果电脑重启也要先排除软件和散热问题。除了这些还要考虑电源问题,电源供电不良也会导致电脑无规则的重启。我曾经遇到一个电源问题:电脑能正常开机但是不规律的死机。通过替换法确定是电源问题后我拆开了电源,发现一个电容已经烧焦,附近的电路板都呈现烧过的焦糊状。

3 不能开机

不能开机的问题可大可小,通过排除法逐个检查这几个硬件:电源、主板、CPU、内存、硬盘。如果按开机键完全没有反应,要重点关注电源问题,因为就算不接主板在短接绿线黑线之后电源也应该开始工作,表现为电源风扇转动。如果开机后屏幕能看到字母就说明至少主板还没有坏的太严重,如果能听到报警声,根据报警的长短和次数查阅对应BIOS手册确定问题。

4 开机报错

如果开始报一行英文的错误,按F1或者F2之后还能正常启动,启动后发现系统时间归零,这是主板电池没电了。解决办法是如果是台式机就买一个新的主板纽扣电池(型号是CR2032)替换,笔记本主板的电池也是CR2032,但是要注意得是带线的,外形是黄色的塑料包着引出一根红黑的线,价格都不超过5元。通常一颗主板电池保用3年以上,但实际上用六七年以上的也很常见。

老电脑如果遇到配件损坏的问题是不值得维修的,比如:主板上一个零件烧了。虽然替换这个元件只需要几毛钱,但是替换它所需要的工具(拆焊台、热风枪)价格较高是大多数人不具备的。可行的做法是整个替换,主板坏了就买主板(40元起步),电源坏了就买电源(30元起步),内存、CPU损坏率比较低。

十 老电脑与漏洞

老电脑的硬件是旧的,软件(操作系统、平台)通常也不新。这些旧软件会不会有漏洞呢?答案是确定的:这些老电脑有很多漏洞,如果接入互联网会有风险。这些漏洞有的是操作系统级的(比如:XP已经不再发布安全更新了),有的是应用级的(比如漏洞之王flash)。

但是个人学习用的电脑,即便中了毒了,只要把代码做了备份也不会有太严重的后果,大不了就格盘重装。而且,对一个志在从事软件开发的人来说,与病毒做斗争都是也是不可缺少的经历,也是学习的一部分,所以不必因噎废食。

而且最重要的一点,使用旧电脑学习的孩子可能没有条件中毒,因为上网也是要花钱的。


后记

现在的生活普遍比较好,大部分城里孩子很容易就能获得新的高性能的电脑(远超过他的需求),也不需要这些旧电脑的知识。但是极少数的偏远山区的孩子就不一样了,他们幸运的获得一台旧的二手电脑,这篇《通过老电脑学习编程指引》可能还会有点作用。冤枉很美好,但现实很残酷:需要电脑的人往往找不到有电脑要捐赠的人,能找到捐赠者的人99%都是搞回收的贩子。如果我有幸遇到一个真正的热爱计算机的农村孩子,我一定不会吝惜;如果你有旧电脑要送给一个农村孩子,请把本文打印下来一并送给他。

通过学习编程达到大富大贵的只是金字塔的顶端的极少数人(雷军、求伯君、周鸿祎、马化腾、李彦宏、比尔盖茨、扎克伯格、张小龙、张一鸣、史玉柱、丁磊……都是程序员出身),但是学习编程足以让一个贫困家庭的孩子通过知识改变命运。一个普通孩子一年之内通过兼职编程赚的钱为自己攒一台配置还可以的新电脑应该问题不大(3000块钱预算足够了)。

如果这篇文章能帮助一个孩子改变命运,我大年初一码了一整天的字就算没有白费。(2018.2.16)