积跬步,至千里
精前端,通全栈

如何理解分配给你的编程任务

giscafer阅读(191)

这一天终于来了。这是你工作的第一天,还是你已经这样做了十年?没关系。我们最终都发现自己处于一项我们根本无法理解的任务中。

那你该怎么办?你应该刚开始并希望它有效吗?你是否应该立即告诉你的老板你不能这样做,因为你不明白?

我想你知道答案都不是!

在编程方面,和任何其他职业一样,我发现如果没有找到一些我不理解的问题,几乎不可能经历一周(有时甚至不是一天)。

但不要担心!我有个好消息。你不仅可以解决这个问题,而且也可以是一件好事。

这意味着,在某种程度上,您正在扩展您的技能和知识,超越您之前所做和已知的。

在接下来的几段中,我将详细介绍如何弥合您已经完成的要求与完成您已经完成的任务所需的知识之间的差距。

关于'要求'

您可能已经注意到我使用了“要求”这个词。根据你的工作地点,这个词可能有某些含义。

根据我的经验,大公司喜欢要求,小公司有时“不做要求”。我认为这对我们这里的目的来说非常好。

那是因为最终我们所做的一切都是软件工程师在解决问题。

您可以收到关于如何解决该问题的广泛的一百页报告(我曾经有一个小时的会议关于按钮的文本)。或者也许你的首席执行官会蜿蜒到你的办公桌前随便询问你是否可以在星期五之前解决问题。

无论哪种方式 - 你已经完成了任务,你需要确保你完全理解这个问题才能正确解决它!

关于步骤

并非每个问题都需要下面给出的所有步骤。只有最难理解的问题可能需要您仔细执行本文中将要讨论的所有步骤。

许多问题可能无法通过您提供的要求或仅通过您的个人经验来回答。

您可能需要询问其他开发人员,您的团队负责人,产品负责人,业务分析师甚至您的祖母。也许你必须在完成之前问问所有人!

那很好。这意味着你将利用分散的知识并将其凝聚在一个地方。那个地方在你自己,现在你将能够产生最好的结果!

在您了解步骤之前的最后警告:不要过度正式化此过程。这里的重点是帮助您快速了解问题。它不应该制造障碍或繁文缛节!相反,它应该为您提供系统的计划来解决您不理解的问题。

第一步:分析任务

在这一步中,你会设法了解什么你被要求做的。你不是想弄清楚怎么做!

这里的区别很重要。在没有考虑所有后果的情况下直接进入实施可能是危险的,或者更糟糕的是,没有确切地确定你被要求做什么。

对任务进行分类

对任务进行分类意味着确定您将要采取哪种工作来解决此问题。以下是一些任务类型的示例:

  • 错误修复
  • 新功能
  • 新的申请
  • 研究任务
  • 性能改进

请记住,这些并非所有可能的选择。

这里的目标是确定您应该做什么样的工作。这是重要的,因为它有一个直接的影响是什么工作,你做的。

这一步骤对于模糊的要求尤为重要。模糊要求的一个例子是:“我们需要一种方法来在网站更新后清除客户的缓存。”

可能有一些可能的解释。

  1. 您需要立即实施一些缓存清除机制,以便客户端始终可以看到最新的更新。
  2. 您需要研究存储客户端缓存的所有方法,并确定在每次更新网站后破坏这些缓存的最佳方法。
  3. 客户端的缓存已经被清除,您需要找到并修复阻止它们清除的错误。

此时,如果您不完全确定使用了哪种含义,则应在继续之前要求澄清。

用一两个简单的句子说明任务是什么

总结复杂的要求,好像你被问到你今天在做什么。也许它不会那么简单,但你应该把它煮到一两句话。

如果您无法总结任务,则可能意味着您需要将其拆分为多个任务。因此,基本上这一步将成为一个试金石,以确定您是否已将任务组织成足够小的块。

以下是摘要的一个很好的例子:“当我们更新网站时,我们会在文件中附加一个唯一的编号,以便浏览器知道它需要使用最新的代码。”

此任务通过了简单的试金石,您可能不需要创建多个任务。

一个不好的例子可能是这样的:“当我们更新网站时,我们会在文件中附加一个唯一的编号,以便浏览器知道它需要使用最新的代码。我们还必须向 CDN 发送消息,告知它需要更新文件。此外,IOS 和 Android 应用程序需要将更新发送到应用商店等…”

