编程只是程序员工作的一小部分,而当你能对整个行业能有一个全盘的了解,你自然会找到自己的兴趣所在。

在海外有很多中国人在从事程序员这个职业。我认识很多这样的朋友,发现许多人并不快乐,只是将这个工作当成养家糊口的工具。还有许多人工作努力而不能入门。我曾经在很长一段时间内也有过困惑,但最后终于走了出来。在这里谈谈自己的看法,希望对大家有一些启发。

俗话说兴趣是最好的老师.这话很有道理,但运用在事业上往往并不是这么一回事。在学生时代你可以追随兴趣天马行空,为未来作各种各样的设想。坚韧不拔而又有些运气的在后学生时代仍可在预设的道路上跋涉前进,甚至一帆风顺。而绝大多数同仁们则在生活所伏下的各种小圈套中纷纷落马,有的痛苦挣扎,有的怨天尤人,还有的则既来之,则安之,以失败者的心态接受生活的安排。

这些为生活所改变的同仁们的共同点是不再(敢或愿)提对原先事业的兴趣了,如果曾经有过的话。当然,兴趣是会变化的。但因生活改变而生的新的兴趣往往难以长久,而人生苦短,又经得起几次改变呢?

和其它许多职业一样,从事程序员职业的可分成三种人:入门的,不想入门的,和想入门而没有入门的。我对入门的定义是:喜欢这个职业并且有持之以恒的目标和努力。

入门的是极少数。如果一个程序员一直在从事这个职业,而且热爱并愿为之终老,我想他一定是幸福的。任何职业其实都是这样。我所在的公司有个年轻的老美,是负责三十多个程序员(包括我)的Software Architect,为人朴实而性格腼腆,但他对职业热爱的单纯连我都嫉妒得要命。他好像可以不食人间烟火,可以没有任何爱好(他其实一年要度好几次假的,但全是老婆安排,当然也参加公司活动),但对几年前写的代码记得清清楚楚。他没有可炫耀的学历(服兵役间在一家小学校读的计算机本科)和经历(因为太年轻),在任何场合都总是腼腆地笑着(我将他研究了很久,发现他实在本性如此),毫不起眼,但我知道,他是被造化所祝福的。他可以一直思考一个问题,在半夜起来用VPN连上公司网络修改一个bug.我遇到过不少优秀的程序员,就没他这么纯的。

不想入门的程序员可能是这三种人中比例最高的。女的居多,家庭负担重的居多,思想活跃的居多。程序员职业为男性所主宰是一个事实。女孩子结婚后兴趣大多都变了,程序员工作辛苦,责任大,也就没什么吸引力了。很多程序员聪明而思想活跃,却不愿意喜欢这个职业。有的一直在琢磨怎么开自己的公司,有的天天研究炒股,还有的只想好好保住这个工作,完成分配任务了事。究其原因,一是将人生看得太透了,觉得程序员工作只是衣食父母;一是认为编程太简单,没啥好投入的;还有就是看不到出路,当一辈子程序员划不来。人各有志。

对一些人来说,程序员只是人生经历的一部分,他们有自己所追求的目标。虽说这两年的IT不象五年前那么火热,但仍到处是机会,很多人通过程序员的工作进入IT而寻找机会。但对那些可能长久从事程序员工作的人来说,不入门实在太辜负了上天赐予的聪明才智。在美国的这些年,我认识了许多转行做程序员并做得不错的大陆来的朋友。附近一家老美的公司,软件研发部门中大陆来美读研毕业后留下来的有二十来人,多半是国内名校本科毕业的。这二十来人没有一个本科或博士是读计算机的,现在水平都很高。我用这个例子是想说明程序员这个队伍的素质是多么优秀,理应做出点事来。

精选阅读

寻找自己的程序员之路[1]


每个人的幸福都是不一样的。我喜欢田园式的生活,在人多的地方总是不舒服。

对我来说,最幸福莫过于在工作中做着自己喜欢的事情。闲暇时,在能够眺望江边的地方,端着一杯红酒,一个人细细的喝。

为了这种生活方式,离开了北京,来到家乡所在的这个三线城市,寻找自己的道路。经过一年的探索,颇有心得。

大体上,我对自己走过的路和即将走的路划分为七个阶段:自信=意志=布局=切入点=团队=渠道=产品

第一关:自信

先说说我这个城市。这是一个什么样的城市呢?依山傍水,适合生活。几乎没有IT,也没几个真正的程序员。一周上班六天,平均工资1000元上下。程序员的工资在1000-3000左右。要在这个城市探出自己的道路,首要的一点就是自信。没有自信,活不下去。这个城市的年轻人大多非常迷茫,对自己的前途缺乏信心,有冲劲的都往大城市里跑了。回来之初,我也迷茫了很久,迷茫的时候,就在WOW里泡着,观察那个世界。在WOW里,作为一个萨满,傻乎乎的扛着个盾晃晃荡荡的升级。当时赚钱,也就是打打元素之火每天赚个几十G.后来,不断的观察不断的总结,成长为日入近万G的大奸商。哦,俺要走的也正是这一条路子。生活总是要继续的,在WOW上也学不到更多的东西了,就离开了WOW,开始了一个人的征途。

支持这条路子的核心力量就是自信。在小城市里不缺乏聪明的人,这些聪明的人大部分却并不优秀,因为他们缺乏自信,缺乏自己走路的勇气,从而甘于平庸。没有自信,走不出这第一步。

第二关:意志

在小城市做IT,相当锻炼人意志。这里就像一片沙漠。市场,没有。程序员,没有。找人说话也找不到。曾经组织过次聚会,包括我在内到了2个人。想要向下走,没有相当强的意志是走不下去的。彷徨,彷徨,最终还是坚持走了下来。

第三关:布局

所谓布局就是决定做什么事和不做什么事。经过相当久的考虑,我决定远离Web开发,远离本地市场,甚至远离数据库。做Web开发和数据库开发的太多了,你呆在偏僻小地,做这些完全没有优势,做本地市场呢,又没客户资源,关系又比不上已经在本地深耕数年的小IT公司。于是宁可荒芜这些技能,也不趟这个混水。最后决定,人做我不做,人不做我做,在偏僻的地方,做外面的市场,做深入的开发,做点做线不做面。为什么呢?

