Lida沉默的是:开发人员职业的开始。 原理或如何成为Middl

你好 编程是一个复杂的主题, 工业软件开发非常复杂。 在我们的IT行业中,很少听到来自初级同事的“我如何发展?”系列中的问题,“我应该怎么做才能尽快成为高级专业人员?”,“如果我不能发展,我应该怎么做,但是没有有趣的项目?”,“中间人应该知道些什么?”。 如果您具有0到3年的IT经验,那么您是一名初学者(或即将成为一名专家),并且为职业和职业发展设定了相似的目标,并且正在寻找实现这些目标的正确方法-此职位对您来说很好在猫下抱怨。 总体而言,也许他也会引起团队领导者和经理的兴趣,所有参与专家培训和发展的人员也可能会对他感兴趣。


首先,让我自我介绍。 我的名字叫Anatoly,如果省略职位和职务,那么我首先是一名开发人员,因为从广义上讲,我在整个职业生涯中一直从事开发人员的开发,研究和管理。 我的行业经验超过10年。 它非常多样化,并且从金融系统和网站扩展到产品,算法和机器学习系统。 但是,在我看来,主要的事情是,我本人代替了本文的目标读者,随后开始从事年轻程序员开发的各个方面。 目前,共有超过2打的初级开发人员和实习生通过了我。 因此,我相信我有话要说。 在所讨论的问题上可以找到的大量材料专门用于纯粹的技术主题,或者例如盲目地遵循Scrum。 (例如-“如果您不知道该怎么做,请尝试进行Scrum操作,一切都会受到伤害” :)。 因此,考虑到要写些什么之后,我决定不再重复这些信息,而是将重点放在写或谈论不多的主题上。 走吧


是的,作为免责声明 ,我想说的是我的个人观点,并由经验和理论知识所证实,这些经验和理论知识已经在这种经验上得到了检验。 它可能与您所处的现实不符,因此,让我立即为您提供本文的第一条提示:首先,在任何困难的情况下,在应用您所知的任何实践和模式(例如“如果,然后。” 细节非常重要。 现在开始吧! :)


1.广义专业与狭义专业


通常,那些只想学习编程的人会问自己,要选择哪种技术进行学习,实际上,用什么语言来概括地说,“编写代码更好”。 获得第一份工作的人们正在考虑,他们的当前技术在未来两年甚至更长时间内是否有希望和需求。 (有些-他们根本不认为,但这通常是不好的)。“ 更好 ”和“更有希望 ”在这里是非常主观的概念,定义在感觉水平和对进一步职业可能带来的好处上。 很快,对于IT新手来说,很明显,许多项目都是使用足够多的技术完成的,不可能一无所知。 那么有必要追逐所有的野兔吗?


例如,在第一年的工作中,我收到了团队负责人的宝贵意见,认为有必要专注于某个特定领域,因为专家要么是某个领域的专家,要么可以说不是任何领域的专家。 要以较高的水平了解某些内容,您需要不断地并深入地研究细节-纯粹的事实,因此很难与之争论。 实际上,实践证明了这一点:我认识的大多数专家(可以这样认为)都是狭are的专家。 他们中的一些人只是很清楚地了解他们的主题,因此解决了其中前所未有的陡峭问题。 在这一点上,人们可能会说:“好吧,这意味着原理是正确的-一切都融合在一起”,如果不是那么简单的话。 事实是,与这样一个范围广泛的专家相比,需求如此狭窄的专家的项目范围要窄得多。 我已经不止一次地遇到过这样的项目,即如果没有同时获得多种技术的广泛知识,就根本不可能参与。 拥有这些知识的人发现了新的,有时无法接近的门。 参与出色而独特的项目是一项非常认真和有用的职业考验,可以带给您很多宝贵的经验和其他好处。 第二个要点是,技术世界在不断变化,并严格限制自己对一种或两种技术或PL的了解,您自然会开始失去竞争优势而成为抢手的专家。


简而言之,我们可以简短地说一遍:不要害怕尝试您喜欢的技术! 您可能不会立即成为3种编程语言或5种框架的专家,但是如果他们的基本知识和内部结构都相等,那么您获得的工作就需要对一种技术和基本的其他几个。 这里最主要的是度量和限制。 重要的是要清楚地确定您在大部分时间里花费在学习什么技术上的先后次序,以及剩下的什么才能学到哪种技术。


2.功能区


从编程语言和开发技术的专业化,我们可以顺利地进入下一个重要的领域- 功能领域 。 从生活中举一个例子很容易:就像医生有牙医,心脏病专家一样,开发人员也有专门的知识,这不仅涉及上述技术或编程语言。 开发人员以不同的方式专门化:有人处理用户界面,有人处理集群上的数据,有人识别图像以及有人为游戏机器人编写逻辑。 很多例子。


