非程序員適合學習哪些編程知識?

想有針對性地學習一些可以應用在工作和學習中的編程知識,請教大家哪些編程知識怎樣提升了工作和學習效率。


VBA


簡單的scrapy爬蟲,直接google到官網找用戶手冊,從安裝到例子都寫得清清楚楚,基本上不需要任何編程基礎。只看完例子部分就基本可以解決大部分小網站的數據抓取(幾個小時就可以看到例子那一章),實際操作發現不會做的再谷歌一下,一般stackoverflow上都會有人提過相關問題。

簡單掌握scrapy以後,一些小網站的數據就可以隨便抓了,以後獲取網站上的數據就更方便了!

然後再花2小時去w3c學一下sql查詢語句,以後數據查詢處理也可以方便很多啦!


--------放乾貨前先嘮叨一下-------

這裡我把「非程序員」定義為:

大學上過一門編程語言課,掌握了一門編程語言(基本是C?)最基本的語法但是寫不來複雜的演算法。

那麼你需要補充和完善的技能包有:

學一門新的語言(Python OR Java)+了解基本的面向對象編程的思想+收集一些現有的好用的工具包

-------再嘮叨一點---------

考慮到你的目標是利用編程知識提高工作學習生活的效率,那你做的事情基本要符合以下兩個特點:

1.能利用現成的工具就不自己發明創造

2.寫出來的代碼能在少量修改的情況下被反覆使用

然後我以JAVA舉例從三個方向說:

1.處理本地的文件和圖表

2.處理網路上的數據

3.一些炫酷的生活小技能

-------part 1 本地數據處理--------

場景描述1:

比如突然有一天,你心血來潮,要整理自己幾個月來美(can)輪(bu)美(ren)奐(du)的自拍,把他們用拍照當天的日期重命名方便自己回顧。當照片很少時當然可以手動改啦,可是如果你有幾百張自拍,PS : 這是病,得治( ˉ﹃ ˉ ),要處理,你可能就要藉助編程的力量啦~

Solution 1:

解決這個問題,你可能需要的技能包有,文件的讀寫+文件夾的遍歷+字元串的處理。具體的代碼就不貼啦,善用搜索引擎,關鍵詞就是你學的那門語言+上面兩個技能包。

場景描述2:

身為一個神聖的鏟屎官,你正在家裡愉快的鏟屎,忽然boss一個催命連環CALL打來讓你整理一下公司最近幾個月的各種神奇的表。

如果表格什麼的都在一個sheet里,你當然可以藉助excel輕鬆完成工作。但是假如這些報表來自不同的sheet甚至不同的文件,這時候你就需要一個趁手的工具啦。

Solution 2:

工具包 JAVA POI 閃亮登場。

這個工具提供API給Java程序對Microsoft Office格式文件進行讀和寫。下載好兩個JAR包,導入工程中就可以開始幹活啦。

