编程从哪里开始?

图片


从前,我们开发了一个高级平台来开发lsFusion业务应用程序。 剩下的唯一一件事就是找到要写的人。 决定在求职网站上发布工作。 但是出现了一个问题:什么是职位或职业。

在复杂性方面,平台语言与SQL的区别不大,SQL最初不是为程序员而是为业务用户创建的。 因此,我们还决定指定“业务分析师”作为职位。

我们建议申请人解决一个相对简单的测试任务,其中有必要稍微简化一个简单的示例。 有人这样做了,但许多人愤怒地发出来信,例如:“您是在寻找程序员还是业务分析师?”

结果,我们找到了所需的人员,但是在分析这种经验时,我不由自主地想知道:业务分析从哪里结束并开始编程?

当我刚大学毕业时,我有一个朋友,他已经在一家大型外包公司当过程序员。 一切都是成人-除了程序员之外,还有业务分析师和测试人员。 然后,我对他们如何构建那里的一切非常感兴趣,尤其是业务分析师的工作。 关于他如何与他们互动的问题,大约收到了以下回答:“他们给我寄了一些图表,各种文件。 无论如何,我还是不会阅读它们,然后立即将它们删除。” 显然,他有点虚伪,他在看东西。

现在,通过阅读大量的各种技术任务和规范,我了解了这种“业务分析”的主要问题:论文将承受一切。 这是分析和编程之间的主要区别。 在纸上,您可以编写完全矛盾的条件,指出绝对抽象的要求,例如“我希望它很好”,使它们美观,并假定工作已完成。 在编程中,这种技巧不起作用-一切都应该清楚。 因此,开发人员通常可以阻止客户执行任何功能,只需不断指出矛盾之处并要求弄清需求即可。 而客户只有在实际上由程序员完成工作的情况下才能这样做。

程序员似乎不得不编写程序。 什么可以视为程序? 理论上使用的形式主义之一是图灵机。 这是您可以用来描述算法的最简单的计算机。 反过来,这表明程序的属性之一是必须的。 该程序具有状态和执行过程。 SQL的主要特征之一是其声明性。 假定普通人会使用它,因为他们不必编写“程序”,而是用SQL描述他们想要得到什么。

小时候,我有机会下棋。 现在我了解到我绝对不了解位置游戏的基本原理。 但是,我能够很好地计算出许多前进的位置。 我一直试图“打开”游戏并仅仅由于各种组合而进一步获胜,而对手则认为我更糟。 实际上,我只是在脑海中调试器,它可以移动并在手表中表示当前在板上的位置。 实际上,我的演奏就像一台简单的计算机。 尽管如此,在上课的第一年,我还是以同龄人的身份完成了成人组的第一个名次,并进入了白俄罗斯锦标赛的前三名。 这很有趣,但是国际象棋使用与编程相同的技能。 位置游戏是建筑设计。 战术游戏-调试程序。

通过在lsFusion中教人们编程,我得出的结论是,命令式逻辑对于普通人而言比声明式更难理解。 计算许多前进的情况不是一个人在日常生活中使用的基本技能。 他必须牢记状态,并能够在每个步骤中进行更改。 同时,每个人都必须定期制定自己想要的东西,这是一种“声明式编程”。

声明式存在于其他工具中。 例如,在Excel中,您可以使用公式来构建某些逻辑。 我曾经有机会看到几乎整个信息系统都以Excel公式的形式编写,并带有必要的Visual Basic代码。 这些人是程序员,还是高级商业智能?

如果我们考虑开发中当前使用的语言和技术的堆栈,则可以将其分为几个级别(就像网络协议堆栈一样)。 在它们每个上添加了一些新内容:

  1. 汇编器。 面向机器的语言。
  2. C.程序语言。
  3. C ++。 面向对象程序设计
  4. Java / C#/ Python等。 虚拟机和托管内存。
  5. 1C /访问/ SAP NetWeaver等 这里从开发人员的麻烦中删除了对内存,磁盘,网络和其他细节的管理。 您需要专门考虑业务逻辑。 lsFusion被定位在此级别的某个平台上。

