三种非常简单的编码习惯,可提高新手工程师的水平

自从我开始编程已经有一段时间了,我认为我可以在进行大量搜索的同时一点一点地开始编写代码。

但是,当我做某事时,我不知道在需要一个稍微复杂的实现时要寻找什么,或者在实现过程中由于反复试验而感到困惑,我不确定。该代码是如此混乱,以至于无法读取,并且新的墙壁层出不穷。

为了解决这些问题,即使您认为“我想提高编码水平”或“让我们巧妙地编写代码”,我也想知道从什么开始。

这次,当我教那些没有公司编程经验的员工和实习生时,我通过反复试验发现了它。作为工程师提高增长率的习惯我会介绍。

首先,编程可能很复杂而且很困难,实际上,许多初学者使它们的编程习惯变得更加复杂。我已经做了。

它不会突然增加您对语言或编程的理解,并且不会突然开始发出嘎嘎声,因此让我们摆脱在您习惯之前可以采取的复杂性。

这次介绍的编码习惯是无论如何,使您的编程变得简单它将为您做到。

养成习惯可能会有些麻烦,但是如果您养成适当的编码习惯,它将不仅直接影响实现速度,而且会直接影响增长速度,因此请养成一个舒适的习惯。 ..

如果以下任何一项适用于您,我相信本文将为您提供帮助。

  • 我经常看到并理解“让我们写评论”,但是我不确定如何写。
  • 我经常看到“让凹痕对齐”,但是我不确定为什么要对齐。
  • “我已经能够写动人的东西”和“我可以用某种方式解决它”,但是“如果撞到墙壁,这会花费很多时间”
  • 您可以实现与您想要实现的示例代码完全相同的示例代码,但是没有它就无法实现
  • 仍然不擅长复杂的实现

您现在可以练习的三种非常简单的编码习惯

这次我想介绍以下三个习俗。
1.对齐凹痕
2.在Twitter上发表类似推特的评论
3.在编写过程的同时减少想法的数量

从现在开始,我将详细介绍这三个风俗,但我认为前两个风俗是我经常听到的。
在该行业中,经常使用诸如“我必须这样做”和“我必须这样做”这样的激进表达,但是这次,我想重申一下它是“帮助我的实现和成长”。请尝试接收它。

如果出现“我完成了”的提示,可以跳过它。

让我们对齐缩进

这是最基本的项目,但是如果您还没有练习过,这就是您的增长幅度会急剧增加的习惯,因此请认为这将成为一切的基础并立即进行实践。

毕竟,有点夸张地说,“对齐缩进”可能在将来的长编程寿命中。节省时间的动作这就是为什么。

我将重点关注标记而不是编程语言,以供大家理解,但首先请看一下。

  <section>
<div><a href="//www.hogehoge.com">詳しくはコチラ
</a>をクリックしてください。
    </div><div><p>こんにちは
</p></div>
</section>

这太极端了,但即使已经达到这个数量,也已经很难看清。
当您要修复此代码时,必须先检查它在一个捆绑包中的距离。

但这是

<section>
  <div>
    <a href="//www.hogehoge.com">詳しくはコチラ</a>をクリックしてください。
  </div>
  <div>
    <p>こんにちは</p>
   </div>
</section>

如果是这样,您可以立即查看一个捆绑包的来源,因此可以快速更正所需的位置。

“代码排列整齐”减少了以后查看时“检查代码块”的不必要操作。

在示例中,使用了标记,但是实际上,这种“缩进未完成”状态不仅限于标记,而且在编程中也是如此。“您的编码很复杂”这很可能是一个标志。

这只是我的主观性,但是许多没有所有缩进的初学者经常“在一次思考很多的同时编写代码”,这使编写代码的流程变得复杂。我觉得这反映了。

我将在第三种习惯中更多地谈论这一点,
首先,请写有“对齐缩进”的意识。

顺便说一下,缩进设置在各种编辑器中可能会略有不同,但是基本上,一次按下Tab键时的“两个半角空格”变成一个缩进。
如果没有编辑器,则可以设置在按设置中的Tab键时缩进的方式,因此请尝试设置两个半角空格。

缩进大大减少了工作时间。
如果您觉得麻烦对齐,则表明编码过程很复杂。

