نرم افزار

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

در پایین ترین سطح برنامه نویسی ، کد اجرایی شامل دستورالعمل های زبان ماشین است که توسط یک پردازنده جداگانه پشتیبانی می شود – معمولاً یک واحد پردازش مرکزی (CPU) یا یک واحد پردازش گرافیکی (GPU). زبان ماشین شامل گروههایی از مقادیر دوتایی است که دستورالعمل پردازنده را نشان می دهد و وضعیت کامپیوتر را از حالت قبلی تغییر می دهد. به عنوان مثال ، یک دستورالعمل ممکن است مقدار ذخیره شده در یک مکان ذخیره سازی خاص در رایانه را تغییر دهد – تاثیری که به طور مستقیم برای کاربر قابل مشاهده نیست. یک دستورالعمل همچنین ممکن است.

یکی از بسیاری از عملیات ورودی یا خروجی را فراخوانی کند ، برای مثال نمایش برخی از متن ها روی صفحه کامپیوتر. ایجاد تغییرات حالت که باید برای کاربر قابل مشاهده باشد. پردازنده دستورالعمل ها را به ترتیبی که ارائه شده است اجرا می کند ، مگر اینکه به آن دستور داده شود که به دستورالعمل دیگری “پرش” کند ، یا توسط سیستم عامل قطع شود. از سال ۲۰۱۵ ، اکثر رایانه های شخصی ، دستگاه های تلفن هوشمند و سرورها دارای پردازنده هایی با چندین واحد اجرایی یا پردازنده های متعدد هستند که با هم محاسبات را انجام می دهند و محاسبه به یک فعالیت بسیار همزمان نسبت به گذشته تبدیل شده است.

اکثر نرم افزارها به زبان های برنامه نویسی سطح بالا نوشته شده اند. آنها برای برنامه نویسان راحت تر و کارآمدتر هستند زیرا به زبان های طبیعی بیشتر از زبان ماشین نزدیک هستند.زبانهای سطح بالا با استفاده از کامپایلر یا مترجم یا ترکیبی از این دو به زبان ماشین ترجمه می شوند. نرم افزار همچنین ممکن است به زبان اسمبلی سطح پایینی نوشته شود که مطابقت زیادی با دستورالعمل های زبان ماشین کامپیوتر دارد و با استفاده از یک اسمبلر به زبان ماشین ترجمه می شود.

تاریخچه:

یک طرح کلی (الگوریتم) برای اولین نرم افزار توسط Ada Lovelace در قرن ۱۹ ، برای موتور تحلیلی برنامه ریزی شده ، نوشته شد.او مدارکی برای نشان دادن نحوه محاسبه موتور اعداد برنولی ایجاد کرد.به دلیل اثبات و الگوریتم ، او اولین برنامه نویس رایانه محسوب می شود.

اولین نظریه در مورد نرم افزار – قبل از ایجاد رایانه هایی که امروزه آنها را می شناسیم – توسط آلن تورینگ در مقاله خود در سال ۱۹۳۵ با عنوان “در مورد اعداد محاسبه پذیر” با کاربردی برای مشکل Entscheidungs ​​(مشکل تصمیم گیری) ارائه شد.

این در نهایت منجر به ایجاد زمینه های دانشگاهی علوم کامپیوتر و مهندسی نرم افزار شد. هر دو زمینه نرم افزار و ایجاد آن را مطالعه می کنند. علوم کامپیوتر مطالعه نظری کامپیوتر و نرم افزار است (مقاله تورینگ نمونه ای از علوم کامپیوتر است) ، در حالی که مهندسی نرم افزار کاربرد مهندسی و توسعه نرم افزار است.

با این حال ، تا قبل از سال ۱۹۴۶ ، نرم افزار هنوز برنامه هایی نبود که در حافظه رایانه های دیجیتال برنامه ذخیره شده ذخیره می شد ، همانطور که ما آن را درک می کنیم. در عوض ، اولین دستگاههای محاسبات الکترونیکی مجدداً “دوباره برنامه ریزی” شدند.

