IT

我们都是IT民工

流浪人IDE开发札记

Posted by 哈莫米拉 on November 15, 2016

你生命中的有些东西终究会失去,比如我住了6年的陈寨,这个聚集了郑州十几万IT民工的地方,说拆就拆了。再比如我玩了3年的坦克英雄,这个带给我太多快乐的游戏,说停就停了。

编程对我而言是种爱好,我上学6年,工作14年,期间学会了二十多种编程语言,新潮如go和swift,生冷如F#和lisp,我都学过,至于热门的,编程语言排行榜上前14位的语言,我都会用。也许你觉得我是在吹牛,那就让我从头说起吧。

我上中学时开始学习编程,那时候没见过什么电脑,看书上说电脑是由主机显示器和硬盘驱动器组成的,我想当然地以为硬盘驱动器就是摆在电脑主机旁边的,跟打印机一样是个外设。那时候联想的电脑广告铺天盖地,然后对于偏远农村的我来说,却是永远也不敢奢望的。我只有一台小霸王学习机,接在一台黑白电视上,在上面运行basic程序。

basic应该是很多人学编程的入门语言吧,毕竟那时候还没有python. 那时候的basic,是用大写字母编写的,每行前面要加一个行号,程序是按行号执行的。每两个行号之间要有间隔,不然在两行中间插入代码时就麻烦了。很原始吧?很多年后当我把这段经历讲给我的老师听时,他说你知足吧,我们那时候是打纸带的,打错了就用胶水粘纸把一些孔给堵上,再用针扎出另一些孔来。

我那时候主要用basic解决一些数学问题,比如鸡兔同笼,百钱买百鸡等,还有就是求从1加到100的和。当时 PC上最流行软件应该是wps吧?我没见过,但我用学习机学会了五笔字型。学五笔时有次对我妈说话五笔比较难,我妈说那你先从简单的学起,先学一笔二笔。从我学习到工作,我妈对我的支持一直是我最大的动力。我上大学的时候买了一台二手电脑,那笔钱本来是家里准备购买彩电的,攒了好久,听我说想买电脑,我妈二话没说就把钱给我了。

买电脑时是我爸陪我去的,那时候郑州的科技市场还很简陋,两层楼的大厅,一楼卖各种各样的散件,二楼卖盗版软件。因为我们只有2000元,店主很为难,最后搜罗了很多二手配件,才勉强给我装了一台电脑。所以我的第一台电脑,CPU用的不是奔腾和赛扬,而是Cyrix 。Cyrix 这个名字可能很多人都没有听过,但我可以保证我没有拼错。电脑买回去之后我激动了好几天,村里很多人前来参观,因为那是我们全乡第二台电脑,第一台在乡政府。

我的第一台电脑运行的是windows 95系统,后来被我换成了98。我用这台电脑编写VB程序,用的Foxpro数据库,那时候听到VisualStudio 6.0发布的消息激动不已,花10块钱买了一张盘,视若珍宝。然后有一年暑假,我编写了一个简易的进销存程序,卖给我们乡里的一个商店,赚了200元。

在学校里,当然要学c和c++了,这两门语言我都学得很精通。但我说句老实话,我从业十几年从来没有用到过。那时候的编程界不光有VB,其时PoweBuilder已经开始没落,而Dephi风头正劲,刚好学校机房有Dephi,于是也学了一下。

互联网的风潮突然一下子吹遍了神州大地,那年暑假,我们县电信局建了第一个网络演示厅,试营业期间免费对公众开放。名字起得高大上,其实就是个网吧。那时郑州的网吧大概6块钱一小时,所以那个暑假我基本都泡在那个演示厅里。那时候QQ还不叫QQ,叫OICQ,商都网也不叫商都网,叫商都信息港。那个时候网络上没有太多的应用,基本上就聊天室和BBS在那里横行。我去得最多的就是澄心和碧海银沙。(说到这里插播一条寻人启事,有谁认识当年澄心聊天室的快乐小天使,就是商丘师院的丁今,请联系我,定酬谢500元QQ币。)然而当我满心欢喜地打算自己编写一个聊天室时,才发现我学的知识连一个最简单的留言板都做不出来。那时候asp,jsp,php之类网络编程已经大行其道,而我们在象牙塔内竟然浑然不觉。

