一位软件开发工程师的成长史

描述

大约在18个月前,有人给我发了封邮件询问我关于如何开启软件开发大门的建议。他是一个在校学生,想从事软件开发的工作,但又怕做出了错误的选择。

我想我给他的回复应该也适用于任何正打算从事软件开发工作的人,所以稍作修改放到这儿来与大家分享。

(邮件内容:)

以下是基于我的经历所得的几点主要建议:

1. 立于软件开发的大门前

在我确定可以胜任一个开发者的工作之前(我可是经历了一番挣扎),我不得不花费两年时间从事非软件开发的工作,这也更加确定了我要做一个软件开发者的决心。

一旦你拿到一份软件开发的工作,这都是不错的开始。头两次的际遇可能会差强人意,但若不是有了这些经历,你也不会知道哪些问题是一个公司所摒弃的。

当然这并不是说只要有份工作你就应该接受,后面我会再说下这个问题。

2. 关于拟定长期目标

你是否一直有不知道选择何种开发方向的困惑?没事,习惯就好。就在此刻,正有一大批Ruby开发者因为JavaScript的强势袭来而倍感紧张。既然任何事情都不是既定的,那么设定一个长期目标的想法简直傻透了。

想想真是疯狂。十一年前我还只是一个为人们做午饭的厨子,后来我做了一个决定:我要成为一名平面设计师。接着我就买了一台Mac,把Photoshop和illustrator使用的炉火纯青。后来,我有了一个摄像机,我又开始学习使用Final Cut Pro软件,打算做一名视频剪辑师。再后来,我考取了MCSE(微软认证系统工程师),我又决定做一名系统管理员。然后我就开始写网站脚本,并且从事市场工作5-6年。终于我决定学学编程。没有人可以为自己的人生设定一个模式,告诉自己下一步可以做什么。

显然,没人知道五年后自己会在做些什么。你所要的只是一个平台,一个不变的原则,有了这些,你就能变成你想成为的那种人,做那些你觉得快乐的事。

可能在你这个年纪,你更想要多些丰富的经验,这样你就可以通过分析这些经验而学到那些激励你的东西。我不知道那些问出“你觉得5年后你会做些什么”的人想表达什么,这种问题显然是无法回答的。

我现在唯一确定的事情就是,五年后我不会再为别人工作。我善于帮助别人发现自己的闪光点,我喜欢创造事物,我喜欢科技。利用好这些特点有助于建立属于我自己的平台。在未来的某天,这些都有可能以意想不到的方式帮助到你。

3. 明白学历在职场生涯中的角色

这个话题由我来谈有点没说服力,但我仍然想和大家分享一下我的想法。我曾从社区大学中途辍学,这简直为我一生中想做的所有事都关上了门。当然,这也因人而异。

我现在为一个当初只想招一个研究生学历的CEO工作。如果你想成为一个核心开发者,一个硕士文凭是第一道门槛。但是也有特例,例如我,一个大学辍学的人,正在为我的硕士同僚们贡献着力量。当然我也曾经历过这些场景,比如有些人会说:“你的履历很适合我们公司,但很遗憾我们还需要一个学士文凭…”,而那些刚刚毕业的学生却也经常听到与之相反的说辞。

如果要我告诉你为什么冒泡排序的效率很低或者怎么实现一个二叉树查找算法的话,我完全可以去问问那些花了钱上了学得到这些知识的人。

当今社会的教育问题越来越明显,我很难过地表示,学历现在只是一纸凭据而已。学校再也不能作为开拓新事物的源头(至少不会长久下去),而这更可能出现在你的工作环境当中。

我认为最好的状态是:如果你在学校时拥有书本智慧(book-smart),而出了校园能把它们变成街头智慧(street-smart )。那么这个世界上还有什么能够阻挡你前进的脚步呢?

4.如何选择合适自己的文化氛围

那么现在问题来了:怎么成为你想成为的自己呢?每个人多多少少都要去迁就那些不一样的文化,我之前就职的公司在这方面更为严重,简直就像穿了件文化紧身衣。

其实开发者是一群幸运的人,他们深谙自己喜欢哪种工作氛围。很快你就会发现自己会对很多场合说“不”了,我建议你根据以下这些斟酌一个公司文化氛围是否适合自己:

你在这工作时感觉舒适么?

这里有值得你主动去做以及珍惜的东西吗?

或者说你在这里需要伪装你自己吗?

5.寻找良师益友

诚然,我能通过在一些聚会中的提问获得很多好的建议,但这与你第一次工作经历带给你的收获相比,一定会黯然失色。你要做的不是去告诉大家你需要一个导师,而是与那些聪明优秀的人一起工作,学习他们的方法和经验。

比起参加任何一种开发人员培训课,他人的奉献精神和耐心所带给你的好处无与伦比。

而真正把这些融合到一起的人是你自己,当然前提是你知道如何去做。

6.学会展示

当我刚开始学习编程时,我觉得我应该达到无所不知的程度,这样我就能给大家展现一些很牛叉的东西,现在看来这就是一个自尊心作祟的愚蠢想法。

