好东西大家分享:给所有想从事软件研发的年轻工程师的忠告与建议
作者:色花君子fds_181 | 来源:互联网 | 2023-09-18 13:26
作者:在别处出处:博客中国一.我为什么写这篇文章:这几天,在某个IT论坛的软件培训与认证栏目中,
作者:在别处 出处:博客中国 一.我为什么写这篇文章: 这几天,在某个IT论坛的软件培训与认证栏目中,看到了很多处于迷惑之中的人们,也看到了许多大家普遍感到困惑的问题,写此文章的目的,是想将我这些年在软件行业从业的一些经验和体会讲给大家听,并对大家普遍关心也普遍困惑的问题进行一些阐述,我将尽我最大的可能告诉大家我所理解的事实真相,同时也衷心希望大家能够理智而清晰的看待自己的方向,前途,发展策略等问题,避开自己发展的误区。 我目前在国内一家大型软件公司里做软件开发总监,由于本文中涉及了我个人对一些公司和机构的评论,有好的方面,也有坏的方面,所以我不方便透露太多关于我个人的一些信息;另外由于本人写的比较仓促,加之工作忙碌,也就没有在文字上以及文章结构与逻辑等方面做一些整理,所以可能有些地方看起来有些乱。我想乱与不乱都是次要的,关键是,我希望我的这篇文章能够让大家将一些事情看透,从而防止自己在软件行业内走入误区,以便能够在软件行业取得更大的发展与进步。 二.该怎样规划自己的技术发展方向以及人生发展的总体思路? 1) 要永远相信"物以稀为贵",我这些年的经历发现,现实中有很多软件工程师存在严重的"跟风"行为,也就是:只要市场上或者媒体上对某个领域或潮流进行"吵作"就无形中引导着这些工程师的学习方向与学习行为。如果我们纯粹以发展前景与"钱景"作为个人技术发展方向的衡量标准的话,则一个普遍的规律是:跟上最流行的技术并不一定拿到高薪;大家可以看到,同样是用C++编程语言开发软件,在Windows平台下的VC工程师,要比Unix平台下的C++工程师明显薪水低一档,为什么?原因就是一个公司可以在人才市场上很容易找到会VC的工程师,但找到有Unix平台下的C++软件系统开发经验的工程师相对要难找的多; 2) 中国软件市场是典型的内需驱动型的市场,所以中国的软件公司需要不同领域的软件开发工程师,而且不同领域的软件开发工程师在薪水方面有很大的差别,在个人职业方展过程中应"随需应变" 3) 不要局限于技术,一个人在自己事业上的成功或者说狭隘的说是个人财富的积累是一个人的"资源整合能力"的综合结果,而绝对不是一个人的技术能力单方面决定着的;在过去的经历中,我遇到了太多的"头脑聪明,技术高超"年轻工程师,他们在技术领域很聪明,但是缺乏在公司具体的人际关系环境下生存的"基本人际关系网络"管理能力,而变成了一个典型的"愤世嫉俗"的人。技术与个人智商高或者乃至上学时期的学习成绩好绝对不意味着一个人更容易通向财务自由与事业成功之路。年轻阶段有一定的技术积累是非常必要的,但如果彻底沉迷于技术,而不是着眼于个人5到10年以后你个人的事业成功所必须依赖的核心能力,行业背景和人际关系网络等因素,迟早有一天会陷入人生的被动局面里面去。 4) 不要抱怨自己所处的公司环境的复杂性并抵触之,其实无论是到管理水平很高的跨国公司还是管理很混乱的一些民营企业,只要存在人的地方,而起这些人之间只要在工作内容与职责上存在相互以来的关系的话,就不可避免有各中形式的人事斗争,在这种公司环境中,有些人善于分析公司内部环境与权力动态,并知道如何恰当发展自己并保护自己的利益免受伤害,他们锻炼了一种在复杂环境下的"领导能力",而有一些人却在这种复杂的环境下变得"愤世嫉俗"或"冷眼处之" 5) 个人的职业历程的发展模式是:随着个人在职业生涯的年数的增加,你在职场里有效开展工作,并应得工作业绩和个人收益的核心能力就尽可能少的以来技术本省的东西,而是个人的管理与领导能力还有在行业内的关系网络以及这些因素所必须以来的一个人人际关系能力与人际交往素质 6) 不要按常理"出牌",大多数人平凡的生活着,就是因为大多数人的思维被模式华,所以他们做事情并没有真正用自己的大脑深入的钻研事实的真相并作出自己的选择与判断 三.你应该如何开始自己的行动,并有一个很好的职业发展开端? 1) 为了得到一份软件开发工作,是自学还是找一个培训机构? 任何一个培训机构都不能一劳永逸得解决你职业发展得所有问题,所以有很多东西,你必须自己学习,但是从公司招聘软件开发工程师的流程与关注点的角度来看,基本上是两个大的因素,一个是个人的特定领域的知识结构和基本的开发技能,比如某个编程语言的使用能力,另一个至关重要也是可能通过某个自学途径不太可能得到的就是"特定软件开发领域工作经验"这个工作经验是必须通过实际的一些开发实践方能获得的,而这个工作经验是你在公司决定给予面试机会,以及公司决定录用当中相当重要的一个环节。 一方面你的简历中是否有你所应聘的公司所从事的软件开发业务相关的"工作经验描述"决定了你是否会得到面世机会(正是由于此点,造成目前绝大多数计算机相关专业的本科生,甚至研究生在就业方面面临着沉重的压力),用人单位最关心的不是你学过什么,而是你亲自做过什么,另一方面在你得到面试机会后,用人单位的面试框架基本上在技术方面就是两个方面:通过让你描述你曾经做过的软件开发项目来判断你到底有多没深入的开发经验以及是否与他们的要求想吻合,另一方面,在让你描述工作经验的过程中,或过程后对你的基本知识结构和基本的技术能力(比如编程技能)进行考核。 我给你的结论就是:不是说你学过某个领域的技术知识,比如编程语言,比如数据库等,就意味着你能找道一个软件开发方面的工作,用人单位永远将"你真正动手做过的项目与公司业务的吻合度"做为第一重要的判断点,你可以通过自学,或者自学能力差的话,跟着某些培训机构去学习某个领域的专业知识,但是真正促使你找到一份薪水不错的工作的主要因素是:你能够通过某种方式做一个相对来说完整而复杂的软件开发项目。而这个项目工作经验只能说你在某个公司实践工作获得,或者从某个软件培训机构获得(前提是这个软件培训机构能够提供这种级别的软件项目工作经验,但我发现真正能作到的软件培训机构在市场中很少,) 目前,市场上有很多软件培训机构都美其名曰,他们有项目开发实践,但想提醒大家的是,同样是项目开发实践,是否能够最终在个人求职方面用的上,主要决定于这个项目本身是否会给你足够的'工作背景经验'以及这种工作背景经验在人才市场上的"稀缺性"有多大。 在这里引用我一个在国内电信软件公司做项目开发总监的朋友的一句话:"我在招聘自己的开发工程师时,基本上很少关注这个人有没有证书, 我关心的问题基本上很简单的几个事情,一个是他有没有做过与我目前的项目从技术面相吻合的项目经验, 第二个问题是他本身的技术知识面和实际的动手技能如何, 第三个问题是这个人的学习能力和潜在的素质如何 第四个问题是,是否是一个易于合作的人,擅长沟通,技术人员都有那么一些"个人英雄"主义的情结,但一般只要是复杂的系统项目,更需要的是整个开发团队的通力合作" 2) 北大青鸟或者NIIT培养出来的"低门槛进入"所谓的"软件蓝领"能适应中国目前的国情吗? 这两年市场上非常火爆的所谓"软件蓝领"培训,比如北大青鸟,NIIT等,"软件蓝领"曾经是媒体非常热的一个词汇,但中国目前需要这种意义的"软件蓝领"吗? 或者说"软件蓝领"在中国真的能够就业吗?因为蓝领也好,白领也好,于想从事软件开发的人员来说,他们的目的很简单,找到在IT软件公司的工作。 对于这个问题,先谈一下我的基本观点:传统意义的"软件蓝领"在目前中国的情形下是不适应的。 首先,应该说软件蓝领实际上是软件产业发展到一定的历史阶段所必然的结果,所说的软件蓝领是在大规模软件工厂式生产模式下,专业从事软件代码与基本调试的一线人员,软件蓝领是产业发展的需要减低总开发成本并实现规模化,工厂化软件生产的必然要求的职位,在这方面印度的软件工厂模式已经取得了相当大的成功。他们拥有大量一线从事基础软件开发工作的软件蓝领,而且形成了金字塔式的人才结构。 其次,我们谈论任何事情都不能脱离历史发展的现状来谈论,中国的软件生产方式从总体来说离着大规模软件工厂模式还有相当长的一段路程要走,从政府的意愿来说,政府希望中国的软件产业能够以尽快的速度完成产业结构的完善调整,企业的兼并与重组过程,从而能真正形成可以与国际竞争的大型软件企业;但至少在今后的几年内难以实现,软件人才结构的调整也需要再长的一段过程。传统意义的软件蓝领实际上是,这些从业人员无须关心它所开发的整个软件系统是怎样的一个系统结构,他应该做什么早已经被设定好,他只需按照"软件生产规范"实现就行了,一定不能忘记这个的前提是"大规模软件生产模式",人数可能是1000人,到几千人同时进行软件开发,但我们再看一下中国的情形,中国的软件企业去年统计是4700家,其中55%是50人以下的公司,50-200人之间的占到42%,只有极少数的公司达到了1000人的规模;我们必须对一点非常清晰,如果我们培养了软件蓝领它是需要在中国的软件公司就业的,这将占到绝大多数,而且这绝大多数的人,绝大部分会到人数小于200人的软件公司工作,但实际上站在这个角度说,可能这些软件蓝领有相当大的一部分人员找不到工作,原因很简单,中国的绝大多数软件公司的软件从业人员的工作方式并没有按照软件工厂模式来运做,举例来说,很多公司是项目经理即做系统设计,又从事代码编写,同理,项目经理的开发团队的一线软件工程师也是即做代码,又参与系统的总体或者局部架构的设计,我不能说中国的所有软件企业都在这么进行着软件开发,但至少在中国目前情形下,这样的方式占了绝大多数。所以,我敢肯定一点,印度的软件工厂模式下的"软件蓝领"到中国来的话,他绝对做不了中国许多软件公司里的工作。 所以,大家看到了,北大青鸟的软件工程师培训课程目前非常火爆,但是火爆并不意味着他的课程,以及他培养出来的软件工程师在中国软件人才市场有充分的竞争力的。 再次,媒体炒做"软件蓝领"是一个事情,做为从事IT教育的教育机构如何做教育又是另一回事,政府肯定是希望我们早日走上软件工厂模式下的软件产业结构升级,但作为从业人员的最终就业场所是软件公司,那么这些中国的软件公司他首先要照顾的是自己目前的发展阶段,需要的是比软件蓝领更加有综合的素质,综合的知识结构和技能的从业人员来从事自己的开发,而不是遵从政府的意志,这是一个非常显而易见的事情。 所以,超越特定的产业历史阶段来谈论软件产业里的软件从业人员的教育问题是不切实际的。 我本人对两家"软件蓝领"培训机构的看法: 北大青鸟APTECH: 说到软件培训机构,就必然要谈到北大青鸟,总体来说我对北大青鸟的教师 1) 北大青鸟阿博泰克公司是北大青鸟集团和印度一家培训机构Aptech合资成立的一家软件工程师培训机构,他们的核心商业模式是"特许经营"。 2) 北大青鸟在市场宣传和品牌运作方面做得非常成功,他的总经理杨明原来一直在北大方正从事技术与市场方面的管理工作,对如何在中国市场上从事营销工作有较为深刻的认识,北大青鸟曾经在2001年出现过一些业务不景气的现象,但杨明的加入,通过一系列的整合营销传播活动,将北大青鸟这一品牌进行了非常好的吵作,起到了长远的效果 3) 北大青鸟的核心客户群定位在"高中以上学历均可学习"这样一个群体上,实际上,从我们招聘软件工程师的经验来讲,这样一个群体,基本上不太可能在软件公司内找到从事软件开发的工作。 4) 我发现现实中,很多人学习软件开发有典型的盲目的从众心理,因为他们不知道事实的真相, NIIT 1) NIIT也是来自印度的一家培训机构,而且公司决策层是一水的印度人,他们的核心商业模式也是"特许经营" 2) 应该说NIIT和北大青鸟Aptech有一定的渊源,NIIT是印度最早从事IT培训的公司,Aptech是NIIT发展早期,从NIIT出来的一些人员创办了Aptech公司,所以他们在商业模式上也有很达的相同之处。 3) NIIT在中国市场上,整体的市场营销与品牌运作方面要比北大青鸟差一些 4) NIIT的课程设置以及课程中的一些核心理念与内容要比北大青鸟好 5) 和北大青鸟一样,NIIT的课程里没有设置非常有效的足以能够让学员找工作时用的上的软件开发项目实践(我的意思不是说他没有软件开发项目实践,只是说这种项目实践过分简单,对找工作起到的作用不大) 我给你的结论:如果你基础很差,而且只是想学习编程知识,而不是靠培训找一份软件开发的工作的话,并且你的经济不成问题的前提下,你可以选择去NIIT学习,否则,如果你是想通过在某个软件开发培训机构的培训去找到一份工作的话,不要选择NIIT,即使他承诺签订就业协议,也不要去。 7) IT认证培训的火爆的情形下,你应该保持一个清醒而冷静的头脑 从2001年开始到2002年,这两年的时间,整个IT行业处于一个深度调整时期, 中国的IT市场也相应的受到了前所未有的影响, 但是IT教育与培训业务却取得了每年30%以上的发展速度, 这里谈谈我的理解与体会 其实每个市场的启动与发展,都是与整个市场环境相关的, 市场的驱动力来自于客户的内在心理需求, 虽然IT行业面临一个调整阶段, 但有两点是我们必须看清楚的,中国的IT市场潜力还有太多未发展起来的方面,诸如企业信息化,行业信息化,电子政务,数据通信,无线通信等等领域, 而且从这点来看, IT行业仍然是各行业中薪水和待遇相对较高的行业,即使他受到了一定程度的影响. 但从另一个角度来说,应该说是整个行业的调整,就业压力的加大驱动了整个IT教育与培训市场业务的高速发展. 正是由于市场发展的速度加快, 导致了整个行业的不规范,培训机构鱼目混杂, 实际上很多花了很多钱拿了某个证书的许多人,并没有如他们所期望的找到一份很好的工作, 拿到不错的薪水。我认为主要有一下方面的问题: 第一: 任何一个市场的发展,最终的驱动力量来自于消费者的内心需求, 某个商家只要能满足某个特定消费群体的心理需求, 他就肯定能抓住市场,赢得商机; 所以商家都在潜心研究消费者的内心深处, 进行关键的定位诉求,保健品市场,带有很明显的这种特征, 至于这个保健品是否真正能达到他的"诉求", 就只有消费者最清楚了. IT教育与培训市场的发展也如此, 因为整个产业环境变化和就业市场的压力, 驱动了消费者去进行IT认证, 我们先姑且不管这些IT认证最终能否达到客户的预期目的, 但至少需求是存在于客户的大脑中了. 第二. 我们的调查表明, 大多数选择IT认证的消费群体,在选择是带有很大的盲从性和从众心理, 这些人并没有真正认真研究一下用人单位的需求, 比如,有很多在校的大学生考取某个IT证书,只是因为他觉得大学里没有学到什么东西, 想考个证书来增加自己的就业砝码, 想在他就业的时候,向用人单位证明一下:他在校期间学了什么. 但他却没有想一个最关键的问题,这个证书是否真正有用? 反正是不管有用没用, 先给自己一些心理安慰. 我们发现的一个问题是: 在校大学生很少能够真正站在用人单位的角度去想想问题, 然后决定一下自己应该做点什么备战就业. 第三个问题涉及到一个软件教育机构,尤其面向IT领域的教育机构,他的总体运做思路和竞争战略的问题, 这个机构是否站在用人单位的角度来进行思考, 他们的用人逻辑到底是什么? 他们真的是看某个应聘者的证书? 还是在用人的时候更加注重从从业经验来做判断, 其次是,现实中,真正的就业困境到底在哪里? 最后是软件教育机构如何设置自己的课程来满足用人单位对"软件人才"的"核心需求" 8) 为什么计算机相关专业大学本科甚至硕士研究生就业问题? 目前大学生就业问题已经成为一个日益严重的社会问题,以前IT相关专业的大学生就业时基本上是"皇帝女儿不愁嫁",但是,我们看到已经有太多的学生,他根本找不到工作. 确实大学生就业问题已经成为一个值得我们关注的社会问题,目前大学生就业困难一方面跟我们目前的传统教育体制的过分滞后有相当大的联系,另外一方面,整个就业市场的供过于求也是重要的因素。就拿大学生想在IT行业就业来看,就值得我们深思,我们整个传统教育过程中都过分重视"学习知识,考分数",这种思维模式的引导,使得学生一直转不过这个弯来,我们的学生知道毕业前还是习惯于听老师讲课,自己将来考试过关。目前许多学生非常热衷于某些IT认证类的考试就说明了这种思维模式的延伸,在学生的头脑里总有这么个概念:你看我在校考了这么多证书,你应该考虑给我一个就业机会吧。但实际上,我最想和在校大学生说的一句话是:请你们争开眼睛,好好看看用人单位都在怎样的用人,尤其想从事IT技术工作的大学生,用人单位真的不是很关心你到底学过什么东西,他只关心你到底做过什么? 当然,说到这,我们不能将这种东西归责与我们的学生,应该说是我们整个教育系统有相当大的弊端在里面。 9) 我对于你参加培训,尤其软件工程师培训的建议 我所有下面的建议都是基于这样一个前提:你想在软件公司里找到一份从事软件开发的工作 1. 不要相信任何证书,任何证书都不会让你找一份软件开发工作,现在大部分软件公司很现实,他只关心你是否做过和公司所从事的软件开发领域相一致的"软件项目开发"经验,这是他考虑的80%的因素,其他的因素才是类似专业背景,学校,个人软性素质,沟通技巧和学习能力等。 2. 如果你没有任何的软件开发所需要的基础知识与基本技能,你可以到一些培训机构去学习这些基本知识,但是,如果你自学能力可以的话,我建议你自己学习这些基础知识与基本技能。然后你再找一家真正能够让你实践去做一些"软件系统"的培训机构(后面我将基于我的理解,向你推荐几家)。 3. 如果你具备从事软件开发的基础知识和基本的编程技能,但目前仍然没有找到一份软件开发的工作的话,那我告诉你问题的症结:你没有机会去亲自从事一个大型的软件系统,这个软件系统的工作经验具有足够的难度和复杂性,去找一家能提供这种级别的软件开发实践机会的软件培训机构吧,毕竟这几年,计算机相关专业的毕业生和几年以前已经今非昔比,这并不是说市场不需要大量的软件工程师了,而是,现在没有多少软件公司愿意为没有"工作经验"的新人提供工作机会并承担一定的"跳槽风险"了。 4. 不要被软件培训机构的市场营销与商业吵作所迷惑,如果从"找到工作"的角度来看,能否带你做一个相对"大一点"的软件项目,是选择的最重要的考虑因素 5. 尽可能在培训机构里申请试听几节课 6. 不要听信任何的"品牌吵作",本人对公司的媒体宣传,市场策划,公关活动等都有过比较深入的接触,其实有些事情,比如说有些培训机构,他们应该坚持"宁可不说,不可胡说"的,但你发现目前有多少培训机构他"不胡说"?,但我相信一点, 一些做事浮躁的培训机构,他是能够在市场上一时风光的,但我相信这种靠"吵作"来赢得市场的行为,是不可能长久生存下去的。 7. 一定要认真研究一下,这个软件工程师培训机构是否有真正在"中国做过许多大型而复杂的软件系统"项目的老师来讲课,不要被一些培训机构所阐述的"讲师背景"或"公司背景"(比如挂靠某个知名学府或单位)所迷惑。如果你还听到某个机构在说:聘请某名牌大学教授等字眼,我劝你趁早将你的钱袋子收紧些。
推荐阅读
本文详细介绍如何使用 Python 进行数据可视化,涵盖从环境搭建到具体实例的全过程。 ...
[详细]
蜡笔小新 2024-11-13 06:03:30
浏览器作为我们日常不可或缺的软件工具,其背后的运作机制却鲜为人知。本文将深入探讨浏览器内核及其版本的演变历程,帮助读者更好地理解这一关键技术组件,揭示其内部运作的奥秘。 ...
[详细]
蜡笔小新 2024-11-11 13:34:37
本文详细解析了帝国CMS中的信息归档功能,并探讨了其在内容管理中的重要性。通过归档功能,用户可以有效地管理和组织大量内容,提高网站的运行效率和用户体验。此外,文章还介绍了如何利用该功能进行数据备份和恢复,确保网站数据的安全性和完整性。 ...
[详细]
蜡笔小新 2024-11-09 20:42:14
题目 E. DeadLee:思维导图与拓扑结构的深度解析问题描述:给定 n 种食物,每种食物的数量由 wi 表示。同时,有 m 位朋友,每位朋友喜欢两种特定的食物 x 和 y。目标是通过合理分配食物,使尽可能多的朋友感到满意。本文将通过思维导图和拓扑排序的方法,对这一问题进行深入分析和求解。 ...
[详细]
蜡笔小新 2024-11-09 15:43:40
微软近期发布了Windows Terminal Preview v0.10,用户可以在微软商店或GitHub上获取这一更新。该版本在2月份发布的v0.9基础上,新增了鼠标输入和复制Pane等功能。 ...
[详细]
蜡笔小新 2024-11-12 16:15:56
蜡笔小新 2024-11-12 15:26:03
本文将详细介绍 Android Jetpack 中 Lifecycle 组件的实现原理,帮助开发者更好地理解和使用 Lifecycle,避免常见的内存泄漏问题。 ...
[详细]
蜡笔小新 2024-11-12 14:05:19
秒建一个后台管理系统?用这5个开源免费的Java项目就够了 ...
[详细]
蜡笔小新 2024-11-12 03:21:33
MySQL的查询执行流程涉及多个关键组件,包括连接器、查询缓存、分析器和优化器。在服务层,连接器负责建立与客户端的连接,查询缓存用于存储和检索常用查询结果,以提高性能。分析器则解析SQL语句,生成语法树,而优化器负责选择最优的查询执行计划。这一流程确保了MySQL能够高效地处理各种复杂的查询请求。 ...
[详细]
蜡笔小新 2024-11-11 16:48:32
### 优化后的摘要在处理 Python 开发中的错误重试问题时,许多开发者常常感到困扰。为了应对这一挑战,`tenacity` 库提供了一种高效的解决方案。首先,通过 `pip install tenacity` 安装该库。使用时,可以通过简单的规则配置重试策略。例如,可以设置多个重试条件,使用 `|`(或)和 `&`(与)操作符组合不同的参数,从而实现灵活的错误重试机制。此外,`tenacity` 还支持自定义等待时间、重试次数和异常处理,为开发者提供了强大的工具来提高代码的健壮性和可靠性。 ...
[详细]
蜡笔小新 2024-11-11 10:33:20
在软件性能测试中,关键监控指标的选取至关重要。主要目的包括:1. 评估系统的当前性能,确保其符合预期的性能标准;2. 发现软件性能瓶颈,定位潜在问题;3. 优化系统性能,提高用户体验。通过综合分析这些指标,可以全面了解系统的运行状态,为后续的性能改进提供科学依据。 ...
[详细]
蜡笔小新 2024-11-11 01:42:16
蚂蚁课堂:性能测试工具深度解析——JMeter应用与实践 ...
[详细]
蜡笔小新 2024-11-10 13:35:01
回顾过去十多年的开发经历,我在技术能力、培训机会、国际视野以及大型企业的工作经验方面都有了显著的提升。特别是从最初的月薪8k到如今的38k,这一过程中,我深刻体会到系统化学习对提升架构能力的重要性。最初踏入职场时,面对众多未知,我主要依赖团队领导的指导,专注于编写代码、管理数据库和进行测试。随着经验的积累和技术的不断进步,我逐渐意识到,只有通过系统化的学习和实践,才能在技术领域取得更大的突破。 ...
[详细]
蜡笔小新 2024-11-10 09:11:27
Linux基础知识:Vi与Vim编辑器详解 ...
[详细]
蜡笔小新 2024-11-09 13:56:18
数字图书馆近期展出了一批精选的Linux经典著作,这些书籍虽然部分较为陈旧,但依然具有重要的参考价值。如需转载相关内容,请务必注明来源:小文论坛(http://www.xiaowenbbs.com)。 ...
[详细]
蜡笔小新 2024-11-08 10:55:29
色花君子fds_181
这个家伙很懒,什么也没留下!