11 METİN TABANLI PROGRAMLAMA Amaçlar ÖZET Bu bölümü bitirdiğinizde: Bilgisayar ve programlama, günlük hayatımızda kritik bir rol oynamaktadır. Programlama, günümüz dünyasının yeni dilidir ve gelecek bir zamanda, bilgisayar dilini bilmeyenlerin bugün okuma-yazma veya matematik bilmeyenlerin karşılaştıkları zorlukların benzerini yaşamaları büyük olasılıktır. Bu yüzden de çocuklar ve gençlerin kodlamayı öğrenmesi büyük bir önem arz etmektedir. Bu konu gelecek nesillerin kodlama ile ilgili meslek sahibi olmaları ile ilgili de değildir. Bu ilgiyi kurmak fen bilgisi derslerinde güneş sistemi ve gezegenler ile ilgili bilgileri öğrenen herkesin gök bilimci olmasını beklemek ya da proton ve nötron öğretilen çocukların ileride atom fizikçisi olmasını beklemek ile aynıdır. hh Programlama dillerinin dayandığı paradigmaların özelliklerini açıklayabilecek, hh Programlama öğretiminde kullanılan yaklaşımların avantaj ve dezavantajlarını sıralayabilecek, hh Metin tabanlı programlama öğretiminin zorluklarını açıklayabilecek, hh Metin tabanlı programlama dillerinin öğretiminde kullanılan araçların özelliklerini sıralayabilecek ve hh Blok tabanlı programlamadan metin tabanlı programlamaya geçişin nasıl yapılacağını tartışabilecek bilgi ve beceriye sahip olacaksınız. Programlama ve bilgisayar bilimleri eğitimi bilgi işlemsel düşünme ile ilgilidir. Bilgi işlemsel düşünme becerisi, bireylerin karşılaştıkları sorunları yönetilebilir alt sorunlara bölerek onları çözebilmeleri ile ilgilidir. Mantık, matematik ve algoritmayı birleştirerek yaşadığımız dünyaya farklı bir gözle bakmamızı sağlar. Bu nedenle, programlamanın öğretilmesinin gerekip gerekmediğinden daha çok programlama öğrenilirken kendine güven ve motivasyonda düşüş olma olasılığının en aza indirilmesi için öğretim programlarının nasıl en üst düzeye çıkarılması gerektiğine yönelik sorunlar üzerinde düşünülmesi faydalı olacaktır. Bilgisayar programlama ve bilgi işlemsel düşünme becerilerinin kazandırılmasında blok tabanlı programlama ortamları yaygın olarak kullanılmaktadır. Temel bilgisayar bilimi ve programlama kavramlarının öğretiminde başarılı sonuçlar alınmasının yanında günümüzde kullanılan genel amaçlı programlama dillerinin tamamına yakını metin tabanlıdır. Bu bölümde metin tabanlı genel amaçlı programlama dillerinin gelişimi ve öğretilmesi konularındaki paradigmalara ve pedagojik yaklaşımlara yer verilmiştir. Daha sonra bilgisayar programlamaya blok tabanlı yaklaşım ile başlayan çocuk ve gençlerin metin tabanlı programlama dillerine geçişte yaşadıkları sorunlar ve blok tabanlı ortamların neden olduğu bazı yanlış programlama davranışları üzerinde durulmuştur. Yapılan çalışmalar blok tabanlı ya da metin tabanlı ortamların birbirlerinin yerine kullanılmasından daha çok birbirlerini tamamlayıcı nitelikte kullanılmasının daha etkin ve verimli bir yol olduğunu göstermektedir. Öğretim programlarında, blok ve metin tabanlı programlama dillerinin birlikte kullanılması öğrenenlerin programlama konusunda kendilerine olan güven ve motivasyonlarını arttırarak fikirlerini programlama yoluyla gerçekleştirmelerine olanak sağlayacağı düşünülmektedir. Anahtar Kavramlar: programlama paradigmaları, programlama yaklaşımları, eğitsel programlama dilleri, metin tabanlı programlama, logo, python, kaplumbağa grafikleri Metin Tabanlı Programlama 291 ETKİNLİK ÖNERİSİ 1.C, C++, Java, Small Basic ve Python program geliştirme ortamları üzerinde ekrana “Merhaba Dünya” yazdıran bir program kodu yazmaya çalışınız. Bu süreçte; a. Eğer ortamların kurulumunu geçekleşmez ise sebebiyle not alınız, b.Program kodunu yazmak için her programlama dilini başlangıç seviyesinde öğrenmek için en fazla 30 dakika ayırınız, c.Program kodlama sürecinde karşılaştığınız hataları (varsa) ve hatanın neden oluştuğunu anlayıp anlamadığınızı belirtiniz. d.Program kodunu yazabildiğiniz ve çalıştırabildiğiniz ortamlarda program kodlarını satır uzunluğu olarak karşılaştırınız. 2.Bir okulda dersler sabah saat 8:30’da başlamaktadır. Okul aracı saat 7:45’te evine yakın bir duraktan geçen öğrenenin, akşam yattıktan sonra dersin olduğu sınıfa girene kadar yaşadıklarını ifade eden bir algoritma hazırlayınız. 3.Aşağıdaki şekilde görülen evi Python ya da Small Basic programlama ortamında çizmek için gerekli adımları bilgi işlemsel düşünme becerilerini de göz önüne alarak tasarlayınız. Programlama ortamında kodu yazıp çalıştırınız. 292 Bilgi İşlemsel Düşünmeden Programlamaya Kaynakça Abelson, H., Sussman, G. J., & Sussman, J. (1996). Structure and Interpretation of Computer Programs 2’nd Edition. Massachusetts: The MIT Press. Bergin, J., Stehlik, M., Roberts, J., & Pattis, R. (1997). Karel++, a gentle introduction to the art of object-oriented. New York: John Wiley & Sons. Brusilovsky, P., Calabrese, E., Hvorecky, J., Kouchnirenko, A., & Miller, P. (1997). Mini-languages: a way to learn programming principles. Education and Information Technologies, 65-83. Calabrese, E. (1989). Marta - the “Intelligent Turtle”. Proceedings of Second European Logo Conference, EUROLOGO’89 (s. 111-127). Gent, Belgium: Edited by G. Schuyten and M. Valcke. Dann, W. P., Cooper, S., & Paush, R. (2011). Learning to Program with Alice. Upper Saddle River: Pearson Prentice Hall. Dorling, M., & White, D. (2015). Scratch: A Way to Logo and Python. SIGCSE ‘15 Proceedings of the 46th ACM Technical Symposium on Computer Science Education (s. 191-196). Kansas City: Association for Computing Machinery. Farooq, M. S., Khan, S. A., Ahmed, F., Islam, S., & Abid, A. (2014). Choice of Pedagogical Approach towards First Programming Languages. Journal of Applied Environmental and Biological Sciences, 311-317. Federici, S. (2011). A minimal, extensible, drag-and-drop implementation of the C programming language. SIGITE ‘11 Proceedings of the 2011 conference on Information technology education (s. 191-196). New York: Association for Computing Machinery. Federici, S., & Stern, L. (2011). A Constructionist Approach to Computer Science. A Constructionist Approach to Computer Science (s. 1352-1361). Melbourne: Association for the Advancement of Computing in Education. Geertsen, H. V. (2016). Tool for Transitioning from Scratch to Python. Aalborg University. Harvey, B., & Möning, J. (2010). Bringing ‘No Ceiling’ to Scratch: Can One Language Serve Kids and Computer Scientist? In proceedings of Constructionism 2010. Paris. Hvorecky, J. (1992). Karel the Robot for PC. Proceedings of East-West Conference on Emerging Computer Technologies in Education (s. 157-160). Moscow: Edited by P. Brusilovsky and V. Stefanuk. Joint Task Force on Computer Engineering Curricula. (2016). Curriculum Guidelines for Undergraduate Degree Programs in Computer Engineering. IEEE Computer Society/Association for Computing Machinery. Joint Task Force on Computing Curricula. (2001). Computing Curricula 2001 Computer Science. IEEE Computer Society/Association for Computing Machinery. Kay, J., & Tyler, P. (1992). A Microworld for Developing Learning Design Strategies. Computer Science Education, 111-122. Metin Tabanlı Programlama 293 Klopfer, E., Osterweil, S., & Salen, K. (2009). The Education Arcade. Massachusetts Institute of Technology. Kölling, M. (1999). The Problem of Teaching Object-oriented Programming Part I: Languages. Journal of Object-Oriented Programming, 8-15. Kölling, M. (2016). Lessons from the Design of Three Educational Programming Environments: Blue, BlueJ and Greenfoot. International Journal of People Oriented Programming, 5-32. Lewis, C. M. (2010). How programming environment shapes perception, learning and goals: logo vs. scratch. SIGCSE ‘10 Proceedings of the 41st ACM technical symposium on Computer science education (s. 346-350). New York: Association for Computing Machinery. Lister, R., Berglund, A., Clear, T., Bergin, J., Garvin-Doxas, K., Hanks, B., . . . Whalley, J. L. (2006). Research Perspectives on the Objects-Early Debate. ITiCSE-WGR ‘06 Working group reports on ITiCSE on Innovation and technology in computer science education (s. 146-165). Bologna: ACM. Logo Foundation. (2017, 10 1). Logo and Learning. Logo Foundation: http://el.media.mit.edu/ logo-foundation/what_is_logo/logo_and_learning.html adresinden alındı Logo Foundation. (2017, 07 20). Logo History. Logo Foundation: http://el.media.mit.edu/logofoundation/what_is_logo/history.html adresinden alındı Matematicamente.it. (2014, 8 29). Matematica C3 Algebra DOLCE 1, Testo per il primo biennio della Scuola Secondaria di II grado. Matematicamente.it: https://www.matematicamente.it/ staticfiles/manuali-cc/algebra1_dolce_1ed.pdf adresinden alındı Meerbaum-Salant, O., Armoni, M., & Ben-Ari, M. (2011). Habits of programming in scratch. ITiCSE ‘11 Proceedings of the 16th annual joint conference on Innovation and technology in computer science education (s. 168-172). New York: Association for Computing Machinery. Olimpo, G. (1988). The Robot Brothers: An environment for learning parallel programming oriented to computer education. Computers and Education, 113-118. Papert, S. (1971). A Computer for Elementary School. Massachusetts: Massachusetts Instıtute of Technology Artificial Intelliggence Laboratory. Papert, S. (1980). Mindstorms: Children, Computers, and Powerful Ideas. New York: Basic Books Inc. Parsons, D., & Haden, P. (2007). Programming Osmosis: Knowledge Transfer from Imperative to Visual Programming Environments. NACCQ 2007 20th Annual Conference of the National Advisory Committee on Computing Classifications. Pattis, R., Roberts, J., & Stehlik, M. (1995). Karel - the robot, a gentle introduction to the art of programming (Second ed.). New York: Wiley. Power, K., Ecott, S., & Hirshfield, L. (2007). Through the looking glass: Teaching CS0 with Alice. Proceedings of the 38th SIGCSE technical symposium on Computer science education (s. 213-217). New York: Association for Computing Machinery. 294 Bilgi İşlemsel Düşünmeden Programlamaya Powers, K., Ecott, S., & Hisrhfield, L. (2007). Through the Looking Glass: Teaching CS0 with Alice. SIGCSE ‘07 Proceedings of the 38th SIGCSE technical symposium on Computer science education (s. 213-217). New York: Association for Computing Machinery. Price, E. (2017, 08 24). Begining Microsoft Small Basic. Microsoft TechNet: https://social.technet.microsoft.com/wiki/contents/articles/16766.beginning-microsoft-small-basic.aspx adresinden alındı Raadt, M. d. (2008). Teaching Programming Strategies Explicitly to Novice Programmers. University of Southern Queensland. Ragonis, N., & Ben-Ari, M. (2005). A long-term investigation of the comprehension of OOP concepts by novices. Computer Science Education, 203-221. Roberts, E. (2001). An overview of MiniJava. Proceedings of the thirty-second SIGCSE technical symposium on Computer Science Education (s. 1-5). North Carolina: Association for Computing Machinery. Robins, A., Rountree, J., & Rountree, N. (2003). Learning and Teaching Programming: A Review and Discussion. Computer Science Education, 137-172. Rossum, G. V. (2017, 08 10). Computer Programming for Everybody. Python: https://www. python.org/doc/essays/cp4e/ adresinden alındı Vujosevic-Janicic, M., & Tosic, D. (2008). The Role of Programming Paradigms In The First Programming Courses. The Teaching of Mathematics, 63-83. Weintrop, D., & Wilensky, U. (2015). To block or not to block, that is the question: students’ perceptions of blocks-based programming. IDC ‘15 Proceedings of the 14th International Conference on Interaction Design and Children (s. 199-208). New York: Association for Computing Machinery. Wing, J. M. (2006). Computational Thinking. Communications of the ACM, 33-35. Winthrop, R., & McGivney, E. (2016). Skills for a Changing World: Advancing Quality Learning for Vibrant Societies. LEGO Foundation. Xuelian, H. (2009). The design, implementation and application of MiniJava/AD as an objectoriented compiler teaching model. 4th International Conference on Computer Science & Education (s. 1488-1491). IEEE.