软件工程师发展之路之我见(一)

GoneWithDream 2011-01-12 05:26:13
白驹过隙,岁月如梭。这是我上学的时候写作文最爱写的2句话。不想现在用在这里正合适,不知不觉间我已在软件行业工作了十年。十年间碰到过很多事情,和很多人合作过。有过成功,有过失败。走过捷径,跑过弯路。曾经年少轻狂,踌躇满志;也曾伤心懊恼,郁郁寡欢。古人云“三十而立”,果然不假,慢慢的弄懂了一些事情,形成一套暂且还行之有效的思维和行为模式。所以常常和LD侃侃而谈,常发感慨说:十年前我若知道这些,今天的我将比现在更上一个层次。所以LD劝慰说,为什么不把这些记录下来呢。我想想觉得LD说的对,这是我的思想轨迹,如果能够和大家一起探讨抑或对年轻的工程师有些裨益,也是一件非常好的事情。于是我决定写下来。

我想从软件工程师的发展说起,这是一个很大的话题,包含很多的内容。我觉得可以从毕业生开始的公司选择阐述一下我的意见。我记得以前网络上有人发帖阐述过毕业生是选择大公司好还是小公司好,他给出的结论是小公司好。这是和我6年前的想法一样,但是,我现在的想法变了,我觉得如果是一个毕业生选择一个公司作为其职业生涯的起步的话,我认为应该尽可能的选择大公司。职业生涯的起步阶段最重要的是什么?每个人可能心中的想法都不一样。有人可能说技术,我想大多数毕业生或选择这个。我认为职业生涯的起步阶段最重要具备对自己职业生涯终身有意义的事情——良好的职业素养和开阔的眼界。那又会有人问技术不重要吗,当然重要了。但是良好的职业素养和开阔的眼界会帮助你积累技术,没有这些也许一开始技术快一些但是到后来肯定会遇到瓶颈。而良好的职业素养和开阔的眼界只能在起步阶段建立如果没有建立,恐怕以后就没什么机会了。就像金庸小说中的正派的内功虽然入门一开始感觉功力增长慢一些,但是,以后增长会很快,而邪派武功虽然入门块,但是,后来越来越危险而且很难突破瓶颈。良好的职业素养和开阔的眼界就是正派的内功入门口诀。

1.良好的职业素养,说穿了就是良好的工作习惯。很多人不把这些当回事,很多人岁数很大还没有很好的发展很大的原因就是没有养成很好的工作习惯。我举两个最简单的例子:编码规范和信守承诺。编码规范是一个优秀的软件工程师最基本的素质,写很规范的代码,会使软件工程师避免和低级的错误,会提高生产效率。我曾经有一个同事工作也有很多年,没有很好的编码习惯。有一次,他调查自己写的代码中一个BUG,调查了一个星期没有调查出来,最后的结果是在一个函数中一个参数的变量名字和函数中的同类型变量的名字只差了一个字母,结果引用错误了。一个星期呀,能干多少事情。信守承诺,我有另外一个同事,他有一个问题就是不能信守承诺。每次交给他的任务,他总是不好好分析,总是随意的说出一个日期,而且工作没有计划,从来没有按期完成过,结果可想而知。其实职业素养包含很多方面,如:编码规范、沟通交流技巧(如何回报问题,问询问题,什么时间什么阶段向什么人问什么问题)、合作性、计划性、归纳总结能力。其实每一方面都可以成为一话题进行讨论。我们常说的大公司在新人一入公司就进行相关的培训,在工作中会遵循这些原则。会帮助新人培养这些能力。而很多小公司(不排除有优秀的小公司很正规)是利润为先,恨不能新员工从一开始就干具体工作,马上就创造价值。在质量和时间上优先选择时间,在这些公司出来的人很少有良好的职业素养,而且他们认为这些坏习惯理所当然。养成了再改就很难了。

2.开阔的视野。有人可能不同意,认为大公司工作的人只是一个螺丝钉,只干很少的一部分,而小公司能接触更多因为人少吗?机会更多。我不敢苟同这种观点。大公司相对的产品应该说规模比较大,真正的核心技术都比较深厚,而且,作为大公司的员工能够了解到这么一个优秀的产品是如何生产出来的。只要是有心人,就能开阔自己的眼界,而且一般能进入大公司的人相对比较优秀,优秀的人和优秀的人在一起,能力增长更快。关键看自己是不是有心人。而相对来说小公司则相反,就算所有的东西都给你,又有多少? 事实上开阔的眼界决定你的命运。成功的例子有很多,譬如李开复、唐骏等。