思忖再三,决定报名参加一个java工程师的培训班,那时候国内比较牛的java培训机构一个是ACCP,另一个是NIIT。因为ACCP时间长费用高,所以果断报了NIIT。三个月的培训,其辛苦无人能知,经常为了调试一个程序,到凌晨才能入睡。然而功夫不负有心人,学完之后,应聘到郑州一家软件公司,开始了我的java生涯。

我们那个公司当时做的是移动的外包,公司里遇到的都是一些奇葩的人物。比如说我们技术总监刑工,一个五大三粗的汉子,偏偏留了一头大波浪的长卷发。再比如我们项目组长秦工,一个文弱的小女孩,偏偏领导了几个大男人,这个公司彻底颠覆了我对软件公司的认知。

开始工作的时候并不顺利,我虽然学了jsp,但在公司已经开始使用structs和hibernate,我完全不懂,还有什么dwr,也是一无所知。数据库的知识也非常欠缺,当时不会用join, 为了把一个用户Id转成用户名,竟然在循环里查询数据库。好在前辈们都能及时指出这种问题,我也很快就能改正。

我那段时间在郑州呆了五年,从一个程序员成长为比较资深的java工程师。平时在公司工作,周末就去逛各种公园。碧沙岗,紫荆山,人民公园都留下了我的足迹。如果你静下心来看,郑州真是一个美丽的城市。不过有些时候我也会感觉很不爽,那时我住在燕庄,旁边就是省高级法院。法院周边的几条街上,经常会有一些含冤受屈的人们,带着简易的铺盖,露宿在街道两帝的地面上。他们的食物,基本上就是冷馒头。我有时候会给他们送些馒头和咸菜,也认识了几个上访了几十年的冤民。好吧,这咕噜掐了别播,冤不冤的其实也轮不到我来说。

俗话说饱暖思淫欲,工作稳定之后,就开始为自己的对象操心。当时我注册了一个中国交友中心,这家网站刚开始是免费的,后来收费每月10元。如果我不告诉你们,恐怕很少人知道它就是现在珍爱网的前身。然而在网上毕竟没有太多收获,有些是见一面就没有下文,有些根本就见不到人。记得有一次我约了人见面,去的时候突然下雨了,我捧着鲜花在雨中等了两个小时,姑娘却没有去,打电话也关机。第二天发个短信说她看天下雨了,以为我不会去所以也没去。

所谓踏破铁鞋无觅处,得来全不费功夫。有些你苦苦追寻的东西并不一定能得到,而有些你未曾想过的事情却很容易就实现了。那年春节我去我姑家探亲,恰逢她邻居家的一个姑娘来串门。随便问了一下,竟然是陕师大中文系的毕业生,在我们县的另一个乡的中学当教师。好吧省去中间细节,在我姑的撮合下,我们正式定亲。

都说程序员是高薪职业,他们说的没错但是写错了。中间那个辛是辛苦的辛,不是薪水的薪。程序员的工作高度辛苦,但薪资并不高。至少我是这么认为的,工作几年,存款居然不够付丈母娘的财礼。虽然丈母娘通情达理地减少了彩礼的金额,我妈又多少借了点外债把婚事促成了,但这件事情对我打击却很大。于是决定离开郑州,去上海谋一份高薪的职业。中国的地域差别在太大,同样的工作在不同的地方薪资完全不同,去上海的话工资至少可以翻一倍,我拮据的生活可能会因此有所缓解。

为了去上海的时候能够多一份保障,我开始学习.net。相对于java而言,.net是个后起之秀,虽然功能不如java强大,但是操作相当简单。我在没有任何老师,没有任何教材的情况下,就把.net学会了。总共也只花10块钱买两张盘,一张VS2005的安装盘,一张MSDN的文档盘。学习的过程也相当简单,就是照着msdn上的示例做一个购物网站。不这我到现在还不明白为什么那个例程要叫duwamish,字典上都查不到这个词,完全不知道什么意思。