记得有一次聚会,有个开发新手在向人们展示他的第一个作品,我几乎都要笑出声了,我只能说他太傻太天真,他做的东西架构简单,创意也不够吸引人。而当每个人都给他高度赞扬的时候,我才意识到我真该为自己的想法感到羞愧,对于一个新手,能把作品展示出来实在勇气可嘉。

如果你还没有学会所有的技能,或许你应该改变下自己的想法,俗话说得好,贪多嚼不烂。从基础做起会更好。不要过早担心设计模式,不要一开始就在想这个东西是不是完美的,不要一开始就担心代码是否足够优雅等等。

你是否正在对你的示例应用进行二次重构?第一个能够运行吗?秀一下吧。是不是运行的不是完全正确?那也秀一秀。界面太难看?没关系,秀出来。还没有经过测试?尽管秀出来。如果说它没有另你觉得难堪的地方,只能说明你秀得有点晚。

随着你技术的提升,完善一个产品的能力以及做出点可以让很多人用的东西的能力也会随着提升。在我看来,掌握这种能力远比学习如何使用CSS或者TDD要重要。

7. 学习不仅仅是为了找工作

我极少给别人提很笼统的建议。但这里不得不提一个:上大学时应该尝试去学学那些你很感兴趣的东西。

随着时间的逝去,文凭的用处也逐渐消失。很多我喜欢的开发者之前是设计师或者作家,他们更喜欢从一种哲学的角度去写代码,而不选择针对特定问题的特定算法。

如果你很擅长书面交流,作为一个开发者这是极好的,因为它们工作的方式如此之像。但是更重要的是,良好的沟通技巧实际对你帮助更多,而大部分的程序员更喜欢单独倒腾自己的代码。

大学的社交地位已然成为了明日黄花,取而代之的是聚会,小组,推特等等。如果计算机学科仍然如此打动你,尽管沉迷于它吧,但是如果你喜欢的是社会学,哲学,会计学或者其他学科,你应该追随自己的内心,而不是被你飘渺的职业目标牵着鼻子走。

最后,给出一条如何灵活利用学位获得工作的小贴士:

HR专员负责发布职位。他们通常总是把诸如学位,经验,技术要求这些挂在嘴边,而实际上这些有时候根本就不足以说明一个人的能力。

如果你仍然在用这种传统的应聘渠道:浏览人才网=》进入面试流程,你获得工作的机会将会非常小。虽然可能大部分人的第一份工作都是这样找到的。而从那开始,它会就像滚雪球一样,直到招聘你的人觉得只有你刚好非常适合某个岗位的工作,通常这种几率比较小。所以呢,对于那种你只会待一两年的公司,你压根不用煞费苦心的为了取悦HR而精心打扮自己简历上的学历。

8.关于跳槽

在我看来,一个稍有天分的开发者能在6-12个月内精通自己所选的开发语言或框架。不要被那些有5-10年经验的老手吓到:很多人只是赢在5-10倍的经验上。

为了防患于未然,你现在就应该有计划的跳槽(大约每18个月左右跳一次),至少是在从事第一份工作期间。慢慢你就会发现自己的经验更加多元化,自己的薪资也节节高。(但是不要过分沉迷于工资的多少,研究表明,薪资在超过75K以后反而会降低幸福感。)

综上所述:不要过分在意薪资,选择优秀,乐于助人的同事一起工作,规划好适合自己的技术栈。

谦虚诚实小贴士一则:

事实上,对别人来说,求职信中看到“诚实”、“谦虚”等字眼是属于消极字眼的(你还不如毫不含糊的告诉别人你是一个需要指导的处于中级水平的人)。而消极是抑郁的前兆。很多抑郁症的发作都可以追溯到很久之前的某个悲观时刻,只是可能伪装成了“诚实”而已。去买一本《Learned Optimism》吧!这本书也许不会帮你解决所有的问题,但是会开启你的心智,改变你的思维模式。

这种自我否定式的悲观主义也正是我的一个软肋。如果你想成为10年后的我,努力营造出自信的感觉吧,你要知道,你永远比你自己了解的要牛逼很多!

下面这条建议不仅给你,也给我自己:与其为自己所不知道的事情道歉,还不如努力一点去知晓这件事。

我建议你把这点深记于心,并在求职信中换上另一种说法。你是个聪明的家伙,真庆幸你还没发现自己的无限潜力,因为当你成为一个伟大的程序员的时候我可要沾沾光了,呵呵。

其实还有很多我能告诉你的,但是一时也想不起来这么多。认识你很高兴,同时也祝愿你前程似锦。

—–邮件完结—–

对于他来说,这些选择可能会影响他一生。工作的选择,求职的失败,是否继续深造等等,这些当时看起来事关重大的时刻,随着时间的流逝,态度的转变,一个人终究会泰然看待。

这个当时我知之甚少的人现在成了我最好的朋友之一,我想我当时所给的建议多少是有点用处的。

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分