دسته‌ها
وبلاگ

سئو سایت

دسته‌ها
وبلاگ

طراحی فروشگاه اینترنتی

دسته‌ها
وبلاگ

طراحی سایت

دسته‌ها
وبلاگ

فریم ورک چیست ؟

فریم ورک چیست ؟

فریم ورک چیست ؟

هدف از ایجاد فریم ورک فراهم کردن ساختاری مشخص و استاندارد برای کد نویسی بی دردسر, مفهوم دار و قابل توسعه است.


هدف از استفاده فریم ورک چیست؟

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

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

فریم ورک

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

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

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


برای مثال یکی از بهترین فریم ورک های php، فریم ورک لاراول است .

دسته‌ها
وبلاگ

انگولار جی اس (angular js) چیست ؟

انگولار جی اس (angular js) چیست ؟

انگولار جی اس (angular js) چیست ؟

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

انگولار جی اس را بیشتر بشناسیم

انگولار جی اس یکی از نسخه‌های توسعه یافته زبان‌هایی جاوا اسکریپتی است که در سال ۲۰۰۹ متولدشده است. این فریم ورک به‌صورت کاملا رایگان بوده ضمن اینکه به‌صورت متن‌ باز ارائه‌ شده است که می‌شود به‌راحتی مطابق سلیقه‌ای که داریم از آن استفاده کرده و کد نویسی را انجام دهیم.

انگولار جی اس (angular js) چیست ؟

آشنایی با ویژگی برنامه‌های تک‌صفحه‌ای یا single page application:

زمانی که به فرض شما وب‌سایتی را بررسی می‌کنید مشاهده خواهید کرد که این وب‌سایت از صفحات و بخش‌های مختلفی تشکیل‌ شده است و هر بخش هم شامل مطالب مختص به خود هست اما گاهی تمامی مطالب و بخش‌های یک وب‌سایت یا یک برنامه تحت وب، در یک صفحه وب قرار می‌گیرد.
لذا شما در این وب‌سایت نیاز دارید برای رفتن از یک صفحه به صفحه‌های دیگر، اصطلاحا صفحه موردنظر را load کنید اما در برنامه‌های تک‌صفحه‌ای دیگر نیاز به load نیست لذا اگر بخواهید از یک صفحه به صفحه موردنظر خود بروید دیگر نیاز نیست تا صفحه موردنظر شما بارگذاری مجدد شود در ضمن صفحه موردنظر شما بلافاصله با زدن دکمه‌های back یا forward به صفحه بعد یا قبل خودش خواهد رفت بدون اینکه صفحات موردنظر بخواهند دوباره load شوند و این کار باعث خواهد شد تا شما سرعت بالاتری را در مشاهده صفحات وب داشته باشید.
امروزه یکی از علت‌های استفاده از انگولار جی اس توسعه و قدرتمندتر کردن برنامه‌های تک‌صفحه‌ای یا SPA هستند لذا می‌توان در پروژه‌های بزرگ و کوچک از فریم‌ورک انگولار جی اس استفاده بهینه را برد.

ویژگی‌های کاربردی و مهم در انگولار جی اس:

یکی از موارد مهم استفاده از انگولار جی اس را موارد بالا شرح دادیم اما در ادامه این مقاله سعی داریم تا ویژگی‌های مهم دیگری که این فریم‌ورک دارد را به شما معرفی کنیم:

۱. امکان اتصال داده به صورت دوطرفه: یکی از خصوصیاتی که انگولار جی اس دارد این است که بر پایه الگوی طراحی MCV نوشته‌ شده است. M مخفف model و V مخفف view است.
درواقع model کاری که انجام می‌دهد این است که اطلاعات و داده‌ها را از منابع بازیابی می‌کند و view نیز به‌عنوان یک نمایشگر به من و یا شما که مخاطب یک وب‌سایت هستیم، این اطلاعات را نشان می‌دهد که بسیار در رابط کاربری یا UI کاربردی است.
نکتهای که اینجا وجود دارد این است که زمانی که شما تغییری را در model انجام می‌دهید باید در view هم تغییراتی را اعمال کنید که این کار می‌توانید در دادههای زیاد، کاری بسیار وقت‌گیر باشد لذا اگر از انگولار جی اس استفاده می‌کنید نباید نگران این موضوع باشید چراکه انگولار جی اس هر داده را به view مشخص مرتبط کرده و در هنگام تغییرات، این view است که به‌صورت خودکار آپدیت می‌شود.

۲. دایرکیتوها: در انگولار جی اس هر جا سخن از سفارشی‌سازی و بکار گیری ابزار جدید است نام دایرکتیوها میدرخشد.
لذا دایرکتیوها همواره یکی از بخشهای هیجان‌انگیز انگولار جی اس بوده که می‌توان به‌وسیله آنها، عناصر و تگهای جدید را به نمایش گذاشت.

انگولار جی اس (angular js) چیست ؟

