当前位置: 首页 > news >正文

十年码农建议:写代码时应该反复问自己8个问题

想成为一名优秀的程序员吗?

那么,现在是时候放下《24小时学会xxx语言》,十年码农告诉你:优秀的程序员应当养成每天反问自己以下8个问题的习惯。

你的代码中是否有一种模式存在?

找寻模式中的可行与不可行将发现其中看似无关的想法或基本原则。要对工作达到深入的理解,你必须养成反问自己“是否有一种模式存在?”的习惯。

它不仅仅适用于你的代码。是否有适应各类型商业变化的模式吗?是否有一种适用于技术发展的模式?你有没有看到同类型的错误如雨后春笋般冒出来?

怎么让代码变得更简单?

开发者经常想得到复杂的和可扩展的解决方案。做一些极为复杂的东西,觉得自己就是自己宇宙的主宰。问题是将来你永远无法预知产品和业务会如何改变。

“架构”和代码更像是园艺而不是建筑。你必须要有能力去适应不断变化的环境。越复杂的解决方案越难做。

你知道程序为什么要这样运行吗?

知道东西像那样运作和知道为什么会像那样运作是两个完全不同的事。如果你知道事情为什么会那样,那么你就能够做出更好的决策。

一个伟大的程序员和知道有某种编程语言的人来说,差别在于理解为什么的深度。

同样的原理也适用于问题修正。

“重启一下服务。”

“你试过重启吗?”

当有问题发生时,我们经常会想到这些话。每次你这样说时,你就失去了一个学习的黄金机会。

理解为什么出现这样的错误,将修正根本原因,避免出现治标不治本。最起码,你以后不要再犯同样的错误。

之前有没有人写过这样的代码?

无论何时,你发现自己发明了一个复杂的算法,你很可能走在了错误的轨道上。除非你搜索到一份别人正好解决了这个问题博士论文。

需要编写一个向用户鼠标旁的item添加标签的算法?看看Voronoi

Tesselations. 想要找到卡车送货的最短路径?看看Dijkstra. 想要找到用户输入内容的最接近的标记?应该是找到它的Levenschtein distance.

这只是几个简单示例,相信我,它们无处不在。

你知道这种技术的出处吗?

你认为你知道REST吗?

你有读过Roy Fielding描述REST的论文原文吗?你真的明白它的最初用意吗?那种在IDE v7工具中比你多用REST API生成向导5分钟的家伙写出来的博客可不算数的。

帮自己一个忙,试图去读概念或原理的原始文档,然后通过各种手段去了解行业领袖的最新发展动态。如果你不知道他们是从哪些开始的,那就紧跟他们的步伐吧?(不知道他们从哪来,就跟着他们到哪去吧!)

我喜欢现在所做的吗?

请面对编程其实是很难的。

除了很难以外,编程还是发展很快的。Art框架从2年前的“笨重恐龙”已经发展到今天的标准。为了站到你“游戏”的顶端,你必须树立一个终生学习和研究的信念。

如果你不喜欢你所做的,那么你就没有跟上其他家伙(喜欢自己所做的)的可能。所以找到让你激情燃烧的编程类型!不要因为市场缺口或者收入不菲而决定成为一名安全专家,不要因为一篇文章说UX是最热门的职业而决定成为一名UX专家。

再说一次,做你喜欢的。

做你喜欢的,所需的资源将随之而来的 ——彼得·麦克威廉斯

这些代码还可以用在其它地方吗?

程序员最大的一个限制就是,自己失败的想象力。

如果我们学习到一个适应于特定环境的东西,或者看到解决某个特定问题的技术时,我们认为这就它唯一适用的地方。这是完全错误的。每当学到新东西时,反问自己:“其他地方还可以使用吗?”

当发现了在图表上定位节点的新的伟大的方法时,是不是可以将它应用于二维数据集中感兴趣数据的定位呢?

当发现通过websockets从客户端发送数据到服务器端的新方法时,它怎么才能应用到可扩展的后台服务上呢?有时是错误的,但有时也是正确的。

这给我们带来了下一个问题……

难道真的没有办法吗?

我们生活在世界上很小的一个地方是不可能的(除了少数例外)。

假设不管你做的什么事情都是可行的,然后采用向后的方向回推回去。你可能会发现,你想做的暂时是不切实际的,但它足以改变世界,可能变成现实的速度比你想像的还要快。

得程招聘,千万程序员求职新选择!本文由得程撰写。


转载于:https://juejin.im/post/5cfe25f36fb9a07edf273959

相关文章:

  • quartz学习
  • 6.10 docker(四)进入容器
  • 【Todo】Nodejs学习计划
  • 2019西安联训B层 Day 5 test T2 排列组合
  • pg_bulkload
  • 洛谷 P1233 【木棍加工】题解
  • 这算是CSS的bug吗?
  • MAC OS X IOS系统调用的处理
  • 8位二进制补码表示整数的最小值是什么,最大值是什么
  • ttlsa教程系列之mongodb——(五)mongodb架构-复制原理复制集
  • Eclipse中java获得mysql的查询结果集
  • 成熟的软件组件都是老板用大把、大把的钱堆出来烧出来的,以最简单的数据库访问组件为例...
  • Cookie 在前端中的实践
  • 事务(Transaction)
  • Android之ubuntu源码开发环境搭建笔记
  • 【Linux系统编程】快速查找errno错误码信息
  • 5分钟即可掌握的前端高效利器:JavaScript 策略模式
  • Centos6.8 使用rpm安装mysql5.7
  • Elasticsearch 参考指南(升级前重新索引)
  • Fastjson的基本使用方法大全
  • JAVA并发编程--1.基础概念
  • Java精华积累:初学者都应该搞懂的问题
  • Java应用性能调优
  • mysql中InnoDB引擎中页的概念
  • Rancher如何对接Ceph-RBD块存储
  • Redis字符串类型内部编码剖析
  • SpringBoot几种定时任务的实现方式
  • 关于字符编码你应该知道的事情
  • 回顾2016
  • 基于 Ueditor 的现代化编辑器 Neditor 1.5.4 发布
  • 看完九篇字体系列的文章,你还觉得我是在说字体?
  • 一个SAP顾问在美国的这些年
  • C# - 为值类型重定义相等性
  • ​软考-高级-信息系统项目管理师教程 第四版【第19章-配置与变更管理-思维导图】​
  • (android 地图实战开发)3 在地图上显示当前位置和自定义银行位置
  • (ibm)Java 语言的 XPath API
  • (pytorch进阶之路)CLIP模型 实现图像多模态检索任务
  • (react踩过的坑)antd 如何同时获取一个select 的value和 label值
  • (七)c52学习之旅-中断
  • (一)Mocha源码阅读: 项目结构及命令行启动
  • .gitignore文件设置了忽略但不生效
  • .net framework4与其client profile版本的区别
  • .NET 的程序集加载上下文
  • @TableLogic注解说明,以及对增删改查的影响
  • [AutoSar]BSW_Com07 CAN报文接收流程的函数调用
  • [BZOJ]4817: [Sdoi2017]树点涂色
  • [C++] 统计程序耗时
  • [echarts] y轴不显示0
  • [emacs] CUA的矩形块操作很给力啊
  • [Foreman]解决Unable to find internal system admin account
  • [JS]JavaScript 简介
  • [Python] Ubuntu12.04LTS
  • [RK-Linux] Linux A/B System详解
  • [SpringMVC] SSM整合-前后台协议联调
  • [Step By Step]SAP HANA中创建层次分析视图(Hierarchy Analytic View)