數學是成就卓越開發人員的必備技能

編者按:原文作者Alan Skorkin是一名軟件開發人員,他在博客中分享對軟件開發相關的心得,其中有很多優秀的文章,本文就是其中一篇,作者認為:成為優秀的開發人員,可以沒有數學技能,但成為卓越的開發人員,不能沒有

不久之前,我開始思索數學。你也知道,到目前為止,我編寫軟件也有幾年了。老實說,在我的工作當中,我還沒有發現有關數學的需求。我要學習和掌握許多新東西,包括語言、框架、工具、流程、溝通技巧和可以用來做你想到的任何東西的庫。在我學的新東西中,數學并沒有幫助。當然了,這不足為奇,我所做的工作,大部分都是CRUD類型(編注:CRUD是Create、Read、Update和Delete的首字母縮寫)。在互聯網時代,這也是我們多數開發人員所做的大部分工作。如果你做顧問,你主要是在做網站;你在大公司上班,你主要是在做網站;你做自由職業者,你主要是在做網站。我很清楚我是在總結,但請忍耐一下,我跑偏了。

最后你對此有些厭倦了,我也如此。別誤會我,這可以是項有趣并有挑戰性的工作,有機會解決問題,并和有趣的人一起互動,在工作時間做這個,我高興。但在我個人時間中搭建更多的網站,這種想法已經稍微失去其光澤,于是你開始尋找一些更加有趣/酷/好玩的事情,我再一次地也如此。(所以,)有些人轉移到前臺和圖像技術,比如視覺反饋就比較誘人。但我并不是其中一員(雖然我和別人一樣都喜愛前臺,但它真的不能讓我興奮。)這就是當我遇到一些搜索相關的問題時,我為什么決定深入挖掘的原因了。這把我帶回到故事的一開始,因為一旦我抓到第一把充滿搜索的鐵鏟,一旦我“撞到”數學時,我才真正意識到,我的技能惡化的程度。數學并不像騎自行車,長期不用就會忘記。

拓展視野

多對搜索的一些了解,讓我接觸到各種有趣的軟件和計算機科學相關的事情和問題(包括機器學習、自然語言處理、算法分析等)。現在,在我接觸的各方面,我都看到了數學,所以我更加強烈地感覺到自己技能缺乏。我已經意識到,如果你想利用計算機做又酷又有趣的事,你需要達到一個像樣的數學能力水平。除了上面說的三個,還有一些,如:密碼學、游戲人工智能、壓縮算法、遺傳算法、3D圖形算法等。在理解之后,如果你想要編寫我們正討論的那些庫和工具,而不是僅僅使用它們(即:做一個“消費者”,而不是“生產者”),那你需要數學(知識)來理解這些領域背后的你能應用的理論。即便如果你不想編寫任何庫,當你真正理解事情的原理,你在構建軟件時,它能給帶來更多的成就感,絕非僅僅把它們連起來,就希望它們去做任何它們應該能做的。

雖然大多數開發人員會告訴你,他們在工作中從來不需要數學(就像我前面說的 :) ),但是經過一番沉思后,我有了個想法(突發靈感):就是反馬斯洛的錘子理論。你知道這個吧,當你有一把錘子,你會把一切看成是釘子。(注:伯樂在線編譯的《每位開發人員都應銘記的10句編程諺語》中的第7條就是錘子理論。)這是一個隱喻,也就是說人們樂于使用自己鐘愛的工具,即便這并不是手中工作的最好工具。數學就是我們的一個相反的錘子。我們知道有這個錘子,但并不太子的如何使用。所以,當我們遇到問題,我們的錘子是解決問題的最佳工具時,我們卻從未認真考慮過它。對我祖父而言,螺絲刀夠用了;對我父親來說,也很好;對我來說,同樣如此。誰還需要錘子?數學的技巧在于,人們懼怕它,甚至大多數程序員,你認為我們不會怕,但我們確實怕。所以,我們把自己的話轉變為可以自我實現的預言。這并不是我在工作中不需要數學,這只是我真的不知道,即便我知道,我也不知道如何使用它。所以我并沒有使用它,當缺少某些東西時,如果你長期將就,不久后你甚至不會察覺它的缺失,所以對其需要更少了,這是自我實現的預言。