۳. dependency injection یا تزریق وابستگی: فرض کنید در خانه خود نشسته‌اید و در حال تعمیر یک وسیله برقی هستید که ناگهان پیچی را گم می‌کنید. دوست داشتید در خانه شما یک سیستم وجود داشت که به‌جای دنبال کردن و پیدا کردن پیچ، به آن سیستم دستور میدادید تا طبق تعریفی که قبلاً برای آن داشته‌اید، به شما مشابه آن پیچ را تحویل بدهد.
حال بیاییم در برنامه‌ نویسی، گاهی شما یک سری دستورها را قبلاً تعریف می‌کنید اما در هنگام برنامه‌ نویسی نیاز دارید که همان دستورات را به کار گرفته و برنامه خود را توسعه دهید، اینجاست که خاصیت تزریق وابستگی خودش را نشان می‌دهد و باعث می‌شود علاوه بر صرفه‌جویی درزمانی که دارید، خیلی راحت‌تر و سریع‌تر به دنبال اجرای دستورات خود باشید.
درواقع شما در انگولار جی اس با تعریف یک سری مسائل یا دستورها، این قابلیت را به برنامه نویسی خود می‌دهید که هر زمان که احتیاج به چیزی داشتید، به شما بدهد یا اصطلاحاً به شما تزریق نماید به این شرط که قبلاً این دستورات را اعلام کرده باشید.

۴. الگوهای template: یکی از نکات مهمی که در طراحی وب وجود دارد، بحث قالب‌ها است یعنی همان شکل کلی که از یک وب‌سایت مشاهده می‌کنیم. انگولار جی اس با ابزارهای قدرتمند خود ازجمله الگوی طراحی mcv، دایرکتیوها و … توانسته است به‌ آسانی طراحی قالب را بر عهده خود داشته باشد.

نتیجه گیری:

انگولار جی اس یکی از فریم ورک‌های زبان جاوا اسکریپت است که از سال ۲۰۰۹ کار خود را شروع کرده است. با توجه به ویژگی‌هایی که در بالا برشمردیم این فریم ورک توانسته کد نویسی را تسهیل و لذت بیشتری را به آن ببخشد ضمن آنکه مفاهیمی مثل وابستگی تزریقی و دیتا بایندیگ (اتصال دوطرفه داده) توانسته کد نویسی را به‌صورت مرتب و با اصول مشخص پیاده‌سازی نماید. اگر در پروژهای هستید که با زبان جاوا اسکریپتی برنامه‌ نویسی میشود، انگولار جی اس میتواند یک انتخاب خود برای شما باشد.
برای یادگیری بیشتر و آموزشهای کاربردی انگولار جی اس و همین‌طور دیگر زبان‌های برنامه‌نویسی میتوانید با ما در این وبسایت همراه باشید.

خلاصه مقاله انگولار جی اس را در نقشه ذهنی زیر مشاهده می‌کنید:

انگولار جی اس (angular js) چیست ؟

با مقالات تخصصی ما همراه باشید تا دانش خود را در زمینه‌های مختلف طراحی سایت افزایش دهید.

دسته‌ها
وبلاگ

React JS؛ کتابخانه محبوب جاوا اسکریپت برای طراحی UI

React JS؛ کتابخانه محبوب جاوا اسکریپت برای طراحی UI

React JS؛ کتابخانه محبوب جاوا اسکریپت برای طراحی UI

React JS یکی از سریع‌ترین و محبوب‌ترین کتابخانه‌ها (Library) جاوا اسکریپت است که توسط فیسبوک اینستاگرام و یک جامعه مستقل از توسعه دهندگان وب مدیریت و نگهداری می‌شود.


React یک Libarary متن باز و البته رایگان جاوا اسکریپت برای طراحی رابط کاربری است. این کتابخانه جاوا اسکریپت در ماه مه سال ۲۰۱۳ به صورت عمومی منتشر شد. جالب است بدانید که این فریم ورک در ابتدا توسط یکی از مهندسین فعال در فیسبوک به وجود آمد. آقای «جردن واک» در سال ۲۰۱۱ این فریم ورک را تحت تاثیر XHP که یک کامپوننت HTML برای زبان برنامه نویسی PHP‌ است، ایجاد کرد. در همین سال React روی قسمت News Feed شبکه اجتماعی فیسبوک به کار گرفته شد و ۲ سال بعد، یعنی در سال ۲۰۱۳ هم استفاده از آن توسط فیسبوک به اینستاگرام تعمیم پیدا کرد.

نکته مهم در کاربرد React JS این است که این کتابخانه صرفا در الگوی طراحی MVC، عهده‌دار بخش View است. View یا اینترفیس در واقع مرتبط با نمایش اجزا هستند و طبعا React JS به جای پرداختن به الگوی MVC به وظایفی می‌پردازد که مربوط به نمایش اجزا می‌پردازد. از دیگر کاربردهای React JS استفاده در طراحی و ایجاد سایت تک صفحه‌ای است.

استفاده از React JS در HTML

استفاده از این فریم ورک جاوا اسکریپت در HTML کار چندان مشکلی نیست. برای این کار شما باید از JSX و ECMAScript 2015 استفاده کنید. بنابراین انتظار می‌رود که پیش از استفاده از React دانش کافی از HTML و جاوا اسکریپت داشته باشید. اگر دوست دارید با HTML آشنا شوید، می‌توانید دوره آموزش HTML مقدماتی در لیداوب را مطالعه کنید. برای استفاده از «ری اکت» به کد HTML زیر توجه کنید:

<div id="myReactApp"></div>

<script type="text/babel">
  class Greeter extends React.Component { 
    render() { 
      return <h1>{this.props.greeting}</h1>
    } 
  } 

  ReactDOM.render(<Greeter greeting="Hello World!" />, document.getElementById('myReactApp'));
</script>

در اینجا، کلاس Greeter یک کامپوننت React است که ویژگی (Property) greeting را می‌پذیرد. پس از آن متد ReactDOM.render مثالی از کامپوننت Greeter ایجاد می‌کند و ویژگی greeting را به عنوان Hello World تبدیل کرده و با شناسه myReactApp ، این کامپوننت را به عنوان المنت فرزند (child) به المنت DOM، رندر می‌کند. بنابراین هنگامی که کد HTML بالا در مرورگر اینترنت نمایش داده شود، نتیجه از این قرار خواهد بود:

