سادگی زیباست...

بررسی انواع معماری های سیستم عامل و برنامه های سیستمی و روشهای توسعه آنها

سادگی زیباست...

بررسی انواع معماری های سیستم عامل و برنامه های سیستمی و روشهای توسعه آنها

سادگی زیباست...

۲ مطلب در دی ۱۳۹۳ ثبت شده است

یک موسسه به اسم تیوب هر ماهه یک آماری از زبانهای برنامه نویسی ارائه میده و تو اون بررسی میکنه که محبوبترین زبانهای برنامه نویسی کدوم ها هستن. این آمار ها بر اساس تعداد مهندسان مشغول تو اون زبان برنامه نویسی، فرست های شغلی و همچنین تعداد شرکت های فعال تو اون زمینه ارائه میشه. برای این امارگیری از موتورهای جستجوی معروف مثل گوگل، بینگ، یاهو و بایدو اتفاده میشه.

اول آمار امسال رو ببینیم تا بعد در مورد اون صحبت کنیم:

Dec 2014 Dec 2013 Change Programming Language Ratings Change
1 1 C 17.588% -0.30%
2 2 Java 14.959% -2.35%
3 3 Objective-C 9.130% -1.07%
4 4 C++ 6.104% -2.16%
5 5 C# 4.328% -1.29%
6 6 PHP 2.746% -2.53%
7 10 change JavaScript 2.433% +0.58%
8 8 Python 2.287% +0.08%
9 11 change Visual Basic .NET 2.235% +0.55%
10 12 change Perl 1.826% +0.75%
11 - change Visual Basic 1.802% +1.80%
12 38 change R 1.630% +1.38%
13 9 change Transact-SQL 1.473% -0.40%
14 17 change PL/SQL 1.330% +0.73%
15 18 change Pascal 1.173% +0.58%
16 15 change Delphi/Object Pascal 1.118% +0.43%
17 - change Swift 1.065% +1.06%
18 13 change Ruby 0.978% +0.05%
19 20 change F# 0.888% +0.32%
20 14 change MATLAB 0.867% +0.16%

یه آمار برای بازه طولانی هم قرار داده:

C 1 2 1 1 1 1 1
Java 2 1 2 3 - - -
Objective-C 3 26 37 - - - -
C++ 4 3 3 2 2 2 12
C# 5 5 8 12 - - -
PHP 6 4 5 30 - - -
Python 7 6 6 23 22 - -
JavaScript 8 8 9 9 - - -
Visual Basic .NET 9 - - - - - -
Perl 10 7 4 4 9 19 -
Pascal 15 13 76 7 3 20 5
Lisp 17 16 12 17 5 3 2
Ada 32 25 15 10 6 4 3

بعضی چیزا خیلی جالب هست. مثلا زبان C عین مرد همیشه اول یا دوم هست. زبان objective-c تونسته به لطف iphone به رتبه های خیلی بالا بیاد. زبان پاسکال تو سال 2004 خیلی افت کرده و بعدش دوباره بالا اومده، تو سال 2004 چی شده؟ فکر کنم به خاطر تاثیر زبانهای اسکریپتی باشه.

پیشرفت زبانهای اسکریپتی (غیر از PHP) داره زبانهای دیگه رو تحت تاثیر قرار میده. من آخرش هم نفهمیدم چرا PHP این قدر بد دیزاین شده.

زبان Ada خیلی داره افت میکنه، که این مساله برای من جالبه. زبان ada سخت هست، و این مساله نشان دهنده اینه که در نهایت زبان باید کارا باشه و ساده هم باشه (مثل c).

آدرس وبسایت:

http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html

نظرتون در مورد این آمار چی هست؟ نظر بدین

۲ موافقین ۱ مخالفین ۰ ۰۲ دی ۹۳ ، ۱۲:۵۶
حامد شیخلو

برای من شرایطی بوجود اومد که میخواستم یه برنامه بنویسم به عنوان یک پلتفرم عمل کنه و با استفاده از ماژولهای مختلف که به مرور براش نوشته میشه، یه عمل خاص رو بر روی داده ها انجام بده. مثلا فرض کنید میخواین برای چند نوع فایل متنی متفاوت، چند تا برنامه بنویسین که بیاد رو اونا پراسس انجام بده. شبیه عکس زیر در نظر بگیرین:

RawFile ----> main program ----if type 1 ---> plugin 1(file processing)-----|-->Output

                                       |_if type 2----> plugin 2(file processing)-----|

                                       |_if type 3----> plugin 3(file processing)-----|

                                                                ...

 یه راه سریع اینه که بیاین یه برنامه بنویسین و پلاگین ها رو جدا بنویسین، تو برنامه خودتون هم بیاین و همون پلاگین ها رو تعریف کنین و ساختار داده هاشون رو مقداردهی اولیه کنین. اونوقت، باید برای هر پلاگین جدید که نوشته میشه، یه تغییری تو کد خودتون بدین. این ساختار زیاد خوب نیست، چون تغییرات نیازمندی رو به برنامه اصلی خودتون هم اتصال میدین.

راهی که من استفاده کردم، اینه که یک سوپر کلاس تعریف کردم و تو اون ساختار کلی پلاگین های خودم رو تعریف کردم. مثلا پروپرتی ها و تابع های اصلی رو. یه فولدر تو پروژه خودم قرار دادم که همه پلاگین ها تو اون قرار بگیرن. برای اینکه اضافه کردن پلاگین نیازی به تغییر کد نداشته باشه، باید اولا کدم تمامی پلاگین ها رو اتوماتین لود میکرد و یه عضو ازش میساخت. هر پلاگین هم باید شرطی که نوع فایل مرتبط رو مشخص میکرد همراه با داده های شناسایی خودش به برنامه اصلی میگفت. تو کد من هر کلاس باید یه regex Pattern رو به عنوان الگو خودش به کد اصلی معرفی میکرد تا برنامه اصلی از طریق اون پلاگین مناسب رو انتخاب بکنه.

تو پایتون خیلی راحت میشه یه آرایه از کلاسها ایجاد کرد. فقط باید کلاسها مشخص بشه. برای اینکه بعدا فقط کد پلاگین ها ساخته بشه و هیچ تغییری لازم نباشه، اومدم از بارگذاری خودکار پلاگین ها که تو پایتون هست استفاده کردم.

import importlib, pkgutil, imp
plugins = {}
path = os.path.join(os.path.dirname(__file__),'Plugins')
modules = pkgutil.iter_modules(path=[path])
for loader,mod_name,ispkg in modules:
    if mod_name not in sys.modules:
        if mod_name.startswith('_'):
            mod = importlib.import_module("Plugins."+mod_name)
class_ = getattr(mod,mod_name) t=class_() Plugins[t.name]=t

اینجا برای مشخص شدن پلاگین ها از دیگه فایل ها من اومدم اول اسم فایل پلاگین ها یه "_" گذاشتم و تو شرط اون رو چک کردم.

در نهایت دیکشنری plugins یه کلید داره به اسم کلاس و محتویات اون یه شی از کلاس هست. من اینجا نمیخواستم از کلاس هر بار که لازمم میشه یه اینستنس جدا یسازم (تو پایتون هزینه هز اینستنس از کلاس خیلی زیاده).

۰ موافقین ۰ مخالفین ۰ ۰۱ دی ۹۳ ، ۲۲:۱۵
حامد شیخلو