(1)本地的工资摆在那里,做本地的就算做起来了,利润也不丰厚,还累死累活,要赚外面的钱,在本地花

(2)要赚外面的钱,如果做Web开发和数据库开发,根本无法和当地公司竞争

(3)所以只能做别人不做的,或者别人做不了的,做技术要求高的。而我恰恰有相当多的研发性项目开发和管理经验,正适合做这些。

(4)所要做的东西,必须通过网络可以展示,可以远程技术支持。

第四关:切入点

切入点是个很关键的东西,综合上面第三关所讨论的内容,结合自己的技术能力和技术经验,然后结合需求情况,最终我从协议分析这一块切入进去了。哦,不是外挂那种分析。从QQ协议,到MSN协议,到YMSG协议,当然,还有Http这个最简单的,从有参考资料的分析,到无参考资料的完全黑箱分析,到现在在某方面的协议分析已经达到世界领先水平了。从协议分析,切入到验证码识别,从验证码识别,切入到车牌识别,从车牌识别,切入到模式识别、图像处理和机器视觉,而模式识别结合前面的协议方面的工作又可切入进NLP,客服机器人,有这些为基础,我又想切入淘宝店铺工具(哦,还没时间做,并且目前也没找到一个好的切入点).因为对图像处理的了解,我现在又成功切入进Flex开发了。以上各点貌似很散,也是也挺集中,就是:协议分析与设计、机器智能和图像处理,这三者是相辅相承的。

寻找自己的程序员之路


职业规划就是对职业生涯乃至人生进行持续的系统的计划的过程。一个完整的职业规划由职业定位、目标设定和通道设计三个要素构成。

每个人的幸福都是不一样的。我喜欢田园式的生活,在人多的地方总是不舒服。

对我来说,最幸福莫过于在工作中做着自己喜欢的事情。闲暇时,在能够眺望江边的地方,端着一杯红酒,一个人细细的喝。

为了这种生活方式,离开了北京,来到家乡所在的这个三线城市,寻找自己的道路。经过一年的探索,颇有心得。

大体上,我对自己走过的路和即将走的路划分为七个阶段:自信=意志=布局=切入点=团队=渠道=产品

第一关:自信

先说说我这个城市。这是一个什么样的城市呢?依山傍水,适合生活。几乎没有IT,也没几个真正的程序员。一周上班六天,平均工资1000元上下。程序员的工资在1000-3000左右。要在这个城市探出自己的道路,首要的一点就是自信。没有自信,活不下去。这个城市的年轻人大多非常迷茫,对自己的前途缺乏信心,有冲劲的都往大城市里跑了。回来之初,我也迷茫了很久,迷茫的时候,就在WOW里泡着,观察那个世界。在WOW里,作为一个萨满,傻乎乎的扛着个盾晃晃荡荡的升级。当时赚钱,也就是打打元素之火每天赚个几十G.后来,不断的观察不断的总结,成长为日入近万G的大奸商。哦,俺要走的也正是这一条路子。生活总是要继续的,在WOW上也学不到更多的东西了,就离开了WOW,开始了一个人的征途。

支持这条路子的核心力量就是自信。在小城市里不缺乏聪明的人,这些聪明的人大部分却并不优秀,因为他们缺乏自信,缺乏自己走路的勇气,从而甘于平庸。没有自信,走不出这第一步。

第二关:意志

在小城市做IT,相当锻炼人意志。这里就像一片沙漠。市场,没有。程序员,没有。找人说话也找不到。曾经组织过次聚会,包括我在内到了2个人。想要向下走,没有相当强的意志是走不下去的。彷徨,彷徨,最终还是坚持走了下来。

第三关:布局

所谓布局就是决定做什么事和不做什么事。经过相当久的考虑,我决定远离Web开发,远离本地市场,甚至远离数据库。做Web开发和数据库开发的太多了,你呆在偏僻小地,做这些完全没有优势,做本地市场呢,又没客户资源,关系又比不上已经在本地深耕数年的小IT公司。于是宁可荒芜这些技能,也不趟这个混水。最后决定,人做我不做,人不做我做,在偏僻的地方,做外面的市场,做深入的开发,做点做线不做面。为什么呢?

(1)本地的工资摆在那里,做本地的就算做起来了,利润也不丰厚,还累死累活,要赚外面的钱,在本地花

(2)要赚外面的钱,如果做Web开发和数据库开发,根本无法和当地公司竞争

(3)所以只能做别人不做的,或者别人做不了的,做技术要求高的。而我恰恰有相当多的研发性项目开发和管理经验,正适合做这些。

(4)所要做的东西,必须通过网络可以展示,可以远程技术支持。

第四关:切入点

切入点是个很关键的东西,综合上面第三关所讨论的内容,结合自己的技术能力和技术经验,然后结合需求情况,最终我从协议分析这一块切入进去了。哦,不是外挂那种分析。从QQ协议,到MSN协议,到YMSG协议,当然,还有Http这个最简单的,从有参考资料的分析,到无参考资料的完全黑箱分析,到现在在某方面的协议分析已经达到世界领先水平了。从协议分析,切入到验证码识别,从验证码识别,切入到车牌识别,从车牌识别,切入到模式识别、图像处理和机器视觉,而模式识别结合前面的协议方面的工作又可切入进NLP,客服机器人,有这些为基础,我又想切入淘宝店铺工具(哦,还没时间做,并且目前也没找到一个好的切入点).因为对图像处理的了解,我现在又成功切入进Flex开发了。以上各点貌似很散,也是也挺集中,就是:协议分析与设计、机器智能和图像处理,这三者是相辅相承的。

寻找自己的程序员之路[2]


在技术的选择上,是敏捷敏捷再敏捷!数据库尽量db4o,前台尽量sl/flex(面向最终客户的就不能选择sl).工具软件尽量用C#开发。尽量只做自己擅长的,不做别人擅长的。

我有一个特点,就是会一大票语言,能用来干活的就有C,C++,C#,Java,Python,matlab,actionscript,javascript,tcl.去上班的话,这是缺点--泛而不精。自己干的话,这反而成了优点了。因为我接的项目,很多属于偏门项目,这些项目往往都有开源的实现,但这种实现,要么只有C版本,要么只有Matlab的,要么只有Java的,会这些语言可以最大范围的参考,降低技术风险。缺点在不同环境下可以成为优点。

