一个印度程序员的生活领悟
我叫Siva,是印度海得拉巴的一名软件开发人员。软件开发是一份令人兴奋的工作,因为你每天都可以看到新事物。如果没有新的事物,我们还可以赋予 一些旧概念新的有趣的名字,然后自娱自乐。但是,从我的角度来说,在印度做一个软件开发人员略有不同,也有点难。总之,一言难尽。
来自于其他国家的软件开发人员对印度软件开发人员的看法,让我大吃一惊。
所以今天,我想和大家分享我作为印度IT行业中的一名软件开发人员的感受。
ps:这些纯粹是个人观点,不喜勿喷。
我的第一份工作
我的第一份工作是在一家小公司里,职位是Java开发人员。并且我的几个非常亲密的朋友也加入了这家公司。我很庆幸能在我职业生涯的初期就和一些非常有才华的人一起工作。
我的第一个经理习惯于强迫我们在工作的第2到3个月时间内只使用 Notepad+ + / EditPlus编码,目的是为了让我们熟悉如何编译和运行程序,并知道编译时和运行时的类路径等。但是,架构师对此颇不认同。有一天,他看见我在用 EditPlus编码,就走到我身边,说:“难道你去打仗都不用武器的吗?”。他从我一片茫然的表情中知道了我并不知道他在说什么。他将键盘拖到他面前, 下载了Lomboz Eclipse(一种Eclipse的变体,不过现在已经没落了),然后给我解说如何使用它。此外,时不时地,他还教了我一些很有趣的键盘快捷键,用 IDE代替Notepad/ EditPlus写代码的速度明显快多了。
我从他们身上学到了了解事物的工作原理以及如何有效使用工具来加快工作的重要性。
对了,我的团队领导是实战经验非常丰富的开发人员。他记得大多数核心的Java API方法,并对设计模式有 一个很好的理解。他是一个完美主义者。即使只是代码缩进不正确,他也不同意我们提交代码。有一天,我们正在加班,时间甚至已经是第二天凌晨了,因为我们得 提供一些紧急交付。然而即使这样,他也坚持要纠正缩进,清理导入的包和未使用的变量,严格按照TABs和空格一致等原则。我们抱怨不休。
但是后来在融合来自于不同开发人员的所有代码更改的时候,我们才意识到这么做的重要性。他总是说:“既然要做,就要把事情做好。否则就不要做。”
至于团队中的其他成员,由于我们也是好朋友,所以彼此之间没有任何冲突,也没有政治矛盾。我们常常周五晚上开party直至凌晨2点,在办公室讲笑话乐得哈哈大笑。一切都是那么美好。
开启我真正的旅程
3年后,我离开了这家公司,跳槽到一家大公司里,大公司意味着更好的工作,更高的工资和更佳的工作文化。然而我很快发现,并不是所有的东西,大公司都比小公司好!在那里,我遇到了一个有着可怕代码库的遗留应用程序,看得我真是头大无比。
此外,和我一起工作的开发人员,都是这家公司的老员工,他们不愿意接受任何新的东西,没有兴趣使应用程序变得更好,只想墨守陈规,即使原来用惯的方法是令人痛苦不堪。
由于印度IT产业主要是基于离岸开发模式,大部分的时间我们都在维护遗留的代码库。我们很少有机会去搞新建的项目。即使是那些关键架构/设计部分是由现场团队完成的新建项目。
幸运的是我有机会去参与一些新建项目,也涉及了从头开始设计应用程序的过程。
许多公司里对那些想要继续走技术路线不想转去管理部门的程序员,都没有明确的职业发展规划。更糟糕的是有些公司迫使开发人员在具备了一定年限的工作经验之后,步入人事管理的行列。
青菜萝卜各有所爱,不是所有的开发人员都热衷于技术,这无可厚非。有的人是做一天和尚撞一天钟,有的人只想着不择手段完成就好,不管代码质量和可维护性如何。在印度,你很难找到那种充满激情的开发人员,因为大部分人只是将编程当作工作而已,而是不是因为乐趣和爱好。
有时,我学会了新的东西,或做了一些很酷的玩意儿,环顾四周想分享我的激动心情之时,却发觉没有人能够理解我的这种兴奋之情。
写博客
当我在一个项目中使用Struts 1.x框架的时候,我碰到了一些棘手的问题。并且在努力捣鼓了3天之后依然找不到任何解决方案。我不停地调试,搜索了所有的书籍和论坛。终于发现有人针对 这个问题刚好写了一篇文章,并提供了解决方案。果然他的解决方案是有效的。我向那位博客作者表达了万分感谢。但想到还有很多不知道作者的博客也帮助了我很 多,于是也想开一个博客回馈社区。于是,我有了我自己的博客www.sivalabs.in,上面我陆陆续续写了一些我学到的东西。
不久,我的文章发表在了DZone和JavaCodeGeeks社区网站上。虽然我的英语写作能力不够好,但我一直在写文章,希望通过练习能够熟能生巧。
当看到有人对我的文章评论“在你的文章中我学到了一些东西”的时候,我真的非常开心。我从StackOverflow,博客,论坛等社区中获得了很多帮助,如果可能的话我也想尽我的微薄之力回馈给社区: -)
写书
之后,我写的文章陆陆续续发表在了DZone和JavaCodeGeeks上,我的博客拥有了越来越多的访问者。终于有一天,我收到了来自Packt出版社的一封电子邮件,上面问我是否有兴趣写一本关于MyBatis的书,我当时真的是激动万分。
在我答应写这本书之后,他们开始向我解释写作流程和支付的详细信息。他们可能不知道,即使没有任何报酬,我也愿意写这本书。我同意写这本书是因为我对技术的热情,而不是为了赚钱。
当我差不多完成我的第一本书的时候,他们要求我写另一本关于PrimeFaces的书,我同意了。我大概花了18个月的时间来写这两本书。在这一年 半的时间里,我没有任何休息,没有周末,也没有外出游玩,什么都没有。一有时间我就去写书,或阅读我已经写好的内容看看能不能改动什么使表达描述更精准。
也正是这段时间,让我意识到有一些自己的空余时间是多么的重要。写书是非常耗费时间的。如果你写书的目的是为了赚钱,那么我建议你换一种方法!
然后有一天,我收到了一个快递,里面是《MyBatis》这本书的印刷本。看着自己的劳动成果变为现实,感觉真心太棒了。我激动不已。
充满激情的开发人员面临的挑战
印度的软件开发人员需要面对很多问题。
优秀的开发人员就像战争英雄
由于我们要做的大多数是遗留项目,或是在维护模式下的项目,因此管理层更喜欢那些忠诚的,坚守在公司的老员工(尽管很多老员工拿的工资并不高或者公司并没有将他们当作一种资源对待),而不是技术力量雄厚的人才。
优秀的开发人员就像战争英雄,虽然在我们开启新项目或创建一些核心设计的时候需要这样的人才,但是一旦核心设计已经搞定了,其他的开发人员按照设计 走也可以添加方法到流的时候,就像一旦战争结束了,那些英雄就会变得无人问津一样,很多公司就不会再去关注那些优秀的开发人员。
许多非印度技术人员讨厌印度的开发人员
我经常看到一些抨击印度软件开发人员的文章。当然,这只是一些个人的意见。
请参阅https://avinashsingh.wordpress.com/2007/04/05/a-myth-called-the-indian-programmer/并阅读留言。甚至有人想赞助巴基斯坦轰炸印度。真是有够幼稚的!。
印度IT企业的主要问题是,为了获得项目,他们让客户相信他们能在几乎不可能的时间内交付项目。而为了达成这些疯狂的时间线,他们将责任下放到管理 人员身上,然后管理人员强迫团队领导接受任务,而团队领导再将截止时间扔给开发人员。这就是印度的开发人员面临的最大问题。许多印度的开发人员不知道怎么 说“NO”。他们只会默默地接受这种疯狂的时间计划,竭尽全力地完成。而这整个过程的结果是“不可维护的蹩脚的代码”。
但是,我还有几个问题。现场的非印度客户怎么会相信“印度离岸团队可以用6个月的时间建造现场团队预估要18个月的同一个项目”?他们为什么不要求终端到终端的测试套件?他们为什么不要求代码质量报告?
一分价钱一分货!你支付多少,你才会得到多少!
那些大放厥词说“所有印度程序员都很差劲”的人,应该先想清楚再说。这样一棍子打死一船人,是要不得的。每个地方每个国家都既有优秀的开发人员,也 有差劲的开发人员。我曾经和一些非常嚣张傲慢的现场开发人员合作过。那么难道说所有的现场开发人员都是嚣张的吗?这当然是大错特错的。
我坚信,在印度也有很多伟大的开发人员和架构师,而且我和他们共事过。
也有很多像我这样希望每天都能学到什么,想要成为比昨天更优秀的开发人员。这么多年时间中,我学会了“如何快速学习新事物”。所以,我竭尽全力学 习,为明天做好准备。无论你要我使用的是Spring还是JavaEE,Python还是RoR,Eclipse还是NetBeans,我都能手到擒来, 游刃有余。
继社区之后
正如我说,在印度很难找到充满激情的开发人员,因此我希望能够多多接触世界各地使用社交网络如Twitter的充满激情的开发人员。
我喜欢参加技术会议,喜欢接触伟大的开发人员。但不幸的是,相比美国,印度这样的会议很少很少。所以,我会在InfoQ,Parleys和Youtube上观看那些会议会谈,这是我的盛宴,令我心旷神怡。
我喜欢Venkat Subramaniam (@venkat_s)的演讲,内容丰富又有趣。在阅读了他的《Programming Groovy 2: Dynamic Productivity for the Java Developer》之后,我会情不自禁地大笑。他真的很了不起。
Venkat Subramaniam关于谈判的演讲 https://www.parleys.com/author/venkat-subramaniam
Venkat Subramaniam提出的关于如何重构的演讲 https://www.youtube.com/watch?v=iGsPeR-SYYo
《JVM语言能做的超酷的10件事》 https://www.youtube.com/watch?v=Ulcl2TjHktA
《尖头发老板和务实程序员》——Venkat Subramaniam https://www.youtube.com/watch?v=lfmKvRaNnUs
关于Scala https://www.youtube.com/watch?v=grvvKURwGNg
我是Rod Johnson的忠实粉丝,我喜欢他关于企业家的言论http://www.infoq.com/interviews/rod-johnson-entrepreneurialism,以及在《Things I wish I’d known》 http://www.infoq.com/presentations/Things-I-Wish-I-d-Known中,他分享了他构建Spring框架,并围绕它创建一个生态系统的过程。真的很棒。
我还看了他的“Scala 2018”的演讲 https://www.youtube.com/watch?v=DBu6zmrZ_50,以及关于Scala这个话题在youtube上的讨论https://www.youtube.com/watch V = hZlxBRnxzDc。他采取的建设性批评方式让我觉得很精彩。他真的很牛。
我也很喜欢Uncle Bob的演讲 https://blog.8thlight.com/uncle-bob/archive.html,Martin Fowler http://martinfowler.com/,David Heinemeier Hansson (DHH)。我们可以从他们几十年的经验中学到很多东西。
此外还有很多超棒的Java社区领导者的演讲和博客是我所推崇的,如
Antonio Goncalves @agoncal http://antoniogoncalves.org/
Adam Bien @AdamBien http://www.adam-bien.com/roller/abien/
Reza Rahman @reza_rahman https://blogs.oracle.com/reza/
Arun Gupta @arungupta http://blog.arungupta.me/
Josh Long @starbuxman
Phil Webb @phillip_webb
Cagatay Civici @cagataycivici http://www.primefaces.org/
Oliver Gierke @olivergierke http://olivergierke.de/
David Blevins @dblevins http://www.tomitribe.com/blog/
等等等等。
此外还有一些明星博客作者写的好博客也不容错过
Baeldung @baeldung http://www.baeldung.com/
Petri Kainulainen @petrikainulaine http://www.petrikainulainen.net/
Vlad Mihalcea @vlad_mihalcea http://vladmihalcea.com/
Abhishek Gupta @abhi_tweeter https://abhirockzz.wordpress.com/
Manuel Jordan @dr_pompeii http://manueljordanelera.blogspot.in/2014/06/manuel-jordan.html
Lukas Eder @lukaseder http://blog.jooq.org
Trisha Gee @trisha_gee http://trishagee.github.io
Thorben Janssen @thjanssen123 http://www.thoughts-on-java.org
Nicolas Frankel @nicolas_frankel http://blog.frankel.ch
等等等等。
我真的爱死所有顶呱呱的Java社区了!
展望美好未来
近年来,很多事情正在慢慢改变。如今的印度IT产业已经不再完全依赖基于美国的项目。印度企业中技术应用增长了很多。但是,除非思维过程得到改变,否则一切就都还是在原地踏步走。企业不应该再异想天开让“9个开发者1个月时间发布一个新项目”。
开发人员应该更专业,并且当要求他们去做一些不能高质量完成代码的实现任务的时候,能够鼓起勇气说“NO”,。
总之,通过这些年的学习,我明白了软件开发并不都意味着技术。关键是要理解业务领域,重视其他人的沟通交流。