February 23, 2024

שפת תכנות ראשונה - פייתון או ג'אווה-סקריפט?

השפה הראשונה

מאנשים רבים וגם מסטטיסטיקה העולמית יש שתי שפות שמככבות בפופולריות שלהן.
מתכנתים רבים לומדים אחת מהן בתור שפה ראשונה - JavaScript, Python.

ראש בראש - מה כדאי לי ללמוד כשפה ראשונה?

רוצים לקפוץ אל התוצאה?

שפות תכנות

שפות תכנות אלו כלים העוזרים לנו לבנות מערכות תוכנה.
מערכות תוכנה אלו מערכות מובנות אשר מסייעות לנו כאנשים לבצע פעולות באופן מהיר יותר ואף ללא צורך בהתערבות אנושית.

השפה הראשונה שלי - הקלות ללמוד עקרונות תכנות

באקדמיה לומדים את שפת C או C++ כשפה ראשונה.
לרוב רוצים ללמד את עקרונות התכנות ברמה הנמוכה - להכיר מה זה פויינטרים, איך לממש אלגוריתמים לבדנו ולא להסתמך על ספריות כתובות מראש.
אם כן למה האקדמיה בכלל לא מלמדת אותן כשפה ראשונה?
ובכן זה תלוי בהרבה גורמים, בנוסף באיזה קורסים אתם לוקחים ולאיזו אקדמיה אתם ניגשים.

לכן אנסח את העקרון הראשון שלי לשפה ראשונה -

השפה הראשונה שלכם צריכה ללמד אתכם את עקרונות התכנות בקלות ויעילות.

די, הבנו את הפויינטרים וכמה זה נחמד לבצע maloc ו-free בשפת C.
אבל זה קשה.
כמות התלמידים שנתקלתי בהן מתקשים בחומרים האלו רק כי קורסים או מורים מסוימים מחליטים להישאר לא מעודכנים.

גם בג’אווה-סקריפט וגם בפייתון הקלות והיעילות שאתם לומדים עקרונות היא מהירה.
בקטגוריה לכמה קל ללמוד עקרונות תוכנה שתי השפות מקבלות אצלי 5.

Javascript - ⭐⭐⭐⭐⭐
python - ⭐⭐⭐⭐⭐

תחביר

לא סתם קוראים לזה “שפת תכנות”.
בכל שפה יש חוקים, בכל שפה יש תחביר.

הגדרה של משתנים

python:

1
numberOfApples = 3

javascript:

1
2
3
4
5
// ישן: 
var numOfApples = 3;
// חדש יותר:
let numOfApples = 3;
const numOfApples = 3;

מצד אחד בפייתון זה נורא פשוט - מגדירים שם ומאתחיל אותו עם ערך.
אבל בג’אווה-סקריפט יש 2 ניואנסים:

  • יש לנו את האפשרות להגדיר משתנה קבוע בעזרת const.
  • יש לנו בלבול בשימוש בין var ל-let וזה משהו שמגדיל את זמן הלמידה למתחילים.

הציון שלי:

Javascript - ⭐⭐⭐
python - ⭐⭐⭐⭐

סולמות ונחשים

בפייתון אנחנו מגדירים Scope בעזרת הזחות - רווחים או טאבים.
בג’אווהסקריפט אנחנו משתמשים בתחביר דומה לשפת C - סוגריים מסולסלות.

python:

1
2
3
4
def myFunc():
pass

myFunc = lambda x : pass

javascript:

1
2
3
4
5
6
7
8
function myFunc(){

}

// או
const myFunc = ()=> {

}

בסופו של יום זה נתון מאוד לסטייל אישי ולא כל כך משנה.
למתחילים זה בהחלט לא יישנה יותר מדי.

Javascript - ⭐⭐⭐⭐⭐
python - ⭐⭐⭐⭐⭐

  • יש לכם דעה אחרת? מוזמנים לומר לי בדיסקורד!
שרת דיסקורד SimplyCode

תכנות מונחה עצמים

תכנות מונחה עצמים זה קורס בפני עצמו - את עקרונתיות המנחים ניתן ללמוד בשתי השפות אך שתי השפות עושות שימוש גם מחוץ למונחה עצמים.

בסיס השפה - מונחה עצמים או פונקציות

ג’אווה-סקריפט זוהי שפה הנבנתה עם אוריינטציה תוכנתית לפונקציות.
לאחר שהשפה צברה תאוצה ורבים החלו להשתמש בה מעבר למצופה - היא החלה להוסיף תמיכה בתכנות מונחה עצמים.

התמיכה הראשונה שלה התבטאה בשמירת מצב בתוך הפונקציה עם המילה השמורה this.
כך למעשה נוצר ה-constructor function.

1
2
3
4
5
6
function Person(name, age){
this.name = name;
this.age = age;
}

let p = new Person('Bob',42);

רק לאחר מכן נוסף התחביר המקל:

1
2
3
4
5
6
7
8
class Person{
constructor(name,age){
this.name = name;
this.age = age;
}
}

let p = new Person('Bob',42);