第五关:团队

通过前面的不断切入,形成了一系列案例,也积累了良好的信用,业务量是翻番的在长,最后自己的时间成了瓶颈。前两天小试了一把,谈了5个项目(2个flex,2个图像处理,那2个flex项目的核心也是图像处理),4个有合作意向,自己干不完,没办法,只能选择1个。

这就到了第五关了--一个人干不过来,得团队了。

但我前面说过,本地是人才沙漠。我的观点是宁缺勿滥,仔细挑选,从头培养。俺的挑选标准是:有激情、品德要好、数学基础要好、有自学能力。目前在带徒弟,看成长情况怎么样。

不着急,用不着太多的人,培养团队的同时开始摸索渠道。那个也得时间。

第六关:渠道

我最终想做的是产品。而在偏远地区做产品,想做成功,渠道和推广非常重要,不然的话,就算做出来了,也只能拿小头。在国内,还要考虑盗版因素。我现在只是有大致的产品方向,做也是玩票性质的,目的是摸索渠道和商业模式,想摸摸国内的和国外的两种市场。国外的只有试探性的探索。国内的,嘿嘿,前面的开发已经形成了一系列的推广工具了。

第七关:产品

做了这么多年项目,累死了。最终的目的还是产品和平台。我的征途是星辰大海(搞技术的,也得有技术的浪漫)目标是5-10年后,互联网3D化之后的虚拟现实(切入点?俺已有一个初步考虑的切入点).短期(5年内)是开发一些工具类型的产品和推广平台。

我是学材料的,在纳米材料界有一个名言--Build The World Atom By Atom.那么,在可见的未来,虚拟世界就是--Build The World Bit By Bit. 协议、图像、机器视觉、3D、语音,正是构成虚拟世界的因素,前面的种种,都是为这个做铺垫。未来的制造业将是分子制造,于是Atom和Bit将会碰撞--Build The World Atom By Atom, Bit By Bit!

但还是那句话,只做小,不做大,做点做线不做面。

什么程序员30岁之后转行之类的鬼话。俺到今年,才开始感觉进入了程序开发的大门,写程序时开始有一种美感,有那种几十人骑着战马冲击奥山大桥的壮烈。做一辈子的技术又何妨。

上述路径相当保守,指导思想不是胜利,而是避免失败。无恃其不来,恃吾有以待之,无恃其不攻,恃吾有所不可攻也。

我的四年程序员之路[1]


没错,我还是一个程序员,每天还是坐在位置上书写着代码,收获着无聊。 四五年来我我一直保持这样一个坐姿,从每天的早上8点半开始,准备下班回家时结束。

我读的是机械设计制造及其自动化专业,因为迷上网络游戏就干脆转为学习计算机。当时的计算机专业可以说是一个热门专业,很多不怎么样的学校在这时候都开了这个专业,招生时要分数要得不低。这样的决定让我吃苦不少,我要一边保证自己的专业少挂科,以保证自己可以顺利毕业,一边又要保证自己的计算机水平足够在毕业后可以找到一份还行的工作。相比其它同学,我跟图书馆的计算机图书一样另类。他们谈恋爱的时候,我在试着把asp网页连上数据库。他们玩游戏的时候,我在网上到处搜索apache跟php整合的相关材料。

幸运的是,我的专业大部分考试都有六十来分,2005年下半年好歹毕业了。没有计算机背景,企业不会要一个只会把asp连上数据库的人,也不会要我来帮他配apache+php.终于有一家小公司要我进去做软件维护工作,我想都没想就去了,连我要做网页还是客户端软件都没问清楚。零工资实习三个月,外带1个月的试用期,最后才知道自己是来做软件实施的。老总告诉我,所有来这企业的人都得做1年的软件实施,这样才能知道客户需要什么样的软件,以后开发出来软件时才能更好的理解客户的需求。为了理解所谓的客户需求,我在不同的地方安装相同的软件整整安装了一年半,Oracle, Sybase, Sqlserver各种各样的商业数据库我都在上面瞎整过,我后来很佩服hibernate,它居然可以为很多种数据库提供同样的HQL语法,做过的人会知道其实各数据库之间的差异还真不少。还好老总善解人意,在一次公司尝试转型的大背景下,我被调到网站运营部负责网站运营,网站运营跟网站开发是两码子事,在一个小公司里,网站运营就是到各大论坛发垃圾贴子,公司这样做第一可以省去在google上做推广的钱,另外,在我发贴发到手酸的时候,老总还可以跑过来说,累了吧,那放松一下,去把公司网站改下背景颜色。换换思路嘛,脑子就不会打结。这半年里,所有的论坛都有我的ID号,很多论坛的ID被坛主封了又开,到现在,如果我要到某个论坛去下载一个附件,当提醒需要登录时,我网址都不用看直接输个ID和密码进去就行,成功率很高。公司终于又要转型了,因为他们发现发了这么多垃圾贴,还是没人来买他们的软件。我被派到公司的开发组,帮忙做些开发。终于可以称自己为程序员了。

在这半年的时间里,我一直在帮着其它程序员干着繁重的体力活。用HTML和javascript实现着客户们奇怪的网页效果。偶而写一点点JSP的页面,比方说写一个界面将查询结果显示出来等等,当然这也是我为什么现在是从事Java行业的主要原因。

07年初,我决定离开这家企业,在跟老总离职面谈时,他终于想到要为我这么个员工提一下有关工资的问题。他终于想到曾经进入这家企业时,我要求过企业在一定时间内将我的薪水涨到什么样的水平。我并没有接受他开出的更优越的条件,尽管在当时,这些薪水对于一个只会JSP的人来讲应当还行。从职业的发展角度来讲,我需要一个更好的空间,你要知道,在我离开这家企业之前,我还不知道CVS怎么用,Code Review是怎么回事。

.Net程序员如何快速成长之我见[1]


在面试一些新程序员的时候,当问他为什么选择.net方向时,经常听到一些这样的回答:记得曾经我的老师对我们说,当你在开发语言和工具方面不知道怎么选择的时候,那么你只要跟着微软走就行了。所以最终他选择了.net。我想大家都曾有过类似的经历。当经历过数年之后,一些人在.net的某方面成为了专家,有些人精通数据库方面,有些人精通web界面设计,有些人精通系统架构。还有一些人是什么都会,但不管哪一方面都算不上精通。当然还有另一些人,他们没有选择.net,他们选择了java,在若干年之后,他们说:java程序系统比.net系统更稳定之类。既然大家都是.net阵营,暂且对他们不予讨论。

