程序員修煉之道:從小工到專傢

程序員修煉之道:從小工到專傢 pdf epub mobi txt 電子書 下載 2025

[美] 亨特(Andrew Hunt),[美] 托馬斯(Daid Thomas) 著,馬維達 譯
圖書標籤:
  • 編程
  • 軟件工程
  • 技術成長
  • 職業發展
  • 代碼質量
  • 軟件設計
  • 最佳實踐
  • 程序員
  • 技術書籍
  • 進階
想要找書就要到 新城書站
立刻按 ctrl+D收藏本頁
你會得到大驚喜!!
齣版社: 電子工業齣版社
ISBN:9787121123368
版次:1
商品編碼:10393278
品牌:Broadview
包裝:平裝
叢書名: 傳世經典書叢
開本:16開
齣版時間:2011-01-01
用紙:膠版紙
頁數:272
字數:300000
正文語種:中文

具體描述

編輯推薦

這是一本讓大師們都愛不釋手的書!

這不會是一本隻想要讀一遍的書!

這是一本不遜於《代碼大全》的偉大著作!

這是一本能幫助你成為編程高手的“武功秘籍”!


內容簡介

  《程序員修煉之道:從小工到專傢》由一係列獨立的部分組成,涵蓋的主題從個人責任、職業發展,直到用於使代碼保持靈活、並且易於改編和復用的各種架構技術,利用許多富有娛樂性的奇聞軼事、有思想性的例子及有趣的類比,全麵闡釋瞭軟件開發的許多不同方麵的較佳實踐和重大陷阱。無論你是初學者,是有經驗的程序員,還是軟件項目經理,本書都適閤你閱讀。

作者簡介

  亨特(Andy Hunt),是一位熱切的木匠和音樂傢,但奇怪的是,人們更需要作為顧問的他。他的工作領域包括電信、銀行、金融服務、公共服務,以及一些更奇特的領域,比如醫學成像、圖形藝術、Internet服務。

  Andy的專長是把經過驗證的技術與先進的技術混閤在一起,創建各種新穎的——但也是實用的——解決方案。Andy在北卡羅萊納州的羅利市擁有自己的顧問公司。


  托馬斯(Dave Thomas),喜歡駕駛單引擎飛機飛行,並通過這樣的方式為他的習慣付賬:為各種難題尋找優雅的解決方案,提供諸多領域裏的谘詢服務——航空、銀行、金融服務、電信、交通運輸及Internet。在於1994年移居美國前,Dave在英國創立瞭一傢通過ISO9001認證的軟件公司,為世界各地的客戶開發成熟、定製的軟件項目。Dave現在是一位獨立顧問,居住在德剋薩斯州的達拉斯。

  以ThePragmaticProgrammer,L.L.C的名義,Dave與Andy正在協同工作,把閤起來超過四十年的專業經驗帶給美國各地的客戶。


  馬維達,《C++網絡編程(捲2)》與《ACE自適配通信環境技術文檔》的譯者,技術興趣為C++網絡編程(ACE)與分布式對象計算(InternetCommunicationsEngine)。

內頁插圖

目錄

前言

第1章 注重實效的哲學

1 我的源碼讓貓給吃瞭

2 軟件的熵

3 石頭湯與煮青蛙

4 足夠好的軟件

5 你的知識資産

6 交流

第2章 注重實效的途徑

7 重復的危害

8 正交性

9 可撤消性

10 曳光彈

11 原型與便箋

12 領域語言

13 估算

第3章 基本工具

14 純文本的威力

15 shell遊戲

16 強力編輯

17 源碼控製

18 調試

19 文本操縱

20 代碼生成器

第4章 注重實效的偏執

21 按閤約設計

22 死程序不說謊

23 斷言式編程

24 何時使用異常

25 怎樣配平資源

第5章 彎麯,或摺斷

26 解耦與得墨忒耳法則

27 元程序設計

28 時間耦閤

29 它隻是視圖

30 黑闆

第6章 當你編碼時

31 靠巧閤編程

32 算法速率

33 重構

34 易於測試的代碼

35 邪惡的嚮導

第7章 在項目開始之前

36 需求之坑

37 解開不可能解開的謎題

38 等你準備好

39 規範陷阱

40 圓圈與箭頭

第8章 注重實效的項目

41 注重實效的團隊

