以下三段是废话,请跳过。
(废话段1)有文科生想了解IT世界。这并不是多么神奇的事,想中小学时代还不分文理时,该喜欢IT的本来就喜欢。小学时,我当着全班的面说将来想成为“电脑大师”,称呼虽然脑残,至少证明我从小就热爱这东西;高中时姑父问我以后想做什么,那时词库大了,我说想做软件工程师,非常精准、到位,庆幸自己在成长的同时并未抛弃儿时的爱好与理想;大学志愿,我把软件工程填在第一专业,并如愿以偿地进去了,然后发现根本没人愿意报这专业,全是调剂过来的。有这么一份从小到大毫不动摇的爱好与理想,这是一个多么励志的故事啊!
(废话段2)然而与此形成鲜明对比的是,我并没有如饥似渴地学习专业知识,既没成学霸,也没成大牛。小学时,光是记住鼠标发明者的名字就胜人一筹了,如今真正接触这个领域,越来越意识到自己是何等无知,结果就在无知中彷徨度日,进步甚微。现在,我这枚渺小的IT屌丝要写一篇《如何优雅地进入IT世界》,顿时发现这纯粹是件不自量力高调寻喷的蠢事。
(废话段3)然而题既已开,又怎能轻言放弃,上网查询,思忖片刻,柳暗花明。做这件事,上有大神无数,装逼无路,况自己尚在学校,不了解外头行情,断不敢班门弄斧,把自己知道的说出来就可以了。从水平上讲,我也只算刚踏入门槛,如何再往进走自己也正在摸索,于是只好把“如何抬腿跨进门槛”的经验拿出来分享。我是个学生,所能道者大抵也便是学校里教的内容,但这些课程本身便是让一个外行成为内行的系统化途径,如此而言,我以下要写的还是具有一定价值的(自我安慰状)。
IT者,Information Technology也,乃信息技术之意,简释之就是处理信息的技术合集,笼统地说包括软硬件两大部分,个人出于兴趣去接触,软件是个很好的选择,零成本,可操作性高,故而此处只讨论软件部分。
IT是个魅力十足的神奇世界,它不像别的领域那样只可远观难以把玩。你若对医学感兴趣,最多抓只老鼠研究研究,不可能有机会在人身上动刀子;你若对园艺感兴趣,大抵只能买几样盆景,一般人无法真正去大规模种植、管理、营销。IT则好比文学,你写首打油诗就步入了文学殿堂,你写个hello world就进入了IT世界,而这一切都是极易上手、无需成本的。
然而IT比文学复杂得多,小学生作文与莫言的书用的都是那么些字,而在IT界中不同领域、不同层面所用到的技术则截然不同,一辈子都没法了解全部。我们所能做的是,通过一些基础知识入门,然后选择自己感兴趣的方面再深入学习。PS:这里要给的不是学习方法,仅是学习内容。
基础中的基础
我们不妨就从最简单的hello world开始,从编程开始。众所周知,计算机的运行靠的是01码,我们称之为机器码(机器语言),计算机能识别,人看着就头大了,于是出现了汇编,汇编使用了人能看懂的自然语言中的单词代替对应的机器码,比如ADD表示两数相加,瞬间有了可读性。汇编相当于对机器语言的直译(它们同属低级语言),编写复杂程序时难度依然很大。其实别说复杂程序了,我单看入门书上的那些简单的例子就要疯掉了,一个简单功能它要写好多句。而且汇编面向硬件,这台机子上写的程序可能在另一台上就没法用。
于是伟大的发明诞生了,那就是高级语言,我们现在常听说的C、C++、Java、Pascal、Python等等都属于高级语言。编程入门首选C,许多人建议以Python、Ruby作为第一语言,说是容易上手,但我仍建议选C,或许上手会慢些,但它更接近硬件,更有助于掌握编程语言的思想精髓。而话说回来,学C其实也不难,其规模并不大,一本两三百页的薄书就能讲解清楚。
C之后就是C++,这是为了理解面向对象的思想,所谓世间万物皆对象,具体怎么回事这里就不赘述了。Java也是典型的面向对象语言,但C++与C一脉相承,它们的语法是一样的,甚至可以混用,学起来比Java轻松一些。虽然Java用途甚广,但你不必担心,学会C++之后Java掌握起来轻而易举。
至此,在语言学习上其实已经足够了,在没有应用需求的情况下,不必急于接触更多其他语言。编程思想达到一定程度,掌握一门新语言是分分钟的事,或者说根本不需要掌握,用的时候搞本书查一查就完了。关键是,对于编程而言,最重要的并不是看书学习,而是实际动手操作。刚入大学时,学长就忽悠我们说这个专业动手性强,可以自己做很多东西,结果到头来学了那么久编程,做了那么多作业,为自己做的程序少得可怜。或许是我想象力不够丰富,不是初学者的好榜样。练习编程,除了完成练习题之外,最好能尝试去实现一些自己的想法,比如小游戏,比如手机端的APP,还可以做个小网站,挂在自己电脑上,别人可以访问,成就感满满,再正式些,申请个域名,租个服务器,都可以开始创业了!想想还有点小激动,但这一切都是建立在牢实的基础之上的。
在实际应用中,若想做好程序,光学语言是片面的,我们还需要其他一些必备基础,它们使你对程序、对计算机了解更全面、更透彻,我总结为五大方面(以对编程的影响程度排序),也是我们专业求职的必考内容。
1) 数据结构与算法
既已编程,又何能脱离数据结构与算法,表、树、图,排序、检索,虽然许多语言都已经做好了封装,但掌握一点基本思想还是十分必要的。这些东西十分锻炼人的思维能力,不止编程,在其他地方也大有作用。许多人对算法兴趣浓厚,智商大考验,这种考验甚至脱离于IT,进入了数学领域,深入下去,你会为那些NB算法而惊叹。
2) 数据库
刚接触数据库时我瞬间凌乱了,原来除了文件系统还有其他组织数据的方式,它是如此犀利,操作灵活,安全性高。重要的是,许多程序都需要数据库支持,因此编程必备。
3) 操作系统
操作系统是人和计算机之间的桥梁,它管理着计算机所有的软硬件资源。程序运行于操作系统之上,就如船只浮于水,你若对操作不够了解,做程序便只能停留在面上,你的浆划不到水里,船也没法控制。举个简单的例子,不了解进程的工作原理,怎么做多进程软件呢?
4) 计算机网络
网络在当今的IT界扮演着越来越重要的角色,现在一台不联网的电脑能做的事少之又少。于编程而言,不学网络写不了分布式软件;于素养而言,一个不懂网络的IT人士未免也太水了吧!
5) 计算机组成原理
如果你对计算机这复杂的玩意儿的构成及原理很感兴趣,这方面的知识不容错过。它是揭开计算机神秘面纱的关键,小到编码与指令,大到存储与I/O,是了解计算机硬件的好途径。它看似对编程没有直接影响,更多的是属于素养型的知识(但学通之后猛一回头,相信你对程序设计会有更高层次的领悟)。
基础中的扩展
1) 编译原理
当你程序写到一定程度,成就感会渐渐消失,为什么呢?因为你所用的高级语言都进行了一定程度的封装,你接触不到它们的工作原理,这个时候就该编译原理登场了。编译是将高级语言转换为机器语言的过程,是将人类思想翻译给计算机去执行的过程。编译原理告诉你高级语言的工作原理、它们是如何被设计出来的、为什么一句代码你这样写可以那样写不行。
2) 汇编语言
除非做一些特殊产品,现在已经很少使用汇编,况乎业余人士。若你学有余力,可适当了解之;若你兴趣浓厚,我也不拦着你成为大神。当然话说回来,汇编对于IT素养是不可或缺的,百度百科有言:“至今为止,还没有程序员敢断定汇编语言是不需要学的。一个不懂汇编语言的程序员,只是三流的程序员,这是大部分人的共识;同时,技术汇编语言是面向机器的程序设计语言,精湛的汇编程序员,已经脱离软件开发,挤身于工业电子编程中。一个电子工程师,主要的开发语言就是汇编,C语言使用只占极少部分,而电子开发工程师更是千金难求,在一些工业公司,一个核心的电子工程师比其它任何职员待遇都高。”
应用方向
基础学好之后便可以选择一些自己感兴趣的方向深入了解了,遗憾的是,众多的应用方向虽然有趣,但若不从事这样的行业,我们大抵也只能停留在纸上谈兵的层面。而既兴趣使然又何所谓呢,仍然抑制不住自己挖掘理论知识的冲动吧。PS:有不尽处,恳请补充。
1) 嵌入式
嵌入式是一个应用极广的方向,工业中的车床、监控,航天领域的卫星、火箭,上网用的路由器、交换机,生活中的汽车、手机、各种家电……只要是一台实现了一定程度自动化的用电机器,就无不涉及嵌入式系统。如果你好奇这些玩意儿是怎么实现的,果断走起。
2) Linux/Unix
相信你在学习操作系统的时候就已经接触到这货,没错,这货就是个操作系统。平时大家都习惯于Windows,初接触Linux/Unix一定多少有点别扭,这里不单是操作习惯的区别(比如Mac OS与Windows的区别),它们在根本上有着很大不同。不同在哪里,不必赘述,百度一下你就知道,知乎一下更能得到许多切实的回答。电脑里要是装了个Linux/Unix,感觉瞬间高大上了有木有,随便输两句命令,各种装逼范不解释,异常专业。国家现在也仍未放弃做自己的操作系统,你若有心,不妨炼成大神,勇敢地去实现OS报国的梦想吧!Linux的艺术在于开源和命令行,你若是出于好奇想体验一下手感还是算了吧,作为普通计算机用户,若是没有非要在Linux下跑的软件,根本不需要装这玩意儿,完了许多事还做不了(or不好做)。我自己就相当不喜欢Linux/Unix,作为一名“专业人士”着实不该,找工作时多重要呀,尼玛再重要我也不想去碰。
3) 云计算
云计算是分布式计算的一种,你可以先了解一下分布式计算,但相信你会对云计算最感兴趣。云是一个比较新的概念,现在计算机的许多硬件技术都发展到了一定的瓶颈,单台计算机的计算能力十分有限,而超级计算机的成本又非常高,于是人们考虑将普通的计算机联合起来使用,正所谓众人拾柴火焰高。好比寒暑假作业一大堆,同学们分工合作,每人负责一小部分,一瞬间就做完了。《电磁炮》里的御坂网络就是一个云计算的例子,性能表现堪比“树形图设计者”,在第二季中还成果计算出导弹轨迹,咳咳,扯远了。云时代以通信的代价换取计算效果,现在如火如荼的云存储、云服务器想必大家都有耳闻,不少人都已经在用了。然而目前不论是云计算还是分布式计算都仅处于初级阶段,尚未达到理想中的那种状态,基本上还是采用集群(依然是集中式)实现的,依然分服务器和客户端。以云存储为例,我们的个人PC上并未划出一部分硬盘为云服务。但看形势人们似乎并没有想往这方面发展,而是致力于实现终端的简化,简言之,以后你买一台能上网的显示器就可以当PC用了,所有的计算与存储均在云端完成。然而我相信云的力量远不如此,只有想不到,没有做不到。
4) 存储
计算机一强于计算,二强于存储,这就是其人类远不能及的两大能力。数据在计算机中的组织形式非常有趣,也是我个人最喜欢的部分,存储的金字塔结构、存储介质、文件系统、云存储什么都老有意思了。可以说,存储是计算机离普通用户最近的部分,上网也好,听歌也罢,我们几乎每天都在电脑里存取东西。4G以上的电影拷不进FAT32的U盘、迅雷会员的离线下载、网盘的云秒传,无不与日常生活息息相关。
5) 无线通信
这部分内容特别有意思,至少我是这么认为,可能是贴近生活的原因:我们天天在使用手机,也好奇着手机通信是怎么实现的。上面基础部分的计算机网络大抵覆盖了有线通信的内容,而人类所用的通信基本上就是有线和无线两类,在这里补一补无线,你就理解全面了。并且现在无线的分量越来越重,4G手机的网速能秒杀绝大部分家庭宽带,无线路由器也逐渐成为家中必备,笔记本、平板、手机无不如饥似渴地接进WiFi,有线正被无线蚕食鲸吞。如今都诞生了无线充电的方式,何况通信呢!
6) 语音、图像处理
如果你对语音输入、语音合成、指纹识别、人脸识别这类技术有兴趣,欢迎进入此坑。当时我差点就选这方向了,幸亏灵机一动,哎妈这不都是算法和数学么,罪过罪过。开个玩笑,了解一下其基本原理还是比较轻松的。
行业资讯
IT是个日新月异的行业,光顾着技术研究而不跟着前沿走是闭关锁国的陋习。拿经典的摩尔定律来说,计算机配置翻番那么快,而现如今的新产品换代更加迅猛,资讯跟踪真可谓是逆水行舟不进则退啊!若是条件允许,能订些杂志是最好的,实在不行只好淘电子版、关注各种博与微信了。
配件:CPU/APU、显卡、硬盘、主板、显示器,甚至鼠标、键盘、机箱、电源,配件控、性能控、装机控走起,游戏发烧友更是这方面的专家。现在配件们已经涉足庞大的手机平板市场了,更是不得不关注。
产品:PC、一体机、笔记本、平板、手机,各大品牌,配置如何,卖点何在,价格多少,高端货什么的买不起看看也舒服啊。
新发明:技术改变生活,你崇尚自由,不妨在家里搭个NAS,坐着躺着拿平板看部高清电影;你喜欢客厅里的沙发,不妨搞一台智能电视,海量资源;你爱运动,好新鲜,可穿戴设备花样层出……不过话说可穿戴还未普及,可植入都已经被提出来了。
公司动向:利益是推动技术发展的巨动力,你看那眼花缭乱的新产品们,哪样不是市场竞争的成果,好在企业们的战斗给消费者带来的基本上都是好处。现在打得热火朝天的苹果谷歌微软、英特尔AMD、联想三星小米诺基亚,互联网公司更是数不胜数。谁说市场是没有硝烟的战场,我看是狼烟四起火光冲天啊。
网友评论
前两天还帮人转化了一些需要导入数据库的数据(https://github.com/district10/dotfiles/tree/master/scripts.sh/csv2json),会脚本,生活会顺畅很多。
外,Vim 和 Emacs 编辑器也能让编辑文档和代码更顺畅。(例如刚写好的这篇:http://gnat-tang-archive.qiniudn.com/emacs-vim-md.7z)
我有个超级棒的想法,就差个程序员来帮我实现了!