針對思索接近我們內心世界,這里有一些的“糧食”——學習新技術。作為一名協作世界的開發人員,你努力成為一名通才型的專才(如果你不知道我在說什么,可以看看這本書《The Passionate Programmer:Creating A Remarkable Career In Software Development》)。你盡力在多數事情上做的體面,并在有些事情上做的優秀。但是你擅長什么?一般來說,人們會選擇一兩個框架或一門語言,然后與之相伴,這樣是不錯。但是要看到,框架和較小范圍內的語言都有保質期。如果你要做一名Hibernate、Rails或Struts專家(使用struts的朋友現在真的應該擔憂一下了),當新框架取代當前的框架時,你在幾年內將不得不重新洗牌。所以,這也許是你真正的最好投資,但也可能不是。另一方面,數學是不會很快消逝的。在我們領域中所做的一切,都是建立在穩固的數學原理之上(算法和數據結構正是這樣的例證),所以用在數學上的時間絕不是浪費,這不可辯論。再重復一次,總結起來就是:要真正理解東西,而不是非死記硬背地使用。當涉及到計算機時,數學能有助你更深入地理解你所做的。事實上,正如Steve Yegge所言,作為程序員我們所做的事很像數學,只是我們甚至都沒有意識到這一點。

什么/誰造就了與眾不同?


(唐納德)

你不相信我?那請你想想:在我們的領域中,幾乎人人普遍尊敬的卓越程序員同樣也是大數學家。我是說像唐納德·克努斯、艾茲格·迪杰斯特拉、諾姆·喬姆斯基、彼得·諾維格(Google研究院總監)這一類人。但是這些家伙并非真正的開發人員,他們是計算機科學家,這能真正算數么?我再一次覺得,在我們寫出的純代碼行數能達到這些人所寫的十分之一之前,也許我們不應該再去討論這些問題了。當然,不當科學家,你也能獲得成功和名譽,大家都聽過加文·金(Gavin King,Hibernate創始人)或戴維·海涅梅艾爾·漢森(DHH,Ruby on Rails創始人)。這還挺真實的(是不是有很多人聽說過加文和戴維,雖然這還有待確認),但是“聽說過”和普遍尊敬是不同的,這種差別就如同創建一個框架,和在你的領域中為人類知識所做出的全部重大推動兩者之間的差別。(不要誤會我,我尊重加文和戴維,他們所做的事,遠遠超過我,但是這不能影響我所說的事實)。所有的這些相關么?我不知道,可能不相干,但在我們反省之后,我想無論如何要把它“扔掉”。

如今的世界正充滿著數據,每日都增加更多的數據。而在以前,我們在相對少量的數據下享受工作。我們今日編寫的軟件必須高效處理海量數據。甚至在協作世界,這也是愈加明顯的事實。這也就是說,你更不可能只“啟動東西”,就想看其如何運作,因為你要處理的數據量將困住你,除非你非常了解它。我的預測是:算法分析將對于 Lay Programmer 越來越重要,以前不僅如此,以后也更加如此。如果要成為一位體面的算法設計專家,需要什么?你猜到了,是一些數學技能。(編注:Lay Programmer是指那些不認為自己是程序員的程序員,詳情請見Martin Fowler的解釋。我暫未想到合適的簡短叫法,如果哪位朋友知道,請在評論中說明。)

所以,我該怎么辦呢?嗯,我已決定一點一點地建立或恢復我的數學技能,雖然還有大量的書要看,大量的代碼要寫,但我會盡力抽時間放在數學上,這就像鍛煉,時不常的鍛煉總聊勝于無(再次引用Steve Yegge的話)。說到數學,我袖中當然還藏有一張王牌,它對我有利,但很幸運,有這個博客,我們都會受益的。(我知道你好奇,一會告訴你 :) )。