也许在工作的头两年甚至更长的时间里,您就不会对专业化问题感到困扰,因为进入您所从事的项目和技术将花费大量时间,并且这个问题自然就不会涉及到。 但是,从某个时刻开始,您将可以轻松地解决某个领域中越来越复杂的问题,并且结果将以多种方式确定,而不是取决于详细程度,例如,您知道该语言所使用的标准库的程度。您的工作,或者您对PL的高级语法的掌握程度以及您在特定功能领域的经验。 计算机图形学,计算机语言学,财务编程-所有这些都是学习的特定领域,并且需要花费数月和数年的实践经验。 如果您设定了成为高级专家的目标,请找到您真正喜欢的领域。 而且,如果您真的喜欢它-乐在其中开发和工作,一切都会成功!


3.导师和自学


没有两个完全相同的项目。 没有相同的团队。 有时,没有一个单一的正确解决方案,这是对系统大部分结构的全局决策,还是对在存储库中存储文件的本地决策。 新手专家面临许多问题和疑问。 由于缺乏经验而无法立即回答的问题。 您有现成的代码,尽管其他同事都很好,但是它根本不起作用。 在6种情况中,有1种的服务安装过程以错误结束-至少杀死了自己,但不清楚原因; 您无法配置服务的网络部分,尽管您已按照说明进行了所有操作并已将其重读7次。 对于开发人员,测试人员和管理员来说,这种情况经常出现。 问题的难易程度可以从“可能需要在某个地方挖掘”到“在哪里挖掘-尚不清楚”的级别。 经验丰富的专业人员(您可能已经从他们那里听到过)众所周知并给出的第一条建议是,当您陷入困境时,您需要学习如何尽可能独立地解决问题。 通常,为此,必须专注于因果关系,并学习提出有关该问题的正确问题。 首先是他本人,其次是Google。 这不仅是“一切都不起作用”,即使您确定,也应尝试“从头开始”以找出问题的真正原因。 而且,很可能您不是唯一一个遇到类似问题的人,只需对其进行搜索并亲自查看。 此外,下面的简单建议是:仅在您进行了几次不成功的尝试并自己分析了问题,花费了大量时间(通常以小时为单位,有时以几天为单位)之后,才与高级同事联系。 因此,您不会花费他们宝贵的时间来解决胡说八道的问题,您自己可以使用很多毅力轻松解决。 这样,您将证明您已开发出解决问题的正确方法。 乍看之下,从字面上看5分钟就可以解决许多看似复杂而难以理解的问题。


但是讲话很容易,但是实际上对开发技术的知识不足和缺乏实践经验将是一个非常痛苦的因素。 因此,正确的任务1是研究开发技术及其在相当密集的模式下使用它们的示例。 再说一遍:说起来很容易,但是实际上有更多的dofig培训材料,不是所有人都可以理解的,不是所有人都相关的,不是所有人都涵盖了在项目实践中必须解决的问题。 在这里, 环境可以为您提供帮助。 加入一个不仅拥有高水平知识,而且还愿意熟练地分享这些知识的“专家”团队,这是职业生涯初期的最佳选择。 是的,没错,您首先应该专注于自学,但是无论哪种方式,您都将拥有自然的速度上限。 称职的导师将帮助您克服困难。 但是,在求助于他们之前,先问自己一个问题:您确定会陷入困境,并且不能至少一步步独立地解决问题吗?


总计:找一份工作,那里的人知道这个主题,并且有兴趣让您更好地了解它! 这将使您在相当短的时间内显着提高专业知识水平。 避开您根本不准备分享知识的地方。 在这样一个地方工作4年等于在另一个地方工作2年(或更少)。


4.没有银弹


IT行业的工作是不断的对话,辩论,有时是意见斗争,有时是原则战争。 相信我,您会遇到很多人,他们会说服您,他们只有最正确的决定或观点,才可以用事实来支持或不支持。 有时候,这种感觉也会让您失望!


是否准时完成任务? 哪个更好:任务C是技术A还是技术B? 根据什么方法开发项目和组织工作流程值得? 编写的代码是否足够好,是时候停止完善它了,还是仍然需要重构? 您是否有机会从一开始就扩展系统,即使不期望扩展,也看不到初级开发人员的整体情况? 如何评估产品质量以及开发人员在此过程中扮演什么角色? 一打或两个不同的类似问题。


通常,在特定情况下不可能对这些问题和许多其他问题给出明确的解决方案。 我希望拥有它,但是有时它在客观上根本不可见,因为项目的不确定性水平可能很高。 从某种意义上说,这与编程中广泛接受的一种不言而喻的文化背道而驰:不断寻求并使用更先进的技术提供更好的解决方案。 我们不断本能地强迫自己根据不完整的数据做出决策。