<div id="myReactApp">
  <h1>Hello World!</h1>
</div>

چرا React JS اینقدر محبوب است؟

react js

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

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

React چه خصوصیات متمایزی دارد؟

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

JSX

jsx

در React، برای پروسه Templating از JSX یا JavaScript Syntax Edition به جای جاوا اسکریپت عادی استفاده شود. JSX نوعی جاوا اسکریپت ساده است که شما اجازه می‌دهد تا کدهای html را درون ساختارش قرار دهید. این کدهای HTML در ساختار JSX در هنگام اجرا به کدهای جاوا اسکریپتی رندر می‌شوند. البته این امکان وجود دارد که کدها را بدون استفاده از HTML و به صورت جاوا اسکریپت هم بنویسید. در این صورت دیگر نیازی به دانش JSX نیست.

React Native

react

React یک سری کتابخانه نیتو (Native) دارد که در سال ۲۰۱۵ توسط فیسبوک به دست توسعه دهندگان اپلیکیشن موبایل رسید. این کتابخانه‌های نیتیو React، یک معماری ارائه می‌دهند که با استفاده از آن بتوان اپلیکیشن اندروید نیتیو و اپلیکشن iOS نیتیو توسعه داد.

Virtula Document Objective Model

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

Single-way Data flow

در React یک سری مقدار (Value) تغییر ناپذیر به عوامل رندر کننده کامپوننت‌ها داده می‌شود. این مقدارها دقیقا مثل ویژگی تگ HTML هر رندر کننده است. در این حالت کامپوننت‌ها نمی‌توانند به صورت مستقیم هیچ ویژگی را دستکاری کنند، اما می‌توانند از یک عملکرد call back استفاده کنند تا به کمک آن تغییرات را انجام دهند. به این فرایند، «properties flow down; action flow up» می‌گویند.

انتقال داده react

چرا باید از React استفاده کنیم؟

حال که تا حدودی با React و کارکرد آن آشنا شدیم، سوال اینجا است که، واقعا چرا با وجود پلتفرم‌هایی مثل انگولار، باید از React JS‌استفاده کنیم؟

دنیای طراحی رابط کاربری و froon-end هر روز با تکنولوژی‌ها و فریم ورک های جدید غافلگیر می‌شود. در این وضعیت بهتر است وقت خود را برای یاد گرفتن تکنولوژی‌های جدیدی که ممکن است خیلی زود به پایان عمرشان برسند، تلف نکنیم. اما اگر دلتان می‌خواهد یک تکنولوژی جدید یاد بگیرید که در تمام دوران حرفه‌ای خود از دانستن آن به خود ببالید، به شما توصیه می‌کنم React JS را بررسی کنید.

ری اکت

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

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

دسته‌ها
وبلاگ

مفهوم برنامه نویسی سیستم

مفهوم برنامه نویسی سیستم

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

بر اساس تعاریف جدید برنامه‌نویسی سطح پائین و برنامه‌نویسی سیستم یکی نیستند و این دو مفهوم به اشتباه یکسان فرض شده‌اند.

ترکیب دو ایده‌ی برنامه‌نویسی سطح پائین (کار با جزئیات سخت‌افزاری و پیاده‌سازی ماشین) و طراحی سیستم (ساخت و مدیریت یک مجموعه‌ی پیچیده از مؤلفه‌های مرتبط) به نظر غیرضروری می‌رسد؛ اما این قضیه تا چه اندازه صحیح است؟ و از تعریف مجدد سیستم‌ها به چه نتیجه‌ای می‌توان رسید؟

دهه‌ی ۱۹۷۰: پیشرفت اسمبلی

برای درک تکامل اصطلاح برنامه‌نویسی سیستم بازگشت به منشأ سیستم‌های کامپیوتری مدرن ضروری است. دقیقا مشخص نیست چه کسی این عبارت را اختراع کرده است اما بر اساس پژوهش‌ها تلاش‌های جدی برای تعریف سیستم‌های کامپیوتری تقریبا از اوایل دهه‌ی ۷۰ آغاز شده است. در مقاله‌ای با نام زبان‌های برنامه‌نویسی سیستم به این تعریف اشاره شده است:

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

۱. مسئله‌ی قابل حل ماهیت گسترده‌ای دارد و شامل تعداد زیادی مسائل فرعی و متنوع است.

۲. از برنامه‌ی سیستمی برای پشتیبانی از برنامه‌های کاربردی و نرم‌افزاری دیگر استفاده می‌شود اما درعین‌حال می‌تواند بسته‌ی کاملی از برنامه‌ها هم باشد.

۳. برنامه‌ی سیستمی برای تولید پیوسته طراحی شده است نه به عنوان راه‌حلی یک جا برای حل یک مشکل در برنامه‌ها

۴. برنامه‌ی سیستمی از نظر تعداد و انواع ویژگی‌های تحت پشتیبانی به صورت پیوسته در حال تکامل است.

۵. یک برنامه‌ی سیستمی به یک ساختار یا برنامه‌ی مشخص داخل و میان ماژول‌ها (برای مثال برقراری ارتباط) نیاز دارد و معمولا توسط بیش از یک شخص یا گروهی از اشخاص طراحی و پیاده‌سازی می‌شود.

