Örgün eğitimde böyle bir yöntem yok ama, örneğin MIT algoritmalara giriş (6.006) dersi için; "A firm grasp of Python (6.001) and a solid background in discrete mathematics are necessary prerequisites to this course. You are expected to have mastered the material presented in 6.01 (Introduction to EECS I) and 6.042J/18.062J (Mathematics for Computer Science)." şeklinde bir beyanı var, aynı şekilde ITU ve ODTU CS programında da önce programlama dili ve matematik veriliyor ardından algoritmalara giriş dersi veriliyor.
Bunun dışında önce algoritma dersi verilip sonra programlama dilinin öğretildiği bir eğitim modeline ben rastlamadım.
6.006 alabilmek için önce 6.001 dersi alınması gerekiyor diye geçiyor. Algoritma öğretmeden python nasıl öğretiyorlarmış diye internetteki ders başlıklarına, slaytlarına göz attım,
MIT6_0001F16_Welcome | Introduction to Computer Science and Programming in Python | Electrical Engineering and Computer Science | MIT OpenCourseWare
Mesela ona önce programın işleyişi anlatılır bu diller için örnek verirsem; main method var, class diye bir yapı var, değişken diye bişey var classlar onu tutuyor, programı run edince main çalışıyor, bak burada tanımlama yapılıyo, burada şu import ediliyo vs. bu da compilerın çalışma algoritmasıdır (bir kısmıdır tabi).
Benim bu dediğim doğrultuda, bir bilgisayar nasıl çalışırdan, memory, ALU, interpreter vb. nedirden girmiş,
Şöyle örnek vereyim, annelerimiz pek çok tarif bilirler, biz bilmeyiz. Bunlara algoritma diyebiliriz, yemek yapmanın temeli olan soğanı küp küp ya da yarımay şeklinde doğrama gibi şeyler temel algoritma olsun, yemeğin içinde neyin hangi sırayla konacağı ya da etin kaç dakika fırında, sosunun kaç dakika ocakta pişeceği, nasıl karıştırılacağı vb. diğer bilgiler de ileri algoritma olsun.
Benim gene bu tarife benzetmem doğrultusunda,
WHAT IS A RECIPE
1) sequence of simple steps
2) flow of control process that specifies when each
step is executed
3) a means of determining when to stop
1+2+3 = an algorithm!
diye algoritma nedir diye anlatmaya devam etmiş. Bir programlama dili nedir, program nedir vb. derken python a giriş yapmış.
Değişken tiplerini öğrenirken neden int diye bir değişken var diye sorguladığınız anda (çünkü stringleri toplayamayız, int memoryde böyle tutulur, binary olarak iki sayı böyle toplanır, eğer virgüllü sayı lazım ise float kullanırız vb.) işin algoritmasına (istenen şey/düzeltilmesi gereken sorun -> çözüm yolu) giriş yapmış oluyoruz, bu temel kavramları öğrenmek için algoritma da bilmemiz gerekiyor yani, aksi durumda bu dil öğrenmek olmuyor.
Primitiflerden başlamış, tip çevrimi, operatörler, expression nedir vb. diye devam etmiş. Anlatırken öncelikle bunu pythondan bağımsız olarak anlatıyor benim baktığım slaytlarda, yani
a programming language provides a set of primitive
operations
expressions are complex but legal combinations of
primitives in a programming language
expressions and computations have values and
meanings in a programming language
şeklinde, herhangi bir programlama dili için anlatıyor. Pyhtonu ise araç olarak kullanıyor, bakın gerçek hayatta bir sorunu böyle çözeriz, programlama dilinde ise böyle böyle yapmamız lazım diye anlatıp sonrasında python kodunu veriyor.
PROGRAMMING vs MATH
in programming, you do not “solve for x”
pi = 3.14159
radius = 2.2
# area of circle
area = pi*(radius**2)
radius = radius+1
Bu dediklerim linkteki ilk slaytta. Diğer slaytlara kısaca bakıyorum, mesela for loop, while loop gösterip farklarını anlatmış, bu pythona mahsus olan bir şey değil, bir algoritma kurulacağı zaman hangi durumda hangisini kullanmak daha iyi olur şeklinde bir bilgidir. Arada sadece python syntaxı, indent kullanımı gibi pythona mahsus ek bilgiler ekliyor.
STRINGS AND LOOPS
these two code snippets do the same thing
bottom one is more “
pythonic”
s = "abcdefgh"
for index in range(len(s)):
if s[index] == 'i' or s[index] == 'u':
print("There is an i or u")
for char in s:
if char == 'i' or char == 'u':
print("There is an i or u")
Pythonda sayılar yerine değerler üzerinden de iterasyon yapılabilir diye ek bilgi veriyor burada mesela. Ancak öncesinde öğrettiği şey python değil, döngü nedir, nasıl çalışır, ne işe yarar bilgisi. Abstraction nedir, neden modüllere ayırıp kod yazılmalı, black box nedir, method nedir, attribute nedir vb. diye anlatıyor ama önce mantığı anlatıyor yani.
WHAT IS RECURSION?
§ Algorithmically: a way to design soluSons to problems
by divide-and-conquer or decrease-and-conquer
◦ reduce a problem to simpler versions of the same
problem
§ SemanScally: a programming technique where a
func0on calls itself
◦ in programming, goal is to NOT have infinite recursion
◦ must have 1 or more base cases that are easy to solve
◦ must solve the same problem on some other input with the goal
of simplifying the larger problem input
Bu dersin içeriği algoritma eğitimini kapsamaktadır. Bizim gördüğümüz o algoritma ve programlamaya giriş dersi içeriği de aşağı yukarı böyleydi, her programlama dilinde mevcut olan şeyleri anlatmak, seçili olan dili kullanarak olayı anlatmak, sonrasında da
TOWERS OF HANOI
§ The story:
◦ 3 tall spikes
◦ Stack of 64 different sized discs – start on one spike
◦ Need to move stack to second spike (at which point
universe ends)
◦ Can only move one disc at a Sme, and a larger disc can
never cover up a small disc
gibi, öğrendiğimizi anladık mı? O zaman alın size bir problem, çözüm için algoritma oluşturun şeklinde uygulama. Biz bu dersi Quickbasic diye oop bile olmayan, hiçbir yerde kullanılabilirliği olmayan, antika ama algoritma öğretmek için yeterince basit bir dil ile almıştık epey önce, dili hatırlamıyorum bile şimdi ama algoritma kurmayı öğretmişti.
WANT TO UNDERSTAND
EFFICIENCY OF PROGRAMS
Challenges in understanding efficiency of soluAon to a
computaAonal problem:
§ a program can be implemented in many different
ways
§ you can solve a problem using only a handful of
different algorithms
§ would like to separate choices of implementaAon
from choices of more abstract algorithm
6.001 dersinin içeriğini "python öğretiliyor işte" diye ifade etmek çok yanlış olur. Siz diğer algoritmalara hakimsiniz, bu bilgiler size çok basit geliyor, siz bu ders içeriğini algoritma olarak görmüyorsunuz ancak bu algoritmadır, temelin temelidir. Algoritma dersinin içeriği bubble sort ile başlar diyemeyiz, bunlarla başlar.
(Mesaj çok uzun olduğu için 2ye bölmem gerekti)
ITU ve ODTU ders içeriklerine de göz attım,
Burada mesela 1. sene 1. dönem derslerinden mühendislik matematiği dersleri harici bölüm derslerine bakarsanız
CENG111 INTRODUCTION TO COMPUTER ENG. CONCEPTS
-
- Identify the types of computation and describe digital computation in detail.
-
- Design simple combination circuits for simple computational problems.
-
- Outline the concepts of the Von Neumann Architecture and the Turing Machine, and describe how a modern computer relates to them.
-
- Understand and use how information is represented in a modern computer and how instructions are executed.
-
- Describe the types of programming languages, and the paradigms.
-
- Understand the concept of basic data types, such as int, float, bool as well as container data types, such as list, tuple, string.
-
- Differentiate computational evaluation of expressions from mathematical evaluation due to concepts such as overflow, side-effect, and truncation.
-
- Understand and apply structured programming concepts by elaborating on sequential, selective, repetitive structures, such as statements, if/switch/case statements, for/while statements and functions.
-
- Interpret a computational problem specification and algorithmic solution and implement a solution in Python to solve that problem.
Format bu şekilde yani, python kelimesini son cümlenin sonlarında görüyoruz:
Starting with the history and basic theoretical aspects of computers and computing, this course provides students with basic knowledge of how computers work, how they can represent data, how algorithms can be developed and analyzed, and how they can be programmed to solve various tasks. Python is used as the primary programming language to illustrate various concepts.
Python bu bilgileri illüstre etmek için kullanılan dil sadece, algoritmik solution üretin, bunun için de python kullanın deniyor. İkinci dönemde C öğretiliyor, dersin adı C programming yani, C öğrenimine geçmeden önce bütün bu konseptin öğrenilmesi gerekiyor, programlama dili sonra.
ITU için benzer durum söz konusu
İTÜ Öğrenci İşleri Daire Başkanlığı
www.sis.itu.edu.tr
İlk önce
BLG 101E
Intr. to Information Systems
Dersin Amaçları: Temel bilgisayar bilgileri: donanım, yazılım, işletim sistemi, dosya sistemi, karakter kümesi, üstveri. Belgeler ve web sayfaları: içerik, yapı, biçim. Görüntü işleme: bit eşleme, vektör çizimleri. Veri işleme: çizelgeleme. Programlamaya giriş: temel yapılar, denetim akışı, bileşke veri tipleri, yordam soyutlaması. Çağdaş araçlarla uygulama geliştirmenin temelleri.
Dersin Çıktıları: Bir bilgisayarın genel çalışma yapısını bilmek.
Çağdaş belge hazırlama yöntemlerini uygulayabilmek.
Bir web sitesi hazırlayabilmek ve erişilir hale getirebilmek.
Temel programlama teknikleriyle tanışık olmak.
Küçük bir web uygulaması geliştirebilmek.
dersi ile 2. yarıyıldaki
BLG 102E
Intr to Sci&Eng Comp (C)
dersine girizgah yapılıyor. Bu dersin içeriği de C dili öğretme odaklı değil:
Dersin Amaçları: Öğrencileri komuta dayalı programlama yaklaşımıyla bilgisayar programlamaya başlatma.
Öğrencilere mühendislik uygulamalarında genelde ihtiyaç duyulan temel programlama tekniklerini ve sayısal yöntemleri öğretme.
Dersin Çıktıları: Bir algoritma geliştirerek bilgisayar programı yardımıyla bir problemi çözmek için modellemek.
Küçük ve orta ölçekli bilgisayar programlarını tasarlayabilmek, gerçekleyebilmek ve sınayabilmek.
C programlama dili için geliştirme araçlarıyla
tanışıklık edinmek.
Temel programlama tekniklerine hakim olmak.
Temel sayısal problemleri ve çözümleriyle tanışıklık edinmek.
Copy paste copy paste derken baya uzun ve karışık oldu, kusura bakmayın ama siz anlatmak istediğimi anladınız diye düşünüyorum, önce bilgisayar nasıl çalışır, programlama nedir, temel algoritma gelir, dil ise bu bilgilerden sonra gelir, üni. eğitimlerinde de bu yol izleniyor tezimi savunuyorum.