在上海找工作用的是前程无忧的网站,我java和.net的职位都投了,最先被录用的却是.net.于是我编程生涯就此转折,从java一下子转到.net.录用我的是一家做远程教育的公司,老板是从美国回来创业的信息工程博士,据说之前是戴尔的核心工程师,技术牛得不得了。我被任命为技术部的经理,虽说是经理,不过属下也只有两个人,一个做C++的录制工具,一个做flash的播放器,我做.net的网站。

我刚去上海的时候,住在一个群租房里,一套三室两厅的房子,客厅被改成两间卧室,五间卧室总共住了男男女女18个人,生活极其不便。每个人的领地也就是自己那一张床板。上海的夏天潮湿闷热,想洗个澡都要等好久,早上起来上厕所也是要等好久的,18个人哪。后来媳妇听说我找到了工作,也把工作辞了来到上海。这样群租房是不能住了,于是就在张江和川沙的交界处租了一间房子。却不曾想上海的房租是付三押一的,付了房租之后,带的钱便所剩无几了。

房子是毛坯房,里面什么都没有,而我们却没有钱买家具。于是从附近的垃圾场里找了一张床板,又找了6个油漆桶,把油漆桶装满水当床腿,支起了一张床。然后又找了一张旧椅子,在上面放电磁炉做饭。床板只有80厘米,两个人平躺根本不够,只能两个人抱着侧卧。为了省点午饭钱,媳妇都是做好了饭给我送到公司,然后我们就在公司楼下的小公园里,两个人吃同一份饭。 当时的公司离张江公园很近,其实张江公园原来的名字叫樱花广场,每到四五月份,公园里就会开满绚丽的樱花。在樱花树下走过,有一种身在异国他乡的感觉。

我在上海工作一年多,然后公司就被北京的一家公司收购了,然后我又辗转来到了北京。当时住在回龙观和霍营交界的地方,然后公司却是在昌平。每天早上6点钟就要起床,乘公交到龙泽,然后坐公司班车,走八达岭高速去上班。也就是在那个时候,我学会了在车上睡觉,不管站着坐着都能睡着。

新公司主要做电子政务,用的.net+oracle,虽然我.net代码写的不怎么样,但毕竟项目经验还在,然后就在几个项目上担任项目经理。虽说是项目经理,但我们经常一个项目组就有十四五个人,跟我带3个人的团队是完全不同的。为了弥补短板,我报考了项目管理师,也就是高级项目经理的考试。虽然没有考过,但备考的过程中系统地学习了项目管理的知识。

在北京的日子苦中有甜,我们一有空闲就去游览各种皇家园林,清华园,燕园,园明圆,颐和园等等。有一次我们去十三陵水库游玩,恰好碰上当地苹果节的万人长走活动。然后在陡峭的山路上,我看到人群中有一个老人,坐在轮椅上,由他的老伴推着走。然后我就被感动了,腿不好的人都能参加长走比赛,我们还有什么理由不努力呢?

在北京工作一年多,公司在郑州成立办事处,我又被调回郑州。没过多久,有一家做电子商务的新公司成立,聘请我去当技术总监,公司的产品是基于php的开源软件修改出来的,于是我又转向php领域。这次转php没花多长时间,前后大概用了一个多星期,熟悉了php的语法后就开始进入工作了。 用php做电子商务类网站的话,比java和.net的快得多,而且网上有大量开源的 产品可以使用,用得不顺了,就随手改一下,从此见识到了开源的魅力。

后来公司的的产品做出来了,我有了一些空余时间,于是开始学习ruby和python,ruby和python是动态语言,所谓动态就是可以在运行期间改变语言的属性,比如在运行期间给类增加属性或者方法等,这些在java和C#中是做不到的,类的属性和方法必须在开发期间定义出来,运行期间不能改变。用动态语言编程的话,效率要高很多,因为实现同样的功能,动态语言的代码会少很多。自从学会了ruby和python之后,我基本上就没再用过java和C#了、ruby配合rails可以快速创建网站,而python做为通用脚本语言可以做任何事情 ,比如我在升级了程序后用它来迁移数据。