این تعریف تا حدودی قابل قبول است. سیستم‌های کامپیوتری معمولا دارای مقیاس گسترده و کاربرد طولانی هستند و به مرور زمان تغییر می‌کنند. البته با این که این تعریف بیشتر توصیفی است اما چشم‌انداز اصلی آن جداسازی زبان‌های سطح پائین از زبان‌های سیستمی است (برای مثال مقایسه‌ی اسمبلی با فرترن).

زبان سیستم

هدف از زبان برنامه‌نویسی سیستم فراهم کردن زبانی است که بتوان بدون نگرانی در مورد دستکاری بیت‌ها از آن استفاده کرد و درعین‌حال به کدی دست یافت که عملکرد آن از کدهای دستی بهتر باشد. چنین زبانی باید اختصار و خوانایی زبان‌های سطح بالا را با بازدهی فضا و زمان و دسترسی به امکانات سیستم‌عامل و ماشین زبان اسمبلر را ترکیب کند. زمان طراحی، نوشتن و اشکال‌زدایی باید بدون تحمیل سربار بر منابع سیستمی به حداقل برسند. پژوهشگرهای CMU زبانی به نام BLISS (زبانی برای برنامه‌نویسی سیستم) را منتشر کرده‌اند که به این صورت تعریف می‌شود:

BLISS یک زبان پیاده‌سازی است، البته با توجه به این که هدف تمام زبان‌های کامپیوتری پیاده‌سازی است، این تعریف کمی مبهم است. اما در واقع مفهوم عمومی این اصطلاح مدنظر است یعنی زبان‌های سطح بالایی که بیشتر بر یک برنامه‌ی مشخص مثل نوشتن سیستم‌های بزرگ نرم‌افزاری تولیدی برای یک ماشین مشخص تأکید می‌کنند.

مؤلفان، زبان پیاده سازی را بالاتر از اسمبلی و پائین‌تر از زبان طراحی می‌دانند

زبان‌های هدفمند مثل کامپایلر، کامپایلرها در این دسته قرار نمی‌گیرند و البته لزوما مستقل از ماشین هم نیستند. در این تعریف بر اصطلاح پیاده‌سازی تأکید می‌شود و از کلماتی مثل طراحی و مستندسازی استفاده نشده است؛ بنابراین از یک زبان پیاده‌سازی انتظار نمی‌رود که طراحی یک سیستم بزرگ یا مستندسازی آن را توصیف کند. مفاهیمی مثل استقلال ماشین، توصیف مشابهی از طراحی و پیاده‌سازی، خودمستندسازی و مفاهیم دیگر دارند و معیارهایی برای ارزیابی زبان‌های مختلف هستند.

در اینجا مؤلفان، زبان پیاده‌سازی را بالاتر از اسمبلی و پائین‌تر زبان طراحی می‌دانند. بر اساس پژوهش‌های قبلی، طراحی و پیاده سازی سیستم هرکدام زبان مجزایی دارند. آخرین مدخل مربوط به برنامه‌نویسی سیستم را می‌توان در یک متن آموزشی در مورد یادگیری برنامه‌نویسی سیستم مشاهده کرد که در ‍۱۹۷۲ نوشته شده است.

اما تعریف دقیق برنامه‌نویسی سیستم چیست؟

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

در اولین روزهای اختراع کامپیوتر، مردم با دستورالعمل‌های ابتدایی بین دو حالت On و Off با کامپیوتر ارتباط برقرار می‌کردند. خیلی زود مردم به دنبال دستورالعمل‌های پیچیده‌تر رفتند. برای مثال می‌خواستند خروجی این مسأله را در کامپیوتر ببینند: X=30*Y؛ با توجه به این که Y=10 در نتیجه X کدام است؟ کامپیوترهای کنونی بدون برنامه‌های سیستمی قادر به درک چنین زبانی نیستند.

برنامه نویسی سیستممبانی برنامه‌نویسی سیستم

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

دهه‌ی ۱۹۹۰: ظهور اسکریپت‌نویسی

در دهه‌ی ۷۰ و ۸۰ اغلب پژوهشگرها برنامه‌نویسی سیستم را نقطه‌ی مقابل برنامه‌نویسی اسمبلی می‌دانستند. در آن دوره ابزار خوبی برای ساخت سیستم‌ها وجود نداشت (البته هیچ اطمینانی از وجود Lisp در میان این زبان‌ها وجود ندارد هیچ کدام از منابع به Lisp اشاره نکرده‌اند، با این حال ماشین‌های Lisp وجود داشتند).

در اواسط دهه‌ی ۹۰، با ظهور زبان‌های اسکریپت‌نویسی داینامیک تغییرات عمده‌ای در زبان‌های برنامه‌نویسی رخ داد. بهبود سیستم‌های اسکریپت‌نویسی مثل Bash، زبان‌هایی مثل پرل (۱۹۸۷)، Tcl ، پایتون (۱۹۹۰)، Ruby ،PHP  و جاوا اسکریپت (۱۹۹۵) به توسعه‌ی برنامه‌نویسی کمک کرد. این تغییرات در مقاله‌ی تأثیرگذار اوسترهاوت با عنوان  اسکریپت نویسی: برنامه‌نویسی سطح بالای قرن بیست‌ویک (۱۹۹۸) به اوج خود رسیدند. به موج حاصل از این تغییرات دوگانگی اوسترهاوت بین زبان‌های برنامه‌نویسی سیستمی و زبان‌های اسکریپت‌نویسی گفته می‌شود.

