挑選合適自己的一門編程語言

2019獨角獸企業重金招聘Python工程師標準>>> hot3.png

peixun.jpg

導讀想學編程的原因有很多,你也許是想要做一個程序,又或者你只是想投身于這個行業,所以,在選擇你的第一門編程語言之前,問問你自己:你想要在哪里運行程序?你想要程序來完成什么工作?

想學編程的原因有很多,你也許是想要做一個程序,又或者你只是想投身于這個行業,所以,在選擇你的第一門編程語言之前,問問你自己:你想要在哪里運行程序?你想要程序來完成什么工作?

挑選合適自己的一門編程語言挑選合適自己的一門編程語言

你學習編程的原因將會決定你的第一門編程語言的選擇。

在這篇文章里,我會交替使用“編碼”code、“編程”program、“開發”develop?等動詞,“代碼”code、“程序”program、“應用程序”application、“應用”app等名詞。這是考慮到了你可能聽過的語言用法。

了解你的設備

在你編程語言的選擇上,你的程序將運行在何處是個決定性因素。

桌面應用是運行在臺式機或者筆記本電腦上的傳統軟件程序。這樣你編寫的代碼在同一時間內只能在一臺電腦上運行。移動應用,也就是我們所熟知的“app”,運行在使用 IOS 、Android 或者其他操作系統的移動設備上。網頁應用是功能像應用的網頁。

按互聯網的 客戶-服務器(C/S)架構分,網頁開發者經常被分為兩類:

  • 前端開發,就是編寫運行在瀏覽器里面的代碼。這是個面對用戶的部分,或者說是程序的前臉。有時候被稱為“客戶端編程”,因為瀏覽器是網站的客戶-服務器架構的客戶端部分。瀏覽器會運行在你本地的電腦或者設備上。
  • 后臺開發,也就是大家所熟知的“服務器端開發”,編寫的代碼運行在你無法實際接觸的服務器上。

創造什么

編程是一門廣泛的學科,能應用在不同的領域。常見的應用有:

  • 數據科學
  • 網頁開發
  • 游戲開發,以及
  • 不同類型的工作自動化

現在我們已經討論了為什么你要編程,你要程序運行在哪里,讓我們看一下兩門對于新手來說不錯的編程語言吧。

Python

Python 是對于第一次編程的人來說是最為流行的編程語言之一,而且這不是巧合。Python 是一門通用的編程語言。這意味著它能應用在廣泛的編程任務上。幾乎沒有你不能用 Python 完成的工作。這一點使得很多新手能在實際中應用這門編程語言。另外, Python 有兩個重要的設計特征,使得其對于新手更友好:清晰、類似于英語的語法,和強調代碼的可讀性。

