為什么借助開源學習是最有效的?

導讀:盛大創新院高級研究員莊表偉近日編撰系列文章《借助開源項目,學習軟件開發》活動,引起業界關注。莊表偉認為,通過編撰這些文章,希望更多開發者能夠借助開源項目提高開發效率,減少重復勞動并從開源軟件中受惠。同時,他呼吁更多開發者參與此項活動,通過分享過來人的經驗教訓,幫助那些初次接觸開源的朋友。本文《為什么借助開源學習是最有效的》為系列文章之一,作者為葩客。文章指明學習要有明確性和積極性,開源精神內涵會使得學習更加有意義,而且學習本身也是開放的、更是開源的。

為什么要學習

學習有不同的目的:有人學習是因為興趣或者好奇;有人是為了增加生存的技術,把學作為改變工作、生活狀態的手段;當然,也有些人,學習是為了思想的交流,與周圍的人交流,與遠方的朋友交流,與過世的先哲交流。

靜下心來,仔細想想自己為什么要學習很重要。如果學習的目的不明確,學習就缺少源動力。這種思考在學習之初是需要的,在學習過程中也同樣是需要的。因為隨著學習的進行,個人對學習的態度、感受也會發生變化,學習的目的也需要及時的調整。

一個善于學習的人,是能充分利用各種學習機會進行學習實踐的人。有人七十多歲開始學畫油畫,也有人利用每天坐地鐵的時間學會一門外語,甚至還有些人把微博、網絡公開課作為學習的重要工具。只要學習目的明確了,學習就變成了一件有意義的事,因而才可能持久。

生物進化的幾百萬年,才使人類有了學習的能力,這種能力是區別與一般動物的。人類的學習是一個覺醒的過程,近百年人類文明高速演進,特別是互聯網的出現,使學習的從原始的環境適應演進為主動的創造并迅速轉為社會向上的推動力,或者破壞力。

源代碼是最好的營養

知識是多樣的,學習的目的不同,學的內容也不同。計算機的出現,使學的工具發生了根本的變化,而程序的靈魂,因此學習編程不僅僅是軟件工程師的事,它應該成為每個社會成員的一個基本的技能。正如語言是人類交流的基本技術,編程是人與機器交流的基本技能。學會編程,可以使機器按照你的意志運行,使每個人按自己的興趣整合信息資源,以利于更有效的學習。

軟件是近百年發展最快的技術之一,特別是隨著智能手機與平板電腦的普及,軟件技術更是滲透到了我們生活的各個方面。學會編程,并不意味著要去要去建一個復雜的系統。其實寫的個報表的計算公式或者做一個小動畫可以是一種編程的體驗。

軟件編程需要的基本環境就是一臺電腦,當然如果有互聯網的接入則更利于交流與技術信息的查詢。

使用Linux最大的好處是它本身就是一個軟件開發的開放平臺,你可以方便地下載各種開發工具,比如gnu c/c++,python或者其它。你應該學會使用apt-get, 這是一個Ubuntu下強大的軟件包管理工具。

在網站kernel.org上,有各種版本的內核源代碼,如果你想從根本上學習操作系統,也可以通過LFS快速地學習內核構建的過程。

源代碼開放的最大的好處是我們不需要重復設計和制造輪子。每個人都可以在軟件巨人的臂膀上構造自已的夢想代碼天堂。

無論從美國的facebook 谷歌 蘋果還是中國的華為成功的經驗中我們可以看到,開源的代碼以及開源的項目是當前眾多商業公司的技術立足之根本。開源已經造就了無數商業神話。我們大部分人只知道蘋果的酷,但很少有人在蘋果的版權說明中,看有關開源項目的羅列。

微軟的比爾蓋茨以及蘋果的喬布斯大家耳熟能詳,但對軟件產業最有影響力的人應該是出生于芬蘭的李紐斯(Linus Torvalds)。谷歌正是采用linux為內核,才使android幾乎在一夜之間串紅并重創諾基亞。而李紐斯在軟件界的影響力,堪比羅馬教皇。

有一部電影叫源代碼,也許對代碼開源化的一個隱喻。如果你讀到了關鍵的源代碼,也許你真的可以改寫歷史。當然,李紐斯說得很好,開源應該是快樂的,“Just for fun”。我們不需要太多的使命感與焦慮,改變世界也許只是一個順帶的結果。

