go和swift

你生命中的有些东西终究会失去,比如我住了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,www.feihuayl.cn字典上都查不到这个词,完全不知道什么意思。
  
  在上海找工作用的是前程无忧的网站,我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 www.yunfeizao.cn 和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语言出现了!http://new.debangyouxi.com 命令式的语言,最小计算单位是协程,那我还要erlang有什么用?
  
  到后来我开始对编程语言产生了爱好,只要是我不会的语言,我都会抽空去学,哪怕学了完全没有什么用。这就是爱好,源自内心,没有任何功利驱使,这才是学好语言的根本。
  
  在学习中,也遇到了很多困惑和迷茫。为了学习swift,我曾经花了一个星期的时间试图在我的华硕F5上面安装mac系统。折腾了N多遍,最后无果而终,不得已花钱买了一台苹果电脑。学习ruby的时候,还不知道用bundle, rails所需要的几十个gem我是一个一个下载安装的。学习Go语言的时候,想当然地以为那个gopath和其它语言的path一样,指向类库所在的位置,结果花了一个星期也没有运行起一个helloworld程序。
  
  当然,最令我痛心的,是市场上并没有针对初学者的编程工具,那些专业级的开发工具都太复杂,有的需要下载安装插件,经常是插件版本和IDE版本不配,失败多次让人欲哭无泪;有的需要配置环境变量,各种path各种root让人如坠云雾。www.zhenloyl88.cn还有的体积庞大,为了运行一个示例程序要下几个G的开发工具。更有甚者,不能在windows系统上运行,为了学习一门编程语言,需要另外买个电脑!
  
  痛心之余,我忽然发现了一个事实,那就是:我是一个程序员!IT民工也好,码农也罢(当然我更喜欢称自己为IT流浪人),这些都不能掩盖我是程序员的事实!程序员要使用开发工具,当然也可以制作开发工具!于是www.lafei333.cn我萌生了一个想法,要开发出一套针对初学者的编程工具,这个工具可以使用各种开发语言,一次安装即可运行,无须下载插件和SDK,无须设置环境变量,内置很多初学者需要的示例程序,这样不是很好吗?
  
  既然心意已决,那就让我从现在开始吧,首先要给自己的作品起个名字,就叫流浪人IDE吧。英文名Outcast IDE,高端大气不用上档次 。第一版打算支持java、C# 、php、ruby、 python、 go 、siwft、 erlang 八种开发语言,后期再加入其它语言的支持。如果有人也有兴趣开发类似的编程工具,可以联系我,我们一起合作,为中国的软件产业贡献一份力量。

时间: 2024-10-11 10:49:13

go和swift的相关文章

Apple Swift编程语言新手教程

Apple Swift编程语言新手教程 作者: 日期: gashero 2014-06-03 FROM:http://gashero.iteye.com/blog/2075324 文件夹 1   简单介绍 2   Swift入门 3   简单值 4   控制流 5   函数与闭包 6   对象与类 7   枚举与结构 1   简单介绍 今天凌晨Apple刚刚公布了Swift编程语言,本文从其公布的书籍<The Swift Programming Language>中摘录和提取而成.希望对各位的

swift 深入理解Swift的闭包

