‘壹’ 从c语言到fpga高手,我是怎么炼成的
这些日子我一直在写一个实时操作系统内核,已有小成了,等写完我会全部公开,希望能够为 国内IT的发展尽自己一份微薄的力量。最近看到很多学生朋友和我当年一样没有方向 ,所以把我的经历写出来与大家共勉,希望能给刚入行的朋友们一点点帮助。一转眼我在IT行业学习工作已经七年多了,这期间我做过网页,写过MIS、数据 库,应用程序,做过通信软件、硬件驱动、协议栈,到现在做操作系统内核和 IC相关开发,这中间走了很多弯路,也吃了不少苦。
我上的是一个三流的高校,就连同一个城市的人多数都不知道。因为学校不好也就没有指望能靠学校名气找一个好工作。所有的希望都寄托在自己的努力上了, 大一开学前的假期我就开始了学习,记得我买的第一本书是《计算机基础DOS3.0》,大家别吓着了,其实当时已经普及了DOS6.22了,只是我在书店里 看到了DOS4.0,5.0,6.0的书,以为像英语那样是第四、五、六册,记得当时到处找DOS1.0,现在想想也幸好我没有找到:)开学前我学完了 PASCAL,那时既没有计算机也没有人可以请教,我连程序是什么的概念都没有,只好死记硬背代码,然后拿纸写,我一直到大三才有了一台486,在这之前 用纸写了多少程序我也记不清楚了,只知道最长的一个我拿A4大小的草稿纸写了30 多页,我的C语言、C++ 、VC都是在这样的条件下入门的。所以说条件是可以克服的,希望我的经历多少给条件艰苦的同学们一点信心。第一次上机是在我姐夫的机房,我的心情激动的无 与伦比,但是一上机我立刻傻了眼,他们用的是英文版的Win3.1,我的那点DOS知识都见了鬼,上机提心吊胆的一阵瞎摸,一不小心把Word弄成了全 屏,怎么都还不了原,当时真是心急如焚,我以为机器被我弄坏了。第一个C语言程序,就是那个经典的HelloWorld,我调了几个星期,上机机会非常 少,也没有书告诉我开发环境(TC2.0)需要设置,而且开始我都不知道有编译器,我甚至自作聪明把写好的程序扩展名从.c改成.exe,结果可想而知。 大一学完了C、X86的汇编、数据结构、C++。由于精力都花在自学上了,大一下四门课挂了彩,三类学校就是这点好,挂上一二十门也照样毕业。不过扯远点 说,我那么刻苦都及不了格,可见我们国家的计算机教育有多死板。
大二准备学VC和BC,当时难以取舍,后来选了VC,不为别的,只为书店里两本书,VC 那本便宜6块钱。我的努力在班上无人能及,学的日夜不分,大三有了计算机后更是如此,很多次父亲半夜教训我说我不要命了,我一直觉得自己基础差,记忆又不 行,条件也不好,所以觉得只有多花点时间才能赶上别人。居然后来有许多朋友说我有学计算机的天赋,让我哭笑不得。我用的是486,16M内存,1G硬盘, 当时同学们的配置都是P166MMX,我安装 一个Windows NT4.0需要一个通宵,编译一个BC5.0向导生成的程序需要近两个小时,我的显示器是个二手的,辐射非常大,开机屏幕冒火花,看起来很酷的:),有一 次程序写的太久,觉得怎么白色的编辑器背景变成了紫色,以为显示器坏了,后来才发现眼睛不行了,不过说来也奇怪,到今天我的视力还能保持1.5,真是个奇 迹。但是就是那台破机器陪伴了我两年,让我学会了VC、Delphi、SQLServer等。后来那台机器给我阿姨打字用,据她说一天她正打的开心,一股 青烟夹着火苗从显示器钻出来,之后它才寿终正寝。
大三假期找了个机会在一个计算机研究所实习,与其说实习不如说是做义工,工作了两个月一分钱没有拿。但是这两个月对我的发展帮助很大,让我早一步了解 了社会,刚去的时候我当然是一窍不通,在那里我熟悉了网络,学会了Delphi和Oracle。由于工作很认真,得到了比较好的评价,在一位长者的引荐 下,我开始和他们一起做项目,这使我在大三大四就有了自己的收入,大四又找了两家MIS公司兼职,虽然钱不多,但是在学生期间有1000多的收入我已经非 常满足了,我终于用自己赚的钱把计算机换了。大四下开始找工作,这时我的工作经验已经比较多(当然现在想想非常幼稚),开始听父母的想去那个研究所, 实习过那个部门也希望我能去,但是不知道为什么最后不了了之,这种单位就是比较官僚,我一气之下就到了我兼职的一个公司做MIS的TeamLeader。 在大三到毕业一年的时间,做过了各种MIS,从煤气、烟厂、公安、铁路、饮食到高校,什么有钱做什么,工作也很辛苦,经常加班和熬通宵,从跟客户谈需求到 设计、编码、测试、交付都要上。那时觉得很有成就感,觉得自己还不错,现在想想真是很肤浅。
刚走上工作岗位的学生很容易被误导,各种开发工具让人眼花缭乱,同时也觉得很受公司器重,但这样工作永远是一个低层次的开发者。不要跟我说什么系统分 析有多么多么重要,多么多么难。你以为自己跟用户谈需求做设计就是系统分析和设计了吗,国内又有几个公司能够做的很到位很规范?我是ISO9000内审 员,也在Rational公司受过多次培训,拿了4个证书,还有一个公司让我去做 CMM。这些我听过很多,但是很多事情到国内就变了性质,一个公司不是通过了ISO9000或者CMM就能规范了,我现在在一家有几十年历史的外企工作, 里面的管理不是一般国内企业能及的。作为一个毕业不久以前没有步入过社会的学生,几乎不可能在很短的时间掌握系统分析和设计,面向对象、UML只是一个工 具,关键是人本身的思想,不是说你熟悉了C++、Rose就能够做出好的设计,相反如果你具备了很高的素质,你可以用C写出比别人用C++更加模块化的程 序。
话说远一些,国内软件开发行业有一个怪圈,很多人觉得VC > Delphi > VB,真是很搞笑。这几个软件我都做过开发,说白了他们都是工具,应该根据应用的需要选择采用哪个,而不是觉得哪个上层次。如果你因为用某个开发工具很有 面子而选择的话,只能说明你很浅薄。如果说层次,那么这些工具都不上层次,因为它们用来用去都是一些系统的API,微软的朋友不会因为你记住他们多少个 API或者多少个类就会觉得你很了不起,你永远只是他们的客户,他们看重的是你口袋里的银子。我也做过系统内核,我也封装过很多API,同样我也不会看重 那些使用这些API做二次开发的客户,除非他能够作出自己独到的设计。
至于有人认为C++ > C那更是让人笑掉大牙,不妨你去打听一下,现在有几个操作系统内核是用C++写的,又有几个实时系统用的是C++,当然我也不是说C++不好,但是目前的 内核和实时系统中C++还无法与C匹敌,至于说C++适合做应用系统的开发那是另外一回事。所以我的观点是不在于你用什么工具和语言,而在于你干什么工 作。你的设计体现了你的技术层次。
这样干了一年我觉得非常苦闷,做的大多数都是熟练工种的活,个人技术上没有太多的提高也看不到方向。所以决定离开这个城市去上海,寻求更好的发展,并且打算放弃我以前的MIS转到通信行业。
写到这里不能不提到我女朋友,我们是在来上海前半年认识的,她大四在我公司实习,公司派她给我写文档,我们的感情发展的很快。她告诉我很多事情,她家 原本是改革开放的第一批暴发户,她母亲爱打牌,输掉了几百万,还欠了很多债,她有男朋友,但是她对他没有感情,只因为他给了她母亲两万多块钱,后来还强迫 她写了四万块的借条,她男朋友背叛过她并且不止一次打她,现在逼她结婚不然就要她还钱。这人居然还是一个高校的老师!她母亲把父亲给她的学费花了,因为拖 欠学费她没有办法拿到毕业证。她母亲现在有病需要钱,我拿出了自己的一点积蓄并且跟朋友们借了一些,替她交了学费并给她母亲看病(后来才知道看病的钱又不 知所终,就连她母亲是不是有病我都不知道,但她也是没有办法)。这个时候我家知道了一些事情,坚决反对我和她在一起,她原来的男朋友也极力破坏。无奈之下 我们决定早一点离开这个伤心的城市,并且瞒着我们家。由于时间仓促,我只准备了4000块钱,她仅有的几百块钱也被她母亲要去了,我买了三张票,一张是中 午的,两张是晚上的,中午我的家人把我送上船,他们一离开我就下了船,我和她乘坐晚上的船离开了这个我和她生活了很多年的城市,带走的只是一身债务。没有 来过上海的我们两个性倔强,都不愿意去麻烦同学和朋友。来到上海是傍晚6点半,我们都不知道该去哪里,我们找了一个20块钱的旅馆,这个房间连窗户都没 有,7月份的天气酷热难耐,房间里非常闷热。第二天我们开始租房子,因为身上的钱不多,我们基本都是步行,花了一个星期时间,不知道在浦东转了多少圈后找 到了一个400块的房子,但是我们都不了解上海是付三压一,还要付半个月的中介费,买了一些锅碗瓢盆后,我们身上只有800块钱了,工作都还没有着落,这 800块钱要支持到我们拿到第一个月工资,为了省钱我们自己做饭,每天买菜只花两块钱,她非常喜欢吃(也可能她在大学经常挨饿的原因),看到她现在这样省 吃俭用我真的很不忍心。她以前的男朋友也没有放过她,经常打电话来骚扰,并且来上海看她,还说了不少恐吓她的话,她过于善良,说他以前毕竟帮助过她,叫我 不要与他一般见识。以后的每天在家就是苦等面试通知,原本我想迅速找一家MIS公司解决眼前的困难,但是她坚持让我不要放弃自己的理想,终于功夫不负有心 人,我找到了一家通信公司,4000块的工资虽然赶不上MIS公司给我开出的价位,但也够在上海生存。她也找到了工作,第一天上班她哭了,这是她来上海第 一次流泪,我心里很难受也很感动。
由于是全新的行业,我把自己降到了零点,我学的VC、Delphi、数据库派不上用场,摆在我面前的是嵌入式、协议、信令一些我从未接触过的知识。我 知道我没有退路,于是拼命的学习,我把自己当做一个应届毕业生一样,一分努力一分收获,半年过去我终于熟悉了工作,并且得到了公司的表彰,薪水也加了一 级。后面的日子里我们省吃俭用,把欠朋友的1万多块钱还了,日子终于上了正轨。这时女朋友告诉我她想考研究生,我也很支持,于是她辞职在家备考。
另外,在这里我要感谢我的ProjectManager,他原来是一个大通信公司的产品经理,对人非常和善,我从他那里学到了很多知识,而且他也给了 我许许多多无私的帮助。在工作上他给我充分的空间和信任。记得公司安排我维护一个接入服务器软件,由于代码量不算太小(5万行),资料和文档都不齐全,我 维护起来非常吃力,所以想重新把它做一遍,公司领导不太支持,可能觉得工作量太大,但是他极力支持我,私下里他让我放手去做,我的维护工作他挤时间做。在 他的支持下,我花了半年时间完成了接入服务器的软件,并且实现了一个相对完整的TCP/IP协议栈。在这里我学会了嵌入式系统设计、驱动开发、TCP /IP和很多通信的知识,我花了一年时间终于使自己从MIS开发转到了通信行业,并且站稳了脚跟。我的开发大量是对硬件的直接操作,不再受微软的操作系 统,VC、Delhpi这些开发工具的约束,我终于看到了另外一片天空。
我做事情喜欢追根问底,随着开发的深入,软件开发与硬件联系越来越紧密,硬件知识的匮乏又对我的发展产生了障碍,而且芯片技术基本上掌握在国外公司的 手里,这对做系统级设计是一个非常大的制约,一个新产品出来,第一道利润(也往往是最丰厚的利润)常常都被IC公司如Intel、Motorola赚去 了,国内的厂商只能喝点汤。所以我决心解决自己的硬件技术障碍,并打算离开通信行业,进入IC设计相关领域。
当然我明白如果我对硬件了解的非常少,没有哪家IC公司会仁慈到招我这样一个一窍不通的人来培训。所以我必须努力打好基础,学一些相关知识为以后做准 备。就像我开始从MIS转到通信一样,我看过大量通信方面的书,并且给一个ISP做过RADIUS计费分拣台,在这样的背景下这家通信公司才给了我这个机 会。我在的通信公司是做系统设计的,有不少PCB Layout硬件人员,平常我就注意向他们学习,由于我做的是软件,在公司看硬件资料不好意思,所以开始只好在家看,刚来上海工作我连续一年都在加班,后 来不加了,因为我要挤出时间学习,通常我12点左右睡,第二天5点半起,我上班比较早,地铁上如果人不多我也用来看书。学习当然不会是一帆风顺的,有些实 在不懂的问题就积累起来问硬件人员,他们的帮助使我学习进度快了很多,因为在没有人点拨的情况下自学,我的一半时间是花在解决疑难问题上,但这种问题经常 是别人的一句话就可以让我豁然开朗,我非常庆幸我有这样的学习环境。在后面的一年里,我学会了看硬件原理图,学会了简单的硬件设计(模拟电路方面还有不小 的差距),事情就是这样的,当你安安份份做软件,别人永远认为你是软件开发人员,在你开始学习硬件时别人未必会认同,有位中兴通讯的朋友还对我说过,一个 人不可能把所有东西都学完。我也明白这一点,但我希望自己做的更好。但当你熟悉硬件后大家又会觉得你好像原本就是软硬件都懂的,同事们也都习以为常了。这 个时候我可以把硬件资料堂堂正正的拿到公司看,没有人再大惊小怪了。让我比较自豪的是我通过自己的努力做了一个IAD(软交换的终端设备)系统方案,包含 软硬件的选型、设计等内容,这个方案得到了公司和同事们的认同,让我感到非常欣慰。
技术是相辅相成的,当我的硬件有了一定的进步后,我的软件设计也有了很大的提高,我可以从更深层次理解问题,我做的接入服务器CPU是 Motorola PowerPC860,熟悉的朋友都知道860 QMC与软件的批量数据传输通常采用BD表的方式,硬件人员做驱动的时候习惯采用固定BD表,每接收或发送数据都将数据从BD表拷贝到用户Buffer, 或从用户Buffer拷贝到BD表,由于理解的比较深入,我自己重新实现了这个过程,采用动态BD表的方式,驱动从一个网口接收数据,提交给我的软件进行 三层交换,直至从另外的接口发送出去,没有进行一次拷贝。这样的设计大大提高了性能,使系统的指标接近理论值。软硬件的结合使我的设计水平上了一个台阶。 我现在写的这个操作系统,编译后我把程序反编译成汇编,找出其中不优化的代码,然后在C程序中进行调整。举个例子,很多CPU没有专门的乘法指令,这个大 家应该都知道,在这种CPU上进行一个乘法操作常常会花费大量的指令周期,有的朋友会说这个我知道,我会尽量避免采用×号,但是事情往往不是那么简单,你 知道 C语言中数组的下标操作是怎么实现的吗?仔细看看反汇编的代码你就会明白,同样是通过下标的定位操作,C编译器会有时候会产生位移指令,但有时候会用乘法 实现,两者效率往往是天壤之别,所以明白这些问题你才能将系统性能提升到极致。这些问题就不多说了,有兴趣的话以后可以共同探讨。
话说远一点,我由衷的希望在软件上做的比较深入的朋友们有机会学学硬件以及其它相关知识,尤其是做底层开发和嵌入式设计的。这对软件技术的提高有非常 大的帮助,否则很多事情你只知道该这样但不会明白为什么该这样。我这个观点在我现在的IC公司Project Manager那里也得到了验证。他告诉我们公司现在的802.11芯片产品的软件经理原本是做该芯片硬件设计的,某某某原本是做软件的,现在在做IC, 类似的例子还有很多,只是在国内这样的风气不是非常流行。
我有一些心得体会与大家分享,只有当我干好本职工作后,我才会学习与工作关系不大的技术,这样公司的上司才不至于反感,在入门阶段的问题我通常不去问 那些资深人士,而是问一些资历比较浅的朋友,比如刚毕业不久的学生,因为他们往往会跟你详细的讲解,而资深人士通常觉得你的问题太简单,所以回答的也很简 单,我又不好意思多问。等技术上了一定的层次后我才会问他们,他们也能给你比较深入的回答。另外,有些朋友说我机会比较好,他们也希望能从事新的工作可惜 没有机会,我听了只有苦笑,我的机会了解的人都应该知道,我没有出生在什么IT世家:)也没有谁一路提拔我,所有的路都是自己走出来的,我母亲去世比较 早,我的后母(我叫她阿姨)看着我努力过来的,一次她看我大年30还在写程序,她说像我这样努力木头都能学出来。
我的最终目的是IC而不是PCB,所以我下一步的准备开始学习IC设计的知识。公司的同事没有懂IC设计的,后面的路又要靠自己了,我买了不少相关的 书,在网上也查了很多的资料,我花了大量的时间去学习VHDL,并且用软件进行了一些简单的设计和仿真(没有设计ASIC,只是针对FPGA),随着学习 的深入,我渐渐明白了IC设计的基本流程,同时也明白了这条路的艰辛。这个时候我已经做好了跳槽的准备,我向一家业界有一定知名度的IC设计公司投了简 历,并通过了漫长的面试(4个多小时)。其他的一切我都比较满意,唯独薪资差强人意,我也明白原因,因为我是这个行业的新人,我没有经验,我再一次将自己 清零了。公司老板问我6000多一个月能不能接受,我知道他也是照章办事。想想我通信行业的朋友们,基本上都是年薪10万以上,月薪过万的也比比皆是,朋 友们也帮我介绍了不少待遇不错的公司,我该怎么选择,当时我很犹豫,我热爱我的事业,我向往我的追求,但我也是一个普通的人,我也需要养家糊口,我也想早 一点买房买车。生活给我出了一道难题。
爱因斯坦在63岁时说过“一个人没有在30岁以前达成科学上的最大成就,那他永远都不会有。”这句话给了我很大的压力和震动,我马上就26岁了,离 30只有四年时间,我必须抓紧这几年宝贵的时间,努力达到我技术上的最高峰。为了这个理想,为了能离自己的梦更近一些,我选择了这家IC公司,我明白自己 的薪资和公司刚进来的硕士研究生相差无几,但为了今后的发展只能忍受,一切又得重新开始。换行业是一个非常痛苦的过程,尤其从一个春风得意的位置换到一个 陌生的岗位,感觉象从温暖的被子里钻出来跳进冰水中,让人难以接受。在原来那家通信公司,我是唯一两年时间涨了五次工资的员工,公司和同事都给了我极大的 认可,工作上也常常被委以重任。但现在这一切都成了过去,在新的公司我只是一个新人,没有人知道也没有人在意我过去的成绩。我决定重新开始,我把自己看作 新毕业的学生,我要用自己的努力得到公司的认可。进入新的行业是非常痛苦的,我告诉自己必须忍受这一切,虽然外面有很多诱惑,但是既然作出了选择我就不允 许自己轻易放弃。
我现在已经在这家新公司上了一个多月的班,开始非常艰难,现在慢慢适应了。第一 个月结束时,Team Leader找我谈话,说我是新进员工中最优秀的一个,我心里很欣慰,这也算对我努力的一个肯定吧。在这里还要感谢我的女朋友,她给了我很大的支持和鼓 舞,每次在我动摇的时候她都在鼓励我,让我坚持自己的理想,刚来上海是她让我不要勉强去做MIS,这次也是她让我顶住了月薪过万的诱惑,没有她我可能不会 有今天的成绩。现在的公司有自己的操作系统,自己的CPU、DSP和其它芯片,在这里我能学到世界上最先进的技术,我们的设计开发不再完全依赖别人的硬件 和系统,这让我很开心。我打算等工作步入正轨后,全力学习新的知识,实现我的理想。在后面的两年里我给自己定下了几个目标:
努力做好本职工作,在工作上得到公司和同事们的认同;
努力学习IC硬件设计知识,多向同事请教,并利用一切机会多实践;
实现我的实时操作系统的主要部分,完成TCP/IP协议栈模块,并免费发布源代码;
和我女朋友结婚并买一套小房子,这是最重要的,因为我明白事业是可以重来的,但是珍贵的感情很难失而复得。
在这里提一下我现在开发的操作系统,它是一个实时嵌入式系统,目前支持:
a.时间片轮转调度和基于优先级调度,最多64个优先级;
b.抢占式实时内核;
c.为了便于移植,主体用标准C实现;
d.汇编代码非常少,不到100行;
e.支持任务管理,各任务有独立的堆栈;
f.进程同步和通信目前完成了Semaphore,Message Queue正在调试;
g.实现了定时系统调用;
h.可以在windows上仿真调试
我还打算下一步实现优先级反转保护,Event Flag,Data Pipe,内存管理(以前实现过)、驱动接口等。 在这之后我还会努力完善它,比如加入文件系统,协议栈、调试接口等。希望朋友们提出自己的意见和建议,在此不胜感激!
就像有的朋友说的,我的经历或许会给一些朋友产生误导,在这里我必须说明一下。我来上海以前学习过于拼命,常常晚上只睡3个多小时,我身高1米71, 那时只有108斤(我现在130多),家人也说我这样拼命活不过60岁,但是当时的我太固执,我对他们说只要能实现理想活50岁我就够了。那时的拼命使我 的身体受到了影响,有一次早上突然腰肌剧痛难忍,痛的我倒在床上站不起来。虽然我现在已经比较注意,但有时候还会隐隐作痛。后来在女朋友说服了我,来上海 以后我不再如此。我经常引用父亲的一句话,而且我也发现拼命不是办法,我可以熬一两个通宵,最多的一次我连续工作了三天三夜,但是我半个月都没有恢复过 来,这样是不是得不偿失?
学习工作应该是一个长期的过程,像马拉松而不是百米冲刺。我现在非常注意调整学习和工作的强度,我要保证每天尽量有相对充沛的精 力,一些年轻的朋友觉得自己也应该拼命努力,这让我多少有些担心,如果我的故事能让你在学习工作上多一点兴趣,我会感到很开心,但如果误导了某些朋友,让 你做一些不值得的付出,我会感到很内疚。
‘贰’ 我想学习C语言 可我的电脑知识浅薄 我该买什么书(自学) 该用什么C语言什么编程软件
机高手的成长历程,我看之后感触颇深,希望对你也有帮助.
=========================================
这些日子我一直在写一个实时操作系统内核,已有小成了,等写完我会全部公开,希望能够为国内IT的发展尽自己一份微薄的力量。最近看到很多学生朋友和我当年一样没有方向,所以把我的经历写出来与大家共勉,希望能给刚入行的朋友们一点点帮助。
一转眼我在IT行业学习工作已经七年多了,这期间我做过网页,写过MIS、 数据库,应用程序,做过通信 >软件、硬件驱动、 协议栈,到现在做操作系统内核和IC相关开发,这中间走了很多弯路,也吃了不少苦。
我上的是一个三流的高校,就连同一个城市的人多数都不知道。因为学校不好也就没有指望能靠学校名气找一个好工作。所有的希望都寄托在自己的努力上了,大一开学前的假期我就开始了学习,记得我买的第一本书是《 计算机基础DOS3.0》,大家别吓着了,其实当时已经普及了DOS6.22了,只是我在书店里看到了DOS4.0,5.0,6.0的书,以为像英语那样是第四、五、六册,记得当时到处找DOS1.0,现在想想也幸好我没有找到:)开学前我学完了PASCAL,那时既没有 计算机也没有人可以请教,我连程序是什么的概念都没有,只好死记硬背 代码,然后拿纸写,我一直到大三才有了一台486,在这之前用纸写了多少程序我也记不清楚了,只知道最长的一个我拿A4大小的草稿纸写了30多页,我的C语言、C++、VC都是在这样的条件下 入门的。所以说条件是可以克服的,希望我的经历多少给条件艰苦的同学们一点信心。第一次上机是在我姐夫的机房,我的心情激动的无与伦比,但是一上机我立刻傻了眼,他们用的是英文版的in3.1,我的那点DOS 知识都见了鬼,上机提心吊胆的一阵瞎摸,一不小心把Word弄成了全屏,怎么都还不了原,当时真是心急如焚,我以为机器被我弄坏了。第一个C语言程序,就是那个经典的HelloWorld,我调了几个星期,上机机会非常少,也没有书告诉我开发环境(TC2.0)需要设置,而且开始我都不知道有编译器,我甚至自作聪明把写好的程序扩展名从.c改成.exe,结果可想而知。大一学完了C、X86的汇编、数据结构、C++。由于精力都花在自学上了,大一下四门课挂了彩,三类学校就是这点好,挂上一二十门也照样毕业。不过扯远点说,我那么刻苦都及不了格,可见我们国家的 计算机教育有多死板。
大二准备学VC和BC,当时难以取舍,后来选了VC,不为别的,只为书店里两本书,VC那本便宜6块钱。我的努力在班上无人能及,学的日夜不分,大三有了 计算机后更是如此,很多次父亲半夜教训我说我不要命了,我一直觉得自己基础差,记忆又不行,条件也不好,所以觉得只有多花点时间才能赶上别人。居然后来有许多朋友说我有学 计算机的天赋,让我哭笑不得。我用的是486,16M内存,1G硬盘,当时同学们的配置都是P166MMX,我安装一个indowsNT4.0需要一个通宵,编译一个BC5.0向导生成的程序需要近两个小时,我的显示器是个二手的,辐射非常大,开机屏幕冒火花,看起来很酷的:),有一次程序写的太久,觉得怎么白色的编辑器背景变成了紫色,以为显示器坏了,后来才发现眼睛不行了,不过说来也奇怪,到今天我的视力还能保持1.5,真是个奇迹。但是就是那台破机器陪伴了我两年,让我学会了VC、Delphi、SQLServer等。后来那台机器给我阿姨打字用,据她说一天她正打的开心,一股青烟夹着火苗从显示器钻出来,之后它才寿终正寝。
大三假期找了个机会在一个 计算机研究所实习,与其说实习不如说是做义工,工作了两个月一分钱没有拿。但是这两个月对我的发展帮助很大,让我早一步了解了社会,刚去的时候我当然是一窍不通,在那里我熟悉了网络,学会了Delphi和Oracle。由于工作很认真,得到了比较好的评价,在一位长者的引荐下,我开始和他们一起做项目,这使我在大三大四就有了自己的收入,大四又找了两家MIS公司兼职,虽然钱不多,但是在学生期间有1000多的收入我已经非常满足了,我终于用自己赚的钱把 计算机换了。大四下开始找工作,这时我的工作经验已经比较多(当然现在想想非常幼稚),开始听父母的想去那个研究所,实习过那个部门也希望我能去,但是不知道为什么最后不了了之,这种单位就是比较官僚,我一气之下就到了我兼职的一个公司做MIS的TeamLeader。在大三到毕业一年的时间,做过了各种MIS,从煤气、烟厂、公安、铁路、饮食到高校,什么有钱做什么,工作也很辛苦,经常加班和熬通宵,从跟客户谈需求到设计、编码、测试、交付都要上。那时觉得很有成就感,觉得自己还不错,现在想想真是很肤浅。
刚走上工作岗位的学生很容易被误导,各种开发 工具让人眼花缭乱,同时也觉得很受公司器重,但这样工作永远是一个低层次的开发者。不要跟我说什么系统分析有多么多么重要,多么多么难。你以为自己跟用户谈需求做设计就是系统分析和设计了吗,国内又有几个公司能够做的很到位很规范?我是ISO9000内审员,也在Rational公司受过多次培训,拿了4个证书,还有一个公司让我去做CMM。这些我听过很多,但是很多事情到国内就变了性质,一个公司不是通过了ISO9000或者CMM就能规范了,我现在在一家有几十年历史的外企工作,里面的管理不是一般国内企业能及的。作为一个毕业不久以前没有步入过社会的学生,几乎不可能在很短的时间掌握系统分析和设计,面向对象、UML只是一个 工具,关键是人本身的思想,不是说你熟悉了C++、Rose就能够做出好的设计,相反如果你具备了很高的素质,你可以用C写出比别人用C++更加模块化的程序。
话说远一些,国内 >软件开发行业有一个怪圈,很多人觉得VC>Delphi>VB,真是很搞笑。这几个 >软件我都做过开发,说白了他们都是 工具,应该根据应用的需要选择采用哪个,而不是觉得哪个上层次。如果你因为用某个开发 工具很有面子而选择的话,只能说明你很浅薄。如果说层次,那么这些 工具都不上层次,因为它们用来用去都是一些系统的API,微软的朋友不会因为你记住他们多少个API或者多少个类就会觉得你很了不起,你永远只是他们的客户,他们看重的是你口袋里的银子。我也做过系统内核,我也封装过很多API,同样我也不会看重那些使用这些API做二次开发的客户,除非他能够作出自己独到的设计。
至于有人认为C++>C那更是让人笑掉大牙,不妨你去打听一下,现在有几个操作系统内核是用C++写的,又有几个实时系统用的是C++,当然我也不是说C++不好,但是目前的内核和实时系统中C++还无法与C匹敌,至于说C++适合做应用系统的开发那是另外一回事。所以我的观点是不在于你用什么 工具和语言,而在于你干什么工作。你的设计体现了你的 技术层次。
这样干了一年我觉得非常苦闷,做的大多数都是熟练工种的活,个人 技术上没有太多的提高也看不到方向。所以决定离开这个城市去上海,寻求更好的发展,并且打算放弃我以前的MIS转到通信行业。
写到这里不能不提到我女朋友,我们是在来上海前半年认识的,她大四在我公司实习,公司派她给我写文档,我们的感情发展的很快。她告诉我很多事情,她家原本是改革开放的第一批暴发户,她母亲爱打牌,输掉了几百万,还欠了很多债,她有男朋友,但是她对他没有感情,只因为他给了她母亲两万多块钱,后来还强迫她写了四万块的借条,她男朋友背叛过她并且不止一次打她,现在逼她结婚不然就要她还钱。这人居然还是一个高校的老师!她母亲把父亲给她的学费花了,因为拖欠学费她没有办法拿到毕业证。她母亲现在有病需要钱,我拿出了自己的一点积蓄并且跟朋友们接了一些,替她交了学费并给她母亲看病(后来才知道看病的钱又不知所终,就连她母亲是不是有病我都不知道,但她也是没有办法)。这个时候我家知道了一些事情,坚决反对我和她在一起,她原来的男朋友也极力破坏。无奈之下我们决定早一定离开这个伤心的城市,并且瞒着我们家。由于时间仓促,我只准备了4000块钱,她仅有的几百块钱也被她母亲要去了,我买了三张票,一张是中午的,两张是晚上的,中午我的家人把我送上船,他们一离开我就下了船,我和她乘坐晚上的船离开了这个我和她生活了很多年的城市,带走的只是一身债务。没有来过上海的我们两个性倔强,都不愿意去麻烦同学和朋友。来到上海是傍晚6点半,我们都不知道该去哪里,我们找了一个20块钱的旅馆,这个房间连窗户都没有,7月份的天气酷热难耐,房间里非常闷热。第二天我们开始租房子,因为身上的钱不多,我们基本都是步行,花了一个星期时间,不知道在浦东转了多少圈后找到了一个400块的房子,但是我们都不了解上海是付三压一,还要付半个月的中介费,买了一些锅碗瓢盆后,我们身上只有800块钱了,工作都还没有着落,这800块钱要支持到我们拿到第一个月工资,为了省钱我们自己做饭,每天买菜只花两块钱,她非常喜欢吃(也可能她在大学经常挨饿的愿意),看到她现在这样省吃俭用我真的很不忍心。她以前的男朋友也没有放过她,经常打电话来骚扰,并且来上海看她,还说了不少恐吓她的话,她过于善良,说他以前毕竟帮助过她,叫我不要与他一般见识。以后的每天在家就是苦等面试通知,原本我想迅速找一家MIS公司解决眼前的困难,但是她坚持让我不要放弃自己的理想,终于功夫不负有心人,我找到了一家通信公司,4000块的工资虽然赶不上MIS公司给我开出的价位,但也够在上海生存。她也找到了工作,第一天上班她哭了,这是她来上海第一次流泪,我心里很难受也很感动。
由于是全新的行业,我把自己降到了零点,我学的VC、Delphi、 数据库派不上用场,摆在我面前的是嵌入式、协议、信令一些我从未接触过的 知识。我知道我没有退路,于是拼命的学习,我把自己当做一个应届毕业生一样,一分努力一分收获,半年过去我终于熟悉了工作,并且得到了公司的表彰,薪水也加了一级。后面的日子里我们省吃俭用,把欠朋友的1万多块钱还了,日子终于上了正轨。这时女朋友告诉我她想考研究生,我也很支持,于是她辞职在家备考。
另外,在这里我要感谢我的ProjectManager,他原来是一个大通信公司的产品经理,对人非常和善,我从他那里学到了很多 知识,而且他也给了我许许多多无私的帮助。在工作上他给我充分的空间和信任。记得公司安排我维护一个接入服务器 >软件,由于 代码量不算太小(5万行),资料和文档都不齐全,我维护起来非常吃力,所以想重新把它做一遍,公司领导不太支持,可能觉得工作量太大,但是他极力支持我,私下里他让我放手去做,我的维护工作他挤时间做。在他的支持下,我花了半年时间完成了接入服务器的 >软件,并且实现了一个相对完整的 TCP/IP 协议栈。在这里我学会了嵌入式系统设计、驱动开发、 TCP/IP和很多通信的 知识,我花了一年时间终于使自己从MIS开发转到了通信行业,并且站稳了脚跟。我的开发大量是对硬件的直接操作,不再受微软的操作系统,VC、Delhpi这些开发 工具的约束,我终于看到了另外一片天空。
我做事情喜欢追根问底,随着开发的深入, >软件开发与硬件联系越来越紧密,硬件 知识的匮乏又对我的发展产生了障碍,而且芯片 技术基本上掌握在国外公司的手里,这对做系统级设计是一个非常大的制约,一个新产品出来,第一道利润(也往往是最丰厚的利润)常常都被IC公司如Intel、Motorola赚去了,国内的厂商只能喝点汤。所以我决心解决自己的硬件 技术障碍,并打算离开通信行业,进入IC设计相关领域。
当然我明白如果我对硬件了解的非常少,没有哪家IC公司会仁慈到招我这样一个一窍不通的人来培训。所以我必须努力打好基础,学一些相关 知识为以后做准备。就像我开始从MIS转到通信一样,我看过大量通信方面的书,并且给一个ISP做过RADIUS计费分拣台,在这样的背景下这家通信公司才给了我这个机会。我在的通信公司是做系统设计的,有不少PCBLayout硬件人员,平常我就注意向他们学习,由于我做的是 >软件,在公司看硬件资料不好意思,所以开始只好在家看,刚来上海工作我连续一年都在加班,后来不加了,因为我要挤出时间学习,通常我12点左右睡,第二天5点半起,我上班比较早,地铁上如果人不多我也用来看书。学习当然不会是一帆风顺的,有些实在不懂的问题就积累起来问硬件人员,他们的帮助使我学习进度快了很多,因为在没有人点拨的情况下自学,我的一半时间是花在解决疑难问题上,但这种问题经常是别人的一句话就可以让我豁然开朗,我非常庆幸我有这样的学习环境。在后面的一年里,我学会了看硬件原理图,学会了简单的硬件设计(模拟电路方面还有不小的差距),事情就是这样的,当你安安份份做 >软件,别人永远认为你是 >软件开发人员,在你开始学习硬件时别人未必会认同,有位中兴通讯的朋友还对我说过,一个人不可能把所有东西都学完。我也明白这一点,但我希望自己做的更好。但当你熟悉硬件后大家又会觉得你好像原本就是软硬件都懂的,同事们也都习以为常了。这个时候我可以把硬件资料堂堂正正的拿到公司看,没有人再大惊小怪了。让我比较自豪的是我通过自己的努力做了一个IAD(软交换的终端设备)系统方案,包含软硬件的选型、设计等内容,这个方案得到了公司和同事们的认同,让我感到非常欣慰。
技术是相辅相成的,当我的硬件有了一定的进步后,我的 >软件设计也有了很大的提高,我可以从更深层次理解问题,我做的接入服务器CPU是MotorolaPowerPC860,熟悉的朋友都知道860QMC与 >软件的批量数据传输通常采用BD表的方式,硬件人员做驱动的时候习惯采用固定BD表,每接收或发送数据都将数据从BD表拷贝到用户Buffer,或从用户Buffer拷
贝到BD表,由于理解的比较深入,我自己重新实现了这个过程,采用动态BD表的方式,驱动从一个网口接收数据,提交给我的 >软件进行三层交换,直至从另外的接口发送出去,没有进行一次拷贝。这样的设计大大提高了性能,使系统的指标接近理论值。软硬件的结合使我的设计水平上了一个台阶。我现在写的这个操作系统,编译后我把程序反编译成汇编,找出其中不优化的 代码,然后在C程序中进行调整。举个例子,很多CPU没有专门的乘法指令,这个大家应该都知道,在这种CPU上进行一个乘法操作常常会花费大量的指令周期,有的朋友会说这个我知道,我会尽量避免采用×号,但是事情往往不是那么简单,你知道C语言中数组的下标操作是怎么实现的吗?仔细看看反汇编的 代码你就会明白,同样是通过下标的定位操作,C编译器会有时候会产生位移指令,但有时候会用乘法实现,两者效率往往是天壤之别,所以明白这些问题你才能将系统性能提升到极致。这些问题就不多说了,有兴趣的话以后可以共同探讨。
话说远一点,我由衷的希望在 >软件上做的比较深入的朋友们有机会学学硬件以及其它相关 知识,尤其是做底层开发和嵌入式设计的。这对 >软件 技术的提高有非常大的帮助,否则很多事情你只知道该这样但不会明白为什么该这样。我这个观点在我现在的IC公司ProjectManager那里也得到了验证。他告诉我们公司现在的802.11芯片产品的 >软件经理原本是做该芯片硬件设计的,某某某原本是做 >软件的,现在在做IC,类似的例子还有很多,只是在国内这样的风气不是非常流行。
我有一些心得体会与大家分享,只有当我干好本职工作后,我才会学习与工作关系不大的 技术,这样公司的上司才不至于反感,在 入门阶段的问题我通常不去问那些资深人士,而是问一些资历比较浅的朋友,比如刚毕业不久的学生,因为他们往往会跟你详细的讲解,而资深人士通常觉得你的问题太简单,所以回答的也很简单,我又不好意思多问。等 技术上了一定的层次后我才会问他们,他们也能给你比较深入的回答。另外,有些朋友说我机会比较好,他们也希望能从事新的工作可惜没有机会,我听了只有苦笑,我的机会了解的人都应该知道,我没有出生在什么IT世家:)也没有谁一路提拔我,所有的路都是自己走出来的,我母亲去世比较早,我的后母(我叫她阿姨)看着我努力过来的,一次她看我大年30还在写程序,她说像我这样努力木头都能学出来。
我的最终目的是IC而不是PCB,所以我下一步的准备开始学习IC设计的 知识。公司的同事没有懂IC设计的,后面的路又要靠自己了,我买了不少相关的书,在网上也查了很多的资料,我花了大量的时间去学习VHDL,并且用 >软件进行了一些简单的设计和仿真(没有设计ASIC,只是针对FPGA),随着学习的深入,我渐渐明白了IC设计的基本流程,同时也明白了这条路的艰辛。这个时候我已经做好了跳槽的准备,我向一家业界又一定知名度的IC设计公司投了简历,并通过了漫长的面试(4个多小时)。其他的一切我都比较满意,唯独薪资差强人意,我也明白原因,因为我是这个行业的新人,我没有经验,我再一次将自己清零了。公司老板问我6000多一个月能不能接受,我知道他也是照章办事。想想我通信行业的朋友们,基本上都是年薪10万以上,月薪过万的也比比皆是,朋友们也帮我介绍了不少待遇不错的公司,我该怎么选择,当时我很犹豫,我热爱我的事业,我向往我的追求,但我也是一个普通的人,我也需要养家糊口,我也想早一点买房买车。生活给我出了一道难题。
爱因斯坦在63岁时说过"一个人没有在30岁以前达成科学上的最大成就,那他永远都不会有。"这句话给了我很大的压力和震动,我马上就26岁了,离30只有四年时间,我必须抓紧这几年宝贵的时间,努力达到我 技术上的最高峰。为了这个理想,为了能离自己的梦更近一些,我选择了这家IC公司,我明白自己的薪资和公司刚进来的硕士研究生相差无几,但为了今后的发展只能忍受,一切又得重新开始。换行业是一个非常痛苦的过程,尤其从一个春风得意的位置换到一个陌生的岗位,感觉象从温暖的被子里钻出来跳进冰水中,让人难以接受。在原来那家通信公司,我是唯一两年时间涨了五次工资的员工,公司和同事都给了我极大的认可,工作上也常常被委以重任。但现在这一切都成了过去,在新的公司我只是一个新人,没有人知道也没有人在意我过去的成绩。我决定重新开始,我把自己看作新毕业的学生,我要用自己的努力得到公司的认可。进入新的行业是非常痛苦的,我告诉自己必须忍受这一切,虽然外面有很多诱惑,但是既然作出了选择我就不允许自己轻易放弃。
我现在已经在这家新公司上了一个多月的班,开始非常艰难,现在慢慢适应了。第一个月结束时,TeamLeader找我谈话,说我是新进员工中最优秀的一个,我心里很欣慰,这也算对我努力的一个肯定吧。在这里还要感谢我的女朋友,她给了我很大的支持和鼓舞,每次在我动摇的时候她都在鼓励我,让我坚持自己的理想,刚来上海是她让我不要勉强去做MIS,这次也是她让我顶住了月薪过万的诱惑,没有她我可能不会有今天的成绩。
现在的公司有自己的操作系统,自己的CPU、DSP和其它芯片,在这里我能学到世界上最先进的 技术,我们的设计开发不再完全依赖别人的硬件和系统,这让我很开心。我打算等工作步入正轨后,全力学习新的 知识,实现我的理想。
在后面的两年里我给自己定下了几个目标:
一.努力做好本职工作,在工作上得到公司和同事们的认同;
二.努力学习IC硬件设计 知识,多向同事请教,并利用一切机会多实践;
三.实现我的实时操作系统的主要部分,完成 TCP/IP 协议栈模块,并免费发布源 代码;
四.和我女朋友结婚并买一套小房子,这是最重要的,因为我明白事业是可以重来的,但是珍贵的感情很难失而复得。
在这里提一下我现在开发的操作系统,它是一个实时嵌入式系统,目前支持以下特性:
a.支持时间片轮转调度和基于优先级调度,最多64个优先级;
b.抢占式实时内核;
c.为了便于移植,主体用标准C实现;
d.汇编 代码非常少,不到100行;
e.支持任务管理,各任务有独立的堆栈;
f.进程同步和通信目前完成了Semaphore,MessageQueue正在调试;
g.实现了定时系统调用;
h.可以在windows上仿真调试
我还打算下一步实现优先级反转保护,EventFlag,DataPipe,内存管理(以前实现过)、驱动接口等。在这之后我还会努力完善它,比如加入文件系统, 协议栈、调试接口等。希望朋友们提出自己的意见和建议,在此不胜感激!
后记:
就像有的朋友说的,我的经历或许会给一些朋友产生误导,在这里我必须说明一下。我来上海以前学习过于拼命,常常晚上只睡3个多小时,我身高1米71,那时只有108斤(我现在130多),家人也说我这样拼命活不过60岁,但是当时的我太固执,我对他们说只要能实现理想活50岁我就够了。那时的拼命使我的身体受到了影响,有一次早上突然腰肌剧痛难忍,痛的我倒在床上站不起来。虽然我现在已经比较注意,但有时候还会隐隐作痛。后来在女朋友说服了我,来上海以后我不再如此。我经常引用父亲的一句话"身体是革命的本钱"。
而且我也发现拼命不是办法,我可以熬一两个通宵,最多的一次我连续工作了三天三夜,但是我半个月都没有恢复过来,这样是不是得不偿失?学习工作应该是一个长期的过程,像马拉松而不是百米冲刺。我现在非常注意调整学习和工作的强度,我要保证每天尽量有相对充沛的精力,一些年轻的朋友觉得自己也应该拼命努力,这让我多少有些担心,如果我的故事能让你在学习工作上多一点兴趣,我会感到很开心,但如果误导了某些朋友,让你做一些不值得的付出,我会感到很内疚。
技术没有贵贱只分,我以前换行业是因为自己的兴趣所致,而不是对哪个行业有什么偏见。我希望我的经历不要给朋友一个错误的导向,觉得我始终向更高的 技术发展。其实各行各业做到顶尖都是很困难的。话又说回来虽然 技术没有贵贱,但是门槛是有高低的,无论如何,做IC的门槛要比做网页的高,这一点无可否认。国家各种人才都是需要的,但是作为个人奋发向上的想法还是应该有的,努力在自己喜欢的行业上做的更好,而不应该停留在比较肤浅的层次上。
我是一个自己觉得比较有自知之明的人,或许我最大的优点就是知道自己有很多缺点:)。我的故事中很多的曲折和错误都是由我的缺点造成的,希望大家用审慎的眼光看待我的经历,不要被我的"花言巧语"所迷惑。我学习有些随心所欲,这给我带来了无尽的麻烦,也大大阻碍的我的发展。记得我小时候成绩比较出色,但是后来学习严重偏科,导致我中学成绩一再滑坡,也没有考上什么好的学校,小时候的一个朋友,当时的成绩和我相仿,但是没有我这个缺点,她上了清华,后来在去了美国深造,在一个着名导师手下研究理论科学,这未尝不是一条更好的出路。另外我的学习方法也是在不断改善中的,过去的学习过于讲究数量和时间,那样学习既苦而已效率不高,现在我非常注意学习的效率和技巧,这样才是学习的捷径(当然不是指投机取巧),比如说学一相对陌生的 技术,如果有条件,不妨问一问有经验的人,不需要问很多,往往他不经意的几句话会给你非常大的帮助,甚至超过你看一个星期的书。带着这样的思想再去学习你会节省很多时间,这样何乐不为呢?这些年中我学了不少的东西,由于开始非常盲目,所以学的东西杂乱无章,现在回想起来让我啼笑皆非,我把大量的时间浪费在一些没有必要深入了解的 知识上,毕竟一个人的精力是有限度的。很多朋友很我一样都背过五笔字形,的确它是个不错的输入法,但是对一个研发人员它绝对不值得你去背,你的时间应该花在有价值的地方。我这样的事情还做过很多,我背过CCED、WPS的命令和快捷键,在dBase基本退出历史舞台后我还花了很多时间去学习它的使用。所以我的学习在前期缺乏规划,没有明确的短期目的、中期目标,只有一个虚无飘渺的长期的理想。这就像做设计一样,好的设计是从需求抽象到 代码有很多过程,而不能得到了需求就立刻开始开始编码。
‘叁’ c语言是什么
C语言诞生于20世纪70年代,比我们大多数人都大。当然,C语言并非没有缺轿嫌启点,毕竟,是“70后的老人”,时代有点落后,开发效率低。接下来给大家讲讲C语言是什么,希望对你们有帮助。
对于大多数程序员来说,C语言是学习编程的第一门语言,很少有不懂C语言的程序员。
C语言编程,除了让你知道相关的概念,把你带入编程的大门,还可以让你了解这个项目运行的原理,例如,计算机的各个部分是如何交互的,程序在内存中是一种什么样的状态,操作系统和用户程序之间有着什么样的“爱与恨”,这些基础知识决定了你的高度,也决定着你的职业生涯。
C语言概念少、词汇少,并且包含基本的编程元素。许多后来的语言(C++、Java等)都参考了C语言。毫不夸张地说,C语言是现代编程语言的祖先,它改变了编程世界。
这是因为C语言简单,对于初学者来说,学习成本小,时间短,结合教程,可以快速掌握编程技巧。
C语言还获得过2017年“年度编程语言”的称号,成为2017年全球增长最快的编程语言。
C语言诞生于20世纪70年代,比我们大多数人都大。当然,C语言并非没有缺点,毕竟,是“70后的老人”,时代有点落后,开发效率低,后来人们在C语言的基础上增加了面向对象机制,形成一种新的语言,称为C++。
C语言是至今为止最为重要的编程语言:要进入编程行业高手级别必学C语言,要挣大钱必学C语者凯言,要做黑客、红客必学C语言,要面试名企、外企、高薪职位必学C语言。
C语言难不难?闭如与Java、C++、Python、C#、JavaScript等高级编程语言相比,C语言涉及的编程概念较少,标准库小,所以整体比较简洁,容易学习,非常适合初学者。
‘肆’ 用安卓手机怎么练习c语言编程
我想我是有资格来回答你的问题的,我算是彻底的从编程白痴一步步学习过来的。 之前写了一篇博客 Android学习之路 被疯狂转发,带起了一阵学习Android的大风,我不晓得具体影响了多少人,但是这篇博客已经成为Android新手学习必备的资料。很多人问我是怎么一路过来的,姑且借这个机会说说我的故事吧。 =============================== 内容有点长,大家姑且当做励志小说来看吧,对这些经历不感兴趣的可以直接看最后“如何自学Android”部分 =============================== 大学 大学上的是全国二流本科,专业主要就是数学专业。大学的总结就是:逃课、挂科、篮球、泡妞、Dota。 目前为止可以说我的大学是我这辈子过的最爽的时期,大一开始就逃课,好点的理由是我对大学那些课程完全没兴趣,其实本质上是因为高考太压抑了,大学之后没人管了,开始无止境的放纵自己。毫不夸张的说大学四年上的课应该没有逃的课多。逃课最直接的影响就是挂科,从大一挂到大三,专业课数学分析特么每年都挂,后来听说补考考不过要重修,还得交钱,这特么让家里人知道还了得,于是发愤图强,最终补考每门都以优秀的成绩过了。 相信英语四级应该是大学必考吧,英语四级这辈子我都忘不了,我考了三次才过,每次考试说是裸考都褒奖了,大学英语全是吃高中的底子,第一次没过,少了十几分,第二次他妈睡觉睡过了,就没有去考,现在想想当时的自己真是脑残,终于在第三次勉强过了。现在想想幸亏当时过了,之后毕业找工作时英语四级是最低要求。做编程这行,英语真的挺重要的,大学的时候一定得想办法把四级给过了。 现在想想大学和编程唯一相关的课程就是C语言了,但是对于我们专业是属于全校公开课,最终这门课虽然考过了,但是连i++ 和++i我都弄不明白,可想而知你们应该能猜到我是怎么过的。 由于高中就开始打篮球,大学时毫无疑问就入了学院篮球队,而且担任队长,所以大一、大二过来基本就是一大半是在篮球场度过的,也是因为篮球征服了我现在的老婆。大二下学期周围的人都在玩Dota,于是也开始了游戏之路,篮球也基本放弃了,那时候玩的疯狂,记得最长的一次和同学在网吧连续包夜两星期,不过白天是回来睡觉的,不然估计早猝死在网吧了。 转眼间大四了,这一年终于在我老婆的监督下不再挂科了,而且在毕业前的最后一次评比竟然拿到了三等奖学金,真是受宠若惊啊,后来钱也被狐朋狗友们拿去腐败了。周围的同学都在准备考研,我却唯独对考研没兴趣,自始至终都没有为考研花过一分钱,买过一本书。后来证明我的决定是正确的,周围的小伙伴放弃的放弃,考不上的考不上,考上的后面也没见混的有多好,当然如果能考上好的学校还是很有帮助的。 毕业 又一转眼毕业了,去参加了学校几个招聘会也是醉了,全是没听过的小企业,一去参观都是各种厂房,根本不需要任何学历,是个人出点力都可以干的那种,要么就是各种电话销售。。。那时候真的有点急了,大学四年,毕业一份像样的工作都找不到,回去怎么面对乡亲父老。 三月份的时候一家IT测试培训机构来做宣讲会(具体什么名字我就不说了,免得认为是广告),听完之后就说培训之后包就业,培训地点在大上海的最中心,当然是自费,但是可以工作之后分期付款。那时候哪知道测试是干嘛的,更不懂IT是干嘛的,回来就查了下这个机构确实存在,网站也有的,知道不是骗子遍决定来上海试一试。当时下定决定要来上海培训之后,几个狐朋狗友毫不犹豫的跟着我一起来了,总共应该是7个人,决定之后没几天便毅然而然的背着大包小包来到上海,我们之中一部分是一次性付费,另一部分是分期。后来证明我们当时来上海的决定是正确的。 培训之路 这里并不是宣传大家去培训,只不过被工作所逼,学校不好,大学也没学啥真本事,稍微有点出路都不会去培训! 培训的日子还是蛮轻松的,一周就上四天课,朝九晚五,毕竟大家家庭都不富裕,家里辛苦攻读了四年大学,毕业还要再交钱去培训,打心里大家都很愧疚。一开始卯足了劲要好好学习,但是坚持了没多久就有点放松了,但是好歹也是都有学习的。 培训的时候算是接触了点编程吧,课程有C语言、Oracle、Linux,然后其他都是软件测试的理论,其实都是非常基础的东西,算是带你入行吧,Orace就学习一些基本SQL语句,Linux就学了几个命令,但是起码知道原来电脑可以干这么多事,之前还一直以为电脑就是用来看电影、聊天、打游戏的呢。现在回头看给我一周的时间我可以看完整个培训课程,但是当时的培训周期要四个月。 第一份工作--SunNet 7月份拿到毕业证书就直接来了上海,四个月的时间对于我来说实在太漫长了,我等不及了,于是在课程还有最后一个月的时候我提前出来单独找工作,当时培训老师说工作后的工资大多是3500左右,我觉得我学的比别人好,所以必须要比别人高,做好了长期准备面试的过程。没想到面试第一家就直接录取了(后来才知道原来是公司的测试怀孕在家,急需测试),公司名叫SunNet,中文名山诺,工资4000。收到offer的时候欣喜若狂! 真正接触编程 之后便在SunNet正式入职,工作就是测试,但是就在SunNet我才真正的接触了什么是编程。SunNet是一家小型外企,总部在休斯顿,上海这边主要是研发部。研发人员总共不到10人,主要业务是以web为主,使用语言是.NET。当然我的职责就是web测试了,工作倒是没什么难点,主要测试就我一个,一进来就有好几个项目等着我测试,还好自己是数学专业,逻辑思维能力还不错,加加班总算能按时完成任务。 三个月的时间顺利转正,之后的某一天偶然得知公司一开发人员工资比我高2000,其实也就比我早毕业一年而已,才知道原来开发和测试工资差距这么大,于是当时就下定决心要转行做开发,所以说起我从测试转行开发的原因是因为钱,一开始说因为兴趣坚持下来的都是扯淡。。。 编程之路 由于在公司我的主要任务仍然是测试,任务也挺多,基本每天要9点能到家。下定决心之后只能利用业余时间来学习,由于公司主要业务是.NET,很自然我一开始学习的方向便是.NET,后来才了解到.NET是基于C#的,学习.NET之前必须要先学习C#,于是像公司借了一本C#学习资料,就这样学习了大概两周吧,还仔仔细细做了一大堆笔记。之后觉得语法学的差不多了,便又借了本.NET的书开始学习web开发。 但是web开发远没有学习一门语言这么简单,后来才知道web开发涉及到html, css, javascript, ajax, database等,范围太广了,于是为了效率,我只能每一项掌握住基础,于是网上搜索找到 w3school 在线教程 这个好东西,里面的东西都是基础的,我把教程整理到手机里,每天上下班的地铁上,吃饭的时候,回家的时候等等利用一切时间来学习,也是差不多大概2周的时间掌握了html, css, js的一点基础,接下来准备正式学习.NET的时候,被我们老大知道我正在学习开发,我们老大叫Aaron,是一位典型的程序员,比较胖,人品超好,知道后不建议我学习.NET,说.NET出来都十来年了,已经很成熟了,很多人在学校都有.NET教程,现在学习已经比别人晚了。现在移动开发刚崭露头角,也没多少人会,建议我直接学习移动开发。真是一句点醒了我啊!! 移动开发 听了老大的建议,于是放弃了.NET,开始准备学习移动开发。那时候是12年初,整个移动互联网也是刚起步阶段,iPhone4还是非常火的时候,毫无疑问我把目标锁定在了iPhone开发上。 这次有经验了,知道了iPhone开发首先肯定得有一门编程语言的,了解到是Objective-C,于是又从公司借了一本OC的书(公司书很多,老大每月都会买来好多书,虽然看的人很少),又花了将近一周的时间来了解了基本语法,因为之前学了C#,这次没完全看完的情况下想直接上手实践。正打算学习的时候,才知道iOS开发必须得在mac上才可以,也就是说我得自己有台mac电脑,虽然当时公司是有的,但是回家的时候不能继续学习练习,肯定影响效率的,一台mac对于当时的我简直是奢侈品,虽然现在也依然是奢侈品,但当时根本不可能买得起。于是只有放弃iPhone开发转向Android(后来才知道有虚拟机这东西。。。) Android学习之路 几经波折,终于才确定自己的方向,这期间已经耽误了不少时间,走了不少弯路了,但是仍然阻挡不住我转行开发的脚步。公司关于Android的书竟然没有,于是我自己亲自买了一本Android书籍,叫《疯狂Android讲义》,作者是李刚!!不说这本书有多好吧,这本书比较厚,非常厚,所以讲的一些基础比较细,新手按照上面的完全可以看懂,现在不知道这本书内容更新了没,之前内容对于现在来说有点老。这个时候应该是12年的3月份,说起来也巧,这个月公司刚好接了个移动端项目,iOS有人来做,但是公司上下没有会Android开发的,其他人都有自己的项目在忙,老大看出我的兴趣,就问我想不想试一下,我当然欣然同意了,只此就开始正式的边做边学习Android。 那个时候的测试任务仍然很重,于是我只能挤出时间来做这个项目,基本是每晚以及周末都会自动加班来完成这个项目,现在看来那个项目真是太简单不过了,快的话一周都不要就可以搞定了,但在当时我摸爬滚打了一个多月总算搞定了。 做完这个项目自己有了点信心,但当时自己的主要任务还是测试,自己开发的时间是少之又少,于是下定决心离职找一个专门做Android的工作。说明原因之后老大很理解,也是建议我想做开发的话就放手去找一个专门做开发的职位,这样进步会比较快。 第一份工作能遇到我的老大Aaron,真是我的福分!