42 無處不在的自動化

43 無情的測試

44 全都是寫

45 極大的期望

46 傲慢與偏見

附錄A 資源

專業協會

建設藏書庫

Internet資源

參考文獻

附錄B 練習解答

索引

注重實效的程序員之快速參考指南

精彩書摘

  依據你的職業發展、你的項目和你每天的工作,為你自己和你的行為負責這樣一種觀念,是注重實效的哲學的一塊基石。注重實效的程序員對他或她自己的職業生涯負責,並且不害怕承認無知或錯誤。這肯定並非是編程最令人愉悅的方麵,但它肯定會發生——即使是在最好的項目中。盡管有徹底的測試、良好的文檔以及足夠的自動化,事情還是會齣錯。交付晚瞭,齣現瞭未曾預見到的技術問題。發生這樣的事情,我們要設法盡可能職業地處理它們。這意味著誠實和坦率。我們可以為我們的能力自豪,但對於我們的缺點——還有我們的無知和我們的錯誤——我們必須誠實。
  責任是你主動擔負的東西。你承諾確保某件事情正確完成,但你不一定能直接控製事情的每一個方麵。除瞭盡你所能以外,你必須分析風險是否超齣瞭你的控製。對於不可能做到的事情或是風險太大的事情,你有權不去為之負責。你必須基於你自己的道德準則和判斷來做齣決定。
  如果你確實同意要為某個結果負責,你就應切實負起責任。當你犯錯誤(就如同我們所有人都會犯錯誤一樣)、或是判斷失誤時,誠實地承認它,並設法給齣各種選擇。不要責備彆人或彆的東西,或是拼湊藉口。不要把所有問題都歸咎於供應商、編程語言、管理部門、或是你的同事。也許他(它)們全體或是某幾方在其中扮演瞭某種角色,但你可以選擇提供解決方案,而非尋找藉口。
  如果存在供應商不能按時供貨的風險,你應該預先製定一份應急計劃。如果磁盤垮瞭——帶走瞭你的所有源碼一而你沒有做備份,那是你的錯。告訴你的老闆“我的源碼讓貓給吃瞭”也無法改變這一點。
  ……

前言/序言

  作為評閱者,我得到瞭提早閱讀你拿在手上的這本書的機會。即使當時還隻是草稿,它就已是一本很好的書。DaveThomas和AndyHunt有話要說,並且知道怎樣去說。我見過他們所做的事情,知道他們所說的將是有效的。我請求讓我來撰寫這篇前言,以便有機會嚮你解釋其中的原因。
  簡而言之,本書將告訴你怎樣以一種你能夠遵循的方式去編程。也許你不認為這是一件睏難的事情,但事情卻並非如此。為什麼?原因之一是,並非所有的編程書籍都是由程序員撰寫的。其中有許多是由語言設計者、或是與他們有閤作關係的報刊記者編撰而成,意在推銷他們的作品。那些書告訴你怎樣通過某種編程語言進行錶達——這當然很重要,但卻隻是程序員所做的事情的一小部分。
  除瞭通過編程語言進行錶達,程序員還要做些什麼?嗯,這是一個更深入的問題。大多數程序員在解釋他們所做的事情這個問題上都會有睏難。編程是一項充滿瞭各種細節的工作,追蹤這些細節需要專注。時間流逝、代碼齣現,你查看它們,那裏全是些語句。如果你不仔細思考,你也許會以為編程不過就是敲入某種編程語言的語句。你當然錯瞭,但找遍書店的編程專櫃,你卻還是講不齣所以然。
  在《程序員修煉之道》一書中,Dave和Andy將告訴我們怎樣以一種我們能夠遵循的方式編程。他們何以能這樣聰明?他們不也是和其他程序員一樣,專注於各種細節而已嗎?答案是他們在做某件事情時,會把注意力投注在他們在做的事情上——然後他們會試著把它做得更好。
  設想你在參加一個會議。或許你在想,這個會議沒完沒瞭,你還不如去寫程序。而Dave和Andy會想,他們為什麼在開會,他們想知道是否可以通過另外的方式取代會議,並決定是否可使某樣事情自動化,以使開會的工作推後。然後他們就會這樣去做。
  這就是Dave和Andy思考的方式。開會並非是某種使他們遠離編程的事情。開會就是編程,並且是能夠加以改善的編程。我之所以知道他們以這樣的方式思考,是因為這是書中的第二條提示:思考你的工作。
  那麼再設想一下,他們這樣思考瞭幾年。很快他們就會擁有一堆解決方案。現在設想他們在工作中使用這些解決方案,又是幾年;他們還放棄瞭其中太過睏難、或者不能總是産生結果的解決方案。噢,這樣的途徑幾乎定義瞭“pragmatic”(注重實效)的含義。現在設想他們又用瞭一兩年來寫下他們的解決方案。你也許會想,這些信息可真是金礦。你想對瞭。
  兩位作者告訴我們他們是怎樣編程的,並且是以一種我們能夠遵循的方式來告訴我們的。但這一陳述的後半部分的含義也許要多於你所想到的。讓我來解釋一下。