每个下一个技术都是在较低级别的技术的基础上编写的。 从理论上讲,那些写作水平较低的人将能够以更高的水平写作。 当然,这并不意味着他们会尽可能有效地做到这一点。 创造汽车的工程师不会是世界上最好的赛车手,但他们必须能够以某种方式驾驶它们。 相反,这是行不通的。

通常,基于这个原因,开发人员通常会尊重使用低级技术的人员,而鄙视那些使用高级技术的人员。 我还没到汇编程序开发人员讨厌开瓶器的那段时间。 但是我也记得西什尼科夫,他认为C ++来自邪恶的人。 一些C ++开发人员仍然认为Java开发人员不是程序员,因为他们实际上并不管理内存,因此Java程序需要大量额外的内存。 好吧,当然,前四个级别的所有开发人员都鄙视1C编程器,这在有胡子的轶事中得到了最好的体现:

图片


但是,这可能是由于与前四个技术和lsFusion不同,第五级技术已关闭并已付费。 它们用于血腥的企业,它是按事物顺序排列的。 因此,他们不喜欢整个生态系统,但同时喜欢其中的开发人员。

值得注意的是,在第五级中,存在诸如SQL和HTML + CSS这样的高级和声明性语言。 顺便说一下,SQL开发人员更忠于SQL开发人员。 与同一个同时处理数据库,后端和前端的1C程序员相反,最有可能的是,由于他们与他们一起工作,解决了一个单独的任务块。

公平地说,类似的情况不仅存在于编程中。 例如,有很多人只在机械变速箱上驾驶,对自动变速箱极为反对。 他们认为机器不能高效地换档,而手动操作可以做得更好(通常是这样)。 另一件事是,大多数人仍然愿意为了平常的方便而牺牲效率,可靠性和增加的燃料消耗。 就像在编程中一样,有些人根本无法驾驶机械师,因为他们没有足够的协调能力来快速换挡并踩下必要的踏板。

确实需要注意的是,具有自动变速箱的驾驶员可以切换到手动模式。 同样,您可以在C中嵌入汇编代码,也可以在lsFusion中下一层并编写Java代码。

技术水平越高,说明性就越高,当务之急就越少。 您可以将这些级别视为一个比例,“机器”位于底部,“用户”或“企业”位于顶部。 当您从底部移到顶部时,可以相信编程越来越少。 也许在这条线上的某个地方,编程成为业务分析是很有意义的。

我们为什么不寻找已经完成的程序员? 至少有几个原因。

首先,他们已经拥有某种与之合作的技术栈。 尽管行业相对创新,但是大多数程序员还是保守主义者(尽管当然不是全部)。 没有炒作,他们将不会学到未知的技术,对此没有需求(即使是暂时的)。 当任何人改变工作领域时,他都会自动“失去价值”。 因此,从心理上讲,放弃所学知识并开始学习新知识是困难的。

其次,与在Java,.Net和Python等低级平台上进行开发相比,在lsFusion平台上进行开发以及在1C上进行开发确实更接近于业务分析。 还有其他任务,问题和方法。

但是主要原因之一是经济。 在白俄罗斯,人们不寻求成为官员和安全官员。 在这里,作为传道人,您不能将狗带上自己的飞机去参加任何展览,或者朝相反的方向喝醉。 橱窗装饰不受欢迎,许多官员偶尔被监禁,然后被释放去领导集体农场。 我们也没有依靠自然资源为生的公司,因此我们成为石油工人的梦想也注定不会实现。 几乎任何市场都足够小,并且通常已经分裂了。 因此,新商人的空间也很小。

在此背景下,IT领域脱颖而出。 最好在下图中看到:

图片

如果我们排除极少数飞行员和一些财务顾问的领域,事实证明,程序员的平均收入是其他高薪领域员工的三倍半。 如果与国有雇员进行比较,差异将是七倍。

白俄罗斯程序员工作的另一个好处是稳定性。 由于本地市场很小,因此大多数公司都在西方市场上运营。 因此,通常,所有程序员的工资都以外币计价。 这就是为什么6月与上半年相比有所下降的原因-卢布升值了。 在一个本国货币兑世界货币不断贬值的国家,美元和欧元的薪金被认为是稳定与安宁的关键。 该国人民被许多人视为“生活的主人”。 他们是大多数市场中昂贵部分的主要消费者。 许多父母将他们的孩子送入编程圈,这是有关部门的最高竞赛。