方向不對,努力白費

在中國,如果你想面朝大海,應該是一路向東。當然向西也是可以的,不過要多費些周折。技術的更新非常快,但如果把握了大勢往往可以事半功倍。

舉一個實際的例子:十多年前,PHP是一個相對冷門的編程工具。在很多場合,很多人都不好意思說自已是搞PHP開發的。而如今,PHP已經成為主流的開發工具,很多搞.net處于生計的考慮,不得不轉向Java,或者PHP。

選擇開發工具只是軟件工匠們需要認真定奪的一個方面。其它如系統構架、測試方法、團隊管理、決策者眼光等等,更是關系每個程序員未來的諸多要素。

開源的精神內涵使學習變得更加有意義

在商業極度發展的今天,人們對物質的無限追求使很多人忘記了生活的本質。人被異化為物的附屬品,價值被虛擬的概念、標簽重置。

互聯網的出現,促進了人類相互之間的溝通。軟件高速更新發展的自然需求和因團隊協作所帶來的有效性、高效性造就了一個全新的文化:開源文化。軟件便與分享、開源代碼便于擴展的特質,使以Linux操作系統為代表的開源項目迅速崛起。大批的軟件工程師不僅通過開源項目找到的精神寄托、同道中人,而且還找到了與商業社會有效融合的模式與渠道,解決了事業與興趣結合問題,實現了生活、學習、工作甚至社會公益有完美統一。

在開源精神的感召下,學習變得更加積極主動。在分享、貢獻的核心價值體系下,人們能充分體會人心溫情的另一面。與傳統商業社會利用信息不對稱在交易中圖謀利益最大化不同,開源世界里的人們在創造、協作的過程中完成一個又一個不斷成長的軟件系統,這些系統有些使整個社會運行更有效、當然也有的在損壞甚至危及社會的安全。人類精神世界的兩面性在開源世界里更直接、更激烈地表現出來,正在影響著現實的諸多方面。

開源社區是最好的學校

軟件是構建虛擬世界的基礎,而開源社區則是軟件新技術產生、發展的主要場所,因而也是學習軟件技術最好的學校。

當前最大的網絡社區應該算游戲社區,這個社區的人大多是在消費社會資源。而開源社區則分化成兩個陣營:一個是以創新、創造為目地的,創造社會價值;另一個則是以破壞、非法取得信息資源為目地,損毀社會資源與體系。

在開源社區里,有大量熱心的程序員他們樂于分享自已對技術的理解、心得,他們通過各自的行動擴大自已的影響力,在協助別人的同時不斷加深自己對技術的理解程度和實踐能力。而新的社區加入者也可以在與社區互動的過程中找到自已技術與精社的導師(Mentor), 正如電影黑客帝國(Matrix)中尼歐(Neo)遇到摩菲(Morpheus)。

如果說我們生話的世界是上帝創造的,那么我們對面的這個數字的世界則是由程序員創造的。數字世界與現實世界不斷地融合,使現實世界與虛擬世界的邊界變得越來越模糊。在學校課堂里,陳舊的教學方法、過時的教學內容、有限的學習資源是無法與互聯網上豐富的開源社區資源相比的。社區內部團隊協作的自發性、自主性、可靠性也極大地提高了社區成員學習的效率,并使個體超常規成長成為可能。

在媒體上經常看到十、三四歲的少年創造一個個軟件項目的奇跡,殊不知這與國外成熟的開源社區發展息息相關。如果國內開源社區漸漸發展起來了,我們有理由相信在不久的將來,我們的周圍會出現眾多皮爾斯·富里曼(Pierce Freeman)這樣的天才少年。

移動互聯網時代,學習是開放的更是開源的

隨著智能手機、平板電腦的普及,學校以及教室的功能將被弱化,人們可以在各種公共場所組成形式多樣的學習社區。而開源社區提供多種專業技術人員以及業余愛好者面對面交流的機會。有的地方還出現了包括軟件、硬件開源的創客空間。大家在無線網絡環境下快速組成學習社區,分享交流最新的技術,互相協助解決各種技術問題。發現的志同道合的朋友,有的技術團隊在天使投資者的支持下,在學習的過程中還可以建立創業團隊。