综合而言,我认为在毕业生选择自己的职业之路首选大公司。在完全建立其自己优秀的职业素养和开阔的眼界在进行二次选择会上一个档次。从打入小,从小进大难。希望大家都有一个美好的开端。
...全文
1282 29 打赏 收藏 转发到动态 举报
写回复
用AI写文章
29 条回复
切换为时间正序
请发表友善的回复…
发表回复
龙胜LONGAIN 2012-09-28
  • 打赏
  • 举报
回复
正在小公司受难中...
兆帅 2012-09-26
  • 打赏
  • 举报
回复
有道理!
shine487 2012-09-26
  • 打赏
  • 举报
回复
路过…………
水惊鱼 2012-09-25
  • 打赏
  • 举报
回复
每次交给他的任务,他总是不好好分析,总是随意的说出一个日期,而且工作没有计划,从来没有按期完成过,结果可想而知。其实职业素养包含很多方面,如:编码规范、沟通交流技巧(如何回报问题,问询问题,什么时间什么阶段向什么人问什么问题)、合作性、计划性、归纳总结能力。其实每一方面都可以成为一话题进行讨论。。。。。。。。。。。。。。。。。。。。。。。。。。。。有感觉。。。。我总是想太多。。做不到。。。
方紫涵 2012-09-25
  • 打赏
  • 举报
回复
良好的职业素养和开阔的眼界
biyouyun 2012-09-24
  • 打赏
  • 举报
回复
工作还是大公司比较好
酒剑仙 2012-09-24
  • 打赏
  • 举报
回复
100人以下的可以定义为小公司!
这种公司不注重培训员工,把员工当机器使唤。在这种公司很难培养出良好的开发习惯的。
hexiechina2010 2012-09-24
  • 打赏
  • 举报
回复
我现在正为发展之路纠结呢,路过,学习
GoneWithDream 2011-01-30
  • 打赏
  • 举报
回复
sammy_chan:我想问问你,你认为在技术上的核心竞争力是什么(不可替代性是什么)?不是语言不是架构,而是经验。为什么说要选择一个行业,做行业的技术专家,是你要对行业和行业中的技术发展有深刻的理解。这个是不可替代的,只要行业存在,你就有存在的价值。而这个需要时间精力累积的。这才是技术发展的核心之路。中国的软件也不成熟,而很多程序员很浮躁,想想国外的知名技术专家,他的行业是什么,他的不可替代性是什么,就知道自己的路怎么走了。

[Quote=引用 19 楼 sammy_chan 的回复:]

我也经常在想,我到底要怎么走,要如何去走。
8年,或者5年,唉,IT人的年轻时代才有几年时间啊。我也不是说Blue_may说的不对,只是这个社会的竞争压力太大,不比以前了呀。
引用 18 楼 gonewithdream 的回复:

Blue_may:你说的不错,大和小是相对。但是选择的标准一定是正规流程,也就是说能养成良好的习惯和工作作风。我不知道你所说的成长是什么?但是,我所带过的经验……
[/Quote]
Blue_may 2011-01-27
  • 打赏
  • 举报
回复
大公司和小公司之间还有中等规模公司阿.我觉得毕业的时候找个500-1000规模的最合适了.过两年跳去大公司或者留下转中层管理.这种人技术上一般都比毕业直接进大公司的强.
当然有个例外,你进了大公司正好赶上新项目.这个成长是非常快的.
longxinloa 2011-01-27
  • 打赏
  • 举报
回复
受教中...
bianzhou 2011-01-27
  • 打赏
  • 举报
回复
这个看各人的追求方向,个人觉得最准确的说法是,行业背景优先,其次是正规流程的公司,而后是创业型公司,最后是很长时间的小公司。
迷糊 2011-01-27
  • 打赏
  • 举报
回复
错,是GoneWithDream说的,呵呵
迷糊 2011-01-27
  • 打赏
  • 举报
回复
我也经常在想,我到底要怎么走,要如何去走。
8年,或者5年,唉,IT人的年轻时代才有几年时间啊。我也不是说Blue_may说的不对,只是这个社会的竞争压力太大,不比以前了呀。
[Quote=引用 18 楼 gonewithdream 的回复:]

Blue_may:你说的不错,大和小是相对。但是选择的标准一定是正规流程,也就是说能养成良好的习惯和工作作风。我不知道你所说的成长是什么?但是,我所带过的经验不多的程序员,大多数认为成长主要是指技术,甚至是编码。其实,我认为不是。成长在不同阶段含义是不同的,在毕业1~3年内养成良好的习惯和工作素质是重要的,有这个基础才可谈到可持续增长自己的技术能力。像bianzhou说的,其实行业也很重要,但是……
[/Quote]
GoneWithDream 2011-01-27
  • 打赏
  • 举报