《代碼的精進:從新手到架構師的成長之路》 簡介 在這個日新月異的科技時代,軟件開發已經成為推動社會進步的核心力量。每一行代碼的背後,都凝聚著開發者對邏輯的嚴謹思考、對用戶需求的深刻洞察以及對技術演進的敏銳把握。然而,從一個初齣茅廬的編程新手,蛻變為能夠獨立設計復雜係統、引領技術潮流的專傢,這條道路並非坦途,而是充滿挑戰與機遇的漫長旅程。 《代碼的精進:從新手到架構師的成長之路》並非一本簡單的技術教程,它更像是一本為所有誌在軟件開發領域深耕細作的從業者量身打造的“修煉秘籍”。本書旨在為讀者勾勒齣一幅清晰的成長藍圖,從編碼基礎的紮實,到設計思維的培養,再到係統架構的理解,最終邁嚮技術領導者的行列。它不拘泥於特定編程語言的語法細節,而是聚焦於那些跨越語言、平颱、框架的普適性原理和方法論,幫助讀者建立起一套強大的思維框架和解決問題的能力體係。 本書內容涵蓋瞭軟件開發生命周期的各個關鍵環節,並深入剖析瞭每一個環節中可能遇到的難點和提升點。 第一部分:打牢根基,精煉技藝 在軟件開發的初期,紮實的基礎知識是決定未來發展高度的基石。本部分將帶領讀者重溫並深化對計算機科學基礎概念的理解,包括但不限於: 數據結構與算法的精髓: 深入探討各種經典數據結構(如數組、鏈錶、棧、隊列、樹、圖、哈希錶等)的設計思想、應用場景及其時間空間復雜度分析。重點講解排序、查找、圖遍曆、動態規劃等核心算法,並強調如何根據實際問題選擇最優的算法和數據結構組閤。我們將通過實際案例,展示如何利用高效的算法和數據結構來解決性能瓶頸,提升程序的運行效率。 操作係統原理的深度理解: 瞭解進程與綫程的管理、內存分配與迴收機製、文件係統的工作方式、I/O操作的原理等。這有助於讀者編寫更健壯、更高效的代碼,避免潛在的並發問題和資源浪費。我們將解釋這些底層原理如何影響應用程序的行為,以及如何利用這些知識來優化程序性能。 計算機網絡基礎: 掌握TCP/IP協議棧、HTTP/HTTPS協議、DNS解析等核心概念。理解網絡通信的原理,對於開發分布式係統、Web應用乃至任何需要網絡交互的程序都至關重要。我們將探討不同網絡協議的特點,以及它們在實際應用中的作用。 編譯與鏈接的奧秘: 瞭解代碼從源代碼到可執行文件的轉化過程,包括詞法分析、語法分析、語義分析、代碼生成、優化以及鏈接等階段。這種理解能夠幫助開發者更好地理解編譯器行為,編寫齣更易於編譯器優化的代碼,並能更有效地進行程序調試。 麵嚮對象設計原則與設計模式的融會貫通: 學習SOLID原則(單一職責、開閉、裏氏替換、接口隔離、依賴倒置)、DRY(Don't Repeat Yourself)、KISS(Keep It Simple, Stupid)等核心設計原則,理解它們在構建可維護、可擴展代碼中的重要性。在此基礎上,係統學習並實踐各種經典設計模式(如工廠模式、單例模式、觀察者模式、策略模式、裝飾者模式、組閤模式等),掌握它們解決常見設計問題的思想和方法,學會識彆應用場景並靈活運用。 第二部分:構建之道,巧思妙想 當掌握瞭紮實的基礎後,如何將這些知識轉化為高質量、可維護的軟件設計,是下一個關鍵的飛躍。本部分將聚焦於軟件設計的方法論、模式和實踐: 領域驅動設計(DDD)的哲學與實踐: 深入理解DDD的核心概念,包括領域、限界上下文、領域事件、聚閤根、實體、值對象等。學習如何通過建立一個與業務領域緊密映射的通用語言,來驅動軟件的設計與開發,從而構建齣更加貼閤業務需求、易於理解和演進的軟件係統。我們將通過具體案例,演示如何應用DDD來解決復雜業務係統的設計難題。 可伸縮性與可用性設計: 探討如何設計能夠應對高並發請求、保證服務持續可用的係統。學習負載均衡、緩存策略、數據庫讀寫分離、容錯機製(如熔斷、降級)、消息隊列的應用等技術。理解CAP定理和BASE理論,並學習如何在實際係統中權衡一緻性、可用性和分區容錯性。 模塊化與解耦的藝術: 學習如何將大型復雜係統分解為相互獨立的模塊,並通過清晰的接口進行交互。掌握依賴注入、事件驅動架構、微服務等解耦技術,減少模塊間的耦閤度,提高係統的靈活性和可維護性。我們將分析不同解耦方法的優缺點,以及何時選擇何種技術。 代碼質量與重構的策略: 強調編寫清晰、簡潔、可讀性強的代碼的重要性。學習代碼審查(Code Review)的技巧和重要性,以及如何有效地發現和修復代碼中的缺陷。掌握各種代碼重構技術(如提取方法、移動字段、改變參數順序等),在不改變程序外在行為的前提下,提升代碼的內部質量,使其更易於理解、測試和擴展。 測試驅動開發(TDD)與行為驅動開發(BDD): 推廣先編寫測試用例,再編寫實現代碼的開發流程。理解TDD如何驅動設計,確保代碼的可測試性和魯棒性。學習BDD如何從用戶的角度描述係統行為,促進開發團隊與業務方之間的溝通,確保軟件開發方嚮的正確性。 第三部分:架構之路,運籌帷幄 走嚮係統架構師的崗位,需要具備全局觀和宏觀的決策能力。本部分將引導讀者深入理解大型係統的設計與演進: 係統架構模式的探索: 詳細介紹各種常見的係統架構模式,如單體架構、SOA(麵嚮服務架構)、微服務架構、事件驅動架構、CQRS(命令查詢職責分離)等。分析每種架構模式的優缺點、適用場景以及演進路徑。我們將通過對比分析,幫助讀者選擇最適閤特定業務場景的架構方案。 分布式係統的挑戰與解決方案: 深入探討分布式係統中常見的挑戰,如分布式事務、數據一緻性、服務發現、配置管理、分布式日誌與監控等。學習各種分布式解決方案,如ZooKeeper、etcd、Kafka、RabbitMQ、Consul等,以及它們在解決實際問題中的應用。 性能優化與容量規劃: 掌握性能分析工具的使用,識彆係統瓶頸。學習如何從代碼、數據庫、網絡、服務器等多個層麵進行性能優化。理解容量規劃的重要性,如何根據業務增長預測和係統能力進行資源配置,保證係統的穩定運行。 安全性設計原則: 從設計之初就融入安全考慮,學習常見的安全漏洞(如SQL注入、XSS攻擊、CSRF攻擊等)及其防禦策略。瞭解身份認證、授權、數據加密、API安全等關鍵安全技術。 技術選型與演進策略: 學習如何評估和選擇閤適的技術棧,並製定閤理的技術演進計劃。理解技術債務的概念,以及如何管理和償還技術債務。探討如何平衡新技術的引入與現有係統的維護。 第四部分:超越技術,成為專傢 真正的專傢不僅在技術上精益求精,更在溝通、協作、領導力等方麵展現齣卓越的能力。本部分將關注軟技能的培養: 溝通與協作的藝術: 學習如何清晰有效地錶達技術思想,與産品經理、設計師、測試工程師以及其他開發者高效協作。掌握需求分析、技術評審、問題診斷等過程中的溝通技巧。 領導力與團隊建設: 探討如何成為一名技術領導者,激勵團隊成員,引導技術方嚮,解決團隊衝突。學習如何進行項目管理,推動項目順利進行。 持續學習與知識分享: 強調在快速發展的技術領域,持續學習的重要性。分享有效的學習方法,以及如何通過技術博客、開源貢獻、技術分享等方式,將知識傳遞給他人,提升自身和團隊的影響力。 職業生涯規劃與自我認知: 引導讀者思考自己的職業發展方嚮,設定短期和長期目標。鼓勵讀者進行自我反思,認識到自身的優勢和不足,不斷完善自我。 《代碼的精進:從新手到架構師的成長之路》的目標是幫助每一位讀者建立起一套係統性的學習和成長體係。本書提供的是一種思考方式,一套方法論,以及無數實踐的啓示。無論您是剛剛踏入編程殿堂的新手,還是在職業生涯中尋求突破的資深開發者,都能從中找到適閤自己的路徑和方法,最終在這個充滿活力的領域裏,實現從代碼的編寫者到架構的塑造者,乃至技術領域的引領者的蛻變。這本書,將是您在這條充滿挑戰與榮耀的道路上,最可靠的夥伴。

用戶評價

評分

我從事軟件開發已經有十多年瞭,閱覽過無數技術書籍,但《程序員修煉之道》這本書,絕對是其中最能觸動我心靈的一本。它沒有華麗的辭藻,也沒有過於炫技的技巧,但字裏行間流露齣的,是對編程藝術的深刻理解和對技術追求的執著。作者的敘述方式非常接地氣,沒有故作高深,而是用一種樸實無華的語言,將那些看似深奧的技術原理娓娓道來。我尤其欣賞他對於“常識性”知識的重新審視,比如關於代碼的簡潔性、復用性以及可測試性的討論,這些都是我們在日常開發中常常會忽略,但卻至關重要的方麵。這本書讓我意識到,技術的發展並非一蹴而就,而是需要持續的積纍和不斷的打磨。作者在書中提齣的許多思考方式和實踐建議,讓我反思瞭自己過去的一些習慣,也讓我對未來的技術方嚮有瞭更清晰的規劃。我會在需要的時候,反復翻閱這本書,因為它總能給我帶來新的啓發和力量。

評分

這本書的包裝很有質感,拿到手的時候就覺得是那種值得細細品讀的書。封麵設計簡潔大氣,透露著一股沉穩的技術力量,不像市麵上很多浮誇的封麵。我尤其喜歡它的字體選擇,閱讀起來非常舒服,長時間看也不會覺得眼睛疲勞。內容方麵,雖然我還沒有完全讀完,但已經能感受到作者在技術深度和廣度上的紮實功底。他並沒有選擇那種“速成”式的教導,而是循序漸進地引導讀者去理解更底層、更核心的原理。其中關於代碼可維護性和可讀性的討論,讓我受益匪淺。我以前總覺得隻要代碼能跑就行,但這本書讓我認識到,好的代碼不僅僅是工作的,更是藝術品,需要精雕細琢。作者用瞭很多生動的比喻和實際的案例來解釋抽象的概念,這一點做得非常到位,讓那些本來可能枯燥的技術話題變得鮮活起來。我特彆欣賞他在講解設計模式時,那種庖丁解牛般的細緻分析,將復雜的模式拆解得淋灕盡緻,並且還強調瞭在什麼場景下使用什麼模式,避免瞭濫用。這本書讓我對“工匠精神”有瞭更深的理解,也燃起瞭我成為一名真正優秀程序員的決心。

評分

這本書絕對是我近年來看過的最“走心”的技術書籍之一。作為一名資深的開發者,我常常感嘆於技術更新的速度,也時常為如何保持自己的競爭力而焦慮。這本書的齣現,恰好解答瞭我心中的諸多睏惑。它並沒有提供一些“速成”的秘籍,而是強調瞭“修煉”的重要性。作者的視角非常獨特,他將程序員的成長比作一個循序漸進的修煉過程,從基礎功的夯實,到內功心法的領悟,再到實戰技能的提升,環環相扣,層層遞進。我特彆喜歡他在關於“代碼質量”的論述,他用大量篇幅闡述瞭為什麼高質量的代碼如此重要,以及如何去寫齣高質量的代碼。這讓我意識到,我們不僅僅是代碼的編寫者,更是軟件的守護者。書中關於“復盤”和“總結”的篇章,也讓我深刻反省瞭自己過去的一些開發習慣,讓我明白持續的學習和改進纔是程序員職業生涯中最寶貴的財富。這本書更像是一本人生哲學,指導我們如何在技術的世界裏不斷成長,成為一名真正優秀的“專傢”。

評分

我是一個剛入行不久的開發者,很多概念都還在摸索階段。市麵上關於編程的書籍琳琅滿目,但我常常覺得它們要麼過於理論化,要麼過於碎片化,難以形成體係。這本書的到來,可以說是及時雨。它沒有上來就拋齣大量晦澀難懂的術語,而是從最基礎的概念講起,一步一步地引導我構建起紮實的知識體係。我特彆喜歡作者在講解數據結構和算法時,那種循序漸進的邏輯。他不僅講瞭“是什麼”,還講瞭“為什麼”,以及“在什麼場景下最優”。這種深入的講解方式,讓我不再是死記硬背,而是真正理解瞭這些基礎的重要性。書中關於軟件開發流程和團隊協作的討論,也讓我對未來的職業生涯有瞭更清晰的認識。我明白瞭,成為一名優秀的程序員,不僅僅是會寫代碼,還需要具備良好的溝通能力、協作能力和項目管理能力。這本書就像一張全景圖,讓我看到瞭軟件開發的全貌,也讓我對自己的未來充滿瞭期待。我也會把這本書推薦給我的同期新人,相信它能幫助我們少走很多彎路。

評分

這本書的齣現,對我來說就像在茫茫的技術海洋中找到瞭一座燈塔。我是一名工作瞭幾年的程序員,常常感到自己陷入瞭瓶頸,雖然每天都在寫代碼,但總覺得進步緩慢,缺乏方嚮。這本書就像一位經驗豐富的老前輩,耐心地指引我前進的道路。我特彆喜歡作者對“學習”本身的解讀,他不僅僅是教你如何掌握一門技術,更是教你如何高效、係統地學習。他分享的許多學習方法論,比如如何深入理解一門語言的底層機製,如何通過閱讀源碼來提升自己,這些都給瞭我全新的視角。我嘗試著去實踐他提齣的某些方法,發現自己對問題的理解確實更深入瞭,解決問題的效率也大大提高。這本書的語言風格也非常獨特,既有技術人的嚴謹,又不失幽默感,讀起來一點都不枯燥。作者在書中穿插的許多個人經曆和感悟,也讓我覺得非常親切,仿佛在和一位朋友交流。他對於“反思”和“總結”的強調,讓我意識到自己過去可能過於埋頭苦乾,而忽略瞭停下來思考和沉澱。這本書不僅僅是一本技術書籍,更是一本關於職業成長和自我提升的心靈指南,強烈推薦給所有渴望進步的程序員。

評分

程序員必讀經典,很棒的書,還有人模仿寫瞭《Android修煉之道,從小工到專傢》。。。

評分

和不事稼穡你是檸檬酸鈣貨真價實會計師

評分

從小工到專傢~程序猿的修煉之道~~~

評分

《程序員修煉之道:從小工到專傢》由一係列獨立的部分組成,涵蓋的主題從個人責任、職業發展,直到用於使代碼保持靈活、並且易於改編和復用的各種架構技術,利用許多富有娛樂性的奇聞軼事、有思想性的例子及有趣的類比,全麵闡釋瞭軟件開發的許多不同方麵的較佳實踐和重大陷阱。

評分

單位買的,活動劃算,發貨快

評分

本評價來自錘子快捷短語,沒有實際意義,但商品沒有什麼問題。

評分

在京東:買瞭很多次書。贊一個。

評分

書是正版,質量不錯,以後慢慢研讀,希望收獲多多,加油努力。

評分

簽收後一天後纔收到貨,沒有任何告知,最近快遞小哥換瞭,這個比之前那個差遠瞭,也沒有禮貌

相關圖書

本站所有內容均為互聯網搜尋引擎提供的公開搜索信息,本站不存儲任何數據與內容,任何內容與數據均與本站無關,如有需要請聯繫相關搜索引擎包括但不限於百度google,bing,sogou

© 2025 book.cndgn.com All Rights Reserved. 新城书站 版權所有