在企業的內部,根據企業的發展戰略,也可以形成企業內部的開源社區,通過開源項目整合企業內部與外部的技術資源。開放的心態使企業以開源文化的發展為契機引領技術的潮流。

原文鏈接:teamhost.org


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

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

相關文章

redux middleware 源碼分析

原文鏈接 middleware 的由來 在業務中需要打印每一個 action 信息來調試,又或者希望 dispatch 或 reducer 擁有異步請求的功能。面對這些場景時,一個個修改 dispatch 或 reducer 代碼有些乏力,我們需要一個可組合的、自由增減的插件機制&…

Flsak愛家租房--訂單(獲取用戶訂單、用戶評論)

文章目錄0.頁面效果1.思路總結2.后端代碼3.前端js4.前端html0.頁面效果 1.思路總結 1)用戶點擊“我的訂單”,js向后端獲取數據,并加載在前端的模板中; 2)用戶點擊相應訂單的“去支付”按鈕,js向引導用戶…

【SCOI2005】【BZOJ1087】互不侵犯King(狀壓dp)

problem 在NN的棋盤里面放K個國王每個國王會攻擊它周圍的一圈共8個格子使他們互不攻擊&#xff0c;共有多少種擺放方案N < 9solution 用01串表示某一行放置的情況 首先枚舉當前做到第幾行&#xff0c;以及當前一共放了幾顆棋子。于是狀態f[i][j][k]表示到第i行&#xff0c;一…

軟件工程形式化技術簡介

形式化技術在軟件工程中有效的提高了開發的效率、改進了軟件開發的質量、減少了開發費用。形式化的技術容易在軟件的規約上取得一致性&#xff0c;它屬于一種非常有效的交流方式。 (一)非形式化的缺點 用自然語言書寫的系統規格說明書&#xff0c;可能存在矛盾、二義性、含糊性…

華為榮耀筆記本linux怎么下載軟件,華為magic book筆記本怎么下載軟件

大家好&#xff0c;我是時間財富網智能客服時間君&#xff0c;上述問題將由我為大家進行解答。華為magic book筆記本下載軟件的方法如下&#xff1a;1、首先&#xff0c;點擊桌面開始圖標&#xff0c;找到應用商店&#xff0c;并點擊。2、進入應用商店&#xff0c;點擊搜索欄&a…

國內外軟件開發上的差距與分析

提高自己&#xff0c;迎接好的未來。 在開始任何其他文字之前&#xff0c;首先有必要正視一個根本現實&#xff1a;國內外軟件開發的水平是有差距的。 這一結論的最直接證據是每一輪新技術的發起者基本上都是國外的人或公司&#xff1a; 從方法論&#xff08;CMMI&#xff0…

Flask愛家租房--訂單(房東接單、拒單)

文章目錄0.效果展示1.效果展示2.后端接口3.前端js4.前端html0.效果展示 1.效果展示 1&#xff09;當房東點擊“客戶訂單”&#xff0c;js向后端接口get_user_orders()獲取數據&#xff0c;訂單頁面開始加載&#xff1b; 2&#xff09;當房東確定接單時&#xff0c;js會向后端…

WebView性能優化--獨立進程

Android允許一個app同時存在多個進程&#xff0c;可以根據需要把不同的模塊放到不同進程中處理。 一、WebView獨立進程的好處 1.有效增大App的運存&#xff0c;減少由webview引起的內存泄露對主進程內存的占用。 2.避免WebView的Crash影響App主進程的運行。 3.擁有對WebView獨立…

linux修改python默認版本

linux修改python默認版本 update-alternatives --config pythonposted on 2018-05-24 22:42 psycheman 閱讀(...) 評論(...) 編輯 收藏 轉載于:https://www.cnblogs.com/psycheman/p/9085576.html

什么是有窮狀態機

有窮狀態機的作用是描述對象在它的生命周期內所經歷狀態序列&#xff0c;以及如何響應來自外界的事件。有窮狀態機首先包含一個有限狀態的集合&#xff0c;還包含了從一個狀態到另外一個狀態的轉換。 有窮自動機看上去就像是一個有向圖&#xff0c;其中狀態是圖的節點&#xf…