زبان‌های اسکریپت‌نویسی برای وظایفی متفاوت با زبان‌های برنامه‌نویسی سیستمی طراحی شده‌اند و همین مسأله ریشه‌ی تفاوت‌های بنیادی این دو زبان است. زبان‌های برنامه‌نویسی سیستمی برای تولید ساختارهای داده‌ای و الگوریتم‌ها از ابتدایی‌ترین عناصر کامپیوتری مثل کلمات حافظه طراحی شده‌اند.

در مقابل، زبان‌های اسکریپت‌نویسی برای چسباندن طراحی شده‌اند: مجموعه‌ای از مؤلفه‌های قدرتمند دارند و در اصل برای اتصال این مؤلفه‌ها با یکدیگر در نظر گرفته شده‌اند. زبان‌های برنامه‌نویسی برای کمک به مدیریت پیچیدگی،Strongly Typed یا وابسته‌ی زیاد به نوع هستند؛ مفهومی که در مقابل Weakly Typed یا وابسته کم به نوع قرار می‌گیرد. به این معنی که باید نوع متغیرها، ورودی‌ها و خروجی‌‌ها توابع و… دقیقا تعیین شوند و کامپایلر پیش از اجرای کدها و رسیدن به مرحله‌ی اجرای Runtime و بیلد، این مورد را بررسی می‌کند. در حالی‌که زبان‌های اسکریپت‌نویسی Typeless (بدون نوع) هستند. برای مثال می‌توان از تعریف متغیر بدون نوع در آن‌ها استفاده کرد و کامپایلر تمام کارها را برعهده دارد. از این‌رو برای ساده‌سازی روابط بین مؤلفه‌ها و توسعه‌ی سریع برنامه‌ها از آن‌ها استفاده می‌شود. گرایش‌های جدید از جمله ماشین‌های سریع‌تر، زبان‌های اسکریپت‌نویسی بهتر، اهمیت فزاینده‌ی واسطه‌های کاربری گرافیکی و معماری‌های مؤلفه‌ای و رشد اینترنت به شدت کاربرد زبان‌های اسکریپت‌نویسی را بالابرده‌اند.

در سطح تخصصی اوسترهاوت اسکریپت‌نویسی و سیستم را در راستای محورهای Type Safety (ایمنی نوع) و دستورالعمل به ازای هر عبارت مقایسه کرده است. Type Safety یا ایمنی نوع به قابلیت یا ویژگی یک زبان برنامه‌نویسی برای جلوگیری یا کاهش رخ دادن Type Errors یا خطاهای ناشی از عدم تطابق نوع گفته می‌شود. برای مثال تعریف متغیری از نوع اعشاری و به کارگیری آن به جای اعداد صحیح، منجر به وقوع یک Type Error می‌شود. اوسترهاوت در سطح طراحی بر نقش‌های جدید هر کلاس زبانی تأکید می‌کند: برنامه‌نویسی سیستم برای ساخت مؤلفه‌ها و اسکریپت‌نویسی برای چسباندن آن‌ها به یکدیگر درنظر گرفته می‌شوند.

نمودار اوسترهاوت

مقایسه‌ی زبان‌های برنامه‌نویسی بر اساس سطح و درجه‌ی Typing آن‌ها (زبان‌های سطح بالاتر دستورالعمل‌های ماشین بیشتری را برای هر عبارت زبانی اجرای می‌کنند) زبان‌های برنامه‌نویسی سیستم مثل C از نوع قوی و سطح متوسط هستند (۵ تا ۱۰ دستورالعمل به ازای هر عبارت). زبان‌های اسکریپت‌نویسی مثل Tcl از نوع ضعیف و سطح بالا هستند (۱۰۰ تا ۱۰۰۰ دستورالعمل به ازای هر عبارت).

تقریبا در همین زمان بود که زبان‌های موسوم به Garbage Collected به محبوبیت رسیدند. Garbage Collection، زباله‌روبی یا بازیافت حافظه، نوعی مدیریت حافظه‌ی خودکار است. در طی این فرآیند فضایی از حافظه‌ی کامپیوتر که قبلا درگیر نگهداری داده‌ی موردنیاز یک برنامه‌ی کامپیوتری بوده است و اکنون آن برنامه دیگر نیازی به این داده ندارد، آزاد می‌شود و برای ذخیره‌ و نگه‌داری داده‌ی جدید مورد استفاده قرار می‌گیرد.

در این دهه جاوا و #C به غول‌های برنامه‌نویسی که امروزه می‌شناسیم تبدیل شدند. با این حال این دو زبان از ابتدا در گروه زبان‌های برنامه‌نویسی سیستمی قرار نگرفتند و از آن‌ها برای طراحی تعداد زیادی از بزرگ‌ترین سیستم‌های نرم‌افزاری دنیا استفاده شده است. اوسترهاوت به طور آشکار توضیح می‌دهد که در دنیای اینترنت کنونی از جاوا برای برنامه‌نویسی سیستم استفاده می‌شود.

دهه‌ی ۲۰۱۰: مرزها محو می‌شوند

از دهه‌ی گذشته مرز بین زبان‌های اسکریپت‌نویسی و زبان‌های برنامه‌نویسی سیستمی در حال محو شدن است. شرکت‌هایی مثل Dropbox توانستند سیستم‌های مقیاس‌پذیر و بزرگی را روی پایتون توسعه دهند. از جاوا اسکریپت برای تبدیل UI-های پیچیده و بلادرنگ (Real-Time) در میلیاردها صفحه‌ی وب استفاده شده است. طبقه‌بندی تدریجی در پایتون، جاوا اسکریپت و دیگر زبان‌های اسکریپت‌نویسی شدت پیدا کرد و به این صورت گذار از کد اولیه به کد تولید تنها با اضافه کردن اطلاعات نوع ایستا امکان‌پذیر شد.

