譯註 1:在我剛開始寫部落格的時候,發現了 Peteris Krumins,特別高產的博主。博客地址是:www.catonmat.net。我給他發了一封郵件,希望可以將他的一篇博文翻譯成中文,他很開心的答應了。前段時候 Peteris 來信問我,有沒有興趣再翻譯一篇。於是有了這篇譯文。
譯註 2:關於 Fog Creek 公司。Fog Creek 是一家致力於項目管理工具的公司。我所知道的 Trello 就是出自這家公司。讓我印像比較深刻的還有辦公環境,說其好於 google 也不為過。不信你去搜索一下。
注 3:Fog Creek 會定期對一些開發人員進行訪談。下面是採訪譯文。
在 dev.life 欄目中,我們會和一些開發者聊聊關於他們的 coding 熱情:他們怎麼喜歡上 coding,以及喜歡什麼樣的工作。
本文的嘉賓是 Peteris Krumins,他是 Browserling 公司的聯合創始人兼 CEO。
Browserling 是一個網站多瀏覽器測試的在線工具,匯集了主流瀏覽器的網站,可以幫助網頁設計師測試網站在不同瀏覽器下的兼容性。同時他還是書籍《Perl One-Liners》的作者。他經常在部落格上寫一些關於軟體開發的文章。
Fog Creek:你是怎麼進入軟體開發行業的?
Peteris:我在 6 歲的時候第一次接觸電腦,當時在媽媽工作的地方看到了一個 386 或者 486 的電腦。當時我就被深深吸引了。之後我就一起幻想能有一台自己的電腦。我試了很多方法,最後從一些朋友那兒得到了一台。為了蹭網,我甚至假裝是大學生,儘管我還是一個小孩子。
我最開始從一個叫 Zombie 的朋友那兒得到了一台筆記型電腦。他是一個了不起的系統管理員,將一台閒置的筆電送給我了。我現在還保存著:IBM Butterfly 筆電(ThinkPad 701CS),8M 內存,800M 硬盤,我最開始用來跑 Windows 95 和 OpenBSD。後來我將內存升級成了 40M。它還有細纜 PCMCIA 網卡,我家裡的網絡最開始是 10Mb/s。
再後來我在 15 歲的時候擁有了自己的電腦。當時它有著很不錯的配置:400Mhz 賽揚處理器,256M 內存,8G 硬盤驅動器,16M 3D Blaster Banshee 顯卡,17 寸 75Hz,分辨率 1024×768 的 CRT 顯示器,原廠配置 Windows 98 操作系統。
電腦知識我是完全自學的。剛開始我學習了各種程序語言。當我拿到我賽揚電腦的時候,我已經知道自己想要做什麼了。我想要做網頁,於是開始學習 HTML、JavaScript 和 CSS。
最開始我並不知道網站是怎麼工作的,也不知道任何服務器相關的知識,一段時間後才明白我需要一個 web 服務器去運行我的網站。我先是將我的網站託管在 Angelfire 上,後來用 PHP 和 MySQL 搭建了自己的 Linux Slackware web 服務器。
我也想做一名駭客,所以我還學習了 C 和彙編語言。另外我花了很多時間在 IRCNet 上,所以我還學習了 mIRC 腳本並用 VB 搭建了自己的 IRC 客戶端。
(注:IRC 是 Internet Relay Chat 的英文縮寫,中文一般稱為互聯網中繼聊天。由芬蘭人 JarkkOikarinen 於 1988 年首創的一種網絡聊天協議。mIRC 是英國 mIRC 公司出品的 IRC 類客戶端軟件。mIRC 腳本是其集成的腳本語言。)
Fog Creek:談一談你現在的工作。
Peteris:我現在是 Browserling 公司的 CEO。2011 年,我和一個朋友在舊金山灣區成立了 Browerling 公司。現在我每天都會寫很多代碼、管理服務器,和客戶與僱員們工作。我很喜歡我現在的工作,實在無法想像如果我從事別的工作會是什麼樣。另外我還是 Paul Graham 的死粉,也是他的文章激勵我創業。
我現在全身心致力於擴展業務。我停止了所有副業、寫書等任何可能分散我注意力的事情。創業成功的首要原則就是要百分百地投入。我現在已經實現了營收增長,並且正在建一個國際化遠程的開發團隊。我剛招聘了一個烏克蘭的牛逼工程師,並向非英語市場上擴展業務。
我也解決了一些技術問題,比如如何將虛擬機上運行的瀏覽器分配給不同的客戶,如何每秒鐘抓取數以百計的瀏覽器截圖。我喜歡服務器相關的工作,並且我打算將服務器從 EC2 和 Rackspace 雲上遷到物理機上。雲服務器是很適合初創公司,但是隨著發展壯大,服務器遷到自己的地盤還是很有必要的:可以節省開支並提高性能。(注:EC2 是 Amazon 雲。Rackspace 是全球三個雲廠商之一。)
Fog Creek::什麼時候是你最開心的 Coding 時刻?
Peteris:當我工作狀態極好和搞定問題的時候是最開心的。我經常能進入狀態,晚上工作白天休息。晚上時間干擾很少能讓你保持專心。
另外一個秘訣是關閉 Twitter、Facebook、Skype、GTalk、G+ 等社交工具。當你在工作狀態時候不想被突然的消息提示打斷吧。
Fog Creek:你的開發環境是什麼樣的?
Peteris:我裝了雙操作系統。我在自己的工作站使用 Windows 7,通過 SSH 登錄 Linux 服務器。我上個月剛搭建了一個新的工作站:Intel i7 4790K 處理器並超頻處理到 4.7Ghz。
另外我還有一個 Linux 防火牆服務器、一個 Linux 文件服務器和一個 Linux 開發服務器。通過 Samba 將 Linux 文件服務器掛載到 Windows 上,然後在 RAID6 上運行驅動器。所有的這些 Linux 服務器都運行 Slackware。我很喜歡 Slackware 的簡潔。為了保證系統簡潔,我一般只安裝的需要的 package。比如 firewall 服務器上只有 Bash, Vim 和 Iptable。文件服務器上只有 Bash, Vim, Cryptsetup 和 Samba。開發服務器上有我開發需要的一切工具。
我在 Linux 上使用 Vim,在 Windows 上使用 gVim 和 Visual Studio。Windows 應用開發的時候,如果環境中沒有 IntelliSense,也很讓人抓狂。我有一個高度定制化的 Vim 並有很多插件,比如:
·surround.vim (quickly edit surrounding text)
·repeat.vim (repeat surround commands)
·matchit.vim (extend what % key matches)
·snipmate.vim (code snippets)
·nerd_tree.vim (explore filesystem from vim)
·a.vim (alternate C and H files)
·ragtag.vim (mappings for editing HTML)
·tabular.vim (aligning text)
·bufexplorer.vim (working with buffers)
·python.vim (better python support)
·exchange.vim (exchange text quickly)
·abolish.vim (substitute words)
·speeddating.vim (increment dates)
Windows 下的工具:
·Total Commander (file manager)
·Visual Studi(can’t beat IntelliSense)
·SQLyog (GUI manager for MySQL databases)
·SQLiteSpy (GUI manager for SQLite databases)
·pgAdmin (GUI manager for Postrgres databases)
·WinSCP and SecureFX (secure FTP clients)
·Putty and SecureCRT (SSH clients)
·KeePass (password manager)
·ClipX (clipboard manager)
·Launchy (program launcher)
·Locate32 (file indexer)
·allSnap (window manager)
·AutoHotkeys (automate tasks and programs)
·Virtual CloneDrive (mount disk images)
·IsoBuster (extract disk images)
·ImgBurn (image burner)
·Enounce MySpeed (speedup or slow down videos)
·Hex Workshop (hex editor)
·VMWare Workstation (virtual machines)
·Cygwin (unix tools)
·UltraMon (multi-screen support)
·Beyond Compare (diffing tool)
·Tclock2 (better clock)
·Fineprint (printer proxy)
·SumatraPDF (better PDF viewer)
·AviSynth (edit videos programmatically)
·ffmpeg (convert videos)
·VirtualDub (convert and edit videos)
·WinDirStat (disk space visualization)
·clink (better cmd.exe)
·IDA Pr(debugging)
·Photoshop
·Sysinternals tools
Linux 下的工具:
·samba (mounting Linux on Windows)
·tmux and screen (persistent shell sessions)
·all the standard UNIX utilities (awk, sed, grep, head, tail, uniq, sort, etc.)
·perl (rapid prototyping, quick hacks, one-liners)
·iptables and nftables (firewalling)
·htop (better top)
·mtr (better traceroute)
·multitail (tail multiple files in multiple windows)
·nc (netcat, TCP/IP swiss army knife)
·iftop (bandwidth monitor)
·ack (better grep)
·ipcalc (network address calculator)
·pv (pipe viewer – UNIX pipe progress bar)
·rsync (backups)
·ncdu (disk space visualization)
·curl (http client)
·nmap (network scanner)
·tcpdump and wireshark (for network debugging)
·sysdig (strace + lsof + tcpdump combined)
·youtube-dl (downloading all online videos)
我坐著 Coding。我從來沒有試過站著或者走著寫程式,我覺得那樣太怪了。當我在工作狀態時,我收聽電台 di.fm。如果不在,音樂往往讓人分心。我已經用微軟的 Natural 鍵盤寫了十年程式了,除了年老色衰之外,它現在依然工作很好。
在我試著理解某些東西的時候,我會做很多的筆記。當我遇到復雜問題的時候,我一般將它們分解成小的易於解決的子問題,列在 ToDlist 上,一個一個解決。
實際上我的 ToDlist 分成三種:長期的(未來 1 到 2 年)、中期的(未來幾個月)和短期的。
Fog Creek:關於開發,最喜歡的書或者資源?
Peteris:我很喜歡電腦和科學書籍。每幾個月我就花一天時間研究一下最新的出版物並買上一些最感興趣的。下面我列出我最喜歡的 5 本書。
1. 《The New Turing Omnibus》
對電腦感興趣的人必讀。這本書共有 66 篇小文章,全都是最重要和最有趣的電腦相關知識,比如壓縮、圖靈機、正則方法和神經網絡等。這本書的寫作風格休閒,基本不含有數學相關的知識。一直是我的最愛。
2. 《The Little Book of Semaphores》
這本書告訴我們如何去思考多線程執行的問題以及如何解決同步問題。我強烈推薦這本書,如果你是自學的話更加推薦。
這本書會引導讀者一步一步去解決一系列的經典和非經典同步問題。解決問題的過程很有樂趣,我已經將它推薦給了我身邊的每一個人。
3. 《編程珠璣》和《編程珠璣(續)》
經典程式設計書籍 。Jon Bentley 知道如何清楚、熱情地寫算法問題。這本書一直很好,它會教你如何分析問題、將問題拆開成小問題,以及高效實現解決方法。如果你讀了這兩本書,那麼你會通過 Google 面試的。(注:我們都知道這是遠遠不夠的:)。)
4. 《The Little Schemer》
這本書會以一種很有趣的方式教你一些關於 LISP 的知識。這本書就像你和作者之間關於數百個 Scheme 程式設計問題的對話,它會教學會遞歸思考。它會教你思考並鍛煉你的思維能力。最有趣的 coding 書籍之一。
5. 《The Elements of Style | 風格的要素》和《The Elements of Programming Style | 編程風格》
嚴格意義上來說,《The elements of Style》並不是完全的開發或者 coding 書籍 ,而是一本關於寫作的書籍。為了成為一個牛逼的工程師,你需要和別人清楚的交流,寫作技巧是必要的。這本書一共 100 頁,你一個晚上就可以讀完。
《The Elements of Programming Style | 編程風格》要一本經典的程式設計書籍 。作者是 Kernighan,寫作風格深受到前一本書影響。這本書有點古老,但是基本所有的東西依然很有用。這本書共有 70 條 coding 規則,比如清晰書寫。
Fog Creek:你目前使用的技術能分享一下嗎?
Peteris:我是 Visual Studio 的死粉,剛下載了 Visual Studi2015 Preview 版本並且開始使用了。我還在虛擬機中裝了 Windows 10。由於我現在做多瀏覽器的測試工作,對微軟的新瀏覽器 Spartan 還是很期待的。
Google 剛開源了 Kythe,這是一個很好的學習機會。我去年就從一個 Googler 朋友那兒聽說了,早已經等不及了。這個週末我打算在 Linux 內核源代碼上試試 Kythe。
如果我有更多時間,我想把 Oculus Rift 和運動平台結合起來做一些虛擬現實的小東東。
Fog Creek:不 Coding 的時候喜歡做些什麼?
Peteris:我喜歡鍛煉身體,做一些田徑運動。我發現運動比咖啡更有用。我做 10 組短跑之後,在接下來 10 到 12 個小時裡都精力充沛,可以整個晚上 coding 像個怪物一樣。我也喜歡田徑比賽,特別是 400 米和 800 米。
Fog Creek:對於年輕的自己,你有什麼建議?
Peteris: 4 條建議:
1. 快速、高效解決問題,並繼續
2. 不要做沒價值的事情
3. 更早開始寫技術部落格
4. 版本迭代盡量早盡量快