در سال ۲۰۰۰ ، فرد شاپیرو ، کتابدار دانشکده حقوق ییل ، ​​نامه ای منتشر کرد که فاش می کرد مقاله جان وایلدر توکی در سال ۱۹۵۸ با عنوان “آموزش ریاضیات بتن”شامل اولین کاربرد شناخته شده از عبارت “نرم افزار” است که در جستجو در بایگانی های الکترونیکی JSTOR ، قبل از استناد به OED تا دو سال.این امر باعث شد بسیاری به توکی اعتبار این اصطلاح را بدهند ، مخصوصاً در ترورهای فوت که در همان سال منتشر شد ،اگرچه توکی هیچگاه اعتباری برای چنین سکه ای دریافت نکرد. در سال ۱۹۹۵ ، پل نیکت ادعا کرد که این اصطلاح را در اکتبر ۱۹۵۳ ابداع کرده است ، اگرچه هیچ مدرکی برای اثبات ادعای او پیدا نکرد.اولین انتشار شناخته شده از اصطلاح “نرم افزار” در زمینه مهندسی در آگوست ۱۹۵۳ توسط ریچارد آر کارارت ، در یادداشت تحقیق Rand Corporation بود.


هدف ، یا حوزه استفاده

نرم افزار کاربردی

که نرم افزاری است که از سیستم رایانه ای برای انجام عملکردهای خاص یا ارائه عملکردهای سرگرمی فراتر از عملکرد اصلی خود کامپیوتر استفاده می کند. انواع مختلفی از نرم افزارهای کاربردی وجود دارد ، زیرا طیف وسیعی از کارهایی که می توان با یک رایانه مدرن انجام داد بسیار زیاد است – لیست نرم افزارها را ببینید.

سیستم نرم افزار:

که نرم افزاری برای مدیریت رفتار سخت افزار رایانه است ، به منظور ارائه عملکردهای اساسی مورد نیاز کاربران ، یا سایر نرم افزارها برای اجرای صحیح ، در صورت وجود. نرم افزار سیستم همچنین برای ارائه بستری برای اجرای نرم افزارهای کاربردی طراحی شده است و شامل موارد زیر است:

سیستم های عامل:

که مجموعه ای ضروری از نرم افزارهایی هستند که منابع را مدیریت کرده و خدمات مشترکی را برای سایر نرم افزارهایی که “در بالای آنها” اجرا می شوند ، ارائه می دهند. برنامه های نظارتی ، لودرهای بوت ، پوسته ها و سیستم های پنجره بخش های اصلی سیستم عامل ها هستند. در عمل ، یک سیستم عامل همراه با نرم افزار اضافی (از جمله نرم افزارهای کاربردی) همراه است تا کاربر به طور بالقوه بتواند با رایانه ای که تنها یک سیستم عامل دارد کارهایی را انجام دهد.

درایورهای دستگاه:

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

خدمات رفاهی:

که برنامه های کامپیوتری هستند که برای کمک به کاربران در نگهداری و مراقبت از رایانه طراحی شده اند.

نرم افزار یا بدافزار مخرب:

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

ماهیت یا حوزه اجرا:

برنامه های رومیزی مانند مرورگرهای وب و Microsoft Office و همچنین برنامه های تلفن هوشمند و رایانه لوحی (به نام “برنامه”). (در برخی از بخش های صنعت نرم افزار یک فشار برای ادغام برنامه های رومیزی با برنامه های تلفن همراه وجود دارد. Windows 8 و بعداً Ubuntu Touch سعی کردند از همان سبک رابط کاربری برنامه برای دسکتاپ ، لپ تاپ و موبایل.)
اسکریپت های جاوا اسکریپت قطعاتی از نرم افزار هستند که به طور سنتی در صفحات وب جاسازی شده اند و هنگام بارگیری یک صفحه وب بدون نیاز به افزونه مرورگر وب ، مستقیماً در مرورگر وب اجرا می شوند. اگر نرم افزار به جاوا اسکریپت ترجمه شده باشد یا افزونه مرورگر وب که از آن زبان پشتیبانی می کند نصب شده باشد ، نرم افزارهایی که به زبان های برنامه نویسی دیگر نوشته شده اند نیز می توانند در مرورگر وب اجرا شوند. متداول ترین مثال اخیر اسکریپت های ActionScript است که توسط افزونه Adobe Flash پشتیبانی می شوند.

