聊聊技術寫作的個人體會

有群友問過,是什么原因使我開始寫技術公眾號,又是什么動力讓我堅持寫的。

在我看來,寫作是一件不能敷衍的事,通過寫作來學習,反而要比單純地學習的效果要好。為了寫成一篇“拿得出手”的文章,我要反復查找資料,閱讀與思考,拆解與整合,最終寫成的時候,也是知識的拼圖成型的時候。

所以,對我來說,**寫作是一種咀嚼信息而后提煉知識,最終拓展成技能與認知的過程。**雖然這個過程很緩慢,但曾經的急進方式并沒有速成的效果啊,不妨就這樣一文章一腳印地試試看咯。

除此之外,還有一個很重要的原因。文章是一種公共對話的媒介,它是一個展示的窗口,也是一個接收反饋的通道。通過寫作,我有了跟其它學習者對話的機會。

看書學習可能只是個人的事情,但是,在寫作平臺上發布文章,這就超越了個人行為——你得隨時準備著被批評、或者被請教、或者被誤解、甚至是被無視(這是最常見的結果)。

我享受寫作文章,來跟其他處在相同處境的同學們交流,來向更優秀的大牛們學習取經。

這就是我目前寫技術文章的一些個人體會吧。

對于上面提到的第二個原因,我最近頗有感觸,想要多聊一些。為了更有針對性,本文姑且限定一個話題吧,那就是“寫作技術文章,如何看待他人的批評/意見”。

1、主觀性的意見

有些聲音其實只是主觀看法,我認為可以和而不同。

主觀世界往往沒有確切的對錯之分,畢竟——思想無罪

面對主觀性的意見,我認為要做到有理有據,堅持一點個性,最后會得到別人的尊重。

比如,在翻譯 Python 社區的七種治理模式的時候,有一個提案是“Python Governance Model Lead by Trio of Pythonistas”,我將它翻譯成“三巨頭治理模式”。有同學就指出,“Trio”應該翻譯成“三人組”或者“三重奏”,翻譯成“三巨頭”是什么意思?

這種留言,我認為是主觀性的意見,應求同存異。

我之所以這么翻譯,一方面考慮,它要替代的是“終身仁慈獨裁者”,三巨頭對獨裁者,意味深長;另一方面,我腦子里總想著一個皇帝死了,然后政權被三個攝政大臣把持,這種政治畫面揮之不去,雖然是不著邊際,但挺有趣味,所以我不肯放棄這“三巨頭”的譯法。

主觀性的意見帶入了提出者的個人知識背景、思想結構、以及話語習慣等等,我覺得要先嘗試交流,相互交換,能融洽兼容則最好啦,不能的話,及時終止。

2、客觀性的意見

客觀性的意見有如下幾種:筆誤(錯別字和其它疏忽)、代碼規范、知識性錯誤......

對于筆誤性的錯誤,這沒啥好說的,我自己發現過幾處,也被讀者指出過幾處。有則改之就好。

對于代碼規范,有時候為了舉例方便,確實沒有按照規范來。盡量避免,求一個兼顧。

知識性錯誤是要熱烈歡迎的——不是說歡迎錯誤,而是說歡迎別人來指出我所未知的錯誤。

出現知識性的錯誤,就意味著沒有全面掌握知識,一旦出現,就必然意味著有提升的空間。本來以為知道了什么,如果被指出了錯誤,那改正后,才是真的知道了什么。

知道自己不知道并且改正之,并不可恥,不知道自己不知道,這才可憐。

在寫《Python是否支持復制字符串呢?》的時候,我根據已得的知識,以及查閱到的資料,早早就得出了一個很滿意的結論。最后成文前,臨時地加了一個未作驗證的示例,沒想到這會是一個致命的反例,推翻了前面辛辛苦苦建立起來的一切。

這是一個客觀性的錯誤,一被指出的時候,很快就能驗證。因為這個錯誤,我重新梳理了相關的知識點,組成新的知識面,寫成了一篇《join()方法的神奇用處與Intern機制的軟肋》。

