Object-Oriented Programming Is The Root Of All Evil
HTML-код
- Опубликовано: 19 сен 2024
- Exposing object-oriented programming harms the field of software engineering and Learning about the bad practices, conventions, and flawed ideology of object-oriented programming/design.
This information in this video is taken from the work of Brian Will, Mike Acton, Casey Muratori, and Jonathan Blow.
Object-Oriented Programming Is Bad: • Object-Oriented Progra...
Data-Oriented Design: • CppCon 2014: Mike Acto...
Clean Code Horrible Performance: • "Clean" Code, Horrible...
Preventing The Collapse Of Civilization: • Preventing the Collaps...
Discord: / discord
Twitch: / abstractengineering
WhatsApp: whatsapp.com/c...
اخيرا حد بيتكلم عن ال "software engineering"
ال OOP ما هو إلا programming approach قائم علي set of rules made by someone or some people و ال object بيكون هو محور الحدث في هذا النوع من البرمجة زي ()object.print فدائماً في ال OOP بنستدعي ال object و بعدين dot أو arrow علشان نوصل للمتغيرات أو الfunctions الخاصة بال object ، الكومبيلر لما بيشوف حاجة زي دي ()object.print في طريقة بيبدأ يحولها لصورة مختلفة تماماً عن طريق إنو بيعمل حاجة إسمها name mangling علشان في النهاية يحصل calling للدالة print الخاصة بال object وفي النهاية كل الكود بيتحول assembly instructions ... التدهور في ال performance الخاص بال software لية أكتر من سبب و غالبا مش بيكون مرتبط بال compiler نفسة لأن في bad practices أو misuses كتير الناس بتعملها أثناء كتابة الكود بإستعمال framework أو لغة برمجة تم تصميمها وتطويرها عن طريق ناس معينة هما بس اللي يعرفو خبايا ال product بتاعهم و ممكن يكون ال software اللي الناس بتستعملو في designs معينة بتقلل ال performance لكن ال compilers المشهورة غالبا ما بتكون بريئة من هذا الموضوع.
اعتقد حضرتك واخد المضوع بالعكس صحيح ال compiler بيحسن الكود بس انته متخيل انه لو مش بيعمل ال optimizations دي الكود اللى الناس بتكتبة يكون اسوأ كام مرة.
و تاني حاجة انك اختصرت المشكلة بتاعة ال OOP كلها فى function call على base object و دا خطأ كبير لانك تقريبا اخترت احسن case فيهم.
ثالثا و هوا ال name mangling حاجه و ال performance optimization حاجه تانية و ملهومش علاقة ببعض و كمان ال name mangling مش ضروري عشا تعمل ال call الصح ل print
@@Abstract-Engineering
مستحيل تقدر تنادي فانكشن موجودة داخل أي كلاس بدون حدوث
name mangling
لأنو ممكن يكون عندك أكتر من كلاس فيهم نفس الفانكشن و بردو يستحيل تقدر تعمل
function overloading without name mangling
name mangling ال
بيخلينا ننزل لمستوي أقل في البرمجة وهو
مستوي لغة السي اللي هي ال
procedural programming
OOP طريقة كتابة الكود في ال
هي مجرد واجهة برمجية سهلة الإستخدام بالنسبة ليك كمبرمج لكن بمجرد ما الكومبيلر بيبدأ يشتغل و يعمل كومبيل كل الكود اللي إنتا كتبتة بيبدأ يأخذ صورة تانية و شكل تاني مختلف تماما عن اللي إنتا كتبتة إلي أن يتم تحويل الكود في النهاية إلي مجموعة من ال
Assembly instructions
أما عمليات التحسين اللي الكومبيلر بيعملها فبتكون مثلاً إن الكومبيلر بيحاول يحذف أي جزء من الكود غير فعال أو غير مستخدم أو بيحاول يعوض شيئ إنتا نسيتة في إطار القواعد اللي الكمبيلر ماشي عليها لكن الكمبيلر مش هيضيف أي شيئ سحري للكود، يعني لو إنتا كاتب ألجوريزم سيئ علي سبيل المثال هيفضل الألجوريزم زي ما هو بعد عملية الكومبيل أو لو إنتا عندك سوء إستخدام لبعض الإمكانيات المتاحة في لغة البرمجة فهيظل الأداء سيئ، الكومبيلر ملوش دخل في كل حاجة إنتا بتعملها كمبرمج، إنتا ممكن تكتب كود وتعملو كومبيل وبمجرد ما تشغل الكود يحصل تشبع في الذاكرة
memory leak
ونظام التشغيل كلة يهنج.
حلو جدا.. مبسوط جدا بمحتوى عربي بيحارب صنم الOOP 😂ولو اني مش ضده بالكلية، أنا ضد الclassical oop تحديدا، اللي فيه classical inheritance عشان ليه آثار جانبية سيئة كتيرة..
وبرضو فكرة ان Paradigm معين حلو والباقي كله وحش، دي فكرة بشك فيها شوية.. وأظن ان في usecases بتناسب كل paradigm... يعني الgame developmemt مثلا، بحسها الoop منطقي جدا فيها وجايز أكون غلطان
لو عملت مجموعة فيديوهات فيها code وcomparisons ساعتها الفايدة هتبقى أعظم بكتير وهنفهم قصدك ونتعلم منك أكتر.. والفيديو ده يبقى الintro بتاعها
بالتوفيق إن شاء الله
ال game developers لو لقوا حد شغال OOP بيبقوا عاوزين يقتلوه للاسف شبه ممنوع اصلا و بيفضلوا Procedural code و ممكن يفضلوا ال Assembly.
الناس اللى مقترح ال Talks بتاعتهم معظمهم Game Devs Managers او فال High Performance Computation Field.
@@Abstract-Engineering
غريبة.. كان جاييلي الintuition ده من كورس الgame dev اللي خدته فالجامعة زمان 😂 وده لاني حاسس الmodelling بالoop فالمجال ده سهل.. بس يمكن الperformance والbugs دول أكبر مشكلتين ممكن يخلو الOOP مش مرغوب فيه فالصناعة دي.. عموما هشوف الناس اللي سبت اللينكات بتاعها ان شاء الله
جرب rust trait
I AGREE WITH YOU. THANK YOU.
اكثر نقطة اقنعتني فيها بكلامك و هي نقطة Casting صحيح , لكن في الباقي OOP ممتازة تحتاج فهم كويس لتطبيقك و مع تقليل من Casting حيكون مشروع ممتاز و مريح
من الجميل لو تعمل فيديو عن الأدوات و اللغات التي كان لها التأثير الأكبر مثل java و c
Great Content, are there any references you prepared from?
Down in the description are some the influences that had a great impact on me and you can teach your self more.
Insightful!
جميل، ممكن تعمل مثال code في فيديو تاني يكون في برنامج بسيط بيحل مشكلة مكتوب بoop ونفس البرنامج بdod عشان توضح ازاي الdod هيحل مشاكل الoop
1. encapsulation at a fine grained level:
I think you're confusing between the traditional object-oriented system, and messaging system of small talk.
other than that, you claim that you break encapsulation when an object is modified from many sources, which is simply incorrect
the purpose of encapsulation is to maintain invariants, as long as this holds, it doesn't matter how many sources modify the state of your instance
small-talk didn't invent OOP btw.
2. unnatural way to think of computation:
I agree with that, but this style is not mandatory in essence of object-oriented design, this is a problem of inheritance
3. horrible performance:
you don't need to store references to objects, again, this is a problem caused by inheritance, as it leads to different sized instances of the base class that can't be stored in a compact fashion, but in case where inheritance isn't used, there's really no difference between storing objects or storing structs, by the way, Unpredictable memory accessing, branch misprediction, cache missing are essentially the same thing
memory fragmentation causes wrong prefetching (branch misprediction) and checking memory that isn't stored in cache, which both causes cache misses
what you're trying to criticize is not OOP, but design patterns
You're points would be valid if that's what I meant. And I do somehow agree with small parts of them.
But:
1. What do you mean by traditional OOP?
2. I'm not confusing encapsulation with message passing. They're connect by the fact that in true Object-Oriented Programming objects communicate via message passing.
3. The idea of encapsulation involves segregation of state & state invariance and messages only passes copy of the state not modify the state itself. And how are we maintaining state invariance if multiple sources can directly modify the state?
Yes, setters and getters provide some control but it's a very superficial control over state invariance. And also mutable states, inheritance & subclassing, and method overriding, multithreading & concurrency, and shared access destroys that at least quite a bit.
4. Alan Kay is the one that coined the term and his philosophy is by enlarge the one that affected the development of other OOP languages. And yeah I'm aware of Simula also but it's not really my point.
5. I don't really think you can say it's not mandatory as almost the entire philosophy of OOP as it being taught and used everywhere with the rest of it's ideology being the SOLID Principles, Design Patterns, Clean Code, and Agile Manifesto all use it and nobody really say that. Like if you ask any one what are the Principles of OOP they will tell you (Abstraction, Encapsulation, Inheritance, and Polymorphism).
6. It's not just inheritance. the very own idea of encapsulating code at such a fine-grained level create a multitude of classes/structs/types with all sorts of hidden state and that hinders performance in at least two ways. First storing classes/structs with lots of hidden state and Booleans and other no essential state is bad for performance as you mentioned memory fragmentation leades to cash misses etc... the second way is that it prevents the programmers from reasoning about their code correctly because somewhere layes a piece of state that is hidden away from them and it affects how methods or objects behave so they end up writing suboptimalandbad code.
7. I'm criticizing the entire ideology of OOP and all of it's emerging results of it such as (SOLID Principles, Design Patterns, Clean Code, etc...) not just one as they are in almost every case come packaged together.
8. Some tiny small case where really associating data with behavior is allowed is ADTs (Abstract Data Types). Other than that basically it should never be done. Proper modules and namespaces are the way to go.
9. And finally based on the evidence of current state of software products I'm still convinced that OOP is totally wrong.
كنت مستني حد عربي يتكلم في الموضوع ده من زمان
متنساش ال support لل channel بقي عشان نكمل😂
@@Abstract-Engineering إن شاء الله اول لما تكمل السلسلة بس
متابعة على طول ❤ عندي سؤال بس
انا ك باك اند و مهتم اني اتخصص و نكون قوي جدا في
Optimization of the code
يعني لما اشوف بروجكت احلله و اقوم باستخلاص نقاط الضعف فيه و اعمل maintenance
ايه تنصحني بدراسته
انا افكر في os و بعدها اتعمق في databases
او اتعمق في api و http requests
ايه رايك بحكم خبرتك في المجال
الله يعطيك العافية يارب
بدنا من هيك مواضيع لانو ضعنا
عافانا الله و إياك
بإذن الله
لاتنسانا بالدعم و الدعاء و جزاك الله عنا خيرا
"Object-oriented programming is an exceptionally bad idea which could only have originated in California"
Edsger Dijkstra
He actually said a better one.
"Object-oriented programs are offered as an alternative to correct ones".
Edsger Dijkstra (1976) “On the fact that the Atlantic Ocean has two sides”
Summary: Europe programs with mathematical precision, while Americans just push buttons.
Alan Kay (1982) “On the fact that most software in the world is written on one side of the Atlantic Ocean”
الحمدلله لقيت محتوى عربي بيتكلم فالحاجات المهمة دي. لازم تكمل
ادع لي
كله بسبب جافا 😂
بالنسبة الي بكتب Functional وشوية OO بدون multi level inheritance او interfaces والاعتماد على dependency injections يعني من الاخر لازم يكون كود قابل لل testing
من فضلك more videos about software engineering
من الأساسيات حتى Advanced
Not Programming languages just concept of Software Engineering
and thank you
There will be a mix of both and some hardware related stuff.
الآن فهمت ليش كل low level developers أو الناس اللي بتشتغل بلغات زي C و rust كارهين للـ oop و ليش لغات زي go و rust مع أنها حديثة لكن مش بتهتم بدعم oop و تكتفي ببعض features تشبه لل methods و encapsulation بس .
شكرا على المحتوى الهادف .
بالمناسبة هو في مشروع فعلي لل abstract language ؟
عفوا
باذن الله Abstract هيكون مشروع فعلي
@@Abstract-Engineering
من فضلك اعمل فيديو عن كيف نوفق بين industry و بين best practices اللي ذكرتهم ، أو جاوبني لو مقدرتش .
أنا مثلا طالب ماجستير جربت أكثر من لغة برمجة و عندي خبرة في مشاريع شخصية خارج شركة ، و مهتم بال low level و كيف databases تشتغل و compilers و information theory و ما إلى ذلك .
و في نفس الوقت مطالب أني أشتغل و للأسف rust و اللغات المشابهة ناقصة كوظائف ، الحل من فضلك
ان شاء الله في حاجات زي كدة جاية قدام
جامد يخويا ❤
اعتقد المحتوى حيكون ثري اكثر، لو بدات تقارن الافكار عن طريق امثلة من الاكواد، عشان كثير من المصطلحات بالنسبة للي مجربش، صعب اسقاطها على الواقع. لستمر 😊
ممكن تبقى تكلمنا عن SOLID
طيب عادي استعمل
Functional Programming FP
افضل بديل لل OOP
لو مش هيسببلك مشاكل في ال performance عادي بس بردو خلى بالك عشان متكونش بت restrict نفسك زيادة عن اللزوم بسبب ال FP
شفت الفيديو عربي و العنوان controversial بدأت السخرية في نفسي
ما ان بدأت الفيديو حتى انقلبت السخرية اعحابا
تم الاشتراك
اتمني تكون استفدت و انك تشوف ال resources اللى في ال description.
و شكرا للأشتراك❤
بارك الله فيك
وفيك
Amazing 👏
Glad you think so!
اعطنا مثال لمشروع متكامل وليس مثال بسيط بدون OOP
المشكلة نحن المبرمجين مو عارفين كيف نسوي برنامج ما نعرف نخطط عندنا افكار لأي مشروع لكن مو عارفين كيف نبدا
ابدأ بابسط طريقة غبية و طور على الكود على مرات متتابعة
@@Abstract-Engineering والله انه موضوع كبير ربك يسهل
احسنت الله ينور ❤
كنت حابب حضرتك تضع امثله علشان نفهم اكثر😅
جزاك الله خيرا
قريبا باذن الله الفيديوا هيبقى واحد من سلسة بتتكلم عن مشاكل تخص الهارد وير و السوفتوير و حلو و الامثلة هتيجي مع الوقت.
كان عندي نفس النظرة ديه بقالي فتره وكنت خايف اقول الصراحة 😂
هيعضوك؟ 😂
المقارنة بين شعبيتي اطاري العمل
React js
و
Angular
يؤكد المعني الذي ذهبت اليه
حوالي 99.999% من web tools زبالة
@@Abstract-Engineeringفى فيديو بيشرح ليه زبالة
كلهم ينفعون للمشاريع الصغيرة ما ينفع تكتب قوقل فيس بوك يتيوب تويتر الخ بإطار
@@Abstract-Engineeringcan you elaborate on this criticism, especially regarding reactjs since while it's not the most optimal way to build performant UIs it makes up for that in developer experience and ecosystem.
لماذا التحدث بسرعة؟ ليس جميع من يسمعك من مصر الحبيبة , شكرا لحضرتك
عاااااااش 💪
golang is the way
You wish 😂😂😂
رايق تسلم ايدك. كسر في الاصنام دي كمان الله يعينك
طب أنت نقدت من غير حل ولا بديل!, يعني نعمل إيه طيب؟ ولسه كنت هسألك على راست لقيتك بتنقدها فى الكومنتس هي كمان!
انا قولت فى اخر الفيديو ان الافضل هوا Data-Oriented Design و نكتب procedural code.
و قلت على أسامي ناس بتوضح دا و كمان حاطك لينكات لفيديوهات ليهم فى ال description.
بالنسبة ل rust فا ليها مزايا فى ال safety بس عيوبها فى انها عاوزة الناس تعمل كل حاجة بطريقة rust بس و الناس بتحارب ال compiler عشان تكتب اى كود و صعب اوي فيها انك تعمل fast development.
@@Abstract-Engineeringكلام غير واقعي oop لها مميزاتها وdod لها مميزاتها
انا مش فاهم الكلام مش واقعي ازاى انا ناقشت المبدأ من اللى عاملة و ناقشت بالدليل على النتايج و اقترحت الحلول.
ودا ممكن يكون راي حضرتك بس احنا فى مجال هندسي فا لما نبص على نتايج ال Software الشنيع اللى ناتج عن ال OOD و الفرق بينه و بين حاجات معمولة بال DOD فا للاسف الرأي ان ال OOP حاجة كويسة بيضرب بيه عرض الحائط.
الى جانب اننا مش لازم نفضل ان كل حاجة ليها مميزاتها و عيوبها ال OOP زيها زي اى Tool الناس عملتها و لما جربناها طلعت Tool سيئه و المفروض نرميها بس الناس لسبب ما عمل عقيدة ما حوالين الموضوع و بندافع عنة حتى في و جود الادلة اللى بتنفي صحة كفائتها كا Tool.
و المفروض المهندسين بيختارو ال Tool الصح للشغل مش بنتحيز ال Tool.
@@Abstract-Engineeringما تعصب ي استاذي بس هذه OOD أفضل من حيث التنظيم، المرونة، والصيانة.DOD أفضل عندما يكون الأداء هو الأولوية القصوى طبعا اذا كنت backend engineering
بصراحة مبدئ encapsulation يعجبني كثير
شوف rust traits
I'm not new to rust.
And it has it's own problems also.
Rust is very overrated.
هو الي البرمجة العربية نصها انجليزي ؟
You guys can't explain Programming without using English terms?
لان الترجمة الموجودة حاليا سيئه و تخلو من ايصال المعني الصحيح.
اذا وجدنا غيرها سنحاول و لكن سيبقى الامر انك محتاج تتعلم الانجليزية رغما عنك لتعمل بالمجال.
جميل 💞
عفوا يعني بس انا مبتدا بالبرمجة و عندي سؤال
انا مو بالمكان الغلط؟؟؟
لاني بصراحة اول عشر دقايق فهمان كلشي
و بعدها فصل الفوقاني
عفوا بس ممكن حدا يوضحلي
الاستاذ حسسني من التعليقات كانه ما حدا عرف يبرمج و كل الشركات و المبرمجين مو فاهمين الله وين حاططهم و كل شغلهم زبالة
انا كمبتدا لازم اسمع كلام الsoftwwar engenering المعقد هاد ولا لازم اروح احل مسائل و اتدرب
تاني شي ليش بعد هاد الفيديو حسيت انه حضرتك مستاء من كل اللغات و التقنيات و الأفكار و ونتقد كلشي
هل هاد الكلام معناه انه ما لازم اتعلم الوراثة و ما عرف class بالبرنامج
و اخر شي فهمت من كلامك انو نعمل كلشي بدون function و class يعني مثلا نكتب كلشي بال main
هل من الواقعي نحارب فكرة oop مع المشاريع الكبيرة و نطبق كلشي بروسيجر
انا كمبتدا ضعت بعد هاد الفيديو ممكن حدا يجاوبني
بو انته مبتدأ اتعلم الاساسيات الاول و اتعلم ال problem solving بعدها و خد بس في بالك الفكرة اللى اتكلمت عنها.
مش مستاء من كلهم بس الكويسين قليلين. انته هتضطر تتعلم ال OOP عشان هيدرسوهالك برضوا فى الجامعات و هتطلب منك فى السوق بس مهياش حاجة كويسه.
و اخيرا انا مقولتش خالص خالص انك تكتب كل حاجة فى ال Main ال procedural كود هوا اللي بيتخدم functions/procedure و معاهم structs/classes عشان تكتب بيه بس دا مش هوا ال OOP.
@@Abstract-Engineering تمام شكرا لحضرتك
ان شاء الله تستمر بقناتك نحو الأفضل
عندي فضول، كنت اتصالات ولا. Computer engineering؟
Double major in both
انت متحامل جدا على الOOP الصراحة
ممكن سبب؟
انت ناسخ فيديو Brian Will و كاتب في الوصف “inspired by” بس المشكلة انك ناسخه بالضبط لكن مترجمه و مختصره شوي. حرفيا انت ما سويت شي، بس قاعد تنسخ فيديو ثاني، مب قاعد تعطي رايك الحقيقي
صحيح انى واخد منه حاجات كتير و بعرب المعلومات اللى انتفعت بيها و بضيف الجزء اللى من خبرتي فيه عشان كدة حطيت امثلة من خبرتي و زودت نقط علية
انا مش هنفي خالص انى بحاول اعرب كلام Brian Will ولا غيره من الناس زي Mike Acton و Jonathan blow انا بذكرهم بالاسم.
لو مشكلتك فى انى كاتب inspired ممكن اقول taken from عادي.
تمام كده
This information in this video is taken from the work of Brian Will, Mike Acton, Casey Muratori, and Jonathan Blow.
17:55 اتوقع ده ليه علاقه اكتر بكتير علشان البرامج كانت ابسط بكتير جدا من دلوقتي
لا خالص ملوش علاقة احنا اللى بنزود complexity ملهاش لازمة فا بيبان انها معقدة و هيا لطالمفروض اصلا تبقى ابسط و احسن و اسرع و دا اصلا واحد من العيوب اللى بنتقدها ان الناس اصلا مش فاهمة بسبب انهم مفكرين ان دى الطريقة الوحيدة لكتابة البرامج.
its all tradeoffs...
I have call that BS.
This is a political argument that is just useless.
Because clearly the so called tradeoffs aren't making anything better.
Take a look at the results.
Bad, buggy, slow software.
That shouldn't be the result if was any good.
You're thinking of a totally wrong tradeoffs.
@@Abstract-Engineering you just dont have the experience to understand how to fit the paradigm to problem domain. oop was and still the dominant by huge margin style used in production. Every good oop programmer I know does know about other paradigms like functional. generics, meta... and knows when and what to pick from them. You are free with your opinions, but people with more experience also free to see them ridiculous or beginner's views.