פייתון היא שפה דינאמית גם כן המנחה לשימוש באופן די חופשי במה שרוצים.
השפה המובנית והספריות המובנות לעיתים כתובים בצורה פונקציונלית.
למשל פונקציית האורך של רשימה:

1
2
myList = [1,2,3]
length = len(myList)

במקום:

1
2
myList =[1,2,3]
length = myList.length

בפייתון אין תחביר שונה למחלקות - זה בנוי לתוך השפה ואין לנו constructor function.

1
2
3
4
class Person:
def __init__(self, name, age):
self.name = name
self.age = age

באוריינטציה שלי השפות מקבלות אצלי:
Javascript - ⭐⭐⭐
python - ⭐⭐⭐⭐

ירושה

1
2
3
4
5
6
class ChildClass extends ParentClass {
constructor(name, age) {
super(name);
this.age = age;
}
}
1
2
3
4
class ChildClass(ParentClass):
def __init__(self, name, age):
super().__init__(name)
self.age = age

קיים הבדל מועט והקוד די זהה.

Javascript - ⭐⭐⭐⭐
python - ⭐⭐⭐⭐

כימוס

היכולת להסתיר מידע בתוך המחלקה.

בגרסאות החדשות של js הוסיפו את היכולת להוסיף משתנים פרטיים באמת:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class ClassWithPrivate {
#privateField;
#privateFieldWithInitializer = 42;

#privateMethod() {
// …
}

static #privateStaticField;
static #privateStaticFieldWithInitializer = 42;

static #privateStaticMethod() {
// …
}
}
1
2
3
4
5
6
class ClassWithPrivate:
def __init__(self,name):
self.__name = name

def __privateMethod(self):
pass

בפייתון אין באמת אפשרות להתגבר על גישה למידע - ניתן לשים _ או __ לפני השם.
זה אומר למפתחים שזהו משתנה פרטי ואין לגשת אליו מבחוץ.
בדרך כלל משתמשים רק ב-_ כי לרוב __ שמור לדברים פנימיים של פייתון ואין צורך לבלבל.

פייתון נכשלת בעניין הזה ו-js מקבלת רק 3 מכיוון שזהו קונספט שלא הכי קל למפתחים מתחילים ללמוד דרכו.

Javascript - ⭐⭐⭐
python - ⭐

אבסטרקציה

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
class AbstractClass {
constructor() {
if (new.target === AbstractClass) {
throw new Error("Cannot instantiate abstract class");
}
}

abstractMethod() {
throw new Error("Abstract method must be implemented");
}
}

class ConcreteClass extends AbstractClass {
abstractMethod() {
console.log("Implemented abstract method");
}
}


const obj = new ConcreteClass();
obj.abstractMethod();

ג’אווה-סקריפט איננה מאפשרת מתוך השפה להשתמש באסטרקציה אך ניתן ליצור אותה באופן די חופשי.
אין דרך “לעגן” את זה כחלק מה-API וקוד כמו זריקת שגיאה נחוצה אם רוצים להכריח חוקים מסוימים.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
from abc import ABC, abstractmethod

class AbstractClass(ABC):
@abstractmethod
def abstract_method(self):
pass

class ConcreteClass(AbstractClass):
def abstract_method(self):
print("Implemented abstract method")

obj = ConcreteClass()
obj.abstract_method()

בפייתון פתרו את הבעיה הזו בעזרת דקורטורים - נושא די מתקדם שלמתחילים לעיתים קשה להבין אותו.

הציון שלי:

Javascript - ⭐
python - ⭐⭐⭐

שימושיות

לשתי השפות יש שימושים רבים:

פיתוח אתרים ו-ווב

פייתון - ניתן להשתמש בספריות כמו Django ו-Flask.
ב-javascript זה די בנוי בפני עצמו, אך ניתן להשתמש בה לצד שרת גם כן: Express.js, bun flame.
מהניסיון שלי לשתי השפות יש גישה מאוד פרגמטית וקלה.

Javascript - ⭐⭐⭐⭐⭐
python - ⭐⭐⭐⭐⭐

לפיתוח למידת מכונה ותחום האינטליגנציה המלאכותית

Python: TensorFlow, PyTorch
Node.js: TensorFlow.js, Brain.js

לטעמי פייתון בנויה לדומיין הזה הרבה יותר טוב
Javascript - ⭐⭐⭐⭐
python - ⭐⭐⭐⭐⭐

Data Science and Data Analysis

Python: pandas, NumPy, Matplotlib
Node.js: DataScience, nodeplotlib

בדומיין פייתון מקבלת הרבה יותר פופולריות במיוחד בזכות pandas ו-NumPy.

Javascript - ⭐⭐⭐
python - ⭐⭐⭐⭐⭐

פיתוח דסקטופ

Python: PyQt, Tkinter, wxPython
Node.js: Electron (with web technologies)

שתי השפות לא הכי נוחות אם כי זה אפשרי, לפיתוח דקסטופ הייתי הולך בטכנולוגיות יותר .
PyQT ו-Electron די פעילות.
אפילו ה-VS Code כתוב באלקטרון.

Javascript - ⭐⭐⭐
python - ⭐⭐⭐

