91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內(nèi)不再提示

一個程序員的腦回路進程分析

5RJg_mcuworld ? 來源:未知 ? 作者:易水寒 ? 2018-03-29 15:38 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

寫在前面:

這篇回答并不是講述在生活中程序員如何買蘋果,而是以買蘋果為例說明程序員如何解決問題。程序員需要對問題進行透徹的分析,理清其涉及的所有細節(jié),預測可能發(fā)生的所有意外與非意外的情況,列出解決方案的所有步驟,以及對解決方案進行盡量全面的測試。

而這些正是我認為編程難的地方。任何一點遺漏都會成為bug,輕則導致挨罵,重則導致經(jīng)濟損失甚至危害安全。

注意這些難點全部和語言無關。和編程所需要的絕對嚴密的邏輯相比,語言實在是太簡單了。(某些自帶代碼混淆效果的語言除外)

普通人:

我今天要買一斤蘋果。

程序員:

我今天要買一斤蘋果。

  • 因為我只喜歡紅富士蘋果,所以我只買紅富士蘋果。

  • 我能接受的最高價格是10元/斤。

  • 正常情況下一斤蘋果用一個袋子能裝下,但是為防萬一,我會帶兩個袋子。

  • 我知道附近的3家水果店,所以我會依次訪問這3家水果店。

根據(jù)上述條件,我設計出以下的買蘋果的流程:

(以下區(qū)域,可以左右拖動查看完整內(nèi)容)

買蘋果流程開始 對水果店0、水果店1、水果店2依次執(zhí)行: 拜訪一家水果店流程開始   走到此水果店   如果此水果店沒有開門,則結束當前的“拜訪一家水果店流程”   如果此水果店沒有蘋果,則結束當前的“拜訪一家水果店流程”   如果此水果店的蘋果當中沒有紅富士蘋果,則結束當前的“拜訪一家水果店流程”   如果此水果店的紅富士蘋果剩余不到一斤,則結束當前的“拜訪一家水果店流程”   如果此水果店的紅富士蘋果的價格高于10元/斤,則執(zhí)行3次:   講價流程開始     詢問店主是否愿意將價格降到10元/斤或更低     如果店主愿意,則跳過剩余的“講價流程”   講價流程結束   如果此水果店的紅富士蘋果的價格仍然高于10元/斤,則結束當前的“拜訪一家水果店流程”   打開一個袋子,將其作為當前的袋子   重復執(zhí)行以下流程,直到總重量大于一斤:   裝袋一個蘋果流程開始     從所有的不在袋子中的紅富士蘋果中選出最好的一個     如果此蘋果能裝入當前的袋子,則將此蘋果裝入當前的袋子,否則執(zhí)行:     換袋子流程開始       如果我有剩余的袋子,則從中任意選出一個并作為當前的袋子,否則執(zhí)行:       向店主要袋子流程開始         向店主索要一個袋子         如果店主拒絕給我袋子,則將我的所有袋子里的所有蘋果取出,然后結束當前的“拜訪一家水果店流程”         將店主給我的袋子作為當前的袋子       向店主要袋子流程結束     換袋子流程結束     測量我的所有袋子里的所有蘋果的總重量   裝袋一個蘋果流程結束   根據(jù)我的所有袋子里的所有蘋果的總重量和店主給出的價格,計算我應付的價格   向店主詢問我應付的價格   如果我不接受店主索要的價格,則執(zhí)行3次:   校對流程開始     向店主解釋我計算出的價格,并詢問其是否同意     如果店主同意,則跳過剩余的“校對流程”   校對流程結束   如果我仍然不接受店主索要的價格,則將我的所有袋子里的所有蘋果取出,然后結束當前的“拜訪一家水果店流程”   如果我沒帶錢,則將我的所有袋子里的所有蘋果取出,然后結束當前的“拜訪一家水果店流程”   付錢拿走蘋果   跳過剩余的“拜訪一家水果店流程” 拜訪一家水果店流程結束買蘋果流程結束

這個流程怎么樣?我來設計一些測試樣例,測試一下這個流程。

測試發(fā)現(xiàn)一個問題:如果水果店0 和水果店1 都有紅富士蘋果并且價格都低于10元/斤,而且水果店1 的價格比水果店0 更低,那么我希望買水果店1 的蘋果,但我設計的流程會讓我買水果店0 的蘋果。

為了解決這個問題,我應該先詢問所有水果店的價格,然后去價格最低的那一家買蘋果。

經(jīng)過修改,我重新設計出以下的買蘋果的流程:

(以下區(qū)域,可以左右拖動)

