经过了将近5年的工作沉淀以后,终于确定了自己的职业发展方向。从现在开始终于可以有的放矢了,不再迷茫了。回想以往,找到这个方向,确实不是一件容易的事情,一路也是迷茫的走过来,随着知识和工作经验的积累,慢慢找到了自己的技术发展方向。
高中考大学,由于高考没有考好,没有考上自己理想的大学——北大呵:)。不过当时要是真考上了,我也不会选择这一行了,因为肯定到不了北大计算机相关专业的分数。失落归失落,但是还是报了另外一所还不错的理工院校。专业嘛,当时信息工程非常火。实际上呢,当时我根本不知道信息工程是干什么,只是听着信息二字,总觉得跟计算机相关,但又不是只局限于计算机。其实,当时的我对计算机还是很感兴趣的。不过之前一直都是拿着电脑打游戏。要是好好学习的话,说不定也能考上北大的计算机呢。
上了大学以后,才知道所谓的信息工程,无非是新瓶装老酒。至少我们学校是这样,我们是电子工程系。总体来说,学的都是偏硬件一些的,电子电路,模电,数电,微波,电磁场等。上大学的时候,还是不知道自己要做什么。课程呢,我就对电路和计算机相关课程感兴趣,这些课分数一般都挺高的。其它科目的分数则很一般了。 关于计算机的学习,也仅局限于课程上的东西。——想到这里,感觉中国的大学教育太差劲了,我和同事屡屡谈及此点,都是痛心不已,太耽误人了。整体说来,大学4年,就是混过来的。现在想起来,特别的后悔!那是多么珍贵的4年啊,有着大块的时间和良好的环境去学习,结果自己没有珍惜。
大四,我当时一心三用。找工作,考研,考公务员。工作呢,但是拿到了一个轻工业部下属的一个研究所的offer,公务员从来没有复习过——从来没有复习过,直到考试时才知道是什么题型,最后没想到依然通过了笔试。我报考的是公安部,不过面试没有通过。但是有个公安部领导推荐我去秦城监狱,结果我没去。一是因为当时觉得监狱,听起来不好,二是但是考研也考上了,就没有选择去那。现在想来,如果去了的话,就成了体制内的人了哈。那小日子过得多得啊。
研究生上的还是通信专业。研一依然是迷茫的上课混日子,研二的时候算是一个转折,开始了自己的技术发展之路。当时我的导师跟大唐的一个领导关系不错,于是我就跑到大唐实习。当时,一接触真正的项目,发现自己差得不是一般两般的远啊。上学学的那点东西,根本不够使的。不过呢,大唐的国企色彩太浓重了,工作压力一点都不大,边学边干也能应付了。这算的上我的第一个专业方向,嵌入式开发。不过当时由于基础太差,并不能完全领会整个产品的精粹。如果是现在的我,在那呆上半年,收获绝对是现在的好几倍。不过当时对于嵌入式开发,还是有了一定的认识,于是在我的学习领域上,ARM和嵌入式开发占了一席之地。
大唐的项目当时没什么可做的了,我就离开了大唐,又找了家小公司实习。这个公司是做一款手机软件的,但是还以为是嵌入式开发呢。在那做了一段时间,才发现公司的产品真的是好小啊。不过小有小的好处,作为一个初级开发人员,产品的代码量不大,这样可以让我吃透整个产品。而且公司不大,锻炼的机会就比较多。我当时还未毕业,就已经作为公司的主要人员,去和其他公司搞项目合作,集成去了。而且,当时公司的学习气氛比较浓,在那的一年里,我的技术有了突飞猛进的发展。我的学习领域又加上了手机软件开发,涉及Symbian,Windows Mobile等开发平台。
07年我加入了现在的这家公司。在这里,我得到的锻炼更多。因为之前的公司产品太小,已经没有发挥的空间。而现在这家公司,是做Linux平台的网络产品的,无论是Linux还是网络方向,都有近似于无穷无尽的东西去学习。从07年到现在,我几乎是接触到一个新的东西,都要去学学。虽然学到了很多新东西,但是因为没有一个重点,还是感觉有点无处使劲的感觉。但是也有一些进步,总算把自己定位于Linux方向。随着时间的推移和自己的不断的思考,技术路线也就越来越清晰。
刚毕业:各种编程语言:C, C++, Java;
实习:C/C++,嵌入式开发
第一份工作:C/C++, 各种手机平台,MFC
第二份工作:C/C++, Linux,各种脚本语言
==>C/C++,Linux,脚本语言,网络协议和配置
==> Linux的网络开发(从内核的网络模块到QoS和Load Balance应用)
到了今天,在路上我终于想明白了。以后我以后的技术方向就专注于Linux网络开发,从内核的网络模块到QoS和Load Balance的应用。决定要用上半年或者一年的时间,把这一方向的内容彻底研究得比较透彻。
一个程序员的年终总结:学会取舍
说到年终总结,首先让我想到了我深恶痛绝的国企和政府部门,那种装腔作势,官僚主义的态度。不过看到CU的新年征文,也就这个契机,好好总结一下吧。君子一日三省其身。只有好好的总结过往的经验和教训,才能够成长。
这次的题目姑且叫做“学会取舍”吧。
按照一个固定的套路,要先回顾过去。记得在11年3月份的时候,我发了一篇博文《终于确定了自己的技术发展方向》 当时自毕业以来,一直比较迷茫于自己的发展方向,终于那天在回家的路上,确定自己还是往网络开发这个方向发展。这样,这个目标也算我11年的一个计划吧。
下面看看11年最后我自己到底都干了些什么:
1. 开始阅读Linux Kernel的TCP/IP部分的源代码,也写了50篇左右良莠不齐的笔记吧——只能算得上笔记呵;这个还是有一些收获的。这样对于数据包接收——从网卡到socket,和发送——从socket到网卡,大体的流程基本清楚了。
2. Linux的APP开发的一些文章,则是我平常解决的一些bug和帮助同事解决问题时的总结。不过由于现在基本上很少写真正的app了。所以后面就很少写这样的文章。现在对于app的兴趣就在于一些API的实现,有时候可能会去看一下Linux的API的实现。
3. 写了几篇关于如何编写安全代码的博文。现在我对于自己代码的健壮性还是很有自信的。一般来说,除非是typo,我基本上不会有代码上的错误。也就是说。在代码风格和C的细节上,兄弟是很有自信的。但是在工作中,在改Bug的时候,可能调了半天,发现是一些同事犯了很低级的错误。大部分都是由于代码风格不好,或者对于C的细节不了解造成的。这时候,真是让我郁闷到极点。其实一个好的代码风格和了解C的细节,是一个程序员的必修课。当你还不了解你的工具时,就开始使用它,能不犯错?
4. 11年我还萌生过换工作的念头,原因是多方面的。也借了这个契机,决定好好的补一下自己的短板,算法。所以11年对算法也学习了一段时间,并且有了一些收获,有了自己的体会——学习算法,重要的不是学会那个算法本身,是学会那个算法的思路。
5. 11年末的时候,又再次想到一些大师的经验。对于一个程序员,最好多学会几种语言,尤其是有着不同语义的,这样可以开阔个人的视野。所以我选择了从未接触过的面向函数的编程语言。最早是想学习Lisp,但是不喜欢它的语法,后来看中了haskell,目前还在学习中。希望可以把它学好。这样我对于面向过程,面向对象和面向函数的编程语言就都有了了解。
6. 前面关于说自己对于C的细节的了解,说得有点自负了。今年我读了一遍C99标准,感觉对于C这样一个简洁的语言,就有如此多的细节,说自己了解C的细节,真是太大言不惭了呵。谦虚使人进步,一定要记住这点。
说了半天,一定没有说到主题,“要学会取舍”。下面开始。
1. 技术方面:作为爱好者,难免会爱好广泛,这是一定要学会取舍,贪多嚼不烂。尽管我对kernel很感兴趣,但是某些时候一定要压抑自己,过多的去关注暂时用不上的东西,对自己目前的帮助并不是很大。这时还是那句话,要找到自己兴趣和工作的契合点。对于我来说,还是kernel的网络模块,这部分既满足了我对于kernel的好奇,也和工作很好的结合起来。
2. 职业发展方面:今年在萌生找工作念头的时候,只去面了一家企业,就是Nokia。顺利拿到offer,当时还真是想去啊。待遇和福利都不错,而且离家特别的近。可是最后还是放弃了那个offer。一个是因为不舍得当前熟悉的环境,熟悉的技术和熟悉的工作环境,二是因为目前的公司还真的有可能上市。如果IPO成功的话,个人的收益还是不错的。对于我这个选择,我舍掉了一个大公司的工作经历,舍掉了舒适的环境,而看中的是熟悉的环境和方向,以及潜在的个人收益。
11年过去了,对比五年前初出茅庐的我,感觉自己成熟了很多。不仅在技术方面,还有一些人生经验。对于全新的12年来说,目前定几个小目标吧:
1. 熟悉haskell,领会函数式编程语言的精髓;
2. 继续学习Linux的TCP/IP源代码;
3. 继续提高自己的算法;
我想起一本书来,名字叫做《coder at work》。忘了是网易的云风,还是刘未鹏了,给这本书起了个中文译名为《我编程,我快乐》。虽然有些调侃,但是却显示了英文名字背后的意思。不过对我来说,这个译名还是不满意,我也找不到更合适的翻译。还是让我们直接领会英文的含义吧,coder at work。
有的感觉是无法翻译的。
对于我来讲,做个coder,很快乐:)
对于大多数程序员,不要一辈子埋头搞技术混饭吃,准备好技术创业
我个人不赞成下面人的看法,觉的搞技术完全没前途, 我身边就有很多靠技术起步,做老板做老总的。世事无绝对,自己要多注意培养自己各方面的能力,同时技术其实也很重要,因为中国正在大转变,不能只看眼前,创新有眼光有能力的技术人员也会越来越吃香,如果各方面能力和条件比较成熟,也可以自己干,技术创业会成为将来创业的主流的。
别人的看法:
我现在是自己做,但我此前有多年在从事软件开发工作,当回过头来想一想自己,觉得特别想对那些初学JAVA/DOT .NET技术的朋友说点心里话,希望你们能从我们的体会中,多少受点启发(也许我说的不好,你不赞同但看在我真心的份上别扔砖头啊)。
一、在中国你千万不要因为学习技术就可以换来稳定的生活和高的薪水待遇,你千万更不要认为哪些从事市场开发,跑腿的人,没有前途。
不知道你是不是知道,咱们中国有相当大的一部分软件公司,他们的软件开发团队都小的可怜,甚至只有1-3个人,连一个项目小组都算不上,而这样的团队却要承担一个软件公司所有的软件开发任务,在软件上线和开发的关键阶段需要团队的成员没日没夜的加班,还需要为测试出的BUG和不能按时提交的软件模块功能而心怀忐忑,有的时候如果你不幸加入现场开发的团队你则需要背井离乡告别你的女友,进行封闭开发,你平时除了编码之外就是吃饭和睡觉(有钱的公司甚至请个保姆为你做饭,以让你节省出更多的时间来投入到工作中,让你一直在那种累了就休息,不累就立即工作的状态). 更可怕的是,会让你接触的人际关系非常单一,除了有限的技术人员之外你几乎见不到做其他行业工作和职位的人,你的朋友圈子小且单一,甚至破坏你原有的爱情(想象一下,你在外地做现场开发2个月以上,却从没跟女友见过一面的话,你的女友是不是会对你呲牙裂嘴)。
也许你拿到了所谓的白领的工资,但你却从此失去享受生活的自由,如果你想做技术人员尤其是开发人员,我想你很快就会理解,你多么想在一个地方长期待一段时间,认识一些朋友,多一些生活时间的愿望。
比之于我们的生活和人际关系及工作,那些从事售前和市场开发的朋友,却有比我们多的多的工作之外的时间,甚至他们工作的时间有的时候是和生活的时间是可以兼顾的,他们可以通过市场开发,认识各个行业的人士,可以认识各种各样的朋友,他们比我们坦率说更有发财和发展的机会,只要他们跟我们一样勤奋。(有一种勤奋的普通人,如果给他换个地方,他马上会成为一个勤奋且出众的人。)
二、在学习技术的时候千万不要认为如果做到技术最强,就可以成为100%受尊重的人。
有一次一个人在面试项目经理的时候说了这么一段话:我只用最听话的人,按照我的要求做只要是听话就要,如果不听话不管他技术再好也不要。随后这个人得到了试用机会,如果没意外的话,他一定会是下一个项目经理的继任者。
朋友们你知道吗?不管你技术有多强,你也不可能自由的腾出时间象别人那样研究一下LINUX源码,甚至写一个LINUX样的杰作来表现你的才能。你需要做的就是按照要求写代码,写代码的含义就是都规定好,你按照规定写,你很快就会发现你昨天写的代码,跟今天写的代码有很多类似,等你写过一段时间的代码,你将领略:复制,拷贝,粘贴那样的技术对你来说是何等重要。(如果你没有做过1年以上的真正意义上的开发不要反驳我)。
如果你幸运的能够听到市场人员的谈话,或是领导们的谈话,你会隐约觉得他们都在把技术人员当作编码的机器来看,你的价值并没有你想象的那么重要。而在你所在的团队内部,你可能正在为一个技术问题的讨论再跟同事搞内耗,因为他不服你,你也不服他,你们都认为自己的对,其实你们两个都对,而争论的目的就是为了在关键场合证明一下自己比对方技术好,比对方强。(在一个项目开发中,没有人愿意长期听别人的,总想换个位置领导别人。)
三、你更不要认为,如果我技术够好,我就自己创业,自己有创业的资本,因为自己是搞技术的。
如果你那样认为,真的是大错特错了,你可以做个调查在非技术人群中,没有几个人知道C#与JAVA的,更谈不上来欣赏你的技术是好还是不好。一句话,技术仅仅是一个工具,善于运用这个工具为别人干活的人,却往往不太擅长用这个工具来为自己创业,因为这是两个概念,训练的技能也是完全不同的。
创业最开始的时候,你的人际关系,你处理人际关系的能力,你对社会潜规则的认识,还有你明白不明白别人的心,你会不会说让人喜欢的话,还有你对自己所提供的服务的策划和推销等等,也许有一万,一百万个值得我们重视的问题,但你会发现技术却很少有可能包含在这一万或一百万之内,如果你创业到了一个快成功的阶段,你会这样告诉自己:我干吗要亲自做技术,我聘一个人不就行了,这时候你才真正会理解技术的作用,和你以前做技术人员的作用。
小结
基于上面的讨论,我奉劝那些学习技术的朋友,千万不要拿科举考试样的心态去学习技术,对技术的学习几近的痴迷,想掌握所有所有的技术,以让自己成为技术领域的权威和专家,以在必要的时候或是心里不畅快的时候到网上对着菜鸟说自己是前辈。
技术仅仅是一个工具,是你在人生一个阶段生存的工具,你可以一辈子喜欢他,但最好不要一辈子靠它生存。
掌握技术的唯一目的就是拿它找工作(如果你不想把技术当作你第二生命的话),就是干活。所以你在学习的时候千万不要去做那些所谓的技术习题或是研究那些帽泡算法,最大数算法了,什么叫干活?
就是做一个东西让别人用,别人用了,可以提高他们的工作效率,想象吧,你做1万道技术习题有什么用?只会让人觉得酸腐,还是在学习的时候,多培养些自己务实的态度吧,比如研究一下当地市场目前有哪些软件公司用人,自己离他们的要求到底有多远,自己具体应该怎么做才可以达到他们的要求。等你分析完这些,你就会发现,找工作成功,技术的贡献率其实并没有你原来想象的那么高。
不管你是学习技术为了找工作还是创业,你都要对技术本身有个清醒的 认识,在中国不会出现BILL GATES,因为,中国目前还不是十分的尊重技术人才,还仅仅的停留在把软件技术人才当作人才机器来用的尴尬境地。(如果你不理解,一种可能是你目前仅仅从事过技术工作,你的朋友圈子里技术类的朋友占了大多数,一种可能是你还没有工作,但喜欢读比尔。盖茨的传记)。
2011年Android iOS WP回顾及趋势分析
自1990年微软推出首款AT Work OS手机操作系统至今,11年间谁也没有料到移动互联网发展会是今天的样子,即便是1996年Plam 推出Polot、1998年 Psion组建塞班,乃至21世纪第2个年头才出现的RIM OS。
如果要问是什么力量拉动了今日移动互联网的发展,那么,手机终端本身、操作系统和应用商店当是强劲的三驾马车。从各核心厂商的移动互联网布局中可以非常清晰的看到这一点。
▲ 图表 1:各企业移动互联网布局
操作系统是移动互联网厂商竞争的战略高地
终端是连接用户和业务的载体,在增强用户体验、业务承载上发挥着极其关键的作用,这也是作为互联网服务提供商的Google、软件服务商的微软以及作为运营商的中国移动争相推出自有手机终端的原因之一。
应用商店模式是苹果公司首创的移动互联网环境下新的商业模式,基于一个平台聚集众多由第三方开发商提供的应用服务,为某个或某系列终端提供应用服务下载服务。
相比终端和应用商店来说,操作系统是手机产业链的核心。控制了操作系统,就等于控制了手机产业链,占据了行业竞争的主动权。这也是中国移动在其他两大运营商积极寻找明星终端厂商合作时,推出自有操作系统OMS的原因,也是三星转战多家操作系统后独立开发自有操作系统Bada的原因,也是微软不断开发新版本操作系统以致重新开发更高版本WP7操作系统的原因。操作系统之争成为移动互联网竞争的第三大战略高地。
源码资料下载:
Android 15本经典教材和应用功能150多个实例源码