热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

图像算法技能_企业是否关心算法技能?

图像算法技能算法是每次面试中的常见问题。它们变得如此普遍,以至于没有人考虑问他们的原因。每个开发人员都必须知道如何解决随机的HackerRank任务。许多公司认为这是

图像算法 技能

算法是每次面试中的常见问题。 它们变得如此普遍,以至于没有人考虑问他们的原因。 每个开发人员都必须知道如何解决随机的HackerRank任务。 许多公司认为这是默认要求,候选人也是如此。 但是您确定这是维护项目和按时完成任务的必备技能吗? 我会说,对于这些目标来说,这是最无用的。

TL; DR —我不知道如何解决算法任务,我不想拥有这种技能,并且我相信移动开发人员应该忽略需要它的职位空缺。

在过去的一年中,我进行了二十次面试。 并非所有人都成功。 面试失败的典型例子:

一家公司的面试分为四个步骤:语言,平台,体系结构模式和算法的知识。 我只失败了最后一个,它解决了HackerRank中的Easy / Medium级别的两个算法问题。

在另一家公司中,关于iOS SDK的具体问题很少。 所谓“ 特定 ”,是指: “在我的职业生涯中,我已经成功解决了所有任务,甚至都不知道这个问题,更不用说回答了” 。 最令人难忘的问题之一是: “ Git diff算法如何工作?”

自动释放池如何工作? 妳知道,我们每天都会在Swift中使用它

移动开发人员任务

IMO 99%是布局,对服务器的简单REST请求,解析JSON并将其刷新到UI。 当然,我听说过增强现实,区块链和机器学习,这需要特定的数学技能。 我将摘要保留1%。 但是我经历了200个空缺,只有一次看到AR。 根本没有区块链或ML。 使用这些技术,是的。 但是请不要误会,它们远非普遍存在。 移动开发人员的典型任务如下:

  • 阅读并理解很多旧代码
  • 提交对它的更改,而不会增加对同事的理解,也不会产生新的错误
  • 向服务器请求,解析,输出到UI,更改字体,颜色,角半径

大部分时间去哪里?

“读取别人的代码需要花费程序员80%的时间” –这个想法很明显,并不是我发明的。 有关“如何使代码整洁?” 的书籍 ,文章和讨论的数量。 证明这真的很重要。

您花费了大部分时间来理解某人的代码,因此任何优化都应该从该位置开始。 这是整个开发过程的瓶颈,因此其他地方的改进并不那么重要。

如何减少了解前任所写代码的时间? 必须使每个人都清楚地编写代码。 “透明”一词的含义由IT专家及其对最佳实践的无休止的讨论所定义。 静态代码分析器是很久以前发明的,不断为它们添加新的语法检查规则。 每个著名的公司都有公共风格指南。 现代语言(Swift,Kotlin)允许开箱即用的可选内容,函数式编程元素和其他允许更简洁地编写代码的东西。

令人惊讶的是,我每天都遇到狗屎代码……但是它的创建者完全知道如何平衡二叉树。 有多少个面试官问我关于样式指导或对短绒的经验? 他妈的零。

建立一个抽象

有人说:“但是移动开发中也有复杂的事情! 通过网络发送数据,处理划动手势或将数据保存到设备内存非常困难。 仅应由具有高级算法思想的人员来完成。”

这种观点与实际情况相反。 我不仅知道移动开发的历史。 通过创建高级抽象,存在明显的简化发展趋势。 程序员发现使用抽象来完成常见任务很方便。

