من فتره كان عندنا مشكله في طلب الغدا في الشغل
و المشكله هي، مين يطلب النهارده، و خصوصا ان المجموعه اللي بتطلب الأكل كل يوم مش ثابته.
المهم المشكله دي كانت بتسبب تأخير الطلب بشكل كبير، عقبال ما نرسى على مين هيطلب
لو أنت شاطر ... وواقف مكانك .. اعرف انت عندك مشكله في ال soft skills
الشاطر اللي عنده soft skills كويسه ... موجود في حته تانيه ... و دول قليلييييين جدا 😆
هل سمعت قبل كده عن طريقة في الاداره اسمها "البطاطس السخنه"
بيقولك لما الناس يكونو قاعدين بيشوي بطاطس في النار ... أول ما تطلع بتكون سخنه جدا فبيفضلو يرموها على بعض من ايد واحد لإيد التاني لحد ما تبرد ... 😄
حقيقي الشطاره في السوفتوير ملهاش مقياس واحد
فيه ناس تفكر كويس جدا
و ناس بتستخدم ال tools كويس جدا
و ناس بتكتب كود نضيف
و فيه ناس بتنظم وقتها و بتنجز
اكتر ناس شوفتها هي اللي بتفكر كويس و عندها مشاكل في كتابة الكود او استخدام الكود او مش بتنجز
بس أهم مقياس اشوفه هو الانجاز...
و اخيرا عاوز اقول ان البوت موجود على ال github لو حابب تاخده تعمله ديبلوي في اي مكان
ده لينك البوت على ال github فيها طريقة تشغيله (انا مشغله على وتقريبا مش بيكلفني حاجه شهريا)
و ده لينك المكتبه telebot
فصل النزاع في أنواع الأنواع
فيه ناس بتتلخبط في ال type system (و هو أصلا موضوع فيه كلام) و عشان كده هتكلم بشكل بسيط و سريع
مبدأيا فيه 2 dimensions للأنواع (static vs dynamic و strong vs weak)
نبدأ ....
سألت gemini و chatgpt نفس السؤال
ال chatgpt بدأ في كتابة كود في الغالب مش أحسن حاجه و بيستخدم طرق قديمه(xml)
اما gemini بدأ بعرض الأفكار بشكل مرتبه، و الأهم من كده الجزء اللي في الآخر اللي بيتكلم فيه عن المشاكل اللي ممكن تحصل(كأنه بيقولك عيد التفكير)
1 gemini
0 chatgpt
أكتر موقع فيدوهات تاخد منه و انت مغمض هو Pluralsight
طريقة شرحهم و تفصيلهم كويسه و عندهم مستوى كويس مبينزلوش عنه...
مشكلتهم الوحيده إنه الناس هناك كلها خلفيتها .net ....
حتى لو بيشرحلك علوم الفضاء ... هتلاقيه بيربط الموضوع بالفيجوال ستوديو و بالسي شارب 😂
في بداية تعلمنا للبرمجه .. اتعلمنا إن فيه حاجتين مهمين محتاجين نعرفهم و نفرق بينهم ... و هما ال statement و ال expression
إيه الفرق بينهم؟
طبقا ل Wikipedia:
Statements are executed, expressions are evaluated
#رحلتي_مع_الإكسير
الحاجه العجيبه اللي بشوفها في بايثون، ان الدنيا عندهم بسييطه لدرجة حتى ان ال dependencies file اسمه requirements.txt
انت متخيل مش .yaml ولا .json ولا.gradle ولا .toml
لا ده .txt، تحسه كده زكريا بتاع مسلسل اللعبه في نفسه 😂
عشان نحل المشكله دي، فكرت لو عملنا بوت يختار اسم بشكل عشوائي كل يوم، و بكده يريحنا من الحيره دي، و خصوصا أنا قبل كده كنت جربت أعمل شات بوت في تليجرام (عشان يبعتلي رساله في حال ان احد المواقع اللي كنت شغال عليها حصل فيه مشاكل ما) و الموضوع كان سهل
للاسف النترفيو عمره ما بيكون مقياس لإنتاجية الشخص و حماسه
هو ممكن يقيس معرفته
كم من مره ناس كانت مقفله الانترفيو ..و لما يتعين يكون "عادي"
و ناس تانيه تكون عدت الانترفيو بدرجة اقل (بالعافيه) و لكن لما يشتغل بينور المكان بمجهوده و مقدرته على حل المشاكل
حصر مهارات ال problem solving على استخدام ال data structure و ال algo و حل مسائل ال leetcode أو غيره هو تبسيط مخل بالمعنى الحقيقي.
ال problem solving هي منهجية حل المشاكل عن طريق فهمها و تحليلها و الوصول للحل المناسب للمشكله، الموضوع مرتبط بالتفكير المنطقي أكتر من أي حاجه تانيه!
في الغالب... الشغل في ال startups يكون له متعه اكثر من الشغل ال big enterprises ...
و تقنيات ال startups ايضا تختلف عن تقنيات ال big enterprises
ففي الشركات الكبري يتجه التقنيين لاستخدام التكنولوجيا القديمه و المعروفه .... على عكس ال startups التي تستخدم كل ماهو جديد
أنا اكتر حاجه تهمني ف الشخص اللي بعملّه انترفيو انه يكون عارف الي عارفه بتعمّق و مهتم بالوصول للتفاصيل .... بغض النظر عن الحاجه اللي هو عارفها ...
يعني مثلا لو عاوز أعين java dev ... و قدامي شخصين ... شخص يعرف ال java معرفه سطحيه و فقط.. و شخص تاني متعمق مثلا في ruby ....
اول خطوه هي اننا كنا محتاجين ننقل جروب الغدا من الواتساب لتليجرام
بعد كده روحت أنشأت بوت في تليجرام عن طريق ال
@TelegramBot
و الموضوع مش بياخد أكتر من دقيقتين
لو أنت مهتم بال concurrency بشكل عام ... مش شرط java concurrency ... أنصحك تبص على اللينك ده
بيتكلم بشكل جميل و مبسط على مدرستين موجودتين على الساحه
مدرسة thread-per-thread (زي جافا و golang و غيرهم )
و مدرسة ال thread-sharing (زي .net -مؤخرا؟- و js )
عاش و الله 👏
أنا قربت أصلا اصدق ان ال css ده عباره عن علم زائف (Pseudoscience) و فاضلي شعره و افتكره سحر و شعوذه
هوا الحاجات دي فعلا بتتفهم و ليها طريقه ... ولا الواحد يقعد يبحث ويرزع في اي properties لحد ما تيجي معاه 😄
ال python من اللغات ال dynamic بطريقه تسمحلك تعامل ال code as data او data as code بطريقه مباشره و سهله
و ال code as data معناها انك تقدر تقرأ الكود كأنه data و ده مستوى الوحش من ال reflection
و ال data as code بالظبط زي ما ال groovy بتستخدم عشان نكتب بيها gradle و Jenkinsfile
زمان ... أول ما اشتغلت ... كنت بستغرب لما ألاقي الشركه اللي انا شغال فيها و فيها مبرمجين يسدو عين الشمس... تروح تعمل outsource لل portal بتاعها لشركه تانيه...
مع الوقت فهمت إنه بحساب المكسب و الخساره .. فاحيانا بيكون تكلفة ال outsourcing أوفر من ال in-house dev ...
واحد من ال data structures المهمه في قواعد البيانات و المستخدمه في عديد من الأنظمه زي LevelDB و RocksDB و Cassandra و ScyllaDB
هو ال LSM tree او ال (Log-structure merge-tree)
ده نوع من ال data strucure اللي بيخزن البيانات ك key-value ..
اكتر حاحه بتعلم الناس و خصوصا ال junior/mid level (و فيها بتوصل احيانا لحدود اللغه اللي في إيدك)
هي أنك تحاول تعمل implementation ل low-level concept
و بلاش تخلي هدفك كبير عشان مش هتعرف تحققه ...
مثلا حاول تبني json parser ... او sql parser ...
و الحمد لله البوت دلوقتي بقى شغال بشكل كويس، و كل يوم يلبس حد من الشباب 😂
بس حقيقي انا افتقدت كل يوم اننا نقعد نص ساعه نتناقش عشان نشوف مين هيطلب و مين طلب امتى آخر مره😏
إيه الفرق بين Concurrency و ال Parallelism؟
زي ما عمنا Rob Pike بيقول ...
ال Concurrency هي التعامل مع مجموعة من الأشياء في نفس الوقت
ال Parallelism هي عمل مجموعة من الأشياء في نفس الوقت
تخيل كده صانع القهوه (بارستا) ...
كنت حابب أكتب بوست عن ال non-blocking io و أستخدامه في nodejs و ال libuv و netty إلخ ... و كنت حابب أتطرق شويه لل Multiplexing I/O و آلية أستخدام sys calls زي epoll ...
فقعدت أقرأ شوية عشان أرتب افكاري ... فأكتشفت أني معرفش حاجه و بطلت 😅
لما يكون عندك complex business logic ... متفكرش بطريقة ال database ...
فكر بطريقة ال business و استخدم ال databse عشان تساعدك تحل المشكله
بمعني...
متبنيش ال db tables و بعد كده تفكر ازاي تحل المشكلة ...
لكن اكتب ال logic و صمم ال db tables في نفس الوقت .. إلى أن تصل للحل!
ال python احسن لغه ممكن تستخدمها كبديل ل bash عشان تعمل شوية tasks سريعه ....
سواء i/o او http او text processing ...
بقالي فتره بستخدمها في التاسكات اللي من النوع ده ..و مبسوط معاها جدا 🤩
فيه دايما اختلاف بين جماعة ال backend و جماعة ال frontend (بمفهومه الحديث اللي هو js/mobile app بيشتغل عند المستخدم) .... عن مكان وضع ال logic
انا مره اشتغلت مع تيم frontendyyy .... كان بيطلب مني في ال backend اني اعمله crud api ... و مليش دعوه بالباقي ... هو هيتصرف!
فيه نقطة مهمه جدا بعض ال leads مش واخدين بالهم منها
أحد أسباب تقسيم ال app ل microservices إن الفريق بيكون كبير (50 مطور مثلا) و بنقسمه لفرق صغيره عشان نزود ال focus & agility.
لكن صاحبنا بيكون المشروع شغال عليه 4 مطورين … يقوم مقسمه لميكروسيرفس!
أستنى بس و حاول تفهم الأول 😂
المهم نيجي بقى لوقت الكود
البوت في تليجرام بيحتاج تكتب كود عشان يقدر يستلم الرسايل اللي بتتبعت ف الشات و يرد عليها
فيه sdk موجوده للغات كتير تقدر تستخدمها عشان تبرمج البوت، بس أنا قررت اني استعمل python و استخدم python-telegram-bot و دي مكتبه كبيره و ليها docs لا بأس به
في مرحله ما في حياة المبرمج بيكتشف ان كتير من الحاجات اللي درسها مش دايما بتكون صح
زي مثلا فكرة ان ال denormalization مش دايما حاجه وحشه و احيانا كتير بتكون حل لمشاكل...
أو فكرة ان مفيش نظام الا و فيها نواقص مهما كان ... الخ الخ
و المرحله دي أحيانا بتكون متأخره شويه ....
ان جينا للحق، خريجين حاسبات بس هم من يحق لهم العمل في مجال السوفتوير
خريجين الهندسه دخلاء على المجال زيهم زي خريجي حقوق و تجاره و طب 😁، الا متخصصين هندسة كمبيوتر بحيث تكون مناهج السوفتوير كانت أكبر من مناهج الهاردوير، و المايكروكنترولر و خلافه من الهاردوير 😁
#بهزر_يا_جدع
من الحاجات اللي بتفرق عندي بين ال Developer و ال Architect
هي ان الديفيلوبر بيحاول يحل المشكله بالأدوات اللي يعرفها كويس جدا
انما الأركتكت بيحاول يحل المشكله بالأدوات الأنسب للمشكله. (و يكون على درايه بيها برضه، بس مش شرط تكون أدواته المفضله)
أسوأ انواع تنظيم الملفات في المشاريع البرمجيه هو ال تجميع الملفات اللي من نوع واحد تحت مجلد واحد.
يعني ملف اسمه controllers او components او services ... تفتحه تلاقي فيه ١٠٠ او ١٥٠ ملف ملهومش اي علاقه ببعض غير انهم من نفس النوع
مثلا
InventoryController
SalesControlle
الخ الخ
حاول دائما تخلي ال generated code مش جزء من ال code base ... و متعملوش commit .... خليه يحصله build مع ال binary النهائي
قاعدة كان قالهالي واحد صاحبي من سنين .. قالي أنه أتعلم أن أي حاجه بيحصلها generation ... المفروض بيحصلهاش commitمع ال source code ...
من الحاجات الجميله اللي الواحد بيحب يتكلم عنها وجود حد زي
@AmrDeveloper
كمية مساهمات على ال github كبيره سواء جماعية أو فردية
و صدقوني ... المساهمات الفرديه أصعب من الجماعية
من ضمن الحاجات اللي لفتت نظري إنه عمل design و implementation للغة برمجه ....
من الغلطات اللي الناس بتقع فيها (و خصوصا مع الميكروسيرفس) انهم يستخدمو HTTP Client library تكون بتعمل Retry بشكل افتراضي.
ال Retry مع ال GET methods مش هيسبب مشاكل زي مع ال POST ...
لأنك ببساطه لو ال API بتاعة ال upstream stsrem اللي بتكلمها مش Idempotent هتكون مفاجئة مش حلوه 🫣
الاستمراريه هي من اصعب الحاجات اللي اي شخص ممكن يحققها و خصوصا لو الحاجه ملهاش هدف حقيقي يخليها تستمر
مثلا لو حد في شركتك قرر انه يعمل reusable component من غير ما يكون دعم حقيقي و اهتمام ... ففي الغالب الحاجه دي ببساطه هنبقى out-dated و هتسبب مشاكل أكتر ما هتفيد ...
قرارات كتير technical في الكود ... بيكون وراها business...
يعني كونك تشتغل sync ولا async ده قرار tech لازم ياخد موافقة البيزنس لو هيأثر على ال business flow.
فمش كل الحلول دايما بتكون متاحه ... حتى و لو متاحه ... فتكلفتها ك impl & maintaince ممكن متكنش مقبوله من ال bsuiness
أنا بفكر أعمل فيديوهات أتكلم فيها عن أي شيئ أعرفه، و ان كنت معرفش حاجات كتير، بس ع الأقل ممكن حد يستفاد.
المهم انا شايف أن الطريقه اللي بيستخدمها الشيوخ زمان مريحه و هي الأنسب ليا و لطريقة تفكيري، فبفكر افتح كتاب ما، في موضوع انا عارفه (سبرنج مثلا)، و ابدأ أقرأ و أشرح و أعلّق 😁
أنا أظن إن ال backend/frontend development pattern هيفضل يطَور و يطَور و يطَور لحد ما يبقو حاجه واحده و ميكونش فيه فاصل بينهم
و ال frameworks تكون واحده في الإتنين ... بحيث الإختلاف و اللخبطه اللي بتحصل تقل ...
و نوصل بقى للنضج اللي كان موجود في سنة 2002 🙃
لو لغتك مش pure functional ... و ده الغالب في معظم اللغات اللي مستخدمه حاليا ... فحاول ألا تُغالي في أستخدام ال functional programming constructs ..
و في نفس الوقت لا تتجنب أستخدامها بالمره ... الوسطيه حلوه.
ال map و ال filter حلوه ... و برضه ال for loop و ال if else
🧵
ال character encoding هي الطريقه اللي الكمبيوتر بيمثل بيها الحروف في شكل bytes
أشهر ال encoding standard هو ال UTF8 و ال ISO-8859
ال UTF8 هو الأشهر بس مش دايما هو الأفضل من حيث مساحة التخزين
شخصيا بفضّل ال ISO-8859 في تخزين البيانات قواعد البيانات
#ما_لا_يسع_المبرمج_جهله
واحده من الحاجات الجميله .. اللي ممكن يعملها أي فريق عمل هو التعلم الجماعي.
التيم كله يتجمع في مكان ما و يحضرو مع بعض online course في موضوع ما ... يكون قريب من الشغل اللي شغالين عليه
التجمع يكون مره في الشهر مثلا..
الغرض ان الناس تطلع بعد الكام ساعه دي عندها أساسيات الموضوع
حد سمع قبل كده عن ال Magic Number؟
المصطلح ده ليه أكتر من معنى في ال computing ... هتكلم عن معنيين ليه
هنتكلم عن ال anti pattern و عن ال file magic number
في البودكاست اللي بعنوان Leaving the cloud
... بيتكلم David hansson عن مجموعة نقاط رئيسيه ليه ال cloud مش مناسب له و لكتير من الشركات اللي زيه
اولهم فكرة ال unexpected scale دي مش common business case و خصوصا للناس اللي مش شغاله على المواسم
فال workload غالبا ثابت طول السنه
الحاجه اللي عجبتني ان في الكتاب الجديد بتاع نيل فورد و مارك ريتشاردسون بعنوان Head first Software Architecture ان عندهم شابتر مخصوص لل Modular Monolithic
ان شاء الله هحاول أرتّب افكار منه، و أشوف كام مصدر تاني، و على تجربتي الشخصية في استخدامه، و أعمل سيشين عن الموضوع.
#unpopular_opinion
ال DevOps في الغالب و حسب ماشوفت مش بيكون Developer ...
هي بيكون حد Ops و بيروح يتعلم شوية tools جديده بتخدم توجه ال DevOps
و انا لما ألاقي حد شغال ops بالطريقه القديمه بنصحه إنه يتعلم التولز دي زي k8s, docker الخ الخ عشان يعرف يواكب التطور ....
هو مفيش حد اتكلم ليه عن الناس اللي خسرت وضايفها لما ال cloud هيمن ؟
من أول الناس الشغالين في Data Centers لحد جماعة ال Virtualizations ....
انا اتفهم ان الناس الشغالين قريب من السوفتوير زي بتوع ال v12n مممن يغيرو شغلهم لل devops ...
طب الناس التانيه ... عملت إيه؟
انهارده انا سمعت حوالي نص ساعه فيديو ع اليوتيوب بين اتنين بيتكلمو على ازاي و ازاي لأ ان ٤ شهور ينفع حد يتعلم فيها برمجه
انا حقيقي مستفدتش أييييييي م******م حاجه من النص ساعه دي
في أحد الشركات اللي اشتغلت فيها ... بعتولي form قبل التوظيف أعبيها .. و كان فيها بند الجهاز ... تحب لابتوب ولا pc ...
انا اخترت لابتوب و قولت ايه الدلع ده
المهم اول ما استلمت الشغل جاني الشخص المسؤل و جابلي شاشه و كيسه مستخدمين من حد قبلي و رمى الكابلات و سابني و مشي 😆🤣😂
في أحد المرات أنطلب مني إني أرسم ال flow بتاع أحد أجزاء النظام اللي إحنا شغالين عليه ...
فروحت رسمت ال flow بمربمعات و دواير و أسهم من غير ما أتبع notation معينه ( لا UML ولا غيره)
أحد الشباب شاف الرسم و مكنش عاجبه و كان شايف إن أنا لازم أرسم sequence diagram 🤓
أشتغلت مره في شركه و كنت متعود اني لما اطلع تغير ... بكتب خطوات ال deployment بحيث ان الدنيا تفضل شغاله و ميحصلش downtime
المهم روحت شركه تانيه و اشتغلت على تغير كبير و كتبت الخطوات بتاعة ال deploy عشان ميحصلش downtime و ألاقي بالشخص المسؤل بيقولي انهم بيعملو downtime عادي
طب "يلا" ده هيختار من مين بالظبط؟ من كل الناس ف الجروب؟
أكيد لأ… هيختار بس من الناس اللي بدأت تحط طلباتها في الجروب
مبدأيا كده انا هبعت ابعت رساله من البوت الساعه ١١ الصبح بتقول يلا يا شباب ضيفوا طلابتكم، و من الوقت ده بروح اشوف مين اللي بيكتب في الجروب
@jsmnMA
@m0hamedAmin
إدخلي على الرابط ده
و إختاري Basic membership (25 USD)
بطاقة البنك لازم تكون مصدره من بنك مصري
بعد كده تدخل تعملي login من هنا
هتدخلى على Oreilly ... تقدري تتفرجي على كل الكورسات و الكتب ... أما الحاجات التانيه لأ زي ال events
حاول تحافظ على ال functions إنها تبقى pure functional من غير side effect
يعنى مثلا .. لو هتبعت list في ال parameters ... و محتاج تعمل sort لل list دي عشان تشتغل عليها ... متعملش sort in-place ...
الفكره إن ال func بتاعتك ليها غرض واحد ... و الغرض ده بيرجع ك return value
*** بوست موجه لل SW Testers ***
اشتغلت مره على "تاسك" ... مفادها كالأتى:
عندنا API فيها File upload ... و ال library المستخدمه بتشوف لو حجم الملف المرفوع كبير (فوق threshold معين) بتروح تكتب الملف ع ال disk كآلية caching ... غير كده الملف بيفضل في ال memory
أنك تكتب كود قبل ما تتعلم golang غير تماما أما تكتب كود بعد ما تتعلمها
بعد ما تتعلمها و ترجع تكتب كود بأي لغه تانيه بتلاقي نفسك كل سطر بتسأل نفسك….. هعمل إيه لو السطر ده رجع error
هنا بقى جه دور ال ai chat api
أول حاجه جربتها روحت فتحت chatgpt و سألته اذا كان الكلام ده فيه اسم أكل او لا "دجاج" قالي اه حيث ان مش عارف ايه و ايه …
ايه الحوسه دي، هعمل parse للرد ده ازاي؟!
فكرت اني اغير السؤال و اقوله جاول ب yes or no
و هنا فعلا عمل زي منا عاوز منه بالظبط
فيه فرق إنك تسلق الكود ... و إنك تكون سلييق بالفطره
أنا معنديش مشكلة ان حد يسلق كود او حل لمشكله عشان ظروف ضغط ما ... و يكون عارف ان ده Tech debt و يرجعله في يوم من الأيام
انما الشخص السلييق اللي حياته كلها رزع كود و مش بيعمل(يكتب) تست كفايه... فده شخص مش بحب اشتغل معاه!
"دع ما للبيزنس للبيزنس و ما للتكنكال للتكنيكال"
أحيانا بشوف بعض ال Tech Leads أكثر حرصا من مدراء المشاريع على التسليم ... حتى لو على حساب الجوده! ❌️
ال TL هو مفروض رمانة الميزان ... اللي بيوازن بين الجانب التقني و متطلبات الجوده و بين البيزنس و طلبات التسليم التي لا تنتهي!
و أي حد هيكتب ف الجروب هاخد اسمه احطه في list و دي الليسته اللي ههختار منها اسم عشوائي
(خد بالك كل الام لحد دلوقتي في ال memory، و ده سبب مشكله و حليتها بعدين زي ما هنشوف)
ده اللي انا كنت بقوله دايما
ال aws/gc/azure سفاحين جدا ... و عاوزين حد محضر دكتوراه عشان يقدر يفهم نموذج التسعير
لكن ال "original vps providers" أمثال DO/Scaleway/Linode/Hetzner الخ الخ ... بتكون عارف مسبقا هتدفع ك��م ف الشهر و كل حاجه واضحه وضوح الشمس قدامك.
حقيقي الفيديو ده رائع جدا ...
و لو فيه حاجه واحده هتطلع بيها من الفيديو ده (رغم إنه مليان كلام جميل جد) ...
هي إنك متروحش تشتغل ميكروسيرفس لو مش هتقدر تغير تقسيمة الفِرَق عشان يتبع نفس تقسيمة السيرفس (اللي هي أصلا متقسمة حول ال domain)