نرم افزار سرور شامل:

برنامه های وب ، که معمولاً بر روی سرور وب اجرا می شوند و صفحات وب تولید شده به صورت پویا را به مرورگرهای وب منتقل می کنند ، به عنوان مثال PHP ، Java ، ASP.NET یا حتی JavaScript که روی سرور اجرا می شود. در دوران مدرن اینها معمولاً شامل برخی از جاوا اسکریپت ها هستند که در مرورگر وب نیز اجرا می شوند ، در این صورت آنها معمولاً تا حدی بر روی سرور ، تا حدی در مرورگر وب اجرا می شوند.
افزونه ها و برنامه های افزودنی نرم افزاری هستند که عملکرد نرم افزار دیگری را گسترش داده یا تغییر می دهند و برای عملکرد نیاز به استفاده از نرم افزار دارند.
نرم افزار جاسازی شده به عنوان یک سیستم عامل در سیستم های جاسازی شده ، دستگاه های مختص یکبار استفاده یا چند مورد مانند ماشین و تلویزیون قرار دارد (اگرچه برخی از دستگاه های جاسازی شده مانند چیپست های بی سیم خود می توانند بخشی از یک سیستم رایانه ای معمولی و غیر جاسازی شده مانند رایانه شخصی باشند. یا تلفن هوشمند). [۱۲] در زمینه سیستم تعبیه شده ، گاهی تفاوت روشنی بین نرم افزار سیستم و نرم افزار کاربردی وجود ندارد. با این حال ، برخی از سیستم های جاسازی شده سیستم عامل های تعبیه شده را اجرا می کنند و این سیستم ها تمایز بین نرم افزار سیستم و نرم افزار کاربردی را حفظ می کنند (اگرچه معمولاً فقط یک برنامه ثابت وجود دارد که همیشه اجرا می شود).
میکرو کد یک نوع نرم افزار ویژه و نسبتاً مبهم است که به خود پردازنده می گوید چگونه کد ماشین را اجرا کند ، بنابراین در واقع سطح پایین تری از کد ماشین است. این نرم افزار معمولاً اختصاصی سازنده پردازنده است و هرگونه به روز رسانی نرم افزاری میکروکد اصلاحی لازم توسط آنها به کاربران ارائه می شود (که بسیار ارزان تر از ارسال سخت افزارهای جایگزین پردازنده است). بنابراین یک برنامه نویس معمولی انتظار ندارد که مجبور باشد با آن برخورد کند.

ابزارهای برنامه نویسی:

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

نرم افزار به یک یا چند زبان برنامه نویسی نوشته شده است. زبانهای برنامه نویسی زیادی وجود دارد و هر کدام حداقل یک پیاده سازی دارند که هر کدام از آنها شامل مجموعه ای از ابزارهای برنامه نویسی است. این ابزارها ممکن است برنامه های نسبتاً مستقل مانند کامپایلر ، اشکال زدایی ، مترجم ، پیوند دهنده و ویرایشگر متن باشند که می توانند برای انجام یک کار با یکدیگر ترکیب شوند. یا ممکن است یک محیط توسعه یکپارچه (IDE) تشکیل دهند ، که ترکیبی از بیشتر یا همه عملکرد چنین ابزارهای مستقل است. IDE ها ممکن است این کار را با استناد به ابزارهای فردی مربوطه و یا اجرای مجدد عملکرد آنها به روش جدید انجام دهند. IDE می تواند انجام کارهای خاص را آسان تر کند ، مانند جستجوی فایل ها در یک پروژه خاص. بسیاری از پیاده سازی های زبان برنامه نویسی گزینه استفاده از هر دو ابزار جداگانه یا IDE را ارائه می دهند.

موضوعات

معماری:

کاربران اغلب چیزها را متفاوت از برنامه نویسان می بینند. افرادی که از رایانه های مدرن عمومی استفاده می کنند (برخلاف سیستم های جاسازی شده ، رایانه های آنالوگ و ابر رایانه ها) معمولاً سه لایه نرم افزار را مشاهده می کنند که وظایف مختلفی را انجام می دهند: پلت فرم ، برنامه و نرم افزار کاربر.

نرم افزار پلتفرم:

این پلتفرم شامل سیستم عامل ، درایورهای دستگاه ، سیستم عامل و معمولاً رابط کاربری گرافیکی است که در مجموع به کاربر اجازه می دهد با رایانه و لوازم جانبی آن (تجهیزات مرتبط) تعامل داشته باشد. نرم افزارهای پلتفرم اغلب همراه با کامپیوتر عرضه می شوند. در رایانه شخصی معمولاً می توان نرم افزار پلتفرم را تغییر داد.

نرم افزار کاربردی:

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

نرم افزار نوشته شده توسط کاربر:

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

اجرا

مقاله اصلی: اجرا (محاسبات)

نرم افزارهای رایانه ای باید در حافظه کامپیوتر “بارگذاری” شوند (مانند هارد دیسک یا حافظه). پس از بارگیری نرم افزار ، کامپیوتر قادر است نرم افزار را اجرا کند. این شامل انتقال دستورالعمل های نرم افزار کاربردی از طریق نرم افزار سیستم به سخت افزاری است که در نهایت دستورالعمل را به عنوان کد ماشین دریافت می کند. هر دستورالعمل باعث می شود کامپیوتر عملیاتی را انجام دهد – انتقال داده ها ، انجام محاسبه یا تغییر جریان کنترل دستورالعمل ها.

حرکت داده ها معمولاً از یک مکان در حافظه به مکان دیگر است. گاهی اوقات شامل انتقال داده ها بین حافظه و ثبات است که دسترسی سریع به داده ها را در CPU فعال می کند. انتقال داده ها ، به ویژه مقادیر زیادی از آن ، می تواند پرهزینه باشد. بنابراین ، گاهی اوقات با استفاده از “اشاره گر” به داده ها از این امر جلوگیری می شود. محاسبات شامل عملیات ساده ای مانند افزایش ارزش یک عنصر داده متغیر است. محاسبات پیچیده تر ممکن است شامل بسیاری از عملیات و عناصر داده با هم باشد.

کیفیت و قابلیت اطمینان

کیفیت نرم افزار بسیار مهم است ، به ویژه برای نرم افزارهای تجاری و سیستمی مانند Microsoft Office ، Microsoft Windows و Linux. اگر نرم افزار معیوب باشد (باگی) ، می تواند کار شخص را حذف کند ، کامپیوتر را خراب کند و کارهای غیرمنتظره دیگر انجام دهد. خطاها و خطاها “اشکالات” نامیده می شوند که اغلب در طول آزمایش آلفا و بتا کشف می شوند. نرم افزارها نیز اغلب قربانی آنچه که به عنوان پیری نرم افزار شناخته می شود ، می شوند ، که باعث تخریب تدریجی عملکرد ناشی از ترکیبی از اشکالات دیده نشده می شود.

بسیاری از اشکالات با آزمایش نرم افزار کشف و حذف می شوند (اشکال زدایی می شوند). با این حال ، آزمایش نرم افزار به ندرت – حتی در صورت وجود – هر گونه اشکال را برطرف می کند. برخی از برنامه نویسان می گویند که “هر برنامه حداقل یک اشکال دیگر دارد” (قانون لوبارسکی).در روش آبشاری توسعه نرم افزار ، معمولاً از تیم های آزمایشی جداگانه استفاده می شود ، اما در رویکردهای جدیدتر ، که به طور جمعی توسعه نرم افزار چابک نامیده می شود ، توسعه دهندگان اغلب همه آزمایشات خود را انجام می دهند و نرم افزار را به طور منظم برای دریافت بازخورد به کاربران/مشتریان نشان می دهند. نرم افزار را می توان از طریق آزمایش واحد ، آزمون رگرسیون و سایر روش ها ، که به صورت دستی یا بیشتر معمولاً به صورت خودکار انجام می شود ، آزمایش کرد ، زیرا مقدار کد مورد آزمایش می تواند بسیار زیاد باشد. به عنوان مثال ، ناسا روشهای تست نرم افزار بسیار دقیق برای بسیاری از سیستم عامل ها و عملکردهای ارتباطی دارد. بسیاری از عملیات های مبتنی بر ناسا از طریق برنامه های فرماندهی با یکدیگر تعامل و شناسایی می کنند. این باعث می شود بسیاری از افرادی که در ناسا کار می کنند سیستم های عملکردی را به طور کلی بررسی و ارزیابی کنند. برنامه های حاوی نرم افزار فرمان ، مهندسی سخت افزار و عملیات سیستم را قادر می سازد تا در کنار هم بسیار راحت تر عمل کنند.

