OI 的應試意義是否超過了興趣培養與實際應用?
背景1:題主從未參加過 OI 培訓(初賽內容除外),參加過兩次 NOIP 提高組競賽(C++)
平時常用 PHP / JS / C# 寫點小東西學校也不重視,題主每次都是複賽前抱著 C++ Primer 啃半個月然後去考試,考完就忘成績的話200出頭(本省實力不是太高能拿到獎)---- 背景分割線 ----
背景2:因為和幾個別的省份小几屆的 OIer 比較熟(非經 OI 認識),也大概知道他們大概是什麼狀態:定期 or 不定期 在學校機房刷題,在家刷題,各種 OJ 比賽,假期 OI 夏令營,等等等等偶爾會提到各種演算法,背包,樹 …… 有些演算法可能我會寫但是完全不知道叫什麼,於是遇到這類話題完全無法插話但總有種廣告上經常寫的「教會N個解題模型,用這些模型解決所有高考題」的感覺---- 正文分割線 ----由於題主對編程的認識並不是由 OI 而起,開始編程的時間也遠遠早於接觸 OI,所以在接觸 OI 的過程中產生了相關疑問。問題細化後共有四個方面:1. OI 教育/比賽 是否過於形式化、模式化、以應試為目的?2. OI 所教授的內容能否培養學習者的興趣,並激勵他們進行創新?3. 以 OI 作為編程的入門是否合適?是否有利於提高初學者對編程的興趣?4. OI 與實際開發的關聯性有多大?
從題主的描述來看,我猜題主是那種了解工程技術、寫過工程代碼,但是對於演算法和數據結構了解甚少的程序員,或許開發過網站和GUI應用程序,但寫的大部分是業務代碼。
那麼下面就來回答題主的四個問題:
1. OI 教育/比賽 是否過於形式化、模式化、以應試為目的?
上面有位匿名答主說,OI中沒有考綱。的確是這樣。NOIp我不太了解,但每年NOI的題目基本上都是由幾屆前的OIer,現役大學生出的。可以說這些人想出什麼就出什麼,不過因為這些人也搞過競賽,水平也不低,所以出出來的題目也相對靠譜。要說形式化或者模式化,多少還是有一點的。畢竟要想出新的演算法、數據結構,或者模型是有相當大的難度的,有時候也會用舊瓶裝新酒,但這也不代表題目就不難,做過類似題目的人就一定能想出來。更重要的,這絕對不會是所謂「熟知N個模型」就能隨手解決的問題。不過話又說回來,想在OI中「熟知N個模型」,這本身就不是一件簡單的事情。
至於應試,既然競賽說到底就是考試,那以參賽選手多少帶有一點應試的、功利的心態是完全可以理解的。不過我想,作為一門不參與高考的科目,如果是沒有天賦又沒有興趣的人,應該是堅持不下去的吧。
2. OI 所教授的內容能否培養學習者的興趣,並激勵他們進行創新?
我認為是可以的,事實上對於我自己而言也的確是這樣的。如果題主了解OI屆的話,會發現OI競賽中的知識更新是很快的。十年前全國都不見得有多少人會的演算法和數據結構,到了現在基本上是必會的程度的東西了。近些年來各種新的演算法和數據結構(雖然基本上全都是上古論文中的東西)被引入了OI屆,並漸漸開始在比賽中出現。在此之上,也有很多人提出新的方法和模型。這應該算是創新吧。3. 以 OI 作為編程的入門是否合適?是否有利於提高初學者對編程的興趣?
作為單純編程的入門是合適的。事實上,在清華計算機系,大一新生的程序設計基礎課就會講一些基礎演算法,並要求大家實現。先不談這門課程怎麼樣,就這個安排而言,我覺得是合理的,因為入門級別的演算法在理解上不會有很大的難度,同時在代碼上也不會太難實現,對於初學者來說剛剛好。而且,比理解語法層面的東西更重要的,是學會從計算機的角度思考問題,這些東西是單純的「代碼題」鍛煉不了的。至於興趣的話,這就見仁見智了。有些人就是不喜歡學演算法,認為這些東西晦澀難懂,也沒什麼用;有些人反而覺得演算法很優美,討厭那些更多側重於實現而不是思考的東西。這兩者都沒有什麼問題。
4. OI 與實際開發的關聯性有多大?
如果題主指的是普通的軟體開發、前端實現之類的工程項目的話,可以說OI除了能在一定程度上鍛煉代碼能力之外,完全沒有別的作用。如果題主指的是開發更為複雜的應用,設計大型系統等等涉及到演算法的項目的話,OI多少還是能幫上忙的。或許OI中的很多演算法甚至數據結構在現實生活中沒有多少用武之地,但從OI中學到的思維方法是能受用一生的。OI是篩選、培養演算法(說寬點是理論計算機科學)方面而不是編程方面的人才的啊……為什麼要與實際開發有關聯……
OI考察的東西當然不形式化了,還是有一定思維量的,你可以看看歷年NOIP和NOI的題(雖然有些題考察代碼能力的成分較大)。
興趣應該是搞競賽之前就有的,而不是搞了以後才培養的……當然,OI裡面各種因缺斯汀,需要選手動腦筋的題目也足以吸引廣大OIers辣……出奇怪的題你們不高興,說叫偏題,不出奇怪的題你們也不高興,說叫應試。你開心就好。
1. OI 教育/比賽 是否過於形式化、模式化、以應試為目的?
OI比賽是模式化的。所有比賽都是。所有名字里有「奧林匹克」的比賽都特別是。OI的訓練是以應試為目的的。所有針對某個比賽的訓練都是。所有針對某個名字里有「奧林匹克」的比賽的訓練都特別是。2. OI 所教授的內容能否培養學習者的興趣,並激勵他們進行創新?
我的感覺是,沒有什麼比實踐更能培養人的興趣,更能激勵人的創新的了。OI是實踐的一種。3. 以 OI 作為編程的入門是否合適?是否有利於提高初學者對編程的興趣?
對一部分人合適。
4. OI 與實際開發的關聯性有多大?
不大。其他「教會N個解題模型,用這些模型解決所有高考題」
不,如果真要打比方的話,應該是「融會貫通以下知識點,高考拿高分」。區別在於,很多演算法是真實存在的,並且在現實中廣泛運用的,另一些可能沒有那麼常用,但是在理論上很有價值。因此它們更類似於「書上的一個定理」,而不是「教輔上的一個解題模板」。
話是這麼說,但是實際軟體開發里用到這些演算法的頻率還是不高。這跟我上一段說的「在現實中廣泛運用」並不矛盾。就好比,牛頓第一定律超有用的,整個宇宙都聽它的,中學生掌握它對自己也很有幫助。但是你現實生活中還是很少真的用到它去做什麼,但是並不能因為這個,就說它沒用。還好吧反正我本來是很有興趣的,學著學著就沒興趣了。。。可能是因為我科技樹奇怪的原因把我喜歡的東西根本不會考到。。。
感覺OI中現實意義最大的就是數據結構和計算幾何了吧
然而這些東西不怎麼考(參加NOI2015和2016)所以我也不知道說什麼好233333本人剛退役的選手.搞oi之餘也搞過一些php開發之類的東西.
問題1:
oi是一項奧林匹克競賽.既然是競賽那應試當然是很重要的.至於是不是目的,在於你的動機而不是oi本身.而奧賽決定了它不可能像某些比賽那樣由評委來打分.個人理解中oi是非常務實的競賽.既然題主參加過noip那無須多言.問題2:
興趣?能!個人認為oi中的絕大多數東西都不是死板的,而是很有趣的,值得研究的.至於創新,有很多oi選手都創造了屬於自己的東西,甚至是在考場上現思考出來的.而這些東西又會在不久之後作為oi賽場上新的考點.問題3:
oi是演算法競賽,而不是碼農競賽.編程不是oi的目的,而是手段.另一方面講搞oi必定對語言有足夠的熟悉度.有很多oi選手也是從oi開始編程,後來也會在it或cs方向有很好的發展.問題4:oi題更像是內核的開發.著力於解決某個特定的問題.oi與實際開發有一定區別.但是很多東西都是開發的基礎.更深一步講,oi中的基礎知識和培養的各種能力會對開發工作有促進作用.1.有一定的形式化,但是在合理的範圍內的。作為一項長年舉辦的競賽,考察的內容總是要固定一些的,不然就不能稱之為同一項比賽了。假如高考年年題風大變,那出題人豈不是是要被罵死?相比之下,OI的變化度已經大了。而且你提到的那些演算法與其說是高考中的解題模型,不如說是數學中的數學定理。
2.「編程」是個很寬泛的東西,每個人想用編程解決的問題不同。我見過某漢化組的程序員連遞歸都不怎麼懂,但是他的技術能力足夠達到他的目的了,他對進一步的研究學習也不是很感興趣。人天生的性格和技能點不同造成了能引發他們興趣的東西不同。所以不能說OI一定能培養出學習者的興趣。但對於我來說OI還是很有趣的,很多奇思妙想令人驚奇,而且能一次一次享受被碾壓的快感(霧
3.跟問題2類似,會編程不代表著要成為一個水平超高的技術大牛。我會寫字但我不一定就要成為書法大家。程序說到底只是一種輔助工具罷了,任何人都能使用。個人認為客觀來講,對於不少人而言,OI入門不適合也沒必要。即使是對於那些將來的技術大牛,可能需要的也是如hzc神犇所說的基礎演算法課,是否要具體到OI這種比賽性質的東西也值得商榷。不過對於對演算法有一定興趣的人,把OI作為入門基礎就算不是最好的選擇,也是個不錯的選擇。
4.直接關聯性不大,但其培養出的思維或許會有幫助。
OI模式化……我至今還沒搞明白OI真正的考綱是什麼,這種東西怎麼可能模式化得起來?而且出題人每年就換一批,實在不知道模式從哪來。培養興趣和創新能力的話根據我身邊的情況來看OI還是非常不錯的。至於下面幾個問題……你對於實際開發和編程的具體內容是什麼都沒說清楚吧要怎麼回答(當然我也回答不了)OI這東西沒有強烈的興趣就別學了,講真。要是有強烈的興趣這些問題都不是事。
是
推薦閱讀:
※如何評價YNOI2017?
※如何評價 CTSC 2017 論文答辯?
※請問這樣的安排真的能保證NOIP考好嗎(具體看問題描述)?
※如何看待luogu無視版權並放任他人進行人身攻擊的行為?
※在數學或是計算機科學中,有什麼優美的結論會有一些小的特例不滿足?