你在5年內的規劃如何?


(極限水上滑板)

那么,數學對所有事都有利么?這事先很難說,我對我現在的處境十分滿意,或許你也如此,但這都和潛能有關系。如果你是協作世界的一名開發人員,你真的不需要數學。如果你樂于你的整個職業生涯是這樣的:在工作時間中做企業CRUD應用,或在閑暇時間滑翔跳傘或極限水上滑板(或其他各種時髦的極客運動),也分配較多時間在Spring、Hibernate、Visual Studio或其它東西上。(其實)那些特殊的職位并沒有真正限制你的潛力,你能變得極具價值,甚至可深入追求。但是如果你想為多樣化的職業生涯而奮斗,想要有能力嘗試幾乎所有涉及代碼的事,從信息檢索到Linux內核。總之,如果你想成為一個開發人員、程序員和計算機科學家的完美組合,你必須確保你的數學技能達到標準(哎,你還是可以去玩滑翔跳傘或極限水上滑板)。長話短說,如果你在數學方面有一定天賦,那在軟件開發領域中沒有向你關著的門,如果沒有,那一切都是CRUD型工作!


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

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

相關文章

Flask愛家租房--celery(總結)

0. celery整體邏輯圖 個人理解為:此處的客戶端client與以往定義的客戶端(前端)并不一樣,角色相當于以往的后端邏輯處理代碼,即發布任務的一方,只是相當于處理者worker而言是客戶端。 1.準備工作&#xff1…

linux端口514啟動,Linux查看端口使用狀態及啟動(示例代碼)

Netstat -tln 命令是Linux查看端口使用情況/etc/init.d/vsftp start 是用來啟動ftp端口~!看文件/etc/servicesnetstatLinux查看端口查看已經連接的服務端口(ESTABLISHED)netstat -aLinux查看端口查看所有的服務端口(LISTEN,ESTABLISHED)sudo netstat -ap…

window服務器開站點(不通用)

此文章為記錄自己的配置流程,其他人不通用 網站服務器:Windows server 2008 R2 (IIS6.1) Asp.net 數據庫服務器:Windows server 2008 R2 SQL Server 2008 R2 1.解析域名到服務器,如:www.test.com 2.登錄網站服務器&a…

【轉載】優秀文章轉載集合

Spring Spring Cache 注釋驅動的 Spring cache 緩存介紹使用 Spring 2.5 注釋驅動的 IoC 功能虛擬化 libvirt kvm 虛擬機上網 – Bridge橋接KVM詳解,太詳細太深入了,經典Tomcat Linux機器同時運行兩個tomcat點評:主要是那張圖片的配置 Nginx …

Flask愛家租房--celery(發送驗證短信)

0.配置文件 # coding:utf-8BROKER_URL "redis://127.0.0.1:6379/1" CELERY_RESULT_BACKEND redis://127.0.0.1:6379/21.啟動文件 # coding:utf-8from celery import Celery from ihome.tasks import config# 定義celery對象 celery_app Celery("ihome"…

理論與實踐:不要過度思考

你每天都在仔細翻閱Hacker News,驚奇于那些經過整理的創業傳奇、功效無比的最佳實踐理論、天才的技術解決方案,以及各種鏈接指向的大量的一站式的,極簡主義的,色彩柔和的網站。你參加過精益(Lean)創業研討會,讀過了《F…

linux我如何查看一個腳本的路徑,linux獲取shell腳本所在絕對路徑操作介紹

腳本名:a.sh位置:/tmp/whuang/study/java腳本內容:復制代碼代碼如下:#!/bin/shthis_dirpwddirname $0|grep "^/" >/dev/nullif [ $? -eq 0 ];thenthis_dirdirname $0elsedirname $0|grep "^/." >/dev/nullretval$…