在Twitter上发表类似推文的评论

“发表评论”是出乎意料的困难,而且在您习惯之前要付出高昂的代价,即使您被告知“让我们写下您为什么做而不是在做什么”,我认为仍有很多人无法做到。 ..

所以首先“像在Twitter上发推文一样发表评论”请尝试一下。

例如导轨

# せっかくpublished_atで公開状態を管理してるから後々予約投稿の機能とかつけたいなー
Page.find(params[:page_id]).update(published_at: Time.current)

# 車,雑談とかの指定された複数のTagを全部持ってるページを取得する実装したいけど難しすぎ..どれかなら簡単なのに...みんなどうやってんの?とりま諦めてどれかを含む検索にした。
pages = Page.eager_load(:page_tags).where(page_tags: {tag_id: params[:tag_ids]})

感觉像。我发现很难在工作中使用它,因此请在允许您的项目的环境中尝试。
不要刻苦思考,不要像往常一样喃喃自语。

实际上,代码编写者的感受非常有用。
因为将来当别人或你自己读代码时您可以一眼就知道自己是不是在写,因为您不理解或不按照规范写。因为。

如果您写的是您担心该评论,则可以更容易地理解“哦,我只是出于熟练程度而写这篇文章”并进行更正。
如果它说:“这很麻烦,但似乎由于XX而别无选择,只能这样做。”,您会知道它是由于依赖而编写的,并且在该文件之前或之后都没有出现。进行简单的校正并避免引起错误。

当您习惯评论时

# TODO : Time.currentを変数にして予約投稿機能つける
Page.find(params[:page_id]).update(published_at: Time.current)

# FIXME : 本当は指定された複数のTagを全部持ってるページを取得したい
pages = Page.eager_load(:page_tags).where(page_tags: {tag_id: params[:tag_ids]})

我认为将其放入这样的模具中是个好主意。

采取这些步骤是因为“能够发表正确的评论”是一种能力,并且像编程一样,有一天不会突然变得不可能。

实际上,为了进行适当的注释,有必要在适当的单元中实现功能并组织您的思想,因此“编写注释”本身就可以提高您的编程能力。会做的。

因此,像往常一样,开始以低调的方式养成“撰写评论”的习惯。

在不习惯之前,很难正确地编写代码,并且就像在Twitter上喃喃自语一样编写评论。
编写注释本身可以提高您的编程能力。

[HTML]如何写出注释!介绍便笺和方便使用

让我们在编写过程的同时减少想法的数量

例如,“如果付费会员有姓,则将姓和名数据合并并返回;如果付费会员没有姓,则仅返回名字;如果免费会员,则返回字符串[free user]。如果决定实施该流程,您将如何编写该流程?

当初学者绊脚石实现时,我总是建议“让我们立刻减少思考”关于它。

我也将解释这次使用Rails的含义。
想象一下您经常使用的语言。

状态1

def display_name(user:) # 後で閉じend書かなきゃ
  # 有料会員かどうか判別しなきゃ

状态2

def display_name(user:) # 後で閉じend書かなきゃ
  if user.is_subscribed # 後で閉じend書かなきゃ
    # 姓があるかどうか判別しなきゃ

状态3

def display_name(user:) # 後で閉じend書かなきゃ
  if user.is_subscribed # 後で閉じend書かなきゃ
    if user.last_name.present? # 後で閉じend書かなきゃ
      # 文字列を結合して...

如果你写像“我必须做的”在我脑海中积淀。

而且它很难阅读,因为这是一个痛苦的编码,而且我的头脑混乱,例如被许多要考虑的事情弄糊涂,偶然地忘记其中的一件事情以及缺少考虑。它成为一个代码。

正如我在第一个习惯中提到的,没有缩进的代码是在这种状态下编写的。

通过一个接一个地完成小任务很容易对齐缩进,
如果您同时执行许多任务,则可能无法很好地理解绑定,或者可能会感到麻烦,并且将无法“对齐缩进”。

这个一次减少思考量通过这样写,可以避免不必要的混乱,
您将能够编写简单且易于阅读的代码,同时加快实现速度。

规则很简单
1.用日语写你想做的事
2.一步一步地完成任务(编写一个简单的过程/如果先关闭/先关闭括号)
3.推迟可能很复杂的流程的实施,并且仅先完成整个流程。
只有三个。

