地图
地图

计算机之路

随便聊聊我的计算机之路,以及我的近况,本文的主题也许算是「离别」。留个记录,给人生一个节点,再开启新的征程。




小学时期,《红色警戒2》打开了我的计算机大门,从此开启了我的计算机之旅。

我接触编程语言不算早,初中时期家里才拥有了第一台电脑(联想台式),这时候我才第一次接触编程语言——C语言。犹如昙花一现,埋没在少年的记忆中,唯独函数这个思想深深印在脑海。


时间过得很快,再见面,就已经是高中毕业了,由于对计算机的喜爱,大学毫不犹豫地选择了计算机科学与技术专业。

高考后我拥有了人生中第一台笔记本电脑(联想),取了一个名字——Anna

抱着我的第一代Anna来到学校,伴随着高考失败,心态爆炸。然后辗转到图书馆做了一学期管理员,心稍微静了下来。

大学的开始毫无疑问是C语言,关于C语言的学习,教材的每一个例子我都动手敲了,用的是Visual Studio,一个章节建一个项目。除此之外,还把《C Primer Plus》《C程序设计语言》学了若干遍,当然这时候我开始用上了编辑器,把VS中的cl.exe单独拿出来在cmd中编译运行C。当时的想法是,赶紧学完C,复习一遍,再巩固一遍,最后告别一遍。每种流行的编程语言都有适合的场景以及它自己的生态,在我看来,C是系统级别和硬件级别的语言,不得不学、但又不是那么称手,适合入门编程,作为自己的基础,隐藏在底层。

在大一寒假初次接触Linux,在我的Anna上折腾Ubuntu和windows的双系统,浏览器全面转向Firefox,遇到韦诺之战(The Battle for Wesnoth)。

到了大一下学期,手机已经坏了2个,本来想尝试小米,奈何总是无货,一气之下打开了Apple的官网,从此打开了新世界的大门。得到了人生第一部iPhone——iPhone6,与我的笔记本电脑对应,我给她取名Nana,她们是我最好的朋友。

如果说C带领我踏上编程之路,那么Java就让我深刻理解了「面向对象」思想。

即使我知道了面向对象,可我对Java仍然不喜欢,甚至说有点厌恶。最直观的感受,就是从C的语法到Java的语法不适应感。但不喜欢归不喜欢,我仍然把教材的例子全部敲了一遍,这时候接触到了Eclipse,以及尝试用记事本写Java(现在看来完全没必要记事本,还是代码编辑器好一些)。要说也得益于记事本手敲代码,我对面向对象思想确实有一种理解了的感觉。完美主义的驱使下,即使不喜欢Java,但我仍然想给它一个句号,自己买了《Java核心技术》两本,学了一遍。也是这个时候接触的Sublime Text,养成了能不用IDE就不用的习惯,反正都是些几行代码的小玩意。

大一的暑假来临,由于自己更偏向于C系语言,很自然地想要向C++进发。那个夏天我去北京跟父母一起度过,那个房间的微风,我至今记忆犹新。《C++ Primer》和下载的动漫,陪伴了我整个暑假。随着对计算机行业的深入了解,以及对C++的学习体会,我发现他的复杂确实如网友所言,以我的能力无法驾驭,C++也就在这里不了了之,不过C++的迭代器和Vector令我印象深刻。暑假之末,我得到了父母“馈赠”的人生中第一台苹果笔记本——MacBook Pro (Retina, 13-inch, Early 2015),我把这台笔记本仍然取名Anna,很显然她是第二代Anna了。OS X一个全新的系统,毫无疑问是非常有吸引力的,折腾了好久。


大二新学期的开始,学校开始教C++,由于我学过一次,但又不打算深入学习,应付考试完全足够。我的目光转向了iOS开发,即Objective-C,虽然当时Apple已经发布了Swift,因为还不成熟,我仍然打算先过一遍Objective-C,然后再来一遍Swift。沉浸于图书馆几个月,看了几本书和一些视频。我认为iOS开发也许并不是一个好选择,需求不大,市场饱和,再加上Apple Developer账号的收费机制,我又放弃了一个方向。不过,我仍然在这个过程收获了MVC模式。

知识和见识越来越广,之前在编译型语言兜兜转转,放弃iOS之后,打算找一门脚本语言玩一玩。层层筛选下来,最后在Perl、Ruby和Pyhton之间举棋不定,至于JavaScript,当时的我认为它只适合前端,遂没有考虑。我的印象中,在图书馆找了好几本书对比,甚至夜晚跑步的时候也在纠结选哪个,网上也搜了很多资料。

