当我2004年大学毕业时,我们的城市几乎没有开发团队。在哪里工作,从谁那里获得实践经验?
选择很简单:“管理员”或“去莫斯科”。或离开专业。
现在,我在当地的大学教授网络开发,我管理着一个庞大的团队,对我来说重要的是,聪明的年轻人想住在我的城市,这样我们的城市就不会被视为“烂摊子”。
文章的精髓很简短
我和我的同事们知道如何使Web程序员从“几乎零”增长到自信的专业人员(高级/架构师)的水平。
我们想告诉您一切工作原理,并与社区共享材料和方法。
本文是为学生,初学者和成长中的Web开发人员编写的。
下面介绍了“ Web开发人员的发展轨迹”,能力水平(见习人员),“初级”,“中级”,“高级”和“建筑师”,并给出了认证任务的示例。
程序员能力的金字塔或“一开始要下载什么”
如何成为一名优秀的Web程序员?我需要在一所好的大学完成“计算机科学”课程吗?还是每月的课程就足够了?还是“用书和鼠标”可以学习一切?
算法,数据库和编程本身(语言+ OOP +模式)是任何技术堆栈上的任何开发人员所遵循的三个“支柱”。
什么是算法化?
风扇维修是与“算法”技术技能最接近的“日常”类比。如果不旋转怎么办?检查/更换插座,然后用手转动刀片,然后“环”住电线。
逻辑很明显:“我分为几部分,并逐一检查。” 令人惊讶的是,许多人不知道该怎么想。这是真正的程序员的血液。
数据库
DB课程是主要课程之一,就像工程师的物理学一样。坏消息是,它们经常在同等的情况下受到不良的教导:它们被简化为“重述段落”。
理论和实践在DB中都很重要。程序员必须能够编写查询,理解ORM逻辑并设计结构。
程序员需要知道哪些技术?
开发人员的专业素养由什么组成?古典发展道路(从大学开始)显示了大概的发展时间。
在学校/大学中,“根据思想”教授算法。这需要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继续在站点上工作:
- 制作一个迷你管理面板:
- 提交的反馈表清单;
- 清单必须按提交日期排序,新的-首先;
- 该列表可以“更新”,这是使用AJAX完成的;
- 提示:要进行数据库查询的交互式测试,请使用PhpStorm中的数据库控制台;
- 提交的表单可以从管理面板中全部通过AJAX删除;
- 以这种方式演示了连接JS的所有方法;
- 可以编辑提交的数据(使用已经开发的表单,不使用AJAX);
- 可以使用jQuery。
- 打开开发人员工具(最好是Firefox):
- 从请求日志中找到请求的来源;
- 设置断点,激发代码执行,检查逐步的代码执行;
- 在逐步执行过程中,通过相应的检查器查看变量的值;
- 添加手表
- 使用控制台访问当前作用域中的变量。
验证:
- 检查php,js,css分解的质量;
- 突出显示并建立MVC / ECB组件之间正确依赖关系的能力;
- 安全(访问);
- 安全性(XSS,SQL注入);
- 编码风格的统一;
- 演示使用开发人员工具的所有要点。
这是“中等难度”
任务10的示例。Web爬网
能力:
- 常用表达
- 来自服务器的HTTP请求cURL
- TODO:基于Bitrix Framework代码库编写控制台实用程序(和一次性脚本)
- 待办事项:添加CRON
精华:
- 分析站点,考虑适合自动处理的数据结构
- 将网站解析为这些结构
- 设计为CLI脚本
- 设置以实现不仅解析所有内容,而且仅解析用户需求的功能
验证:
- CLI环境的正确性
- 正则表达式分解
- 要求的成本效益
- 错误处理
- 一次并行解析多个对象的可能性
- 在控制台和交互模式下工作
- *以可通过HTTP访问的外部服务模式工作,并支持队列
查看和下载能力矩阵-2020年,
我敢肯定,这是在有导师和不断进行代码审查的情况下,通过一系列认证逐步使合适的开发人员“从受训者到建筑师”发展的方式。
钻石在压力下形成。