درعین‌حال منابع انبوه مهندسی برای زبان‌های ایستا (مثل جاوا اسکریپت) و زبان‌های پویا (مثل LuaJIT از Lua یا V8 جاوا اسکریپت و PyPy پایتون) وارد کامپایلرهای JIT شدند و آن‌ها را به رقیب عملکردی سیستم‌های زبان‌های برنامه‌نویسی سیستمی (C++، C) تبدیل کردند. سیستم‌های توزیع‌شده و بزرگی مثل اسپارک در اسکالا نوشته شدند. زبان‌های برنامه‌نویسی جدید مثل جولیا و سویفت هم محدودیت‌هایی را برای زبان‌های زباله‌روب (Garbage Collector) به وجود آوردند.

هیئتی به نام برنامه‌نویسی سیستم در سال ۲۰۱۴ و بعد از آن، شامل بزرگ‌ترین مغزهای زبان‌های برنامه‌نویسی کنونی از جمله بیجارن استروستراپ (خالق ++C)، روب پایک (خالق Go)، آندری آلکساندرسکو (توسعه‌دهنده‌ی D) و نیکوماتساکیس (توسعه‌دهنده‌ی Rust). زبان برنامه‌نویسی سیستم در سال ۲۰۱۴ را این گونه توصیف می‌کنند:

  • نیکو ماستاکیس: برنامه‌نویسی سیستم مانند نوشتن برنامه‌های سمت کلاینت است، یعنی دقیقا نقطه‌ی مقابل GO قرار می‌گیرد. در این برنامه‌ها تأخیر بالایی وجود دارد و همین‌طور پیش‌نیازهایی مثل امنیت بالا و پیش‌نیازهای دیگر وجود دارند که در سمت سرور ارائه نمی‌شوند.
  • بیجارت استروستراپ: برنامه‌نویسی سیستم از کار با سخت‌افزار سرچشمه گرفته است که بعد از آن پیچیدگی برنامه‌ها افزایش یافت. در برنامه‌نویسی سیستم با این پیچیدگی‌ها سروکار دارید، پس اگر با مشکلاتی مثل محدودیت منابع روبه‌رو شدید، بدانید در قلمروی برنامه‌نویسی سیستم قرار گرفته‌اید. محدودیت‌ها تعیین می‌کنند زبان، برنامه‌نویسی سیستم است یا خیر. آیا حافظه‌ رو به اتمام است؟ آیا زمان شما رو به پایان است؟
  • راب پایک: وقتی برای اولین بار GO را معرفی کردیم آن را یک زبان برنامه‌نویسی سیستم خواندیم و البته متأسفانه افرادی به اشتباه تصور کردند این زبان برای نوشتن سیستم عامل طراحی شده است. به عقیده‌ی ما این زبان مخصوص نوشتن سرور است یا می‌توان گفت یک زبان زیرساخت ابری است. بر اساس یک تعریف دیگر به برنامه‌نویسی که در کلود اجرا شود برنامه‌نویسی سیستم گفته می‌شود.
  • آندری آلکساندرسکو: من چند تست برای تعریف برنامه‌نویسی سیستم اجرا کردم. زبان‌های برنامه‌نویسی سیستم باید امکان نوشتن تخصیص‌گر حافظه را بدهند. در این زبان باید قادر به ساخت یک شماره در اشاره‌گر باشید زیرا عملکرد سخت‌افزار به این صورت است.

جاوا اسکریپت

رابطه‌ی برنامه‌نویسی سیستم با عملکرد بالا چیست؟ با محدودیت‌های منابع و کنترل سخت‌افزاری چطور؟ یا زیرساخت ابری؟ به‌طورکلی به نظر می‌رسد زبان‌هایی مثل C ،C++ ،Rust و D از نظر سطح انتزاع و خلاصه بودن از ماشین متمایز می‌شوند. این زبان‌ها جزئیات سخت‌افزار مثل تخصیص حافظه یا قالب و مدیریت دقیق منابع را نمایش می‌دهند.

یک تعریف دیگر هم برای آن وجود دارد: در صورت روبه‌رو شدن با مشکل بازدهی یا بهینه‌سازی چه مقدار آزادی برای حل آن دارید؟ در زبان‌های برنامه‌نویسی سطح پائین با کنترل دقیق جزئیات ماشین می‌توانید هر مشکلی را حل کنید. می‌توانید دستورالعمل را بر کل آرایه‌ها اعمال کنید و ساختار داده‌ای به‌دست‌آمده را در کش (Cache)ذخیره کنید. همان‌طور که انواع ایستا مثل جمع‌ اعداد صحیح با اطمینان بیشتری اجرا می‌شوند زبان‌های برنامه‌نویسی سطح پائین هم اجرای مطمئن‌تر دارند به‌طوری‌که کدها همان‌طور که تعریف می‌شوند اجرا می‌شوند.

در مقابل، بهینه‌سازی زبان‌های تفسیر شده بسیار پیچیده است. به‌راحتی نمی‌توان از اجرای قابل‌انتظار کد توسط Runtime اطمینان حاصل کرد. همین مسئله در کامپایلرهای موازی‌ خودکار هم وجود دارد (Vectorizaiton یا برنامه‌نویسی آرایه‌ای یک مدل برنامه‌نویسی نیست. بلکه مانند نوشتن یک واسطه در پایتون است، برای مثال انتظار دارید یک تابع در صورت فراخوانی خروجی int (صحیح) تولید کند).

امروز: بنابراین برنامه‌نویسی سیستم چیست؟