從本質上講,一門編程語言的語法就是你所輸入的能讓這編程語言執行的內容。這包括單詞,特殊字符(例如?;、$、%或者{},空格或者以上任意的組合。Python 盡可能地使用英語,不像其他編程語言那樣經常使用標點符號或者特殊的字符。所以,Python 閱讀起來更自然、更像是人類語言。這一點幫助新的編程人員可以聚焦于解決問題,而能花費更少的時間糾結于語言自身的特性上。

清晰語法的同時注重于可讀性。在編寫代碼的時候,你所創造的代碼的邏輯“塊”,就是一些為了相關聯目標而共同工作的代碼。在許多編程語言里,這些塊用特殊字符所標記(或限定)。它們或許被{}或者其他字符所包住。塊分割字符和你寫代碼的能力,這兩者不管怎么結合起來都會降低可讀性。讓我們來看一個例子。

這有個被稱為fun的簡短函數。它要求輸入一個數字,x就是它的輸入。如果x等于0,它將會運行另一個被稱為no_fun的函數(這函數做了些很無趣的事情)。新函數不需要輸入。反之,簡短函數將會運行一個使用輸入x?的名為?big_fun?的函數。

這個函數用 C 語言 將會是這樣寫的:

void fun(int x)
{if (x == 0) {no_fun();} else {big_fun(x);}
}

或者,像是這樣:

void fun(int x) { if (x == 0) {no_fun(); } else {big_fun(x); }}

功能上兩者等價,而且都能運行。{}?和;?告訴我們哪里是代碼塊的不同部分。然而,第一個對于人們來說明顯更容易閱讀。相比之下完成相同功能的 Python 是這樣的:

def fun(x):if x == 0:no_fun()else:big_fun(x)

在這里,只有一個選擇。如果代碼不是這樣排列的,它將無法工作。如果你編寫了可以工作的代碼,你就有了可閱讀的代碼。同樣也留意一下兩者在語法上的差異。不同的是def,在 Python 代碼中這個詞是英語單詞,大家都很熟悉這單詞的含義(LCTT 譯注:def 是 definition 的縮寫,定義的意思)。在 C 語言的例子中void?和int?就沒有那么直觀。

Python 也有個優秀的生態系統。這有兩層意思,第一,你有一個使用該語言的龐大、活躍的社區,當你需要幫助指導的時候,你能向他們求助。第二,它有大量早已存在的庫,庫是指完成特定功能的代碼集合。從高級數學運算、圖形到計算機視覺,甚至是你能想象到的任何事情。

Python 作為你第一門編程語言有兩個缺點。第一是它有時候安裝起來很復雜,特別是在運行著 Windows 的電腦上。(如果你有一臺 Mac 或者 Linux 的電腦,Python 默認已經安裝好了。)雖然這問題不是不能克服,而且情況總在改善,但是這對于一些人來說還是個阻礙。第二個缺點是,對于那些明確想要建設網站的人來講,雖然有很多用 Python 寫的項目(例如 Django 和Flask ),但是編寫運行在瀏覽器上的 Python 代碼卻沒有什么好的選擇。它主要是后臺或者服務器端語言。

JavaScript

如果你知道你學習編程的主要原因是建設網站的話,JavaScript 或許是你的最佳選擇。 JavaScript 是關于網頁的編程語言。除了是網頁的默認編程語言之外, JavaScript 作為初學的語言有幾點優點。

第一,無須安裝任何東西。你可以打開文本編輯器(例如 Windows 上的記事本,但不是一個文字處理軟件,例如 Microsoft Word)然后開始輸入 JavaScript 。代碼將在你的瀏覽器中運行。最頂尖的瀏覽器內置了JavaScript 引擎,所以你的代碼將可以運行在幾乎所有的電腦和很多的移動設備上。事實上,能馬上在瀏覽器中運行代碼為編程人員提供了一個非常的反饋,這對于新手來說是很好的。你能嘗試一些事情然后很快地看到結果。

開始 JavaScript 是作為前端語言的,不過一個名為 Node.js 的環境能讓你編寫運行在瀏覽器或者服務器上的代碼。現在 JavaScript 能當作前端或者后臺語言使用。這增加了它的使用人數。JavaScript 也有大量能提供除核心功能外的額外功能的包,這使得它能當作一門通用語言來使用。JavaScript 不只是網頁開發語言,就像 Python 那樣,它也有個充滿生氣的、活躍的生態系統。

盡管有這些優點,但是 JavaScript 對于新手來說并非十全十美。JavaScript 的語法并不像 Python 那樣清晰,也不怎么像英語。更像是之前例子里提到的 C 語言。它并不是把可讀性當作主要的設計特性。

做出選擇

選 Python 或者 JavaScript 作為入門語言都沒有問題。關鍵是你打算做什么。為什么你要學習編程?你的回答很大程度上影響你的決定。如果你是想為開源做貢獻,你將會找到大量用這兩門語言編寫的項目。另外,許多主要不是用 JavaScript 寫的項目仍使用 JavaScript 用作前端組件。當你做決定時,別忘了你本地的社區。你有在使用其中一門語言的朋友或者同事嗎?對于一個新手來說,有實時的幫助是非常重要的。

?

via:?https://opensource.com/article/17/1/choosing-your-first-programming-language

作者:Kojo Idrissa?譯者:ypingcn?校對:bestony

本文由?LCTT?原創編譯,Linux中國?榮譽推出

原文來自:https://linux.cn/article-8379-1.html

本文地址:http://www.linuxprobe.com/first-programming-language.html

轉載于:https://my.oschina.net/u/3308739/blog/875082

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

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

相關文章

css 實現章節名稱不換行,多余部分用 ... 代替

修改之前:修改之后: 代碼: <p style "white-space: nowrap;text-overflow: ellipsis;overflow: hidden;"><? $d[name] ?></p> <i><? $d[pen_name] ?></i> <i><?phpforeach ($d[tags] as $t) {echo $t[tag_name];…

.NET 反向代理-YARP 部署Https(SSL)

相關文章&#xff1a;.NET 反向代理-YARP.NET 反向代理-YARP 根據域名轉發分享一個基于Abp 和Yarp 開發的API網關項目使用 Yarp 做網關YARP&#xff08;Yet Another Reverse Proxy&#xff09;是使用 .NET 構建的高度可定制的反向代理C# 開源一個基于 yarp 的 API 網關 Demo&am…

shell腳本--cut命令

bash&shell系列文章&#xff1a;http://www.cnblogs.com/f-ck-need-u/p/7048359.html 1.1 選項說明 cut命令將行按指定的分隔符分割成多列&#xff0c;它的弱點在于不好處理多個分隔符重復的情況&#xff0c;因此經常結合tr的壓縮功能。 -b&#xff1a;按字節篩選&#xff…

12C RAC for ASM添加磁盤步驟

RHEL 7.2使用EMC Powerpath擴容2T磁盤空間&#xff0c;需要添加至以用12C RAC for ASM系統中。下面是具體步驟&#xff0c;主機人員告知擴容別名為data_center_16、data_center_17 1&#xff1a;linux 7 系統下添加映射存儲LUN(無需重啟)1>查看機器HBA卡信息--兩個節點機器都…

Windows 下 Redis 的下載和安裝

一 安裝redis 1. 下載redis https://github.com/MicrosoftArchive/redis/releases 注: 如果上面網址下載不了, 就到這里下載 https://download.csdn.net/download/m_nanle_xiaobudiu/104370342. 解壓壓縮文件夾3. 運行redis服務端到此 , redis已經可以正常使用了,但是為了方便…

什么是行內塊元素?

2019獨角獸企業重金招聘Python工程師標準>>> 我們都知道行內元素和塊級元素&#xff0c;在實際開發中&#xff0c;經常會聽到行內塊元素&#xff0c;那么什么是行內塊元素呢&#xff1f; 行內塊元素實際就是把塊元素以行的形式展現,保留了塊元素可以設置的對應CSS屬…

WPF-08 控件模板

模板是描述控件外觀&#xff0c;WPF中每個控件都有一個默認的模板&#xff0c;你可以通過定義模板來重寫控件可視化外觀和行為&#xff0c;WPF中有兩種常用的模板Control Template和Data TemplateControl Template控件模板定義了控件的可視化外觀&#xff0c;所有的UI控件都有自…

玄學搜索\隨稽化

正解又不會寫&#xff0c;又懶得去想 只好每次考試大大暴力&#xff0c;維持一下生活了 ----------------------- P1337 [JSOI2004]平衡點 / 吊打XXX 題目描述 有n個重物&#xff0c;每個重物系在一條足夠長的繩子上。每條繩子自上而下穿過桌面上的洞&#xff0c;然后系在一起。…

第0次作業

問題1:你為什么選擇計算機專業&#xff1f;你認為你的條件如何&#xff1f; 答:我平時比較喜歡研究一些自己認為神秘的東西&#xff0c;我認為計算機就是這樣的神秘東西&#xff01;所以我選擇這個專業&#xff01;我認為我自己可以學會計算機這個專業&#xff01;我對自己有信…

Nginx +Tomcat 實現動靜態分離(轉)

Nginx Tomcat 實現動靜態分離 動靜態分離就是Nginx處理客戶端的請求的靜態頁面(html頁面)或者圖片&#xff0c;Tomcat處理客戶端請求的動態頁面&#xff08;jsp頁面&#xff09;&#xff0c;因為Nginx處理的靜態頁面的效率高于Tomcat。 一&#xff0e;Nginx簡介&#xff1a; Ng…

Beanstalked的初步了解和使用(包括利用beanstalkd 秒殺消息隊列的實現)

一 Beanstalkd 是什么 Beanstalkd&#xff0c;一個高性能、輕量級的分布式內存隊列系統二 Beanstalkd 特性 1. 優先級&#xff08;priority&#xff09; 注&#xff1a;優先級就意味 支持任務插隊&#xff08;數字越小&#xff0c;優先級越高&#xff0c;0的優先級最高&#…

WPF效果第二百篇之再玩Gamma曲線

前面效果中使用比較low的方式實現了2.4的Gamma曲線;雖說后面加了點動畫呈現效果,但也就是個過渡版;今天才基本符合需求的效果:1、還是基于WPF效果第一百七十八篇之貝塞爾曲線他來實現的:3個ListBox 3個LandmarkControl2、在LandmarkControl增加插點位事件View:LandmarkControl …

2018企業面試總匯(答案請自行搜羅) 新增19年阿里面題(反向拓展技術棧)

Java 1.多個線程同時讀寫&#xff0c;讀線程的數量遠遠大于寫線程&#xff0c;你認為應該如何解決并發的問題&#xff1f;你會選擇加什么樣的鎖&#xff1f; 2.JAVA的AQS是否了了解&#xff0c;它是干嘛的&#xff1f; 3.除了synchronized關鍵字之外&#xff0c;你是怎么來保障…

skynet源碼閱讀5--協程調度模型

注&#xff1a;為方便理解&#xff0c;本文貼出的代碼部分經過了縮減或展開&#xff0c;與實際skynet代碼可能會有所出入。 作為一個skynet actor&#xff0c;在啟動腳本被加載的過程中&#xff0c;總是要調用skynet.start和skynet.dispatch的&#xff0c;前者在skynet-os中…

ASP.NET Core GRPC 和 Dubbo 互通

一.前言Dubbo 是比較流行的服務治理框架&#xff0c;國內不少大廠都在使用。以前的 Dubbo 使用的是私有協議&#xff0c;采集用的 hessian 序列化&#xff0c;對于多語言生態來說是極度的不友好。現在 Dubbo 發布了新版本 v3&#xff0c;推出了基于 gRPC 的新協議 Triple&#…

詳解C# 迭代器

[引用&#xff1a;https://www.cnblogs.com/yangecnu/archive/2012/03/17/2402432.html] 迭代器模式是設計模式中行為模式(behavioral pattern)的一個例子&#xff0c;他是一種簡化對象間通訊的模式&#xff0c;也是一種非常容易理解和使用的模式。簡單來說&#xff0c;迭代器模…

利用redis List隊列簡單實現秒殺 PHP代碼實現

一 生產者producer部分 --------------------------------producer 部分注釋------------------------------------------------------------ 用戶在頁面請求之后, 獲取到用戶uid , 跳轉到這個加入隊列的方法 (這里直接在producer中模擬了多個uid) 在方法內部判斷redis隊列長…

使用Filezilla 與 linux遠程服務器傳輸文件時,設置默認打開編輯器

1. 點擊編輯 2. 選擇設置&#xff0c;點擊文本編輯 3. 設置編輯器目錄 4. 確定作用&#xff1a; 這樣設置之后&#xff0c;可以實現在遠程站點欄直接下載并使用phpstorm編輯的作用 正常需要下載之后&#xff0c;再去本地相應下載目錄打開&#xff0c;然后再進行上傳文件&#x…

SDOI2017 新生舞會

01規劃 a1a2a3...ai/b1b2b2..bi最大 設一個k 使得 a1a2a3...ai/b1b2b3...bi>k 變換式子得到 a1a2a3...ai>(b1b2b3..bi)*k a1-b1*ka2-b2*ka3-b3*k...ai-bi*k>0 ai-bi*k即流量 最大費用流二分答案 來&#xff0c;上代碼&#xff1a; #include <cmath> #include &l…

在 .NET 中使用 FluentValidation 進行參數驗證

不用說&#xff0c;參數驗證很重要&#xff0c;無效的參數&#xff0c;可能會導致程序的異常。如果使用Web API或MVC頁面&#xff0c;那么可能習慣了自帶的規則驗證&#xff0c;我們的控制器很干凈&#xff1a;public class User {[Required]public string FirstName { get; se…