结合自己的亲身经历,对准备成为。net程序员和已经成为。net程序员的新人一些快速成长建议:

1.选择研究方向后不要动摇

对.net好还是java好的问题,我一向的观点是:它们都好,它们都是软件开发领域的杰出工具,它们都能够做出非常出色的系统。评价一个系统好与不好的标准不在于开发语言,而在于系统本身,更多地在于这个系统的开发者-程序员本身。只要你是一个出色的程序员,你完全可以用你擅长的开发语言开发出高质量的系统,而不管这种开发语言是.net还是java。而如果你过度地徘徊在研究它们到底谁更好的时候,甚至不断地在二者之间辗转的时候,你损失的将是宝贵的时间。

2.尽量缩小研究范围

.net只是一个大方向,你应尽量将自己的研究范围缩小,比如专注于数据库,专注于xml方面,专注于ajax,只要你专注任何一个区域深入研究,当你成为专家之后,都不会愁饭吃。反之如果你什么都会,而没有一样真正精通,那么你可能永远只能做一个普通程序员。

3.找到正确的入门方法

不管做什么事,方法很重要。特别是入门时的方法。正确的入门方法将大大加快你学习的进度。了解语言本身和前提技术是最先要做的事情,比如你选择c#方向的asp.net,那么你必须先学习c#基础语法,和asp.net基础知识,并实际写小程序测试你学习的成果。当学会基本语法后马上找到asp.net的官方入门指导。微软做得很好的一个地方就是他的帮助系统做得很好。新人容易入门,建议首先从入门教程开始,这个东西就在你的机子上,在Framework SDK的菜单里面。强烈建议把这个教程全部学会。

4.多看别人的成果(源代码)

这个很重要,如果你是一个团队的新成员,那么看他们写好的代码将是非常好的学习途径,因为那些都是成功的代码经验。如果你还没有加入团队,是自学,那么找一个好的学习网站,多看上面的源代码也是很好的方式。另外一个强烈推荐的途径:仔细研究微软的.net StarterKit,个人认为这是.net入门学习途中最大的收获。

5.敢于接受新项目挑战,敢于尝试

主动承担公司的开发任务,敢于在项目中尝试你最新的研究成果将对你自身技术水平提高带来非常大的帮助。记得当初我在做一个建站平台项目时有过这样的经历,之前公司开发的项目大都在原有技术积累下面用成型的框架做开发,那时我也正在学习asp.net,不过那个项目我是主程序员,因此在开发上有很大自主性。于是1.0时我尝试将所有用户文章保存在web服务器的xml文件里,而不是像传统项目那样保存在数据库里,以希望减少web服务器和db服务器之间的数据传输。结果1.0系统实际运行时确实达到了我的目的,虽然随着数据量的大量增加,最终导致了IO瓶颈。但通过后来对IO瓶颈的优化解决,我在文件系统、服务器进程、xml应用、代码规范和性能优化等方面学到了很多东西,倘若当初按原来的模式写程序,将错过学习这些知识的很好机会。

6.不断推翻自己,敢于重构

这是对程序质量的要求,我认为只有不断地优化和改造自己的程序代码,才能最终写出高质量的程序,做出高质量的系统,最终使自己的技术水平提高。通常我会把实现一个功能的代码量作为衡量代码质量的标准,代码越少,越精简,同时又具有良好的可读性,就越理想。重构需要几个前提:首先是项目时间允许,然后是确实找到更好的代码组织逻辑,如一种很好的结构模式,更合理的面向对象调用方式等等。只要找到更好的解决办法,那么勇敢地推翻原来的程序框架,重构它,经过不断地重构后,有一天你回过头去看之前自己写的程序时会有一个感叹:哇,怎么以前我的程序写的这么烂阿。

7.跟上技术更新的脚步

软件技术更新速度有时真的让人很郁闷,经常听人说,刚学会.net1.0,马上就出了1.1,1.1刚完成一两个项目,又出了2.0,用2.0不到一年已经出了3.5,但现实就是这样,你必须得跟上脚步,当使用asp.net的时候,你就不能再像以前用asp那样去写程序,当使用.net2.0的时候,你要敢于使用masterpage,skin去代替原来的usercontrol模式,原来的网站皮肤实现模式。而现在出3.5了,你必须马上学习vs2008,学习Silverlight。只有跟得上技术更新的步伐,你才永远保持自己的技术领先地位。

以上几点建议,希望能给一些新加入的.net程序员们一些参考。

程序员职业规划之我见


职业规划怎么写,相信很多朋友们对这个问题很感兴趣,下面给大家介绍一下。第一部分,前言即总论;第二部分,自我分析,包括业余爱好、性格、价值观、专业技能等;

如果把你的职业人生想象成为一个你正在开发的软件产品的生命周期,现在你的所有需求都已经明确(有车,有房,有钱,有公司等等),接下来我们就要开始为自己做职业规划了,在制定这个职业规划的时候,我们要重要的注意以下4个方面的内容,这个四个方面运用到整个人职业的生命周期中。

一、选择市场。

一定要谨慎的挑选你要关注的技术和商业领域。如何权衡风险和收益?

都是做软件开发,你究竟要做与硬件相关的还是与网络相关的?与手机相关的还是与汽车相关的?每一个分支都有专家和权威,你要确认自己想站在哪一个分支的顶点。在深圳很多程序员,为了生存,先入行再转行。程序员需要积累,面试官不喜欢一张白纸上满是编程理念的空头支票。

二、投资

做生意哪有不投资就赚钱的好事,你的知识和技术就是你这件生意的基础。所以你要在这两个方面合理的投资,时间,金钱。只知道在理论上使用VB或者Java已经远远不够了,那么在新的环境下,新的平台下,又有哪些新的技术你应该具备的呢?

三、执行力

用我老板的话来说单纯有技术出色的员工,并不能给公司带来利益。员工必须要有产出才行。有的时候一名优秀的员工产出远远不及一名普通的员工,反而有时候会让简单的事情变的一团糟糕,2分钟一个简单的算法,被花上2天时间提高0.001%的效率这种事情也是经常发生的。所以我们应该考虑的是能否创造最有利的价值而不是完美,

