如何使Web开发人员从实习生成长为架构师。能力矩阵

代替题词

当我2004年大学毕业时,我们的城市几乎没有开发团队。在哪里工作,从谁那里获得实践经验?



选择很简单:“管理员”或“去莫斯科”。或离开专业。



现在,我在当地的大学教授网络开发,我管理着一个庞大的团队,对我来说重要的是,聪明的年轻人想住在我的城市,这样我们的城市就不会被视为“烂摊子”。


文章的精髓很简短



我和我的同事们知道如何使Web程序员从“几乎零”增长到自信的专业人员(高级/架构师)的水平。



我们想告诉您一切工作原理,并与社区共享材料和方法。



本文是为学生,初学者和成长中的Web开发人员编写的。



下面介绍了“ Web开发人员的发展轨迹”,能力水平(见习人员),“初级”,“中级”,“高级”和“建筑师”,并给出了认证任务的示例。



程序员能力的金字塔或“一开始要下载什么”



如何成为一名优秀的Web程序员?我需要在一所好的大学完成“计算机科学”课程吗?还是每月的课程就足够了?还是“用书和鼠标”可以学习一切?



算法,数据库和编程本身(语言+ OOP +模式)是任何技术堆栈上的任何开发人员所遵循的三个“支柱”。



图片

什么是算法化?



风扇维修是与“算法”技术技能最接近的“日常”类比。如果不旋转怎么办?检查/更换插座,然后用手转动刀片,然后“环”住电线。



逻辑很明显:“我分为几部分,并逐一检查。” 令人惊讶的是,许多人不知道该怎么想。这是真正的程序员的血液。



数据库



DB课程是主要课程之一,就像工程师的物理学一样。坏消息是,它们经常在同等的情况下受到不良的教导:它们被简化为“重述段落”。



理论和实践在DB中都很重要。程序员必须能够编写查询,理解ORM逻辑并设计结构。



程序员需要知道哪些技术?



开发人员的专业素养由什么组成?古典发展道路(从大学开始)显示了大概的发展时间。



Pyramid.png



在学校/大学中,“根据思想”教授算法。这需要1-2年的时间,这个时间段决定了未来专业起飞的高度。如果您不掌握算法,那么您将永远不会长大。



可以很快地学习特定语言的特性。如果您要学习第二语言或第三语言,则一周之内就可以解决第一个有意义的问题。但是“我完全知道”将需要至少一年的实践。



框架通常包括数百个模块/类/扩展,并且在不断发展。掌握框架至少需要几个月。



许多自学成才的人遵循“简单”但错误的道路:他们开始学习框架而不是算法。几个月后,从业者宣布可以编程。他们在开始后10分钟内未通过认真的面试。



特定技术(例如AJAX,服务器端JS渲染,推和拉,跨地理集群的负载平衡,在xhprof中分析长查询,消息队列,NoSQL数据库)是无止境的。您可以永远学习它们。



必须“自下而上”遍历该金字塔。如果您从框架开始并撰写了不错的简历,但不知道“裸JS”或“获取请求与发布有何不同”的工作方式,您将不是专家。



需要解决什么任务?



第一阶段是“开始”。首先,您需要自信地正确解决相对简单的问题的技能。最常见的是游戏,数学或逻辑问题。



对于技能“我快速编写简单的代码”,您需要解决任何编程语言中任何经典的编程问题。例如,Zlatopolsky。 







对于您解决1000个无聊的问题来说,这似乎很奇怪,但是每个优秀的程序员都在旅途的开始就做到了。有人-在研究所,有人在学校,我们的孩子会在幼儿园上课。



医生的这种教学方法称为“ lead w * py方法”。原谅我的无礼,但您不能抹杀民间美术中的文字。



第二阶段是“练习”。您需要编写可以在一年内解决的代码。这样,当出现新要求时,您不必从头开始重写所有内容。这样,当项目增长100倍时,它就会得到“支持”。这样,当他们向团队中添加程序员时,他们就不会因为奇怪的风格而咬你。



这是一个非常困难的过渡。许多程序员从不这样做:他们成为“一个程序”开发人员,或者他们总是编写不超过200行的项目。这不是专业水平。



要学习,您需要解决团队中的大问题并并行阅读正确的书籍。例如,罗伯特·马丁(Robert Martin)的“清洁代码”



“大任务”是人们使用的真实服务,其中团队至少由2个人组成,由数千行代码组成。这样的项目形成了一个自信的专家。



第三阶段是“掌握”。它涉及掌握所选技术堆栈中的特定框架。您必须学习高水平解决真正的现代问题。



一本更难更有用的书是Martin Fowler的《企业应用程序模式》在从事该行业大约一年半的工作后,还需要阅读它。



