分类目录归档:未分类

软件开发行业入职前至少应该了解哪些问题?

在面试、入职前,对入职企业有更深入的了解是必要的。

工作内容、工作职责

应聘时,无论是你自己选的岗位,还是公司分配的岗位,你都应该问清楚工作内容、工作职责

一个对工作内容、职责不过问的应聘者,相对显得有那么一点不负责任。

相同的岗位,在不同的公司中工作内容、职责可能不完全相同。这是什么意思?虽然都是软件开发,但某个公司可能专门做某一类IT产品,比如银行系统、金融软件等及具行业气息的软件开发。如果你入职了银行系统开发、一旦你辞职,你会发现银行系统的技术比较落后,再应聘其他公司就会比较困难。

综上,就工作内容上,我们是必须要问的,该公司该岗位是否服务于特定行业?

工作职责,和工作内容可能比较模糊,工作内容是日常工作具体工作事项、而工作职责它指的是我充当什么角色,这个角色的工作范围,指的是“应尽”的工作范围,也包括非强制方面,比如认真工作、维护公司利益、尊老爱幼等。当然这个不是必须要问的,语文不好的hr会被你问懵,当然你也可以强行给hr灌输一点知识,不过有些公司会要求保密协议,不得泄露内部信息,这些公司可能不允许上外网。

工资待遇、福利制度

询问工资时,不应该直接问能给多少工资,一般来说是根据个人能力进行一定的调整。不过可以换个问法

比如:贵公司xxx岗位平均工资水平?

一个岗位的工资范围可能变化很大,但平均工资是一个很好的评定参考。

此外,工资是否有上限?工资是能否涨薪?平均多久涨薪一次?

稍微对hr察颜悦色,以决定是否咨询更多的问题,一般来说,问“平均xxx”是不会得罪面试官的。

在这里提一下:尽量不要去外包公司,除非你只是想单纯的锻炼一下自己,但实际上这并没有什么用,外包公司是靠员工挣钱的,挣的也是苦力钱,如果它跟你说待遇很好,多半是钓鱼,你怎么可能反向撸羊毛?

此外,有的公司除了普通工资外,还有其他的福利,比如年终奖,比如一些公司会有期权、内部股票什么的。

对于软件开发行业,还要看个人成长,是否有其他学习资源,比如有的公司在入职一年内分配一个前辈携带你做项目,是否有其他培训。这点其实非常重要,如果你只会开发,没有一个深入了解的行业是没有竞争力的,比如你做金融软件开发,你是否了解金融行业??企业是否有定时金融方面的培训?一开始你可能感觉不出来有什么意义,实际上意义重大,如果你不了解金融行业,那么你如何设计一个金融行业的系统?每个行业可能都有一定的规则,没有一个深耕的行业那么是很难发展的,软件开发不仅仅只需要技术,还需要对行业有所了解,这也是不推荐外包的第二个重要原因。

需要注意,年终奖是一定要发的,不发是违法的。但如果发的多,则表示这个公司福利制度好,你可以咨询:平均年终奖…

不过一般都是一些比较零碎的,每个公司不一定

  • 夏季防寒降温补贴,(北方可能没有)
  • 节日礼金、礼品
  • 伤病补贴
  • 加班时免费工作餐
  • 突发事故补贴

住宿、五险一金

公司是否提供免费住宿?提供住宿不一定是免费的,提前咨询以免套路

公司是否有五险一金?

五险一金是指用人单位给予劳动者的几种保障性待遇的合称,包括养老保险医疗保险失业保险工伤保险生育保险,及住房公积金

需要注意,公司给你交了五险一金,实际它只能给你交大部分,也就是有小部分必须从你工资扣除,大概500左右。

也就是从你工资里一定扣除500元,如果你自己交会更贵。

研发部门?

研发部门的待遇,一般比开发部门要好,但不一定

同样应该按照上述问题咨询,平均工资?平均多久涨薪?等问题

工作时间、假期制度

一天上班多久?每周上班多少天?假期制度?

正常来说,软件开发一天上班8小时,每周工作5天,

855表示,早上8点到下午5点,即每天8小时,一周工作5天

996表示,早上9点到晚上9点,一天12小时,每周6天

而007则是每天零点上班零点下班,一周工作七天,这种工作制度就意味着每一天都要在公司里工作。

国家法定节假日一定是有假期的,但是太少,比如过年时法定假期是7天??所以,有没有带薪休假,带薪年假是一个可以去问的问题,有很多公司年假都会有15天。

反向hr最为致命?