四、团队

程序员孤军奋战成不了大事。一个再优秀的程序员也完成不了整个windows操作系统的工作,虽然我见过一个人是可以独立完成破解windows的工作的。所以如果不想过于孤单和山寨,请找到一支正规军加入他们。

五、又是市场

你们肯定会说,你开始写循环了是吧?怎么又是市场?

一个人选对了市场,投资技术,有了回报,有了产出,有了自己的团队,恭喜你,你离出产品的日子不远了。但是你有没有考虑一下你的产品的市场,若是无人知晓,毫无用途,又怎么会有利润呢?你的成绩又怎么会被老板和同行认可呢?请记住:一个团队奋斗了1个月写出来一个:Helloworld!是赚不了钱的。

经营自己的程序生涯


这个问题很多人都想问,也都想知道标准答案。我这里没有答案,我跟其他人一样,也有困惑和迷惘。有时问自己:到底算不算个程序员?自己的程序员生涯到底如何继续走?这类问题有时真的很伤神,但不得不想。

把公司类型分为三种:

1、国内中小公司或创业型公司
2、腾讯,百度,盛大,阿里等已有一定规模的网络新贵
3、外企大公司

目前,也就是这三类比较典型。

那么程序员的选择呢?

应该说,能够做程序的,智商一般不会太差,这不是自夸吧?能够做好程序员的,要求就要高一些,这不仅仅是IQ,或者说单方面的技术能力或与团队成员相处的问题。而规划好自己的程序生涯,就是很不简单的一件事情了。

首先,区分一下概念:程序生涯不等于职业生涯。程序生涯的结束也远不是职业生涯的完结,很可能只是一个新的或更高的起点。这里我们只限定程序生涯。

一般人从学生时代起,开始接触程序,工作后,开始正式从事这种职业,外人称我们为程序员。当然,也有人是半路出家的,我身边有好多朋友都是,包括我也是半业余半专业的。一般会从Coder或Designer或DBA做起,慢慢掌握一到多方面的技能。慢慢地,工作两三年后,经验不缺了,水平提高 了,理解增加了,于是有更高的追求境界,这是再正常不过的选择了,天经地义。于是,换更好的工作,得更高的收入。再过几年,可能成家、买房、小孩教育一系 列问题也随之而来。这时候,麻烦可能来了。

高额的生活成本压力下,你不能再随心所欲地换工作,你必须要稳妥处理各种关系,让你的家人过得安稳、温馨。因为,你不再是孤身一人漂走江湖。在这个现实的社会中,什么才是你的正确选择呢?这时候,书本的知识、别人的经验都不管用了,因为,这是整个社会面临的新课题。

于是,很多人迫于生活压力,不得不选择第2类。当然也有人选择第3类。前提是要么你年轻,要么你具备丰富的项目管理经验、或者可替代的业务能力。

这之后,还是有绝大多数人一直在第1类公司进出。这里有个原因:从第2类、第3类公司出来到第一类公司淘金者,刚开始都会有一段蜜月期,公司委器重你的才华和经验,于是,你全力贡献,它全力消化。两三年后,三种结局:

一种是公司由于各种原因一直上不了台阶,你失望,老板绝望,你走人。
另一种你适应了这里的环境,公司也从你那里吸收了足够的养分,你被架空,被迫走人。
最理想的一种,你和老板一起突围,你的付出得到了应有的回报。这是万一中的万一。

在文中说了,我在看了一些职位的描述信息之后,发现经过两年半的创业生活以后,我已经难以适应大型外企的工作方式了。在那里,每个人都是一个螺丝钉,每个人都要在严谨的工作流程中做好螺丝钉的职责。而我,更希望在一个有挑战,并且在一定程度上发挥创造力的地方工作--没错,创造力,这是一个很现实的矛盾,你不适应了。于是,不得不再一次开始,开始新一轮的挣命,尽管每一轮过后,我们认为自己已经足够成熟。

如果人生可以回头,我想很多人都会有正确的规划,然而正如乔致庸所经历的尘缘苦短,叹人间路长,不能够容我细思量。这一路起来,充满着希望,又饱含着失望。在这无际的奋斗中,不知不觉我们鬓已霜。

绝大多数的人程序生涯不会超过十年,即使外部条件允许,你自己的身体有时也会不给你面子。在这有限的时光里,我们,究竟能做些什么呢?

邀月的建议:既然不能掌控大势,那么先修炼自身。经验也好,教训也罢,每一次的经历后,要有比较深入的反思,人最大的财富恰恰来源于此!不奢求能吃一堑长十智、百智,至少不要只吃堑不长智,如果人生吃过三、五次还不长进,可能上帝都会跟你急!

一个可行的法子是:一天一天过。是的,每天都问自己,每月问自己:我做了什么?我没做什么?我花多少时间在经营自己?

不要沉溺于菜场流连忘返,不要在扎堆的网游里不能自拔,问问自己:我有多少岁月可以虚度?也不要沉迷于代码中,多花点时间理清思绪,除了代码,我还欠缺什么?我的强势又是什么?想想自己的事业,一个可以让你为之奋斗一生的事业,如果有了,那就做吧,倾力而为吧!为什么不呢?

古人日三省其身。我辈愚钝,惟有勤勉,以待天机!

关于女生的程序员之路[1]


首先声明,本人是男生,从来没有站在女生的角度思考过问题,因此只能就自己的角度来探讨一下问题,说得不准,勿怪。

嗯,说个现象吧,我在成都呆了12年,确实没怎么看到女性程序员,有几个,生了娃以后,都回家带孩子去了,不过我到西安来以后,吓了一跳,程序员中男女比例接近1:1,呵呵,确实给我上了一课。

所以,就我的经验值,我发现你说的其实不准确,起码中国北方城市,女性就业率还是比较高的,至于是不是程序员职业,并不重要,也有很多女性做的,你大可不必担心这个问题。

当然,女性有女性的弱点,生理上的咱们就不说了,其实对于办公室工作来说呢,问题不大,关键是结婚生孩子,根据劳动法,女性一般是4~6个月的产假,这在很多小公司来说,一个人接近半年不上班,还拿薪水,确实有点难以接受,因此,在招聘时,不知不觉就对女性有点回避倾向,就造成了女性求职困难的现状。