買蘋果流程開始 對水果店0、水果店1、水果店2依次執(zhí)行: 詢問一家水果店的紅富士價格流程開始   走到此水果店   如果此水果店沒有開門,則視此水果店的紅富士價格為無窮大元/斤,并結束當前的“詢問一家水果店的紅富士價格流程”   如果此水果店沒有蘋果,則視此水果店的紅富士價格為無窮大元/斤,并結束當前的“詢問一家水果店的紅富士價格流程”   如果此水果店的蘋果當中沒有紅富士蘋果,則視此水果店的紅富士價格為無窮大元/斤,并結束當前的“詢問一家水果店的紅富士價格流程”   如果此水果店的紅富士蘋果剩余不到一斤,則視此水果店的紅富士價格為無窮大元/斤,并結束當前的“詢問一家水果店的紅富士價格流程”   向店主詢問此水果店的紅富士蘋果價格并記錄 詢問一家水果店的紅富士價格流程結束 從3家水果店中選出紅富士價格最低的一家(如果有并列則隨機選擇),將其作為目標水果店 如果目標水果店的紅富士蘋果價格為無窮大元/斤,則結束當前的“買蘋果流程” 走到目標水果店 如果此水果店的紅富士蘋果的價格高于10元/斤,則執(zhí)行3次: 講價流程開始   詢問店主是否愿意將價格降到10元/斤或更低   如果店主愿意,則跳過剩余的“講價流程” 講價流程結束 如果此水果店的紅富士蘋果的價格仍然高于10元/斤,則結束當前的“買蘋果流程” 打開一個袋子,將其作為當前的袋子 重復執(zhí)行以下流程,直到總重量大于一斤: 裝袋一個蘋果流程開始   從所有的不在袋子中的紅富士蘋果中選出最好的一個   如果此蘋果能裝入當前的袋子,則將此蘋果裝入當前的袋子,否則執(zhí)行:   換袋子流程開始     如果我有剩余的袋子,則從中任意選出一個并作為當前的袋子,否則執(zhí)行:     向店主要袋子流程開始       向店主索要一個袋子       如果店主拒絕給我袋子,則將我的所有袋子里的所有蘋果取出,然后結束當前的“買蘋果流程”       將店主給我的袋子作為當前的袋子     向店主要袋子流程結束   換袋子流程結束   測量我的所有袋子里的所有蘋果的總重量 裝袋一個蘋果流程結束 根據(jù)我的所有袋子里的所有蘋果的總重量和店主給出的價格,計算我應付的價格 向店主詢問我應付的價格 如果我不接受店主索要的價格,則執(zhí)行3次: 校對流程開始   向店主解釋我計算出的價格,并詢問其是否同意   如果店主同意,則跳過剩余的“校對流程” 校對流程結束 如果我仍然不接受店主索要的價格,則將我的所有袋子里的所有蘋果取出,然后結束當前的“買蘋果流程” 如果我沒帶錢,則將我的所有袋子里的所有蘋果取出,然后結束當前的“買蘋果流程” 付錢拿走蘋果買蘋果流程結束

現(xiàn)在這個流程是不是完美了呢?不是,我還能發(fā)現(xiàn)很多問題。

如果3家水果店都有紅富士蘋果但都不到一斤,但是三家店加起來能達到一斤,那么我不應該結束流程回家,而是應該把三家店的紅富士蘋果都買下來。

如果我向水果店詢問價格的時候這家店還有紅富士蘋果,但我詢問完所有水果店的價格后這家店的紅富士蘋果賣完了,那么我的流程會讓我試圖處理不存在的紅富士蘋果。

我走路的過程中可能會遇到突發(fā)事件,比如發(fā)現(xiàn)了新的水果店,比如袋子破掉了蘋果掉一地,對于這些情況我的流程都無法進行處理。

啊問題太多了我懶得再改流程了。我還是去X寶買吧。

那么接下來我要設計一個在X寶買紅富士蘋果的流程……


聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 編程
    +關注

    關注

    90

    文章

    3716

    瀏覽量

    97208
  • 程序員
    +關注

    關注

    4

    文章

    956

    瀏覽量

    30946

原文標題:編程到底難在哪里?