除了关心自身工资、福利、发展等问题外,反向套路一下hr也是很有必要的。

你在这个职位上怎么才算成功?

这其实是变相地让面试官给你讲述工作岗位需求和他心目中对这个岗位任职人员的期望。这样以来,你就能非常清晰准确了解他们理想候选人的模样。这样的好处是:一,能帮你快速确定自己是不是公司的恰当人选,以及你能否达到他们的期待;二,就算是你自己的条件与公司的要求有所出入,但你清楚自己努力的方向,知道怎样修正自己。这样,一旦你应聘来工作的时候,就可以快速地进行调整了。

你应该向谁汇报?

这是你快速了解谁是你的未来上司的机会。在公司上班,与同事和上司能否相处融洽是非常重要的一件事。在很多公司的面试中,你的上司一般都会出场,所以你其实在还没有正式工作前,就已经开始与他打交道。所以,你要尽量想办法弄清楚他是谁,虽然面试的接触非常短暂,但就像他面试你一样,你其实也可以通过面试的过程,判断出来他的风格,他与团队相处的方式,以及他的团队值不值得加盟。

如果有可能,请求参观公司

你应该尝试沟通,让面试的人(不管是未来的上司,还是未来的同事)带你参观一下公司。基本上,参观公司的目标都能达成。

实际上,一眼胜千言,毕竟语言是非常抽象的东西,描绘起来与实际还是有较大的出入,感受一家公司氛围的方式,就是进去看看,只要走一圈,你立即就会感觉出这家公司是否符合你,走廊里过往人员的打招呼方式,公告栏通知的风格,透过窗户看到的同事们之间的互动方式以及氛围,可以让你你立即判断出这里到底是不是自己想来的地方。

如何理解维持现状偏差?

基本概念

“维持现状偏差”是一种人类规避变化的心理本能,即使该变化可能带来好处,但是对改变的恐惧会让人无法采取行动。

深入理解

也就是说,人类的大脑比起对于做新事物之所得,反而会对做新事物之所失有扩大性的评价,于是大脑程序会尽可能地做出没有变化的选择。比如:

A:无条件获得1000日元。

B:玩“剪刀石头布”,如果赢了,得3000日元;输了,一分钱没有。

在确定要二选一的情况下(尽管理论上的期待值是B更高),但大多数人会选A(因为只有胜负两种情况,所以B的期待值是3000日元除以2等于1500日元)。

反之:

A:不得不交1000日元的罚金。

B:无“剪刀石头布”,如果赢了,可以免处罚金;但是输了,要交3000日元。

在这种情况下,虽然理论上期待值是A更高,但是选B的人数却在增加。相对于之后可能到手的东西,人们会对已经到手的东西更加爱惜,于是日常生活中会发生下列事情:

  • 尽管在职场中有各种不满,但就是没办法跳槽。
  • 对已经在一起很久的恋人即使有不满,也没办法开口说出分手。
  • 哪怕交往很久的恋人,也没办法踏入婚姻的殿堂。
  • 尽管有自己一直想挑战的体育项目,但就是没办法开始参与。
  • 尽管想减肥,但就是控制不住吃零食。

“维持现状偏差”是人类具备的生存和防御的本能。“迄今为止,这样的行事方式也不至于消亡,所以就继续控制在这种方式内而不采用新方式”的想法确实增加了脱离生命危险的可能性。

然而要完成新目标的时候,“维持现状偏差”就变成了实现目标的最大阻碍。

例如产生下面这些劝导自己的内心独白:

  • 尽管工资很低,但是觉得适合自己,而自己也没有太大的抱怨。
  • 现在的恋人虽然不完美,但是分手之后难以保证会遇到更好的人。
  • 因为现在很忙,所以等有时间的时候再想吧。
  • 结婚之后可能会十分幸福,但是也会产生各种制约。
  • 这个月的聚会太多,减肥这件事等下个月再开始进行吧。

这就在无意识中阻挡了变化和新的挑战。

此外,这种心理还可能被人所套路,例如网购先体验再付款,虽然并不十分满意,但又懒得退货?分期购买时,若不完全支付将失去最终资格,已使用一段时间虽然效果并不理想却还是继续付尾款?

甚至,会让人变得毫无斗志,无法明确自己的人生目标,

不想设立目标的原因是一旦公开却没有完成的话,不仅非常尴尬,而且心理上受不了。由于虚荣心作怪,所以很难跨越“维持现状偏差”这一障碍。

克服办法

如果要克服这个心理,让自己走出舒适区,进入学习区(简单指乐于接收新事物),仅需要一点,要坚信自己有无限的可能性。例如