曾经有一段时间,我们认为for(int i = 0; i 是世界上最舒适的模式。 现在,Swift中甚至根本没有++运算符。 不建议使用此选项,以防止人们使用.map , .sort.reduce犯愚蠢的一次性错误。

不相信内置排序,您可以做得更好

专门人员正在为您的项目开发工具。 创建语言,框架和服务。 这些工具已由开发人员和用户进行了全面测试。 考虑一下。 停一分钟,看看你的生活。 不必成为程序员就可以意识到基于他人的成就去做某事的想法是好的。

如果您仍然不相信我:

  • Spring Boot —在其他抽象之上的抽象。 该项目的含义-使配置和使用尽可能简单
  • C ++ 17 —您仍然确定每个开发人员都必须知道lock和recursive_lock之间的区别吗? 结帐并关闭
  • Javascript-我什至不 我想谈谈具体的事情 只是整个JS。 JS + html-> React; 回调->许诺->异步/等待; CSS->弹性框

一切都证明了这一趋势。 OOP的发明。 C->С++。 飞机自动驾驶仪。 输送带。 麦当劳。 汽车共享。

少做多做

人们真的希望能够做更多的事情,而付出的努力更少。 您可以培训超级专家,他们将完美地执行您的复杂任务,并以汇编语言正确实现。 您可以训练飞行员对任何事件都有即时的React。 但是,这将花费更多的时间和金钱,并且不会带来任何收益。

显然,您甚至无法在生活必需的所有领域都达到可接受的水平。 因此,唯一正确的方法是成为其中一个专家,并将您的技能转化为他人的服务。 这些不仅仅是我的愚蠢假设,这就是进化。 重用别人的工作。 外包。 分担责任。 它更快。 这个比较好。 这就是世界的运作方式。

人们的认知偏见在于通常不愿承认一个简单的事实:程序员不应过度挖掘其工具的深度。 他必须信任他们。

如果在贵公司编写的私有库中发现了安全漏洞,则仅由您自己负责。 没有人会帮助您,因为您承担了所有责任。 从重要项目中带走人员,送他们进行维修,造成损失。 如果在Alamofire中检测到安全错误,那么,iOS社区的很大一部分将尝试同时修复它,因为这是一个共同的问题。

Alamofire代码是公开的,这意味着每个人都可以发现其中的错误,批评架构并提出问题。 因此,存在永久性的补丁程序,修复程序和改进。 但是,使用您自己的私有库,只有在用户数据泄漏后才能检测到错误。

他们对我说: “我们不会在Github上对10,000个星星使用这种依赖关系; 我们不信任它,也不知道它是如何工作的 。” 相反,我听到: “我认为自己比10,000名开发人员更聪明。 我将自己动手,不需要任何帮助 。” 人们知道算法,并确保他们是编程之神,他们将使一切变得更好。 这会阻止合理地使用时间,增加公司的风险,并增加自以为自己是程序设计之神的开发人员的成本。

泄漏抽象

普遍的看法是:如果不深入了解工具的工作原理,就无法认为自己是专家。 如果出现问题,您将无法找出原因。 您取决于工具的制造商。”

当您用著名公司的锤子敲打手指时,您只有两种选择:

  1. 您开始研究锤子的材料,研究合金,化学成分。 然后,您购买了一本有关傻瓜的小型量子物理学教科书,并了解到原子不是最小的粒子。 您现在对锤子的工作方式了解很多。 但是您的手指仍然很痛,并且指甲没有堵塞。
  2. 您意识到自己是个蠢货,问题出在你身上,第二次尝试小心地锤钉子。

好吧,忘记隐喻吧。 工具可能会崩溃的情况。 但是,即使不知道锤子是如何工作的,您也会明白其中的原因。 如果您能够阅读和理解代码,则可以定位错误的位置。 如果您的工具使用情况接近错误,则可以联系制造商

您是否应该自己研究并纠正错误? 我认为没有。 汽车发生故障时,您将前往服务中心。 当您的健康状况恶化时,您去看医生。 UIKit损坏时 ,您将提交雷达 。 这是本世纪的优势-您可以随时获得专业人士的帮助。

但是,如果您仍然真正想要-深入研究。 但只有在必要发生之后! 在那一刻之前,只需更频繁地运行pod update ,就什么都不要考虑。 没有完全控制的感觉很可怕,但是您已经习惯了。 您每天信任某人一百次。 电话制造商,出租车司机,饭店厨师,公共事业。

问题是什么

了解所有工具的深入结构的要求适得其反。 我会说回归的。 厨师可能是专业人士,对刀的冶炼技术一无所知。 赛车手可以是专业人士,不知道汽油来自何处。 没有任何先决条件,这是没有必要的。 专业人士是知道如何使用其工具来产生高质量输出的人。 无论是美味佳肴,还是赛道上的最佳时机或五星级移动应用程序。

问题是解决算法问题的能力不会帮助您快速理解代码或以干净的方式编写代码。 而且,有一种观点认为,用于解决算法问题的代码是世界上可读性最低的代码。

这些公司要求我有适得其反的心态。 与进步,进化和理性相矛盾的思维定势。 同时,那些可以真正提高我的工作质量和速度的技能(使用第三方工具和短毛绒)被忽略甚至被否定了。

一分钟的理性

我知道编程之神确实存在。 它们创造了每个人都毫无疑问使用的惊人东西。 这些事情确实很复杂,而不仅仅是用新的颜色或view.layer.cornerRadius = 4绘制按钮。 但是这些人是独一无二的,只占开发人员总数的十分之一。 并且请不要将其他开发人员与他们进行比较。

企业很少需要创造革命性的东西。 它几乎总是希望“像在那些项目中一样”并且“稳定且可扩展” 。 商业对您对NSURLSessionTask的新包装不感兴趣。 如果要开发工具,则可以在此领域中工作。 例如,阅读复杂的书,获得所有必要的技能,然后去Swift Core团队。 但是,对于电子商务应用程序,它不需要算法技巧。 我们不会把他妈的特斯拉送上太空,好吗?

考虑变量命名

令人信服的是,成为一名程序员意味着成为一名发明家,创造者和建筑师。 每天花费最深的抽象事物和概念。 但这仅仅是……这是自欺欺人。 业界需要能够以所需的质量和速度执行单调工作的代码猴子。 这是一个很大的问题:行业是否需要您的创造潜能。 也许您只是希望它是真的?

能力考试

我有一个问题:“ 每个iOS开发人员真的需要了解算法吗? ”。 一个男人用丘吉尔的话回答我:

“事实上,民主是政府最糟糕的形式,除了不时尝试的所有其他形式……”

意味着这比检查开发人员知识水平的任何其他方式都要好。

我完全不同意这一点。 普通开发人员在“您知道哪种排序数组的方式”问题上的最佳答案应该是: “只需调用 .sort 并通过比较闭包” 。 而且没有快速或冒泡排序。

同样成功的我们可以将解决积分的能力称为“能力”的主要标准。 或者,例如,具有制作自己的主板的能力。 好吧,这也与逻辑和计算机有关。 沃兹尼亚克知道该怎么做,为什么不呢?

面试官必须检查员工是否符合业务实际需求。 如果企业需要我快速修复错误并清楚地实现新功能,请给我一个测试任务,以查找并修复错误。 给我一个任务,以重构一个类并使其他开发人员可读。

著名和富裕的公司可以承受任何不合逻辑的事情。 要求应聘者为dovahkiin。 但是问题是,其他不是很聪明的人看着这些星星,并且相信一切。 “ 他们是否只聘请哈佛大学毕业生担任scrubwoman工作? 现在就添加此要求” 。 这就是创建和维护他妈的牛仔工程师的崇拜方式。 这就是为什么我们有一些开发人员鄙视他人决策的原因。 他们只是参加任何项目,并发明了天才的飞轮,没人知道。 两年后,企业想知道为什么从头开始重写项目比解决所有问题要容易得多。

认为天空是绿色的并不比试图说服所有人都还不错。

说实话。 至少给我打电话说iOS中需要的三种算法。 除了diff算法,该算法已被批准添加到Swift中。

他妈的算法。 认真地从Swiftlint / Rules.md学习规则。

如果您喜欢这个故事,请给它鼓掌(50),并分享以帮助其他人找到它! 随时在下面发表评论。 请跟随我阅读有关RxSwift的更多信息。

翻译自: https://hackernoon.com/does-business-care-about-algorithmic-skills-1ca7f42e2a03

图像算法 技能



推荐阅读
  • Vue基础一、什么是Vue1.1概念Vue(读音vjuː,类似于view)是一套用于构建用户界面的渐进式JavaScript框架,与其它大型框架不 ... [详细]
  • Android中高级面试必知必会,积累总结
    本文介绍了Android中高级面试的必知必会内容,并总结了相关经验。文章指出,如今的Android市场对开发人员的要求更高,需要更专业的人才。同时,文章还给出了针对Android岗位的职责和要求,并提供了简历突出的建议。 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • 本文介绍了C#中生成随机数的三种方法,并分析了其中存在的问题。首先介绍了使用Random类生成随机数的默认方法,但在高并发情况下可能会出现重复的情况。接着通过循环生成了一系列随机数,进一步突显了这个问题。文章指出,随机数生成在任何编程语言中都是必备的功能,但Random类生成的随机数并不可靠。最后,提出了需要寻找其他可靠的随机数生成方法的建议。 ... [详细]
  • [译]技术公司十年经验的职场生涯回顾
    本文是一位在技术公司工作十年的职场人士对自己职业生涯的总结回顾。她的职业规划与众不同,令人深思又有趣。其中涉及到的内容有机器学习、创新创业以及引用了女性主义者在TED演讲中的部分讲义。文章表达了对职业生涯的愿望和希望,认为人类有能力不断改善自己。 ... [详细]
  • 解决Cydia数据库错误:could not open file /var/lib/dpkg/status 的方法
    本文介绍了解决iOS系统中Cydia数据库错误的方法。通过使用苹果电脑上的Impactor工具和NewTerm软件,以及ifunbox工具和终端命令,可以解决该问题。具体步骤包括下载所需工具、连接手机到电脑、安装NewTerm、下载ifunbox并注册Dropbox账号、下载并解压lib.zip文件、将lib文件夹拖入Books文件夹中,并将lib文件夹拷贝到/var/目录下。以上方法适用于已经越狱且出现Cydia数据库错误的iPhone手机。 ... [详细]
  • 自动轮播,反转播放的ViewPagerAdapter的使用方法和效果展示
    本文介绍了如何使用自动轮播、反转播放的ViewPagerAdapter,并展示了其效果。该ViewPagerAdapter支持无限循环、触摸暂停、切换缩放等功能。同时提供了使用GIF.gif的示例和github地址。通过LoopFragmentPagerAdapter类的getActualCount、getActualItem和getActualPagerTitle方法可以实现自定义的循环效果和标题展示。 ... [详细]
  • 如何搭建Java开发环境并开发WinCE项目
    本文介绍了如何搭建Java开发环境并开发WinCE项目,包括搭建开发环境的步骤和获取SDK的几种方式。同时还解答了一些关于WinCE开发的常见问题。通过阅读本文,您将了解如何使用Java进行嵌入式开发,并能够顺利开发WinCE应用程序。 ... [详细]
  • intellij idea的安装与使用(保姆级教程)
    intellijidea的安装与使用(保姆级教程)IntelliJ在业界被公认为最好的java开发工具,尤其在智能代码助手、代码自动提示、重构、JavaEE支持、各类版本工具(gi ... [详细]
  • 本文提供了成为成功软件工程师的7条建议,包括不要低估自己、公司需要你、投资自己等。通过学习新技术、提升编码技能,软件工程师可以获得更好的职业机会和更高的薪水,同时也增强自信。投资自己是取得成功的关键。 ... [详细]
  • 本文介绍了RxJava在Android开发中的广泛应用以及其在事件总线(Event Bus)实现中的使用方法。RxJava是一种基于观察者模式的异步java库,可以提高开发效率、降低维护成本。通过RxJava,开发者可以实现事件的异步处理和链式操作。对于已经具备RxJava基础的开发者来说,本文将详细介绍如何利用RxJava实现事件总线,并提供了使用建议。 ... [详细]
  • 背景应用安全领域,各类攻击长久以来都危害着互联网上的应用,在web应用安全风险中,各类注入、跨站等攻击仍然占据着较前的位置。WAF(Web应用防火墙)正是为防御和阻断这类攻击而存在 ... [详细]
  • 从零基础到精通的前台学习路线
    随着互联网的发展,前台开发工程师成为市场上非常抢手的人才。本文介绍了从零基础到精通前台开发的学习路线,包括学习HTML、CSS、JavaScript等基础知识和常用工具的使用。通过循序渐进的学习,可以掌握前台开发的基本技能,并有能力找到一份月薪8000以上的工作。 ... [详细]
  • 随着前端技术的发展,越来越多的开发者开始使用react、vue等web框架,但很少有人深入理解这些框架的源码。然而,这些框架底层都是由原生的javascript构建而成。对于初学前端的人来说,可能会认为javascript很容易上手,但实际上只是因为它被高度封装了。与能够使用封装类的人相比,能够理解框架原理的人则处于另一个层面。本文将深入剖析jquery源码,探寻框架底层的原理,帮助读者更好地理解web框架的运行机制。 ... [详细]
  • React基础篇一 - JSX语法扩展与使用
    本文介绍了React基础篇一中的JSX语法扩展与使用。JSX是一种JavaScript的语法扩展,用于描述React中的用户界面。文章详细介绍了在JSX中使用表达式的方法,并给出了一个示例代码。最后,提到了JSX在编译后会被转化为普通的JavaScript对象。 ... [详细]
author-avatar
Money00Fish
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有