linux設置開機自啟 etc rt.d,Linux下禁止服務開機自啟動

一、 Upstart是兼容System V的配置方式的&#xff0c;但主要的服務配置放在 /etc/init 下&#xff0c;這也就是為什么修改 /etc/rc${runlevel}.d/ (Ubuntu默認啟動runlevel2&#xff0c;也就是/etc/rc2.d/)下的MySQL啟動配置并不能真正起到禁止MySQL自啟動的原因(比如使用命令 …

開發經驗和屁股的關系

昨晚為CSDN俱樂部的同學們做了一個講座《微博開發、云平臺及一個微博應用開發的簡單方案》。已經用屏幕錄相機記錄下來了&#xff0c;不想講完一邊和同學聊著&#xff0c;一邊收拾&#xff0c;直接關機&#xff0c;教室中帶有保護卡的電腦自然不給面子&#xff0c;錄相文件就此…

ZCARD key

返回key的有序集元素個數。 ##返回值 integer-reply: key存在的時候&#xff0c;返回有序集的元素個數&#xff0c;否則返回0。 ##例子 redis> ZADD myzset 1 "one" (integer) 1 redis> ZADD myzset 2 "two" (integer) 1 redis> ZCARD myzset (in…

Petri網

并發系統中遇到的一個主要問題是定時問題。這個問題可以表現為多種形式&#xff0c;如同步問題、競爭條件以及死鎖問題。用于確定系統中隱含的定時問題的一種有效技術是Petri網&#xff0c;這種技術的一個很大的優點是它也可以用于設計中。Petri網是由CarlAdam Petri發明的。在…

Flask愛家租房--房屋管理(獲取房屋詳情)

文章目錄0.效果展示1.思路總結2.后端接口3.前端js4.前端html0.效果展示 1.思路總結 1&#xff09;房屋詳情頁面開始加載時&#xff0c;detail.js首先通過定義的函數&#xff08;重點&#xff1a;document.location.search&#xff09;&#xff0c;截取需要向后端取得詳情頁面的…

MAC 安裝 pygraphviz 找不到頭文件

networkx的有向圖只能通過箭頭來區別兩點之間的兩條邊&#xff0c;但是我在復現snake論文的時候&#xff0c;需要繪制兩個交叉口之間的兩條不同方向的路段&#xff0c;最后選擇了pygraphviz 直接通過anaconda打開對應終端&#xff0c;pip install pygraphviz&#xff0c;一直報…

linux ntp連接失敗,linux ntp服務器連接異常

彈性云服務器 ECS彈性云服務器(Elastic Cloud Server)是一種可隨時自助獲取、可彈性伸縮的云服務器&#xff0c;幫助用戶打造可靠、安全、靈活、高效的應用環境&#xff0c;確保服務持久穩定運行&#xff0c;提升運維效率三年低至5折&#xff0c;多種配置可選了解詳情認證鑒權|…

如此如此,怎能師夷長技以制夷!

以一個愛國的軟件設計者的角度來看這樣一個weibo,大概的內容就是&#xff1a;北京南站的4SQ上有個老外留言吐槽&#xff1a;“沒有中國身份證根本就沒法在自動售票機上買票&#xff0c;那他媽的他們弄個英文界面干屁啊&#xff01;” 出于行業的敏感性&#xff0c;我感到很有意…

基于supermap webgl三維樓層顯隱控制思路

supermap 9D 產品中&#xff0c;可以先獲取到模型的simd值&#xff0c;再調用setOnlyObjsVisible方法控制模型中單個物體的顯示和隱藏。 var smid "94"; //樓層的smid值&#xff0c;多個樓層&#xff0c;則用數組的方式 var ids []; var layers viewer.scene.la…

#python計算結果百位500向下取整,(0-499取000,500-999取500)

!/usr/bin/env python coding:utf-8 計算結果百位500向下取整&#xff0c;&#xff08;0-499取000&#xff0c;500-999取500) import math calc_Amount float(input("輸入所有可需金額&#xff1a;")) act_Amount calc_Amount if calc_Amount > 0: value2 calc…