发明飞机的莱特兄弟最初肯定没有思索“怎么做才能设计出能载人飞翔的物体”,而是想“人如果能翱翔于长空,那该多逍遥啊”。

如果一开始就思考“怎么做”,就不会想“虽然迄今为止没人能在天上飞,但是我可以做到”,然后内心就会受到阻碍。

当时周围的人看到莱特兄弟肯定会说:“什么?要飞上天?这两个家伙的脑子还真是奇怪。”但是,他们深信自己有无限的可能,认为人类也可以在天空飞翔,所以才能发明出飞机。

不管你设立的目标有多高远,都没有人能证明它不可能实现。

即使以自己过去的经验判断自己不行,也不能成为你现在无法完成的理由。

即使目标是至今都没人能做到的事,也不能成为你无法做到的理由。

把自己跃跃欲试的事情设立成目标,完成的概率会大大提高。

概述快速原型模型的思想和特点

快速原型模型的主要思想是:首先快速建立一个能够反映用户主要需求的原型系统,让用户在计算机上试用它,通过实践让用户了解未来目标系统的概貌,以便判断哪些功能是符合需要的,哪些方面需要改进。用户会提出许多改进意见,开发人员按照用户的意见快速地修改原型系统,然后再次请用户试用……,这样反复改进,最终建立完全符合用户需求的新系统。

快速原型模型可以减少模型设计成本,针对于仅完成一些功能性的软件,而不考虑性能、空间等效率要求,比如系统的shell

用户的需求可能产生变化,快速原型模型可以方便的升级得到用户最终需求。从开发周期来看,可以看出它是一种循环进化的过程,用户的参与和反馈,使得这种方法开发出来的系统能够更好地满足用户的需求。

但在实际中由于开发原型系统使用的语言效率低(指开发效率低,如java,效率高的如python)等原因,除了少数简单的事务系统外,大多数原型模型都废弃不用,仅把建立原型模型的过程当作帮助定义软件需求的一种手段。

瀑布模型的优缺点?

瀑布模型是一种线性模型,也称生命周期模型。

这种模型是将软件生存周期各个活动规定为依线性顺序连接的若干阶段的模型。它包括问题定义、可行性研究、需求分析、概要设计、详细设计、编码、测试和维护。它规定了由前至后、相互衔接的固定次序,恰如奔流不息拾级而下的瀑布。

目前,瀑布模型仍然是软件工程中应用的最广泛的过程模型。软件过程基本上可以用瀑布模型来描述,而且是以文档为驱动,适合于需求很明确的软件项目开发的模型。

瀑布模型,在促进软件开发工程化方面起了很大的作用。但是,按照瀑布模型来开发软件,只有当分析员能够做出准确的需求分析时,才能得到预期的正确结果。它是一种理想的线性开发模式,缺乏灵活性,特别是无法解决软件需求不明确或不准确的问题。由于大多数用户不熟悉计算机,系统分析员对用户领域的专业知识也往往不甚了解,因而很难在软件开发的初始阶段清楚地给出完整的需求。

如何理解软件危机?

软件危机的定义

“软件危机”是指在计算机软件的开发和维护过程中所遇到的一系列严重问题。软件危机主要包含了两方面的问题:一是如何开发软件以满足软件日益增长的需求;二是如何维护数量不断增长的已有软件。

软件危机表现形式

(1)对软件开发成本和研制进度的估计常常很不精确。经费预算经常突破,完成时间一拖再拖。这种现象降低了软件开发组织的信誉,而且有时为了赶进度和节约成本所采取的一些权宜之计又往往影响了软件产品的质量,从而不可避免地会引起用户的不满。

2)“已完成”的软件不能满足用户要求。软件开发人员常常在对用户需求只有模糊的了解,甚至对所要解决的问题还没有确切认识的情况下,就匆忙着手编写程序了。软件开发人员和用户又未能及时交换意见,使得一些问题不能得到及时解决,导致开发的软件不能满足用户要求,使得开发失败。

(3)软件产品质量差,可靠性得不到保证。软件质量保证技术(审查、复审和测试)还没有坚持不懈地应用到软件开发的全过程中,提交给用户的软件质量差,在运行中暴露大量问题。

(4)软件产品可维护性差,软件开发人员在开发过程中按各自的风格工作,各行其是,没有统一、公认的规范和完整规范的文档,发现问题后进行杂乱无章的修改。程序结构不好,运行时发现错误也很难修改,导致维护性差。