这个显然没有通过测试。有很多工作要做,可能需要单独识别和跟踪。

概述主要部分

无论哪种形式对您来说最方便,您现在应该列出必须完成的主要事项。

这些仍应是每个主要步骤的非常简单的摘要。

这些应该不会是一步步或如何解决问题的详细指南。

请记住,您仍在分析您给出的任务。我建议以某种方式写下这些。我个人在我的Notes应用程序中记录它们。

我们的缓存任务非常简单,实际上可能不需要大纲。对于这个例子,我们将考虑一个更复杂的问题。

我们的下一个任务是一个新功能:“每个用户都应该看到内部产品的目标广告。该广告应根据我们收集的数据量身定制,以满足其个人需求。“

要概述主要部分,您需要清楚地思考要求的每个部分将要做什么。

  • 我们当前的广告需要以一种可以与某些特定用户指标相关联的方式进行细分。
  • 我们的营销团队需要有一种方法将新广告映射到一个或多个用户数据(无需编码!)
  • 系统将需要汇总与我们的广告相关的用户指标。
  • 最后,您需要创建一种接收用户ID并输出广告的系统。

这样的列表的美妙之处在于它可以用于与您的团队或老板快速验证!所以在这个例子中,也许你是由你的团队负责人运行的,他决定还需要一个主要部分:

  • 用户应该能够告诉我们他们何时不想再看到某些广告。

因为毕竟我们不想惹恼我们心爱的用户!通过花时间思考我们的任务只需几分钟,我们通过在开始编码之前识别和规划一项重要任务,节省了数小时或数天的痛苦。

在我们继续前进之前,我想解决一个可能存在的批评。

您可能会想:“在适当的业务中,这是在需求到达开发人员之前应该完成的工作类型”,我绝对同意您的看法!

但是,我们遗憾地生活在一个完美的世界里。有些需求在到达开发人员之前并不总是完全充实。这意味着我们必须尽力在开发之前正确评估需求。

定义您要解决的问题。

回答这个问题,“为什么会有人使用这个?”,或“我想解决的实际或感知的现​​实问题是什么?”

希望答案是显而易见的。对于我们的缓存示例,您可以说,“用户将始终看到最新的更新。”对于广告示例,“用户将看到相关广告,而不是他们不关心的广告。”

如果答案不明显,那么可能是时候问某人你为什么要做这个任务了!提出这个问题将导致您对手头的任务有更清楚的了解,或者会导致重新考虑您被要求做的事情。

希望你看到这些答案的好处!更深入地了解问题和目的将使您能够在实施中做出实际服务于业务目标的决策。找出不合理的错误解决方案或问题将避免在最终无法解决问题的工作上浪费精力。

第二步:解释和评估要求

在这一点上,你应该了解你将要做什么以及你为什么这样做。

您的下一步将是了解您正在做什么的细节,您希望如何做到这一点,以及您为什么这样做。

澄清与您的任务相关的所有重要术语。

如果您是团队中的新开发人员或者您在大公司工作,您可能会发现此步骤更为重要。这两种情况都会使您更有可能在需求中找到未知术语。

条款可以是业务条款,例如产品,客户或流程的名称。它们也可以是开发术语,如工具名称,应用程序,模型,服务或库。

您必须确保理解所有重要条款,不得含糊不清,这样您才能确定正确执行任务。

您可能了解您需要创建一种访问聚合用户信息的方法,但是您是否了解将其添加到“dao”意味着什么?

您可能理解需要格式化广告数据,但是您是否了解“MADF”(标记广告数据源)是什么?

我也不。(Neither do I.)

这就是您必须识别和定义所有重要术语的原因。如果定义错误,则更有可能错误地执行任务。

确定应该如何完成任务

此时,您现在应该开始研究应该如何完成任务。根据您的工作地点和您给出的特定任务,此步骤可能会有很大差异。

在一些团队中,您将不会被告知如何实现要求,您将被告知您最终应该使用哪些功能。

其他人会详述您应该采取的每一步。

很可能你的经历落在中间的某个地方。

如果您的团队没有给您指示,那么您在此步骤中无法做很多事情。如果您已获得指示,那么此时您将开始熟悉您需要采取的步骤。

这一步看起来非常明显,但它的顺序是你应该特别注意的。

在确保理解任务的目的之前,自然倾向可以深入到任务的所有细节中。

