演算法一:快速排序演算法
快速排序是由東尼·霍爾所發展的一種排序演算法。在平均狀況下,排序 n 個項目要Ο(n log n)次比較。在最壞狀況下則需要Ο(n2)次比較,但這種狀況並不常見。事實上,快速排序通常明顯比其他Ο(n log n) 演算法更快,因為它的內部循環(inner loop)可以在大部分的架構上很有效率地被實現出來。
快速排序使用分治法(Divide and conquer)策略來把一個串列(list)分為兩個子串列(sub-lists)。
演算法步驟:
1 從數列中挑出一個元素,稱為 「基準」(pivot),
2 重新排序數列,所有元素比基準值小的擺放在基準前面,所有元素比基準值大的擺在基準的後面(相同的數可以到任一邊)。在這個分區退出之後,該基準就處於數列的中間位置。這個稱為分區(partition)操作。
3 遞歸地(recursive)把小於基準值元素的子數列和大於基準值元素的子數列排序。
遞歸的最底部情形,是數列的大小是零或一,也就是永遠都已經被排序好了。雖然一直遞歸下去,但是這個演算法總會退出,因為在每次的迭代(iteration)中,它至少會把一個元素擺到它最後的位置去。
演算法二:堆排序演算法
堆排序(Heapsort)是指利用堆這種數據結構所設計的一種排序演算法。堆積是一個近似完全二叉樹的結構,並同時滿足堆積的性質:即子結點的鍵值或索引總是小於(或者大於)它的父節點。堆排序的平均時間復雜度為Ο(nlogn) 。
演算法步驟:
1.創建一個堆H[0..n-1]
2.把堆首(最大值)和堆尾互換
3.把堆的尺寸縮小1,並調用shift_down(0),目的是把新的數組頂端數據調整到相應位置
4.重復步驟2,直到堆的尺寸為1
演算法三:歸並排序
歸並排序(Merge sort,台灣譯作:合並排序)是建立在歸並操作上的一種有效的排序演算法。該演算法是採用分治法(Divide and Conquer)的一個非常典型的應用。
演算法步驟:
演算法四:二分查找演算法
二分查找演算法是一種在有序數組中查找某一特定元素的搜索演算法。搜素過程從數組的中間元素開始,如果中間元素正好是要查找的元素,則搜 素過程結束;如果某一特定元素大於或者小於中間元素,則在數組大於或小於中間元素的那一半中查找,而且跟開始一樣從中間元素開始比較。如果在某一步驟數組 為空,則代表找不到。這種搜索演算法每一次比較都使搜索范圍縮小一半。折半搜索每次把搜索區域減少一半,時間復雜度為Ο(logn) 。
演算法五:BFPRT(線性查找演算法)
BFPRT演算法解決的問題十分經典,即從某n個元素的序列中選出第k大(第k小)的元素,通過巧妙的分 析,BFPRT可以保證在最壞情況下仍為線性時間復雜度。該演算法的思想與快速排序思想相似,當然,為使得演算法在最壞情況下,依然能達到o(n)的時間復雜 度,五位演算法作者做了精妙的處理。
演算法步驟:
終止條件:n=1時,返回的即是i小元素。
演算法六:DFS(深度優先搜索)
深度優先搜索演算法(Depth-First-Search),是搜索演算法的一種。它沿著樹的深度遍歷樹的節點,盡可能深的搜索樹的分 支。當節點v的所有邊都己被探尋過,搜索將回溯到發現節點v的那條邊的起始節點。這一過程一直進行到已發現從源節點可達的所有節點為止。如果還存在未被發 現的節點,則選擇其中一個作為源節點並重復以上過程,整個進程反復進行直到所有節點都被訪問為止。DFS屬於盲目搜索。
深度優先搜索是圖論中的經典演算法,利用深度優先搜索演算法可以產生目標圖的相應拓撲排序表,利用拓撲排序表可以方便的解決很多相關的圖論問題,如最大路徑問題等等。一般用堆數據結構來輔助實現DFS演算法。
演算法步驟:
上述描述可能比較抽象,舉個實例:
DFS 在訪問圖中某一起始頂點 v 後,由 v 出發,訪問它的任一鄰接頂點 w1;再從 w1 出發,訪問與 w1鄰 接但還沒有訪問過的頂點 w2;然後再從 w2 出發,進行類似的訪問,… 如此進行下去,直至到達所有的鄰接頂點都被訪問過的頂點 u 為止。
接著,退回一步,退到前一次剛訪問過的頂點,看是否還有其它沒有被訪問的鄰接頂點。如果有,則訪問此頂點,之後再從此頂點出發,進行與前述類似的訪問;如果沒有,就再退回一步進行搜索。重復上述過程,直到連通圖中所有頂點都被訪問過為止。
演算法七:BFS(廣度優先搜索)
廣度優先搜索演算法(Breadth-First-Search),是一種圖形搜索演算法。簡單的說,BFS是從根節點開始,沿著樹(圖)的寬度遍歷樹(圖)的節點。如果所有節點均被訪問,則演算法中止。BFS同樣屬於盲目搜索。一般用隊列數據結構來輔助實現BFS演算法。
演算法步驟:
演算法八:Dijkstra演算法
戴克斯特拉演算法(Dijkstra』s algorithm)是由荷蘭計算機科學家艾茲赫爾·戴克斯特拉提出。迪科斯徹演算法使用了廣度優先搜索解決非負權有向圖的單源最短路徑問題,演算法最終得到一個最短路徑樹。該演算法常用於路由演算法或者作為其他圖演算法的一個子模塊。
該演算法的輸入包含了一個有權重的有向圖 G,以及G中的一個來源頂點 S。我們以 V 表示 G 中所有頂點的集合。每一個圖中的邊,都是兩個頂點所形成的有序元素對。(u, v) 表示從頂點 u 到 v 有路徑相連。我們以 E 表示G中所有邊的集合,而邊的權重則由權重函數 w: E → [0, ∞] 定義。因此,w(u, v) 就是從頂點 u 到頂點 v 的非負權重(weight)。邊的權重可以想像成兩個頂點之間的距離。任兩點間路徑的權重,就是該路徑上所有邊的權重總和。已知有 V 中有頂點 s 及 t,Dijkstra 演算法可以找到 s 到 t的最低權重路徑(例如,最短路徑)。這個演算法也可以在一個圖中,找到從一個頂點 s 到任何其他頂點的最短路徑。對於不含負權的有向圖,Dijkstra演算法是目前已知的最快的單源最短路徑演算法。
演算法步驟:
重復上述步驟2、3,直到S中包含所有頂點,即W=Vi為止
演算法九:動態規劃演算法
動態規劃(Dynamic programming)是一種在數學、計算機科學和經濟學中使用的,通過把原問題分解為相對簡單的子問題的方式求解復雜問題的方法。 動態規劃常常適用於有重疊子問題和最優子結構性質的問題,動態規劃方法所耗時間往往遠少於樸素解法。
動態規劃背後的基本思想非常簡單。大致上,若要解一個給定問題,我們需要解其不同部分(即子問題),再合並子問題的解以得出原問題的解。 通常許多 子問題非常相似,為此動態規劃法試圖僅僅解決每個子問題一次,從而減少計算量: 一旦某個給定子問題的解已經算出,則將其記憶化存儲,以便下次需要同一個 子問題解之時直接查表。 這種做法在重復子問題的數目關於輸入的規模呈指數增長時特別有用。
關於動態規劃最經典的問題當屬背包問題。
演算法步驟:
演算法十:樸素貝葉斯分類演算法
樸素貝葉斯分類演算法是一種基於貝葉斯定理的簡單概率分類演算法。貝葉斯分類的基礎是概率推理,就是在各種條件的存在不確定,僅知其出現概率的情況下, 如何完成推理和決策任務。概率推理是與確定性推理相對應的。而樸素貝葉斯分類器是基於獨立假設的,即假設樣本每個特徵與其他特徵都不相關。
樸素貝葉斯分類器依靠精確的自然概率模型,在有監督學習的樣本集中能獲取得非常好的分類效果。在許多實際應用中,樸素貝葉斯模型參數估計使用最大似然估計方法,換言之樸素貝葉斯模型能工作並沒有用到貝葉斯概率或者任何貝葉斯模型。
盡管是帶著這些樸素思想和過於簡單化的假設,但樸素貝葉斯分類器在很多復雜的現實情形中仍能夠取得相當好的效果。
⑵ 有人說,人工智慧將來可替代程序員寫代碼,你怎麼看
你好!我是康哥! 未來不光是人工智慧會取代程序員寫代碼,我認為很多行業都有可能被取代!
作為80後的我小時候沒有電腦,父母那一輩基本上班的時候也都沒接觸過電腦,那個時候工作文稿都是用手寫,而到我上了大學,短短18年的時間電腦在中國得到了普及。讓我印象最深的是我參加工作的時候公司的老會計,業務能力不在話下,但是金蝶用友玩的不轉。後來也不得不順應時代的發展,學習電腦知識。
所以人工智慧現在看似是一個很新興的產業,但是很可能在未來的十幾年當中滲入我們生活中的方方面面。
那些重復性的工作,例如人力資源中的考勤工資;財務中的基礎做賬工作;程序員中的基礎代碼工作;甚至醫院的醫生都會被人工智慧取代 。
未來不會被渠道的是一些重復性工作不強的職位,我認為這個實際上就是效率的提升,電腦代替手工勞動,機器代替人的大腦和手腳,讓我們的生活更加有效率。
我認為是一件好事情,能讓我們有更多的時間去開發新事物。不斷地開發我們的大腦去 探索 新事物。
但是從另外一個方面來看,未來的確有很多人會失業。不管是現在我們常見的一些崗位,包括一些看似穩定的鐵飯碗,例如公務員或者事業單位人員,一些職能性的但是效率底下的職位也將會被取代。
這就提醒我們每個人都要居安思危,不斷提升自己的技能和附加值,這樣才不會被 社會 所淘汰,二十年時間看似很長,但是實際很短。
AI能代替我們的是一些能夠重復的工作和簡單的開發工作,可是誰來維護這些人工智慧,如何管理這些人工智慧我認為未來是我們人類職位的一個新增項。
作為一名IT行業的從業者,同時也是一名計算機專業的教育工作者,我來回答一下這個問題。
首先,隨著人工智慧技術的不斷發展,未來大量基礎的編碼工作必然會由智能體來完成,這個過程也會不斷推動程序員的崗位升級,提升程序員的崗位附加值,同時減輕程序員的工作壓力。實際上,人工智慧技術的發展對於未來延長程序員的職業生命周期具有重要的意義。
當前程序員崗位的工作壓力還是比較大的,不僅應用級程序員每天需要完成大量的編碼工作,研發級程序員也需要面對一些毫無能力提升的編碼工作,這在很大程度上降低了程序開發的樂趣,使得程序員感到乏味。隨著當前產品迭代的速度不斷加快(大數據時代的並行迭代),程序員不僅面臨更大的工作量,在工作內容上也得到了一定的拓展(全棧開發趨勢),所以當前從事程序員崗位還是具有一定難度的。
要想讓程序員從當前的工作壓力當中解放出來,採用智能體實現代碼編寫是非常重要的一個解決方案,這不僅會提升程序開發的效率,同時也會保障程序代碼的質量一致性,提升程序的穩定性。實際上,當前在程序開發領域內已經有不少工具可以完成一部分代碼的生成工作,雖然目前功能還不夠強大,但是已經在一定程度上減輕了程序員的編碼負擔。
未來當智能體替代程序員完成基本的編碼工作之後,程序員可以把更多的精力應用在創新方面(演算法設計、模式設計、框架設計等),而且技術驗證的速度也會明顯提升,這些都會提升程序員的工作效率。
如果有互聯網、大數據、人工智慧等方面的問題,或者是考研方面的問題,都可以在評論區留言,或者私信我!
有人說,人工智慧將來可替代程序猿寫代碼,你怎麼看?
好!
科技 這么發達,
完全有可能,
但是,
怎麼發達,
有一些程序還是離不開人的操作,
程序猿,
有些程序必須靠人工才能完,
這個毋庸置疑,
不論智能怎麼發達,
有些人的操作,
永遠取代不了的,
這個倒是真的,
有一些事物,
是人工智慧無法完成的,
到任何時候人,
都不會被智能取代消退,
總有一些程序交給人,
來操作!
都是些不深入ai的媒體炒作概念,讓人覺得ai無所不能。一百二十八年內不可能,有的話也是小打小鬧,滿足不了工業屆千變萬化的需求。ai可以輔助創作,但獨立創作,尤其是代碼,絕無可能。
如果ai將來能寫可執行的邏輯正確的代碼,那麼未來的程序員或演算法工程師,都會大部分失業。如果ai都能按邏輯寫代碼,都可以去嘗試各種邏輯,甚至自己決策。那麼ai可以控制各種帶有晶元的設備,小到手機,大到 汽車 。這還是ai么,這不是上帝之子么。
可能你從github喂海量的代碼給到模型,藉助於大數據和gpu算力出來,理論上來說能訓練出一個號稱能寫代碼的ai.但這個ai寫出的代碼都是基於統計規律的,不能處理突發事故。運氣好的話,生成的代碼能執行,但代碼越長,生成的代碼可運行的概率越低。
即使能運行,代碼的邏輯是什麼?
程序員和產品經理干架,就是因為需求會一直變。你期望ai能寫出滿足千變萬化的需求的代碼?
我們從幾十億年的單細胞生物進化到今天,能不能有點自信?要是ai這么厲害,我覺得我沒臉說我是人了。總之,怎麼可能!
將來我們寫代碼時:
總之,ai可以輔助程序員編程,極大提高編程效率。但如果代替程序員自己編程,根本不可能。如果有那一天,我把我現在的手機吃了。
這幾年,人工智慧被炒的越來越熱了,比如阿里的魯班系統能夠自動生成雙十一海報,一天可能出圖上億張;還有通過機器學習,程序畫的話,被賣到上億元;其實就目前來講,這些都是比較基礎的,人工智慧即使畫畫,也是通過機器學習別人的畫之後,說白了, 組合的。沒有靈魂作為支撐的產品,不能說沒有價值,但是在意義層面來講絕對是非常弱的。
人工智慧在將來可以替代程序員寫代碼嗎?我只能說:有可能,而且即使人工智慧代替程序員寫代碼,也是比較基礎的,其實,隨著現在程序工具化的趨勢,已經解放了程序員,如果人工智慧+工具化,在一些基礎的,機械的編程中,確實能夠讓程序員解放出來,去處理更加復雜的業務邏輯和架構設計。
但是,我感覺人工智慧完全取代程序員是不可能的。因為,機器永遠也不想到人類復雜的需求,尤其是,變來變去的需求變化。如果機器能夠有靈魂的話,估計也會被人類復雜且變來變去的需求,折磨的要死,從而發出一句,感嘆:卧槽,這是什麼玩意的破需求。
但是,去年有一條新聞值得我們關注,那就是:
Repairnator 是由 KTH 瑞典皇家理工學院的軟體技術教授 Martin Monperrus 開發。它會監控開源軟體在持續集成期間發現的 bug,並嘗試自動修復它們。如果它成功合成了一個有效的補丁,那麼 Repairnator 會偽裝成人類身份向人類開發者提交此補丁。到目前為止,Repairnator 已經成功生成了 5 個補丁,並被人類開發者永久地合並到代碼庫中。
這是自動程序修復軟體工程研究中新的里程碑。
所以,現在機器都可以修改 bug 了,將來在一定程度上寫程序,也是有可能的,但是完全取代我認為不現實。
原因如下:
當然了,如果機器能夠完全取代人類編程的話,那非常可怕啊,未來有可能將是被機器控制的時代,而不是人類控制機器的時代。
有人說,人工智慧將來可以取代程序員來寫代碼,這個理由不成立,因為人工智慧就是程序員開發出來的。而且現在所謂的人工智慧遠遠沒有達到真正意義上的智能,大部分還是人工更多一點。
如果以人類的生命成長階段來看,人工智慧目前只能算是嬰兒階段,在嬰兒階段就拋棄喂養自己的母親程序員,那為時也太早了。
人工智慧大體分兩個大的方向,圖像識別和機器學習。目前圖像識別成長的比機器學習更快一點,但也僅限於快一點兒,我們常見的圖像識別場景就是無人駕駛。而機器學習發展相對緩慢,都是在初級階段,如果想要有階段性的變化,在演算法機制上要有突破性的進步,才能引領機器學習進入下一階段。
所以至少在未來幾十年甚至上百年我認為我們程序員都不會失業的,還是有飯吃的。
所謂人工智慧的程序也是由人類開發設定的,它也絕不會取代人的作用,它對美學,結構想像力設計,邏輯多向思維甚至懸思學都無法深入涉足,它就像一個架構師將演算法和公式公布出來,其它基礎部分由代碼來完成一樣,就算將來人工智慧也可以進行相關研發,但審核與檢測仍然需要人類完成,人類的工作只會越來越高級。
所以不用杞人憂天,人工智慧是不可能真正成為人類的思維一部分的,當它的工作目標對人類無意義而虛耗電能和時間的時候,人類是一定會及早發現並介入的,一個簡單的拔電源就可以停止其行為……
人工智慧是近階段大家經常提到的一個話題,其中神經網路深度學習其中一個特點,那麼人工智慧最終真的能達到一般人類這樣去思維么?能夠像程序員那樣的編程么?會不會以後有一天真的能替代程序員了吧,這件事情你是怎麼看待的?針對這事情我來說一下我的看法。
人工智慧會讓程序員的工作效率更高,十年之內不可能完全代替程序員
在CSDN上有一篇報道,有一個名字為Screenshot-to-code-in-Keras的項目可以把一些稿件自動變成一堆html代碼加css代碼,有的前端程序員就可能為此而感覺到恐慌,感覺以後人工智慧要替代自己的飯碗了,這樣的事情也不足為奇,在人工智慧這個概念還沒有興起之前,一些java程序員使用ide開發工具就能生成一堆代碼,節省了開發效率。感覺起碼在近五到十年內感覺人工智慧還不能完全替代人類程序員這樣去編程,就以前端代碼為例,雖然html代碼加效果類css讓人工智慧生成代碼,可能人工智慧在這方面戰術上完勝,但是一些戰略問題它還是遠遠不及人類的。
其一它生成的東西能確保是人類想要的嗎?,如果不符合要求是不是需要人類程序員來調整,人工智慧不可能做出一套適應所有場景的東西出來。
其二前端程序員是要與後端程序員進行對接的,在對接時各個參數,怎麼調用了,相當復雜,兩個人類程序員(前端程序員與後端程序員)還需要溝通好長時間,難道人工智慧就能那麼完美理解人類的意思就不需要溝通了么?
近5到10年內的情況可能是這樣的,一些低級的常規的代碼都可能會是自動生成,一些組織調整的工作交給人類程序員來進行處理,最後項目的質量當然還是有人類進行負責的,由人工智慧的加持,程序員的工作效率可能會大大提高,以往傳統開發需要幾周的工作量可能會縮減到幾天甚至更短。
未來上層領域的程序員數量會減少
隨著時間再往後發展,我想一些上層代碼會逐漸由人工智慧程序自己完成了,可能寫代碼的不再是程序員了,比如說可能是一種操作軟體的形式存在,有著成熟的操作界面,良好的操作體驗,一個非技術人員通過界面輸入自己想要的東西,通過一定的規則描述,然後就會生成相應的代碼並能直接運行。或者比這個更先進,不是一個軟體界面的形式存在,而是一個智能硬體設備,只需要對其說話,像與人類說話那樣,說出自己的需求,智能設備就能在短時間內做出自己想要的東西。
如果真能達到這種程度的話,我想未來參與業務開發的程序員的數量將會急劇減少,但是 不可能減少到為0,因為人工智慧做出的東西也不可能是完全有保證的,起碼需要個別人還需要進行對項目代碼進行負責不是嘛,就想現在的無人駕駛車為啥還留有方向盤一樣。上層開發的人員少了,人工智慧這些底層開發的程序員會更吃香了,甚至數量會多起來。
軟體數量和規模將成倍增長
大家都知道程序做事效率是相對高的,人類做項目是用天,周,年為單位來計算的,那麼這些軟體交給人工智慧處理應該是秒級別的吧,如果是大一點的項目頂多是分鍾了。如果是這樣的話,估計人類世界軟體的發展速度將會達到一個新的高度,軟體的數量和規模將是幾何倍數的增長。
如果真是這樣一天的到來,我想人類在學習和思想上都要有策略上的改變,以前經常在嘴邊說的話,要勤奮,要多動手,未來的人類要做的事情,就是要多思考,勤於思考。動手的事情就交給人工智慧去吧。
那是必然的。不僅程序,看病,甚至很多方面都可以,但是,那種機械的,生冷的東西在幾何級數提高效率的同時也會鑄成,無論如何,這個趨勢不可阻擋,是喜是憂?需要蓋棺定論。
電腦只能處理精確到指令,需求一開始往往是很模糊的,以目前人工智慧自然語言語義理解的發展程度,可能性很低。
⑶ 未來50%的工作都將被人工智慧給取代,程序員會被機器人取代嗎
首先程序員這個行業和其他行業一樣也是分等級的。
雖然非常不想用「底層從業者」這五個詞來定義最低層次的程序員,但事實就是如此。
當行業的某個技術領域發展成熟到一定程度時,這個領域的大部分從業人員真的會被機器人所取代,准確的說,不只是被機器人所取代,也會被自動化系統所取代。舉一個最近的例子吧,網路發布的產品PaddlePaddle。
【PaddlePaddle是集深度學習核心框架、工具組件和服務平台為一體的技術先進、功能完備的開源深度學習平台,已被中國企業廣泛使用,深度契合企業實際應用需求,並擁有活躍的開發者社區生態。提供豐富的官方支持模型集合,並推出全類型的高性能部署和集成方案供開發者使用。】
從上面的描述介紹中就可以一窺究竟的。
【核心框架】、【工具組件】和【服務平台】這三個詞的重量真的令人深思。因為這意味著:
不用再自己搭深度學習的框架了,不用到處找工具了,集常用的組件和工具於一體,你只需要專注的干著自己的事情就可以了。
只會搭框架、搬運代碼的程序員真的會被淘汰掉的。
但是目前為止,因為公司財力、技術人員儲備不足等客觀原因,還是需要會搭框架、會搬運代碼的程序員的。
其次,提出這個問題,或許你的思維是靜止的。
應該在「程序員」三個字之前加四個字的定語,【不學習的】程序員肯定會被機器人所取代,這點毫無疑問。
【程序員】是一個升級打怪的職業,【優秀程序員】是一路不斷學習上來的,【終身學習者】這個名詞最適合「程序員」。因為程序語言的變化真的很快,技術發展很迅速。不學習,跟不上時代發展需要。科技社會的最大特徵就是一個字「快」。
【唯快不破】、【快速迭代】成了他們的標簽。
最後,機器人不具備的思維恰恰是人類的優勢,也必然是程序員的優勢。
有系統思維、能進行底層架構的程序員根本不會被機器人所取代。
這里有一個很明顯的例子就是:AI法律助手包小黑@免費法律咨詢評估
【機器人】包小黑取代了傳統服務行業的大部分律師進行咨詢回答的功能,但包小黑是誰做出來的?是程序開發者、演算法工程師和法律專業人士一起合力完成的。
必須說一句的是,【未來社會是一個高度分工化和高度融合化的過程。】
原因就是科學技術的發展。
只會寫代碼的程序員未來估計不存在了
因為會寫簡單代碼的能力將會是未來所有受教育者的一項基本能力,和英語一樣。
⑷ 程序員們面臨著技術的快速迭代,這行真的能幹一輩子么
很多人在大學的基礎課程學習後都面臨畢業求職的問題,對於各種各樣的職業,人們往往很難選擇。程序員是這些年來越來越火的一個職業,程序員更是慢慢成為了高薪職業的代名詞,因此越來越多的學生開始學習計算機一類或者相關的職業,希望畢業之後能夠從事程序員,並且以此希望讓自己的生活越來越好。
選擇職業要根據自己的情況程序員業內都有一個35歲的門檻,就是說程序員在35歲之後,有很大一部分就會改行做別的,或者去轉而做管理,或者乾脆徹底換個行業重新發展,所以說,程序員也並不是人們想像中的那麼光鮮亮麗,發展前景好。所以每個人在選擇職業的時候,一定要按照自己的情況去選擇,而不要人雲亦雲隨大流,盲目選擇可能只會浪費自己的時間。
⑸ 如何成為一名程序員 6種方法來成為一名程序員
目錄方法1:網路編程1、了解網路編程的含義。2、瀏覽不同的網站,了解它們的外觀。3、學習至少一種頭腦風暴技術/方法,並學習一個用來實現頭腦風暴的軟體。4、熟悉網站結構。5、趕緊學一門圖形設計的課程。6、了解網路下部構造的基本情況。7、學習HTML和CSS語言。8、學習XML及其相關技術,比如XSL和XPath(不是必需,僅作推薦)。9、先建立簡單的靜態網站,直至你熟悉並習慣HTML語言。10、學習客戶端腳本語言。11、熟悉你所學的客戶端腳本語言。12、學習至少一種伺服器端腳本語言。13、學完伺服器端編程語言之後就開始創建一個試驗項目。14、獲得你的網站,開始用你自己的網頁實驗。方法2:桌面軟體編程1、弄清楚桌面軟體編程是怎麼回事。2、了解不同的電腦硬體結構。3、學習一種入門級(小孩子學的那種)編程語言。4、學習程序化、面向對象、函數設序設計規范的入門。5、學習一種程序化程式設計語言的入門課程。6、學習至少一種高級建模技術,比如UML 或ORM。7、開始編寫一些小的主控台應用程式或類似的應用程式。8、學習一門你選擇的編程語言的更高級課程。9、應用你所10、至少再學習一門編程語言規范的入門課程。11、試著比較你所學的兩門編程語言。12、利用你學過的一種語言來學習可視化編程概念。13、開始把你所學的知識運用到你設計的軟體小工程中。14、創建一個虛擬的"畢業工程"。15、通過學習更高級的課程、更加註意細節以及在網上學習搭建架構的技巧,來加深對你學過的可視化架構/庫/包的理解。16、搜索其他含可視化元素的包/庫並學習它們。17、學習圖形學課程(而非圖形設計)。18、成為游戲程序員(不是必須的)。方法3:分布式程序設計1、處理分布式應用編程。2、快速了解通信系統及其硬體。3、熟悉網路硬體結構和設備,比如集線器、接線台和路由器。4、學習網路協議的課程。5、學習XML 語言,並熟悉它。6、開始學習一門shell腳本語言。7、開始時用上你學的腳本知識,只運用程序化程式設計。8、使用你所學的腳本語言,寫出實現機器之間通信的腳本。9、轉移到桌面腳本/編程語言。10、專注於語言的核心部分,尤其hi那些支持網路。11、學習分布式應用設計與結構的課程。12、使用你所學的編程語言來了解服務部分建構和服務。13、學習如下技術中一種或更多。方法4:庫/平台/框架/核心編程1、了解什麼是核心編程。2、學習一門支持創建可重復使用內容/包的編程語言,如果你還沒學過的話。3、學習一門UML 和ORM的高級課程。4、學習軟體工程的課程。5、學習至少一個模塊,基於內容的、面對對象的和 事件驅動編程技術和概念。6、進一步了解不同的操作系統及其支持的編程架構。7、集中學習獨立平台架構、編程語言和技術。8、如果到目前為止你學習的編程語言具有ANSI/ISO/EEE/W3C標准版本,那麼掌握這些標准。9、嘗試模擬簡單的、已經建立的庫,尤其是開源的庫。10、在你的編程領域內尋找開源的包。11、學習不同方法。方法5:系統編程1、了解系統編程的定義。2、跟著"桌面應用程序員"的前三個步驟。3、學習線性代數的入門課程。4、學習微積分課程。5、學習邏輯學和/或離散數學課程。6、了解不同的"准操作系統"。7、學習計算機硬體結構的課程(或者作為替代,看看書)。8、深入理解不同的計算機硬體平台。9、初步熟悉你所選擇的硬體平台/操作系統的匯編語言。10、學習ANSI C 和 C++ 語言,還有程序化程式設計的一些概念。11、在你選擇的平台上理解並實踐C/C++標准庫。12、搜索網路資源、書籍和課程來理解你的平台獨特的C風格。13、用C/C++練習編寫高級代碼。14、學習更高級的Assembly。15、學習操作系統設計的課程。16、尋找並閱讀你所選擇的平台的相關文章。17、練習你已經掌握的知識。18、以最有益的順序學習語言。方法6:編程科學1、了解編程科學家是做什麼的。2、累積和四年制計算機科學學歷同等多的科學知識。3、選擇特定的領域。4、考慮獲取更高級的學歷。5、了解你選擇的編程領域的相關技術和編程語言。成為程序員是一個日積月累的過程,需要日復一日年復一年的技能增長。編程本身是有趣的,並且有回報(腦力層面、精神層面、經濟層面)。這份指南不能保證你輕松當上程序員。不要神化下面這些步驟,從中你大概能了解在現今編程界如何成為一名程序員。
方法1:網路編程
1、了解網路編程的含義。網路應用是指設計在網路結構頂層的軟體部分。這就意味著這些應用是通過諸如火狐或IE之類的瀏覽器來處理的。架構於網路結構的頂層並不一定要連接到網路。這就是說網路應用建立在如下標准網路技術的頂層:HTTP
FTP
POP3
SMTP
TCP
IP協議
HTML
XML
Coldfusion
ASP
JSP
PHP
ASP.NET
2、瀏覽不同的網站,了解它們的外觀。(右擊,選擇"查看源"或按F12。)尋找網站類型/內容的多樣性,而非數量。通常你需要訪問以下網站類型中至少一種: 團體網站(商業公司,非營利機構/組織,政府組織)
網路索引引擎(搜索引擎,meta搜索網站,專業化搜索引擎,目錄)
數據挖掘網站
個人網站
信息/網路全書式網頁(維基,數據單,技術規格,人工列表目錄,博客和日誌,新聞和新聞機構網站,黃頁,等等。)
社交網站(社交門戶,書簽網站,記錄筆記網站)
合作網站(這包含了上面提及的目錄,比如維基和博客)
3、學習至少一種頭腦風暴技術/方法,並學習一個用來實現頭腦風暴的軟體。例如:頭腦風暴圖和微軟Visio。
4、熟悉網站結構。指的是創建概念化網路範式、網路地圖和導航結構。
5、趕緊學一門圖形設計的課程。盡量學習至少一個圖形編輯/操作軟體包(不是必須的,但強烈推薦)
6、了解網路下部構造的基本情況。包括了解以下: 基本網路服務協議(HTTP,FTP, SMTP和POP3或IMAP4)
網路伺服器軟體(最好其中一個就是你以後主要工作的平台)
網路瀏覽軟體
郵件伺服器和客戶端軟體
7、學習HTML和CSS語言。或許你還想要"所見即所得"軟體包來編輯HTML。
8、學習XML及其相關技術,比如XSL和XPath(不是必需,僅作推薦)。
9、先建立簡單的靜態網站,直至你熟悉並習慣HTML語言。
10、學習客戶端腳本語言。多數人要麼學Java,要麼學VB,但也有一些人學習Perl和DHTML。
11、熟悉你所學的客戶端腳本語言。潛意識里提醒自己只用你學的那個語言。只有在你熟悉你的客戶端腳本語言之後才能進入下個步驟。
12、學習至少一種伺服器端腳本語言。如果你只用一種伺服器軟體,那就學其中一種編程語言。否則,你得每個伺服器軟體都學至少一種編程語言。
13、學完伺服器端編程語言之後就開始創建一個試驗項目。
14、獲得你的網站,開始用你自己的網頁實驗。
方法2:桌面軟體編程
1、弄清楚桌面軟體編程是怎麼回事。多數桌面軟體程序員都是編寫商務需要的代碼,所以好好了解一下商業及其組織和經濟結構將對節省時間、提高效率大有裨益。
2、了解不同的電腦硬體結構。看看數字電路設計和電腦結構的入門級課程,但是也有人認為這對於剛起步來說太超前了,所以看兩三篇說明的文章(比如 這一篇 和 這一篇)就夠了。學完第一種編程語言後你可以再返回這個步驟。
3、學習一種入門級(小孩子學的那種)編程語言。不要因為你不是個小孩子就不好意思去學。這些入門級語言能大大減輕你正式學習第一門編程語言時的痛苦和壓力。然而這一步也不是必須的。你也可以在上一步之前完成。
4、學習程序化、面向對象、函數設序設計規范的入門。
5、學習一種程序化程式設計語言的入門課程。無論你以後選擇何種編程語言,在某種程度上它都要求程序化程式設計。此外,據多數程序員反映,程序化程式設計總的來說是了解編程的一個很好的切入點。
6、學習至少一種高級建模技術,比如UML 或ORM。
7、開始編寫一些小的主控台應用程式或類似的應用程式。你可以利用編程書中的常見小練習。選擇一個工具,用你所學的編程語言編寫程序。
8、學習一門你選擇的編程語言的更高級課程。確保進展之前先理解下列概念,並能熟練運用。對程序用戶輸入輸出信息。
程式化設計語言寫成的程序中的邏輯流程和執行流程。
聲明、分配和比較變數
編程結構分支,比如if..then..else 和 select/switch..case.
循環結構,比如while..do, do..while/until, for..next.
創建、調用程序與函數的編程句法
數據類型及如何操控
用戶定義數據類型(records/structs/units)及其使用
如果你的語言支持超載函數,理解它。
你選擇的語言的內存處理方式(指針,變數窺視,等等。)
如果你的語言支持運營商超載,理解它。
如果你的語言支持delegates/函數指針,理解它。
9、應用你所學的高級技能 面向對象的規范
10、至少再學習一門編程語言規范的入門課程。推薦學習每種範式的編程語言,多數高級程序員確實是這么做的,然而,通常你開始時只學一種,應用所學知識訓練了一段時間,獲得了編程的鮮活經驗,然後接著學習另一種。試試下面的語言: 邏輯編程範式
函數編程範式
面向對象的範式
11、試著比較你所學的兩門編程語言。評估各自利弊。通常可按以下方法完成拿出你在學習第一門編程語言時編寫的簡單範例,現在用第二門語言重新編寫。
創建一個工程,盡量用上兩種語言完成它。有時取決於你選擇的工程和語言,你可能僅用一門語言還無法完成這個工程呢!
寫一份兩種語言之間相似結構和獨特之處對比的速查表或一覽表。
盡量使用另一門語言找到模仿這兩門語言中獨特之處的辦法。
12、利用你學過的一種語言來學習可視化編程概念。幾乎所有的編程語言都具有支持可視化編程和其他支持控制台或類似控制台編程的版本/庫。同時進行的包括: 初步了解事件驅動編程。在某種程度上,多數可視化編程依賴事件及事件處理(用上你選擇的語言)。
盡可能多的嘗試桌面軟體,理解軟體是做什麼的。多數軟體開發公司會提供產品的測試版,你可以拿來測試軟體。在完善用戶界面方面保持更新。
閱讀關於圖形用戶界面的文章或教程。
13、開始把你所學的知識運用到你設計的軟體小工程中。盡量把你的編程專業知識運用到你日常生活中的問題上。比如,編寫程序,批量重命名文件,視覺上比較文本文件,復制目錄里的文件名到內存/文本文件之類的東西。剛開始簡單一點。
14、創建一個虛擬的"畢業工程"。把這個放到最後完成,用上你到目前為止學到的可視化編程技術。
15、通過學習更高級的課程、更加註意細節以及在網上學習搭建架構的技巧,來加深對你學過的可視化架構/庫/包的理解。
16、搜索其他含可視化元素的包/庫並學習它們。
17、學習圖形學課程(而非圖形設計)。對於想要寫出吸引人的用戶界面元素的程序員來說,這將大有裨益。
18、成為游戲程序員(不是必須的)。很大程度上游戲編程是被當作桌面編程的。如果你想成為游戲程序員,完成這些步驟後你需要進一步學習游戲編程。對於游戲程序員而言,圖形學課程是必須的,後續步驟中第二門語言應該選擇邏輯/函數編程語言(最好是Prolog或Lisp)。
方法3:分布式程序設計
1、處理分布式應用編程。分布式應用編程被許多人認為是最難學的一種,它要求計算機和通信技術中的不同知識。
2、快速了解通信系統及其硬體。這個步驟不是必須的,但是對於理解網路拓撲結構很有用。
3、熟悉網路硬體結構和設備,比如集線器、接線台和路由器。
4、學習網路協議的課程。在你開始分布式應用編程之前,你需要好好理解"開放系統互聯 (OSI) "模型、以太、IP、TCP、UDP和HTTP 。
5、學習XML 語言,並熟悉它。
6、開始學習一門shell腳本語言。對基於Windows的編程,可以是任何能與Windows腳本宿主兼容的腳本。對基於Linux的編程,Bash腳本和 Perl就夠了。對這兩個平台都強烈推薦Java,原因如下: 幾乎所有操作系統的都支持腳本宿主(Windows 腳本宿主默認支持java ,大多數Linux發行版都有支持java腳本控制的包)。
許多開發者認為它很容易學。
當你需要學第二門編程語言(C,C++,C#,Java和J#都有ALGOL開源句法)時,它擁有的ALGLO開源句法就能使你熟悉更多編程語言
通過學習java,你會熟悉網頁的客戶端腳本,這可謂一大福利!
7、開始時用上你學的腳本知識,只運用程序化程式設計。之後,根據你的腳本語言和它所支持的,你可以用上更高級的編程技巧和範式。所有的腳本語言在某種程度上都有程序化程式設計的一些方面。
8、使用你所學的腳本語言,寫出實現機器之間通信的腳本。學習完成這個所必需的東西。簡單的通信就足夠了。
9、轉移到桌面腳本/編程語言。一個比較好的是多範式語言,比如Python。簡單了解第二門語言。有許多理由讓多數程序員選擇java。然而,在這個領域內C#正在獲得多數優勢。Java和C#被青睞的原因如下:它們是面向對象的編程語言,使大量程序員免遭實現細節之苦,因為它們都支持組成部分(代碼單元、預編譯,它們可以執行特定任務,並被用到其他程序中)。
它們支持事件驅動編程,在某種程度上還支持OO和程式化程序設計。
建立語言的架構按屬性分布(比如Java)。
有許多現成的包來處理。社交網路同時作為開源代碼和架構內置包,這使得程序員繼續其他人工作更加容易。
10、專注於語言的核心部分,尤其hi那些支持網路。少注意用戶界面元素,比如輸出,窗口設計和技術等。
11、學習分布式應用設計與結構的課程。可以通過書本、網上教程或學術課程來完成。然而,十分有必要理解分布式應用的結構及其概念。
12、使用你所學的編程語言來了解服務部分建構和服務。
13、學習如下技術中一種或更多。推薦你每一種都了解以下。多數分布式應用程序員不會止於一兩門編程語言,他們會每個操作系統各學至少一種語言。這是因為如果你希望你的應用"分布式",你應該至少為每個主要的操作系統各提供一個版本。公共對象訪問代理體系結構(CORBA)
簡單對象訪問協議(SOAP)
非同步JavaScript和XML(AJAX)
分布式組建對象模型(DCOM)
.NET遠程處理
XML 網路服務
方法4:庫/平台/框架/核心編程
1、了解什麼是核心編程。核心程序員幾乎都是高級程序員,已經從編寫應用轉變為給其他程序員編寫代碼匯編。
2、學習一門支持創建可重復使用內容/包的編程語言,如果你還沒學過的話。
3、學習一門UML 和ORM的高級課程。多數庫開發者使用其中一種,或兩種都用。
4、學習軟體工程的課程。
5、學習至少一個模塊,基於內容的、面對對象的和 事件驅動編程技術和概念。你所學覆蓋越多編程範式和語言,你就能成為越成功的庫/包程序員。
6、進一步了解不同的操作系統及其支持的編程架構。
7、集中學習獨立平台架構、編程語言和技術。
8、如果到目前為止你學習的編程語言具有ANSI/ISO/EEE/W3C標准版本,那麼掌握這些標准。無論何時盡可能使用標准代碼。
9、嘗試模擬簡單的、已經建立的庫,尤其是開源的庫。這在成為庫/包程序員的早期階段十分有用。從簡單的包開始,比如單位轉換和中間科學計算包。如果你是大學生,利用你的非編程課程,嘗試把這些課程的方程式與核心科學用作庫。
10、在你的編程領域內尋找開源的包。首先下載包的二進制/可執行文件。盡量去用,並發現它的利弊。之後,下載源,盡量弄明白它是怎麼完成的。嘗試再創造這些庫或其部分。剛開始,看完代碼再做;之後,先做再看代碼。後期階段,嘗試完善那些庫。
11、學習不同方法。給程序員分發、配送內容。通常,庫/包程序員傾向於以遞歸和/或迭代的思想來思考他們面臨的所有問題 。盡量把每個問題當作一個小問題的匯編(一系列更小的任務)或一個重復的不斷縮小問題范圍直至把這些更小的范圍彼此堆到一起的處理過程去思考。
庫/包程序員傾向於概括化。也就是說,當面臨一個特定的簡單的問題時,他們通常會想到一個更為概括的問題,並努力解決這個更概括的問題,如此,小問題便不攻自破。
方法5:系統編程
1、了解系統編程的定義。系統編程處理的是編程的"科學",而不是具體的編程實現。不要把你自己栓到特定平台上。
2、跟著"桌面應用程序員"的前三個步驟。
3、學習線性代數的入門課程。
4、學習微積分課程。
5、學習邏輯學和/或離散數學課程。
6、了解不同的"准操作系統"。這可以通過以下途徑完成:了解操作系統是如何安裝的。
了解在一台PC上如何安裝不同的操作系統(不是必須的,但作為推薦)
安裝不止一種操作系統。不要在系統中安裝任何輔助包,相反,僅利用操作系統本身提供的函數。
7、學習計算機硬體結構的課程(或者作為替代,看看書)。
8、深入理解不同的計算機硬體平台。
9、初步熟悉你所選擇的硬體平台/操作系統的匯編語言。稍後你會學習其他平台/系統的匯編。
10、學習ANSI C 和 C++ 語言,還有程序化程式設計的一些概念。
11、在你選擇的平台上理解並實踐C/C++標准庫。尤其注意標准模板庫(STL)和活動模板庫(ATL)。
12、搜索網路資源、書籍和課程來理解你的平台獨特的C風格。
13、用C/C++練習編寫高級代碼。
14、學習更高級的Assembly。
15、學習操作系統設計的課程。
16、尋找並閱讀你所選擇的平台的相關文章。如果你選的是基於Unix的操作系統就會容易得多。充分理解你今後將要用來工作的系統。
17、練習你已經掌握的知識。首先創建小的系統軟體。如下通常很有用: 試著重創你系統中已有的小工具。
試著把其他系統中的應用移植到你的系統里。
18、以最有益的順序學習語言。此處是唯一強調第一門編程語言的地方。首先學習ANSI C 而不是 C++、C#、Java 、D。然後學習 C++。限制你第一門語言僅為C是因為系統編程要求程序員熟悉如下概念:源代碼真實、完全的編譯
低級對象輸出文件
鏈接二進制
低級機器語言/匯編編程。C語言被某些人認為是偽飾過的/更容易學習的匯編語言。只要你願意,它還支持插入匯編語言代碼,並且它只是程序化的(像匯編)。
方法6:編程科學
1、了解編程科學家是做什麼的。編程科學家是十分高級的程序員,他們不開發程序,但他們研究計算科學,比如密碼學、編程語言和數據挖掘演算法。沒有深入的學術研究是很難達到這個水準的。
2、累積和四年制計算機科學學歷同等多的科學知識。可通過如下其中一種完成: 獲得真實的學術學歷(這也是通常情況)。
從現代大學中獲得該學歷要求的課程大綱,自學課程或 分開一門門學。理論上這樣做也可以,但還是推薦第一種做法。
3、選擇特定的領域。越具體越好。這取決於你的偏好。但是這里給出計算機編程領域中一些主要的課題:演算法設計(例如搜索、分類、密碼、解碼、錯誤檢測 等)
編程語言/編譯器設計/最優化
人工智慧領域(模式識別,語音識別,自然語言處理,神經網路)
機器人技術
科學編程
超級計算
計算機輔助設計/模式(CAD/CAM)
虛擬現實
計算機圖形學(計算機圖形學通常和圖形設計或圖形用戶界面設計混淆,計算機圖形學是研究如何表示和操控計算機系統中的圖形的領域)
4、考慮獲取更高級的學歷。或許你想追求碩士學歷或博士學歷。
5、了解你選擇的編程領域的相關技術和編程語言。
小提示不管你想嘗試哪種編程,不管你想達到何種水平,考慮去學校或本地社區大學上課。不要被諸如「計算機科學」一類的術語嚇到。你參加的任何不需要預備課程的課程都應該集中教一些編程的基礎知識。在上課之前先咨詢一下老師或客服,確保這門課是你想要的,像「計算機文化」這樣的課很有可能更多地集中在教你更熟悉辦公應用之類。
⑹ 那麼多的程序員每天有那麼多新軟體開發嗎
首先,程序員崗位的工作壓力大,一個重要的原因就是開發任務比較多,而程序開發任務多的原因有三點,其一是當前信息化程度不斷提升,各行各業對於軟體的依賴程度比較高,所以軟體開發的任務也會比較多。處在傳統軟體開發企業的程序員通常需要面對各個行業的軟體需求,而且由於軟體產品需要不斷根據企業的運營要求和技術發展進行升級,這部分的工作量也是非常大的。
其二是隨著互聯網、大數據和雲計算的發展,目前軟體產品的迭代速度越來越快,尤其是面向大眾的互聯網軟體產品更是如此,雖然不少互聯網企業不斷壯大自身的研發團隊,但是軟體開發的任務需求量似乎有更快的發展速度,當前軟體產品的迭代已經從傳統的瀑布式迭代轉向了並發迭代,這同樣需要大量的程序員。簡單的說,在互聯網企業永遠有開發不完的需求,這一點與傳統軟體公司還是有一定的區別,所以互聯網企業對於程序員的能力要求往往也更高一些。
其三是產業互聯網打開了新的軟體需求大門,未來產業互聯網階段,軟體開發將全面深入到各個產業領域,全面為傳統企業的生產運營賦能,這自然也需要大量的程序員。當然,在產業互聯網階段,企業對於程序員的能力要求也在不斷提升,程序員需要掌握大數據、雲計算、物聯網以及人工智慧等一系列技術,所以當前的程序員,要想在產業互聯網階段獲得更強的崗位競爭力,需要緊跟技術發展趨勢。
我從事互聯網行業多年,目前也在帶計算機專業的研究生,主要的研究方向集中在大數據和人工智慧領域,我會陸續寫一些關於互聯網技術方面的文章,感興趣的朋友可以關注我,相信一定會有所收獲。
如果有互聯網、大數據、人工智慧等方面的問題,或者是考研方面的問題,都可以在評論區留言!
作為相關從業者,我來回答下。
首先回答問題,每天沒那麼多新軟體開發的。
軟體開發並不是你想的那樣一來就搞新軟體,比如開發個APP,或者做個新網站。
要知道,很多舊軟體遺留了很多問題的,程序員們做的事主要包括: 改老代碼的bug 、 更新軟體版本 、 添加新功能 、 開發新軟體業務 等等。題主你所理解的軟體開發只是開發新軟體而已,改bug、軟體版本更新都是工作量特別巨大的工作。
這些任務都是沒有盡頭的,公司會根據市場需求,制定新的產品功能,比如開發新英雄什麼的,需求是無止盡的, 任務也是無止盡 的,所以需要大量程序員前赴後繼參與軟體開發。
很高興回答你的問題。
1、程序員每天確實是在敲代碼,但不是每天都有新軟體開發。
2、新軟體開發的迭代周期沒有快到一天就搞定了。凡事都是有個過程,需要從需求調用、需求立項、需求評審、開發工時評估、進入開發、完成開發內測、線上公測、推廣產品等環節。這里僅僅說的是新軟體開發,迭代版本的周期會稍微有區別。
3、程序員除了開發新產品,還需要對舊項目進行版本迭代、老的項目維護等重要工作。
4、以上說的都是開發程序員,這里需要強調移動,很多公司的研發團隊、架構師等職位雖然也是程序員,但是他們的工作基本是底層、架構、框架開發或者開源框架的二次封裝等。基本不能稱之為新軟體開發。
如果沒有新的軟體要開發,就維護老的軟體;
軟體系統不是一天就能建成的,從開始到穩定,需要一個過程,不是編完代碼就完事了,還有完善、維護、升級;
程序員的工作並非只是開發新軟體,有時候還要培訓用戶,了解用戶需求;
另外看你所處的行業,如果是外包公司,那確實會不停有新的軟體需要開發,因為這些公司本來就是靠開發新軟體盈利的。
不用管這些,好好學好技術才是真的。
新軟體並沒有那麼多。軟體周期一般是立項,調研,需求分析,設計,開發,測試,上線,試運行,維護。這個周日可能很長,一般是數月甚至是數年,需要反復修改和矯正。每一個崗位都需要對應的人員,所以需要的員工比較多。
在者,一個軟體分為前台,後台,Android ,蘋果,微信等平台,幾乎每個平台都需要特定的技術人員才能完成,所以崗位人數較多。
另外就是你看不到的很多功能,數據分析,統計,報表等後台功能,作為軟體運行人員,需要知道軟體的運行狀態,比如收入,活躍用戶等等指標,這也需要開發者完成。
除了上面的這些因素,才是你說的新軟體多少的問題,各行各業都確實需要軟體來提高效率,降低人力成本。沒有哪一個行業不需要軟體的。想想你的手機里有多少軟體?再想想一個美團外賣可是數百台伺服器,上千人的技術團隊來運行和維護。
這些因素加起來,差不多可以解答你的疑惑了。
他們都在解決bug