当时比较了很多项,也纠结了很久。我最后选择了Python,如果我没记错的话,决定的最主要原因是:Ruby资源的母语是日语,而Python是英语。要知道一门外语对我而言是非常困难的,即使英语学了这么多年,还是这个水样子,而英语明显更为通用。之后在图书馆通过《Python基础教程》正式接触Python。

Python之后,也没有上手什么项目。厌烦了通过hosts方式上Google,极其不稳定和慢速。偶然得知了VPS,便开启了SS之门,就像打开潘多拉魔盒。我的行动完全转向,重访Google,开启Twitter之旅。写了第一个网页,又萌生写博客的想法,于是立即动手,折腾WordPress废寝忘食。觉得博客应该专注内容,又了解到Hexo,于是把Blog迁移到Hexo。期间买了几个域名,最后还是在com稳定下来。

这一折腾,就是寒假来临。这个寒假,我又复习了一遍《C Primer Plus》和《C++ Primer》,后来我还翻过C,但再也没有看过C++了。


大三新的学期,学校的课程关于编程语言的很少了,开始安排上了数据结构、数据库、汇编语言、编译原理、组成原理、操作系统、计算机网络等课程。我又看了一遍《Java核心技术》,博客一直在维护。开始尝试Web开发。HTML很好,但是JavaScript和PHP则是浅尝则止,对我而言,太繁杂了,技术更新太快,而且我自认为需要一点设计技能,这对一个强迫症患者,简直是噩梦。即使说JavaScript是每个程序员应该掌握的技能,但至今我仍然只敢说我仅仅熟悉HTML,而对JavaScript了解还算不上。

在那之后,我基本不接触新的编程语言了,而是暂时专注在计算机的其他的方面,比如数据库和计算机网络,对macOS和Linux的探索也足够的多。经历了这么多,对Java的讨厌,也逐渐转变为不喜欢,即使不喜欢,却还是隔三差五就把《Java核心技术》拿出来翻翻。也许这就是缘分,不喜欢Java,整个大学在这门语言上花的时间却最多。

时间过得真的很快,就这样毕业了。

中间的一些插曲就不在此谈了。原本我更希望找一份关于Python的工作,后来的亲身体验还是选择了Java,市场需求和自身能力的局限,没办法。

在经历了一些事之后,逐渐改变了自己的一些想法。

人生,就是各种经历组成的。




语言之争是激烈的,有时候比电影还精彩。还是那句话,每种流行的编程语言都有适合的场景以及它自己的生态,除了看一门语言本身的设计之外,必须要看到这们语言周围的生态,争论语言好坏的意义不大。

很多时候我们可以说,语言只是表达工具,更重要的是深处的算法和设计模式等等;我们也可以说,不同的语言有不同的适用领域,用得好了,事半功倍。

其实这两种看法并不是相反的,而是相辅相成的。比如说,C/C++更适合系统编程和硬件、有很高的运行效率,但是上手难度大,不易控制。Java虽然语法啰嗦,但正是这一套规范,适合大型项目的协作开发,再加上Java强大的生态,成为目前最流行的企业语言不足为奇,在Web、大数据方面无人能敌,还带一个Android。对于脚本语言PHP、Python都有使用场景,PHP和网页的契合度,以及Python的开发效率,都是非常棒的优点。对于前端,几乎就是JavaScript没得选。

陷于语言之争只会让自己变得偏执,以及浪费时间。一门语言以及它周围的生态是不容易改变的,但是个人完全有一些小余地选择自己喜欢的。

一名程序员必须学习3种以上的编程语言(HTML属于标记语言,SQL属于查询语言不在此列,另外Shell也不算在里面),其中一门编译型语言、一门脚本语言、一门工作吃饭/喜欢兴趣的语言。不同的语言可以学到不一样的思想,见识到不一样的世界。

要我说需要学习和自己喜欢的编程语言选出5种,很可能就是C、Java、Python、JavaScript、以及Rust。

  • C是入门的首选,打好基础。一开始就从脚本入手,很容易走偏,由奢入俭难(对于非程序员,还是非常推荐Python的);

  • 面向对象目前还是主流,可选C++或Java等等,我选的Java,这也是目前最好找工作的语言;

  • 然后是脚本语言,我选的Python,脚本语言是程序员的拿手工具。现在看来Ruby的哲学不是我喜欢的,过多的语法糖令人有些混乱,选择困难症,对于方法的调用不能适应;

  • JavaScript跟C语言一样,几乎是程序员必备技能,稍微懂一点还是好些;

  • 最后,新时代的语言,Go和Rust,上个世纪的潮流没能赶上,这波不能掉队。至于为啥选择了Rust,一来是用来代替C++,毕竟C++太难,从应用场景来看,Go对标的的是Java,对现在我的而言,我早已改变了对Java的看法。二来是因为Mozilla情怀。