但是呢,我觉得这是短期现象,为什么呢?一个公司,如果要做大做强,做正规,必须正视这些劳动法规定给员工的基本福利,如果老板刻意回避这些话题,应该说,这家公司也确实做不大。至少,我到现在没有看到哪家超过1000人的大中型企业,里面一个女人都没有的。你说是吧?

所以,这个问题,归根到底,我的理解,还是市场经济的初级阶段问题,即中国的企业刚刚出现,还在进步,目前实力还弱,无力承担太多的社会责任,无法承受女性结婚、生子的一系列额外成本增加,因此导致女性就业渠道偏弱。

就我的经验而言,目前国有大型企业、欧美外资企业,嗯,台资和港资等企业也是,对劳动法遵守比较好,反而是中国的民营企业,遵守得不好,让买个社保都磨磨唧唧的,更不要说女性的产假等问题了。因此,如果求职时主要针对上述企业来说,应该问题也不是很大。嗯,国内华为、中兴等大型企业,对女性歧视也很小,可以考虑。

但是,要注意,这里面也有个门槛问题,国有大型企业,其实福利是比较好的,但是,工资待遇偏低,尤其是进去主要靠关系,很少有凭借真本事能进去的,这个难度很大。其他三资企业,人家是典型的资本主义社会原则,看人部分男女,都是成本,每个人必须创造出效益来,因此,首先必须要真本事才进得去,其次,进去后,人家用人也比较狠,我们常说女生当男生用,男生当畜生用就是这个道理,如果进这类企业,要做好被扒层皮的思想准备。

从程序员到软件工程师[1]


看了程序员系列文章,颇多同感。做为一个从业13年,一直做软件开发的人,我想给那些已经、将要和有志于走上这条路的朋友一点点忠告。

首先,说说程序员和软件工程师。虽说都是编程的干活,但是还是有一点高下区别。

主要说来区别是程序员programmer是将程序(已经有流程,伪代码或设计模板)写成代码;需要熟练掌握至少一门编程语言。而软件工程师则要将目的描述成程序语言并实现的能力。例如将数学算法、自然语言、思维模式描述成程序算法,程序流程/类或/和人工智能,并写成代码的能力。

对初入行的人,当然重在语言,要做一个合格的程序员,首先要熟练掌握语言。包括语言特性和实现的能力。例如使用尽量中文说的面试题,就要求面试对象掌握C++中的类的封装;构造函数的重载和运算符重载。

做过一两年后,要想继续吃这碗饭就必须提高自己,首先当然是深入了解语言,特别是语言的思维方式,编译器的工作方式和常用设计模板。就拿C++的多态性来说,很多公司面试就会问什么是虚函数/纯虚函数(思维方式)?用C如何实现函数重载(函数指针和了解编译过程)?接口类/工具类/工厂类和 Sigleton类的实现(常用设计模板)。另外还有一大块就是内存管理了。

如果能做到深入了解语言本身,那么恭喜你,你现在Title至少是高级程序员了。

在对自己的语言有信心后,下一步就想一想自己要想哪方面发展。是管理方面(项目经理)还是技术方面(软件工程师)。既然这里讨论编程,我们就先不考虑项目经理。想发展为一个软件工程师其实也有两条路。一条是走系统软件工程师或者叫架构工程师的路;另一条就是算法工程师。

在国内的朋友我建议走架构工程师的路。要求就是知识面广,对整个系统熟悉,能很快了解和分析客户/设计需求,很快估计工作量、风险和所需要的资源(承担相当部分项目经理的任务),能根据现有技术人员储备提供一个解决方案。当然还需要一定的表达能力和文档写作能力。例如我当年走访某省农行,和对方聊了银行卡和医院医疗卡的联网,当天晚上就和市场部的人合作,搞了一个通宵,写出了60页的技术方案和外加40页的基于此方案的标书。

一般来讲,要做到对整体系统的深入了解,没有两三年的时间是做不到的。所以给国内程序员的建议是不要频繁跳槽,尤其是不要频繁跨行业跳槽。踏踏实实地将本行业的软件吃透,最好每个部门或模块都工作过。如果有这个想法,一般情况下你可以和项目经理沟通,通常他们会鼓励你这样到各个部门/模块工作。

我出国后,发现情况有点变化,由于语言和文化的区别,对自己走系统工程师的路没有很大的信心。只好转向走算法工程师的路了。

确定了这条路后,突然发现自己的数学能力太差了。不得不重新恶补线性代数,概率和数理统计等高等数学。同时将《数据结构与算法:C++版》好好从头到尾读了一遍。然后终于蒙混到了一个职位。

当时第一个任务就是在一个嵌入系统中写一段程序将bmp压缩为jpg。各位可能会问了,这个在网上满大街都是源代码,为啥还要自己写呢?其实这就是我不太建议国内工程师走算法这条路的原因。除非你是数学大牛,有自己原创的算法。否则在国内实在没有算法工程师很大的生存空间。但是在国外有很大的不同,稍正式的公司基本上都禁止使用open source。因为open source也是有版权的,有的是不能商用,更有的copy left是那些公司碰都不敢碰的。因为copy left要求你使用了他的代码,你也必须公开你的代码。

当然,我们可以看那些open source,然后自己重写。不过相信我,通常情况下如果你不是想简单做些变量替换就交差的话,看原代码不如看这个算法文档本身。

我的四年程序员之路


职业规划是对职业生涯乃至人生计划的过程,职业生涯规划的好坏可能将影响整个生命历程。感谢您阅读《我的四年程序员之路》内容,职场资讯网小编向您推荐一些职业规划知识,欢迎参考,希望能帮到你。

经朋友的介绍,我进入一家外企。从程序员的角度来讲,这家企业还算不错。严格的代码管理,代码质量和性能被提到了很高的位置。我被分配到一个团队里面,作为其中的一员开发Java Web应用,做的项目全部是跟其它公司做集成。怕丢脸没面子,我上班时尽量多注意别人如何做。回到家中,就得开始死啃CVS, UML, Eclise 等平时项目中要用到的基础中的基础。最可恶的是我的项目中从来不用到数据库,我那一年半的实施经验屁用没有。公司的调试环境都是Linux,为了学习他,我家那台破机没被我少折腾,现在它正静静的躺在我妹妹的卧室,她说如果能修好,至少还可以上上QQ聊聊天。