اغلب به برنامه‌نویسی سطح پائین، برنامه‌نویسی سیستم می‌گویند (با اشاره به جزئیات ماشین)؛ اما معنی سیستم چیست؟ با بازگشت به تعریف ۱۹۷۲ می‌توان گفت:

۱.مسئله‌ی قابل حل، ماهیت گسترده‌ای دارد و شامل تعداد زیادی مسائل فرعی و متنوع است.

۲. از برنامه‌ی سیستمی برای پشتیبانی از برنامه‌های کاربردی و نرم‌افزاری دیگر استفاده می‌شود اما درعین‌حال می‌تواند بسته‌ی کاملی از برنامه‌ها هم باشد.

۳. برنامه‌ی سیستمی برای تولید پیوسته طراحی شده است نه به عنوان راه‌حلی یک جا برای حل مشکلی در برنامه‌ها.

۴. برنامه‌ی سیستمی از نظر تعداد و انواع ویژگی‌های تحت پشتیبانی به صورت پیوسته در حال تکامل است.

۵. یک برنامه‌ی سیستمی به یک ساختار یا برنامه‌ی مشخص داخل و میان ماژول‌ها (برای مثال برقراری ارتباط) نیاز دارد و معمولا توسط بیش از یک شخص یا گروهی از اشخاص طراحی و پیاده‌سازی می‌شود.

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

سی پلاس پلاس

اما مفهوم دقیق این تعریف چیست: زبان‌های تابعی مثل Ocaml و Haskell بیشتر از زبان‌های سطح پائین مثل C یا ++C به سیستم وابسته هستند. هنگام آموزش برنامه‌نویسی باید اصول برنامه‌نویسی تابعی مثل ارزش ثبات، تأثیر سیستم‌های نوع غنی در بهبود طراحی واسطه و استفاده از توابع مرتبه بالاتر را درنظر گرفت. مدارس باید برنامه‌نویسی سیستم و سطح پائین را آموزش دهند.

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

بهتر است به جای عبارت برنامه‌نویسی سیستم از برنامه‌نویسی سطح پائین استفاده شود

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

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

به طور خلاصه بهتر است به‌جای عبارت برنامه‌نویسی سیستم از برنامه‌نویسی سطح پائین استفاده کرد. اهمیت طراحی سیستم‌های کامپیوتری به عنوان یک رشته یا زمینه به خاطر نام آن نیست؛ بنابراین جداسازی این دو مفهوم، طراحی زبان برنامه‌نویسی را شفاف می‌کند و دیدگاه‌های مشترکی را نسبت به این دو حوزه به وجود می‌آورد: چگونه می‌توان سیستمی را حول محور ماشین یا برعکس طراحی کرد؟

دسته‌ها
وبلاگ

آشنایی با تاریخچه برنامه نویسی

آشنایی با تاریخچه برنامه نویسی


اگرچه برنامه نویسی یک اختراع جدید محسوب می‌شود اما این در حالی است که ایده ی مجبور کردن یک ماشین یا دستگاه برای انجام یکسری دستورات خاص به سال‌ها پیش -چیزی در حدود یک قرن پیش- باز می گردد. در واقع، یکی از ابتدایی ترین طرح ها برای یک ماشین قابل برنامه‌ریزی -یا همان کامپیوتر- از کسی به نام Charles Babbage در سال 1834 گرفته شد.

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

ایده ی ماشین‌های قابل برنامه‌ریزی توجه خانمی به نام Ada Lovelace را به خود جلب کرد که یک ریاضیدان بود. لذا او برنامه‌ای نوشت -یا بهتر است بگوییم کارت هایی ترتیب داد- که تعدادی عدد خاص را پشت سر هم چاپ می‌کرد (با توجه به این که این خانم اولین کسی بود که کار خاصی را با Analytical Engine یا همان موتور تحلیلگر انجام داد، وی را می‌توان به نوعی اولین برنامه نویس دنیا نیز تلقی کرد که نامگذاری زبان برنامه نویسی Ada هم به احترام وی صورت گرفته است.)

چیزی پس از گذشت یک‌صد سال، اولین کامپیوتر به معنای واقعی کلمه در سال 1943 توسط ارتش ایالات متحده طراحی شد. این ماشین که Electronic Numerical Integrator and Computer یا به اختصار ENIAC نامیده شد، از کابل ها و سوییچ های مختلفی تشکیل شده بود و برای دستور دادن به آن، برنامه نویس می بایست جای کابل ها و سوییچ ها را تغییر دهد (جالب است بدانیم که اولین برنامه نویسان این کامپیوتر همگی خانم بوده اند!) نکته ی اصلی اینجا است که کامپیوترهای آن موقع بسیار حجیم و گران بودند و کار کردن با آن ها واقعا تخصص نیاز داشت!

دسته‌ها
وبلاگ

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

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


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

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

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

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

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

اول ماشین را خاموش کند. دوم کاپوت ماشین را بالا بزند. سوم روکش انژکتور را بردارد. چهارم پس از باز کردن انژکتور سوزن سوم آن را تعویض کند. پنجم انژکتور را مجدداً سوار کند. ششم روکش آن را نصب کند. و در نهایت کاپوت ماشین را بسته و استارت بزند.

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

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

 نکته