漢子們七夕還愁不知道送女票什麼嗎?送她全套私人訂製的excel處理程序吧 (霧

-------part 2 網路數據處理-------

其實就是爬蟲啦。

這裡要推薦一個java下的強大的爬蟲框架,由黃億華老師創造的WebMagic 。

當然作為小白,這個大傢伙里很多東西我們都暫時用不上。所以,這裡有一個很酷的非maven工程版的例子。http://pan.baidu.com/s/1miLG12S

下載好後打開工程,打開example就可以開始幹活啦。哎呀,說起來好羞恥,身為一個CS的孩子,至今沒搞清楚maven是個什麼鬼。

為什麼選擇這個框架呢?因為,對大部分簡單的網頁來說,50行就可以寫!完!一!個!爬!蟲!50行呦,加上文件存取,html元素抽取,大概也就200多行~

接下里以一個例子說明一下其易用性:

比如我們現在要爬一個博客主的所有博文,並輸出到控制台

沒錯!上面這個圖短短這幾行就是你需要寫的全部代碼!所有的爬蟲這個example邏輯上其實和爬知乎也是一樣,加上一個模擬登陸你就可以愉快的爬知乎啦。484很酷。

然後讓我們來愉快地統計下寫完一個爬蟲你的技能包里又新增加了些什麼:

正則表達式工具+HTML基本的標籤和結構+HTML元素的抽取

------part 3 日常生(zhuang)活(bi)--------

哎呀,這個各種形形色色的小應用就多啦。簡單舉個例子:

鏈接在此:Python - Python 圖片轉字元畫

更多的玩法歡迎大家補充啦 n(*≧▽≦*)n

--------End---------

哎呀 怎麼辦 還想嘮叨幾句修鍊心法,我先去扒拉扒拉吃點飯。

--------一頓吃了半個月的飯------------

既然咱們只是把編程當成一樣工具來用,入門時就不應該像科班出身的人一樣先大量看書,而是,先動手。以JAVA+學寫爬蟲作為例子。

step1 : 網上找個在線教程或者找本入門書。看看紅線框出來的相關知識就行啦。我覺得,在題設的基礎上,半小時了解這麼些東西絕對是綽綽有餘了。

step 2: 找一份相關的具體代碼開始讀。例如上面那個爬蟲的代碼。像這種庫,一般都會有比較完善的文檔,照著讀就好了。遇到不懂的語法或者知識點就google或者百度。然後時不時對照教程再加深理解。這樣讀完一遍基本語言和實際應用基本就都入門了。然後就可以開始做一些個性化的設計了。小結 : 整個學習過程中,最考驗人的不是學習能力,其實是檢索信息的能力--是否能夠準確地定位問題然後過濾並篩選出需要的答案?

其實編程真的是項很簡單的技能啦,也許再過個5年10年,programming已經像英語一樣是一項人人都掌握了的技能啦~~

抽出一個周末給自己點亮一顆新的技能樹吧~~~


非程序員與程序員最大的區別在於

  • 不需要面對一些純粹的工程問題,例如測試性、代碼復用、系統架構、性能分析
  • 不與同事相互進行代碼審核、design審核等"代碼社交"行為
  • 不需要面對一些團隊協同問題,例如如何把一個系統break down成一些小模塊?不同工程師的模塊之間如何整合?不同team之間如何協調

以建築為喻,非程序員是一個人搭一個小房子,程序員是一堆人造一個大樓。

所以呢,題主沒必要一開始就去接觸蓋大樓的理念如:設計模式、面向對象編程。

沒必要去學一些很heavy的蓋大樓的工具:Java/Scala/C++/XXX-Framework。

如非使用,沒必要去學一些特殊建築的知識:PHP/JavaScript/NodeJs之於網頁編程,R/Matlab之於統計優化。

根據自己的主營業務,來有針對性地學習一些容易上手(易安裝,交互性好,文檔易讀,代碼量少而更能強,非程序員用戶眾多)的工具來「提升工作和學習效率」。如果,不以實際工作為導向,而是寬泛地學習編程工具,對於程序員都不是易事,不用則廢嘛~

提供我身邊非程序員同事的情況:

一個team的Phd同事們負責研究優化問題,有時也寫簡單的產品原型來驗證結果。他們使用較多的是R, Python, Matlab,以及一點點shell來粘合幾個不同語言的腳本。

有一個team的同事負責數據分析,他們做的最多的就是用Excel來做一些簡單的建模,偶爾使用VBA來鏈接資料庫。

有一些產品經理負責建立一些業務指標,他們大量使用SQL寫查詢語句。


我大學學的是資勘(能源),現在也不是程序員!

1. 大學畢設,老師給的思路是用國外某個成熟軟體,我在通讀軟體文檔後,發現其只能做二維數據。肯定無法實現預期目標,於是不顧老師反對,自己邊查閱相關數學原理,邊學MatLab,最後搞出個程序迭代求解微積分方程組,順利計算出五百多個百萬年來的歷史三維數據,然後老師派了個研究生來跟我學。

2. 之前的工作經常要和Excel打交道,每個月初要做物資需求計劃。在我之前,即使不管其他事,專心搞其中某個工作,也要忙上5~7天。然後我用VBA寫了個程序,在忙得團團轉的情況下,也只需要2天就可以搞定。也由於這件事兒,我對計算機萌發了興趣。然後相繼使用VBA寫了其他很多小程序,工作效率提升的不是一點半點。

3. 單位某個軟體有嚴重缺陷,但是領導不想再付錢了,導致在該軟體上做完某項工作還要用Excel記錄一遍,工作量非常大,當大家都同時操作的時候,還需要排隊等候。我研究了這個軟體後,發現其有一個關鍵的展示界面是讀取文件夾下的某一個HTML文件、然後再在其中插入table來顯示的。於是我編輯了該HTML文件,在其中添加了一個按鈕和JavaScript腳本,每次點擊的時候,都會動態創建一個form,把相關信息提交到我架設的伺服器。於是部門同事再也不用手工記錄這方面的賬了。然後我對Web技術有了興趣。

4. 搞Web聽人傳(忽)說(悠),Python很牛逼,於是我對Python起了興趣。上一個工作經常要開局結算意見,格式比較單一,數據都是來自Excel,於是我用Python要讀取Excel,自動批量生成Word版的結算意見。

5. 後來發現用Python寫後端的人實在是少數,我就挑了最好的語言PHP來研究。單位有一次搞了個啥狗屁蓮花衛士,廉潔居然還是靠投票來評選?媽的智障。然後我們部門領導找到我,問我能不能刷屏,我一看那個投票設定,不限制IP,只要摧毀Session就可以重新投票。於是用PHP寫了個腳本,一個中午,把部門領導刷到了五百多票。然後隔了沒幾天,紀委幹事找到我,問是不是我乾的,我說:怎麼可能?對了,廉潔排名是靠投票選出來的嗎?

6. 後來聽說Java很牛逼啊,廢話不多開始擼。然後擼了一個綜合報警查詢程序,自動生成報表。

7. 後來單位領導為了省錢,網站不給運維單位搞了,讓我改版和維護。聽說每年有錢給我個人。我一看,是http://ASP.NET Web Form寫的。然後又擼起了C#。用React重構了很多,首頁的響應時間從2.3秒降到了0.82秒左右(緩存後)。現在那個大boss調走了,媽的我不知道跟隨要錢了。

8.
女朋友以前單位的boss是變態,某次要求每個員工要搞到400還是200個其他同行的聯繫方式(具體數目忘了)。然後他們不知道從哪搞來一堆快遞單號,
居然要用快遞單號一個個查,我那個心疼我女朋友啊!然後用Java寫了個程序,自動查,查著查著被順豐網禁止訪問了……然後調整了策略,女友就輕鬆愉快完成了任務。

9. 至於現在,我在學Node.js,以前受大家評價影響瞧不上JavaScript,現在咋看咋順眼。你問我有啥用?嗯,多了去了,比如大家熱衷的爬取數據——我用 selenium-webdriver 去抓房價然後存入資料庫,簡單暴力,比Python版、Java版的舒坦多了(但是比PHP的behat還遜色一點)。至於效果,反正現在我再也不相信新浪財經推送的房價方面的新聞了,都他媽是套路啊!

編程幫我節省了大量時間,我用節省下來的時間學編程不是很好嘛!你問我幹嘛學這麼雜?關鍵是法律禁止我多娶老婆但是沒禁止我多學一門編程語言啊,哪個順手搞哪個。哪個最有用?搞工程計算MatLab最順手,搞Excel當然VBA最順手,擼網頁以前是絕對PHP最順手,現在覺得JavaScript最方便。然後那個Java,我覺得我寫著寫著就情不自禁的搞出一大堆介面啊怎麼破?


Python,因為可以用的輪子很多,而且也不難用。


Excel


推薦閱讀:

怎麼學C語言?
零基礎如何自學編程成為一名程序員,有哪些書推薦?
35歲,女,目前沒有明確目的,從零開始學編程會不會浪費?

TAG:編程 | 面向對象編程 | 編程學習 | 編程入門 | 自學編程 |