有关职业发展的帖子(整理)
从第1层爬到第2层相对容易一些,以C/C++程序员为例,只要熟练掌握C/C++编程语言,掌握C标准库和常用的各种数据结构算法,掌握STL的基本实现和使用方法,掌握多线程编程基础知识,掌握一种开发环境,再对各种操作系统的API都去使用一下,搞网络编程的当然对socket编程要好好掌握一下,然后再学习一些面向对象的设计知识和设计模式等,学习一些测试、软件工程和质量控制的基本知识,大部分人经过2~3年的努力,都可以爬到第2层,晋升为"大虾"。
以熟练掌握C++编程语言为例,除了学一些基础性的C++书籍如《C++ Primer》,《Effective C++》,《Think in C++》,《Exception C++》等之外,更重要的是需要了解C++编译器的原理和实现机制,了解操作系统中的内部机制如内存管理、进程和线程的管理机制,了解处理器的基础知识和代码优化的方法,此外还需要更深入地学习更多的数据结构与算法,掌握更深入的测试和调试知识以及质量管理和控制方法,对各种设计方法有更好的理解等。
学习上面说的这些知识不是一挥而就的,不看个三五十本书并掌握它是做不到的。以数据结构算法来说,至少要看个5~10本这方面的著作;以软件设计来说,光懂结构化设计、面向对象设计和一些设计模式是不够的,还要了解软件架构设计、交互设计、面向方面的设计、面向使用的设计、面向数据结构算法的设计、情感化设计等,否则是很难进到这个楼层的。
当然除了上面说的知识外,大虾们还需要去学习各种经验和技巧。当然这点难不倒他们,现在出版的书籍众多,网络上的技术文章更是不胜数,然后再去各种专业论坛里泡一泡,把这些书籍和文章中的各种经验、技能、技巧掌握下来,再去学习一些知名的开源项目如Apache或Linux操作系统的源代码实现等。此时对付一般的疑难问题通常都不在话下,菜鸟和大虾们会觉得你很"牛",你也就爬到了第3层,晋升为"牛人"了。
看了上面所讲的要求,可能有些大虾要晕过去了,成为牛人要学这么多东西啊!要求是不是太高了?其实要求一点也不高,这么点东西都掌握不了的话,怎么能让别人觉得你"牛"呢?
需要提一下的是,进入多核时代后,从第2层爬到第3层增加了一道多核编程的门槛。当然要迈过这道门槛并不难,已经有很多前辈高人迈进了这道门槛,只要循着他们的足迹前进就可以了。想迈进这道门槛者不妨去学习一下TBB开源项目的源代码(链接:http://www.threadingbuildingblocks.org/),然后上Intel的博客(http://softwareblogs-zho.intel.com/)和多核论坛(http://forum.csdn.net/Intel/IntelMulti-core/)去看看相关文章,再买上几本相关的书籍学习一下。
摘抄:
不要频繁跳槽,特别是不要为了一点工资而转移阵地,从长远看,这点钱根本不算什么,当你对一个行业有那么几年的体会,以后钱根本不是问题。频繁地动荡不是上策,最后你对哪个行业都没有摸透,永远是新手
务必培养自己多方面的能力,包括管理,亲和力,察言观色能力,攻关能力等,要成为综合素质的高手,则前途无量,否则只能躲在角落看示波器!
要想有前途就不能一直搞开发,适当时候要转变为管理或销售,前途会更大,以前搞技术也没有白搞,以后还用得着。搞管理可以培养自己的领导能力,搞销售可以培养自己的市场概念和思维,同时为自己以后发展积累庞大的人脉!应该说这才是前途的真正支柱!
不仅要能干,还要能说,能写,善于利用一切机会推销自己.搞个个人主页是个好注意!!特别是培养自己在行业的名气,有了名气,高薪机会自不在话下,更重要的是有合作的机会...
C++标准库仅仅提供了一些很基本的功能,所以我们经常会引入一些第三方库。最著名的恐怕就是被称为准标准库的boost库,它提供了我们编程中用到的各方面的技术,文本处理、算法、网络、多线程、图像处理等等,几乎无所不包。其它也有一些专著于某一方面的库,比如ACE是网络通信方面的,TinyXML是解析xml的,OGRE是图形渲染方面的。
4.中长期规划---螺旋式上升方式修改完善职业之路
1、心态上随时做好准备
机会是给有准备的人的------“有准备”是你在做准备的过程中让“别人”认为你“有准备”!别人是包括你现在的老板和别的老板,以及你身边的人!他们对你的赏识程度决定了你的机会
2、专注于自己的优势
70%专注与长处,25%专注于学新事物,5%专注于避免短处
3、不断修正自己的技术方向,扩大自己的知识与能力的金字塔
增强自己的核心竞争力,但尽量别改变太多太快(今天做手机、明天做电视、后天做空调,这样很乱的,大大不利)
4、积极争取机会
柳传志说,杨元庆就是“哭着喊着要进步”,实际上,就是争取自己的机会;当然,这种强烈的进步欲望,也是领导看重的地方。每一步都走在前面,积累多了,你就有了比其他人更多的机会了。要积极争取如下机会:
a、做新项目的机会
b、到新部门的机会
c、带新人的机会 如果公司不安排带,那就自己主动去帮助新人,做半个师傅。
d、管理项目的机会
e、管理团队的机会(卡位非常非常重要)
5、做多揽活干的傻子
与工作相关的事情,没人做就主动去做;别人没干好就主动帮他们干好 要乐意去干工作职责范围以外的事情
6、使自己变得不可替代
最重要的就是,别人做到的你要做得更加好,别人做不到的你就要做到,要不断超越老板的期望!才能赢得老板或者别的老板的信任,才能得到更多的机会与回报!
7、 关注技术、公司及相关行业的发展,达到对技术、技术发展趋势、团队管理、行业情况与发展趋势等能吹能侃的地步
二、中长期规划时间表(想升官的想发大财的朋友):
0-2年内 多干蓝领的工作,多学习多积累技术经验
2-4年内 多看技术发展趋势方面文章,多交与本职岗位相关的朋友
4-6年内 多看技术发展趋势与行业发展趋势文章,多交与本部门业务相关的朋友
6年以后 多看管理书籍,多了解行业发展趋势,多交与本行业相关的朋友
8年后-- 多与产业链的朋友及资本相关的朋友交流
如果不想操心太多,就想走技术专家路线的朋友,请把0-6年的3个阶段继续延续下去。
三、需要纠正的几个观念:
1、不是每个工程师都适合做管理的——走技术路必然会和走管理路分开
2、不是人人都可以做市场做销售的——性格、亲和力、知识结构等影响很大
3、不是人人都可以做老板开公司的——小老板辛苦程度高,其实还不如高级白领滋润(特别是IC,最适合工程师打工的)
四、螺旋式上升方式修改完善职业之路
大公司与小公司循环,职位与薪水自然跟着循环,职业生涯平台自然跟着上(当然能在公司内部上升自然最好)
C++开发者的主要阵地有这些:
1、特定行业的桌面客户端软件,比如安全、医疗、电力、金融、银行、游戏、音视频、图像处理、安防、智慧城市、建筑等
2、服务端软件,如游戏、即时通信、云计算、通信、虚拟化等
3、特定行业(领域)的嵌入式软件,如工业自动化,安防,智慧城市,智能家居,IoT,汽车,机顶盒,手机,电视,冰箱,航天飞机,通信卫星,人工智能,无人机,移动机器人,无人驾驶,激光雷达,智慧医疗,医疗仪器,可穿戴设备,电力设备,新能源设备,汽车,发电,通讯,芯片等等
你看,你的可选择机会还是很多的,很多的。比如安防和智慧城市这块,西安就有海康、大华、东方网力等,安全就有绿盟、交大捷普、北信源、信大捷安、北京明朝万达等,通信类的,有华为、电信十所、烽火电子等。
要在这众多的机会中选择, 关键是你要确立你的标准:
1、我要在哪个领域
2、什么样的公司
3、做哪个职位
4、开发什么产品
所以,接下来的事情,是你要先琢磨清楚上面四个问题,才能做出选择。
至于你提到的 3 个选项,因为你还想做 C++ 相关的开发,第 1 个才是最佳选择。安卓、iOS开发,已经过剩了;前端,完全发挥不出你的优势,而且,干几年后,也不可能有 C++ 的竞争力强。
如果你最终决定还是做C++,我的建议是,找门槛高一点的哦,比如服务端、视频编解码、图像处理等等,这样后面的生命周期长,薪水也高。
现在我要说一个职业规划中的逻辑:自顶向下做职业规划。即:
1、第1步,想清楚我的身份,我想要做什么的人,什么样的职业人士,比如你想做软件开发工程师,我想当作家
2、第2步,考虑信念和价值观,我觉得什么事情重要,有价值,比如你觉得做游戏没价值,做风水软件误人子弟,做教育类软件非常赞
3、第3步,考虑能力建设问题,比如你倾向做教育类软件,那就可以看看,这类软件都用什么技术做的,Java、JS、C++,可能各种都有,不同场景下的软件使用不同技术,在这里你可以选择你喜欢的技术,做特定场景下的工作
4、第4步,考虑行动上的事情,做计划,看自己怎样才能具备相应的知识、技能,构建起目标岗位需要的能力
5、第5步,考虑环境问题,谁能帮你推荐?哪里有这样的机会?市场行情如何?
这样规划职业,会有比较大的可能做到自己喜欢或者起码不厌烦的事情。