程序员该怎么做,才能成为coding王者?
每当做编程题目时,大多数人都会靠基本的直觉,遵循一些固定的步骤来有效地解题。不管是有意还是无意,在做编程题目的时你会下意识地遵循一些步骤,在阅读完这篇文章后你就可以将这些步骤和这篇文章联系起来,从而就可以更高效地解题。因此在这篇文章中,我将讨论解编程题的五个步骤。
作者 | Madhav Bahl
译者 | 弯月
责编 | 屠敏
出品 | CSDN(ID:CSDNNews)
这个世界需要的是开发者,我为什么要在编程竞赛上花时间呢?
我自己就是开发,但我发现大多数开发者(包括许多“非常”有能力的开发者)并不是太擅长做数据结构、算法以及一些通用的问题。很可悲的是,许多人只不过是通过遵循一些基本的步骤来开发应用程序,或者做一些非常简单的软件,然后称自己为“程序员”。
这个时代人人都能编程,所以深入学习数据结构和算法不再是当今学生们的第一选择,即使是那些本应非常重视这些领域的学生。
即使是我,作为一个开发者,也没有参加过太多编程竞赛,但我还是会尽量在算法和数据结构上多花些时间,学习如何编写高效的代码,并鼓励和推荐所有人都关注这个方面。
下面是一些例子,表明数据结构、算法和编程竞赛(一般意义上的)的内容能帮助学生们:
选择好的大学
编写高质量的代码
编写高效率的代码(时间和空间复杂度)
最优地使用资源
逻辑推理
知名度(编程竞赛的学生可以接触到巨大的社区)
机遇(大量的编程竞赛)
编程的过程有无限的乐趣
“编程教你怎样面对大问题。”——Jack Dorsey
现在进入正题。
做编程题时的五个步骤
几天前在做一道编程题时,我发现我在解题时都会遵循一个固定的模式。我又做了几道题,并写下了解题前后我脑海中的步骤。很惊讶的是我发现竟然真的有规律可循,我甚至都不知道我用了五个步骤,但有了这五个步骤,我就能更高效地解题了。
正如我前面说过的,很可能你也会下意识地使用这些步骤,但如果你进行总结,并意识地使用后,就会发现惊人的区别。
1.理解并分析问题
阅读题目,开始思考题目,可能的话在纸上写下给出的条件和你需要找出的条件。
问自己几个问题:
能完全理解题目吗?
能给非专业人士解释清楚问题吗?
需要多少输入,每个输入都是什么?
每个输入带来的输出是什么?
能从题目中分解出几个模块吗?
是否拥有足够的信息?如果没有,试着再理解一遍题目。
2.仔细阅读示例输入
仔细阅读示例输入,试着想出更多的示例输入,这样能帮你更好地理解题目,而且,这样能让你想清楚你的代码需要处理多少种情况,可能的输出或输出范围是什么。
这里我建议:
选择非常简单的输入并找出输出
选择更复杂、更大的输入,看看输出是什么,需要多少种用例
然后开始处理边界条件:
不提供任何输入,输出应该是什么
提供非法输入,输出应该是什么
3.分解题目
对于大型问题来说这一步非常非常有帮助。这种情况下我建议遵循以下步骤:
试着手绘一份流程图或 UML
将问题分解成模块,或子问题
试着为每个子问题建立独立的功能
按顺序或按需要调用子问题(很可能一个函数会调用另一个函数),将它们连接起来
如果是真实世界的问题(如管理系统等),试着用类和对象来实现
4.开始解题和写代码
现在题目已经分析完,可以真正编写代码了。如果不能一次性解完,那么可以先给一个简单的部分写代码,随着解决问题的深入,你会逐步发现更多细节,从而找出更多的思路。
只需要记住这三点,就一定能找到解法:
你的起点
你的位置
你的目标
而且,如果你是在面试中,不要浪费时间去解决整个题目再告诉面试官,应该不断简化问题,不断告诉面试官你解决问题的方法。
告诉面试官你从哪里入手
告诉他你在思考什么方法
找出你在问题中面临的最难的部分
有时可以忽略“最难”的部分,从简单的子问题入手,这样能给你带来更多的时间去思考前者
解决完简单的子问题后,试着用类似的方式解决困难的部分
解题时可能会想出更好的方法,要告诉面试官
5.回顾并学习
这部分是最重要的!解题完成后,一定要回顾下:代码能否改进?有没有另一种解题的方法?
不要做完就放弃了!这样等于放弃你找出其他解法的可能性,也放弃了完整地探索问题的机会!
下面是在写完代码之后应该问自己的问题:
这段代码是否能处理任何输入(包括边界情况)?
有没有其他方法解决问题?
代码是否有效?能否更有效?
代码是否可读?
如果别人给你这段代码,你能否理解?
性能能否提高?
能否利用其他算法达到更好的结果?
除了这些问题之外,还要检查同一题目其他人的解答,看看别人是怎样完成的,这个过程中你会学到很多。
总结
本文讨论了以下五个步骤:
分析并理解问题
仔细阅读示例输入和用例
将问题分解成子问题,或函数,或模块
开始解题和编程
解题完成后,回顾代码是否可以改进,是否有其他解题方法
以上,希望这篇文章可以提高你的解题技巧。
原文:
https://hackernoon.com/how-to-approach-any-coding-problem-9230f3ad6f9
本文为 CSDN 翻译,如需转载,请注明来源出处。
推荐阅读:
网易开源支持图像识别的自动化UI测试工具,零基础亲测好评!
一键fxxk,代码修复神器拯救你
Python | 火锅年度报告:上海人最爱吃火锅?
Python | 自动回复微信祝福语
“妈,我的年终奖是5张彩票,你来刮刮看”
便利蜂“高数裁员”开天下先河!
“史上最强春节档”来袭!数据解读值得看的影片是......
ProgPow:以太坊上浮世绘
27 道阿里巴巴 Java 面试题,你会几道?
点击“阅读原文”,打开CSDN APP 阅读更贴心!
相关文章:

27.3. source code
tar zxvf bandwidthd-2.0.1.tgz cd bandwidthd-2.0.1 ./configure --prefix/srv/bandwidthd-2.0.1 make make install 原文出处:Netkiller 系列 手札 本文作者:陈景峯 转载请与作者联系,同时请务必标明文章原始出处和作者信息及本声明。

WF4.0实战(一):文件审批流程
http://www.cnblogs.com/zhuqil/archive/2010/04/13/DocumentApprovalProcess.html转载于:https://www.cnblogs.com/Little-Li/archive/2010/06/01/1749392.html

AI科技大本营在线公开课大放送(附演讲PPT)
新年新思!新一年,每个人的梦想都闪耀着多彩光芒,对于AI领域的每一位学习者和从业者,我们充满渴望,怀揣梦想,心系对技术的不懈追求。AI科技大本营同样也有自己的新年梦想和脚踏实地的规划,比如今…

《微信跳一跳》安卓手机刷分软件搭建及攻略
2019独角兽企业重金招聘Python工程师标准>>> 元旦期间被微信小程序的游戏刷屏幕了。手笨脚笨的我也尝试了下这新出的小玩意,实在话手脚不协调最高仅仅90分,处于做技术的角度,直觉上可以技术上模拟解决,凑好朋友在微信群…

【libevent】libevent库学习总结(一)——基础
libevent库学习总结(一)——基础 一、基础 1.1、 介绍 Libevent是一个用于开发可伸缩网络服务器的事件通知库。Libevent API提供了一种机制来执行回调函数,当某个特定事件发生在文件描述符上或超时到达之后。此外,Libevent还支…

