我有 12 年的开发和技术管理经验,经历 5 次转型,直面过这 4 个难题。今天就来聊聊我的这 5 次转型,希望可以引发你的思考。
说明:上图中,绿色的粗箭头,代表我工作的主线剧情,而蓝色的细线条,代表工作中发展的支线剧情。从一个绿色箭头,跨越到另一个绿色箭头,中间都是一次转型。
大家可以从图上看到,我从 2002 年到 2017 年,工作 15 年,先后经历了 6 个主线剧情,完成 5 次转型。这 5 次转型是:
也许看到这里,你已经发现了自己的部分经历和我相似…… 不急,接下来我会展开每次转型,说说我的想法,看看是不是和你相似。也欢迎在文后留言讨论。
这里推荐一下我的学习交流群:,里面都是学习前端的,如果你想制作酷炫的网页,想学习编程。从最基础的HTML+CSS+JS【炫酷特效,游戏,插件封装,设计模式】到移动端HTML5的项目实战的学习资料都有整理,送给每一位前端小伙伴,有想学习web前端的,或是转行,或是大学生,还有工作中想提升自己能力的,正在学习的小伙伴欢迎加入学习。希望能帮助你更了解前端,学习前端
1 自学 C 语言,转做软件开发
我 2002 年毕业,进入西安大唐电信,从事程控交换机的售后技术支持工作。
大唐的设备散步在各省市的农村,我的工作就是到处跑着插拔电路板、升级软件、重启电脑、更换元器件、开局……
一年有 300 多天在出差,忙的时候,夜夜穿行在黢黑的乡间小路,到处跑着解决问题或者升级程序,经常通宵达旦。闲的时候,几天没事干,窝在办事处写文章或者通宵达旦搓麻将。
干了两年后,眼看没什么发展空间,我也懵懵懂懂地感觉到,这不是我想要的生活,加上女友在西安上学,我老出差也不是办法,就决定转型了。
当时(2005年)转型时考虑两点:
公司本身有软件开发类的岗位,我就想内部转型,但因为没经验,什么程序也没写过,没转成。于是我就裸辞了,自学编程,自己找工作。
在这个时候,选择什么技术,就成了一个问题——我没开发过软件,根本不知道有什么编程语言,更不知道哪种语言好哪种语言坏。
后来,因为有开发同事使用 C 语言(电信设备使用的很多软件都是 C 语言),上研究生的同学使用 Java ,我就在 C 和 Java 中选择了 C 语言——因为它简单,例如《The C Programming Language》那本书比 《Java 2 核心技术》(卷1)薄得多。
因为 C 语言的书很薄,我花了一个星期左右的时间就看完了。然后就开始投递简历找工作。
当时懵懂,傻呵呵的,对软件开发工作不了解,对软件公司招人要求也不了解,根本没预料到会遇到什么困难。
一开始,我不停地投递简历,却连一次笔试机会都没有。
我一边投简历,一边接着学习研究,后来不知怎么就有了笔试机会。(现在想来,可能是到了2、3月份,招聘高峰期来了。)
可是笔试根本过不了,一直被鄙视。
还好,做笔试题也是一种很好的学习。经历过若干次杳无音信后,终于有公司给我面试机会了。
陆陆续续面试了几十家,又往往因为没有经验而被拒绝。
就这样,我在不断被鄙视、不断被拒绝中走过了 3 个月。
还好我神经比较大条,居然也没死心,没自暴自弃。我傻呵呵地相信,会找到工作的。
很庆幸我没那么敏感,不然就没今天了。
2005 年 3 月底,我终于找到了软件开发工作,4 月份开始了程序员的美好生活。
2008 年下半年到 2009 年初,我慢慢转向技术管理角色,开始管理一个研发部门。我走的路线是“技而优则管”。
简单讲,就是你技术牛 X ,轻松搞定各种问题,开始带人,接下来带团队管项目,再接下来,顺理成章就会被公司推着向技术管理者转型。
这种路线,也是一大半技术管理者走过的路线。如果你想转型技术管理,可以考虑这种。
“技而优则管”的要点,就是:行有余力。
什么意思呢,就是聚焦当下,高效搞定你的任务。当你体现出绰绰有余的样子,领导就会给你更多更难的任务。当你还能高效搞定,还看起来有余力,领导就会再给你更重要的任务……
如此循环,你就越来越重要,就会带人、带项目的机会。
2014 年 9 月份,我因某种契机,离开工作 7 年的公司,重新考虑自己的方向。到阳历年底时,接受朋友邀请,和他一起创业。
我之所以愿意去尝试,是因为:
创业和上班的未来可能性大不一样,万一创业成功,你的影响力、经济回报,都会上一个台阶。
做的产品,盈利模式明确。
当然,不幸的事总会发生——我们失败了。
我个人并没因为这样的失败经历而后悔,因为当你站在主人翁的角度和高度去为公司负责时,你对工作的认知会发生意想不到的巨大变化。这种变化,会对后续的工作和人生产生重要的正向影响。
如果你技术过硬为人靠谱,一定会有不少创业者邀请你加入他们的队伍。不要头脑发热,要仔细考察一下:
我从 2009 年开始做技术管理,到 2015 年底创业失败,历时 7 年。可是我在多个更好的管理机会面前,毅然选择回到技术岗位继续做开发。
这是因为我们工作的目的,除了赚钱,还有自我实现。
成长是指你做一件事之前和之后,有你想要的、积极的变化。
假如你做了十年开发,技术水平、解决问题的能力,还是和刚入行时差不多,那就叫没成长!
成就是指你做出了成绩并获得了相关干系人的认可。
你负责一个模块,用了最新的技术最牛逼的设计,也能 run ,实现了用户需求。你个人觉得很有成就,可是你用的技术框架过于复杂,维护成本很高,运维团队、二次开发团队都不认可,那就不是真正的成就。
意愿很好理解,就是你愿意在什么事情上投入你的时间和精力、你做什么事情时会感到开心。
比如我,在创业失败重新找工作时,就是因为觉得亲力亲为用技术去开发一个个软件、解决一个个问题比较令我兴奋和投入,所以才选择回到开发岗位上。
很多开发者都会遇到要不要转管理、要不要一直做技术这种问题,怎么选择答案,关键就在于你的个人意愿和你做某件事的感受。
可是有人会问,如果你一直做开发,年龄大了,怎么和年轻人拼?
我之前画过一张图,再贴出来给大家看看:
由这张图可以看到,开发者做软件分两次创造,第一次创造在头脑中完成,属于思考层面;第二次创造,是编码实现,是脑力劳动体力化。
如果你想要超越年龄,就要多在第一次创造所需要的能力上下功夫:
这样你就能思考得多、做得少、做得关键、做得好,就可以超越年龄的限制。否则如果你整天和年轻人一样只关注噼里啪啦敲代码,肯定没价值,很快被清退。
如果你依然在编程的世界里迷茫,不知道自己的未来规划,对前端开发感兴趣,可以加入前端学习交流群:里面可以与大神一起交流并走出迷茫。小白可进群免费领取学习资料,看看前辈们是如何在编程的世界里傲然前行。
如果你在朝九晚五的做软件开发,肯定能体会到很多不如意:
可是你又不得不做、不得不接受这些事情,对吧?
当你不认同某些事又不得不接受时,通常有两种做法:
所以,你要想过得 Happy ,要么心很通透,能悦纳很多现实;要么你把自己淬炼得很强,有能力向自己想要的方向冲锋。
跟客户打交道比较多,看你口才了
现在没口才,不知道发展前景如何?
有关程序员水平的是一个很敏感的话题,我们常常碰到会听人说,某某编程水平很高,某某编程水平很低。似乎水平是靠听出来的。有的时候,朋友单位招人也会请我看看应聘者的水平如何。说真的,看一个人的编程水平不是一件容易的。程序员有两类,一类是能吹的,一类是不言的。吹的人往往海天湖地,容易给人看出破绽;而不声不响的人,你却很难判断其水平的高低。但是,程序员水平还是有一定规律的,水平高的人,必定是开发过许多大的项目,并且编程时间一定要在两年以上的。这个规律反过来是不正确的,很多时候你会发现那些参与过大项目的人、编程时间超过两年的人水平平平。
程序员的水平通过听其说,观其作,这两个方面就能大致来确定了。听比较简单,只要听他讲从事编程时间有多长,参加过多少大的项目,就能基本判定程序员的水平了。编程时间在两年以下的程序员只能是入门级的,没有做过大项目,也一定是水平一般,那些以兴趣编程者,水平更是一般。另外,听的过程中也可以判断出这个程序员头脑是否清晰,说话是否有条理,逻辑是否严密。这些也是程序员水平的重要方面。
看要相对比较复杂些。我要看一个人的水平如何,往往会请他把自己最得意的程序,拿出来。因为自己满意的程序或自己认为很重要的程序,往往反映他的编程水平。
我看别人程序比较快,下拉程序速度大约在1秒2行。如果程序在300行的话也就是3分钟左右。我看程序主要看一下几个方面:
如果是主程序,则要看命名是否能反应项目主要特质?程序名是否中文?程序名是否是英文?程序名是否英文缩写?程序名是否为拼音?程序名是否无意义?程序名是否包含程序员姓名?程序名是否包含版本信息?如果是非主程序,则要看程序名是否和项目、模块有关联?
函数名是否是英文命名?函数名是否中文命名?函数名是否拼音命名?函数名是否英文拼音混合命名?如果是英文命名,英文是否准确?缩写是否正确?读者是否能够看懂。函数名是否能表示函数所要提供的功能?所有函数命名的风格是否一致?
变量名是否是英文命名?变量名是否中文命名?变量名是否拼音命名?变量名是否英文拼音混合命名?如果是英文命名,英文是否准确?缩写是否正确?读者是否能够看懂。变量名是否能表示变量要代表的内容?通过查看变量名能否确定变量的数据类型。所有变量命名风格是否一致?
函数中是否有参数?参数的次序是否具有逻辑性?参数命名如同变量命名。所有函数中的参数命名是否具有相同的风格?
程序中有无全局变量?全局变量个数有多少?全局变量的是否以参数方式代入调用?
6、 函数中常量、变量值
在包含调用功能的函数中是否有常量和变量值?被调用函数中是否有常量和变量值。一个函数中是否有超过10行的变量赋值语句?
函数有统一编写风格吗?函数头的格式一致吗?函数体风格一致吗?函数尾风格一致吗?语句开头对齐吗?语句的缩进空格一致吗?语句左右括号上下对齐吗?
程序中是否有注释?程序开头是否有注释?注释是否用英文?注释是否有用中文?是否每个函数开头都有注释?是否程序重要之处都有注释?
读者必须需要程序员亲自解释才能看懂程序主要功能吗?读者有在看不懂情况下请程序员进行解释吗?读者是否不需要程序员亲自解释就能看懂程序的主要功能?
通过这个方面考察,在心里边给这个程序员打打分,基本上可以断定这个程序员的水平是高、是中、是低。至于这个程序做什么,有什么特别的技巧在这里就不太重要了。当然综合的评判还要结合听的结果。