文章出處:【微信號:mcuworld,微信公眾號:嵌入式資訊精選】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    飛凌嵌入式ElfBoard-進程之什么是進程

    系統(tǒng)性能,優(yōu)化系統(tǒng)資源的使用,以及管理進程的生命周期。當然,在程序中,用戶也可以通過系統(tǒng)調(diào)用和庫函數(shù)來獲取和管理進程信息。進程IDLinux下每個
    發(fā)表于 03-02 08:49

    Linux進程管理不用愁!這6工具幫你搞定90%場景

    在 Linux 系統(tǒng)中,進程是資源分配的基本單位,無論是服務器運維、程序調(diào)試還是日常使用,掌握進程管理工具都是必備技能。今天就帶大家梳理 6 最常用的
    的頭像 發(fā)表于 02-04 16:23 ?1650次閱讀
    Linux<b class='flag-5'>進程</b>管理不用愁!這6<b class='flag-5'>個</b>工具幫你搞定90%場景

    飛凌嵌入式ElfBoard-進程之什么是進程

    ID,用戶ID,組ID以及終止狀態(tài)等)。4.1.1 進程程序的區(qū)別程序靜態(tài)的代碼集合,是
    發(fā)表于 01-26 08:42

    進程概念和特征

    的并發(fā)性和共享性。   為了使參與并發(fā)執(zhí)行的程序(含數(shù)據(jù))能獨立地運行,必須為之配置專門的數(shù)據(jù)結構,稱為進程控制塊(Process Control Block, PCB)。系統(tǒng)利
    發(fā)表于 01-15 06:39

    進程的控制

    進程控制的主要功能是對系統(tǒng)中的所有進程實施有效的管理,它具有創(chuàng)建新進程、撤銷已有進程、實現(xiàn)進程狀態(tài)轉換等功能。在操作系統(tǒng)中,
    發(fā)表于 01-15 06:05

    大理的AI野心藏不住了——風花雪月中千名程序員探討人工智能

    2025 年12月4日至6日第二屆CCF程序員大會暨大理人工智能與應用國際開發(fā)者大會在大理圓滿落幕。
    的頭像 發(fā)表于 12-24 17:45 ?728次閱讀
    大理的AI野心藏不住了——風花雪月中千名<b class='flag-5'>程序員</b>探討人工智能

    分析嵌入式軟件代碼的漏洞-代碼注入

    進行編譯 在大多數(shù)情況下,程序故意像執(zhí)行代碼樣執(zhí)行數(shù)據(jù)是不尋常的,但將數(shù)據(jù)用于構造有意執(zhí)行的對象卻很常見。 1、格式化字符串漏洞 大多數(shù)C程序員熟悉printf函數(shù)。大體上,這些格式字符串
    發(fā)表于 12-22 12:53

    解析Linux的進程、線程和協(xié)程

    、基礎概念 進程(Process) 進程是計算機中運行的程序的實例,它是操作系統(tǒng)中最基本的執(zhí)行單元之。每個
    發(fā)表于 12-22 11:00

    程序員最常見謊言

    了。 28我已經(jīng)測試過了,這個功能沒問題,可以上線了。 29別擔心,這個問題很快就能解決。 30代碼快寫完了,已經(jīng)完成 90% 了 。 希望大家對程序員些容忍以及諒解! 各位程序員你們都被我說中了哪些?說說你們的觀點
    發(fā)表于 12-10 08:24

    奔赴熱AI,碼力全開!Talkweb House@1024程序員日系列活動圓滿收官

    1024程序員日”系列活動至此劃上了圓滿句號。本屆1024程序員節(jié)以“AI構建世界,智能引領未來”為主題,廣邀技術大咖、產(chǎn)業(yè)領袖、企業(yè)代表與全球開發(fā)者齊聚星城
    的頭像 發(fā)表于 10-27 18:59 ?791次閱讀
    奔赴熱AI,碼力全開!Talkweb House@1024<b class='flag-5'>程序員</b>日系列活動圓滿收官

    開鴻智谷“以賽促學、以賽選才”|1024程序員節(jié)暨開源鴻蒙構建大會圓滿落幕!

    10月24日,由開鴻智谷聯(lián)合主辦的長沙1024程序員節(jié)暨開源鴻蒙構建大會在長沙圓滿落幕。本次活動以“湘聚長沙,共赴熱AI”為主題,通過技術分享與實戰(zhàn)競賽相結合的方式,著力培養(yǎng)“開源鴻蒙+AI”領域
    的頭像 發(fā)表于 10-27 17:58 ?718次閱讀
    開鴻智谷“以賽促學、以賽選才”|1024<b class='flag-5'>程序員</b>節(jié)暨開源鴻蒙構建大會圓滿落幕!

    程序設計與數(shù)據(jù)結構

    的地址)出發(fā),采用推導的方式,深入淺出的分析了廣大C程序員學習和開發(fā)中遇到的難點。 2. 從方法論的高度對C語言在數(shù)據(jù)結構和算法方面的應用進行了深入講解和闡述。 3. 講解了絕大多數(shù)C程序員開發(fā)
    發(fā)表于 05-13 16:45

    Linux系統(tǒng)進程管理入門指南

    在 Linux 系統(tǒng)中,進程是正在運行的程序的實例。理解進程的管理、查看和控制對于系統(tǒng)管理和開發(fā)者來說非常重要
    的頭像 發(fā)表于 04-22 14:34 ?1156次閱讀
    Linux系統(tǒng)<b class='flag-5'>進程</b>管理入門指南

    進程、線程、協(xié)程傻傻分不清?文帶你徹底扒光它們的\"底褲\"!

    消耗 大胃王 中等食量 節(jié)食達人 面試官看到你會 直接pass 給及格分 大概率拿offer 性格特點 孤僻但靠譜 熱情但容易打架 高效但有點強迫癥 最后送大家張「程序員認親圖譜
    發(fā)表于 03-26 09:27

    零基礎入門:如何在樹莓派上編寫和運行Python程序

    種非常有用的編程語言,其語法易于閱讀,允許程序員使用比匯編、C或Java等語言更少的代碼行。Python編程語言最初實際上是作為Linux的腳本語言而開發(fā)的。Py
    的頭像 發(fā)表于 03-25 09:27 ?2066次閱讀
    零基礎入門:如何在樹莓派上編寫和運行Python<b class='flag-5'>程序</b>?