還有一個例子,前不久的《Python進階:自定義對象實現切片功能》,我在準備素材的時候,竟采用了一個不嚴謹的例子,而且自作聰明地批判了別人的實際無誤的例子。最后,有讀者留言了很長的不同觀點,我才意識到自己的錯誤!

得益于讀者的留言,我修正了自己的錯誤,而且在修正過程中,也加強了對于其它知識的理解,真是塞翁失馬焉知非福啊。

3、內置函數與內置類

這里還有一個客觀性錯誤,藏得特別深,可能真的有 90% 的 Python 使用者不知道。

特別感謝 @xpresslink 同學指出。下面,我給大家分享一下。

在文章《為什么range不是迭代器?range到底是什么類型?》里,我的注意點其實就在標題的兩個問句里,大部分的留言互動也是基于此。但最后,很意外地,一名讀者指出了一個客觀性錯誤,讓我有了額外的收獲。

這位同學指出我有些基本的概念是錯誤的:

“range() 函數”這個說法是非常明顯有錯誤的,range 不是內置函數( builtin method )而是個類對象,在 python 里面不要見到用括號調用的東西就認為是函數,類似的還是有很多,如 list, set, tuple, dict 等,這些都是類, 特別是 enumerate ,這個學 python 的人十有八九認為是函數而不知道是類,加了括號是實例化而不是函數調用。

python 中類的實例化和函數調用非常容易對新手有大的迷惑性,相對來說在 java 中有明確的 new 關鍵字加在構造方法前面概念更清楚一些。

根據這個評論,我就去查看文檔。

上圖中 range() 雖然被歸類到 Built-in Functions 里面,但是官方描述的是“functions and types”,即是說,在內置函數的大類下面,包含了內置函數與內置類。

那 range() 屬于哪一種呢?看看它的解釋:

Rather than being a function, range is actually an immutable sequence type......

range 實際是一種不可變的序列類型,而非一個(內置)函數......

按照這里的說法,官方已經區分了 range() 不是函數,正像那位留言的同學所說。

我第一反應當然是不能接受。我怎么會認為它是內置函數的呢,難道不是根據學習資料得來的么?難道我學習的資料是錯的?為何從來沒看到有人對此做過辨析呢?

根據群友的提示,我去查看 Python2 的文檔,然后就發現了很有意思的地方:

首先一點, Built-in Functions 的描述跟 Python3 有點不同,它寫的是 “functions”,并不包含“types”;還有一點,在 range() 和 xrange() 的具體內容中,官方都是稱呼它們為 function 。

由此看來,Python2 的官方文檔就把 range() 當成內置函數,這個認識錯誤是有根源的!等到 Python3 的時候,官方把錯誤改正過來了,然而改得并不徹底。才有了前面同時存在“functions and types”的描述。

官方已經把 range() 與 xrange() 規范為一個,或許在今后版本,還會專門分出一類 Built-in Types 來存放像 range() 和 enumerate() 這些內置類吧。

在那之前,我只能先行給大家提個醒了:別再誤以為 range() 是內置函數了。

那么,怎么辨別哪些是內置函數呢?

我想到了兩個方法:

(1)看是否存在對應的魔術方法。例如,len() 是一個內置函數,因為它實際調用的是魔術方法__len__() ;還有最近一直在提的 iter(),它調用的是__iter__() ,所以也是內置函數;而因為不存在 __range__() 魔術方法,所以 range() 不是內置函數。

(2)使用 type() 進行判斷,結果為 builtin_function_or_method 的才是內置函數。

>>> type(len)
builtin_function_or_method
>>> type(sorted)
builtin_function_or_method
>>> type(open)
builtin_function_or_method>>> type(range)
type
>>> type(enumerate)
type
>>> type(str)
type
復制代碼

像 open 和 sorted 并沒有對應的魔術方法,但判斷出來都是內置函數;而 str 雖有對應魔術方法,但判斷是 type ,這意味著,以上兩種方法得要結合起來看。

我不確定有多少人事先知道怎么區分內置函數與內置類,但我確實沒看到過對這個問題進行辨析的文章,所以,這次是真正漲知識了,也希望這篇文章,能夠消除一些讀者的錯誤觀念吧。

4、小結

