【转】作为一个程序员需要学多少技能?
添加评论
不请自答。有谬误之处欢迎指正 :)
先做个简单的自我介绍。国外大学研究生毕业后,入职一家公司做IT Consultant。学过C, .NET, java, DB(仅仅是学过 XD)。入职后才接触的PHP。一路上因为工作需要,又会了CSS, JS, photoshop。现在是Branch Manager,不写代码 XD
如果单纯的说技术,那我觉得,这个问题的答案是“无限多的技术”。现在光是语言就有多少种,C, C++, C#, java, Object C, PHP, python。。。而且随着时间的推移,会有更多的语言出来(Object C好像就要被Swift取代了,貌似。。。)。所以说,单纯的说技术,这是个无底洞。活到老学到老。
但是作为管理层,我却看到了曾经作为程序员时看不到的景象。如果从“程序员应该拥有的素质”这个层面,我觉得就你的问题,我可以给出一些答案:
1. 学习能力
2. 思维能力
3. 主动性
首先说说学习能力。举个栗子,我招聘了一个人做.NET,但是他原先只有3年的java经验(请不要纠结于为什么我会做这个决定。这只是个栗子 XD)。但是他在未来的两周,以非常惊人的速度get了.NET,而且已经可以进入到正常的开发中。虽然代码还有点拖泥带水,但是这些足以显示出他惊人的学习能力。一个努力而且可以快速学习的人,在企业中是金子(至少我是这么觉得的 XD)。因为至少有两点我可以肯定:他肯接收新事物;他能够接收新事物。其实不管你去什么公司,做的东西都未必是你学过的,你想做的,你会做的。一开始的这一段时间往往都是黑暗期。但是等你以积极的心态熬过了这段时间,那么你的光芒就绽放出来了。肯认真做事的人才能委以重任(不同公司不同文化,不要直接照搬啊 XD)
接着是思维能力。这里大概可以分成两点:代码的灵活度,客户的需求理解。
首先说说代码的灵活度。我们在学校里写的都是最死的代码,一页代码基本就是为了完成作业上写的要求。也没有什么人来让你改,只要完成就好。所以多少会养成“代码没有结构“,“只有自己看得懂”等这些问题。但是灵活的代码就意味着你可以灵活的应对change。这是一种把代码全部模块化的能力。还是拿那一页代码的作业来说,如果你能把所有的可以分离出来的代码全都做成一个个function,并且可以通过传递parameters来达到重复使用的效果,那么你就会发现,自己在面对change的时候,生活会愉快很多。可能说的有点难理解,那我打个比方。市面上有出售普通的笔记本和活页笔记本。普通的笔记本,如果你想调换两页纸的位置,那么很遗憾,可能你做不到。但是活页笔记本就不存在这种问题。他们可以非常灵活的来应对change。所以回到代码的灵活度,你在编程的时候就要有意识的去把代码模块化。这样应对change可以游刃有余,而且别人看你的代码也会非常清晰。
再说对客户需求的理解。这个就有点超越“程序员”的范畴了。“程序员不是只要坐在那里写代码就可以了吗”?好吧。是,也不是。这里牵扯到一个题外话,“客户知道自己想要的是什么吗?或者客户知道自己在说什么吗?”答案往往是NO。很多客户不是IT人士,他们只会用人类的语言来描述需求。比如“我想让所有人都可以看到我的信息” - 他其实想说“这条DB记录需要对所有用户可见”。再比如“为什么我的机器这么慢” - 她其实想说“可以优化一下DB query的查询语句以及查询逻辑吗?” 等等诸如此类的“翻译工作”,程序员都要有一个更深层次的理解。记得以前看到过一个故事,有一个客户说,“我希望在我的系统里,只有我和会计才可以使用这个功能”。如果你只是单纯的理解为“为这个客户和会计制作这个功能”,那么我只能祝你好运了。因为一旦哪天这个客户突发奇想想再加一个诸如“HR”的用户进来,那么试问,你的结构可以灵活应对吗?其实以上的这个例子的正确理解,应该是“有某个标识的用户,会拥有这个功能”。那么你只要在存放用户名单的DB里面加一个column就可以了。这是个1分钟就可以做完的任务,尽管看起来很麻烦。
最后说说主动性。主动性就是一种从别人角度来识别出他将会需要我做什么的能力,以及我能想到他没想到的方面的能力(我的理解 XD),这个不只局限于IT领域。其实说白了,以上提到的两点都是主动性的表现,主动去学习,主动去把代码优化。其实没人要求你那么努力去两周学好.NET, 也没人要求你去把代码写的那么漂亮。你完全可以慢慢学,写写仅满足功能的代码。但是当你选择趴着的时候,站着的人自然就被别人看到了。而且更重要的是,你的努力是会给你回报的。特别是当大change来的时候,你一分钟就做完了。然后看着那些把代码写死的人加班。。。套用《火影》里的一句话,“努力是不会背叛自己的”。
一点见解,见笑了 :)
先做个简单的自我介绍。国外大学研究生毕业后,入职一家公司做IT Consultant。学过C, .NET, java, DB(仅仅是学过 XD)。入职后才接触的PHP。一路上因为工作需要,又会了CSS, JS, photoshop。现在是Branch Manager,不写代码 XD
如果单纯的说技术,那我觉得,这个问题的答案是“无限多的技术”。现在光是语言就有多少种,C, C++, C#, java, Object C, PHP, python。。。而且随着时间的推移,会有更多的语言出来(Object C好像就要被Swift取代了,貌似。。。)。所以说,单纯的说技术,这是个无底洞。活到老学到老。
但是作为管理层,我却看到了曾经作为程序员时看不到的景象。如果从“程序员应该拥有的素质”这个层面,我觉得就你的问题,我可以给出一些答案:
1. 学习能力
2. 思维能力
3. 主动性
首先说说学习能力。举个栗子,我招聘了一个人做.NET,但是他原先只有3年的java经验(请不要纠结于为什么我会做这个决定。这只是个栗子 XD)。但是他在未来的两周,以非常惊人的速度get了.NET,而且已经可以进入到正常的开发中。虽然代码还有点拖泥带水,但是这些足以显示出他惊人的学习能力。一个努力而且可以快速学习的人,在企业中是金子(至少我是这么觉得的 XD)。因为至少有两点我可以肯定:他肯接收新事物;他能够接收新事物。其实不管你去什么公司,做的东西都未必是你学过的,你想做的,你会做的。一开始的这一段时间往往都是黑暗期。但是等你以积极的心态熬过了这段时间,那么你的光芒就绽放出来了。肯认真做事的人才能委以重任(不同公司不同文化,不要直接照搬啊 XD)
接着是思维能力。这里大概可以分成两点:代码的灵活度,客户的需求理解。
首先说说代码的灵活度。我们在学校里写的都是最死的代码,一页代码基本就是为了完成作业上写的要求。也没有什么人来让你改,只要完成就好。所以多少会养成“代码没有结构“,“只有自己看得懂”等这些问题。但是灵活的代码就意味着你可以灵活的应对change。这是一种把代码全部模块化的能力。还是拿那一页代码的作业来说,如果你能把所有的可以分离出来的代码全都做成一个个function,并且可以通过传递parameters来达到重复使用的效果,那么你就会发现,自己在面对change的时候,生活会愉快很多。可能说的有点难理解,那我打个比方。市面上有出售普通的笔记本和活页笔记本。普通的笔记本,如果你想调换两页纸的位置,那么很遗憾,可能你做不到。但是活页笔记本就不存在这种问题。他们可以非常灵活的来应对change。所以回到代码的灵活度,你在编程的时候就要有意识的去把代码模块化。这样应对change可以游刃有余,而且别人看你的代码也会非常清晰。
再说对客户需求的理解。这个就有点超越“程序员”的范畴了。“程序员不是只要坐在那里写代码就可以了吗”?好吧。是,也不是。这里牵扯到一个题外话,“客户知道自己想要的是什么吗?或者客户知道自己在说什么吗?”答案往往是NO。很多客户不是IT人士,他们只会用人类的语言来描述需求。比如“我想让所有人都可以看到我的信息” - 他其实想说“这条DB记录需要对所有用户可见”。再比如“为什么我的机器这么慢” - 她其实想说“可以优化一下DB query的查询语句以及查询逻辑吗?” 等等诸如此类的“翻译工作”,程序员都要有一个更深层次的理解。记得以前看到过一个故事,有一个客户说,“我希望在我的系统里,只有我和会计才可以使用这个功能”。如果你只是单纯的理解为“为这个客户和会计制作这个功能”,那么我只能祝你好运了。因为一旦哪天这个客户突发奇想想再加一个诸如“HR”的用户进来,那么试问,你的结构可以灵活应对吗?其实以上的这个例子的正确理解,应该是“有某个标识的用户,会拥有这个功能”。那么你只要在存放用户名单的DB里面加一个column就可以了。这是个1分钟就可以做完的任务,尽管看起来很麻烦。
最后说说主动性。主动性就是一种从别人角度来识别出他将会需要我做什么的能力,以及我能想到他没想到的方面的能力(我的理解 XD),这个不只局限于IT领域。其实说白了,以上提到的两点都是主动性的表现,主动去学习,主动去把代码优化。其实没人要求你那么努力去两周学好.NET, 也没人要求你去把代码写的那么漂亮。你完全可以慢慢学,写写仅满足功能的代码。但是当你选择趴着的时候,站着的人自然就被别人看到了。而且更重要的是,你的努力是会给你回报的。特别是当大change来的时候,你一分钟就做完了。然后看着那些把代码写死的人加班。。。套用《火影》里的一句话,“努力是不会背叛自己的”。
一点见解,见笑了 :)
不请自答。有谬误之处欢迎指正 :)
先做个简单的自我介绍。国外大学研究生毕业后,入职一家公司做IT Consultant。学过C, .NET, java, DB(仅仅是学过 XD)。入职后才接触的PHP。一路上因为工作需要,又会了CSS, JS, photoshop。现在是Branch Manager,不写代码 XD
如果单纯的说技术,那我觉得,这个问题的答案是“无限多的技术”。现在光是语言就有多少种,C, C++, C#, java, Object C, PHP, python。。。而且随着时间的推移,会有更多的语言出来(Object C好像就要被Swift取代了,貌似。。。)。所以说,单纯的说技术,这是个无底洞。活到老学到老。
但是作为管理层,我却看到了曾经作为程序员时看不到的景象。如果从“程序员应该拥有的素质”这个层面,我觉得就你的问题,我可以给出一些答案:
1. 学习能力
2. 思维能力
3. 主动性
首先说说学习能力。举个栗子,我招聘了一个人做.NET,但是他原先只有3年的java经验(请不要纠结于为什么我会做这个决定。这只是个栗子 XD)。但是他在未来的两周,以非常惊人的速度get了.NET,而且已经可以进入到正常的开发中。虽然代码还有点拖泥带水,但是这些足以显示出他惊人的学习能力。一个努力而且可以快速学习的人,在企业中是金子(至少我是这么觉得的 XD)。因为至少有两点我可以肯定:他肯接收新事物;他能够接收新事物。其实不管你去什么公司,做的东西都未必是你学过的,你想做的,你会做的。一开始的这一段时间往往都是黑暗期。但是等你以积极的心态熬过了这段时间,那么你的光芒就绽放出来了。肯认真做事的人才能委以重任(不同公司不同文化,不要直接照搬啊 XD)
接着是思维能力。这里大概可以分成两点:代码的灵活度,客户的需求理解。
首先说说代码的灵活度。我们在学校里写的都是最死的代码,一页代码基本就是为了完成作业上写的要求。也没有什么人来让你改,只要完成就好。所以多少会养成“代码没有结构“,“只有自己看得懂”等这些问题。但是灵活的代码就意味着你可以灵活的应对change。这是一种把代码全部模块化的能力。还是拿那一页代码的作业来说,如果你能把所有的可以分离出来的代码全都做成一个个function,并且可以通过传递parameters来达到重复使用的效果,那么你就会发现,自己在面对change的时候,生活会愉快很多。可能说的有点难理解,那我打个比方。市面上有出售普通的笔记本和活页笔记本。普通的笔记本,如果你想调换两页纸的位置,那么很遗憾,可能你做不到。但是活页笔记本就不存在这种问题。他们可以非常灵活的来应对change。所以回到代码的灵活度,你在编程的时候就要有意识的去把代码模块化。这样应对change可以游刃有余,而且别人看你的代码也会非常清晰。
再说对客户需求的理解。这个就有点超越“程序员”的范畴了。“程序员不是只要坐在那里写代码就可以了吗”?好吧。是,也不是。这里牵扯到一个题外话,“客户知道自己想要的是什么吗?或者客户知道自己在说什么吗?”答案往往是NO。很多客户不是IT人士,他们只会用人类的语言来描述需求。比如“我想让所有人都可以看到我的信息” - 他其实想说“这条DB记录需要对所有用户可见”。再比如“为什么我的机器这么慢” - 她其实想说“可以优化一下DB query的查询语句以及查询逻辑吗?” 等等诸如此类的“翻译工作”,程序员都要有一个更深层次的理解。记得以前看到过一个故事,有一个客户说,“我希望在我的系统里,只有我和会计才可以使用这个功能”。如果你只是单纯的理解为“为这个客户和会计制作这个功能”,那么我只能祝你好运了。因为一旦哪天这个客户突发奇想想再加一个诸如“HR”的用户进来,那么试问,你的结构可以灵活应对吗?其实以上的这个例子的正确理解,应该是“有某个标识的用户,会拥有这个功能”。那么你只要在存放用户名单的DB里面加一个column就可以了。这是个1分钟就可以做完的任务,尽管看起来很麻烦。
最后说说主动性。主动性就是一种从别人角度来识别出他将会需要我做什么的能力,以及我能想到他没想到的方面的能力(我的理解 XD),这个不只局限于IT领域。其实说白了,以上提到的两点都是主动性的表现,主动去学习,主动去把代码优化。其实没人要求你那么努力去两周学好.NET, 也没人要求你去把代码写的那么漂亮。你完全可以慢慢学,写写仅满足功能的代码。但是当你选择趴着的时候,站着的人自然就被别人看到了。而且更重要的是,你的努力是会给你回报的。特别是当大change来的时候,你一分钟就做完了。然后看着那些把代码写死的人加班。。。套用《火影》里的一句话,“努力是不会背叛自己的”。
一点见解,见笑了 :)
先做个简单的自我介绍。国外大学研究生毕业后,入职一家公司做IT Consultant。学过C, .NET, java, DB(仅仅是学过 XD)。入职后才接触的PHP。一路上因为工作需要,又会了CSS, JS, photoshop。现在是Branch Manager,不写代码 XD
如果单纯的说技术,那我觉得,这个问题的答案是“无限多的技术”。现在光是语言就有多少种,C, C++, C#, java, Object C, PHP, python。。。而且随着时间的推移,会有更多的语言出来(Object C好像就要被Swift取代了,貌似。。。)。所以说,单纯的说技术,这是个无底洞。活到老学到老。
但是作为管理层,我却看到了曾经作为程序员时看不到的景象。如果从“程序员应该拥有的素质”这个层面,我觉得就你的问题,我可以给出一些答案:
1. 学习能力
2. 思维能力
3. 主动性
首先说说学习能力。举个栗子,我招聘了一个人做.NET,但是他原先只有3年的java经验(请不要纠结于为什么我会做这个决定。这只是个栗子 XD)。但是他在未来的两周,以非常惊人的速度get了.NET,而且已经可以进入到正常的开发中。虽然代码还有点拖泥带水,但是这些足以显示出他惊人的学习能力。一个努力而且可以快速学习的人,在企业中是金子(至少我是这么觉得的 XD)。因为至少有两点我可以肯定:他肯接收新事物;他能够接收新事物。其实不管你去什么公司,做的东西都未必是你学过的,你想做的,你会做的。一开始的这一段时间往往都是黑暗期。但是等你以积极的心态熬过了这段时间,那么你的光芒就绽放出来了。肯认真做事的人才能委以重任(不同公司不同文化,不要直接照搬啊 XD)
接着是思维能力。这里大概可以分成两点:代码的灵活度,客户的需求理解。
首先说说代码的灵活度。我们在学校里写的都是最死的代码,一页代码基本就是为了完成作业上写的要求。也没有什么人来让你改,只要完成就好。所以多少会养成“代码没有结构“,“只有自己看得懂”等这些问题。但是灵活的代码就意味着你可以灵活的应对change。这是一种把代码全部模块化的能力。还是拿那一页代码的作业来说,如果你能把所有的可以分离出来的代码全都做成一个个function,并且可以通过传递parameters来达到重复使用的效果,那么你就会发现,自己在面对change的时候,生活会愉快很多。可能说的有点难理解,那我打个比方。市面上有出售普通的笔记本和活页笔记本。普通的笔记本,如果你想调换两页纸的位置,那么很遗憾,可能你做不到。但是活页笔记本就不存在这种问题。他们可以非常灵活的来应对change。所以回到代码的灵活度,你在编程的时候就要有意识的去把代码模块化。这样应对change可以游刃有余,而且别人看你的代码也会非常清晰。
再说对客户需求的理解。这个就有点超越“程序员”的范畴了。“程序员不是只要坐在那里写代码就可以了吗”?好吧。是,也不是。这里牵扯到一个题外话,“客户知道自己想要的是什么吗?或者客户知道自己在说什么吗?”答案往往是NO。很多客户不是IT人士,他们只会用人类的语言来描述需求。比如“我想让所有人都可以看到我的信息” - 他其实想说“这条DB记录需要对所有用户可见”。再比如“为什么我的机器这么慢” - 她其实想说“可以优化一下DB query的查询语句以及查询逻辑吗?” 等等诸如此类的“翻译工作”,程序员都要有一个更深层次的理解。记得以前看到过一个故事,有一个客户说,“我希望在我的系统里,只有我和会计才可以使用这个功能”。如果你只是单纯的理解为“为这个客户和会计制作这个功能”,那么我只能祝你好运了。因为一旦哪天这个客户突发奇想想再加一个诸如“HR”的用户进来,那么试问,你的结构可以灵活应对吗?其实以上的这个例子的正确理解,应该是“有某个标识的用户,会拥有这个功能”。那么你只要在存放用户名单的DB里面加一个column就可以了。这是个1分钟就可以做完的任务,尽管看起来很麻烦。
最后说说主动性。主动性就是一种从别人角度来识别出他将会需要我做什么的能力,以及我能想到他没想到的方面的能力(我的理解 XD),这个不只局限于IT领域。其实说白了,以上提到的两点都是主动性的表现,主动去学习,主动去把代码优化。其实没人要求你那么努力去两周学好.NET, 也没人要求你去把代码写的那么漂亮。你完全可以慢慢学,写写仅满足功能的代码。但是当你选择趴着的时候,站着的人自然就被别人看到了。而且更重要的是,你的努力是会给你回报的。特别是当大change来的时候,你一分钟就做完了。然后看着那些把代码写死的人加班。。。套用《火影》里的一句话,“努力是不会背叛自己的”。
一点见解,见笑了 :)
---------------------------------->人生犹如负重致远,不可急于求成。
自律使人自由!