由于您已经花时间先了解您的任务,因此在评估您需要采取的步骤时,您现在将有一个更清晰的目标。

确定问题是否已解决

这是分析阶段和解释阶段结合在一起的地方。在分析阶段,你着眼于大局的目标和成果,在什么和为什么。

在解释步骤中,您如何专注于细节。

它被称为解释和评估的原因是,您现在将比较如何与原因和原因。您可以通过考虑更大的图片来解释细节。您将评估详细信息并确定原始问题是否已解决。

问问自己:我给出的步骤会导致您的任务打算创建的结果吗?这个结果真的会解决原来的问题吗?

如果您确信所有问题都已解决,并且所有细节都有意义,那么您就可以开始工作了!否则,您必须转到第三阶段以解决任何冲突。

第三步:批判性思考

在这个阶段,您应该自信地表明您了解问题和解决方案。最后一步是确保您拥有正确的解决方案。

为了创造出最好的产品,我们都应该感到有责任在没有意义的事情上说出来。

另一方面,我们不想反过来不同意。你不应该说出错是因为“感觉不对”,或者因为“我不喜欢它”。你必须有充分和深思熟虑的理由。

所以我们就分歧达成一些基本规则。

知道什么时候不同意

  • 在你完全理解之前不要不同意。

在你完全确定自己明白自己不同意之前,永远不要说出错了。

如果您无法自信地陈述问题和预期的解决方案,那么您不应该不同意。如果您尚未验证您的理解,那么您不应该反对。只有当你知道自己有最完整的理解时才开始不同意。

如果您发现自己没有所需的所有信息,那么在告诉某人要求错误之前,可能需要停止并重新访问上述任何步骤。

  • 不要在主观问题上存在分歧。关注实际的潜在问题。

“我不喜欢这样做”是主观的。“由于所涉及的操作数量,这将导致性能问题。”是客观原因。主观原因的其他例子可能包括,“这不是我在其他地方做过的事情”和“我本来会设计这个解决方案略有不同,但仅仅是因为个人偏好。”

  • 对你准备提出的分歧有充分的理由解释。

如果你无法解释为什么出了什么问题,你真的可以说你确实知道这是错的吗?我建议写下出现错误的原因以及可以采取哪些措施来解决问题。

或者,如果您没有解决方案来修复它,请在开头清楚地说明您不知道。

当你不同意他人时要小心。在您不同意之前,您的大部分时间都应花在理解和倾听上。

如果您按照所有步骤进行操作,那么您很可能对此有了很好的理解。但要小心保持开放的心态,否则你可能会错过一些东西!

我喜欢开始谈话时说:“我不是不同意你,我只是不明白。”如果有必要,后来会出现分歧,但希望之前从未理解过。

知道如何不同意

为了确保我们客观地不同意,这里有一些措施可以帮助您确定您的分歧是否有效。

客观上的分歧会做以下一项或多项:

  • 显示解决方案不知情。
  • 表明解决方案被误导。
  • 表明问题或解决方案不合逻辑。
  • 表明解决方案不完整。

不知情不是侮辱,而是意味着在创建解决方案时缺乏信息。也许他们不知道当前存在的系统并且可以执行所需的操作。

被误导意味着解决方案来自不正确的信息。

在这种情况下,他们可能会认为现有系统做的事情实际上并没有。例如,SEO(搜索引擎优化)团队可能会要求您让Google在您的应用程序上编入登录页面。谷歌不能这样做。他们被误导了Google的抓取工具。

一个不合逻辑的问题或解决方案是一个根本没有意义的问题。作为开发人员,我认为您可能会看到一个常见的不合逻辑的请求是一个可能破坏另一个功能的功能。这样做可能被认为是不合逻辑的,因为它会伤害而不是帮助。

实际上可能意图解决不完整的解决方案。在软件开发中,我们经常尝试制作MVP(最小可行产品)。这意味着我们首先可能故意遗漏不是绝对必要的功能。

相反,如果解决方案不能解决您被要求修复的直接问题,或者提供的步骤不足以创建工作产品或功能,那么您应该只考虑解决方案。

总结

请记住,不要过度正式化这个过程。它应该很快,可能包括在Notes应用程序中记下一些想法。然后它可能会导致与您的同事进行一些对话,以澄清您应该做的事情。就这样!

这是一个简化的步骤列表:

第1步 - 分析

  • 分类
  • 概要
  • 大纲
  • 定义问题

第2步 - 解释和评估

  • 澄清条款
  • 确定任务
  • 确定问题是否将得到解决

第3步 - 批判性思考

  • 知道什么时候不同意
  • 知道如何不同意

谢谢阅读!我很乐意听到你的消息。您是否拥有用于理解复杂编程任务的系统?你会从这个列表中添加或删除任何内容吗?请随意发表评论,分享您的想法。

学习的摄入与输出

giscafer阅读(206)


学习的摄入与输出

Photo by Eliabe Costa on Unsplash


业余时间需要充分挖掘和利用,不然一天能干的事情真不多,一眨眼,国庆快来了,意味着这一年也将到底了,今年还没有额外的什么收获呢,一年过去不能太平平淡淡。


近期想调整恢复学习状态,减少游戏时间。我自认为的学习模式(独自学习)分为两种:摄入和输出摄入,指的是自己去获取新知识、新技能等;输出 则指将自己的技能(能力)或知识发挥出来,输出的过程是提炼和思考、总结分享的过程,同时也是摄入的过程。输出可以换个词叫学以致用,你所学的东西,是需要发挥其作用的,对于工作上的技能,工作上使用发挥,但是一个人不能只具备工作技能,或者说工作中一定程度上不可能发挥出你这个职业方向上所有的技能,可能受公司的业务和自己职位的约束,无用武之地的情况是存在的。作为技术人员来说,你所学的技术也不能局限于公司所用的技术栈,你需要学更多或者更深,而你学的这些技术栈是需要“输出”才能深入或者掌握得更好。balala~ 不说了,道理大家都懂的。


在我看来,看书和写作都是摄入和输出的一种形式。本篇文章目的是想和大家说,我目前计划写两本电子书,名字和大纲都想好了,分别为 《基于Node.js+百度AI实现OCR应用实践》和 《WebGIS入门实战指南 》 ,直接列出目录大纲吧:


《基于Node.js+百度AI实现OCR应用实践》


  1. OCR 技术基本原理

  2. 百度AI 开放平台注册申请接口使用

  3. 百度AI OCR接口 demo简单实现

  4. 正规PDF文件 OCR 文字内容提取

  5. 扫描版 PDF 文件实现 OCR 文字内容提取

  6. Node.js 实现文本保存为 word 文档

  7. PDF OCR 直接生成 word 文档

  8. 基于 Electron 开发构建为安装包

  9. 扩展功能:PDF OCR 后转 语音(百度AI文字转语音)

  10. 扩展功能:PDF 裁剪为图片

  11. 扩展功能:图片转为PDF


(实际内容可能会根据编写时调整)


《WebGIS入门实战——地图相册实现 》


  1. 概述WebGIS是什么

  2. 前期准备:开发环境的准备

  3. 常用于WebGIS开发的那些地图JS库

  4. 实战:基于不同地图库的地图服务加载展示demo

  5. 实战:基于Leftlet 的地图相册实现(一)

  6. 实战:基于Leftlet 的地图相册实现(二)

  7. 工程化:了解前端工程化和利用node.js + npm工具

  8. 工程化:如何使用 ES6 + webpack 开发WebGIS

  9. 工具篇:介绍利用工具使得开发变得高效

  10. 部署篇:介绍如何将demo部署到 Github 以及绑定域名等

  11. 全栈篇:如何进行完整的 WebGIS 系统开发

  12. 发展篇:如何在技术上持续快速成长


(实际内容可能会根据编写时调整)

最后,就是想做个调查,希望读者给想学习了解的课程进行投票,了解需求情况。另外其他需求欢迎留言,说不定采用了呢!




始发于微信公众号: giscafer

来自程序员行业的有感而发

giscafer阅读(267)

Photo by Matt Antonioli on Unsplash

如果你不能通过自学来达到能找到工作的水平,那你还是放弃程序员这个职业吧。

上边这句话是刷知乎看到的,有感而发……

谈一谈自学问题

自学可以包含受别人指导,自己领悟学习,但是不包括培训或者看培训视频。原话的意思更多是指,在计算机编程工作上,自学能力占绝对地位。没有自学能力,走不远。当然自学能力可以培养锻炼的,起初我学习编程也是看书,不懂需要看一些视频,找好的博文阅读去理解;逐渐地,进步到不需要看视频,到不想看视频,觉得效率低,也无法系统的学习很多知识点,现在觉得更好的方式是通过官方文档入门,写demo,然后找优秀博文阅读,或者自己探索,总结。慢慢的会觉得学新东西会越来越快,入门是很快的,深入这里不谈,因为任何方向深入都不简单,也不能一蹴而就的。