回复
Blue_may:你说的不错,大和小是相对。但是选择的标准一定是正规流程,也就是说能养成良好的习惯和工作作风。我不知道你所说的成长是什么?但是,我所带过的经验不多的程序员,大多数认为成长主要是指技术,甚至是编码。其实,我认为不是。成长在不同阶段含义是不同的,在毕业1~3年内养成良好的习惯和工作素质是重要的,有这个基础才可谈到可持续增长自己的技术能力。像bianzhou说的,其实行业也很重要,但是我建议在工作5年左右在选择行业。在经验匮乏基础薄弱,选择行业是有比较大的风险的,因为你既不了解自己(自己能干什么、喜欢干什么),也不了解计算机软件发展趋势。选择都是感性的,变化性很大,选了也没什么意义。我是在自己工作8年左右才开始知道自己到底想要什么,软件开发的路该怎么走。
我自认为比较愚钝,相信大家应该5年左右能够了解。
毅统 2011-01-27
  • 打赏
  • 举报
回复
自己感觉工作环境快乐,才是王道!
GoneWithDream 2011-01-27
  • 打赏
  • 举报
回复
bianzhou说的不错,看起来你对自己的职业发展还有比较清晰的认识。
djj315:都是我的经验之谈。我说的是就我现在理解的普遍的规律。当然会有特例,只不过特例是指特殊的人和特殊的公司。我相信在比尔盖茨刚创业的时候,和微软一样的公司很多。但是,只有微软成长成现在的软件帝国,如果你能发现现在的创业期的微软,那是你的眼光。
Simao 2011-01-26
  • 打赏
  • 举报
回复
楼主的陈述是自己经历过呢,还是听说的,我开始在大公司干,现在在中等公司干。说白了,干这行跟个人有非常大的关系。
han07471 2011-01-26
  • 打赏
  • 举报
回复
路过,,不错的见解。。。
coolkisses 2011-01-26
  • 打赏
  • 举报