مجوز

مجوز نرم افزار

مجوز نرم افزار به کاربر این حق را می دهد که از نرم افزار در محیط مجاز استفاده کند و در مورد مجوزهای نرم افزار رایگان نیز حقوق دیگری مانند حق کپی را اعطا می کند.

نرم افزارهای اختصاصی را می توان به دو نوع تقسیم کرد:

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

ثبت اختراعات

 اختراع نرم افزار و بحث ثبت اختراع نرم افزار

ثبت اختراعات نرم افزاری ، مانند سایر انواع اختراعات ، از لحاظ نظری قرار است به مخترع مجوز انحصاری و محدودی در زمان بدهد تا ایده مفصلی (به عنوان مثال یک الگوریتم) در مورد نحوه اجرای یک قطعه نرم افزار یا یک جزء از یک نرم افزار ارائه دهد. فرض بر این نیست که ایده های مفید برای نرم افزار و الزامات کاربران قابل ثبت است و پیاده سازی های مشخص (یعنی بسته های نرم افزاری واقعی که حق ثبت اختراع را اجرا می کنند) نیز قابل ثبت نیستند – این موارد قبلاً به طور کلی تحت حق چاپ قرار گرفته اند. بطور خودکار. بنابراین ثبت اختراعات نرم افزاری قرار است ناحیه میانی ، بین الزامات و اجرای ملموس را پوشش دهد. در برخی از کشورها ، الزام اختراع ادعایی برای تأثیر بر جهان فیزیکی نیز می تواند بخشی از الزامات معتبر بودن ثبت اختراع نرم افزار باشد – اگرچه از آنجا که همه نرم افزارهای مفید بر جهان فیزیکی تأثیر می گذارد ، ممکن است این الزام برای بحث باز است در همین حال ، قانون کپی رایت آمریکا در جنبه های مختلف نوشتن کد نرم افزار اعمال شد.

اختراعات نرم افزاری در صنعت نرم افزار بحث برانگیز است و بسیاری از افراد نظرات مختلفی در مورد آنها دارند. یکی از منابع اختلاف نظر این است که به نظر می رسد شکاف فوق بین ایده های اولیه و ثبت اختراع در عمل توسط وکلای ثبت اختراع رعایت نمی شود-به عنوان مثال حق ثبت اختراع برنامه نویسی جهت دار (AOP) ، که ادعا می کرد در مورد هر ابزار برنامه نویسی حق مطالبه می کند. پیاده سازی ایده AOP ، هرطور که اجرا شود. یکی دیگر از مناقشات تأثیر بر نوآوری است ، به طوری که بسیاری از کارشناسان و شرکت های برجسته استدلال می کنند که نرم افزار آنقدر سریع در حال حرکت است که ثبت اختراع نرم افزار صرفاً هزینه های اضافی و خطرات دادخواهی اضافی ایجاد می کند و در واقع نوآوری را به تاخیر می اندازد. در مورد بحث در مورد ثبت اختراع نرم افزار در خارج از ایالات متحده ، این بحث مطرح شده است که شرکت های بزرگ آمریکایی و وکلای ثبت اختراع به احتمال زیاد ذینفعان اصلی اجازه یا ادامه اجازه ثبت اختراع نرم افزار هستند.

طراحی و پیاده سازی