一年下来,我的进步很大,软件开发中常用的那几个工具自然是不在话下,甚至还在有空时给别人做做类似Spring, AOP等等的培训,当然这些培训都是公司内部的。到了年底,我的Lead跟我进行了一次 One to One Talk, 他告诉我,我的技术水平不错,只是沟通能力有所欠缺。他说的话我很能理解,由于是一家外企我的US lead更喜欢用英文与我们交流。在Email和Yahoo用的全是英文。我在大学没有过四级,毕业之后一直都在跟政府打交道的小公司里面混,为了防止太丢作为一个中国人的脸,我尽量以最简短的方式回他的Yahoo消息, 至于Email, 能让别人帮着回的尽量让别人帮着回。

所以在第二年,我加强了对英语的学习,我发现英语学习所带来的好处不仅可以提高英语水平。从另一个角度来讲,我看代码的能力也慢慢得到了加强,不敢想像一个英语四级没过的人是怎么整天面对开源英文文档的。在语法能力得到加强的同时,我还报了口语的英语班,长时间的历练口语的水平也基本可以应对简单的交流。这一年,项目非常多,Java的,Ajax的, 一堆开源代码的参照与学习。这段时间, Ajax的企业应用越来越多,DWR, Dojo, Jquery, prototype 的选择也多。这段时间我所做的项目从前到后都有,做一个上传模块,有Ajax的Call Back调用,也有后端代码负责存储的 JCR 调用。汗流夹背,加班不断。顺便提一下,我从来都是8:30之前上班,但很少17:30准时下班。如果我能18:00准时出现在家门口,我老婆就会给我一个很大的拥抱,并惊讶的问我,今天没加班?是啊,在这个行业,加班不奇怪,奇怪的是居然不需要加班。

加班还在继续,现在,正在我进入这个行业的第四年。同时和我来到这个城市的我的妹妹已经是两家店面的老板娘了,我的N多同学都从销售变成了招聘销售人员的老板。在同学们的眼里,我还是那个大学里面与众不同,非要在计算机上写出一个自己的网页的怪人。写这篇文章并不是要鼓动你放弃自己现有的职业,我知道大部分的看客或许正是程序员。这只是我个人的一种感受,你的所想也许与我差之万里。程序员的生活终归是一天到晚在做设计写代码。一不小心便会有Bug的产生,无论你用多么先进的自动检测工具。程序员的生活依然是每天只有晚上的那么点时间陪家人和老婆,还要保证周末不需要加班,平时能早点回家。有人会说,那你应当向更高的层次发展。拜托,我的Manager每天看起来比我还忙。

每天的太阳都会升起,我的每一天起点都不一样,我有时在想,到底在哪一天太阳升起的时候,我的IT生活会稍有起色? 我的心里在问,不会是我要转行吧 ?

程序员你真的只是程序员吗[1]


你是不是感觉标题有点矛盾啊,是啊,程序员当然就只是程序员而已嘛,还会有其他什么吗?

No,No,No,如果你以前是如此认为的,那看完这篇文章后,请从此打消这个念头,因为你要改变成一个不一样的程序员(怎么还是程序员?)

虽然我工作经验也就6年左右,但经历了很多,也自己创业过,也是从一个初级程序员走起,因为看的比较多了,某些东西也普遍存在着很多程序员身上,希望自己的经验能帮助你们。

当刚踏入程序员这条路的时候,有幸为一家公司开发一个大型的电子商务网站,因为这篇领域当时还算刚刚起步,自己的编程能力还不太好,所以做起来就比较吃力,每天重复着做完PM给的工作,但是做了大概几个星期,我发觉某些地方真的不合理,但自己又仅仅是一个程序员而已,怎么办呢?我还是按照PM的任务一步一步来做,私下里我用了大量的时间去尝试着我的做法,在接下来的几个星期,我试着跟我的PM进行沟通,他也发觉不错,所以一并写了方案提交给上级领导,很好的是,我们的领导发觉建议还不错,所以改变了原先的策略,对我们的网站原先的设计进行了彻底的推翻,一套新的理念就此诞生了。

这只是一个小例子,并不是炫耀自己的能力,我只是想说,程序员,你其实不仅仅是worker,更应该是Ideaer。当你选择程序员这条路时,如果你仅仅为了工作而选择的,我想你的人生真的很灰暗,为什么这么说呢?我面试过很多人,大多都是从培训中心出来的,虽然我也是从那里走出来的,不过我当时是为了学习编程而去培训,但现在更多的人会为了工作而去培训。其实如果你是真正的选择程序员这条路,我想你的思维能力一定不错,因为一般程序员大多是理科出生,理科靠的就是你的思维能力,在某些时候或许你的思维还不够敏捷,但我知道,每个人在接受了一段时间的工作后,就会产生各类的想法,或许某个想法你会改变你公司的命运,可为什么提出观点的人就寥寥无几呢?

我想可能是因为性格吧,因为很多程序员都是内向型,因为我们需要花一定的时间,去沉醉在代码中,因为这是一个奇妙的世界,无法自拔,所以很多时候就忽略了沟通,因为我们打交道最多的是abcd。如果你正是如此,希望你快点走出来吧,分清楚何时沉醉,何时交流才是最好的。我的偶像-唐骏,我看过他的访谈,他在大学时还是一个不会沟通的人,只是偏执于技术,而且和大多人一样,都会觉得自己什么都会,什么都行,是个天才,但在他大三的时候,他意识到了错误,花了几年的时间去学习交流、沟通,在宁愿委屈自己进入微软做程序员,再到无数次发意见给Bill,一步一步成就了这位打工皇帝。

所以,我们每个程序员要做的是,技术和沟通并行提高。在唐骏的话中,我会学到很多东西,他能从容应对每一次挑战,当时有幸成为唐骏的下属,见证过他的能力,虽然他当时只是个技术总监,但他的想法、创意给盛大带来了无比的利益,我不得不佩服他的胆大,不得不佩服他的能力。从他身上还学到了专一,其实很多程序员会在编程的道路上三心二意,这是很正常的,不过我相信一段时间以后你会学会专一的,因为程序真的很美,带来的不仅仅是工作和薪资。