(5)软件成本在计算机系统总成本中所占的比例逐年上升。软件的发展跟不上硬件的发展。由于微电子技术的进步和生产自动化程度的不断提高,硬件成本逐年下降,然而软件开发需要大量人力,软件成本也随着通货膨胀以及软件规模和数量的不断扩大而持续上升。

(6)软件开发生产率提高的速度远远跟不上计算机应用速度普及深入的趋势。软件的发展跟不上用户的要求。软件产品“供不应求”的现象使人类不能充分利用现代计算机硬件提供的巨大潜力。

软件危机产生的原因

造成上述软件危机的原因与软件自身特点有关,也与软件开发人员在开发和维护时所采用的生产方式、方法、技术有关,可概括为以下几个方面。

(1)软件是计算机系统中的逻辑部件。软件产品往往规模庞大,结构复杂,这给软件的开发和维护带来客观的困难。

(2)软件开发的管理困难。软件规模大、结构复杂,又具有无形性,这导致管理困难,进度控制困难,质量控制困难,可靠性无法保证。

(3)软件开发费用不断增加,维护费用急剧上升,直接威胁计算机应用的扩大。

(4)软件开发技术落后。在20世纪60年代,人们注重如编译原理、操作系统原理、数据库原理等一些计算机理论问题的研究,而不注重软件开发技术的研究,用户要求的软件复杂性与软件技术解决复杂性的能力不相适应。

(5)生产方式落后。有人统计,硬件的性能价格比在过去30年中增长了10^6。一种新器件的出现,其性能较旧器件提高,价格反而有所下降,而软件则相形见绌。软件规模与复杂性增长了几个数量级,但生产方式仍然采用个体手工方式开发,根据个人习惯爱好工作,无章可循,无规范可依靠,带有很强的“个性化”特征的程序,因缺乏文档而根本不能维护,加剧了供需之间的矛盾。

(6)开发工具落后,生产效率提高缓慢。软件开发工具趋于原始,没有出现高效率的开发工具,因而软件生产效率低下。还有软件开发人员忽视需求分析的重要性,轻视软件维护也是造成软件危机的原因。

解决软件危机途径

目前,计算机的应用日益广泛,世界上发达国家的许多企业将全部投资的10%以上用于计算机领域。但到目前为止,计算机的体系结构在硬件上仍然是冯·诺依曼计算机。实际中复杂、庞大的问题,只能由专门人员编制软件来解决。假设计算机能实现智能化,能进行推理和运算,正确解决用户所提出的问题,那么软件危机就会有根本性的缓解。然而新一代计算机体系结构的研制可能还需要一段时间。那么在目前计算机硬件条件下,要想解决软件危机必须解决以下问题。

(1)首先应该对计算机软件有一个正确的认识,彻底清除“软件就是程序”的错误观念。

(2)要使用好的开发技术和方法,并且要不断研究探索更好更有效的技术和方法。尽快消除在计算机系统早期发展阶段形成的一些错误观念和做法。

(3)要有良好的组织、严密的管理,各类人员要相互配合,共同完成任务。充分认识软件开发不是某种个体劳动的神秘技巧。

(4)应该开发和使用好的软件工具。正如机械工具可以“放大”人类的体力一样,软件工具也可以“放大”人类的智力,从而可以有效提高软件生产率。

软件系统开发与制造一台机器或建造一栋大厦有许多相同之处,所以要采用“工程化”的思想做指导来解决软件研究中面临的困难和混乱,从而走出软件危机的困境。

软件工程 软件的特点

答案:

  1. 软件是一种逻辑产品,没有物理实体,可以把它保存在存储体中,但无法观察到它本身的形态、功能以及作用
  2. 软件产品的生产没有明显的制造过程,软件开发完成后可以大量的复制。
  3. 软件产品在使用过程中,不存在磨损、消耗、老化等问题。但软件在运行时,为了适应软件硬件、环境以及需求的变化而进行修改,优化。
  4. 软件产品的开发主要是脑力劳动,还未完全摆脱手工开发方式,大部分产品是“定做的”,生产效率低。
  5. 软件产品的成本相当昂贵,软件费用不断增加,软件的研制需要投入大量的人力、物力和资金,生产过程中还需对产品进行质量控制,对每件产品进行严格的检验
  6. 软件对硬件和环境有不同程度的依赖性,为了减少这种依赖性,在软件开发中提出了软件的可移植性问题。
  7. 软件是复杂的。软件是人类有史以来生产的复杂度最高的工业产品,软件是一个庞大的逻辑系统。软件开发,尤其是应用软件的开发常常涉及其他领域的专门知识,这就对软件开发人员提出了很高的要求。