توسعه نرم افزار ، برنامه نویسی کامپیوتر و مهندسی نرم افزار

طراحی و اجرای نرم افزار بسته به پیچیدگی نرم افزار متفاوت است. به عنوان مثال ، طراحی و ایجاد Microsoft Word بسیار بیشتر از طراحی و توسعه دفترچه یادداشت مایکروسافت طول کشید ، زیرا دومی دارای ویژگی های اساسی تر است.

نرم افزارها معمولاً در محیطهای توسعه یکپارچه (IDE) مانند Eclipse ، IntelliJ و Microsoft Visual Studio طراحی و ایجاد می شوند (با کد نویسی/نوشتاری/برنامه نویسی) که می توانند فرآیند را ساده کرده و نرم افزار را (در صورت وجود) کامپایل کنند. همانطور که در بخش دیگری ذکر شد ، نرم افزار معمولاً بر روی نرم افزارهای موجود و رابط برنامه نویسی برنامه (API) ایجاد می شود که نرم افزار اصلی مانند GTK+، JavaBeans یا Swing ارائه می دهد. کتابخانه ها (API) را می توان بر اساس هدف آنها طبقه بندی کرد. به عنوان مثال ، Spring Framework برای پیاده سازی برنامه های سازمانی ، کتابخانه Windows Forms برای طراحی برنامه های رابط کاربری گرافیکی (GUI) مانند Microsoft Word و Windows Communication Foundation برای طراحی خدمات وب استفاده می شود. وقتی برنامه ای طراحی می شود ، به API متکی است. به عنوان مثال ، یک برنامه رومیزی مایکروسافت ویندوز ممکن است برای بستن یا باز کردن برنامه ، توابع API را در کتابخانه .NET Windows Forms مانند Form1.Close () و Form1.Show () [15] فراخوانی کند. بدون این API ها ، برنامه نویس باید این قابلیت ها را کاملاً خود بنویسد. شرکت هایی مانند اوراکل و مایکروسافت API های خود را ارائه می دهند به طوری که بسیاری از برنامه ها با استفاده از کتابخانه های نرم افزاری آنها که معمولاً API های متعددی در آنها وجود دارد ، نوشته می شوند.

ساختارهای داده مانند جداول هش ، آرایه ها و درختان باینری و الگوریتم هایی مانند quicksort می توانند برای ایجاد نرم افزار مفید باشند.

نرم افزارهای رایانه ای دارای ویژگی های اقتصادی خاصی هستند که طراحی ، ایجاد و توزیع آن را از سایر کالاهای اقتصادی متفاوت می کند.

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

صنعت و سازمانها:

طیف وسیعی از شرکت های نرم افزاری و برنامه نویسان در جهان شامل صنعت نرم افزار هستند. نرم افزار می تواند یک صنعت سودآور باشد: بیل گیتس ، بنیانگذار مایکروسافت ، ثروتمندترین فرد جهان در سال ۲۰۰۹ بود ، عمدتا به دلیل مالکیت تعداد قابل توجهی از سهام مایکروسافت ، شرکتی که مسئول Microsoft Windows و Microsoft Office بود. محصولات نرم افزاری – هر دو در رده محصولات مربوطه پیشرو بازار هستند.

سازمان های نرم افزاری غیرانتفاعی شامل Free Software Foundation ، GNU Project و Mozilla Foundation می باشد. سازمان های استاندارد نرم افزاری مانند W3C ، IETF استانداردهای نرم افزاری توصیه شده ای مانند XML ، HTTP و HTML را توسعه می دهند ، به طوری که نرم افزار می تواند از طریق این استانداردها با یکدیگر همکاری کند.

سایر شرکتهای بزرگ نرم افزاری معروف عبارتند از Google ، IBM ، TCS ، Infosys ، Wipro ، HCL Technologies ، Oracle ، Novell ، SAP ، Symantec ، Adobe Systems ، Sidetrade و Corel ، در حالی که شرکتهای کوچک اغلب نوآوری ارائه می دهند.

جهت مطالعه موارد مرتبط با علوم کامپیوتر و الکترونیک:

دیدگاهتان را بنویسید