让我们实际来看一下。
状态1

# 表示名を返す関数を作る
def display_name(user:)
  "返す文字列"
end

状态2

def display_name(user:)
  # 無料なら「無料のユーザー」を返す
  # 有料で姓がない場合は名だけを返す
  # 有料で姓がある場合は姓と名を返す
  "返す文字列"
end

状态3

def display_name(user:)
  # 無料なら「無料のユーザー」を返す
  return "無料のユーザー" unless user.is_subscribed
  # 有料で姓がない場合は名だけを返す
  # 有料で姓がある場合は姓と名を返す
  "返す文字列"
end

状态4

def display_name(user:)
  return "無料のユーザー" unless user.is_subscribed

  # 無料のユーザーがここから下のコードに到達することはないので、
  # 「有料なら」のようなイディオムが省ける。

  # 有料で姓がない場合は名だけを返す
  return user.first_name unless user.last_name.present?

  # 有料で姓がある場合は姓と名を返す
  "返す文字列"
end

状态5

def display_name(user:)
  return "無料のユーザー" unless user.is_subscribed

  return user.first_name unless user.last_name.present?

  # 姓がないユーザーがここから下のコードに到達することはないので、
  # 「姓がなかったら」のようなイディオムが省ける。

  # 有料で姓がある場合は姓と名を返す
  user.last_name + " " + user.first_name
end

它会这样写。

当然,除了这种书写方式外,还有其他多种书写方式,但是当您失望时,您不必考虑诸如“免费”或“没有姓氏”之类的条件,因此我觉得越来越少您可以看到。

编写html和其他编程语言时,这是相同的方法。

并且,例如,如果在上一个要求的末尾添加了诸如“如果有姓氏的话,用户将返回本周喜欢的商品的数量”之类的过程,

def display_name(user:)
  return "無料のユーザー" unless user.is_subscribed

  # 有料で姓がない場合は名だけを返す
  return user.first_name unless user.last_name.present?

  # 有料で姓がある場合は姓と名を返す
  name = "#{user.last_name} #{user.first_name}"
  # お気に入りした商品の数をつけて返す
  favorite_count = 3
  "#{name} : お気に入り商品は#{favorite_count}品です。"
end

喜欢,“当您获得自己喜欢的产品的数量时”写一个固定的数字,然后仅先完成整个过程。

最后,请考虑如何获取favorite_count并实现它,并将其替换为数字3以完成实现。
这样,您可以节省记住“在此之后我该怎么办?”的时间,并且您不太可能会无意中错过该实现。

通过这种方式编写,您脑海中的“立即思考”始终保持很少,因此您可以非常轻松地编写代码。

“将工作细分为一个功能”这一动作不仅减少了混乱和不必要的错误,而且减少了不必要的错误。
在成长中变得重要“正确分割功能”它与编程能力直接相关。

在此示例中,如果由于似乎复杂而导致延迟了对favourite_count的获取,则逻辑将被切成另一个函数,而无需在该函数中编写。可能是。

到目前为止,您不必担心该函数的粒度和可重用性,但是如果有一天进入该阶段,此习惯肯定会加快您的增长率。它应该给你。

1.用日语写你想做的事
2.一步一步地完成任务(编写一个简单的过程/如果先关闭/先关闭括号)
3.推迟可能很复杂的流程的实施,并且仅先完成整个流程。
根据规则“立刻减少思考”编写这样的代码。

结论

这次,我介绍了通用的编程习惯,该习惯将帮助任何编写任何语言的人,无论使用哪种语言。

一致地这些习惯“将事物分解并保持其体积小而简单”它将细分能力并将其付诸实践。
我个人认为这是一般编程的基础。

出于“提高编程能力”的目的,本文本身是通过“划分和简化到可以执行的程度”编写的,因此除编程外,还可以将其使用。

有一天,当您构建一个复杂的大型系统时,减少对每个实现的思考将变得越来越重要。
更耐修改,更少依赖…设计而不是实现本身可能是编程的有趣和令人兴奋的部分。

因此,请简化编码工作。

撰写本文的人

Llpl23

这是一个半成品,他既是前台的工程师又是设计师,并被Star and App欺负。我喜欢提供服务。