做什么的?我可以结束3个月的“网络开发人员”课程吗?



令人惊讶的是,经常有“像程序员一样”来采访。他们有课程,多项工作,有漂亮网站的投资组合(奇怪的方式,好像我们在寻找网页设计师一样)。



同时,人们通常不知道最简单的问题的答案,例如“什么是cookie”或“如何在VKontakte feed中加载消息”,他们甚至没有版本。



优秀的程序员知道该理论并将其应用到实践中,时时刻刻都在思考“如何正确地做它”。 “脊髓”和“从Google复制代码段”不会使您走远。您需要基础和练习。



如何获得这个“基础”?在哪里学习?有两种方法。第一个是在一所好的大学中的4-5年。第二是几年的坚持不懈的自学和实践。如果您有一个聪明的头脑,一个开放的心并且您自己准备好努力工作,那么您可以在没有专业教育的情况下成为一名强大的程序员。



短期课程对于获得基础知识和理解“在哪里挖掘自己”很有帮助。他们不会成为专业人士。



能力矩阵。实习生-初级-中级-高级-建筑师



我们认为我们的矩阵是对``如何从初学者到Web开发专家''这一问题的答案。

在我们的世界中,开发人员主要处理后端任务,但他不应该担心前端和管理(对于邪恶任务有专门的专家)。



此处提供带有示例认证问题的完整矩阵。



这是一个表格,分为年级(实习生,初中,中级,高级)。每个年级包含一组独特的能力。按专业领域(PHP,SQL,Frontend,一般的Web技术和服务器管理)分组问题



实习生



开始时,受训者必须能够:



  • 自信地将Cookie与会话区分开;
  • 了解正在服务器或浏览器中进行的特定操作;
  • 在没有服务器框架的情况下用PHP编写简单的数据管理任务。例如,“通过编辑,删除,创建和显示来维护团体和学生的数据库”;
  • 体面地安排工作结果。


学员正在学习。他的主要任务是获取知识,在监督下解决问题并取得重大成就。



几乎每个学员都删除了基地,错过了一个窗口,或者重新解决了一个长期存在的问题。当然,战斗项目无害。



错误是学习的正常部分。





初级



Junior能够自己解决问题。他经常向长辈咨询,但他所提出的问题根本不是实习生。





一开始,Junior实际上应该能够做什么:



  • 重写(这意味着要完全理解)网站上的授权;
  • 放心地编辑目录,新闻提要,表单的设置和框架代码;
  • 在框架上收集简单的数据管理界面和整个站点;
  • 与外部API编写简单的集成。


中间



Middle是可以自己解决任何典型行业问题的专家。





实际上,Middle一开始应该做的是:



  • 使用外部授权(通过外部提供程序登录或使您的代码成为授权提供程序);
  • 放心地对公共在线商店,市场或Intranet门户的界面进行编程(取决于具体情况);
  • 收集框架上复杂的数据管理接口和部分;
  • 与外部API编写复杂的集成,实现Web服务。


资深



年长者非常了解“他的知识”,乐于学习和应用新技术,并担任导师。







例如,在“使用服务器和Linux”这一块上,上级应该知道并且能够做些什么。



  • 建立非典型的推出系统
  • 使用微服务。
  • 负载测试的组织
  • 配置持续集成
  • 文件同步和数据复制
  • 使用和不使用Bitrix框架构建容错和高负载的集群。
  • ELK /其他日志记录和分析系统
  • Gearman / RabbitMQ队列服务器和构建分布式系统


通常,高级人员担任开发团队的技术负责人。



建筑师



当建筑师考虑大型项目的架构并领导其实施时,架构师是专家的下一个发展层次。他不仅是技术人员,还是项目经理。







这些专家在技术上和组织上复杂的项目中扮演着关键角色。



建筑师的素质决定了项目按时完成并连续多年发展的能力。



程序员开发管理



每个月,我们与每个程序员一起进行一次“开发计划会议”,并就其他有关工作的话题进行对话。涉及部门负责人,技术主管和/或指导者。



在这些会议中,我们共同确定了开发重点-通过实验室或口语能力考试。



级别检查(认证)如何安排?



什么是证明?这是确认程序员资格的过程。所有程序员都通过了它。认证包括实验室工作和口试。



作为证明的结果,“是”在能力矩阵中与已确认能力相对。这样可以提高等级,例如“ Trainee-54%”→“ Junior-27%”。







认证进展如何?



认证包括理论(口试)和实践(实验室工作)。目标是“关闭”矩阵中的几个能力,确定水平,获得新任务并增加薪水。



只有学习和理解理论,才能正确地进行实践练习。作弊和作弊是不被接受的,导师也不会错过黑客。