Go編程技巧--io.Reader/Writer

Go原生的pkg中有一些核心的interface,其中io.Reader/Writer是比較常用的接口。很多原生的結構都圍繞這個系列的接口展開,在實際的開發過程中,你會發現通過這個接口可以在多種不同的io類型之間進行過渡和轉化。本文結合實際場景來總結一番。 總…

把base64轉為blob

let blob1 dataURItoBlob(this.img); 轉載于:https://www.cnblogs.com/miaSlady/p/9073550.html

Flask愛家租房--房屋管理(獲取房東發布的房源信息條目)

文章目錄0.效果展示1.重點總結2.后端代碼3.前端html4.前端js0.效果展示 1.重點總結 1)用戶點擊“我的房源”,頁面開始加載,此時myhouse.js限定只有完成實名認證的房東才可以查詢已有的房源信息,因此myhouse.js首先調用用戶認證的…

TCP如何利用不可靠的IP協議實現可靠傳輸

IP協議之所以是不可靠的是因為IP網絡存在沖突丟包及傳輸錯誤甚至被惡意篡改的情況;雖然IP協議是不可靠的,但其服務的上層協議為了規避這些不可靠的因素,有些協議就會自己設計機制從而保證自己傳輸的內容可靠;TCP就是其中之一&…

jsp通過include指令引入html亂碼的解決方法

本文轉自&#xff1a;https://blog.csdn.net/gnail_oug/article/details/51707061 在jsp中使用<%include file"in.html" %>導入html頁面時&#xff0c;如果html頁面里有中文&#xff0c;就會產生亂碼。檢查jsp文件和html文件的編碼&#xff0c;編碼一致&#x…

linux怎么刪干凈mysql,linux怎么干凈卸載mysql

1、查找以前是否裝有mysql命令&#xff1a;rpm -qa|grep -i mysql可以看到如下圖的所示&#xff1a;說明之前安裝了&#xff1a;MySQL-client-5.5.25a-1.rhel5MySQL-server-5.5.25a-1.rhel52、停止mysql服務、刪除之前安裝的mysql刪除命令&#xff1a;rpm -e –nodeps 包名# rp…

各大互聯網公司java開發面試常問問題

本人是做java開發的&#xff0c;這是我參加58&#xff0c;搜狐&#xff0c;搜狗&#xff0c;新浪微博&#xff0c;百度&#xff0c;騰訊文學&#xff0c;網易以及其他一些小的創業型公司的面試常被問的問題&#xff0c;當然有重復&#xff0c;弄清楚這些&#xff0c;相信面試會…

14種方法助你參與開源項目

導讀&#xff1a;每日[快訊精選]是由CSDN研發頻道推出的特色欄目&#xff0c;每一天我們將從國外技術媒體(例如Hacker News、Reddit...等等)中挑選出有價值的新聞簡訊&#xff0c;讓您在第一時間掌握業界主流的技術文摘&#xff0c;每天清晨為您獻上第一份技術早餐。 [1]Javac…

Flask愛家租房--房屋管理(獲取主頁幻燈片展示的房屋基本信息)

文章目錄0.效果展示1.重點總結2.后端代碼3.前端js4.前端html0.效果展示 1.重點總結 1&#xff09;當用戶訪問首頁時&#xff0c;開始加載頁面信息&#xff0c;此時index.js文件首先調用后端接口check_login()&#xff0c;判斷用戶是否登錄&#xff0c;未登錄則在右上角關聯注冊…

C#題目及答案(1)

1. 簡述 private、 protected、 public、 internal 修飾符的訪問權限。 答 . private : 私有成員, 在類的內部才可以訪問。 protected : 保護成員,該類內部和繼承類中可以訪問。 public : 公共成員,完全公開,沒有訪問限制。 internal: 在同一命名空間內可以訪問。 2 .列舉ASP.N…