توجه داشته باشیم که هدف از یادگیری برنامه نویسی، این نیست که ما برنامه نویس زبان پایتون یا برنامه نویس زبان سی شویم بلکه هدف این است که ما یک برنامه نویس خوب شویم و زبان‌های برنامه نویسی مختلف صرفاً به مثابه ی ابزاری برای انجام کارهای ما هستند.یک برنامه نویس خوب با هر زبانی می‌تواند یک محصول منحصر به فرد تولید کند اما یک برنامه نویس بد، حتی اگر بهترین و سریع‌ترین زبان برنامه نویسی دنیا را در اختیار وی قرار دهیم، باز هم تضمینی ایجاد نمی‌کند که برنامه اش اثربخش باشد.

خوشبختانه برنامه نویسی مهارتی است که الزاماً نیاز به دانشگاه رفتن ندارد و هر کسی که صرفاً علاقمند به یادگیری آن باشد می‌تواند ظرف مدت چند ماه -و نهایتاً یک سال- به یک برنامه نویس در حوزه ای که به آن علاقمند است مبدل شود.

برخی از افراد بر این باورند که برای برنامه نویس شدن نیاز است تا تحصیلات دانشگاهی داشت یا یک متخصص علم ریاضیات بود. درست است که داشتن ذهن ریاضیاتی و تحلیلی به هرچه بهتر شدن شما به عنوان یک برنامه نویس کمک می کند، اما این اصلاً بدان معنا نیست که اگر شما متخصص ریاضیات نباشید نمی‌توانید به یک برنامه نویس موفق مبدل شوید (در واقع این باور نادرست شبیه به آن است که یک زن و شوهر برای بچه‌دار شدن، هر دو می بایست لیسانس بیولوژی داشته باشند!)

دسته‌ها
وبلاگ

مفهوم فایل .Htaccess چیست؟

مفهوم فایل .Htaccess چیست؟

 

استفاده از Htaccess این امکان را به شما می دهد که رفتار سایت خود و یا یک پوشه ی خاص را کنترل نمایید.در صورتی که این فایل در روت اصلی هاست قرار داده شود, بر روی کل سایت تاثیرگذار خواهد بود و اگر در پوشه ای قرار داده شود در همان مسیر تاثیر می گذارد.

 

کاربرد Htaccess در سرورهای لینوکسی ما:

۱-سفارشی کردن صفحات خطا در سایت شما

۲-محافظت از سایت با تنظیم پسورد

۳-قراردادن سطح دسترسی برای سایت  با استفاده از آی پی

۴-تغییر صفحات پیش فرض سایت

۵-ریدایرکت کاربران به صفحات دیگر

۶-اضافه کردن انواع MIME

فایل Htaccess , یک فایل متنی ASCII با نام .Htaccess است.برای ایجاد این فایل اطمینان حاصل نمایید که ویرایشگر متنی که استفاده می کنید از Word wrap استفاده نکند.برخی ویرایشگر ها (از قبیل msword یا Notepade که از Word Wrap استفاده می کند) کد های اسکی خاصی را به فایل متنی اضافه می کند که فایل Htaccess با این کاراکترها نمی تواند به خوبی کار کند.

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

تنها در صورتی فایل .Htaccess  را مشاهده می کنید که در بخش file manager  تنظیم نمایید فایل های مخفی را به شما نشان دهد.برای این کار بر روی file manager کلیک نمایید و گزینه ی  show hidden files را انتخاب نمایید.

چه کاری می توان با فایل htaccess انجام داد؟

شما ممکن است که بخواهید وب سایت خود را حفاظت نمایید و از password protect استفاده کنید.در واقع تنظیمات مربوط به password protect در .htaccess انجام می شود.بسیاری از توابع که در htaccess وجود دارد ارتباطی به شما ندارد و به صورت اتوماتیک توسط cpanel نوشته می شود.

توابع دیگر فایل htaccess شامل لینک های ممنوعه و rewriting URLs و تنظیمات صفحات پیش فرض, ایجاد ریدایرکت ها, و موارد دیگر می باشد.پی بردن به اینکه چطور فایل htaccess بر روی کل اکانت تاثیرگذار است, بسیار مهم است.یک تغییر در فایل htaccess می تواند بر روی وب سایت شما تاثیرگذار باشد.به همین علت قبل از هر تغییری حتما فایل بک آپ تهیه شود.

عیب یابی خطاهای ناشی از فایل .htaccess

اگر شما در وب سایت خود خطا  مشاهده می کنید اغلب موارد htaccess مقصر است , شما می توانید این مورد را به راحتی با تغییر نام فایل htaccess تست نمایید.من در اغلب اوقات فایل htaccess را به oldhtaccess تغییر می دهم و لود سایت را بررسی می کنم.اگر سایت بدون مشکل لود شود مورد مربوط به تنظیمات htaccess است.

اگر سایت شما با خطا مواجه است و با تغییر در تنظیمات php, تغییری  مشاهده نمی کنید شما میبایست فایل php.ini را به گونه ای ایجاد نمایید که روی همه ی زیر پوشه ها تاثیرگذار باشد.این مورد الزام به  recursive کردن فایل php.ini دارد که به صورت زیر قابل انجام است:

به روز رسانی suPHP_ConfigPath خود در فایل .htaccess

در صورتی که بخواهید فایل php.ini یک فایل recursive باشد(بر روی public-html و زیر پوشه های آن تاثیرگذار شود) می بایست خط کد زیر را به فایل htaccess اضافه نمایید.

         suPHP_ConfigPath /home/username/public_html

این خط کد مشخص می کند فایل php.ini که recursive  است در چه موقعیتی قرار گرفته است و اطمینان حاصل نمایید که یوزر cpanel جایگزین username شود.

این تغییرات فورا اعمال می شود و می توانید نتیجه ی تنظیمات را مشاهده نمایید.