胜任力矩阵的许多部分都是通过实践来封闭的,并且在理论上没有问题。



理论。口语考试



实验室工作未涵盖的能力必须通过口试确认。



对于每项能力,我们会询问约5个问题。以友好的方式,您需要回答所有问题或几乎所有问题。口腔检查的持续时间取决于水平,通常为1-2小时。



实践。实验室工作



实验室工作一次涵盖多个能力。完成实验室工作后,这些能力被视为已确认,不属于口试。



实验室工作以报告结束。该报告可能包括演示,代码审查,口头问题。检查集取决于实验室本身。



任务的大致措辞



我们已经开发了大约20项任务(通常将其称为学生的“实验室工作”)。几个-我们将发布。



以下是一些简单任务的示例。



任务2a。“基本网络”。让我们在纯PHP中实现CRUD。



能力:



  • PHP:网站身份验证和授权
  • PHP:使用数据保存和验证处理反馈表
  • 前端:创建html表单
  • 前:CSS语法和选择器,了解选择器权重
  • SQL:Mysql基础
  • SQL:数据类型
  • PHP:PHP语言语法


精华:



  • 在bitbucket上创建一个存储库并在其中执行;
  • 立即提出分支并拉取请求;
  • 在PhpStorm中安装Statistic插件,整个项目的最大行数为1500:
  • 通过PhpStorm创建必要的表并向其中填充数据;
  • 制作认证页面;
  • 用反馈表单制作页面,该表单具有:文本字段,多行文本字段,单选按钮,复选框,下拉列表,表单重置按钮,表单提交按钮;
  • 反馈表仅适用于授权用户,准入条件是您已登录系统;
  • 一切都布置精美,显示了使用选择器基本类型的示例:id,class,attribute,pseudo-class,pseudo-element;
  • 两种形式都必须在没有JS的情况下进行处理;
  • 通过PhpStorm检查是否已将数据添加到表中。


验证:



  • 检查php,js,css分解的质量;
  • 在MVC / ECB组件之间分配职责并建立正确依赖关系的能力;
  • 安全(访问);
  • 安全性(XSS,SQL注入);
  • 重定向的正确性;
  • 编码风格的统一。








任务2b的任务开发用PHP开发CRUD接口。



能力:



  • 3种连接脚本的方法
  • 创建HTML表单
  • CSS语法和选择器,了解选择器权重
  • JS:运算符,函数
  • 使用浏览器控制台调试JS
  • MySQL基础
  • 资料类型


底线-我们从任务2a继续在站点上工作:



  1. 制作一个迷你管理面板:
  2. 提交的反馈表清单;
  3. 清单必须按提交日期排序,新的-首先;
  4. 该列表可以“更新”,这是使用AJAX完成的;
  5. 提示:要进行数据库查询的交互式测试,请使用PhpStorm中的数据库控制台;
  6. 提交的表单可以从管理面板中全部通过AJAX删除;
  7. 以这种方式演示了连接JS的所有方法;
  8. 可以编辑提交的数据(使用已经开发的表单,不使用AJAX);
  9. 可以使用jQuery。
  10. 打开开发人员工具(最好是Firefox):
  11. 从请求日志中找到请求的来源;
  12. 设置断点,激发代码执行,检查逐步的代码执行;
  13. 在逐步执行过程中,通过相应的检查器查看变量的值;
  14. 添加手表
  15. 使用控制台访问当前作用域中的变量。


验证:



  1. 检查php,js,css分解的质量;
  2. 突出显示并建立MVC / ECB组件之间正确依赖关系的能力;
  3. 安全(访问);
  4. 安全性(XSS,SQL注入);
  5. 编码风格的统一;
  6. 演示使用开发人员工具的所有要点。


这是“中等难度”



任务10的示例。Web爬网



能力:



  • 常用表达
  • 来自服务器的HTTP请求cURL
  • TODO:基于Bitrix Framework代码库编写控制台实用程序(和一次性脚本)
  • 待办事项:添加CRON


精华:



  • 分析站点,考虑适合自动处理的数据结构
  • 将网站解析为这些结构
  • 设计为CLI脚本
  • 设置以实现不仅解析所有内容,而且仅解析用户需求的功能


验证:



  • CLI环境的正确性
  • 正则表达式分解
  • 要求的成本效益
  • 错误处理
  • 一次并行解析多个对象的可能性
  • 在控制台和交互模式下工作
  • *以可通过HTTP访问的外部服务模式工作,并支持队列






查看和下载能力矩阵-2020年,



我敢肯定,这是在有导师和不断进行代码审查的情况下,通过一系列认证逐步使合适的开发人员“从受训者到建筑师”发展的方式。



钻石在压力下形成。



All Articles