技术&工具

我们平时工作上使用技术解决问题时,使用的“东西”可以分为两种:、一种是叫技术,另一种叫工具。什么叫技术?什么叫工具?我们要搞清楚。技术是开发人员解决问题的能力,会使用工具不叫技术,工具不流行了,淘汰了呢?会使用工具解决问题的也叫技术,但是要求你要懂得工具,还懂问题。比如你说你非常的熟悉 Angular,玩得很6,这代表了你熟悉使用Angular这“工具”,什么程度才算是懂“工具”?——你懂得 Angular 框架是用来解决什么问题,使用场景,优缺点,核心原理、框架思想呢?相比 React 等有什么区别?

工具随着业务场景和技术的演变都会频繁出现,前端领域就鲜明的提现了这一点,工具学习成本都不是很高,对于有技术的人员,只要花对于的入门时间就行了,然后就实践使用过程熟悉工具。所以,一家公司招聘一个会用工具的人会很难吗?每年毕业生稍微培养、指导学习一下就能上手了,质量和效率需要进一步提升而已。那从工作几年经验里找不是更容易找到直接会使用工具的人了?所以反思:逐渐高龄程序员的你应该——吾日三省吾身:是否只是每天使用工具?是否懂工具?是有技术上的成长?为什么较多的公司不招大龄程序员就是这个道理,年轻人有活力,肯加班,工具学得也快,效率不低,成本低呀。

我看到的现象

这两年改变了我一个观点,以前我一直认为招聘不需要看学历的,技术不差,也可能是潜力股。但是通过观察和了解,学历不高的人,不热爱学习的比例很高。我们都明白一点,学历很大程度代表了学习能力&学习自觉性(此处不说学习能力强辍学的人,这里还强调了自觉性)。计算机编程开发是需要不断学习的一个职业,只有坚持学习,热爱编程学习的人才会更优秀。多牛逼的人他也需要花费很多时间去深入学习技术的,天才只是效率和领悟性更高而已。这也是为什么大公司要在学历设定门槛的主要原因吧。(这并不是说学历低的人能力不行,只是个普遍的现象而已。)

(完)

个人微信工作号首发

学习使人进步(学习技巧)

giscafer阅读(206)

编程开发方向,每周的TODO List:

- Algorithm:一个leetcode 算法题;

- Review:点评(阅读)一篇英文技术文章;

- Tip:学习一个技术技巧或技术知识点;

- Share:分享一个技术观点和思考、总结。

初级和中级开发多写demo,中级高级开发多看源码(如果初级看得懂多阅读源码当然是更好),模仿尝试写出类似的工具或简单框架核心实现部分。

看懂一个框架、理解思想将是高级到资深的进阶;能运用和整合所有邻近技术能力通过架构和设计来解决业务场景时,将是进阶架构师的时候。总之,学无止境,一步一个脚印。

分享一个Gayhub别人最新整理的web开发工程师学习路线图:

https://github.com/goodjack/developer-roadmap-chinese

另外,学习也要多交流、多关注一些技术大会。

坚持,你会从身边的同学脱颖而出!

(在看世界杯,尼日利亚🇳🇬VS冰岛🇮🇸,2:0进行时,希望冰岛守住)

始发于微信公众号: giscafer

个人技术学习历史路线(4年)

giscafer阅读(242)

个人技术学习历史路线(4年)

 Photo by Dariusz Sankowski from unsplash


回忆一下自己的技术学习路程,这个路程的经历去年我在知乎live 分享过,感兴趣的可以移步:https://www.zhihu.com/lives/844909623906549760

