码迷,mamicode.com
首页 > 其他好文 > 详细

读我编程,我快乐:程序员职业规划之道 第一章 选择市场

时间:2016-05-12 12:08:06      阅读:190      评论:0      收藏:0      [点我收藏+]

标签:

职业规划,从大学开始,很少考虑这个事情,大四那会儿还学过相关的一门课,当时也只是抱着学分修修到的心态。最近一年里开始思考这个问题,近期阅读了这本《我编程,我快乐:程序员职业规划之道》,开始学习着规划自己的职业。这本书不仅适合程序员,也适合其他职业。
准备按照章节摘抄出一些觉得有用的、引人思考的片段和一些有趣的练习题,再附加自己的感想。


在《程序员修炼之道》一书中,Dave Thomas和Andy
Hunt谈到了编程中的偶然性:当你开始做一个程序的时候,或许手头上有一个从网上复制的示例程序,看上去这个程序可以使用。为了满足你的需求,你会对这个程序稍加改动——添加一些代码,再加一点。你根本不知道自己在做什么,只是不断地做一些小的修改,直到这个程序完全满足你的需求。但问题是,这样做就像是用纸牌搭建房子,每添加一张纸牌,就增加了一份纸房子坍塌的危险。你根本不知道这个程序如何工作的,所以你每做一点儿改动,都有可能导致你的程序完全失败。

在前台开发的时候经常遇到这种情况,会加各种js效果的功能,有些不是很懂,虽然能照常使用,但是做不到完全了解的话,出了问题解决起来比较费劲。所以使用别人的东西尽量做到知其然也要知其所以然。


如果你把自己的职业当成是一门生意(实际上它就是一门生意),那么你的“产品”就是由你提供的服务构成的。这些服务是什么?你又会把它们出售给谁?接下来的一年,对此种商品的需求是会增加还是减少呢?在这些选择上你愿意投下多少堵住?

把职业当成是生意,是个有趣的比喻。大道至简,万流归宗,真正分析起来,我们不管做什么,都是有迹可循有所参考的。我想我所拥有的服务就是出售自己的技术技能,出售给公司、朋友、客户等等。软件行业人才的需求量肯定还是比较大的,但是想成为一个人才必须经过一定的磨练才可以。接下来的一年,两年,五年十年,我觉得出售技术的服务是会增加的,所以我愿意投下的赌注将是我的青春。


练习
基于当今市场,按照从左到右的顺序尽可能多地列举出处于早期、中期和晚期的技术。最左边为崭新的尚未稳定的技术,最右边为即将退出市场的技术。尽可能仔细地找到它们之间的细微关联。
当你列举出所有你能想到的技术后,标记出你认为自己擅长的技术,然后换一种颜色,标记出那些你做过但是并不精通的技术。你的标记主要集中在哪个区域?它们是聚集,还是分散的?处于这张图表边缘的技术,有没有你感兴趣的?
按照我自己的印象分类:

  • MangodbGolang、Spark、nodejs、swift、R、AngularJS、Redis
  • javaC++、C#、PHP、tomcat、Jboss、Nginx、CSS3htmlhtml5、object-c、python、ruby、MysqlOracle、Sql-server、javascript、jQuery
  • CDelphiVB
    标红的蓝的是用的稍微多一些的技术,其他很多技术都没接触过,没有自己去玩一下,理解也没那么深刻。对于新技术,还是有一定的好奇心的,需要一点点接触。

发现市场上的不平衡
从供求规律中,我们可以学到重要的一点——需求的增长会加剧价格的竞争。如果只想做稳定可靠的工作,并且跟随着工作发展,那么你就会卷入与国外开发人员的价格竞争中,因为你的技术决定了你只能进入平衡的外包市场。如果在主流技术市场中竞争,你就必须在更高层面上竞争,否则,你就要去发现市场上的不平衡,找到外包公司无能为力的工作。这两种情况,你都必须找到工作的动力,提高自身技术和灵敏度来应对一切变化。