回复
大公司,容易有时间研究些东东。小公司,比较累就是了,没人教,练功容易伤了。
加载更多回复(9)
近年来,物联网的发展势不可挡,将很快成为下一个革命性的技术变革,改变人们的生活方式。而嵌入式linux相关技术则是物联网技术中的核心部分(感知层和传输层全部依赖嵌入式技术的支撑),想要在物联网技术中有所建树嵌入式linux是绕不开的一道坎,因此为广大相关专业大学生和相关行业工程师所关注。然后传统的线下培训班学习方式却有着诸多缺陷:费用高昂(4个月16800元左右)、时间和空间成本高昂(必须全日制集中式脱产学习、学习和生活成本高)、效果差(老师水平、责任心、教学管理水平参差不齐)等,让人望而却步、“嵌入式,想说爱你不容易”。 本课程是从零开始完整系统的学习嵌入式linux技术的完全教程,因此学习是分为几个阶段的,每个人应当根据自己的情况选择合适的学习起始点(譬如有基础则可不必从头开始)和学习重点安排(譬如有些人应该重点看C,而有些人要重点看裸机等)。 但是总的来说,大部分同学的基础和学习能力都相差不大,因此我下面给出的完整学习路径和建议适合99%的同学。这个学习路线也是朱老师课程录制和顺序,也是朱老师自己认为的合理的学习进阶路线,建议大家参考该路线学习,以大限度提升学习效率。 第0阶段:试学阶段 本阶段要学习的课程是《0.基础预科》中的3个课程。学习顺序为: 先学习《0.1.嵌入式软件工程师完全学习指南》。本课程是对物联网技术的介绍,和朱老师整个物联网相关课程的大规划(嵌入式linux核心课程属于朱老师整个物联网课程体系的一部分,其他部分还有诸如Android扩展、物联网传感器扩展等)。学完本课程可对物联网的概念和应用有更深的理解,尤其适合根本不理解何为物联网的小白学习。(现在很多大学都开设物联网专业,但是都大二大三了都还不知道何为物联网的人一大堆,甚至学校老师都说不清到底什么是物联网) 然后学习《0.2.朱老师带你零基础学Linux》,本课程是对linux系统的基本使用。因为之后的所有开发都是在linux系统(具体的说是ubuntu,更具体点是基础预科里用的是ubuntu10.04,后面其他课程里用的是ubuntu14.04)中进行的,因此要开始学习必须先会使用linux发行版系统,所以这个课必须先学。 后是《0.3.嵌入式linux C编程基础》,这个课程是非常非常基础的讲C语言的课程(其实还只讲了一半,是线下实体课堂的实录,因为当时课上到一半开班了所以就没继续讲了)。这个课程C语言讲的非常仔细,仔细到令人发指的程度。如果你C语言功底不行建议好好看这个课程,会有极大提升。当然如果C语言还可以,有一定功力(表现为看了这个课程后感觉太简单太容易了),那这个课程可以快进过去或者干脆跳过。 至此基础预科学习完毕,可以正式开启嵌入式linux学习之路了。 多说几句,整个《0.基础预科》部分的视频课程都是免费提供的。并不是说这部分课程没有含金量所以免费,相反这部分课程含金量很高(同学反馈的好评也多)。朱老师之所以将本部分定为免费课程,主要是希望大家能够零成本的开始学习,先通过这部分课程的学习检验自己的学习结果,搞清楚以下问题: 我到底能不能学会? 这个课程到底适合不适合我,这个老师的风格我到底喜欢不喜欢? 这个技术方向到底能不能吸引我?我是不是真的决定去学嵌入式了? 这老师行不行?值不值得花钱买他的课程? 把这个阶段定位为试学阶段,也是基于这点。试学,一方面试的是你自己,另一方面试的是我。试学阶段40小时左右的课程(其实本来可以短一些的)大家至少需要一周以上才能学完,这么久的时间就是希望大家能够想清楚,也能够看清楚自己的内心兴趣,同时也能充分检验朱老师的课程质量。 第1阶段:初级嵌入式软件工程师阶段 本阶段的学习内容包括《1.ARM裸机全集》和《4.C语言专题》这两个课程。学习顺序是以ARM裸机为主线,其中穿插C语言专题进行学习。 本阶段2个大课程加起来156小时,主体内容是嵌入式linux软件开发方向的各种零碎知识点和能力点,几乎可以认为是整个课程中重要的一个阶段(有些人说驱动重要?这两个阶段如果过不了驱动跟你半毛钱关系都没有)。 本阶段对大家重要还有个更主要原因就是:本课程中讲的东西都是各种嵌入式软件开发岗位技术面试笔试中常遇到的。所以如果是希望通过学习搞定面试找到工作,那本阶段的课程就要作为重点学(尤其是C语言专题)。 第2阶段:提升阶段 本阶段的学习内容包括《2.uboot和linux内核移植》和《3.linux应用编程和网络编程》。其中uboot和系统移植承接ARM裸机阶段内容,继续讲解uboot。这个课程也很精华,分为20个小课程一共92小时,学习本课程并且把课程中的练习都做下来后,整个人的程序编写和调试功能会极大提升,用已经学完的同学的话讲是“感觉整个人脱胎换骨了”。Linux应用编程和网络编程这个课程根据APUE这本书简化而来,面向实际用到的知识点和重点,学起来难易适中,相对轻松点。不过却是后面学习驱动的,想要写驱动必须得先会写应用,这个道理大家一定要遵从。 本阶段的2个课程之间没有先后顺序,大家可以根据自己的需要来安排。我讲课时是按照先uboot和系统移植,后linux应用编程和网络编程的。(主要是为了承接前后阶段) 第3阶段:驱动学习阶段 本阶段内容为《5.linux驱动开发》,本部分是整个课程里大家期待的部分,很多人是一上来就想学习驱动开发的。但是必须认识到,驱动是linux技术中集大成者,前面所有课程中学到的内容在驱动中都会用到,驱动编程和调试是让人抓掉头发都无从下手的麻烦事,所以建议大家学好前面的课程再来看本部分,否则你将什么都得不到。(就好像笑话里说的那种,前面4碗饭不吃,直接吃第5碗也是不可能饱的) 第4阶段:项目阶段 本阶段为大家安排了一个练习项目,该项目综合用到了前面课程中讲到的知识和能力,包括驱动和应用,编程能力、调试能力等。为了方便本项目并未用到额外的配件,课程配套的X210开发板即可直接完成项目。本项目只是个开胃小菜,用来给大家检验自己的学习成果的而已。 真正有用而复杂的项目,朱老师将在另一个课程体系(暂定名为:朱有鹏老师物联网项目库)中给大家一一道来。这些项目会从2016.8左右开始一直持续(直到朱老师退休······),朱老师的目标是将常见的各种物联网传感器、外设硬件模块、前端技术应用都囊括进来,使用我们嵌入式linux核心课程中学到的编程能力,结合这些软硬件模块来完成一个又一个大项目小项目。将来大家可以根据自己的兴趣爱好和工作需要,在其中选择合适的项目进行学习,并且即刻在实际中遇到这些项目(也是是为了毕业设计、也许是公司下一个产品···)

590

社区成员

发帖
与我相关
我的任务
社区描述
提出问题
其他 技术论坛(原bbs)
社区管理员
  • community_281
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