时间轴:


  • 大一大二VB、C++ 、SQL Server、PhotoShop

  • 大三、大四、工作第一年:Java 、(Java Web、Spring、Hibernate)、MySQL、GIS520论坛

  • 工作第1年开始:JavaScript、 HTML、 CSS、 jQuery、Oracle、MySQL

  • 工作第2年:

    工作需要:Angularjs1.x 、 Ionic1.x

    业余学习:Node.js、Express、MongoDB、Redis、Jade(模板引擎,已改名pug)、Vue.js1.x、微信开发、Grunt/Gulp

  • (1~2年之间熟练使用)其他js库:Echarts2、Highchart、ArcGIS API for JavaScript、Dojo、OpenLayers

  • 工作第2~3年:

    工作需要:ES6、Webpack

    业余学习:React、React Native、小程序开发

  • 工作第3~4年

    工作需要:Angular2+、Ionic3、TypeScript

    业余学习:PWA、AMP、GraphQL、Web Components

工作第二年开始一直使用 Git 业余管理项目或demo代码、学习了解过UI设计、原型设计软件Axure、产品学习,如《人人都是产品经理》入门书籍等、学习了解后端微服务、分布式架构等技术点。学习团队建设和团队管理技能,如Scrum、DDD、DevOps……

有些技术学习点不是固定在某些时间段的,可能是一直接触或使用,以及不间断的广泛或深入学习。很多需要学习的知识也明确没有指出来,比如代码重构,阅读源码学习,数据结构和设计模式等。很多东西有时候也会忘记需要偶尔复习了解。但是,熟练、入门、了解过,没了解过,这些都是不同等级的,在日后是否真正使用上或者是学习某些技术时,有些东西潜移默化的帮助你不少,比如JavaScript功底和数据结构、设计模式,这种肯定是让自己在前端学习的道路上提供不少帮助的。

前端也不只是技术点需要学习,很多兼容性啊,平台相关的,或者性能优化、架构上的东西,扯不完的,一入前端深似海……

其他方向本质上也是一样的,比如Java,早期是Java Web,SSH三大框架,现在多了Spring Boot、Spring Cloud,微服务Service Mesh、分布式架构等牵扯到的技术点会更多。所以,每个做技术的人学习都不会停止。如果你觉得你在某个技术方向上很久没有学习过,没有创新过,我觉得这个方向是不会有更大的进步空间的。

如果你对学习没有方向,或者对程序员没有正确的职业规划,推荐阅读两本书籍:国内10年程序员的经验总结《程序员的自我修养》, 和国外的《黑客与画家

:硅谷创业之父Paul Graham文集》(两本书如果不想买纸质书,好像微信读书可以免费领取的机会)




7月结束,过完生日,8月开始就是工作第五年了,老了……



始发于微信公众号: giscafer

WebGIS开发入门指导练习题(一)

giscafer阅读(373)

一些WebGIS开发学习的同学,在学习的时候可能很迷茫,目前简单的指导一下学习方向。

需掌握技能:

  • 前端 JavaScript+HTML+CSS
  • 后端 Java(最基本要求是JavaSE基础,然后了解SSH框架,能和后端程序猿对接接口,会简单书写Controller,Ajax前端调用)
  • 数据库 Oracle + MySQL
  • 相关软件使用掌握:Navicat、PLSQL
  • GIS相关技能:ArcGIS地图服务发布、ArcGIS API for JavaScript、OpenLayers

相关GIS资源可见文章《地理信息系统资源列表(Awesome GIS)》

下边是个人自己出的一些联系题,提供给初学者学习的参考。

(一)、使用不同 JavaScript 地图库加载展示地图

难度系数:★☆☆☆☆

要求:

  1. 自己使用ArcGIS发布地图服务;
  2. 使用 ArcGIS API for JavaScript 调用发布的地图服务展示出来;
  3. 使用OpenLayers2.x 或 3.x版本 加载地图展示;

要求背景分析

主要是掌握 ArcGIS 发布地图服务的技术,以及了解 RESTful 服务的地图瓦片,WFS,WMS服务的区别等;

用不同的 JavaScript 地图库是为了了解目前主流的地图API 库,作为WebGIS开发工程师, ArcGIS API for JavaScript和 OpenLayers 是必须了解和掌握的。

涉及编程语言

JavaScript、HTML/CSS

(二)、一个简单的前后端完整的webgis系统

难度系数:★★☆☆☆

功能:

  • 地图预览加载;
  • 事件功能模块(一张事件表,带经纬度字段的);
  • 业务功能大致描述:
  • 系统可加载展示地图外,具备一个功能模块叫:事件管理。此模块是简单的属性业务表的展示,模块具备记录的增删查改功能;事件表的字段有:主键ID,事件名称,事件经度、事件纬度、新增事件时间、新增人、备注;该模块还具备一个事件记录的定位功能,选中一条事件记录,点击定位按钮,可定位到地图上,并以图标(类似Mark)标注出来;还可以给此事件图标添加点击事件,点击弹出小气泡,内容是事件描述信息。事件记录支持多选,多个事件定位到地图并缩放到合适的分辨率。