我最近寫的一些文章都不是心血來潮,不管是字符串系列、切片系列還是迭代器系列,本意都是想在一個主題上進行深入的多面性的思考與記錄。

如果沒有一些熱心讀者的指正,我恐怕是很難知道自己錯在了哪里,如果不是有這么多的認同以及意見,我恐怕也缺乏動力堅持寫下去。

最后鳴謝幾位提意見的小能手同學(時間順序,可能有漏):@瘋琴、@德瑪西亞之翼奎因、@發條橙、@gaieepo、@郭芮、@aijam、@xpresslink、@進擊的團子、@不換......

相關鏈接(單有錯,雙修正):

1、Python是否支持復制字符串呢?

2、join()方法的神奇用處與Intern機制的軟肋

3、Python進階:自定義對象實現切片功能

4、Python進階:全面解讀高級特性之切片!

5、為什么range不是迭代器?range到底是什么類型?

-----------------

本文原創并首發于微信公眾號【Python貓】,后臺回復“愛學習”,免費獲得20+本精選電子書。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/449720.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/449720.shtml
英文地址,請注明出處:http://en.pswp.cn/news/449720.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

「2019冬令營提高組」全連

傳送門 顯然的 $dp$ 設 $f[i]$ 表示點擊第 $i$ 個音符時的最大價值,$t[i]$ 表示音符 $i$ 的準備時間 那么可以枚舉 $1$ 到 $i-t[i]$ 的所有音符,如果 $j$ ,如果 $jt[j]$ 小于等于 $i$ ,那么 $f[i]max(f[i],f[j]t[i]*val[i])$ 考慮…

Docker常用命令、超實用、講解清晰明了(rm、stop、start、kill、logs、diff、top、cp、restart ...)

前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。 1. 查看docker信息(version、info) # 查看docker版本 $docker version # 顯示docker系統的信息 $docker i…

推薦給開發人員的實用命令行工具

摘要:優秀的工具對于定位問題出在何處有著無可估量的價值,而且能在一開始就幫助我們阻止問題的出現,總的來說能使我們的工作更有效率。本文介紹了6個非常強大且靈活的工具,熟練使用這些工具能使你的生活變得更輕松一些。 作為一名…

雷軍:啟動手機+AIoT雙引擎戰略 5G春天到來前打持久戰

雷帝網 樂天 1月11日報道 小米CEO雷軍今日在小米年會上宣布,2019年,小米將正式啟動“手機AIoT”雙引擎戰略,這將是小米未來五年的核心戰略。未來5年,小米將在AIoT領域持續投入超過100億元。從2019年起,AIoT&#xff0c…

Jenkins自定義主題

x下載自定義樣式 http://afonsof.com/jenkins-material-theme/ 打開連接 最后點擊:DOWNLOAD TOUR THEME! 得到樣式文件:jenkins-material-theme.css 上傳樣式文件到jenkins 將jenkins-material-theme.css 上傳到: /var/jenkins_home/userCont…

SSH (Secure Shell)詳解

Secure Shell(SSH)是一種加密 網絡協議,用于在不安全的網絡上安全地運行網絡服務。 SSH通過客戶端 - 服務器體系結構中的不安全網絡提供安全通道,將SSH客戶端應用程序與SSH服務器相連接。 常見的應用程序包括遠程命令行登錄和遠程…

股票配對收益

import pandas as pd import numpy as npimport matplotlib.pyplot as plt plt.rcParams[font.sans-serif] [SimHei] # 字體設置 import matplotlib matplotlib.rcParams[axes.unicode_minus]False # 負號顯示問題from arch.unitroot import ADF …

YUV420、YUV422、RGB24轉換

//平面YUV422轉平面RGB24 static void YUV422p_to_RGB24(unsigned char *yuv422[3], unsigned char *rgb24, int width, int height) { int R,G,B,Y,U,V; int x,y; int nWidth width>>1; //色度信號寬度 for (y0;y<height;y) { for (x0;x<width;x) { …

最長非下降子序列(O(nlogn))(offer收割)