在这里,编程的缩影和IT项目的大规模开发已经不再是任意精确的学科,而是开始成为艺术。 艺术是建立在原则和方法之上的,它是由它们决定的。


完成下一个项目或不太繁重的任务后,请回顾并分析:哪些原则帮助该任务或该项目取得了成功(反之亦然-保持联系)? 是选择哪种编程语言,以及它如何出色地工作,还是与客户或合作伙伴的互动水平如此之好,以至于您可以在大多数时间处理任务而又不浪费时间呢?通讯费用? 不断地分析,寻找新的原则,并与导师协商如何看待和定义这些原则。


5.关于大小公司,关于IT,而不是IT


许多年轻的专业人​​士想为他们听说过的公司以及使用过哪些产品的公司工作。 在某些苹果公司,谷歌公司或微软公司(最近出现了一个好称呼-“ Guyandbuk”)或他们的俄罗斯公司(尽可能多)。 在大公司里开始职业生涯是非常非常宝贵的经验。 (您非常有经验的第11年就明白了这一点:))要了解大型公司的内部运作方式以及内部流程的组织方式-相信我,这是值得的。 在我的职业生涯初期,我很难想象有比一家大型IT公司和一支精明的团队更好的东西。 但是,总有BUT。


首先要说明的是,“大型IT公司”与仅是“大型公司”(特别是在俄罗斯现实中)大不相同。 如果可以选择,请访问中小型IT公司或大型非IT公司(例如,银行或其他金融或贸易公司),您应该了解可能的后果。 而在最坏的情况下,后果将是:如果IT公司关闭或您想离开它,那么您将拥有知识和原则。 如果您不想离开一家IT公司,而是出于种种原因,这将使其变得更加困难。 这可能是因为缺乏必要和相关的经验,以及项目的特殊性以及招聘人员对您过去的工作的挑剔(请记住,皮尔森·哈德曼(Pearson Hardman)公司来自哈佛的一个著名系列。这种情况并不少见,而且实际上。来自食品公司”等)。 在那些IT不是主要业务类型的公司中,一切实际上都围绕着该业务。 结果非常重要,而实现它的过程则不那么重要。 但是,正确的过程确定了正确的原则,然后才可以帮助您做出决策,并在相当复杂的项目输出中产生非常高质量和复杂的内容。 如果您生产高质量和有用的产品-这是您的目标,请考虑一下。


6.食品和外包公司


自从我从事第一和第二工作以来,这是我最喜欢的主题之一。 继续挑剔的话题,业内人士普遍认为,在食品IT公司工作不仅享有盛誉,而且在财务上也很重要,而且还提供了一系列您可以找到的最有趣的项目。 一些专家认为,按订单进行项目外包工作属于下层阶级。 这是真的吗?


我会回答:不。 没那么简单。


食品公司的主要优势在于,来到这里的人实际上有机会选择一个项目/产品或活动领域,由此产生的所有后果(例如,从事真正独特而复杂的任务的能力)。 主要后果之一:您将开发自己的产品,使它每天变得更好。 它不会总是简单地按照您想要的方式运行,但这就是您的产品。 至少在您的水平上,您会极大地影响他的成功。


通常,在外包公司中,员工没有选择的余地,而且,因此,他被周期性地强迫坐下。 集成商和外包商都参与了他们在这里和现在付钱的那些项目。 并非所有此类项目都对某些类别的程序员感兴趣。 对于外包公司的员工而言,始终存在着绝对毫无兴趣且停滞不前的项目的风险,而且通常,更改项目的唯一方法是离开公司。
— legacy ( ), . — . 5 . , , , .


7. vs


. : . , . , , . , – . , ( ) , . , , , . , . , , () () . . ? – . – . , , 2 : ) ) ( ). : , . , . , , , , , . – .


: - ( - ) , - . - , ( — , ) – .


8.


. , , - . - , . , , , . . . , . , . — . .


— , , , , . , , , , ( ), : , — , , .
? , ? .


, ? : , , , , , , , .


9.


(, ) , backend . (, Web , ). - . , ? , . , . , — . — . , . : , , . . , . , , . . , : , , UX/UI — , , , , .


10.


: . . - : , .


, , . : 1.5-2 . , , , , . . , 1-2 , - . — 4 , ? : , B. , . , , . , . , , — , , . , , , , .


: 1-3 , , . : skills 3 — 1. , — 2. — 3. , , , , 4 , , .


结论


— , , . , . , , — . . , , ! , : ) hard skills ) c ) . , !


PS:作者很乐意批评和评论评论和惠普中的文章。特别是如果您喜欢这篇文章及其主题,请在接下来的文章中写下您想阅读的相关主题。

Source: https://habr.com/ru/post/zh-CN424887/


All Articles