高考后想學(xué)編程,如何選擇?
作為一個(gè)高中乃至更早的階段參加過(guò)信息學(xué)奧林匹克競(jìng)賽(OI)的社畜,對(duì)于這個(gè)問(wèn)題我覺(jué)得有一定的發(fā)言權(quán)。
本人的代碼學(xué)習(xí)從Basic開(kāi)始,然后轉(zhuǎn)Pascal,最后專精于C++,進(jìn)入大學(xué)后接觸Python,R,Matlab等編程語(yǔ)言。
為了回答這個(gè)問(wèn)題,需要清楚自己的需求。如果你未來(lái)想學(xué)習(xí)的是計(jì)算機(jī)相關(guān)的專業(yè),比如CS、軟件工程、AI等專業(yè),那么強(qiáng)烈建議盡早地學(xué)習(xí)C++(Goto Part.1)。C++相較于Python,Java都更加底層,效率更高,同時(shí)也離操作系統(tǒng)更近,對(duì)后面的學(xué)習(xí)有不少幫助。如果你未來(lái)學(xué)習(xí)的是數(shù)學(xué)、統(tǒng)計(jì)、經(jīng)濟(jì)、金融等乍一看和編程關(guān)系不大、但涉及數(shù)據(jù)處理的專業(yè),那么建議你可以稍微學(xué)習(xí)一些Python,掌握一些基本庫(kù)的使用(后面具體介紹),可以省去后面臨時(shí)抱佛腳的匆忙(Goto Part.2)。部分專業(yè)根據(jù)學(xué)科需要會(huì)有特定軟件需求,會(huì)有專門課程覆蓋,此處我們略過(guò)。如果你確定你的專業(yè)和代碼無(wú)關(guān),你可以去享受暑假。個(gè)人覺(jué)得目前幾乎所有的專業(yè)的都和代碼脫不開(kāi)干系。當(dāng)然,開(kāi)學(xué)再學(xué)也不算太遲,只是學(xué)業(yè)壓力較大,更建議在暑假提前接觸編程。
Part 1. 計(jì)算機(jī)相關(guān)專業(yè)的學(xué)習(xí)建議
你未來(lái)的專業(yè)課程中將可能包括下面幾座大山:計(jì)算機(jī)系統(tǒng)基礎(chǔ)、操作系統(tǒng)、編譯原理。不出意外的話,這些課程或多或少會(huì)使用C++或者C語(yǔ)言進(jìn)行介紹,并使用它們完成課程作業(yè)。(當(dāng)然不排除某些學(xué)校課程改革,引入Rust語(yǔ)言實(shí)現(xiàn)操作系統(tǒng))
由此可見(jiàn),C++是你避不開(kāi)的一道坎,不妨盡早地開(kāi)始學(xué)習(xí)。注意這里指代的是真C++,而不是(C with STL)。作為入門,學(xué)習(xí)C with STL是沒(méi)有問(wèn)題的,但是建議完整地去了解C++的全貌(modern C++)。
這里推薦聽(tīng)一聽(tīng)國(guó)外的C++講解課程,看看一些最近更新的教材,比如《Objective-Oriented Programming with C++》。國(guó)內(nèi)的一些C++教材,相對(duì)有些過(guò)時(shí),作為語(yǔ)法入門可以稍微看看,不建議作為學(xué)習(xí)主力。
作為一個(gè)未來(lái)計(jì)算機(jī)相關(guān)專業(yè)的同學(xué),你需要知道
算法+數(shù)據(jù)結(jié)構(gòu)=程序
所以,在掌握語(yǔ)言以后,就需要學(xué)習(xí)算法和數(shù)據(jù)結(jié)構(gòu)了,這是一個(gè)冗長(zhǎng)、痛苦的過(guò)程,我相信會(huì)有一門或以上課程會(huì)cover這部分內(nèi)容,所以不必心急。高考完后,認(rèn)真地學(xué)習(xí)一下面向?qū)ο驝++語(yǔ)言的語(yǔ)法與特性即可。學(xué)到什么程度呢,比如問(wèn)你C++里怎么實(shí)現(xiàn)一個(gè)生成器(generator)。
Part 2.非計(jì)算機(jī)相關(guān)專業(yè)的學(xué)習(xí)建議
你未來(lái)的課程可能有一門編程語(yǔ)言,他可能是C語(yǔ)言,也可能是Python。Anyway,在高考完開(kāi)始接觸學(xué)習(xí)Python是不會(huì)有錯(cuò)的,它更像是一個(gè)趁手的工具,而不是一個(gè)死板的完成作業(yè)的軟件。
當(dāng)你需要處理實(shí)習(xí)、論文的數(shù)據(jù)的時(shí)候,再盲目地去學(xué)習(xí)一些數(shù)據(jù)處理軟件或工具,可能并不能用的很順手。不妨從現(xiàn)在開(kāi)始,就接觸Python,并逐漸掌握numpy,pandas,matplotlib這三個(gè)庫(kù)的使用。
Numpy是Python中最基本的科學(xué)計(jì)算庫(kù)之一。它提供了一個(gè)強(qiáng)大的多維數(shù)組對(duì)象(稱為ndarray),用于存儲(chǔ)和處理大規(guī)模數(shù)據(jù)。Pandas建立在NumPy之上,提供了更高級(jí)的數(shù)據(jù)結(jié)構(gòu)和數(shù)據(jù)分析工具。Pandas的核心數(shù)據(jù)結(jié)構(gòu)是DataFrame,它是二維的、標(biāo)簽化的數(shù)據(jù)結(jié)構(gòu),類似于Excel的表格。Pandas還提供了豐富的數(shù)據(jù)操作和處理功能,包括數(shù)據(jù)清洗、缺失值處理、數(shù)據(jù)轉(zhuǎn)換、分組聚合、時(shí)間序列分析等。Matplotlib是Python中最常用的數(shù)據(jù)可視化庫(kù)之一,主要用來(lái)畫(huà)各式圖標(biāo)。它提供了廣泛的繪圖工具和函數(shù),用于創(chuàng)建各種類型的靜態(tài)、動(dòng)態(tài)和交互式圖表。
將這三個(gè)基本庫(kù)爛熟于胸,對(duì)后面的實(shí)習(xí)、工作都有很大幫助。
寫(xiě)了這么多,歸根到底就是選擇一個(gè)和自己未來(lái)規(guī)劃更貼近的語(yǔ)言,開(kāi)始學(xué)習(xí),Susume(前進(jìn))!
當(dāng)然,最后的最后,如果看到這篇文章的是學(xué)有余力的初中生乃至小學(xué)生,那么我強(qiáng)烈安利你學(xué)習(xí)信息學(xué)奧賽的相關(guān)內(nèi)容,當(dāng)你達(dá)到能夠獲得NOIP一等獎(jiǎng)的水平時(shí),你的C++編程和算法能力也就有應(yīng)付計(jì)算機(jī)包括AI專業(yè)本科二年級(jí)課程的水平,即使遇到新的編程語(yǔ)言也能很快上手。
如果你對(duì)信息競(jìng)賽感興趣,不清楚如何學(xué)習(xí)規(guī)劃或者想找一名好的老師,也歡迎找我聊一聊。
我是球菌Matrix,在扎實(shí)高效學(xué)習(xí)信息學(xué)奧賽方面有些心得。