題目 如題 思路 核心思想是&#xff0c;維護一個數組ends&#xff0c;它記錄了長度為k的子序列的末尾元素的最小值。聽起來很抽象&#xff0c;我們不妨手動演示一遍整個過程。 假設數組a{2,9,4,27,29,15,7}&#xff0c;令length表示當前找到的最長非下降子序列的長度。初始時le…

[Python]小甲魚Python視頻第026課(字典:當索引不好用時2)課后題及參考解答

# -*- coding: utf-8 -*- """ Created on Fri Mar 8 10:32:20 2019author: Administrator """"""測試題&#xff1a;0. Python的字典是否支持一鍵&#xff08;Key&#xff09;多值&#xff08;Value&#xff09;&#xff1f;不支…

2021-08-12 畫蠟燭線

畫蠟燭線 pip install https://github.com/matplotlib/mpl_finance/archive/master.zip from mpl_finance import candlestick_ochl import matplotlib.pyplot as plt from matplotlib.pylab import date2num# 先畫日K線 fig, axes plt.subplots(nrows1, ncols1, figsize(20, …

替換字符串列表中字符串

//替換字符串列表中字符串 procedure StringsReplace(var S : TStrings; OldPattern, NewPattern: string; Flags: TReplaceFlags);var i : integer; tmpstr : string;begin for i : 0 to S.Count -1 do begin tmpstr : S[i]; s[i] : StringReplace(tmpstr, Ol…

TCP/IP協議族 詳解(TCP/IP四層模型、OSI七層模型)

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 TCP/IP協議族&#xff08;TCP/IP Protocol Suite&#xff0c;或TCP/IP Protocols&#xff09;&#xff0c;簡稱TCP/IP。由于在網絡通訊協…

RGB 24和YUY2相互轉換

YUY2經常用于電視制式以及許多攝像頭的輸出格式.而我們在處理時經常需要將其轉化為RGB進行處理,這里簡單介紹下YUY2(YUV)與RGB之間相互轉化的關系: http://msdn2.microsoft.com/en-us/library/ms893078.aspx YUY2(YUV) To RGB: C Y - 16 D U - 128 E V - 128 R clip((…

通達信獲取數據

#python第三方庫pytdx獲取 from pytdx.hq import TdxHq_API api TdxHq_API() # 數據獲取接口一般返回list結構&#xff0c;如果需要轉化為pandas Dataframe接口&#xff0c;可以使用 api.to_df 進行轉化 with api.connect(119.147.212.81, 7709): # 返回普通list data …

ICMP (互聯網控制消息協議 )是什么

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 互聯網控制消息協議&#xff08;英語&#xff1a;Internet Control Message Protocol&#xff0c;縮寫&#xff1a;ICMP&#xff09;是互…

股票數據相關性分析

導入相關包 import pandas as pd import numpy as np import matplotlib.pyplot as plt from matplotlib.collections import LineCollection import akshare as ak from sklearn import cluster, covariance, manifold %matplotlib inline #Jupyter Notebook顯示圖形專用 plt…

分享一個輔助分析內存泄漏的腳本

最近給系統做了一點優化&#xff0c;前幾天去查看系統監控&#xff0c;想看看上線前后cpu使用率曲線變化情況。查看的時候意外發現上線前后內存占用相差不少&#xff0c;20%以上。 本來我沒怎么在意這個問題&#xff0c;因為我們系統會在運行過程中緩存部分數據內容。但客戶覺得…

windows Virtualbox下配置Ubuntu,且用ssh連接

1、軟件介紹 1&#xff09;virtualbox 5.2.22 2&#xff09;Ubuntu 18.04 3&#xff09;git bash 2、virtualbox設置 安裝完Ubuntu后點擊該鏡像的設置&#xff0c;依次點擊“網絡”——“端口轉發” 將主機端口設置為一個閑置端口&#xff0c;子系統端口也就是Ubuntu端口設置…

專訪劉偉:軟件開發人員的內功修煉之道

摘要&#xff1a;數學修養對軟件開發之路起著什么作用&#xff1f;碼農如何修煉自己的內功并成長為優秀的軟件開發員&#xff1f;帶著相關思考&#xff0c;社區之星第10期采訪了中南大學副教授——劉偉。他對數學修養、設計模式、軟件架構和重構方面的獨特見解&#xff0c;相信…