以前我也在不断寻找一门契合自己的编程语言,最后发现每种都有这样那样的缺点,但是不能掩盖他们的光芒。果然这个世界上只有两种语言,被人骂的和没人用的。

我是真的有点学不动了,除了纸质书,还有电子的。最后打算再看一下Rust,我就真的不展开了,累了。

即使Rust的学习曲线陡峭,我也希望在这里竖一块里程碑。我想我过多的涉猎不同的方向,却没有在一个方向上足够深入,实在可惜。


开了一个新坑,算法一直以来都很头疼,如果这个计划半途而废也不奇怪,但我希望对于计算机、对于编程更多一点兴趣,而不是饭碗。

很可能我将要转行了,如果真是那样,那么Rust也算是一个很好的纪念,以后可能只有Python能常伴左右。

也许我的编程之路到此为止了,总结一点经验就是,三分钟热度要不得,坚持难能可贵,深度比广度重要

不管怎么样,学无止境。💻




Update: 2021-04

2019年开启北漂之旅,那之后开始考虑转行,2019年底开始实施。

2020年初突遇疫情耽搁了,2020年底转行成功,正式告别计算机行业。

2020年底,陪伴了我5年多的第二代Anna,终于顶不住了。迫于贫穷,入了联想 小新 Pro14 2021,被视为第三代Anna。

很长时间没用Windows,本以为会变好,没想到这么多年了,真的一言难尽。鼠标难用;高分屏下各软件的分辨率缩放各行其是,有的模糊,有的太小,显示不一;各个软件和系统之间几乎没有配合和协作;系统环境变量混乱不堪,没有原生终端;反斜杠的路径也非常难受。许多功能强制依赖着一个个GUI的窗口(Windows之名名副其实,Window的复数),将细节过度藏匿于无形之中,拉开人机之间的距离,对于用户而言是简单而高效,对于开发商也是有大量需求的市场,对我而言则是始终有种隔阂,毫无掌控感且显得混乱,使我对于“万物皆为文本”的Unix哲学有了更加深刻的理解,大道至简。成功戒了我喜欢捣鼓电脑的兴趣,完全不再想写下一行代码了。居安思危,久而久之不知道是不是彻底告别编程了。虽然已经是差不多了,最后的一点念想Python,我仍然想常伴左右。

对于笔记本而言,以前我觉得仅仅是喜欢macOS,后来有了对比才发现Mac是软硬一体的精致、无与伦比的美妙。计算机对我而言,是一个完整的个人世界,各种软件精挑细选,海量的数据皆有所归,哪里存放些什么,一丝不苟,什么该与什么在一起,整整齐齐,犹如一座图书馆,是精巧的外在建筑美学,也有精神海洋的丰富内涵,完完美美;同时又像一个伙伴,陪伴着我、记录着经历,书写着这个世界的故事。光是目之所及,手之所触就心情愉悦不已。

仔细想了想,用着难受还不如不用。虽然是最短暂的Anna3,也有了一定的感情,有一丝的不舍。正好给我爸使用,避免造成浪费,也减轻我的愧疚感。以后坚决不买Windows笔记本了,将Windows留给台式,把Linux留在服务器,还是MacBook更适合作为伙伴、形影不离。

我喜欢将苹果的电脑统称Mac,包括iMac(台式)、Mac pro(工作站),Mac mini(主机)、MacBook Air、MacBook Pro、MacBook(已停产)。
而把苹果笔记本统称MacBook,包括MacBook Air、MacBook Pro、MacBook(已停产、未来或重启该系列)。
所有的苹果电脑,我最中意的可能就是MacBook Pro了,希望这个系列能陪我一辈子。




2021年开启了新的生活,并于3月份按捺不住,还是入了MacBook Pro (13-inch, M1, 2020)。

即使离开了计算机行业,但我对于计算机的兴趣依然不减,反而由于不再焦虑,感觉更加轻松和愉快,只是不再有那么多的时间学习新的技术,唯一能够保持与时俱进的,估计只有Python了。

本博客可能不再更新了,有缘人可以在 B站Douban 找到我。

人生如梦,一尊还酹江月。