练习
研究当今技术市场的需求。利用招聘广告和招聘网站找出哪些工作是高需求,哪些是低需求的。登陆外包公司的网站(如果你在这些公司工作,可以直接与员工交流),把这些公司的技术与你发现的高需求工作进行比较。记录下那些在国内市场中高需求且没有流到外包市场的技术。然后再将这些外包公司的技术与前沿科技相比较。密切关注外包公司还没有涉足的上述两类技术。思考它们需要多长时间才能为相应的市场提供服务。这个时间差就是市场不平衡的阶段。


事实上,软件工程师不能只会开发软件,应该要成为这个业务领域的专家。换位思考一下,如果你是客户,为你服务的程序员了解你的行业,不用什么都得由你来做决定,你也不用紧张担心哪个小细节会出问题,你会不会觉得工作起来更容易呢?你从事的行业也是这样。

练习
1、安排一次与业内人士的午餐,问问他们是如何工作的。交流中,思考如果你来做他们的工作,你会做什么改变或者你可以从他们身上学到什么。咨询他们日常工作中的细节。问问他们技术是如何帮助(或者阻碍)他们工作的。从他们的角度出发,思考你的工作。
2、选择一本与你公司行业有关的杂志。 试着阅读它们,虽然有些东西你可能不懂,但是要坚持。列出你可以向客户咨询的问题。不要担心你问的问题很傻,客户会大为赞赏你的这种学习态度。
找一个你可以随时登陆的行业网站。无论是浏览网站时,还是阅读杂志时,注意大事件和专题文章。你所处的行业正在为什么而努力?现在的热门是什么?不管是什么,把它们介绍给你的客户。请他们说说观点看法。思考这些潮流是如何影响你的公司、你的部门、你的团队,以及你自己的工作的。


你身边的人会对你产生很大的影响,明智地选择你的圈子
寻找最棒的IT人士,并与他们一起工作,你会发现自己变得出奇地睿智。你写的东西,和你的谈吐都会变得越来越有智慧。你编写的程序和设计会越来越高雅优美。你会越来越有创造力,难题也迎刃而解。
找一个团队,让自己成为“最差”的。不需要立即调换工作,你可以试着找一个志愿者项目,通过与这个项目中其他程序员的合作,提高自身能力。查查有哪些编程团队会议,然后去参加这些会议。程序员一般都会用业余时间做兼职,以此来练习新的技术,提高自身技能。
如果在身边找不到这样的程序员组织,就利用网络。找一个你钦佩的开源项目,且他的设计者是你下一阶段发展的目标。浏览这个项目的待处理列表和官方讨论区,或者编写一个功能或者修正一个大的错误。你的代码要模仿这个项目的代码风格,但是又要让你的代码和设计与其他项目完全不同,甚至让原作的程序员都认不出来。在你觉得一切都妥当之后,把它作为一个补丁提交。如果你做的好,这个项目就会接受它。这样重复来做。如果这个项目的设计团队不同意你的观点,那就将他们的反馈加入到你的设计中再次提交,或者记录下他们做出的改变。最终,你会发现自己成为了这个项目团队中值得信赖的一员。你会惊喜地发现虽然这些高级程序员并不在你身边,你甚至连他们的声音都没听过,但你已经从他们身上学到了很多东西。


关于应聘
优秀的程序员有资格提出条件。他们之所以寻找变化和多样性的工作,是因为他们喜欢学习新东西,或者是因为他们很清楚要想成为更加成熟、更加全面的程序员,就必须去学习新的技术、在新的环境下工作,获取新的经验。

练习
学习一种新的编程语言。这门新的语言应该可以让你的思维方式产生变化。如果你是java或者是C#的程序员,那就尝试学习类似Smalltalk或者Ruby这种不需要采用强类型的静态编程方式的语言。或者,如果你一直在做面向对象开发的话,可以尝试Haskell或者Scheme这样的函数式语言。你不需要成为专家,可以感到这种新的编程环境与你之前所处的环境的不同之处即可。

尝试一下Ruby


一个决定职业规划的因素是跳槽,父母也不会赞成这个观点。一个成熟的职业软件开发人员需要从各个角度了解这个行业:产品开发、IT支持、内部业务系统开发以及管理工作。作为软件开发人员,你看到的角度越多,攻克的技术难题越多,就意味着你越有足够的能力来面对艰难项目。对一个程序员来说,只在一个公司工作,加强单一业务技能,会局限职业发展。