白俄罗斯的“进入IT”趋势蓬勃发展也就不足为奇了。 我们决定利用此优势,并尝试聘请其他专业人士,教他们如何在lsFusion上发展。 顺便说一下,现在我们有lsFusion开发人员为前销售经理,系统管理员,经济学家,ERP系统顾问等工作。

我们在白俄罗斯最大的信息资源的首页上放置了一个付费广告。 它考虑到了工作现场的错误,并表明我们不是在寻找商业智能,而是没有工作经验的开发人员。 为了获得最佳动力,他们明确指出了与IT行业相对应的潜在薪酬来源。

由于我们只需要很少的人,并且会有很多人想要,所以我们知道需要以某种方式甄选候选人。 我们选择了最简单的方案:您需要以排名为例,并对其进行完善,以便对于比赛,分数不是手动确定的,而是根据用户必须输入的得分目标确定的。 为了不打扰每个候选人并且不浪费他们的时间,我们在公告中直接指出需要解决此问题的方法。

为了解决该问题,需要下载并安装平台(安装程序在站点上),从那里的示例连接代码并在IDE中进行修复。 我们的任何lsFusion开发人员都将花费大约15分钟的时间,而普通的程序员最多将花费3个小时来理解示例,下载,运行和解决问题,因为该解决方案不需要平台的额外知识。 一切都通过类比于现有逻辑完成。

据统计,该公告已经打开,有成千上万的人阅读。 测试任务本身(在单独的链接上)被数千人读取。 大约有400人下载了该平台(然后是一个1.5GB的文件,其中包括IDEA,Java和PostgreSQL)。 四十个人送了一些东西。 其中,约有十个人有适当的解决方案。 在这些人中,我们选择了要雇用的人。

在这个故事中我无法理解的是人们所缺乏的:动力或能力。 毕竟,如果某人从事一份低薪工作,这并不能使他感到高兴,那么,这将使他无法花几个小时来理解和解决问题。 从一开始,我们就提供了很高的薪水,远远不是用其他语言支付给所有初级开发人员。 也许很多人都遵循“我去找程序员,让我教你”的原则。 实际上,在我们国家,我们已经有很多人参加了许多收费课程,他们并不了解自我教育在编程中的重要性。

但是也许问题出在能力上。 为了开始编程,需要一项基本技能:分析性思维。 我的意思是说,有能力区别私人(一般)(归纳),反之亦然(扣除)。 这种能力是在相对较少的人中开发的,但是没有它,可惜,不是一个好的程序员。 此外,如果您以某种方式衡量分析思维并建立依赖于具有该技能的人数的图表,那么您就会夸张。 也就是说,进入技术的门槛越低,可以克服的人就越多。

分析性思维的问题在于它是无法学习的。 它形成于一个很小的地方,成年人不再能够改变某些东西。 我们已经通过了技术科学的试用期候选人。 但是,他无法实现简单的域逻辑。 该男子在晚上在家工作,但每次他只需要做一个类比的工作,他就无法应付。 目前尚不清楚他如何捍卫候选人。 但是,它表明在日常生活中没有必要进行分析性思考。 在许多专业中,不需要特别要求此技能。

当他们问我用什么技术开始编程的道路时,我回答:从SQL开始。 无论如何,他的知识不会受到损害,并且学习基本功能(SELECT / JOIN / UNION)的时间不超过一天。 接下来,您需要尝试解决Internet上的问题。 它无法解决-因此您根本不应该从编程开始。 如果可以解决问题,那么至少1C或lsFusion可以成为程序员。 然后,如何进行。

结论


当然,文章标题中的问题是修辞。 编程的概念是主观的,并且取决于特定人的观点。 所有人都在某种程度上从事编程。 例如,当他们只是在温暖的地板的恒温器中设置设置,或在Google文档中使用公式创建表格时。 但是,不同级别的技术具有不同的准入门槛。 技术水平越高,我可以编程的人就越多。 在此过程中,真正的编程实际上变得越来越小。 我只是希望这不会成为其他开发人员鄙视的主题。

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


All Articles