簡易檢索 / 詳目顯示

研究生: 羅傑安
Luo, Jie-An
論文名稱: 適合初學者之程式語言探究 - Java與Python之比較
Which programming language should students learn first? A comparison of Java and Python
指導教授: 林育慈
Lin, Yu-Tzu
學位類別: 碩士
Master
系所名稱: 資訊教育研究所
Graduate Institute of Information and Computer Education
論文出版年: 2016
畢業學年度: 104
語文別: 中文
論文頁數: 140
中文關鍵詞: 初學程式語言程式語言教學程式語言學習
英文關鍵詞: programming instruction, programming learning, first programming languag
DOI URL: https://doi.org/10.6345/NTNU202204750
論文種類: 學術論文
相關次數: 點閱:430下載:0
分享至:
查詢本校圖書館目錄 查詢臺灣博碩士論文知識加值系統 勘誤回報
  • 程式語言這門科目是在電腦科學領域中的基礎課程,在目前的程式語言教學中,大多是以傳統程式語言來做為入門課程,如C、C++與Java程式語言。但是,這些傳統的程式語言,雖然在商業中有良好的發展,但是對於教學學習上,學習者可能會面臨較複雜的理論與抽象的程式知識,而造成程式語言學習上的阻礙。許多研究發現,程式語言這門學科對於是一門不容易理解的科目,即使是已經學習多年的學習者,還是無法理解程式語言的內容,對於程式語言的理解還停留在基礎的程式語法理解。
    本研究旨於將Java、Python程式語言間的程式元素分別探討,例如,變數、控制結構、迴圈結構與物件等,比較兩者語言差異性對於學習者在學習程式語言的歷程會產生的影響,例如程式理解、程式理解困難感受和程式實作困難感受等。本研究使用自編的量表,以蒐集並了解分別以Java、Python為第一語言的學習者的程式理解程度、程式實作困難感受、程式理解困難感受,以及同時學習或者教授過Java與Python語言的學習者或教學者對這兩種語言理解與實作難度比較的看法。藉以比較兩種程式語言的特質,探討歸納出哪些程式語言特質對於學習者學習時,較容易理解程式且容易實作,適用於入門程式語言的教學學習,以提出未來程式設計教學者與研究者之相關建議。從收集回來的量表資料分析,結果發現如下:
    1. 程式理解程度
    從Java組與Python組的t檢定結果可以得知,除了輸出輸入、資料型態與變數以兩種語言為第一語言的使用者理解程度並沒有差異之外,其餘程式元素皆是以Python為第一語言的學習者理解程度表現較佳。
    2. 程式理解與實作困難感受
    a. 程式理解困難感受
    從Java組與Python組的t檢定結果可以得知,以總體概念來看並無達顯著水準,也就是第一語言為學習Python程式語言的學生比起第一語言學習Java程式語言的學生在程式理解困難之感受,並沒有顯著上差異。其中,物件類別的程式理解困難感受,達到顯著水準,表示第一語言為學習Python程式語言的學生比起第一語言學習Java程式語言的學生在物件類別之程式理解困難的感受,學習Python程式語言的學生的程式理解困難感受較低。
    b. 程式實作困難感受
    從Java組與Python組的t檢定結果可以得知,Java組與Python組並無達顯著水準,也就是第一語言學習Python程式語言的學生比起第一語言學習Java程式語言的學生在程式實作困難的感受中,並沒有顯著上的差異。
    3. 同時學過Java與Python程式語言之程式理解與實作難度比較:
    a. 程式理解難度比較
    在程式理解難度比較中,可以發現學習過兩種程式語言的學習者之問卷平均數皆為正數以上,表示學習者的觀點認為學習Python程式語言在程式理解上較容易理解程式元素。不過在資料型態與變數程式元素中,學習者觀點則認為學習Java程式語言較容易理解該程式元素。
    b. 程式實作難度比較
    在程式實作難度比較中,可以發現學習過兩種程式語言的學習者之問卷平均數皆為負數以下,表示學習者的觀點認為學習Java程式語言在程式實作上對於學習者較有難度的情況發生。Python程式語言因語法較為簡潔明瞭,在進行程式實作時能較有效率地將程式實作出來,對於實作的難度則不會太高。
    4. 同時教過Java與Python程式語言之程式理解與實作難度比較:
    a. 程式理解難度比較
    在程式理解難度比較中,可以發現教學過兩種程式語言的教學者之問卷平均數皆為正數以上,表示教學者的觀點認為學習Python程式語言較容易理解程式元素。不過在資料型態與變數程式元素中,教學者觀點則認為學習Java程式語言較容易理解該程式元素。
    b. 程式實作難度比較
    在程式實作難度比較中,可以發現教學過兩種程式語言的教學者之問卷平均數皆為負數以下,表示教學者的觀點認為學習Java程式語言的學習者對於程式實作的難度較高。Python程式語言因語法較為簡潔明瞭,在進行程式實作時能較有效率地將程式實作出來,對於實作的難度則不會太高。
    本研究會歸納出哪個程式語言對於學習者學習時,較容易理解程式且不容易產生實作與理解困難感受,並且適用於入門程式語言學習,與提出未來程式語言教學者與學習者之相關建議。

    Programming is a fundamental ability for Computer Science majors. Most programming lectures use traditional languages, such as C, C++, or Java, as the first learning language for novices, which are effective for designing real applications and therefore are popular in industry. However, the complex syntax of these languages is challenging for novices, which becomes an obstacle to novices’ learning.
    Python has simpler syntax and high-level data structures to enable succinct programs. The multiple paradigms of Python also provide learners opportunities to learn various features of programming languages. Therefore, Python gradually becomes a new option of the first language for learning.
    This study investigates the features of the first learning programming language by comparing Python with the popular learning language Java. An inventory study was conducted on the students whose first programming language was Java (the Java group) or Python (the Python group), who had learnt both langues, and the insturctors who had taught both languagesto understand how the features of languages affect students’ learning from the aspects of program translation and execution (interpretation vs. compilation), involvng varous programming elements (e.g, variable declaration,the syntax of control structures, and the object-oriented syntaxes). The inventory questions were designed to understand whether and how the language features in this aspect influence program comprehension and program implementation. The research findings are as follows:
    1. Program comprehension: the students whose first programming languge was Python performed significantly better in program comprehension than those whose first language was Java in terms of all programming elements or constructs except I/O, data types, and varibles.
    2. Perception of program comprehension/implementation difficulty The research results show that students in the Java and Python groups had similar perception about implemetation difficulty of programming. Howerver, students in the Python group had higher pwhose first language was Python had more positive perception about the comprehension difficulty of programming in terms of the object-oriented concepts and constructs. That is, the Python group students were more confident in comprehending object-oriented statements. This might be because although Java is an inherent object-oriented language, it has too complex syntax for novice learners.
    3. Comparisons of Java and Python: The comparison inventory was conducted on the students and instructors who had learnt or taught Java and Python before this study. The results show that both instructors and students thought Python was easier in terms of I/O, loops, and functions because of its simple syntax. Howerver, both instructors and students agreed with the difficulty of comprehending and implementing variable and assignment statements by using Python because its dynamic variables.
    The research results can give instructors suggestions for selecting suitable learning languages in their lectures and designing adaptive instructional strategies/materials based on the features of the selected language.

    第一章 緒論 1 第一節 研究背景與動機 1 第二節 研究目的與待答問題 3 第三節 名詞釋義 4 第二章 文獻探討 6 第一節 初學程式語言的種類 6 第二節 初學程式語言的概念知識理解 11 第三節 初學程式語言的理解困難和實作困難 14 第四節 教育程式語言選擇 19 第三章 研究方法 25 第一節 研究流程 26 第二節 研究對象 28 第三節 研究工具 29 第四節 資料與分析方法 36 第四章 結果 37 第一節 不同程式語言對於程式理解之影響 37 第二節 不同程式語言對於程式理解與實作困難感受之影響 41 第三節 不同程式語言的程式理解與實作難度之比較 47 第五章 討論 54 第一節 不同程式語言對於程式理解的影響 54 第二節 不同程式語言對於程式理解與實作困難感受的影響 55 第四節 綜合討論 58 第六章 結論與建議 62 第一節 結論 62 第二節 建議 64 參考文獻 66 附錄一 72 附錄二 89 附錄三 105 附錄四 123

    Ahmadzadeh, M., Elliman, D., & Higgins, C. (2005). An analysis of patterns of debugging among novice computer science students. ACM SIGCSE Bulletin,37(3), 84-88.

    Arnold, K., & Gosling, J., & Holmes, D. (2006). The Java Programming Language. Addison-Wesley.

    Bauer, M. A. (1979). Experiences with pascal in an introductory course. Proc. 10th SIGCSE symposium on Computer science education, 11, 158-161.

    Bayman, P., & Mayer, R. E. (1983). A diagnosis of beginning programmers' misconceptions of BASIC programming statements. Communications of the ACM, 26(9), 677-679.

    Bednarik, R. (2012). Expertise-dependent visual attention strategies develop over time during debugging with multiple code representations. International Journal of Human-Computer Studies, 70(2), 143-155.
    Bergin, J. (2000). Teaching objects with elementary patterns. Retrieved October, 30, 2004.

    Brilliant, S. S., & Wiseman, T. R. (1996). The first programming paradigm and language dilemma. ACM SIGCSE Bulletin, 28(1), 338-342.

    Chakravarty, M. M., & Keller, G. (2004). The risks and benefits of teaching purely functional programming in first year. Journal of Functional Programming,14(01), 113-123.

    Close, R., Kopec, D., & Aman, J. (2000). CS1: perspectives on programming languages and the breadth-first approach. Journal of Computing in Small Colleges, 228 – 234.

    Conway, D. (1993). Criteria and consideration in the selection of a first programming language. Monash University, Department of Computer Science.

    Coull, N., Duncan, I., Archibald, J., & Lund, G. (2003). Helping novice programmers interpret compiler error messages. In 4th Annual LTSN-ICS Conference, National University of Ireland, Galway.

    DeClue, T. (1996, March). Object-orientation and the principles of learning theory: A new look at problems and benefits. In ACM SIGCSE Bulletin (Vol. 28, No. 1, pp. 232-236). ACM.

    Deek, F. P., Kimmel, H., & McHugh, J. A. (1998). Pedagogical changes in the delivery of the first course in computer science: Problem solving and programming. Journal of Engineering Education, 87(3), 313-320.

    Dehnadi, S., & Bornat, R. (2006). The camel has two humps (working title).Middlesex University, UK, 1-21.

    Duke, R., Salzman, E., Burmeister, J., Poon, J., & Murray, L. (2000). Teaching programming to beginners-choosing the language is just the first step. In Proceedings of the Australasian conference on Computing education (pp. 79-86). ACM.

    Fleury, A. E. (2000). Programming in Java: Student-constructed rules. SIGCSE Bulletin, 32(1), 197-201.

    Garner, S. (2002). Reducing the cognitive load on novice programmers, In P. Barker & S. Rebelsky (Eds.), Proceedings of World Conference on Educational Multimedia, Hypermedia and Telecommunications 2002 (pp. 578-583). Chesapeake, VA: AACE.

    Gupta, D. (2004). What is a good first programming language?. Crossroads, 10(4), 7-7.

    Halasz, F., & Moran, T. P. (1982). Analogy considered harmful. InProceedings of the 1982 conference on Human factors in computing systems(pp. 383-386). ACM.

    Guzdial, M. (1995). Centralized mindset: a student problem with object-oriented programming. In ACM SIGCSE Bulletin (Vol. 27, No. 1, pp. 182-185). ACM.

    Haberman, B., & Kolikant, Y. B. D. (2001). Activating “black boxes” instead of opening “zipper”-a method of teaching novices basic CS concepts. InACM SIGCSE Bulletin (Vol. 33, No. 3, pp. 41-44). ACM.

    Hadjerrouit, S. (1998). Java as first programming language: a critical evaluation.ACM SIGCSE Bulletin, 30(2), 43-47.

    Harrison, R. (1993). The use of functional languages in teaching computer science. Journal of Functional programming, 3(01), 67-75.

    Hu, C. (2004). Rethink of Teaching Objects-First. Education and Information Technologies, 9(3), 209-218.

    Jackson, J., Cobb, M., & Carver, C. (2005). Identifying top Java errors for novice programmers. In Frontiers in Education, 2005. FIE'05. Proceedings 35th Annual Conference (pp. T4C-T4C). IEEE.

    Jadud, M. C. (2005). A first look at novice compilation behaviour using BlueJ.Computer Science Education, 15(1), 25-40.

    Joosten, S., Van Den Berg, K., & Van Der Hoeven, G. (1993). Teaching functional programming to first-year students. Journal of Functional Programming, 3(01), 49-65.

    Kernighan, B. W. (1981). Why Pascal is not my favorite programming language. Bell Laboratories. Computing Science.

    Kernighan, B., & Ritchie, D. (1988). The C Programming Language. Prentice Hall.

    King, J., Feltham, J., Nucifora, D. (1994). Novice Programming in High Schools: Teacher Perceptions and New Directions. Australian Educational Computing, 9(1), 17-23.

    Kinnunen, P., & Malmi, L. (2008). CS minors in a CS1 course. In Proceedings of the Fourth international Workshop on Computing Education Research (pp. 79-90). ACM.

    Kölling, M. (1999). The problem of teaching object-oriented programming Part I: Languages. Journal of Object-Oriented Programming, 11(8), 8-15.

    Lattanzi, M. R., & Henry, S. M. (1996). Teaching the Object‐Oriented Paradigm and Software Reuse: Notes from an Empirical Study. Computer Science Education, 7(1), 99-108.

    Liskov, B. (1993). A History of CLU. MIT Laboratory for Computer Science Technical Report.

    Lister, R., Adams, E.S., Fitzgerald, S., Fone, W., Hamer, J., Lindholm, M., McCartney, R., Mostro¨m, J.E., Sanders, K., Seppa¨la¨, O., Simon, B., & Thomas, L. (2004). A multi-national study of reading and tracing skills in novice programmers. ITiCSE-WGR ’04: Working group reports from the ITiCSE conference, 119-150.

    Mannila, L., Peltomäki, M., & Salakoski, T. (2006). What about a simple language? Analyzing the difficulties in learning to program. Computer Science Education, 16(3), 211–227. doi:10.1080/08993400600912384

    McIver, L., & Conway, D. (1996). Seven deadly sins of introductory programming language design. In Software Engineering: Education and Practice, 1996. Proceedings. International Conference (pp. 309-316). IEEE.

    Mody, R. P. (1991). C in education and software engineering. ACM SIGCSE Bulletin, 23(3), 45-56.

    Nagappan, N., Williams, L., Ferzli, M., Wiebe, E., Yang, K., Miller, C., & Balik, S. (2003, February). Improving the CS1 experience with pair programming. InACM SIGCSE Bulletin (Vol. 35, No. 1, pp. 359-362). ACM.

    Newlands, D. A. (1992). C as a first programming language. Proceedings of Australian Society for Computers in Learning in Tertiary Education, 339-345.

    Oliver, R. (1993). Measuring hierarchical levels of programming knowledge. Journal of Educational Computer Research, 9(3), 299-312.

    Prata, S. (2004). C Primer Plus.5th edition. SAMS.

    Radenski, A. (2006). “Python first”: A lab-based digital introduction to computer science. In ITICSE ’06: Proceedings of the 11th Annual SIGCSE Conference on Innovation and Technology in Computer Science Education (pp. 197-201). New York: ACM Press.

    Ragonis, N., & Ben-Ari, M. (2005). A long-term investigation of the comprehension of OOP concepts by novices. Computer Science of Education, 15(3), 203-221.

    Renumol, V., Jayaprakash, S., & Janakiram, D. (2009). Classification of cognitive difficulties of students to learn computer programming. Indian Institute of Technology, India.

    Renumol, V. G., Janakiram, D., & Jayaprakash, S. (2010). Identification of cognitive processes of effective and ineffective students during computer programming. ACM Transactions on Computing Education (TOCE), 10(3), 10.
    Robins, A., Rountree, J., & Rountree, N. (2003). Learning and Teaching Programming: A Review and Discussion. Computer Science Education, 13(2), 137–172. doi:10.1076/csed.13.2.137.14200

    Rich, L., Perry, H., & Guzdial, M. (2004). A CS1 course designed to address interests of women. ACM SIGCSE Bulletin, 36(1), 190. doi:10.1145/1028174.971370

    Spohrer, J.C., & Soloway, E. (1989). Novice mistakes: Are the folk wisdoms correct? In E. Soloway & J.C. Spohrer (Eds.), Studying the novice programmer (pp. 401–416).

    Stephenson, C., & West, T. (1998). Language choice and key concepts in introductory computer science courses. Journal of Research on Computing in Education, 31(1), 89-95.

    Stroustrup, B. (2000). The C++ Programming Language. Addison-Wesley Professional.

    Wiedenbeck, S., Ramalingam, V., Sarasamma, S., & Corritore, C. (1999). A comparison of the comprehension of object-oriented and procedural programs by novice programmers. Interacting with Computers, 11(3), 255-282.

    Winslow, L.E. (1996). Programming pedagogy – A psychological overview. SIGCSE Bulletin, 28, 17–22.

    Wirth, N. (1971). The programming language Pascal. Acta Informatica, 1, 35-63.

    Van Rossum, G. (1999). Computer programming for everyone. Retrieved from http://www.python.org/doc/essays/cp4e.html

    Vujoˇsevi´c-Janiˇci´c, M., & Toˇsi´c, D. (2008). The role of programming paradigms in the first programming courses. The Teaching of Mathematics, XI(2), 63–83.

    Xu, S., & Rajlich, V. (2004). Cognitive process during program debugging. In Cognitive Informatics, 2004. Proceedings of the Third IEEE International Conference on (pp. 176-182). IEEE.

    無法下載圖示 本全文未授權公開
    QR CODE