热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

我们都是IT民工---------流浪人IDE开发札记

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

       你生命中的有些东西终究会失去,比如我住了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 八种开发语言,后期再加入其它语言的支持。如果有人也有兴趣开发类似的编程工具,可以联系我,我们一起合作,为中国的软件产业贡献一份力量。

本文出自 “海天之间” 博客,请务必保留此出处http://deartear.blog.51cto.com/4128657/1872773


推荐阅读
  • 初探性能优化:入门指南与实践技巧
    在编程领域,常有“尚未精通编码便急于优化”的声音。为了从性能优化的角度提升代码质量,本文将带领读者初步探索性能优化的基本概念与实践技巧。即使程序看似运行良好,数据处理效率仍有待提高,通过系统学习性能优化,能够帮助开发者编写更加高效、稳定的代码。文章不仅介绍了性能优化的基础知识,还提供了实用的调优方法和工具,帮助读者在实际项目中应用这些技术。 ... [详细]
  • VS2019 在创建 Windows 恢复点时出现卡顿问题及解决方法
    在使用 Visual Studio 2019 时,有时会在创建 Windows 恢复点时遇到卡顿问题。这可能是由于频繁的自动更新导致的,每次更新文件大小可能达到 1-2GB。尽管现代网络速度较快,但这些更新仍可能对系统性能产生影响。本文将探讨该问题的原因,并提供有效的解决方法,帮助用户提升开发效率。 ... [详细]
  • 浏览器作为我们日常不可或缺的软件工具,其背后的运作机制却鲜为人知。本文将深入探讨浏览器内核及其版本的演变历程,帮助读者更好地理解这一关键技术组件,揭示其内部运作的奥秘。 ... [详细]
  • 深入解析C语言中结构体的内存对齐机制及其优化方法
    为了提高CPU访问效率,C语言中的结构体成员在内存中遵循特定的对齐规则。本文详细解析了这些对齐机制,并探讨了如何通过合理的布局和编译器选项来优化结构体的内存使用,从而提升程序性能。 ... [详细]
  • 性能测试中的关键监控指标与深入分析
    在软件性能测试中,关键监控指标的选取至关重要。主要目的包括:1. 评估系统的当前性能,确保其符合预期的性能标准;2. 发现软件性能瓶颈,定位潜在问题;3. 优化系统性能,提高用户体验。通过综合分析这些指标,可以全面了解系统的运行状态,为后续的性能改进提供科学依据。 ... [详细]
  • 本文深入解析了JDK 8中HashMap的源代码,重点探讨了put方法的工作机制及其内部参数的设定原理。HashMap允许键和值为null,但键为null的情况只能出现一次,因为null键在内部通过索引0进行存储。文章详细分析了capacity(容量)、size(大小)、loadFactor(加载因子)以及红黑树转换阈值的设定原则,帮助读者更好地理解HashMap的高效实现和性能优化策略。 ... [详细]
  • 回顾过去十多年的开发经历,我在技术能力、培训机会、国际视野以及大型企业的工作经验方面都有了显著的提升。特别是从最初的月薪8k到如今的38k,这一过程中,我深刻体会到系统化学习对提升架构能力的重要性。最初踏入职场时,面对众多未知,我主要依赖团队领导的指导,专注于编写代码、管理数据库和进行测试。随着经验的积累和技术的不断进步,我逐渐意识到,只有通过系统化的学习和实践,才能在技术领域取得更大的突破。 ... [详细]
  • 深入解析Linux内核中的进程上下文切换机制
    在现代操作系统中,进程作为核心概念之一,负责管理和分配系统资源,如CPU和内存。深入了解Linux内核中的进程上下文切换机制,需要首先明确进程与程序的区别。进程是一个动态的执行流,而程序则是静态的数据和指令集合。进程上下文切换涉及保存当前进程的状态信息,并加载下一个进程的状态,以实现多任务处理。这一过程不仅影响系统的性能,还关系到资源的有效利用。通过分析Linux内核中的具体实现,可以更好地理解其背后的原理和技术细节。 ... [详细]
  • Web开发框架概览:Java与JavaScript技术及框架综述
    Web开发涉及服务器端和客户端的协同工作。在服务器端,Java是一种优秀的编程语言,适用于构建各种功能模块,如通过Servlet实现特定服务。客户端则主要依赖HTML进行内容展示,同时借助JavaScript增强交互性和动态效果。此外,现代Web开发还广泛使用各种框架和库,如Spring Boot、React和Vue.js,以提高开发效率和应用性能。 ... [详细]
  • 在当今的软件开发领域,分布式技术已成为程序员不可或缺的核心技能之一,尤其在面试中更是考察的重点。无论是小微企业还是大型企业,掌握分布式技术对于提升工作效率和解决实际问题都至关重要。本周的Java架构师实战训练营中,我们深入探讨了Kafka这一高效的分布式消息系统,它不仅支持发布订阅模式,还能在高并发场景下保持高性能和高可靠性。通过实际案例和代码演练,学员们对Kafka的应用有了更加深刻的理解。 ... [详细]
  • 如何撰写适应变化的高效代码:策略与实践
    编写高质量且适应变化的代码是每位程序员的追求。优质代码的关键在于其可维护性和可扩展性。本文将从面向对象编程的角度出发,探讨实现这一目标的具体策略与实践方法,帮助开发者提升代码效率和灵活性。 ... [详细]
  • 2021年Java开发实战:当前时间戳转换方法详解与实用网址推荐
    在当前的就业市场中,金九银十过后,金三银四也即将到来。本文将分享一些实用的面试技巧和题目,特别是针对正在寻找新工作机会的Java开发者。作者在准备字节跳动的面试过程中积累了丰富的经验,并成功获得了Offer。文中详细介绍了如何将当前时间戳进行转换的方法,并推荐了一些实用的在线资源,帮助读者更好地应对技术面试。 ... [详细]
  • 资源管理器的基础架构包括三个核心组件:1)资源池,用于将CPU和内存等资源分配给不同的容器;2)负载组,负责承载任务并将其分配到相应的资源池;3)分类函数,用于将不同的会话映射到合适的负载组。该系统提供了两种主要的资源管理策略。 ... [详细]
  • C++ 开发实战:实用技巧与经验分享
    C++ 开发实战:实用技巧与经验分享 ... [详细]
  • 软考C语言历年真题精解与详细答案解析 ... [详细]
author-avatar
唤起
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有