今天挺高兴的,因为我看到了一个新手在我的blog上面留言提问。问题摘抄如下,我想他应当不会介意我合理引用吧。
贝壳老师,我是一名大三的学生,下半年马上找工作了。没做过什么项目,编码能力较差但是对技术还算热忱,您觉得在国内做技术40年现实么?
我觉得他的问题比较散,题目也比较大,就专门开了一篇来回答这个问题。
技术40年是个梦想,电脑出现不过60多年的事情,做40年技术的本身就是凤毛麟角,没什么可比性。我认识的做技术的人,最多的是做了将近20年,已经是超级老程序员了。以中国的状况,对做技术的不怎么有利。通常而言,如果你做了五年程序,还是没有什么大的进展,你就会主动的换岗位。因为一般人做了五年程序,却还没有达到一定的程度,周围房子妻子日子会一起压过来,不由得你不担忧你的将来。国外程序员并不背负这么大的压力,而且工资相对平均而言比中国要高一些(当然,国外程序员的工资也在逐渐降低,因为大量的离岸外包)。一般来说,程序员转行最多的是去做管理,也有不少做风投的。出结果的少,多数就默默无闻,只有少数日子过的很惨。
如果你在五年程序生涯后,逐渐确立了自己的风格,并且取得了一定的成就,多数人也不见得继续做程序。大部分人都开了公司,给自己当老板。中国的劳资关系很奇怪,资方比劳方有利的多。混的不错的人,但凡手里有点积蓄的,无不想成为一个资方。我认识的很多老程序员,大都自己开了公司。或者是外包公司,或者是技术公司,但是持续在一线写代码的人却不多了。除去自己开公司的,大部分在大型外企做了技术总监,这些一般是比较有志于技术的。在私企混技术总监的,如果有点年纪,多数都是靠着人脉而非技术坐稳位置的。当然,这不代表我看轻私企的技术总监们的技术。
另一个雪上加霜的问题,是中国的盗版问题。中国目前不仅在操作系统领域盗版,而且美剧、动漫、音乐,乃至于创意,皆是盗版,无不山寨。作为用户来说,这给你很廉价的服务。不过对产业而言,这是致命的。目前中国根本没有人真的是做产品的,基本都是抄产品的。产品经理最大的任务,就是根据已有的产品抄一个,然后做一些细节修改,并试图用细节打败对方。在这种思路下面,谁需要用高薪的,有经验的程序员呢?新毕业的学生足以胜任大部分工作,关键是新鲜热辣成本低廉。
上面说了一大通,其实根本没有说到关键问题。你说自己对技术还算热忱,我不知道你热忱的原因。如果你因为技术能赚钱或者很酷,我强烈建议你放弃。和电影里的不同,技术并没有那么大的好处。真正能赚钱的不是技术,而是能用技术解决问题,这个所需要的能力和技术截然不同。也许你会举出Bill Gates和Steve Jobs的例子,我知道你还能举出很多,但这不改变一个事实。他们是用技术解决问题的人,而非仅仅有技术的人。反例你可以看看SGI和SUN这两家公司,都是技术人员的圣地,然而都是悲惨收场。所以如果你打算赚钱,技术不是你要追求的第一要素。也许你会关心,什么才是用技术赚钱的第一要素。这个问题没有标准答案。google用丰富好用的程序赢得用户,apple用良好的设计赢得用户。每个人对这个问题的解答各自不同,知道正确的解答,基本就可以迈入赚大钱的门槛。你觉得我像赚了大钱的样子么?
如果你觉得会技术很酷,我觉得你会落入嬉皮士和脚本小子的范畴。国内能用各种工具扫描网络,破解密码的人非常多,但是能知道各种工具背后工作机理的就相对少。至于能够研究出一种机理,并且写成工具的,可以说屈指可数。实际上,真正酷的是最后一种人。然而大部分人,仅仅是拿着写好的工具,偷盗别人的密码,或者是删除别人的数据,就感到自己似乎拥有力量。这是一种错误而危险的想法。好比你买了一把万用开锁工具,和一把电锯。趁着屋主不在,偷偷溜进人家家里大肆破坏,你觉得有什么成就感呢?这和偷密码,破坏数据是同一类事情,为什么大家会觉得入侵服务器很酷呢?反之,如果你用三年的所有休假,研究了市场上所有的锁,并且一一给出了开锁方法。我想电视台会对这个主题更加有兴趣一点。如果你真的觉得技术很酷,我想你应该仔细研究技术,成为最后一种人。哪怕你最后成为了一个黑帽子(利用技术作恶的黑客),也好过仅仅做一个脚本小子。当然,如果可以的话,白帽子更好。
最后一种可能,是因为你真的喜欢编码。那么,你就必须忍受长时间的编码,旁人怪异的眼光,家人的不解,没有MM,没有休假。在这里要感谢我的老婆,感谢她对我爱好的支持和理解(虽然她不能理解这些技术),否则我得继续打光棍到不知道什么时候。不知道你是否听说过RubyvsPython,我们这帮宅男把编程作为工作,把下了班凑在一起写程序作为一种娱乐。如果你真心喜欢这样,我很欢迎你加入我们这个圈子——当然,多数情况下,这意味着平庸的,和投入不成比例的工资,还有无尽的bug地狱和加班。
另外,如果你打算找一个编码工作,实际的演练一下编码会比较好一点。无论是需要你进行编码的厂商,还是技术上的进步,编码能力都是一种必须的,重要度远远超过英语的能力。当然,比这更重要的能力是阅读代码的能力。当你能够从读者角度考虑,写出适合人类阅读的代码,这就意味着你开始迈向一个新的编码境界。