背景分析:

将前端和后台数据交互练习起来,通过接口读取数据表的坐标信息在地图上进行交互展示。了解webgis前后端的通信过程和相关的技术原理,是个简单完整的webgis系统。在完成习题(一)的时候,地图加载用了 ArcGIS 或者 openlayers,进一步做此题即可。

涉及编程语言:

JavaScript、HTML/CSS、JAVA+MySQL或 Oracle

总结

编程语言是基础,每个题目都写出需要用到的编程语言,目的是让同学们清晰的认识到需要学习的技能。其他方面有疑问可以回复本微信公众号!

后续会上《WebGIS开发进阶练手题(二)》文章,本文章首发于可视化编程微信公众号

微信公众号:giscafer

如何学习成为一名优秀的前端开发工程师

giscafer阅读(561)

记得去年,我给初学者分享过两篇练习题《WebGIS开发入门指导练习题(一)》与《WebGIS开发进阶练手题(二)》,原文分享地址为:

《WebGIS开发入门指导练习题(一)》:

https://zhuanlan.zhihu.com/p/22393391

《WebGIS开发进阶练手题(二)》:

https://zhuanlan.zhihu.com/p/22424372

这两篇文章是由浅入深去出题,有简单的demo页面,目的是为了熟悉编程语言和地图框架、基本的地图发布技术;有完整的简单系统,带前端和后端,可以了解前后端的编程以及交互原理,并且还学习数据库的操作等;也有复杂的应用,要求编码能力和业务能力较高。

记得当初文章分享的时候,有同学问我是否有提供习题源码。我回答是没有的,因为当初只是为了给学习者提供练习和锻炼的思路,指导方向,也没有时间去提供源码;当然,我觉得如果自己想学习,摸索实现也是可以的,不懂的时候请求指导。做编程开发,最重要的就是实践,实践遇到问题,解决问题,探索原理才会进步得更多。

为什么有的大神前后端通吃,c/c++,java和JavaScript都会,并且都很熟练。因为编程语言的思想是相通的,不管是动态语言还是静态语言,还是预编译的、或者函数式、面向对象的,理解其思想后,学习入门就很快,到达那个层次后,学习任何新的编程语言都是没有压力的。可能,同学你会觉得,会那么多没用,没一种精的。这也是个问题,这个问题在于个人,是你没有计划去精于一种,再去拓宽其他技术。做技术的,懂得越多越好,当然前提最好精于一种技术。

当编程语言语法过关后,是要实践理解深入学习的。初学的时候最好就是通过做应用,demo。由浅入深的去理解。作为前端方向的同学,在掌握好前端技术后,需要了解后端技术,后端框架运行原理等,一般高级前端开发工程师基本要求都是必须掌握一门后端编程语言。后端开发的同学也类似,10多年前流行的是后端MVC模式,页面可能流行使用jsp或者asp开发,后端会jquery后可以自己写前端页面,写模板的简单工作是前端的,那个时候一个系统的80%的工作量都是后端负责。但是现在时代变了,前端颠覆了,流行使用前后端分离的模式开发,加上MVVM框架的流行,更多的业务逻辑可能需要前端js来实现,后端开发人员只需要提供接口配合联调就行了。所以后端在实践的过程中,如果自己也学习一下前端,是可以自己去开发一个网站的,如果不懂前端,连jquery或bootstrap都搞不定,后端在学习上也是比较困难,因为不能自己去搞一些东西玩去学习。在这里说了那么多后端的情况,前端同学有没有感受到前端的压力?因为前端的角色越来越突出了。

竞争是残酷的,互联网的高级前端开发工程师,都要求开发者需要具备App方向的知识,可能是H5 App的开发经验或者RN、Ionic。所以,我们在学习编程语言的时候,语法懂了,会写页面了远远不够的。前端需要具备什么样的技术栈,或许你有看过一张脑图:

(图片来源于互联网,下边是大图预览)

个人当初学习整理的前端手册:https://github.com/giscafer/front-end-manual

 

前端实战学习群 学以致用,进步更快

demo演示立即加入