Game Development

Python: Pygame, Panda3D, Cocos2d
Node.js: Babylon.js, Three.js, Phaser

לא השפות הפרגמטיות במיוחד לפיתוח משחקים אם כי js בעזרת פורטים רבים של מנועי פיתוח וספריות פיתוח עשתה קאמבק מטורף.

Javascript - ⭐⭐⭐
python - ⭐⭐

Mobile Applications

Python: Kivy, BeeWare
Node.js: React Native (with JavaScript)

ג’אווהסקריפט הפכה את פיתוח המובייל להרבה יותר פשוטה וקלה.

Javascript - ⭐⭐⭐⭐⭐
python - ⭐⭐

IoT (Internet of Things)

Python: MicroPython, CircuitPython
Node.js: Johnny-Five

פיתוח בקרים נפוץ יותר בעזרת פייתון כאשר היא הפכה לפופולרית יותר בתחום ה-Embedded.

Javascript - ⭐
python - ⭐⭐⭐⭐

Web Scraping and Automation

Python: BeautifulSoup, Scrapy, Selenium
Node.js: Puppeteer, Cheerio

בשתי השפות ניתן לבצע אוטומציה די בקלות ואני לעיתים קופץ ביניהן בשביל אוטומציה.
אני יודע שפייתון יותר נפוצה באזורי האוטומציה כי קל יותר לפתח בה סקריפטים.

Javascript - ⭐⭐⭐⭐
python - ⭐⭐⭐⭐

Cloud Computing

Python: boto3 (AWS SDK), apache-libcloud
Node.js: aws-sdk, pkgcloud

תכנות לקלאוד נוח בשתי השפות

Javascript - ⭐⭐⭐⭐⭐
python - ⭐⭐⭐⭐⭐

API Development

Python: Django REST framework, Flask-RESTful
Node.js: Express.js, Restify

נוח לפתח בשתי השפות.

Javascript - ⭐⭐⭐⭐⭐
python - ⭐⭐⭐⭐⭐

סיכום

ציונים

קלות למידה:
Javascript - ⭐⭐⭐⭐⭐
python - ⭐⭐⭐⭐⭐

תחביר:
הגדרת משתנים
Javascript - ⭐⭐⭐
python - ⭐⭐⭐⭐

סולמות ונחשים
Javascript - ⭐⭐⭐⭐⭐
python - ⭐⭐⭐⭐⭐

תכנות מונחה עצמים -אוריינטציה
Javascript - ⭐⭐⭐
python - ⭐⭐⭐⭐

תמיכה בירושה
Javascript - ⭐⭐⭐⭐
python - ⭐⭐⭐⭐

כימוס:
Javascript - ⭐⭐⭐
python - ⭐

אבסטרקציה:
Javascript - ⭐
python - ⭐⭐⭐

שימושיות
פיתוח אתרים
Javascript - ⭐⭐⭐⭐⭐
python - ⭐⭐⭐⭐⭐

אינטליגציה מלאכותית
Javascript - ⭐⭐⭐⭐
python - ⭐⭐⭐⭐⭐

Data science
Javascript - ⭐⭐⭐
python - ⭐⭐⭐⭐⭐

פיתוח דקסטופ
Javascript - ⭐⭐⭐
python - ⭐⭐⭐

פיתוח משחקים
Javascript - ⭐⭐⭐
python - ⭐⭐

פיתוח מובייל:
Javascript - ⭐⭐⭐⭐⭐
python - ⭐⭐

פיתוח IOT:
Javascript - ⭐
python - ⭐⭐⭐⭐

אוטומציה:
Javascript - ⭐⭐⭐⭐
python - ⭐⭐⭐⭐

Cloud:

Javascript - ⭐⭐⭐⭐⭐
python - ⭐⭐⭐⭐⭐

API:
Javascript - ⭐⭐⭐⭐⭐
python - ⭐⭐⭐⭐⭐

הציון הסופי

הציון המקסימלי ביותר יכול להיות 85.
הציון נקבע לפי כמות הכוכבים שהשפה אספה.
מתוך זה מחולק בציון המקסימלי ואז יוצא מספר בין 1 ל 100.

Javascript = 62/85 = 72

Python = 66/85 = 77


המנצחת היא - Python.

אם אתם בוחרים ללמוד JavaScript זה לא אומר שעשיתם בחירה לא טובה אלה העדפתם את השפה הזו.
לשתי השפות הקנתי ציון די זהה - בין 70-80.

השפות אולי יעילות ללמידה אך לא בכל תחום הן יעילות וקיימים שכבות רבות של חוסר היגיון בשפות.
בין אם זה האוריינטציה הפחות טובה של פייתון לתכנות מונחה עצמים,
או חוסר היכולת של ג’אווה-סקריפט למגר API לפני רצון המפתח.

מה שלא בחרתם - בהצלחה ותודה על הקריאה!

על הפוסט

הפוסט נכתב על ידי Ilya, רישיון על ידי CC BY-NC-ND 4.0.

שתפו את הפוסט

Email Facebook Linkedin Print

קנו לי קפה