我这里又不得不批判一些年轻程序员了,他们仅仅看中的是工资、福利等,没错,这是考虑工作的一点,但你要知道,有些时候,你第一点的工资,或许你会学到更多的东西呢?我经历过很多,经历过1年工资翻几番,又经历过折一倍,又经历过小公司,又经历过大公司,各种各样看的实在是很多,但我不会说我自己半途而废,因为每次我会把事情做的觉得自己可以了,我才会选择更好的发展前景。我面试过一些人,工作也就2,3年,做过的东西也很多偏向于OA、ERM等项目,就觉得自己很了不起了,工资也是漫天要价,可真正面谈的时候,我才得知,你仅仅是其中的一个小模块,但当我问其项目的整个运维的时候,就会楞个半天,最后来一句,这个模块不是我负责的,敷衍了事。那好,我问你自己负责的模块,如何具体写的,用了何种方式等,基本都会回答,三层架构,什么什么,My god 三层架构是你一个模块就能体现的吗?那好,既然你说三层,何为三层,三层的优点,缺点在哪里?诶~~~~~前几天首页那篇批判大学生的文章,我觉得写的太好了,你们这是在沉醉吗?如果你不喜欢,你为什么非要选择程序员这条路呢?

程序员如何提升自己在公司的价值


一个人要想在公司立足,成为公司不可或缺的人才,并得到公司的重用和青睐,只有让自己对公司具有更大的价值,那么如何提升自己在公司的价值呢?

1.任务分配,不怕累,多干活

任何公司、老总都喜欢勤快、不怕苦的人。这是你获取上司认可和团队关注的第一步,也是你职场原始积累的开始。同时,也是争取自己在工作中的市场份额,成为不可缺少的角色的预热。

2.出现问题,少抱怨,不牢骚

成功的人找方法,失败的人找借口。遇到问题,积极地想办法解决问题,不要一味地把问题全推到别人身上,或者找出各种理由来给自己辩解。想一想是否可以通过其他办法或渠道把这个问题解决掉。通过这些问题,不但可以充分体现你解决问题的能力,也为自己造就可信任和成熟的人格魅力。

3.项目核心,不怕难,不逃避

项目核心往往会有一定难度,但不要惧怕,这往往是你体现个人价值的关键。困难代表门槛,代表竞争力,敢承担,莫逃避,更多的历练才会使你快速地成长。同时,核心的东西往往具有不可替代性,所体现的价值会更大,对稳定你的地位会起到非常重要的作用。敢于承担重担的人,才可委以重任。

4.空闲时间,多学习,少聊天

增强自身竞争力最关键的问题还是不断学习,特别作为程序员这个特殊的职业,千万不要把大好的时光浪费在无意义的事情上。虽然,公司照样给你开工资,但你逝去的是你自己的生命和大好的前程。

5.项目完后,多归纳,勤总结

做好技术积累和行业积淀很重要。千万不要做完了就完了,黑瞎子掰棒子,要给自己留下点东西,该封装成通用组件的封装,该整理成通用模块的整理,这样以后做项目才会越做越轻松。不但自己受益,公司也会觉得你做事效率高,能力强,肚子里有货。

6.跳出技术,会沟通,懂协调

对于程序员,有时我们会觉得只要将代码写好,将项目做完就行了,至于沟通方面,那是销售和市场人员的事情,其实,即便在技术研发方面,有效沟通的能力依然非常重要,因为做项目要和客户沟通需求,要和同行沟通技术,要和朋友沟通成长,要和上司沟通工作,部门之间要协调。具有好的沟通和协调能力,你会更像公司的万金油,爱你到永远了。

当你拥有了老板的信任,并成为公司不可缺少的人,加薪、升职还是问题吗?

一个平庸程序员的自白[1]


我一直以编写代码为乐,起因并不是我精于此道,而要部分归因于它是一大挑战。我发现没有什么比指挥个人电脑在显示器上显示Hello World!更令人激动的了。而在显示器上显示三个红桃或者黑桃A(Ace)和J(Jack)则是一个完全不同的问题。我毕业后写的第一个程序是用 Northstar Basic为NorthStar Horizon编写一个自动售货机程序,后来又为Northstar Advantage编写了基于图形的21点纸牌(Blackjack)游戏程序。

尽管如此陶醉于编程,但我必须坦白地承认:我是一个平庸的程序员,总在寻找一种方法来获得大的回报 - 即程序没有语法错误并能正常运行。这并不奇怪,我从未像一名程序员那样做好本职工作;我发现自己具有成为一名优秀开发人员的天赋。但是,在我们继续往下谈之前,我要给平庸程序员下一个定义。

平庸程序员--会使用一些现成工具的程序员。他只知道最简单的命令语法,但懂得在哪能找到更复杂命令的语法。他不知道如何编写最高效的代码,但懂得在必要时如何重写和测试比较高效的代码。他可以克服重重困难独辟蹊径达到目标,但他把每个困难视为挑战,并自信会找到每一个困难的解决方法。他可能需要较长时间才能完成,但总能达到目标。他不知道如何创建一个DLL,但在必要时可以弄懂。他与大多数程序员一样,并不特别喜欢做工作记录,之所以这样做是因为他是一个专家。

工作决定技能

虽然我很想继续编写游戏,但为了填饱肚子,我只得迁就本地就业市场;公司们有必需胜任实际工作这个奇怪的要求是众所周知的。产品、人力资源、会计、库存跟踪和数据报告只是做生意必要的一些东西 - 你知道,很无聊的东西。

当我真正为报酬而编写程序时,我的技能发生了戏剧性地变化。它不需要采用大量先进的编码技术来围着数据团团转,并耍魔术般地变成信息。

我被休斯飞机(Hughes Aircraft)公司雇用,通过IT服务来为产品控制部门提供支持。我的工作需要开发/分析技能,我热爱我的工作。编程不过是达到目的的手段。

开发人员身兼数职

程序员只是开发人员所扮演的诸多角色中的一个,通常你要身兼以下数职:

购买方(带预算)Buyer (with budget)
清道夫(无预算)Scavenger (no budget)
分析师(Analyst)
设计师(Designer)
规划师(Planner)
程序员(Programmer)
协调员(Coordinator)
测试员(Tester)
文档管理员(Documenter)
技术支持员(Support technician)

当开发人员未被认可为一个或更多角色中的专家时并不太令人奇怪。对我来说,工作职能就是编程。

2025-03-26