后来移动端渐热,又学习android和IOS以及WP,当时我集齐了三种操作系统的手机:小米、iphone和诺基亚的lumia,经常看到网上果粉和米粉互骂,我笑而不语。当时做IOS开发,用的还是晦涩难懂的obj-c,obj-c是一个非常反常规的开发语言,它的语法和其它语言都不一样,看着别扭,写着也别扭。当然,苹果肯定也知道这一点,于是推出了swift,当我接触到swift的时候,我觉得obj-c可以扔掉了,它的语法跟ruby和python一样简洁,而且功能比obj-c还要强大。

说到这里,不得不提一下那个老旧的C语言了,C语言诞生于上个世纪中期,已经是老旧不堪了,但是因为在系统程序领域没有有效的替代者,所以在开发系统级软件比如驱动程序时,还非得用它不可。当然,谷歌也知道这一点,于是推出了go.当我见到go的时候,简直震惊了。它的语法比java和C#还要优美,但是却可以开发系统软件,是C语言当之无愧对的替代者。而且go语言诞生在多核时代,所以它一开始就支持高并行开发,它的最小运行单位不是线程,是协程!

  说到协程,不得不提一下erlang语言了,erlang是一门历史很悠久的语言,但直到多核时代才发挥出它的威力,在go出现之前,erlang是做高并发软件的首选。因为erlang是一门函数式语言,它没有变量,所以也就不存在多线和操作共享变量的问题。而且它的最小计算单位是协程,不是线程。这一点至关重要,因为一台普通的PC机可以开出最多5000个线程,却能开出多达10万个协程!然而erlang毕竟是一门函数式的语言,它的语法和命令式的语言完全不同。没有变量,没有循环,没有赋值语句,你在命令式语言中所获得的所有编程经验对它都不起作用。用erlang写程序,你不再是向计算机下达命令,而是在构造数学上的函数,进行模式匹配。

我用erlang编写过一些程序,苦不堪言,好在此时go语言出现了!命令式的语言,最小计算单位是协程,那我还要erlang有什么用? 到后来我开始对编程语言产生了爱好,只要是我不会的语言,我都会抽空去学,哪怕学了完全没有什么用。这就是爱好,源自内心,没有任何功利驱使,这才是学好语言的根本。

在学习中,也遇到了很多困惑和迷茫。为了学习swift,我曾经花了一个星期的时间试图在我的华硕F5上面安装mac系统。折腾了N多遍,最后无果而终,不得已花钱买了一台苹果电脑。学习ruby的时候,还不知道用bundle, rails所需要的几十个gem我是一个一个下载安装的。学习Go语言的时候,想当然地以为那个gopath和其它语言的path一样,指向类库所在的位置,结果花了一个星期也没有运行起一个helloworld程序。

当然,最令我痛心的,是市场上并没有针对初学者的编程工具,那些专业级的开发工具都太复杂,有的需要下载安装插件,经常是插件版本和IDE版本不配,失败多次让人欲哭无泪;有的需要配置环境变量,各种path各种root让人如坠云雾。还有的体积庞大,为了运行一个示例程序要下几个G的开发工具。更有甚者,不能在windows系统上运行,为了学习一门编程语言,需要另外买个电脑!

痛心之余,我忽然发现了一个事实,那就是:我是一个程序员!IT民工也好,码农也罢(当然我更喜欢称自己为IT流浪人),这些都不能掩盖我是程序员的事实!程序员要使用开发工具,当然也可以制作开发工具!于是我萌生了一个想法,要开发出一套针对初学者的编程工具,这个工具可以使用各种开发语言,一次安装即可运行,无须下载插件和SDK,无须设置环境变量,内置很多初学者需要的示例程序,这样不是很好吗?

既然心意已决,那就让我从现在开始吧,首先要给自己的作品起个名字,就叫流浪人IDE吧。英文名Outcast IDE,高端大气不用上档次 。第一版打算支持java、C# 、php、ruby、 python、 go 、siwft、 erlang 八种开发语言,后期再加入其它语言的支持。如果有人也有兴趣开发类似的编程工具,可以联系我,我们一起合作,为中国的软件产业贡献一份力量。

原文链接