解决问题的艺术
概述
实现结果
学习解决问题
开放式结局
帖子内容
资源
这篇文章取自我的博客,所以一定要查看它以获取更多最新内容😉
编程已经快三年了,我经常遇到很多人问我,为什么当初选择这条路?为什么像有些人说的那样,程序员这个职业如此受追捧?🤔 没真正接触过编程的人可能不明白,在电脑里输入各种数学、逻辑和其他类型的表达式有什么特别之处。学习编程语言的语法其实并不难,基本逻辑也不难。那么,这到底是怎么回事呢?
每个程序员,无论是 Web 开发者、软件工程师还是机器学习程序员,都知道编程不仅仅是语法、逻辑和算法的简单组合。编程背后还有更多非程序员无法理解的东西。解决问题的理念🤯——才是编程的真正支柱。这是编程市场上最紧俏的东西,也是最难学习(或者说最难练习)的技能之一……
概述
通过这个小介绍,我认为花点时间探索一下解决问题术语的含义是值得的。
即使在现实生活中,成熟的解决问题技巧也非常有用。它能让你冷静地处理并轻松分解难题。与其选择并非总是有效的蛮力方法,不如另辟蹊径。只需将问题拆分成更小的部分,然后逐一解决即可。我想说的是,解决问题的能力在于针对不同的难度选择正确方法的能力。这样做,你以后就能更轻松地解决问题。此外,解决问题的方式也很重要。你可以做得很好,或者……做得不太好。😅每一步都至关重要!
在编程中,这一点变得更加明显。在这里,你必须使用不同的结构、工具、技术和概念来实现预期的结果。以一个网站为例——你的最终成果。问题是什么?——创建它。整个过程就从这里开始……
实现结果
头脑风暴
对于创建网站的任务,我们首先需要进行一些头脑风暴。首先,创建网站绝对不是描述我们问题的最佳方式。我们应该将其分解成更小、更有意义的部分。为了简化示例,我们假设我们的网站是静态的——这里不需要后端(服务器端代码)。无需过多思考,我们可以通过两种不同的方式来实现:
- 按页面- 我们将网站问题拆分成更小的、特定于页面的问题。在这种情况下,我们将逐页构建网站,完成一个页面后再继续下一个页面。此外,如果我们的页面布局相似,例如博客文章,我们也可以通过所谓的页面模板来划分网站。
- 通过代码——我们也可以从代码层面划分问题。在这里,我们将任务列为代码的不同部分,而不是页面。例如,首先,我们用 HTML 和 CSS 创建每个页面的基本布局。接下来,我们将正确的 JS 逻辑添加到每个页面中。最后,我们可以处理事件——点击、触摸等等。
这里有一些非常笼统、不详细的可能方法描述。当然,还有很多方法可以解决这个特定问题/更小的问题。当然,我们问题的这些小块仍然过于笼统。你需要进一步细分。只有这样,你才能得到完美的清单。😁
解决
事情远未结束。现在到了真正的解决问题的部分。首先,你必须运用你的编程知识来找到解决问题的方法。然后,坦白地说,你必须找到其他甚至更好的方法。你看,在编程中,你的做事方式至关重要,就像在现实生活中一样。你需要以最好的方式做好你的工作,才能取得最好的结果。只有这样,你才能超越竞争对手,不断创新,最终占据领先地位。🥇
一个好的最终产品需要多个部分共同构成。所有这些部分结合在一起,就形成了你解决问题的方法。这些方法包括:
- 设计——对于视觉产品来说至关重要。你必须为用户提供尽可能最佳的体验,甚至超越其他产品。设计对用户的第一印象也有很大的影响。自然,赏心悦目的东西,自然会让人更想看一看。👀
- 性能——用户体验的另一个方面。它与编程方面紧密相关,并且在很大程度上决定了你的成功。你的产品应该满足用户的需求,并且性能要与竞争对手相当甚至更好。但你得记住一件事——过度优化是万恶之源! 😈
- 架构——产品的代码端也应该执行良好。良好的架构在后期管理和扩展产品方面非常有帮助。但实现这样的结果可能很困难且复杂——尤其是在当今世界,数千行代码是最低要求。🤨
- 代码风格——与软件架构密切相关,代码风格在可读性方面起着至关重要的作用。你编写的代码必须易于理解,不仅对你和潜在的同事,而且对所有其他程序员也是如此。只有这样,你才能说你编写的代码真正具有可读性。顺便说一句,对于开源软件来说,这一点非常非常重要。拥有严格定义的代码风格规则确实是一件幸事。😂
- API - 在开发编程工具(例如库或框架)时尤为重要。为 API 添加良好的顺序和结构,可以让最终用户更轻松、更愉快地使用它。在这里,架构再次变得重要,因为 API 很可能在产品之外与其非常相似。
通过对程序员(在这个例子中是 Web 开发人员)需要关注的最重要的事情的快速概括和我们的这个小案例研究,我希望那些怀疑这项工作重要性的人至少能够对这里发生的事情有所了解。
每个问题解决后,都必须编写相应的代码。经过长时间的测试后,你可以将解决部分标记为“已完成”。🎉
最终产品
如果你认为到现在为止,我们的问题解决已经结束了,那你的想法也差不多是对的。所以,如果我们深入研究,你会发现我们的开发周期中还有一种解决问题的模式。这种模式并不那么明显,你甚至可以说它是人为编造的。它就是你的产品要解决的问题。在你开始质疑这个说法之前,让我们进一步探讨一下。
每一款新产品上市,都会解决人们面临的某种问题,让他们的生活更加便捷。在科技领域,无论是引领我们进入美好时代的电脑,解决人机交互难题的智能手机,还是帮助你随时掌握最新资讯的智能手表,每个新产品类别都有其自身的问题需要解决,也就是“目的”。一款没有目的的产品不会拥有如此庞大的潜在用户,甚至可能根本不会存在。我们甚至可以说,地球上的所有生命也都有其目的,但我们在此就不做哲学探讨了。😂
所以,没错,你的最终产品很可能也能自己解决问题!你一点也不惊讶,不是吗?🤨
学习解决问题
现在我们进入了最有趣的部分!虽然解决问题看起来很复杂,但实际上,学习这项技能的过程有多难呢?嗯,我只能说——视情况而定,但让我们做得更好一些。😉
首先,让我们来探讨一下理论知识。正如我们之前讨论过的,在一般的解决问题周期中,解决问题的环节很大程度上取决于你的工作质量。在这里,你的知识无疑扮演着至关重要的角色。你对各种工具、技术等了解得越多,你就能越快、越轻松、越好地完成工作。在这一部分,你的学习过程永无止境。这并非意味着你不投入无限的时间学习就无法做到,但当你掌握的知识越多,你肯定能做得更好。这只是一个经验法则。👍
接下来,我们进入了可以称之为思考的部分……我真不知道该怎么称呼它。总之,它是所有这些经验的结合,教会你如何应对和解决这些问题。就像你拥有我们之前提到的网站一样,你知道自己该做什么。你会把问题分解成更小的部分,然后尝试逐一解决。你知道计算机所做的一切都必须经过编程。你知道如何用简单的变量和函数来实现你的梦想……好吧,我可能有点过度了。😅
一般来说,你必须知道如何利用所有编程语言特性、API和其他工具来解决你的特定问题。许多编程新手可以快速学习语法,但不知道下一步该做什么。他们只能在遵循教程或其他形式的指导时编写代码。他们理解给定代码的含义和作用,但不知道如何自己编写代码。就我个人而言,我(可能还有许多其他程序员)以前也处于这个阶段。我知道那种感觉有多尴尬。相信我的话 - 如果你坚持编写代码,这种感觉很快就会消失。真的!我不知道这种情况究竟是什么时候发生在我身上的,但我可以 100% 确认这一说法。但同样,要做到这一点,你必须坚持下去,不要害怕尝试与教程不同的东西 - 这真的值得!🚀
知识和逻辑思维的结合,加上上面提到的整个操作方法的理解,形成了解决编码问题时获得最佳结果所需了解的一切。
开放式结局
成为一名优秀的程序员意味着拥有更优秀的问题解决能力和逻辑思维能力。这会让你更好地应对现实生活中可能遇到的每一个困难。这就是为什么有人会说编程是一门艺术,或者更确切地说,是一种精神状态。这些深刻的思考可以帮助每个人更好地理解程序员的工作。
另外需要注意的一点是,在你的职业生涯中,你很可能会经历或已经经历过一种有趣的关系。这是一个有趣的悖论——解决问题的过程是开发周期中最困难的部分之一,但它也能带来最大的快乐。😁 当你最终解开谜题时,当你最终实现最佳架构时,当你最终达到最佳性能时,当你最终对自己的工作感到满意时,你都会有这种感觉。而这正是我真心希望你拥有的。🎉
学习编程和解决问题是一段永无止境的旅程。你必须做好准备,迎接沿途的重重障碍,但也要享受其中的乐趣。有时你需要强行前进,有时则需要放手一搏。这只是你的故事,所以放手去写吧,尽你所能,把它写得最好。😉
帖子内容
希望你喜欢这篇逻辑严谨、理论性强,同时又不乏哲理的文章。如果你觉得值得一读,不妨分享给 其他程序员、Web 开发者以及经常问你工作内容的人。😅 欢迎在下方评论区分享你的观点,并留下你的感想,让我知道你的想法。此外,欢迎关注我的Twitter和Facebook 页面,获取更多内容。想要及时了解最新文章,请访问我的个人博客。🚀 现在,享受解决问题的乐趣吧!🔥
资源
- 如何像程序员一样思考——来自“medium.freecodecamp.org”的解决问题的课程;
- 来自“codeburst.io”的解决编程问题的 10 个步骤;
- 来自“towardsdatascience.com”的10 种常见软件架构模式简介;
- 如何设计一个好的 API 以及它为何重要,来自“research.google.com”;
- API 设计 101:来自“apiacademy.co”的API 设计基础;