一个初学者的问题

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

相关 [初学者 问题] 推荐:

一个初学者的问题

- muzuiget - shell's home
    今天挺高兴的,因为我看到了一个新手在我的blog上面留言提问. 问题摘抄如下,我想他应当不会介意我合理引用吧. 贝壳老师,我是一名大三的学生,下半年马上找工作了. 没做过什么项目,编码能力较差但是对技术还算热忱,您觉得在国内做技术40年现实么?.     我觉得他的问题比较散,题目也比较大,就专门开了一篇来回答这个问题.

php初学者常见问题

- - SQL - 编程语言 - ITeye博客
最令PHP初学者头痛的十四个问题. 管理提醒: 本帖被 haowubai 执行置顶操作(2009-04-16) 【1】面之间无法传递变量 get,post,session在最新的php 版本中自动全局变量是关闭的,所以要从上一面取得提交过来得变量要使用$_GET[’foo’],$_POST[’foo’],$_SESSION[’foo’]来得到.

[译] JAVA初学者的30个常见问题

- - 博客园_首页
本文回答了30个JAVA入门级初学者的常见问题. a += b 和 a = a + b 的效果有区别吗. 声明一个数组为什么需要花费大量时间. 为什么JAVA库不用随机pivot方式的快速排序. Q. 为什么 -0/3 结果是 0,而  -0.0/3.0 结果是 -0.0. A. 在Java里,整数是用补码表示的.

Java初学者都必须理解的六大问题

- - 编程 - 编程语言 - ITeye博客
  许多人都做过这样的事情,但是,我们到底声明了什么. 回答通常是:一个String,内容是“Hello world!”. 这样模糊的回答通常是概念不清的根源. 如果要准确的回答,一半的人大概会回答错误.   这个语句声明的是一个指向对象的引用,名为“s”,可以指向类型为String的任何对象,目前指向"Hello world!"这个String类型的对象.

寄编程初学者

- tackwell - 笨兔兔
看到这篇文章,仔细读后,虽然我平日接触编程很少,可这些容易犯的毛病不仅是初来乍到的程序猿们,人生何尝不是这样呢. 目前,笨兔兔限于Linux桌面应用层级,接下来打算学习下编程,不求成为多么优秀的程序猿,只希望能从中得到快乐和思维的态度. 多少次我曾好奇到底有多少程序语言要学. 初学者谨记:编程如作诗,什么语言不重要.

10篇写给Git初学者的最佳教程

- Shell Wang - 帕兰映像
身为网页设计师或者网页开发者的你,可能已经听说过Git这个正快速成长的版本控制系统. 它由GitHub维护;GitHub是一个开放性的、存储众人代码的网站. 如果你想学习如何使用Git,请参考本文. 在文章最后,我们罗列了其他Git学习资源. Pro Git是由Scott Chacon编写的免费在线图书,Scott现在是Git的开发人员.

初学者购单反选C还是选N?

- sy - 色界频道
  一直以来,ET写博客的最大动力就是能在回答网友的一些常见问题时不用重复敲字,直接丢上一个博客链接即可. 最近不少网友在QQ群里问如何选择第一台单反,并且集中在佳能500D/550D和尼康D3100、佳能60D/7D和尼康D7000,既然是大家都关心的问题,那就允许ET写篇博文来此纸上谈兵.   『拿品牌说话的都是纸老虎』.

JavaScript初学者应注意的七个细节

- 虹宇 - 博客园-首页原创精华区
  每种语言都有它特别的地方,对于JavaScript来说,使用var就可以声明任意类型的变量,这门脚本语言看起来很简单,然而想要写出优雅的代码却是需要不断积累经验的. 本文利列举了JavaScript初学者应该注意的七个细节,与大家分享. JavaScript定义对象和数组非常简单,我们想要创建一个对象,一般是这样写的:   .

给初学者的20个CSS实用建议

- - 博客 - 伯乐在线
英文原文: 20-useful-css-tips-for-beginners,编译: 杨礼鑫. 过去就连一个镜像站点,我们都依靠大量的开发人员和 程序员进行维护. 得益于CSS和它的灵活性使得样式能够从代码中被独立抽离出来,从而让一个只具备基本CSS理论的初学者都能够轻易地改变网站的样式. 不论你是对用CSS建站感兴趣还是仅仅拿它让你的博客更有feel,打好基础才能盖高楼.

14个简单有用的android源码,适合初学者

- - CSDN博客移动开发推荐文章
1:查看是否有存储卡插入. 2:让某个Activity透明. 在OnCreate 中不设Layout,然后this.setTheme(R.style.Theme_Transparent);. DisplayMetrics dm = new DisplayMetrics(); //获取窗口属性 getWindowManager().getDefaultDisplay().getMetrics(dm);.