لقد عملت كمطور للواجهة الأمامية لأكثر من 8 سنوات، وفي العامين الماضيين، قررت إعادة التفكير في مسيرتي المهنية وكيف يمكنني النمو. لقد وجدت أن تكنولوجيا الواجهة الأمامية تتغير بشكل متكرر: أطر عمل ومفاهيم مختلفة والفجوة بين مكونات فئة React والخطافات. أدركت أن كل هذا مجرد فكرة مجردة تستخدم للتعبير عن احتياجات العمل والرؤية الشخصية. من هذه النقطة، قررت تغيير مسار حياتي المهنية وأن أصبح مطورًا متكاملاً قليلاً.
كما نعلم جميعًا، يتمحور تطوير الواجهة الأمامية حول JavaScript في الوقت الحاضر، ولهذا السبب قررت أن أتعلم Node.js وأطره الرئيسية. يواجه جميع مطوري الواجهة الأمامية Node.js بطريقة أو بأخرى، وباعتبارك أحد كبار مطوري الواجهة الأمامية، يجب أن تكون قادرًا على كتابة نقاط النهاية الأساسية في Node.js باستخدام Express أو مكتبة أخرى. بعد عامين من التطوير النشط على جانب Node.js، عندما أصبحت وظيفتي 50/50 بين الواجهة الأمامية والخلفية، اكتشفت أن معظم المشاريع لا تقتصر على لغة واحدة فقط.
Node.js ليست الأداة المثالية لكل شيء، خاصة عندما تعمل في شركة أكبر. توفر اللغات المختلفة حلولاً مختلفة أو تكون أكثر مثالية لحل حالات عمل محددة. ولهذا السبب بدأت البحث عما يمكنني تعلمه كلغة خلفية ثانية وكيف يمكنني الاستفادة منها في المستقبل.
أريد أن أشارك تجربتي ولماذا قررت الاستمرار في لغة Python بعد محاولتي تعلم Rust (في الغالب ليس لتطوير الويب)، وSwift (الذي يعد في الأساس حلًا للجوال أولاً)، وGolang. هنا، ستكتشف لماذا أعتقد أن بايثون هي فرصة عظيمة لمطوري الواجهة الأمامية للتعلم وكيفية البدء في استخدامها.
في الوقت الحاضر، الذكاء الاصطناعي هو شيء يتحدث عنه الجميع. إن ذكر ذلك في المقابلة كجزء من تجربتك يمنحك دائمًا نقاطًا إضافية. تحاول جميع الشركات تقريبًا دمج الذكاء الاصطناعي في منتجاتها، وتسير لغة بايثون جنبًا إلى جنب مع الذكاء الاصطناعي والتعلم الآلي. من خلال تعلم لغة Python، لن تتاح لك الفرصة لكتابة تطبيقات الويب باستخدام أطر عمل مثل Django وFlask وFastAPI فحسب، بل يمكنك أيضًا البدء في العمل مع خدمات التعلم الآلي والذكاء الاصطناعي.
من ناحية، يعد تعلم لغات أكثر تعقيدًا مثل Rust أو Go أو Elixir فكرة جيدة إذا كنت تريد أن تصبح مبرمجًا أفضل. ومع ذلك، من وجهة نظر مهنية، ليس من السهل الانتقال إلى أن تصبح مطورًا للواجهة الخلفية بلغة مختلفة تمامًا لا تعرفها كثيرًا.
بايثون هي لغة برمجة مكتوبة ديناميكيًا. باعتبارك مطور JavaScript قضى جزءًا كبيرًا من حياتك المهنية في بيئة مماثلة، لا ينبغي أن يخيفك هذا، لأنك تعرف بالفعل أنواع المشكلات التي يمكن توقعها في التعليمات البرمجية.
مع بايثون، لا يمكنك البدء في كتابة تطبيقات الويب فحسب، بل يمكنك أيضًا الاستفادة من مهاراتك في المجالات المرتبطة بالذكاء الاصطناعي، مما يمنح بايثون ميزة كبيرة كلغة ثانية.
كان منحنى التعلم واضحًا ومباشرًا. في بايثون، تحتاج إلى تعلم بعض المفاهيم الأساسية بالتأكيد. إذا كانت لديك خبرة في التعامل مع جافا سكريبت، فلا ينبغي أن يكون ذلك مشكلة كبيرة.
إليك مثال الكود في بايثون:
import random def guess_the_number(): number_to_guess = random.randint(1, 100) attempts = 0 guessed = False print("Welcome to the Number Guessing Game!") print("I'm thinking of a number between 1 and 100. Can you guess what it is?") while not guessed: user_guess = int(input("Enter your guess: ")) attempts = 1 if user_guess number_to_guess: print("Too high! Try again.") else: print(f"Congratulations! You guessed the number {number_to_guess} in {attempts} attempts.") guessed = True guess_the_number()
لا أعتقد أنك ستجد أي شيء معقد للغاية هنا. حتى لو لم تكن قد تعلمت بايثون من قبل، فيمكنك فهم جميع السطور تقريبًا دون قراءة الوثائق.
أكبر فرق ستلاحظه هو أن بايثون تستخدم المسافة البادئة لتحديد كتل التعليمات البرمجية بدلاً من الأقواس المتعرجة. قد يبدو ذلك غريبًا، وما زلت أجده غير معتاد بعض الشيء، ولكن بعد فترة، تعتاد عليه، وتصبح قراءة التعليمات البرمجية أسهل.
بصرف النظر عن ذلك، فإن العديد من المفاهيم في بايثون تشبه تلك الموجودة في جافا سكريبت. بدلاً من console.log، يمكنك استخدام الطباعة، وبالنسبة لاستكمال السلسلة، يمكنك إضافة f في بداية السلسلة واستخدام نفس بناء الجملة تقريبًا كما في JavaScript.
إليك إصدار JavaScript من الكود أعلاه:
function guessTheNumber() { const numberToGuess = Math.floor(Math.random() * 100) 1; let attempts = 0; let guessed = false; console.log("Welcome to the Number Guessing Game!"); console.log("I'm thinking of a number between 1 and 100. Can you guess what it is?"); while (!guessed) { const userGuess = parseInt(prompt("Enter your guess: "), 10); attempts ; if (userGuess numberToGuess) { console.log("Too high! Try again."); } else { console.log(`Congratulations! You guessed the number ${numberToGuess} in ${attempts} attempts.`); guessed = true; } } } guessTheNumber();
يمكنك تعلم الكثير من المفاهيم المختلفة في بايثون. لقد أظهرت الأمر الأكثر إرباكًا بالنسبة لي كمطور جافا سكريبت.
باعتبارك مطور JavaScript، قد تكون على دراية بكيفية استخدام كتل التعليمات البرمجية مع if/else والمشغلين الآخرين. في معظم الحالات، ما عليك سوى إضافة {} وهذا كل شيء. يمكن أن يكون نظام بايثون القائم على المسافة البادئة أمرًا صعبًا.
دعونا نرى كود جافا سكريبت:
if (role === "admin") { const posts = getDraftPosts() if (posts.length === 0) { throw NotFound() } return posts }
تناظرية بايثون:
if role == "admin": posts = get_draft_posts() if posts.length == 0: raise NotFound() return posts
كما ترون فإن سهولة قراءة الكتل في بايثون قد تكون صعبة من النظرة الأولى. ولهذا السبب كان من المهم بالنسبة لي تجنب الكتل المتداخلة بشدة لأنه من الصعب قراءتها ومن السهل تفويت المسافة البادئة الصحيحة. ضع في اعتبارك أن بايثون قد تقوم بإرفاق التعليمات البرمجية الخاصة بك بمقطع تعليمات برمجية خاطئ بسبب عدم وجود مسافة بادئة.
بايثون هي لغة كتابة ديناميكية ولكنني فوجئت بالعثور على تعليق توضيحي مدمج للأنواع في بايثون.
def add(x: int, y: int) -> int: return x y
لا تحتاج إلى تثبيت ميزات إضافية، فقط ما تحتاجه في Python *3.5 وما فوق.*
يمكن وصف الأنواع الأكثر تعقيدًا بأنها مساوية لـ Typescript:
# enums from enum import Enum # import enum for built in lib class Season(Enum): # extend class to mark it as enum SPRING = 1 SUMMER = 2 AUTUMN = 3 WINTER = 4 print(Season.SPRING.name) # SPRING print(Season.SPRING.value) # 1 # or generics def first(container: List[T]) -> T: return container[0] list_two: List[int] = [1, 2, 3] print(first(list_two)) # 1
لاستخدام هذه الأنواع، لا يُطلب منك تثبيت شيء ما أو نقل هذا الرمز. هذا شيء فاتني في JavaScript، على الأقل Node.js. أعلم أن Node.js يضيف بعض الأنواع الأساسية في الإصدار الأقرب (راجع المنشور المتوسط حول دعم الأنواع المضمنة في Node.js) ولكنه يبدو سيئًا الآن إذا قارنته مع Python.
تستخدم جافا سكريبت نموذجًا يحركه الحدث وغير محظور، بينما يمكن أن يكون قفل المترجم العالمي (GIL) الخاص بـ Python مفهومًا مربكًا في البرامج متعددة الخيوط.
إن قفل Python Global Interpreter Lock (GIL) هو آلية تضمن تنفيذ مؤشر ترابط واحد فقط لتعليمات Python البرمجية في المرة الواحدة. حتى لو كان برنامج بايثون الخاص بك يحتوي على عدة سلاسل رسائل، فيمكن لخيط واحد فقط تنفيذ كود بايثون في المرة الواحدة بسبب GIL.
باستخدام JavaScript، يمكنك تحقيق تعدد العمليات مع العاملين على الويب، ولكن في Python، تحتاج إلى استخدام مكتبات إضافية لإنجاز ذلك.
فلسفة جافا سكريبت "الطرق المتعددة للقيام بذلك" لا تعمل بشكل جيد في بايثون لأن بايثون تلتزم بشكل أوثق بالمفهوم "يجب أن تكون هناك طريقة واحدة - ويفضل أن تكون طريقة واحدة فقط - واضحة للقيام بذلك."
في عالم جافا سكريبت، غالبًا ما تقوم كل شركة بإنشاء دليل نمط التعليمات البرمجية الخاص بها، ومن حسن الحظ أن تتبع توصيات نمط جافا سكريبت الأساسية. في الواقع، يمكن أن تختلف ممارسات مثل استخدام الفواصل المنقوطة بشكل كبير، لدرجة أن أحد المشاريع قد يستخدم الفواصل المنقوطة وقد لا يستخدمها مشروع آخر.
في بايثون، يوصى بشدة باتباع مبادئ بايثون من PEP 8 (دليل أسلوب بايثون). يوضح هذا الدليل القواعد الأساسية لكيفية كتابة كود بايثون.
لكتابة تعليمات برمجية أفضل، من الضروري التفاعل مع المجتمع وتعلم ممارسات بايثون الاصطلاحية التي تعطي الأولوية للوضوح والبساطة.
قد يكون هذا الجزء مربكًا أيضًا. في JavaScript، يمكنك عادةً إضافة مدير الحزم والبدء في تثبيت التبعيات دون أي مشاكل. ومع ذلك، قد تكون البيئات الافتراضية والبيئات الافتراضية في بايثون مفاهيم جديدة.
في بايثون، عند استخدام تبعيات إضافية، يوصى بشدة باستخدام بيئة افتراضية منفصلة. قد يؤدي تثبيت التبعيات باستخدام النقطة (ما يعادل Python لـ npm في JavaScript) في بيئتك إلى تعطيل الأدوات المساعدة للنظام أو نظام التشغيل نفسه، حيث يتم استخدام مترجم Python للنظام (الذي يأتي مثبتًا مسبقًا مع نظام التشغيل الخاص بك) بواسطة نظام التشغيل و أدوات مساعدة للنظام الأخرى.
كحل، يمكنك إنشاء بيئة افتراضية باستخدام وحدة venv:
python -m venv myenv myenv\Scripts\activate # for windows source myenv/bin/activate # for Mac
بعد دخولك إلى البيئة الافتراضية يمكنك تثبيت كافة التبعيات دون أي مشكلة أو خطر على بيئة الجذر الخاصة بك.
إن تعلم لغة جديدة يمثل تحديًا دائمًا. بدأت في تعلم أساسيات بايثون على منصة عبر الإنترنت، حيث أكملت أيضًا بعض المشاريع الصغيرة. هذه هي الخطة التي استخدمتها أثناء عملية التعلم:
يمكنك العثور على الكثير من المساعدة في مجتمعات Reddit أو خوادم Discord أثناء التعلم. أنا في الغالب من مستخدمي Reddit وأقترح العثور على مواقع Reddit فرعية لـ Python والإطار الذي تقرر استخدامه لتطبيقك الأول.
تذكر استخدام الوثائق الرسمية. في رأيي، يبدو الأمر مربكًا، وفي معظم الأوقات، أحاول العثور على مقالات ذات صلة إذا واجهت مشكلة في أحد المفاهيم.
تأكد من قراءة PEP 8 — دليل نمط كود بايثون، حيث يمكنك العثور على القواعد الأساسية حول كيفية كتابة كود بايثون.
بينما أفكر في رحلتي من مطور JavaScript إلى اعتناق لغة Python، لا أشعر بأي ندم. لقد فتح هذا التحول فرصًا مثيرة، لا سيما في مجالات الذكاء الاصطناعي والتعلم الآلي، والتي أستخدمها الآن على نطاق واسع في مشاريعي، وخاصة في الواجهة الخلفية.
وبالنظر إلى المستقبل، فإن الاحتمالات مع بايثون واسعة. سواء كان الأمر يتعلق بتطوير الويب، أو علوم البيانات، أو الأتمتة، أو التعمق في الذكاء الاصطناعي والتعلم الآلي، توفر لغة Python أساسًا قويًا ومتعدد الاستخدامات للبناء عليه واستكشاف آفاق جديدة.
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3