父母的态度是跳槽不可取,待一个公司了,就勤勤恳恳工作。假如说服不了父母,那就自己做主吧。程序员的人生是“Hello World”——拥有全世界。


通才很少,所以很珍贵
成为通才就是说让你不要只专注于一种技术。在工作中,有很多方法可以让我们扮演多种角色。为了使成为通才这个概念形象化,我们可以把IT职业分解成几个独立的部分。我想到了五个,但肯定还有更多,就看你是如何划分了:
- 职业阶梯的各层
- 平台和操作系统
- 代码和数据
- 系统和应用
- 业务和IT

练习
列出你能将你的知识和能力融合在一起的工作内容。写下每个方面中你的专长。例如,如果你列出了平台和操作系统,那就可以在旁边写上Windows和.NET。在你专长的右边,再列出你要学习的一种或者几种技术,可能是Linux和Java(或者是Ruby、Perl)。
然后尽快(一周之内)找出30分钟开始研究你要学习的一门技术。不要只是单纯阅读相关的书籍资料,动手实践一下。如果它是种网络技术,那就下载一个Web服务器安装包,然后自己安装。如果是与做生意有关的话题,那就找一个你的客户,约他出来吃饭聊聊天。

需要学习的点一直都会有,安排,消化。


成为一名专家
在软件界,什么样的人才能称得上是专业人士呢?我在招聘的时候找遍了每一个角落,寻找真正深刻了解Java编程和部署环境的人。我想要寻找的人是已经处理过我们工作中可能遇到的80%的问题,并且拥有足够的知识来应付另外还未出现的20%的问题。我需要的人是不仅可以处理高水平的抽象,同时应该了解那些实现高端抽象的低端细节。我需要那些可以解决部署问题的人,或者如果他们解决不了,至少应该知道找谁来帮忙的人。
计算机界变化迅速,只有这样的专业人士才能生存下来。你是.NET专业人士,但这绝不能成为你除.NET之外对一切一无所知的借口,而是说,你是.NET的权威,但当IIS服务器需要重启时,对你来说是小菜一碟。有人问你怎么用Visual Studio .NET进行源控制集成时,你的答案是:“我做给你看。”由于不满意应用性能,客户提出要退出项目,这时候,你只需要三十分钟就能把问题解决。

练习
1、你是否使用在虚拟机上编译并执行的编程语言?如果你使用,花点时间学习虚拟机内部是如何工作的。很多书籍和网站都专门就Java,.NET和SmallTalk进行讨论。学习这些东西总比你凭空想象要简单。
不管你使用的编程语言是不是依赖虚拟机,花点时间学习编写源文件。你敲打出来的代码是如何从可阅读的文本转变成可被计算机执行的命令的?编写你自己的编译程序又意味着什么?
当你输入或使用外部函数库时,它们是从哪里来的?输入一个外部函数库到底意味着什么?你的编译程序、操作系统或者虚拟机是如何将多个代码段连接起来,形成一个连贯系统的?
掌握这些知识可以使你在技术选择上向“专业人士”跨近一步。
2、在工作中或者工作外寻找一个教课的机会。你所传授的知识是自己想要深入学习的技术。因此,尽管一心一意地投资在一项特定技术上不是明智的选择,但是如果你必须这么做,那么别选择商业性质的,考虑一下开源的。即使你不想或者不能在工作中利用开源方法,那就把开源作为一个平台,使自己可以对一项技术进行深入学习。例如,你想成为了解J2EE应用程序服务器是如何工作的专家,那你要做的不是去致力于研究如何配置和部署一个商业应用程序服务器的细节(毕竟,任何人都会在config文件中调整设置,对吗?),你应该去下载一个开源JBoss或者Geronimo服务器,留出时间来学习这些服务器内部是如何运作的,而不是只学习如何操作。

练习
试着做一个小项目,做两次。第一次尝试使用在家里就能使用的技术;第二次,使用你最惯用的竞争性技术。

深入了解tomcat,尝试Nginx。

读我编程,我快乐:程序员职业规划之道 第一章 选择市场

标签:

原文地址:http://blog.csdn.net/linjf2009/article/details/51374597

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!