AS1.0(2.0)中的XML示例
虽然Flash早就升级为AS3.0,但是FMS的服务端编程依然仅支持AS1.0(2.0),服务端与.net通讯的最简单方式莫过于请求一个RESTful的webService或wcf,通过它们返回的xml来获取数据。 var _xml:XML new XML("<ArrayOfstring xmlns\"htt…

【Qt】Qt发布可执行程序(打包依赖库)
Qt发布可执行程序(打包依赖库) 0、编译出可执行文件 如:xxx.exe 1、将xxx.exe拷贝到一个目录下面 2、启动Qt终端交互界面程序 如:Qt 5.6 for Desktop(MinGW) 3、进入xxx.exe所在的目录 4、执行命令…

小编说之“常见问题答疑”
2019独角兽企业重金招聘Python工程师标准>>> 关于前嗅Forespider爬虫的常见问题答疑 奋战在一线为客户答疑的狗蛋儿给小编提供了很多客户经常会问到的问题的素材,小编帮大家整理了一些,快来看看是不是都用的上吧! 一、采集预览没有…

给AI开发者的新年礼物,技术公开课大放送(附演讲PPT)
各位AI科技大本营的伙伴大家好,营长携编辑组的全体成员给大家拜年了! 新年新思!新一年,每个人的梦想都闪耀着多彩光芒,对于AI领域的每一位学习者和从业者,我们充满渴望,怀揣梦想,心系…

通用权限管理组件使用说明书V3.0 错误校正 感谢自由软件职业者Helper(767870484)...
有时候,真想做个像样的东西出来,但是往往各方面的能力都不够,这么多人,Helper(767870484)仔细认真的阅读了这个帮助手册、并给给于了指正,在这里非常感谢,你的劳动成果已经被通用权限…

Reddit欲融资3亿美元,由腾讯领投
整理 | 一一出品 | AI科技大本营(ID:rgznai100)AI科技大本营消息,据 TechCrunch 报道,多个信源透露,美国社交网站 Reddit 将融资 1.5 亿到 3 亿美元,D 轮融资将由中国科技巨头腾讯公司领投,投前…

【libevent】libevent库学习总结(二)——编程步骤
一、libevent编程步骤 0、分配并初始化event_base,两种方法 0.1 event_base_new:线程安全,代替event_init; 0.2 event_init:线程不安全,不推荐使用,仅仅是为了向后兼容 1、创建event…

HP交换机配置命令
1.命名hostname 7-West-4F-2510 2.设置管理IPvlan 1ip address 192.168.41.123 255.255.255.03.修改支持的默认vlan数max-vlans 64max-vlans //修改vlan的数量,默认只有8个,修改后需重启后才可生效4.重启reload //重启交换机5.配置v…

【Qt】Qt程序编译成功,执行时报错:程序异常结束,crashed
【Qt】Qt程序编译成功,执行时报错:程序异常结束,crashed 错误打印信息 Starting E:*exe… 程序异常结束。 E:*.exe crashed. 原因 使用到外部库,编译时,指定了库连接,但是在程序运行时找不到库…

近900000条if-then关系图谱,让神经网络“懂”常识推理
编译整理 | 一一出品 | AI科技大本营(ID:rgznai100)“神经网络能学习日常事件的常识推理吗?能,如果在 ATOMIC 上训练的话。”ATOMIC(原子) 是一个机器常识图集,一个用自然语言建立的 870, 000 个…

weex 阶段总结
新年伊始,回顾过去的一年,收获很多,之前一直在研究weex,说心里话感觉心好累,官方文档不全,社区不活跃,遇到很多坑,官方发布的版本有时都有坑,搞得我都不敢更新版本了。 但…

DOS批处理高级教程精选(六)
为什么80%的码农都做不了架构师?>>> 第五章 set命令详解 很久没发贴了,今天来写点讲BAT的新手教学贴! 在上一贴中我简单的介绍了一下SET设置自定义变量的作用,现在我来具体讲一下set的其他功能. 一、用set命令设置自定义变量 显示、设置或删除 cmd.exe …

8.11. Migrating MySQL Data into Elasticsearch using logstash
https://www.elastic.co/guide/en/logstash/current/plugins-inputs-jdbc.html 8.11.1. 安装 logstash 安装 JDBC 驱动 和 Logstash curl -s https://raw.githubusercontent.com/oscm/shell/master/database/mysql/5.7/mysql-connector-java.sh | bash curl -s https://ra…

佩奇扑街、外星人疯狂!Python 告诉你大年初二应该看哪部电影
作者 | 罗昭成责编 | 唐小引转载自 CSDN资讯(ID:CSDNnews)引言2019 年 1 月,《啥是佩奇》短片在互联网快速传播,各大社交平台形成刷屏之势。不到 24 小时,官博发出的视频已经收获 2800 万次观看,…

【POCO】POCO学习总结(二)——配置选择
使用方法: configure {options} options总结 –help:打印帮助 –config< config_name> 使用给定配置,在poco-1.7.8p3-all/build/config目录下,可以在对应的配置文件中修改编译工具的路径和名字,编译时的选项等。 AIX Darw…

告别排队!用Python定时自动挂号和快捷查询化验报告
作者 | 阿文来源 | 程序人生(ID: coder_life)我什么要做这个事情去年单位体检查出问题来,经过穿刺手术确诊是个慢性肾脏病2期, IGA 肾病三期,可能大家对于这个病并不是很了解,但是另外一个词可能大家都听过…

【POCO】POCO学习总结(三)——交叉编译
最小功能编译 编译选项:–minimal :只构建XML, JSON, 工具 and 网络 1 修改配置文件 $ vi poco-1.7.8p3-all/build/config/ARM-Linux13 LINKMODE ? SHARED 14 TOOL ? arm-linux 15 POCO_TARGET_OSNAME Linux 16 POCO_TARGET_OSARCH ? armv7l 主要…

转:入侵网站必备-sql server
来源:http://www.bitscn.com/plus/view.php?aid28692 1.判断有无注入点 ; and 11 and 12 2.猜表一般的表的名称无非是admin adminuser user pass password 等.. and 0(select count(*) from *) and 0(select count(*) from admin) ---判断是否存在admin这张表 3.猜…

27.5. PROCEDURE ANALYSE()
数据列优化 SELECT ... FROM ... WHERE ... PROCEDURE ANALYSE([max_elements,[max_memory]]) 原文出处:Netkiller 系列 手札 本文作者:陈景峯 转载请与作者联系,同时请务必标明文章原始出处和作者信息及本声明。

Linux 日志管理(RHEL7)
日志管理系统和程序的日记本记录系统,程序运行中发生的各种事件通过查看日志,了解及排除故障信息安全控制的依据 内核及系统日志由系统服务rsyslog统一记录/管理日志消息采用文本格式主要记录事件发生的时间,主机,进程,内容常见的日志文件 /var/log/messages 记录内核消息…

汇聚6年思想变迁:知识图谱报告幻灯片大全
本文汇总了中文知识图谱计算会议CCKS报告合集,涵盖从2013年至2018年,共48篇,从中可以看出从Google 2012年推出知识图谱以来,中国学术界及工业界这6年来知识图谱的主流思想变迁。作者 | 刘焕勇来源 | CSDN博客编辑 | apddd项目介绍…

【POCO】POCO学习总结(四)——MinGW编译poco
在window下使用MinGW编译poco 使用MSYS 下载MSYS 官网介绍:http://www.mingw.org/wiki/Getting_Started 官网下载:https://jaist.dl.sourceforge.net/project/mingw/Installer/mingw-get-setup.exe 安装 运行mingw-get-setup.exe,只选择…

辞职之后的思考--激励
本人曾拿过多次奖金,也曾与很多同事沟通过拿奖金的感觉,引发一些思考,这其实也是希望在以后有机会给别人发奖金时做参考之用。 并不是所有人都会有奖金,所以如果我没有奖金其实也没有什么关系,但是,我非…

【linux】串口编程(一)——配置串口
目前遇到的串口编程都是用于通信,很少作为终端显示。以前没有对串口编程做深入研究,本次以libmodbus源码中对串口的设置为例,详解总结串口编程时配置的属性(struct termios) 以libmodbus中_modbus_rtu_connect函数为例…

Playboy封面女郎、互联网第一夫人,程序员们的“钢铁审美”
整理 | 琥珀 出品 | AI科技大本营(ID:rgznai100) 46 年前,《花花公子》(Playboy)的一期杂志封面女郎 Lenna,成为数万“钢铁直男”的梦中女神。然而,这位女性更为人所知的是她在计算机图像处理领…