我们可用swift的闭包来定义变量的值. 先来一个简单的例子大家先感受感受. 定义一个字符串的变量的方法: 直接赋值 var str="JobDeer" 还可以用闭包的方式定义: var str:String={ return "JobDeer" }() 闭包还可以这么定义,省略了等号和括号: var str:String{ return "JobDeer" } 闭包中可以定义get方法. var str:String{ get{ return

在Swift结构体中如何实现写时复制?

结构体(Struct)在Swift语言中占有重要地位,在Swift标准库中,大约有90%的公开类型都是结构体,包括我们常用的Array.String.Dictionary.结构体相比类,一个最重要的特性就是它是值类型,而类似引用类型.值类型是通过复制值来赋值的,而不是引用同一个内存地址,这样就不存在数据共享的问题,能防止意外的数据改变,并且它是线程安全的. 举一个很简单的例子,在objc中,数组是类,是引用类型,在Swift中,数组是结构体,是值类型.因此下面的代码中: let array1 =

Swift学习之位移枚举的按位或运算

在OC里面我们经常遇到一些枚举值可以多选的,需要用或运算来把这些枚举值链接起来,这样的我们称为位移枚举,但是在swift语言里面却不能这么做,下面来讲解一下如何在swift里面使用 OC的位移枚举的区分 //位移枚举typedef NS_OPTIONS(NSUInteger, UIViewAutoresizing) { UIViewAutoresizingNone = 0, UIViewAutoresizingFlexibleLeftMargin = 1 << 0, UIViewAutores

Swift - 用UIScrollView实现视差动画效果

效果 源码 https://github.com/YouXianMing/Swift-Animations // // MoreInfoView.swift // Swift-Animations // // Created by YouXianMing on 16/8/18. // Copyright © 2016年 YouXianMing. All rights reserved. // import UIKit class MoreInfoView: UIView { var imageV

Swift 入门之简单语法(一)

定义 let 定义常量,一经赋值不允许再修改 var 定义变量,赋值之后仍然可以修改 //: # 常量 //: 定义常量并且直接设置数值 let x = 20 //: 常量数值一经设置,不能修改,以下代码会报错 // x = 30 //: 使用 `: 类型`,仅仅只定义类型,而没有设置数值 let x1: Int //: 常量有一次设置数值的机会,以下代码没有问题,因为 x1 还没有被设置数值 x1 = 30 //: 一旦设置了数值之后,则不能再次修改,以下代码会报错,因为 x1 已经被设置了数

Swift和Java关于字符串和字符的比较

1. 字符串字面量 Swift和Java关于字符串操作大同小异. Swift:字符串字面量(String Literals):我们可以在代码中包含一段预定义的字符串值作为字符串字面量. 字符串字面量是由双引号 ("") 包裹着的具有固定顺序的文本字符集.字符串字面量可以用于为常量和变量提供初始值. 代码如下: let someString = "Some string literal value" 字符串字面量可以包含以下特殊字符: 转义字符\0(空字符).\\(反

Swift Tour

设置常数使用let,设置变量使用var var myVariable = 42 myVariable = 50 let myConstant = 42 编译器可以自己推断出变量类型因此不用显式限定. 如果没有赋初值或信息不足以让编译器判断,则可以通过冒号显式声明: let implicitInteger = 70 let implicitDouble = 70.0 let explicitDouble: Double = 70 任何变量类型都不可以隐式转换,所有变量之间的转换都为显式: let

Swift备忘录

Swift 备忘录 2015-4 一.简介 1.Swift 语言由苹果公司在2010年7月开始设计,在 2014 年6月推出,在 2015 年 12 月 3 日开源 2.特点(官方): (1)苹果宣称 Swift 的特点是:快速.现代.安全.互动,而且明显优于 Objective-C 语言 (2)可以使用现有的 Cocoa 和 Cocoa Touch 框架 (3)Swift 取消了 Objective-C 的指针及其他不安全访问的使用 (4)舍弃 Objective-C 早期应用 Smallta

Swift -- 语言指南--高级运算符

原文地址: http://www.cocoachina.com/ios/20140612/8794.html 除了基本操作符中所讲的运算符,Swift还有许多复杂的高级运算符,包括了C语和Objective-C中的位运算符和移位运算. 不同于C语言中的数值计算,Swift的数值计算默认是不可溢出的.溢出行为会被捕获并报告为错误.你是故意的?好吧,你可以使用Swift为你准备的另一套默认允许溢出的数值运算符,如可溢出加&+.所有允许溢出的运算符都是以&开始的. 自定义的结构,类和枚举,是否可