لوحة المتصدرين
المحتوى الأكثر حصولًا على سمعة جيدة
المحتوى الأعلى تقييمًا في 02/19/21 في كل الموقع
-
مرحبا ، يراودني سؤال حول كيفية حصولي على الشهادة ، هل عند اتمام جميع الدورات ، ام عند اتمام كل جزء من المقررات ؟ شكرا2 نقاط
-
يمكن تنفيذ ذلك عن طريق وضع حدث عند إنشاء المنشور بالإضافة إلى listener للكاش الموجود، بحيث يتم استدعائه عند كل عملية تعديل أو إضافة سجلات إلى الجدول المعني في قاعدة البيانات كالتالي: php artisan make:event PostCreated بحيث يكون PostCreated.php عند إنشاء المنشور: namespace App\Events; use Illuminate\Broadcasting\Channel; use Illuminate\Broadcasting\InteractsWithSockets; use Illuminate\Broadcasting\PresenceChannel; use Illuminate\Broadcasting\PrivateChannel; use Illuminate\Contracts\Broadcasting\ShouldBroadcast; use Illuminate\Foundation\Events\Dispatchable; use Illuminate\Queue\SerializesModels; class PostCreated { use Dispatchable, InteractsWithSockets, SerializesModels; public function __construct() { // } public function broadcastOn() { return []; } } وبعدها نقوم بإضافة: cache()->forget('posts'); والتي تقوم بمسح الكاش الخاص بال posts عند إضافة post جديد، وأيضاً نقوم بإضافة: cache()->forever('posts', $post); بعد استعادة البيانات ليتم حفظها من جديد على نسخة الكاش الجديدة، فيصبح ترتيب العمليات كالتالي: public function handle($event) { cache()->forget('posts'); // تحرير النسخة القديمة من الكاش $post = Post::all(); //جلب البيانات cache()->forever('posts', $post); // حفظهم في نسخة كاش جديدة } فعند إطلاق الحدث ، سنقوم بإزالة جميع بيانات ذاكرة التخزين المؤقت. بعد ذلك سنقوم بإحضار جميع البيانات من قاعدة البيانات ووضعها في ذاكرة التخزين المؤقت ضمن Laravel إلى الأبد. يمكنك أيضاً وضعها لبضع دقائق ، يوم ، سنة كما تريد. بعدها يجب تعديل مودل Post لنضيف عليه الحدث كالتالي: namespace App; use App\Events\PostCreated; use Illuminate\Database\Eloquent\Model; class Post extends Model { //... protected $dispatchesEvents = [ 'created' => PostCreated::class ]; بحيث يتم إطلاق هذا الحدث PostCreated عندما يتم إضافة أي منشور جديد. وبالتالي يقوم باستدعاء listener الخاص بتحديث الكاش. وأخيراً، يجب تسجيل الحدث في لارافيل كالتالي: namespace App\Providers; use App\Events\PostCreated; use App\Listeners\PostCacheListener; use Illuminate\Foundation\Support\Providers\EventServiceProvider as ServiceProvider; use Illuminate\Support\Facades\Event; class EventServiceProvider extends ServiceProvider { protected $listen = [ PostCreated::class => [ PostCacheListener::class, //نفس الحدث الذي قمنا بتعريفه مسبقاً ], ]; public function boot() { parent::boot(); // } } وبذلك عند إضافة أي سجل جديد إلى قاعدة البيانات، في حال لم تحتوي نسخة الكاش هذه البيانات عند طلبها سيتم تحديث النسخة القديمة من الكاش وتخزين نسخة جديدة تحوي البيانات التي تم إضافتها مؤخراً إلى قاعدة البيانات.2 نقاط
-
يمكنك إضافة الحزمة التالية إلى مشروع flutter الخاص بك وهي firebase_admob من خلال pub.dev او تجد الرابط هنا في ملف pubspec.yaml قم بوضع الحزمة مع إصدارها firebase_admob: ^0.11.0+1 ومن ثم تنفيذ الأمر التالي في terminal flutter pub get ثم في المسار التالي android/app/src/main/AndroidManifest.xml قم بوضع <meta-data android:name="com.google.android.gms.ads.APPLICATION_ID" android:value="ca-app-pub-3940256099942544~3347511713"/> حيث ca-app-pub-3940256099942544~3347511713 هو id التطبيق على admob. في المسار التالي ios/Runner/Info.plis الخاص ب iOS ضع <key>GADApplicationIdentifier</key> <string>ca-app-pub-3940256099942544~1458002511</string> يمكنك إنشاء ملف في المسار التالي lib/helper.dart ووضع الكود التالي فيه import 'dart:io'; class AdManager { static String get appId { if (Platform.isAndroid) { return "<YOUR_ANDROID_ADMOB_APP_ID>"; } else if (Platform.isIOS) { return "<YOUR_IOS_ADMOB_APP_ID>"; } else { throw new UnsupportedError("Unsupported platform"); } } static String get bannerAdUnitId { if (Platform.isAndroid) { return "<YOUR_ANDROID_BANNER_AD_UNIT_ID"; } else if (Platform.isIOS) { return "<YOUR_IOS_BANNER_AD_UNIT_ID>"; } else { throw new UnsupportedError("Unsupported platform"); } } static String get interstitialAdUnitId { if (Platform.isAndroid) { return "<YOUR_ANDROID_INTERSTITIAL_AD_UNIT_ID>"; } else if (Platform.isIOS) { return "<YOUR_IOS_INTERSTITIAL_AD_UNIT_ID>"; } else { throw new UnsupportedError("Unsupported platform"); } } static String get rewardedAdUnitId { if (Platform.isAndroid) { return "<YOUR_ANDROID_REWARDED_AD_UNIT_ID>"; } else if (Platform.isIOS) { return "<YOUR_IOS_REWARDED_AD_UNIT_ID>"; } else { throw new UnsupportedError("Unsupported platform"); } } } مع تغيير كل id لفئة الإعلان الخاص سواء بانر أو Interstitial. ومن ثم في الملف الذي تود عرض الإعلانات فيه تضع لتفعيل الإعلانات Future<void> _initAdMob() { ///Initialize AdMob SDK return FirebaseAdMob.instance.initialize(appId: AdManager.appId); } يمكن استخدام لتفعيل إعلانات البانر BannerAd _bannerAd; void _loadBannerAd() { _bannerAd ..load() ..show(anchorType: AnchorType.top); } و ثم في دالة initState نضع @override void initState() { _bannerAd = BannerAd( adUnitId: AdManager.bannerAdUnitId, size: AdSize.banner, ); _loadBannerAd(); } لتشغيل الإعلانات في التطبيق, يمكنك مراجعة التوثيق الخاص بالحزمة ستجد تفاصيل أكثر عن كيفية استخدام كل نوع من الإعلانات و كيفية تنفيذها في تطبيقك هنا يجب استخدام إعلانات من فئة interstitial ,وتسمى هذه الإعلانات البينية , بحيث هذه الإعلانات تظهر عند الأنتقال من واجهة لواجهة أو عند تنفيذ حدث معين في التطبيق. بما أنك تستخدم إعلانات من قوقل أدموب فجميع فئات الإعلانات يمكن للمستخدم تخطيها او إغلاقها حسب رغبة المستخدم.2 نقاط
-
2 نقاط
-
أواجه المُشكلة التالية أريد عرض صفحة إنشاء موضوع جديد لكن الصفحة لا تظهر و يظهر خطأ 404 مع أن الصفحة موجودة و المسار الخاص بها موجود ضمن الملف web.php : Route::get('/threads/create', [ThreadController::class, 'create']); هل من حل لهذه المُشكلة.2 نقاط
-
يمكنك استخدام حزمة spatie/laravel-backup والموقع الرسمي لها هنا بحيث يمكنك استخدام الأمر التالي لاستدعاء الحزمة composer require spatie/laravel-backup ومن ثم بعد استدعاء الحزمة نريد إضافة ملف backup.php إلى مجلد config عن طريق الأمر التالي php artisan vendor:publish --provider="Spatie\Backup\BackupServiceProvider" ويمكنك من ملف app/Console/Kernel.php وضع امر لأخذ نسخة احتياطية بشكل تلقائي عن طريق إضافة protected function schedule(Schedule $schedule) { $schedule->command('backup:clean')->daily()->at('01:00'); $schedule->command('backup:run')->daily()->at('01:30'); } ومن ثم تشغيل الأمر التالي php artisan backup:run ويمكنك انشاء Controller لحفظ و تنزيل نسخة احتياطية عن طريق مثلا لوحة التحكم فيكون شكل الcontroller هكذا <?php namespace App\Http\Controllers\Admin; use App\Http\Controllers\Controller; use Illuminate\Http\Request; use Alert; use App\Http\Requests; use Artisan; use Log; use Storage; use Spatie\Backup\Helpers\Format; class BackupController extends Controller { public function index() { $disk = Storage::disk(config('backup.backup.destination.disks')[0]); //$disk = storage_path('app'); //dd(storage_path('app') . DIRECTORY_SEPARATOR . config('backup.backup.name')); //$disk = Storage::disk(config('backup.backup.name')[0]); //dd(config('backup.name')); //dd(config('backup.name.backup.destination.disks')[0]); //echo (config('CropFix.backup.destination.disks')[0]); $files = $disk->files(config('backup.backup.name')); //$files = storage_path('app') . DIRECTORY_SEPARATOR . config('backup.backup.name'); $backups = []; // make an array of backup files, with their filesize and creation date foreach ($files as $k => $f) { // only take the zip files into account if (substr($f, -4) == '.zip' && $disk->exists($f)) { $backups[] = [ 'file_path' => $f, 'file_name' => str_replace(config('backup.backup.name') . '/', '', $f), 'file_size' => Format::humanReadableSize($disk->size($f)), 'last_modified' => date('m/d/Y H:i:s', $disk->lastModified($f)), ]; } } // reverse the backups, so the newest one would be on top $backups = array_reverse($backups); return view("admin.backups.index")->with(compact('backups')); } public function create() { try { // start the backup process //Artisan::call('backup:run'); $parameters = []; $outputBuffer = null; Artisan::call('backup:run', $parameters, $outputBuffer); //Artisan::call('backup:run'); $output = Artisan::output(); //dd(Artisan::output()); // log the results //Log::info("Backpack\BackupManager -- new backup started from admin interface \r\n" . $output); // return the results as a response to the ajax call //Alert::success('New backup created'); return redirect()->back(); } catch (Exception $e) { Flash::error($e->getMessage()); return redirect()->back(); } } /** * Downloads a backup zip file. * * TODO: make it work no matter the flysystem driver (S3 Bucket, etc). */ public function download($file_name) { //$file = config('backup.backup.name') . '/' . $file_name; $file = config('backup.backup.name') . '/' . $file_name; $disk = Storage::disk(config('backup.backup.destination.disks')[0]); if ($disk->exists($file)) { $fs = Storage::disk(config('backup.backup.destination.disks')[0])->getDriver(); $stream = $fs->readStream($file); return \Response::stream(function () use ($stream) { fpassthru($stream); }, 200, [ "Content-Type" => $fs->getMimetype($file), "Content-Length" => $fs->getSize($file), "Content-disposition" => "attachment; filename=\"" . basename($file) . "\"", ]); } else { abort(404, "The backup file doesn't exist."); } } /** * Deletes a backup file. */ public function delete($file_name) { $disk = Storage::disk(config('backup.backup.destination.disks')[0]); if ($disk->exists(config('backup.backup.name') . '/' . $file_name)) { $disk->delete(config('backup.backup.name') . '/' . $file_name); return redirect()->back(); } else { abort(404, "The backup file doesn't exist."); } } function humanFilesize($size, $precision = 2) { $units = array('B','kB','MB','GB','TB','PB','EB','ZB','YB'); $step = 1024; $i = 0; while (($size / $step) > 0.9) { $size = $size / $step; $i++; } return round($size, $precision).$units[$i]; } } و ملف view الخاص controller يكون بالشكل التالي @extends('admin.layout.app') @section('content_header') <h1>النسخ الاحتياطية</h1> <ol class="breadcrumb"> <li><a href="{{ route('dashboard') }}"><i class="fa fa-dashboard"></i> لوحة التجكم</a></li> <li><a href="{{ route('users.index') }}">أدارة النسخ الاحتياطية</a></li> <li class="active">النسخ الاحتياطية</li> </ol> @endsection @section('content') <div class="row"> <div class="col-md-12"> <div class="box"> <div class="box-header with-border"> <a href="{{ route('backups.create') }}" class="btn btn-danger float-left" style="width: 200px; float: left;">أنشاء نسخة أحتياطية</a> </div><!-- /.box-header --> <div class="box-body"> @if (count($backups)) <table class="table table-bordered"> <tbody> <tr> <th>الملف</th> <th>الحجم</th> <th>التاريخ</th> <th>المدة</th> <th></th> </tr> @foreach($backups as $backup) <tr> <td>{{ $backup['file_name'] }}</td> <td>{{ ($backup['file_size']) }}</td> <td> {{ ($backup['last_modified']) }} </td> <td> {{ ($backup['last_modified']) }} </td> <td class="text-right"> <a class="btn btn-xs btn-default" href="{{ route('backups.download', $backup['file_name']) }}"><i class="fa fa-cloud-download"></i> تحميل</a> <a class="btn btn-xs btn-danger" data-button-type="delete" href="{{ route('backups.delete', $backup['file_name']) }}"><i class="fa fa-trash-o"></i> حذف</a> </td> </tr> @endforeach @else <tr> <td colspan="4">لا توجد نسخ احتياطية</td> </tr> @endif </tbody> </table> </div><!-- /.box-body --> </div><!-- /.box --> </div><!-- /.col --> </div> @endsection طبعا هذه الأكواد عبارة عن أمثلة. يمكنك زيارة التوثيق الرسمي للحزمة و متابعة جميع المميزات التي تقدمها الحزمة أيضا.2 نقاط
-
Mass Assignment او التعيين الجماعي هو عندما تقوم بإرسال مصفوفة بمفاتيح و قيم مُتنوعة للعملية إنشاء كائن ما سواء عن طريق الباني أو عن طريق دوال eloquent مثل create او update: <?php $model = new Model([ 'key1' => 'value1', 'key2' => 'value2', . . . ]); // او $model = Model::create([ 'key1' => 'value1', 'key2' => 'value2', . . . ]); // او $model->update([ 'key1' => 'value1', 'key2' => 'value2', . . . ]); في هذه الحالة لارافيل ستُحاول حمايتك تلقائياً من بعض الثغرات التي تُسببها هذه العملية. قد يظهر لك الأمر عادي لكن هذه العملية تحميك كثيرا مثلاً إذا كان لديك جدول للمُستخدمين و به عمود is_admin إذا كانت قيمته 1 فإن المُستخدم سيكون مُشرف في التطبيق، قد يستغل اي شخص ذلك و يُرسل حقل مخفي is_admin مع الطلب قيمته 1 و بالتالي سيُصبح مشرف بدل أن يكون مستخدم عادي. توفر laravel طريقة للحماية من هذا الأمر فيُمكنك مثلا إستخدام الطريقة العادية في إنشاء كائن جديد بتعيين الخصائص بشكل منفصل: <?php $model = new Model(); $model->prop1 = "value1"; $model->prop2 = "value2"; . . . $model->save(); لكن إن أردت إستخدام التعيين الجماعي يُمكنك إستخدام أحد المصفوفات fillable او guarded الموجودتان ضمن النموذج حيث في المصفوفة fillable تضع كافة الخصائص التي تريد أن تُعين جماعياً: protected $fillable = ['prop1', 'prop2']; أما المصفوفة guarded فتُستخدم لحماية بعض الخاصيات التي لا تريد أن تُعين جماعياً على سبيل المثال: protected $guarded = ['is_admin']; بطبيعة الحال يُمكنك فقط إستخدام أحد المصفوفتين فهما يعملان عكس بعضهما، ف fillable تعني القائمة البيضاء و guarded تعني القائمة السوداء أما بخصوص: غالباً ما يحدث هذا الخطأ بسبب csrf token تقوم لارافيل بحقنه في الجلسة و إرساله مع كل نموذج لذلك إن كان لديك نموذج form يجب عليك إضافة الحقل المخفي csrf سواء عن طريق: <form action="" method="post"> @csrf ... او عن طريق <form action="" method="post"> {{ csrf_field() }} ... أحيانا يكون هذا الحقل مُضمن في النموذج و يحدث الخطأ و ذلك راجع غالباً لإنتهاء الجلسة او أن الجلسة لم يتم حفظها بشكل جيد، إفتراضياً يتم حفظ الجلسات على شكل ملفات في المُجلد storage. قد لا تكون الصلاحيات المُطبقة على هذا المُجلد مناسبة مما لا يسمح بحفظ الملفات عليه.2 نقاط
-
"أريد تعلم البرمجة لكنني لا أعرف من أين أبدأ!" هذه هي أكثر عبارة تتردد على سمعي من حديثي العهد بالبرمجة، إذ يأتيني هذا السؤال مرارًا وتكرارًا؛ وفي كل مرة أحاول أن أجيب عنه في سياقه، أجد أنني أضيف معلومات جديدة على إجاباتي السابقة، لذا قررت كتابة هذا المقال بعنوان "تعلم البرمجة" لعله يفيد الراغبين في تعلم تطوير التطبيقات في بدء رحلتهم مع تعلم البرمجة من الصفر. جدول المحتويات حرصًا على تنظيم المقالة ولتسهيل الوصول إلى القسم الذي تريده بسهولة، سنذكر هنا جدول المحتويات باختصار: ما هي البرمجة؟ لماذا تتعلم البرمجة؟ ما عليك معرفته لتصبح مبرمجًا الأدوات اللازمة للبدء في تعلم البرمجة لماذا هناك العديد من لغات البرمجة؟ مفاهيم البرمجة مصادر تعلم البرمجة تطوير واجهات المستخدم تطوير الواجهات الخلفية تعلم تطوير تطبيقات الجوال تطوير الألعاب تطوير الأنظمة المدمجة تطوير تطبيقات سطح المكتب كيفية اختيار لغة البرمجة التي تناسبك نصائح لتعلم البرمجة ما هي البرمجة؟ البرمجة هي عملية تقسيم مهمة معينة يراد تنفيذها عبر الحاسوب إلى أجزاء صغيرة ومترابطة وقابلة للتنفيذ بأوامر بسيطة. بعد ذلك، تجري كتابة هذه الأوامر والتعليمات بإحدى لغات البرمجة، والتي هي وسيلة للتخاطب مع الحاسوب. إليك المثال العملي التالي الذي يشرح ماهية البرمجة: إن كنت تتوقع زيارة صديق لك اليوم، واتصل بك ليقول لك: "أنا واقف بجانب الحديقة ولا أعرف كيف أصل إلى منزلك". أنت عادةً تمر كل يوم من جانب الحديقة وتعرف الطريق بينها وبين منزلك شبرًا بشبر. برأيك هل ينفع إن قلت له: "منزلي معروف وقريب من الحديقة وأنا كل يوم أمر من جانبها"؟ لا، بالتأكيد. تحتاج إلى أن تقسِّم المشكلة إلى أجزاء تمثل خطوات بسيطة يستطيع صديقك فهمها وتنفيذها. مثلًا، أخبره أن ينفذ الأوامر التالية: "سر إلى الأمام عشرة أمتار" ثم "اتجه إلى اليمين" ثم "سر إلى نهاية الشارع" ثم "اتجه إلى اليسار". أخبره بعد ذلك: "عُدَّ الأبنية الموجودة على اليسار حتى تصل إلى البناء الرابع" ثم "اصعد إلى الطابق الثاني" ثم "اطرق على الباب الذي سيظهر أمامك". مبارك! بهذه الطريقة، تستطيع أن تدل صديقك على منزلك بدقة. البرمجة هي الشيء نفسه تمامًا. فهل ترى التعابير المكتوبة بين علامتي الاقتباس؟ إنها التعابير التي تكتب بإحدى لغات البرمجة والتي تخاطب الحاسوب بدلًا من صديقك السابق. لغات البرمجة هي مجموعة من المفردات والقواعد اللغوية التي تشكل لغةً وسيطةً للتخاطب مع الحاسوب وأمره بتنفيذ تعليمات وأشياء محدَّدة. فلا الحاسوب يفهم لغة البشر ولا البشر يفهمون لغة الحاسوب، لذا كان هنالك حاجة ملحة لوجود لغة وسيطة يفهمها كلاهما؛ نتيجةً لذلك، انبثق مفهوم لغة البرمجة. بعبارة أخرى، لو أردنا أن نقول للحاسوب "افعل كذا"، فسنحتاج إلى لغةٍ مشتركةٍ بيننا وبينه ليفهم ما نبتغيه، وهنا يأتي دور لغات البرمجة، إذ يمكنك أن تعدّ لغات البرمجة على أنها وسيط بين المبرمج والحاسوب. يهتم المبرمج بالتفكير في تسلسل الخطوات التي على الحاسوب القيام بها لإتمام العمل المطلوب منه (مثل حساب العمر اعتمادًا على تاريخ الولادة)، ثم كتابة هذه الخطوات بترتيب منطقي بإحدى لغات البرمجة. ربما لاحظتَ في الجملة السابقة أن جزءًا من مهمة المبرمج هو التفكير المنطقي، وهذا يجعلنا ننتقل إلى السؤال الشائع "هل أستطيع تعلم البرمجة وأصبح مبرمجًا؟" أو "هل أنا مؤهل لأصبح مبرمجًا؟". لماذا تتعلم البرمجة؟ يبدو أن تعلم البرمجة من الصفر ليس بالصعوبة التي توقعتها، لكنك تريد حافزًا يجعلك تتعلم البرمجة. تسمع كثيرًا أن البرمجة هي مجال المستقبل، وأن وظائف المبرمجين ستكتسح مجال التوظيف في السنوات القادمة؟ أستطيع أن أؤكد لك ذلك، كما أنَّ وظائف البرمجة هي من أعلى الوظائف دخلًا. فلو كنت تريد بدء مشوارك الاحترافي وتريد عملًا مستقرًا وذا دخلٍ ممتاز، فإن تعلم البرمجة والعمل بها هو أفضل خيارٍ أمامك. وظائف البرمجة مريحة عمومًا، فالعمل كله مكتبي أمام حاسوب في بيئة مريحة ومناسبة، وأغلبية الشركات تتبع نظام العمل 40 ساعة في الأسبوع (أي 5 أيام لمدة 8 ساعات يوميًا)، ولا تغفل عن قدرتك على العمل عن بعد من خلال الانترنت أو كمستقل في أوقات فراغك. تعلم البرمجة سيوسع أفق تفكيرك كثيرًا، خصوصًا أن تعاملك مع الحاسوب يتبع إلى التفكير المنطقي، وستجد أن البرمجة ستسهل لك القيام بأمور أخرى في الحاسوب. ما عليك معرفته لتصبح مبرمجًا يتردد الكثيرون في تعلم البرمجة متذرعين بأن مستواهم في الرياضيات ليس ممتازًا، وهذا ليس صحيحًا، فصحيحٌ أنَّ هنالك أمور تعترضك أثناء أداء عملك كمبرمج تتطلب خبرة في الرياضيات، إلا أنَّه قد تمر عليك فترات طويلة لا تحتاج فيها إلى مسائل رياضية. كل ما يلزمك للبدء في تعلم البرمجة هو الأساسيات التي يعرفها الجميع. إلى حين اعتراضك أية مسألة أو مشكلة تتطلب مهارة في الرياضيات، هنالك الكثير من المصادر والمراجع التي تستطيع الرجوع إليها آنذاك. بعبارة أخرى، أجِّل هذا الأمر قليلًا ولا تخف. الأهم من ذلك هو أن تكون قادرًا على التفكير بشكل منطقي. التفكير المنطقي التفكير المنطقي هو المهارة التي تجمع كافة المبرمجين تحت مظلة واحدة، وهي أساس كتابة الخوارزميات، إذ يجب أن تكون قادرًا على اكتساب هذه المهارة وتطويرها. الخوارزميات كلمة "الخوارزميات" هي الكلمة المرعبة التي ينفر منها البعض، فكل ما يتخيلونه عند ذكرها هو الرياضيات المعقدة والمعادلات الطويلة والرموز العجيبة، لكن الأمر بسيط جدًا؛ فالخوازرميات هي تطبيقٌ للتفكير المنطقي في خطوات متسلسلة واضحة تمامًا لحل مشكلة ما. لكي أوضِّح لك أن الخوارزميات ليست أمرًا معقدًا، سأخبرك بكيفية كتابة برنامج يسأل المستخدم عن سنة ميلاده، ثم يعيد عمره الحالي بالسنوات. الخطوة الأولى: إظهار رسالة نصية نطلب فيها من المستخدم إدخال تاريخ ميلاده. الخطوة الثانية: تخزين سنة الميلاد التي أدخلها المستخدم. الخطوة الثالثة: الحصول على السنة الحالية. الخطوة الرابعة: طرح مدخلات المستخدم من السنة الحالية. الخطوة الخامسة والأخيرة: إظهار الناتج. ما سبق هو خوارزمية بسيطة تتألف من خطوات متسلسلة، لكن إذا أمعنّا النظر فيها سنجد خللًا في حال أدخل المستخدم تاريخًا أكبر من التاريخ الحالي، أي لو أدخل 2050 مثلًا بدلًا من 1995. عندها سيصبح العمر المعاد من الخوارزمية سالبًا، ويمكننا أن نحل هذه الإشكالية منطقيًا بوضع شرط يمنع المستخدم من إدخال تاريخ أكبر من التاريخ الحالي. إطارات العمل كلمة أخرى شائعة جدًا في عالم البرمجة هي "إطارات العمل" frameworks، إطارات العمل هي مجموعة من الشيفرات البرمجية التي تسهل على المبرمج إنشاء التطبيقات، بتوفير وحدات جاهزة تقدم خدمات متنوعة مثل تسجيل المستخدمين، وإرسال البريد الإلكتروني، والتعامل مع قواعد البيانات. أي يمكنك أن تعدّها أدوات برمجية تساعدك في برمجة تطبيقك وتسهِّل لك فعل ذلك. الأدوات اللازمة للبدء في تعلم البرمجة تحتاج إلى حاسوبٍ بمواصفات جيدة (ليس من الضروري أن يكون من أفضل الحواسيب، وإنما أن يمتلك مقدارًا جيدًا من الذاكرة العشوائية). لا ننصح بمواصفات معينة أو نظام تشغيل معين، استعمل ما يحلو لك وما ترى نفسك معتادًا عليه (سواءً كان ويندوز أو لينكس أو ماك). ستحتاج أيضًا إلى اتصالٍ جيد بالإنترنت للوصول إلى المواد التعليمية، ولتنزيل البرمجيات والمكتبات اللازمة للتطوير. أما بخصوص أدوات التطوير، فستحتاج إلى برمجية لكتابة الشيفرات، وهنالك نوعان رئيسيان لها: المحررات النصية: مثل Visual Studio Code أو Atom أو Sublime Text أو Bracktes أو Notepad++. وهذه المحررات النصية تكون بسيطة في أغلبها، وتوفر ميزات أساسية مثل تلوين الشيفرات، وبعض ميزات الإكمال التلقائي، وتدعم أغلبيتها إضافات لزيادة وظائفها. وظيفة هذه المحررات النصية عمومًا هي تعديل الشيفرات بسهولة وسرعة. ننصحك بتجربة Visual Studio Code لشهرته حاليًا وكثرة إضافاته ودعمه الممتاز من شركة Microsoft. بيئات التطوير المدمجة: مثل Visual Studio و Eclipse و Android Studio و NetBeans و Apple Xcode وغيرها. وهذه البيئات توفر ميزات أكثر بكثير من المحررات النصية، مثل تشغيل الشيفرات وتنقيحها (debugging) وميزات التحكم بالإصدارات (version control) والاتصال بقواعد البيانات وخلاف ذلك. لماذا هناك العديد من لغات البرمجة؟ قد تتساءل، لماذا هناك العديد من لغات البرمجة؟ أليست هذه اللغات كلها تنفذ الهدف ذاته؟ لماذا لا يكون هنالك لغة موحدة بين المبرمجين والحاسوب؟ الحقيقة أنّه توجد لغة برمجة واحدة ولكن ليست إحدى اللغات التي تراها أمامك في الصورة. اللغة التي نشير إليها هي لغة الآلة التي يستطيع معالج الحاسوب قراءتها وفهمها. أتتساءل ما هي لغة الآلة وكيف تبدو؟ إليك مقطعًا منها: معلومٌ أنّ معالج الحاسوب لا يفهم شيئًا سوى الأصفار والواحدات، وهذه اللغة -أي لغة الآلة- هي تمثيل للأصفار والواحدات بطريقة تخبر الحاسوب بما يجب عليه فعله. الجدير بالذكر أن هذه اللغة عصية الفهم على البشر، وحتى إن استطعت كتابة شيفرة مثل الشيفرة الموضحة بالصورة (كما في السنوات الأولى من بداية اختراع الحاسوب)، لن يفهمها الآخرون ولن يستطيع أحد التعديل على الشيفرة وتطويرها لاحقًا باستثنائك. سعيًا لإيجاد لغة قريبة من لغة البشر، انقسمت لغات البرمجية إلى قسمين: لغات البرمجة منخفضة المستوى، ولغات البرمجة عالية المستوى وذلك تبعًا لمدى قربها من لغة الآلة أو لغة البشر على التوالي. أي أنّ لغات البرمجة منخفضة المستوى هي اللغات الأقرب للغة الآلة آنفة الذكر مثل لغة التجميع Assembly language، ولغات البرمجة عالية المستوى هي اللغات الأقرب للغة البشر مثل لغة بايثون وجافا. تنفيذ البرامج المكتوبة بلغات برمجة عالية المستوى يقودنا الحديث عن اللغات عالية المستوى واللغات منخفضة المستوى إلى الحديث عن كيفية تنفيذ المعالج للشيفرة المكتوبة بلغة عالية المستوى لا يفهمها المعالج (أليس هذا ما تفكر به الآن؟). عرفنا أن المعالج يفهم الأوامر والتعليمات المكتوبة بلغة منخفضة المستوى (لغة الآلة)، فمَثَلُ هذه العملية كمَثَلِ شخصٍ أجنبي تعلم اللغة العربية وبدأ التحدث مع ناطقٍ باللغة العربية، إذ يمكن لهما التواصل مباشرةً - ليخبر كل منها ما يريد من الآخر فعله - دون وسيط. أمَّا مَثَلُ كتابة برنامج بلغة عالية المستوى أقرب إلى لغة البشر والطلب من الحاسوب تنفيذه كمثل ناطق باللغة الهندية يريد التخاطب مع ناطق باللغة العربية دون أن يفقه أحدهما لغة الآخر. في هذه الحالة، لن يستطيع أحدهما فهم ما يتكلم به الآخر وستفشل عملية التواصل. قد تقول: لماذا لا يحضران مترجمًا يترجم ما يقوله كل منها للآخر؟ حسنًا، هذا ما يحصل تمامًا عندما يراد تنفيذ برنامج بلغة لا يفهمها معالج الحاسوب. في اللغات البشرية، هنالك نوع واحد من المترجمين يعرفه الجميع للترجمة من لغة إلى آخرى؛ أما في لغات البرمجة، هنالك نوعان من المترجمين بين اللغات هما: المفسر interpreter، والمترجم compiler. بناءً على ذلك، تنقسم لغات البرمجة إلى لغات مفسرة ولغات مترجمة. (من الآن وصاعدًا، كلما ذكرنا لغات البرمجة، فنحن نشير إلى لغات البرمجة عالية المستوى.) -المفسر (interpreter): وهو برنامج خاصٌ يفسِّر الشيفرة المصدرية لبرنامج مكتوب بلغة عالية المستوى سطرًا بسطر ويحولها إلى لغة منخفضة المستوى لينفذها الحاسوب مباشرةً. -المترجم (compiler): وهو برنامج خاصٌ يحوِّل الملفات المصدرية لبرنامج مكتوب بلغة عالية المستوى إلى ملف تنفيذي مكتوب بلغة الآلة دفعةً واحدةً، ثم يمكن تشغيل الملف التنفيذي على الحاسوب للقيام بالمهمة المطلوبة. لماذا يوجد الكثير من لغات البرمجة عالية المستوى؟ الآن وبعد أن عرفت الفرق بين لغة الآلة ولغة البشر، لربّما ما زلت تتساءل عن كثرة اللغات البرمجية عالية المستوى المتوافرة وعدم وجود لغة واحدة. نستطيع القول أنك خطوت خطوةً جيدةً للأمام إذ أصبحت الآن أكثر دقة. جواب سؤلك هو أنّ كل لغات البرمجة تُستخدم لتحويل فكرة منطقية إلى سلسلة أوامر يمكن للحاسوب أن ينفذها. فعلى سبيل المثال لا الحصر يمكنك استخدام أي من Ruby أو Java أو Python أو C# أو Go أو JavaScript لبناء موقع ويب. لكن يمكنك أن تعدّ لغات البرمجة على أنها أدوات، وكل أداة تسهّل مهمة دونًا عن أخرى. فعلى سبيل المثال، السيارة والحافلة والدراجة والمحراث الزراعي كلها وسائط نقل، لكنها مختلفة الاستخدام؛ فلا يمكنك أن تذهب وعائلتك لقضاء إجازة صيفية مستخدمين المحراث الزراعي، كما لا يمكنك استخدام سيارة سباق في مدينة مكتظة ذات شوارع ضيقة للذهاب بها إلى العمل. مع أن آلية عمل هذه المركبات متشابهة. والأمر سيانٌ بالنسبة إلى البرمجة. خلاصة القول أنّ هنالك لغات برمجة متخصصة بإنشاء تطبيقات سطح المكتب، وأخرى متخصصة بإنشاء تطبيقات الجوال، وأخرى تستعمل خصيصًا لمواقع الويب، وأخرى لبرمجة العتاد، وهذا ما يحيلنا إلى الحديث عن مجالات البرمجة واللغات الأنسب لكلٍ منها. مفاهيم البرمجة "حسنًا، اقتنعتُ أن البرمجة مناسبة لي وليست صعبة كما كنتُ أتخيل، من أين أبدأ طريقي في تعلم البرمجة إذًا؟" قبل الإجابة عن السؤال السابق، سآخذ وقتي لأشرح لك بعض المفاهيم الخاصة بالبرمجة، ثم سنتحدث عن مجالات العمل فيها وما المسار الأفضل لتعلمك كلًا منها. أنت تعلم أن البرنامج هو سلسلة أوامر ينفذها الحاسوب لحل مشكلة ما، والبرنامج نفسه مكتوب بلغة يفهمها الحاسوب تسمى لغة الآلة. من الأمور الملحوظة التركيز كثيرًا على لغة البرمجة ذاتها أثناء بداية تعلم البرمجة. سأخبرك حقيقةً صادمةً: "لغة البرمجة التي تستعملها ليست بتلك الأهمية التي تتوقعها"، أنا لا أقول لك أن جميع لغات البرمجة متماثلة أو تُستعمل لنفس الاستعمالات، لكن لا تركِّز كثيرًا على تعلم كيفية الكتابة في لغة برمجة ما وتهمل المفاهيم البرمجية التي تقف وراءها. المتغيرات والثوابت عليك أن تتعرف على مفهوم المتغيرات variables المستعمل في جميع لغات البرمجة، والذي يعني إسناد قيمة ما إلى رمز أو كلمة وتخزين هذه القيمة في الذاكرة. فلو أردنا أن نخزن العبارة "Hello World" في متغير ما فنكتب شيئًا شبيهًا بما يلي: var variable_name = "Hello World"; أي أننا نسند الجزء الموجود على يمين إشارة المساواة إلى المتغير المذكور على يسار إشارة المساواة. يمكننا أن نستنتج من اسم "المتغيرات" أن قيمتها قابلة للتغيير خلال تنفيذ البرنامج، فيمكننا في مكانٍ ما من الملف المصدري أن نعيد تعريف المتغير السابق بكتابة: var variable_name = "New value"; أما الثوابت فهي تتشابه مع المتغيرات في كثيرٍ من النواحي، إلا أنك لا تستطيع إعادة تعريف قيمتها بعد تعريفها أول مرة. قد تستفيد من الثوابت عندما تكون متأكدًا تمامًا من عدم تغيير القيمة خلال فترة تنفيذ البرنامج. فلو أردنا تعريف ثابت اسمه pi يحتوي على القيمة 3.14 (والتي سنعرف أنها لن تتغير مطلقًا)، فيمكننا أن نكتب: const pi = 3.14; وإذا حاولتَ تغيير قيمة الثابت بعد تعريفه فستحصل على رسالة خطأ. الشروط تدعم جميع لغات البرمجة تعريف شروط تُنفَّذ في حالات معينة. ففي الخوازرمية السابقة التي شرحنا فيها حساب العمر، يمكننا أن نكتب الشرط بالعربية كما يلي: إذا كان (تاريخ الميلاد أكبر من التاريخ الحالي): نقول للمستخدم أن هنالك خطأ وإلا: سنحسب العمر بطرح تاريخ الميلاد من التاريخ الحالي وإذا أردنا كتابتها بإحدى لغات البرمجة فستبدو شبيهةً بما يلي: if ( user_birth > current_year ) { // ERROR! } else { age = current_year - user_birth; } لا تلقِ للأقواس بالًا، فهي جزء من لغة البرمجة، وقد تختلف من لغة لأخرى، وليست موضع اهتمامنا حاليًا. حلقات التكرار ماذا لو كانت لدينا قاعدة بيانات فيها أكثر من مستخدم ولكل مستخدم تاريخ ميلاد. لا تقل لي سنأخذ التواريخ يدويًا وندخلها إلى البرنامج! هذا مضيعةٌ للوقت، والصواب هو إنشاء حلقة تكرار تأخذ قيمة تاريخ الميلاد الخاص بكل مستخدم ثم تحسب عمره كما أسلفنا في القسم السابق. دعنا نعدل الخوارزمية البسيطة لنضيف تكرارًا فيها: ما أجمل البرمجة! تخيل لو كان عندك ألف مستخدم، وكان عليك حساب أعمارهم، يمكنك بضغطة زر أن تحسبها كلها. الدوال الدالة function هي مجموعة من التعليمات البرمجية التي تقبل مدخلات وتعيد القيمة المطلوبة. تكون الدوال عادةً قصيرةً وتقوم بمهمة وحيدة فقط. فمثلًا لو أردنا تعريف دالة باسم divide تقبل عددين، وتعيد ناتج قسمة العدد الكبير على الصغير، فيمكننا أن نكتب الخورزمية الآتية: مصادر تعلم البرمجة للمبتدئين أول ما سيتبادر إلى ذهنك بعد قرارك تعلم البرمجة هو من أين سأتعلم؟ هنا يأتي دور القسم التعليمي المتكامل في حسوب ليقدم للمبتدئ (والمحترف على حدٍ سواء) محتوى علمي مميز ومبسط. تزخر أكاديمية حسوب بالمحتوى المفيد عن تعلم البرمجة للمبتدئين وحتى الخبراء أي على كافة المستويات، ستجد فيها أقسامًا تشرح لغات البرمجة وتقنياتها كلها. ولدينا قسم للأسئلة البرمجية التي يمكنك أن تطرح فيه سؤالك وسيجيب عليه أحد أفراد مجتمع أكاديمية حسوب. أضف إلى ذلك أن الأكاديمية توفر قسمًا للدورات المتخصصة التي تبدأ معك من الصفر وحتى احتراف لغة البرمجة التي تريد تعلمها مع كادر من المدربين المختصين الذي يقدمون لك المساعدة ويجيبون عن جميع استفساراتك. وهنالك قناة للأكاديمية على يوتيوب ننشر فيها دوريًا دروسًا قصيرةً عن تساؤلات محددة ومفاهيم البرمجة وخلافه. لا تنسَ الاشتراك في قناة الأكاديمية لتصلك الفيديوهات الجديدة. ماذا لو أردتَ التعمق أكثر في لغة معيّنة؟ تأتي هنا موسوعة حسوب التي توفِّر توثيقًا عربيًا كاملًا وعالي الجودة، مدعّمًا بالأمثلة لمختلف لغات البرمجة وتقنيات تطوير الويب والجوال. ستكون الموسوعة مرجعًا تعود إليه في مسيرتك البرمجية، وتستعين بها لمعرفة التفاصيل الدقيقة عن لغات البرمجة. فأنت لست مضطرًا لحفظ كل شيء في لغة البرمجة، إذ حتى المبرمجون المختصون ذوو الخبرة يعودون إلى التوثيقات بين الفينة والأخرى أثناء عملهم. لننطلق الآن للتحدث عن مجالات البرمجة الأساسية وما اللغات والتقنيات المستعملة فيها. تطوير واجهات المستخدم يبدأ أغلبية المطورين مشوارهم من خلال تعلم تطوير واجهات المستخدم عند اتخاذ قرارهم لدخول مجال تطوير وبرمجة مواقع الويب، وذلك لسهولة اللغات المستعملة في هذا المجال. هدف هذا المجال هو تطوير صفحات الويب التي تعرض محتوى مختلف مواقع الويب، وهي الصفحات التي تراها عند زيارتك لموقع أكاديمية حسوب أو موسوعة حسوب أو مستقل أو أي موقع آخر. تتألف صفحة الويب من مجموعة من المكونات، وتُكتَب هذه المكونات باستخدام لغة HTML، وبعد كتابة البنية الهيكلية للصفحة سنأتي على تنسيقها باستخدام لغة CSS، وهي اللغة المستعملة لإضفاء شكل وهيئة على عناصر HTML. أي أن عناصر HTML تصف محتوى الصفحة (مثل الترويسات والقوائم والمحتوى الرئيسي والفقرات والروابط والصور والفيدوهات)، وقواعد CSS تُعرِّف كيف يجب أن تبدو هذه العناصر (سواءً من ناحية الألوان أو المساحات أو الخلفيات أو الخطوط أو خلاف ذلك). تأتي لغة JavaScript مكملةً لهما وتستعمل لإعطاء بعض عناصر الصفحة صفاتٍ تفاعلية، مثل شريط متحرك من الصور أو قوائم تظهر عند وقوع حدث معيّن …إلخ. هنالك تقنيات كثيرة تستعمل في تسهيل إنشاء الواجهات الأمامية وسنذكر بعضها: إطار Bootstrap لتسهيل تنسيق عناصر الصفحة. مكتبة jQuery لتسهيل التعامل مع عناصر الصفحة باستخدام JavaScript. مكتبة React JS: لتسهيل تطوير واجهات المستخدم بالاعتماد على مكونات قابلة لإعادة الاستخدام. لغة Sass لإنشاء ملفات CSS بسرعة وسلاسة. أدوات بناء مثل Webpack الذي يسهِّل تحويل الملفات المصدرية للتطبيق إلى النسخة النهائية التي ستعرَض للمستخدم. لتعلم تطوير واجهات المستخدم، ننصحك بالتسجيل في دورة تطوير واجهات المستخدم المقدمة من أكاديمية حسوب، والتي تحتوي على أكثر من 72 ساعة فيديو تتوزع على ثمانية مسارات تعليمية تشرح أمثلة عملية تطبيقية شرحًا مفصلًا. أثناء مشاهدتك للدورة، يمكنك أن تعود إلى موسوعة حسوب لتتعرف على توثيق لغات البرمجة المذكورة، وذلك للاطلاع على تفاصيل وأمثلة أكثر عن كل جزئية من الجزئيات المشروحة في دورة تطوير واجهات المستخدم. اللغات والتقنيات المستخدمة في تطوير واجهات المستخدم: HTML و CSS و JavaScript و Bootstrap و Sass و jQuery و Webpack. تطوير الواجهات الخلفية قد تتساءل: ماذا يعني تطوير الواجهات الخلفية (backend)؟ وما الفرق بينه وبين تطوير واجهات المستخدم (frontend)؟ الفرق بينهما هو أن الواجهات الخلفية هي البرمجيات التي تُنفَّذ على الخوادم وتجري عمليات عليها مثل التعامل مع قواعد البيانات والملفات والخدمات الخارجية، أما واجهات المستخدم فهي الصفحات التي تظهر على شاشة الزائر في متصفحه. سأطرح عليك الخيارات المتاحة أمامك للبدء في مجال تطوير الواجهات الخلفية، وجميع اللغات المذكورة هنا هي لغات ناجحة وقوية ولا يهم أي لغة تختار منها، المهم أن تتطلع على شيفرات بسيطة من كل لغة وتتخذ قرار تعلمها، واحذر من تضييع وقتك في التنقل بين لغات البرمجة والبحث عن أفضلها، فكلُ لغةٍ ممتازةٌ في مجالها. تعلم البرمجة باستخدام لغة PHP بعد تبيان الفرق بين واجهات المستخدم والواجهات الخلفية، يمكن القول بأن أشهر لغة لتطوير الواجهات الخلفية هي لغة PHP، وتتفوق على اللغات المنافسة لها أضعافًا مضاعفة. تعلم البرمجة بلغة PHP أمر سلس، فهي لغة سهلة التعلم وبسيطة الشكل، والمجتمع حولها كبير وتطويرها مستمر. هذه اللغة هي خيار استراتيجي لمن يريد الدخول إلى مجال تطوير الواجهات الخلفية. هنالك عدد من البرمجيات المكتوبة بلغة PHP مثل ووردبريس WordPress ودروبال Drupal وميدياويكي MediaWiki (التي تشغِّل ويكيبيديا وموسوعة حسوب) وغيرها الكثير؛ إضافةً إلى عددٍ كبير من إطارات العمل مثل Laravel و CodeIgniter و Symfony و CakePHP و Yii وغيرها، وهذا ما يدل على إمكانيات اللغة الكبيرة والمجتمع الكبير الذي يحيط بها. لتعلم تطوير الواجهات الخلفية باستخدام PHP، ننصحك بالتسجيل في دورة تطوير تطبيقات الويب باستخدام PHP المقدمة من أكاديمية حسوب، والتي تحتوي على 75 ساعة فيديو تتوزع على اثني عشر مسارًا تعليميًا تبدأ بأساسيات لغة البرمجة PHP للمبتدئين، مرورًا بشرح أمثلة عملية تطبيقية بالتفصيل، ووصولًا لتطوير التطبيقات باستخدام إطار العمل Laravel، وشرح تطوير ووردبريس. أثناء مشاهدتك للدورة، يمكنك أن تعود إلى موسوعة حسوب للاطلاع على توثيق لغة PHP وإطار العمل Laravel. اللغات والتقنيات المستخدمة في تطوير تطبيقات الويب باستخدام PHP هي: PHP و Laravel وقواعد البيانات (مثل MySQL و PostgreSQL وغيرها). تعلم البرمجة باستخدام لغة روبي - Ruby إذا كنتَ تبحث عن لغةٍ أنيقة وسهلة الاستعمال فستجد ضالتك في لغة روبي Ruby فهي من أجمل اللغات وأسلسها كتابةً، وهي لغة برمجة عامة يمكن استخدامها لتطوير مختلف أنواع التطبيقات ومن ضمنها تطوير تطبيقات الويب. ذاع صيت روبي في تطوير الويب بعد نشر إطار العمل Ruby on Rails (يشار إليه اختصارًا "ريلز"). هنالك إطارات عمل أخرى مثل سيناترا Sinatra لكن يبقى ريلز أشهرها. لتعلم تطوير الواجهات الخلفية باستخدام روبي، ننصحك بالتسجيل في دورة تطوير تطبيقات الويب باستخدام روبي المقدمة من أكاديمية حسوب، والتي تحتوي على 20 ساعة فيديو تتوزع على أربعة مسارات تعليمية تشرح أمثلة عملية تطبيقية شرحًا مفصلًا، وتشرح تطوير التطبيقات باستخدام إطار العمل ريلز. أثناء مشاهدتك للدورة، يمكنك أن تعود إلى موسوعة حسوب للاطلاع على توثيق لغة روبي وإطار العمل ريلز. اللغات والتقنيات المستخدمة في تطوير تطبيقات الويب باستخدام روبي: روبي و ريلز وقواعد البيانات (مثل MySQL و PostgreSQL وغيرها). تعلم البرمجة باستخدام لغة جافا سكربت - JavaScript نعم! تستعمل JavaScript في تطوير الواجهات الخلفية أيضًا. الفضل يعود لبيئة Node.js التي تسمح للمطورين باستخدام JavaScript لكتابة برمجيات تعمل من جهة الخادم وذلك لتوليد صفحات ويب ديناميكية قبل إرسالها إلى المتصفح، وتستطيع Node.js التعامل مع الملفات وقواعد البيانات ومختلف أنظمة الشبكات وخدمات أنظمة التشغيل. هل يوجد أجمل من استخدام نفس اللغة لبرمجة الواجهات الأمامية لمواقع الويب والواجهات الخلفية؟ وكل ذلك باستخدام لغة سهلة التعلم والاستعمال ومدعومة دعمًا ممتازًا من المجتمع. تعلم لغة JavaScript لتطوير الواجهات الخلفية من خلال التسجيل في دورة تطوير التطبيقات باستخدام JavaScript المقدمة من أكاديمية حسوب، والتي تحتوي على 69ساعة فيديو تتوزع على أحد عشرمسارًا تعليميًّا تشرح أمثلة عملية تطبيقية شرحًا مفصلًا، وتشرح تطوير الواجهة الخلفية باستخدام Node.js. أثناء مشاهدتك للدورة، يمكنك أن تعود إلى موسوعة حسوب للاطلاع على توثيق لغة JavaScript وبيئة العمل Node.js. اللغات والتقنيات المستخدمة في تطوير تطبيقات الويب باستخدام JavaScript: لغة JavaScript وبيئة Node.js وإطار العمل Express.js وقواعد البيانات (مثل MongoDB و MySQL و PostgreSQL وGraphQL وغيرها). تعلم البرمجة باستخدام لغة بايثون - Python لغة بايثون متعددة الاستعمالات، ويمكن عدّها على أنها أسهل لغة برمجة على الإطلاق، إذ تبدو شيفرتها البرمجية كأنها مقالة مكتوبة باللغة الإنكليزية. إذا أردتَ لغةً سهلةً ومدعومةً دعمًا ممتازًا ولها أطر عمل كثيرة فأنت تبحث عن لغة بايثون. الخيارات المتاحة أمامك هي إطار العمل جانغو (Django) وفلاسك (Flask) وغيرها، يمكنك تعلم لغة البرمجة بايثون لتطوير الواجهات الخلفية من خلال قراءة سلاسل المقالات عن تعلم بايثون في قسم البرمجة في أكاديمية حسوب، ثم الانتقال إلى تعلم إطار العمل جانغو أو فلاسك. يمكنك أن تعود إلى موسوعة حسوب للاطلاع على توثيق لغة بايثون. تعلم لغة بايثون لتطوير الواجهات الخلفية من خلال التسجيل في دورة تطوير التطبيقات باستخدام Python المقدمة من أكاديمية حسوب، والتي تحتوي على 69 ساعة فيديو تتوزع على عشرةمسارات تعليمية تشرح أساسيات لغة بايثون للمبتدئين، ثم تطبق عمليًا بأمثلة واقعية، وتشرح إطار العمل جانغو Django وفلاسك Flask. اللغات والتقنيات المستخدمة في تطوير تطبيقات الويب باستخدام بايثون: لغة بايثون وإطارات العمل المبنية عليها (مثل جانغو وفلاسك) وقواعد البيانات (مثل MySQL و PostgreSQL وغيرها). تعلم تطوير تطبيقات الجوال ازداد عدد تطبيقات الجوال لأنظمة أندرويد و iOS ازديادًا كبيرًا في الفترة الماضية، وأصبح لكل شركة أو خدمة تطبيق خاص بها يسهِّل على مستخدميها الوصول إلى الخدمات التي توفرها. النظامان الرئيسيان المسيطران على سوق الجوال حاليًا هما أندرويد ثم iOS. يمكن برمجة تطبيقات أندرويد بلغة Java أو Kotlin (أو غيرهما) وبرمجة تطبيقات iOS باستخدام Swift (وغيرها). ستكتشف أنَّ عليك تطوير تطبيقين منفصلين تمامًا، واحد لهواتف أندرويد وآخر لهواتف iOS، وذلك يسبب زيادةً في حجم العمل المطلوب وصعوبةً في إدارة التغييرات. بسبب ذلك، ظهر مفهوم "التطبيقات متعددة المنصات"، وهي تطبيقات تعمل على نظام أندرويد و iOS دون أي تعديلات، وذلك باستخدام تقنيات مشتركة وهي في الغالب تقنيات الويب. أي أصبح بإمكان مطوري الويب الاستفادة من معلوماتهم في تطوير تطبيقات الجوال باستخدام منصات مثل آيونيك Ionic. تسمح آيونيك Ionic للمبرمجين بالتعامل مع مختلف وظائف الجهاز باستخدام لغة JavaScript، مثل الوصول إلى الموقع الجغرافي، والتقاط صور بالكاميرا، والتعامل مع الملفات وخلاف ذلك. طوِّرت في الفترة الماضية تقنيات أخرى مبنية على JavaScript مثل React Native المبنية على مكتبة React.js والتي تسمح للمطورين بكتابة تطبيقات أصيلة باستخدام تقنيات الويب. تستطيع تعلم تطوير تطبيقات الجوال عبر Ionic وعبر React Native من خلال التسجيل في دورة تطوير التطبيقات باستخدام لغة JavaScript المقدمة من أكاديمية حسوب، والتي تحتوي على 69 ساعة فيديو تشرح أمثلة عملية تطبيقية شرحًا مفصلًا. وكالعادة يمكنك أثناء مشاهدتك للدورة أن تعود إلى موسوعة حسوب للاطلاع على التوثيقات اللازمة. اللغات والتقنيات المستخدمة في تطوير تطبيقات الجوال: Java و Swift و Kotlin و Ionic و React Native وغيرها. تطوير الألعاب تطوير الألعاب هو المجال الذي يحلم جميع مستخدمي الحاسوب بالدخول إليه. فالأغلبية تعرفوا على الحاسوب من خلال ألعاب الفيديو ومن ثم بدؤوا برحلة الاستكشاف عن البرمجة والتطوير. أغلب من يجيب عن تطوير الألعاب يقول "عليك بتعلم لغة C++" لكن دعني أفصِّل لك الأمر قليلًا. برمجة الألعاب تتطلب عملًا كثيرًا من فريق عمل كبير، مدعوم من شركة تجارية. من الصعب على مطوِّر وحيد أن ينشئ لعبة كاملة من الصفر دون فريق. تُطور أغلبية الألعاب باستخدام محرِّك ألعاب Game Engine والذي يسهِّل الأمر على المطورين ويتيح بيئة تطوير مناسبة للألعاب، ويتيح الميزات الأساسية لجميع الألعاب مثل التحكم بالكاميرا ونمذجة الشخصيات ثلاثية الأبعاد وتحريكها والأمور الفيزيائية الأخرى. هنالك عدد كبير من محركات تطوير الألعاب، ومن المرجح أنك شاهدت شعارها في الألعاب التي لعبتها من قبل، ومن أشهرها: Unreal Engine و Unity و Godot. يمكن التعامل مع هذه المحركات باستخدام عدِّة لغات، مثل C++ (وهي أشهرها)، وجافا (خصوصًا للألعاب على هواتف أندرويد) وحتى يمكن استخدام JavaScript في التعامل مع بعضها. تذكر أنّ الألعاب غير محدودة بتطبيقات سطح المكتب أو الهواتف، فهنالك ألعاب كثيرة تعمل على المتصفحات باستخدام تقنيات HTML5 و JavaScript. اللغات والتقنيات المستخدمة في تطوير الألعاب: C++ و Java و JavaScript ومحركات Unity و Unreal Engine و Godot. برمجة الذكاء الاصطناعي يُعد الذكاء الاصطناعي (AI) من المجالات الرائدة والمطلوبة بكثرة في سوق العمل اليوم، لاسيما بعد أن أصبحت تطبيقاته في متناول الجميع وبات يستخدم في العديد من المجالات فتعلمك لهذا المجال الرائد يعزز قدراتك كمبرمج ويساعد على تعزيز تطبيقاتك بقدرات الذكاء الاصطناعي القوية. يتفرع الذكاء الاصطناعي لعدة مجالات من أبرزها تعلم الآلة والتعلم العميق التي تُمكّن الحواسيب من التعلم من البيانات وتحسين أدائها بمرور الوقت دون الحاجة لبرمجة تقليدية. كي تتعلم برمجة الذكاء الاصطناعي تحتاج لامتلاك فهم جيد للبرمجة وتحليل البيانات ويمكنك استخدام لغات برمجة متعددة في هذا المجال أشهرها لغة البرمجة بايثون التي توفر الكثير من المكتبات والأطر المساعدة مثل تنسرفلو TensorFlow وكيراس Keras وبايتورش PyTorch وباندا Pandas. إذا كنت مهتمًا بتعلم هذا الاختصاص القوي فستوفر لك دورة الذكاء الاصطناعي من أكاديمية حسوب التي تحتوي على 58 ساعدة تدريبية ممتدة على ثمانية مسارات تدريبية شاملة كل ما تحتاج إليه للبدء بتطوير تطبيقات ذكاء اصطناعي قوية واكتساب مهارة في تحليل البيانات من الصفر ودون الحاجة لامتلاك معرفة مسبقة. اللغات والتقنيات المستخدمة في برمجة الذكاء الاصطناعي هي Python و MongoDB وPymongo و TensorFlow و Keras و Pandas والنماذج اللغوية الكبيرة LLMs المختلفة. تطوير الأنظمة المدمجة الأنظمة المدمجة هي أنظمة حاسوبية شبيهة بالحاسوب ولكنها لا تملك كل ميزات الحاسوب الذي تراه أمامك الآن. بعبارة أخرى، النظام المدمج هو حاسوب صغير مبرمج لأداء مهام محددة فقط ومدمج ضمن الجهاز أو البيئة المراد استخدامه فيها. أنت الآن محاط بالكثير من الأنظمة المدمجة الآن مثل جهاز مقياس مستوى المياه وجهاز التحكم بالتلفاز وجهاز إنذار الحريق وأجهزة المراقبة …إلخ. حتى إشارات المرور وتنظيم السير وألعاب الأطفال الآلية تصنَّف على أنها أنظمة مدمجة. هل سمعت أيضًا بمصطلح "إنترنت الأشياء"؟ إنترنت الأشياء هو نظام مدمج متصل بالإنترنت. نعم، بهذه البساطة! لابد الآن أن يتبادر إلى ذهنك الساعات والثلاجات والغسالات الذكية وطائرات الدرون وأنظمة المراقبة عن بعد وأنظمة البيوت الذكية، إذ كلها أمثلة على إنترنت الأشياء. كيفية برمجة الأنظمة المدمجة أشهر وأكثر لغة برمجة تستعمَل في برمجة الأنظمة المدمجة وإنترنت الأشياء هي لغة C (أي لغة سي) وكل اللغات المشتقة منها (مثل لغة أردوينو C). تُستعمَل لغة C++ كثيرًا في هذا المجال، إذ تعدُّ لغة ذات مستوى أعلى من لغة C لدعمها للبرمجة كائنية التوجه. أضف إلى ذلك أنه بدأ حديثًا استعمال لغة بايثون في برمجة تطبيقات الأنظمة المدمجة مع أنها لم ترتبط تقليديًّا بهذا المجال سابقًا. صحيح أنَّ لغة بايثون ليست بقوة لغة C و C++ في هذا المجال إلا أنها تستمد ميزاتها وفعاليتها من المكتبات الهائلة المتوافرة فيها. بعيدًا عن C وبايثون، تستعمل في مجال الأنظمة المدمجة أيضًا لغات أخرى تنضوي ضمن "لغات توصيف العتاد" (Hardware Description Languages)؛ لغتي VHDL و Verilog هما من أشهر لغات توصيف العتاد المستعملة في هذا المجال. تُستعمَل مثل هذه اللغات في برمجة "مصفوفة البوابات المنطقية القابلة للبرمجة" (FPGA أي Field Programmable Gate Array). أخيرًا، قد تجد بعض المراجع تشرح برمجة الأنظمة المدمجة بلغة أخرى تدعى "لغة التجميع" (Assembly Language) التي تصنف من اللغات منخفضة المستوى. يتطلب تعلم البرمجة باستخدام هذه اللغة فهمًا واسعًا بمعمارية وحدة التحكم المركزية والمعالج بالمجمل لأنها أقرب لغة يفهمها الحاسوب. الانتقال إلى هذه اللغة قد يكون في مستويات متقدمة من تعلمك لبرمجة الأنظمة المدمجة وتطبيقات إنترنت الأشياء. من ميزات البرمجة بهذه اللغة هي التحكم الواسع بالعتاد والمعالج الذي لا توفره لغات أخرى. يقال أن هذه اللغة صعبة بعض الشيء ومعقدة، ولكن لا أرى ذلك! قد يكون سبب قول ذلك هو أن لغة التجميع هي لغة منخفضة المستوى وأقرب شيء إلى لغة الآلة ولا يستطيع من يلقي نظرة على شيفرة مكتوبة فيها فهمها مطلقًا إن لم يعرفها. تطوير تطبيقات سطح المكتب مجال تطوير تطبيقات سطح المكتب كالمحيط الواسع؛ إن لم تملك بوصلة وتعرف إلى أين تريد الاتجاه، ستضيع فيه حتمًا. هنالك الكثير من أنظمة التشغيل أشهرها - وأكثرها سيطرةً على السوق حاليًا - هي: نظام التشغيل ويندوز، ولينكس، وماك (macOS)، ويملك كل نظام تشغيل تطبيقات مكتبية خاصة به. لذلك، يجب عليك أولًا -قبل الدخول إلى سوق برمجة تطبيقات سطح المكتب- تحديد نظام التشغيل المستهدف. أي يجب الإجابة على السؤال التالي: هل يستهدف تطبيقك نظام تشغيل محدد، أم تريد لتطبيقك أن يعمل على عدة أنظمة تشغيل في آن واحد؟! بعد تحديد نظام التشغيل المستهدف، اطلع على اللغات المفضل استعمالها في ذلك النظام لبرمجة تطبيقاته؛ فعلى سبيل المثال، اللغات C و C++ و C# و VB.NET هي الأكثر استعمالًا في برمجة تطبيقات نظام التشغيل ويندوز، واللغات C و C++ و Bash هي الأكثر استعمالًا في برمجة تطبيقات توزيعات نظام التشغيل لينكس. أمَّا نظام الشغيل ماك، فينفرد باستعمال لغة Objective-C. حسنًا، دعني أخبرك الحقيقة، كل لغة برمجة عامية الغرض يمكن استعمالها في برمجة التطبيقات، إذ أشهر اللغات التي تُدرَّس أكاديميًّا في هذا المجال هي لغة جافا (Java). لا يخفى على القارئ دخول لغة بايثون بقوة على هذا المجال نظرًا لامتلاكها الكثير من المكتبات الرائعة وسهولة صياغتها. دخلت مؤخرًا لغة جافاسكريبت على سوق برمجة تطبيقات سطح المكتب عبر إطار العمل Electron (إلكترون)، إذ توظف في هذا المجال تقنيات تطوير الويب (HTML و CSS و JavaScript …إلخ.). بدأ هذا الإطار ينتشر كالنار في الهشيم مما دفع شركات كبيرة لتطوير تطبيقات سطح المكتب الخاصة بها باستعمال هذا الإطار ومنها شركة Slack التي استعملت هذا الإطار لتطوير تطبيقها المكتبي. أعلم أنك الآن تشعر بالضياع من كثرة لغات البرمجة والتقنيات المستعملة في هذا المجال؛ معك حق، فقد أخبرتك بذلك منذ قليل. دخول هذا السوق يحتاج منك تحديد هدفك منه بالضبط. هل لديك فكرة تطبيق وتريد إنشاءه والربح منه؟ هل تريد العمل لدى شركة محددة؟ ما هي مواصفات التطبيق الذي تريد إنشاءه أو تريد العمل على تطويره؟ كل ذلك يلعب دورًا في تحديد لغة البرمجة الأنسب لك لتعلمها. في النهاية، إن تعلمت أساسيات البرمجة وأتقنت العمل على لغة برمجية محددة، سيسهل عليك الانتقال إلى لغة برمجة أخرى، إذ أغلب لغات البرمجة تشبه بعضها بعضًا من ناحية المفهوم والمضمون وتختلف بعض الشيء من ناحية الصياغة والشكل. لذلك، اطمئن من هذه الناحية. كيفية اختيار لغة البرمجة التي تناسبك يمكنك اختيار لغة البرمجة اعتمادًا على المجال الذي تحب العمل فيه، سألخص لك مسار التعلم لمختلف مجالات العمل: العمل كمطور ويب full-stack: يعني ذلك تعلم تطوير واجهات المستخدم أو الواجهات الأمامية، وتطوير الواجهات الخلفية. يمكن التخصص بمجال واحد من هذين المجالين فقط، إذ يُطلَب كثيرًا في سوق العمل مبرمجين متخصصين في واجهات المستخدم أو الواجهات الخلفية. العمل كمطور تطبيقات للهواتف المحمولة: يمكنك تعلم برمجة تطبيقات أندرويد أو iOS كلًا على حدة، أو استعمال تقنيات مثل كوردوفا لتطوير لكلا النظامين معًا. العمل كمطور تطبيقات سطح المكتب: يمكنك البدء بالتخصص في تطوير تطبيقات مكتبية لنظام تشغيل محدَّد (مثل نظام التشغيل ويندوز أو لينكس) عبر تعلم لغة البرمجة المستعملة في ذاك المجال (كما أشرنا إلى ذلك في قسم تطوير تطبيقات سطح المكتب)؛ خيار آخر هو تعلم اللغات والتقنيات التي تمكنك من تطوير تطبيقات عابرة للمنصات (تعمل على عدة أنظمة تشغيل) مثل استعمال إطار العمل Electron. العمل كمطور للأنظمة المدمجة والأنظمة الذكية: لغة C هي أساس هذا المجال، سواءً كنتَ تتعامل مع المتحكمات مباشرةً، أو تتعامل مع شريحة مثل أردوينو (والتي تمتلك لغةً مشتقةً من C). يساعدك هذا الفيديو على معرفة المعايير التي من خلالها ستتمكن من اختيار لغة البرمجة التي تتناسب مع تطلعاتك وأهدافك المستقبلية. نصائح لتعلم البرمجة مشوار تعلم البرمجة من الصفر طويل وشائق، ولكنه جميل ومسلٍ بذات الوقت، قد تصاب بالإحباط في بداية طريقك لكثرة الأمور التي عليك الإلمام بها، لذا جهزت إليك النصائح الآتية من تجربتي في البرمجة: حدد هدفك من تعلم لغة البرمجة وسوق العمل الذي تريد دخوله واجعله واقعيًا. بدون هدف، أبشرك بأنك ستتخلى عن فكرة تعلم البرمجة بعد حين. انتبه إلى أن يكون هدفك واقعيًا وقابلًا للقياس والتجزيء على مراحل. بدون ذلك، ستفشل من أول عقبة وتترك تعلم البرمجة. أعرف نفسك جيدًا ونقاط قوتك وضعفك. كلنا لديه نقاط قوة وضعف، ولكن المفلح من عمل على ترميم وتحسين نقاط ضعفه في المجال الذي يرغب بتعلمه. رشح دورة واحدة وكتابًا واحدًا وابدأ بقراءة الكتاب ومتابعة الدورة تدريجيًّا ثم انتقل بعد الانتهاء إلى دورة أخرى وكتاب آخر، إذ سيجنبك ذلك التشتت بين الدورات الكثيرة والكتب العديدة. الشيء الذي أفعله قبل بداية تعلم شيء جديد هو ترشيح قائمة من عدة كتب ودورات ثم ترتيب هذه الكتب والدورات بحسب جودتها ومدى بساطتها وتعقيدها. أرقم الكتب والدورات وأبدأ بالخيار الأول منها. أحدد الوقت التقريبي الذي يأخذه كل خيار لدراسته وأجدول الخيارات البقية على رزنامتي الخاصة. لا تأخذ العلم إلا ممن تثق بعلمه، فالكثير من المبتدئين يحاولون مساعدة غيرهم وقد يضعون معلومات مغلوطة دون قصد. طبق ما تعلمته مباشرة، وأنشئ أي شيء من كل أمر جديد تتعلمه حتى لو كان رسمة بسيطة أو شيفرة من عدة أسطر فقط. فرحة إنجاز شيء مما تعلمته تدفعك لتعلم المزيد والاستمرار في طلب العلم. نظم وقتك بورقة وقلم، حدد بداية كل أسبوع خطةً لسائره والتزم بتنفيذها. أخبر أصدقائك أن لديك التزامات وأمور مهمة عليك إنجازها. خصص وقتًا للاستراحة بالطبع ولا تنسَ نصيبك منها. في نهاية كل أسبوع، وازن مدى الإنجاز الذي حققته ومدى تطبيق الخطة التي وضعها وحاول أن تصل النسبة إلى 100%. أنصحك بقراءة ومتابعة استراتيجيات تنظيم الوقت ورفع الإنتاجية. تمرس على حل المشكلات وتحدى نفسك باستمرار وتابع المسابقات البرمجية واشترك بها إن استطعت، أنصحك بقراءة مقالة حل المشكلات وأهميتها في احتراف البرمجة بعد هذه المقالة. لا تنسَ أن تكافئ نفسك في كل مرة تنهي فيها كتابًا أو تكمل العمل على مشروع. لا تنسَ حظك من الاستراحة، لأن طريق البرمجة قد يكون له بداية ولكن النهاية بعيدة ومتعبة -مثله مثل أي مجال آخر-. في النهاية أرجو لك كل التوفيق في مشوارك البرمجي. وأرجو منك أن تشاركنا تجربتك في تعلم البرمجة، لعل غيرك يستفيد منها. اقرأ أيضًا كيف تتعلم البرمجة المدخل الشامل إلى تعلم علوم الحاسوب المرجع الشامل إلى تعلم لغة بايثون تعرف على أعلى تخصصات البرمجة أجرا تعلم لغة HTML قواعد البرمجة ما هي فوائد تعلم البرمجة؟ أسهل لغات البرمجة أهمية البرمجة1 نقطة
-
إذا كنت مهتما بتعلم البرمجة، فعلى الأرجح أنك رأيت هذا الاقتباس من قبل: في الحقيقة لا أبالغ إن قلت أن البرمجة أصبحت من أهم المهارات في عصرنا الحالي، وذلك لأنها دخلت في جميع مجالات حياتنا سواءً كنا ندرك ذلك أم لا فانطلاقًا من الهواتف المحمولة ومرورًا بالمنازل والشاشات الذكية وانتهاءً بالسيارات ذاتية القيادة. كل شيء من حولنا لم نكن لنراه بهذا الشكل لولا البرمجة، فأنا على سبيل المثال أكتب وأعدل هذا الموضوع من خلال برنامج بُرمج عبر لغة برمجة وأنت تقرأه على الإنترنت باستخدام برنامج (المتصفح) وربما رأيته على مواقع التواصل الاجتماعي وكُلها برامج أيضًا. ومما لا شك فيه أن تعلم البرمجة أصبح ضرورة مُلحة في هذا العصر بل إن تعلمك لها سيزيد من فرصك بشكل كبير في الحصول على عمل. ولقد تحدثنا في مقالٍ سابق عن كيفية تعلم البرمجة والدخول إلى هذا المجال من أوسع أبوابه (إن كنت حديث عهدٍ في البرمجة أو تخطط للبدء بها، فننصحك بقراءته قبل إكمال هذا المقال) وسوف نتحدث في هذا المقال عن أكثر المهارات صعوبةً في احتراف البرمجة ألا وهي «حل المشاكل». حل المشكلات وارتباطها بالبرمجة لطالما وقفنا حائرين أمام مشكلةٍ ما ونسأل أنفسنا ماهي الطريقة الصحيحة للخروج من هذا المأزق؟ هل ستكون طريقة الحلّ التي أتبعها مشابهة للطريقة التي يتبعها المبرمجين المحترفين؟ كيف أستطيع أن أفكر مثلما يفكر المبرمجين المحترفين؟ في البداية وقبل الخوض في التفاصيل دعنا نُعرف البرمجة بحد ذاتها ولنذهب للمقال السابق ونلقي نظرة سريعة عليها: نلاحظ أن التعريف السابق صحيح ولكنه مُقْتضَب ولا يقدم لنا المعنى الكامل والدقيق للبرمجة لذا لابدّ لنا من تعريفٍ أكثر دقة وموضوعية يساعدنا في فهم هذا المقال. يعرف موقع HackerRank في تقريره عن مهارات المطورين بعام 2018: نستنتج مما سبق أن البرمجة تعتمد اعتمادًا أساسيًا على التفكير المنطقي والرياضي والقدرة على حلّ المشاكل وإن لغات البرمجة ما هي إلا وسيلة للتخاطب مع الحاسوب. إذن الأمر كله يتعلق بتطوير قدرتك في حلّ المشاكل وجعل هذه العملية سهلة وسلسة بنفس الوقت لذا فاسمح لي بأن آخذك معي برحلة صغيرة في هذا المقال نتعرف فيها على أهمية حلّ المشاكل وضرورتها في مشوارك البرمجي. دورة علوم الحاسوب دورة تدريبية متكاملة تضعك على بوابة الاحتراف في تعلم أساسيات البرمجة وعلوم الحاسوب اشترك الآن لماذا حلّ المشاكل مهم؟ تأتي أهمية حل المشاكل من كونها من أكثر المهارات المطلوبة عالميًا فوفقًا لتقرير أصدره موقع HackerRank جاء فيه: احتلت مهارة حلّ المشاكلالمرتبة الأولى بنسبة 94.9% لأكثر مهارة مطلوبة لأصحاب الشركات سواء الصغيرة منها أو الكبيرة. وعلى الصعيد العملي، إن عملية بناء أي شيء من الصفر سواء أكانت آلة معينة أو أي مُنتج جديد ستواجه الكثير من المشاكل في البداية، فعلى سبيل المثال بناء خدمات أمازون السحابية (AWS)، والّتي جاءت حلًا لمشكلة النفقات العالية للبنية التحتية لتجارتها الإلكترونية بالإضافة إلى الوقت الطويل الّتي تحتاجه في عملية البناء والذي شكل تحدي كبير في إمكانية توسع الشركة، إلى أن جاء آندي جاسي كبير مستشاري جيف بيزوس في ذلك الوقت والذي استطاع إيجاد حلّ لهذه المشكلة ولم يتوقف عند ذلك الحد وإنما أختار تحويل هذا الحلّ إلى خط أعمال جديد تحت أسم خدمات أمازون السحابية والّتي بلغت عائداتها السنوية لعام 2018 قيمة تناهز 25 مليار دولار. نجد من التجربة السابقة أنه حصلت مشكلة فأُوجِد لها حلًا وأثناء خلق حل للمشكلة ظهرت الكثير من المشاكل الأخرى لتقع في سلسلة من المشاكل لا تنتهي. وبعد حلّ جميع المشاكل سيصبح المنتج جاهزًا للعمل، أي أن دورة حياة أي منتج سواءً أكان برمجيًا أو ماديًا ستحتوي على المشاكل، وبناءً على ذلك تكون مهارة حل المشاكل اللَبِنَة الأساسية في بناء مشوارك البرمجي، والّتي يجب علينا الإهتمام بها عند الإقدام على تعلّم البرمجة. تكون طريقة تعاملنا مع المشاكل غير منظمة وعشوائية في أغلب الأحيان، فمعظمُ المبرمجين الجُدد يَبْدَؤُونَ بحلّ أي مشكلة تُواجهُهُم بالطريقة التالية: جرّب أي حلّ للمشكلة. إذا لم ينجح الحلّ الأول حاول أن تجرّب أي حلّ آخر. إذا لم يفلح الحلّ كرر الخطوة الثانية إلى أن تصل إلى الحلّ. لا يحصل هذا الأمر مع المبرمجين فقط، وإنما يحصل مع أي شخص يواجه مشكلة ولا يستعن على حلها بالتحليل والتفكير المنطقي. في الحقيقة، قد يحالفك الحظ أحيانًا ويتم حلّ المشكلة ولكن كن حذرًا! فهذه هي الطريقة الأسوأ لحلّ المشكلات بل وإنها ستهدر وقتك بشكل كبير لذا من الأفضل استخدام طريقة منظمة توصلنا للحلّ، واسمح لي بأن أشاركك طريقة شاملة توصلك إلى حلّ أي مشكلة قد تواجهك. بناء خطة حلّ شاملة إن خطة الحلّ الشاملة هي مجموعة من الخطوات الَّتي تتبعها لحلّ أي مشكلة تواجهك، حيث تكون هذه الخطة عامة وتخصص بحسب المشكلة، وهي ليست تعليمات ثابتة وإنما مبادئ ننطلق منها جميعًا، وكلٌ منا يطبقها بأسلوبه الخاص، وفي نهاية المطاف إذا انطلقنا جميعًا من نفس المبادئ، فسنصل حكمًا على نفس جودة الحلّ أيضًا. إن هذه الخطة مؤلفة من عدة أجزاء ويناقش كلّ جزء فيها جانبًا معينًا من المشكلة إلى أن نصل للحلّ، وهي على الشكل التالي: 1. فهم المشكلة إن فهمنا للمشكلة المطروحة هي الخطوة الأكثر صعوبة في طريقنا لحلّها، بل إن أكثر المشاكل تأتي صعوبتها من عدم تمكننا من فهم عميق لها. ولكن متى تعلم بأنك استطعت فهم المشكلة؟ إذا كنت قادرًا على شرحها بكلمات واضحة وسهلة بحيث يستطيع أي شخص فهمها عندها تكون بالفعل قد فهمت المشكلة. هل تذكر عندما كنت عالقًا في مشكلة وبدأت بشرحها فوجدت أخطاء منطقية كثيرة لم تكن قد انتبهت لها من قبل؟ أغلب المبرمجين قد مروا بهذه الحالة من قبل، لذلك من الأفضل دومًا أن تكتب المشكلة الَّتي تواجهك باستخدام مخططات الحالة (State diagram وهي نوع من المخططات الَّتي تستخدم لتوصيف سلوك نظام ما) أو بأن تخبر شخص آخر عن المشكلة سواءً أكان زميل لك في الشركة أو عضو في الفريق أو أي شخص أخر. شاع بين المبرمجين استخدام البطة المطاطية في شرح أجزاء المشكلة لها لفهمها وإيجاد حل لها. يعد أسلوب البطة المطاطية في تنقيح الأخطاء من أكثر الأساليب سهولة وبساطة، إذ يضع المبرمج بطةً بجوار حاسوبه، وعند مواجهته لأي مشكلة يشرع في شرح الشيفرة البرمجية للبطة وما هي النتيجة المرتقبة من الشيفرة وموازنتها مع النتيجة الحالية وغالبًا ما يجد الخطأ أثناء شرحه. وخلاصة لهذه الخطوة أنقل إليك مقولة ألبرت أينشتاين: 2. تحليل المشكلة إن تقسيم المشكلة يلعب دورًا مهمًا في طريقك لإيجاد الحلّ، لذا حاول أن تقسّمها إلى أجزاء صغيرة ثمّ حُلّ كلَّ جزء منها على حدة ويُنصح في البداية بحلّ أسهل جزء منها ومن ثمّ الأصعب فالأصعب وهكذا إلى أن يتمّ حلّ جميع أجزائها، وبعدها إجمع هذه الأجزاء مع بعضها للحصول على الحلّ النهائي للمشكلة الأصلية (الكبيرة). منذ فترة كنا بصدد برمجة إضافة لمتصفح غوغل كروم بهدف تسهيل مهمة لموقع ما، فقررنا تجربة هذه الطريقة وبدأنا بتقسّيم المهمة على أجزاء ثم عملنا على حلّ كل جزء منها، وبعدها جمعنا هذه الأجزاء مع بعضها بعضًا لبناء الإضافة، وبالفعل كان العمل بهذه الطريقة سهلًا جدًا ومريحًا كما لم نعهده من قبل. في بعض الأحيان عندما تواجه شيفرات برمجية كتبها مبرمجون لا يتبعون مبادئ SOLID (وهي مجموعة من العادات والمبادئ الَّتي يتبعها المبرمجون للحصول على شيفرة برمجية قابلة للصيانة وسهلة التعديل والتكيف مع متطلبات المشروع المتغيرة)، وغالبًا ما تكون شيفرات أولئك المبرمجين غيرمفهمومة ومتشابكة ويطلق عليها اسم Spaghetti code (تكون هذه الشيفرات ذات بنية معقدة ومتشابكة وصعبة القراءة وغير مرتبة أي تكون مثل المعكرونة ملتوية ومتشابكة) ولنفرض أنه طُلبَ منك تعديل هذه الشيفرة أو إضافة وظائف جديدة إليها،عندها حتمًا ستواجه العديد من المشاكل في عملية تقسيم المشكلة ومعرفة أي جزء من الشيفرة البرمجية المُسبب للخطأ لذا كان الحصول على شيفرات برمجية مرنة وقابلة للتعديل هي الأرضية المشتركة بين العديد من تقنيات تبسيط الشيفرات البرمجية مثل مبادئ SOLID أو مبدأ MVC والذي ينص على تقسيم الوحدات من حيث طبيعة مهمتها إلى ثلاثة أقسام (Model-View-Controller) والبرمجة كائنية التوجه OOP (Object-Oriented Programming)، إذ أن جميعهم يهدفون إلى فصل الأكواد إلى أقسام ليسهل تطويرها وتنقيحها وصيانتها. 3. إعداد خطة للحل بعد أن فهمت وحللت المشكلة، يأتي دور وضع الخطة المناسبة للحلّ بحيث تغطي كافة الجوانب والتفاصيل للمشكلة، ولا تشرع في الحلّ من دون خطة (على أمل أن تجد الحلّ بطريقة ما) لأن المفتاح الرئيسي للوصول للحلّ هي الخطة الواضحة والمنظمة والتي تضمن وصولنا للحلّ النهائي. أعط لنفسك وقتًا لتحلّيل المشكلة وربط المعلومات المدخلة إلى البرنامج ونوعها والمعلومات الَّتي ستظهر كخرج للبرنامج وفهم سياقها وللحصول على خطة جيدة يجب عليك الإجابة على السؤال التالي: إذا أُعطي للبرنامج الدخل س، ما هي الخطوات اللازمة للحصول على الخرج ع؟ إن إجابتك على هذا السؤال سوف يحدد ماهي الخطوات اللازمة لحلّ المشكلة ومن ثَمَّ تقوم بترتيبها في خطة واضحة ومنظمة من أجل الحصول على الخرج الذي تريده. 4. مواجهة حالة السكتة البرمجية ماذا لو فرضنا أنك لم تستطع حلّ أي جزء من المشكلة، ولا حتى الأجزاء السهلة منها (وهذا قد يحدث في بعض الأحيان)، إن كثير من المبرمجين يقعون في هذه الحالة فلا يستطيعون أن يُحرزوا أي تقدم يذكر في تطوير الشيفرة البرمجية وهذا أشبه ما يمكن بالسكتة الدماغية (حيث لا يستطيع المريض القيام بأي حركة)، في الحقيقة إن هذه الحالة طبيعية جدًا ومعظمنا قد تعرض لها في بداية مشواره والاختلاف الوحيد هو أن المبرمج المحترف لديه فضول أكثر حول المشكلة ومعرفة سبب حدوثها بدلًا من أن يكون منزعجًا أو غاضبًا منها. وفي هذه الحالة هنالك حلّين يمكنك تجربتهما للخروج من هذا المأزق: 1-4. تنقيح الأخطاء (Debug) ليس المقصود هنا الأخطاء الكتابية في صياغة اللغة (Syntax errors) مثل نسيان فاصلة منقوطة أو أي خطأ في استخدام المتغيرات أو الدوال أو ما شابه ذلك من أخطاء والَّتي تقوم باكتشافها أي بيئة تطوير متكاملة (IDE وهي عبارة عن محرر شيفرة برمجية مدمج مع نظام ذكي لإكمال الكود ومصحح أخطاء). وبالطبع ليست أيضًا الأخطاء الّتي تظهر أثناء التنفيذ (Runtime Errors) والّتي تكون عادة نتيجة لفشلٍ في فتح ملف ما أو محاولة القسمة على صفر أو مثل هذه الأخطاء، وإنما المقصود هنا هو أخطاء المنطق البرمجي (Logic errors) الّتي ينفِّذ فيها البرنامج أمرًا غير الَّذي بُرمج من أجله، لذا من الأفضل أن تحاول أن تفحص الشيفرة البرمجية سطرًا سطرًا لعلك تجد هذا الخطأ، أوإذا كنت تعمل على لغاتٍ مثل (C++, C) والّتي تدعم استخدام المُنقِّح Debugger (الذي يراقب عمل البرنامج ويتحكم في تنفيذه بطريقة تستطيع فيها إيقاف تنفيذ البرنامج أو حتى تغييره في أي موضع من الشيفرة وذلك من خلال مجموعة من الأدوات الّتي يقدمها المُنقِّح، مثل: GNU Debugger) فيمكنك استخدامه لإيجاد الخطأ ومن ثَمّ إصلاحه. ملاحظة : من المنهجيات البرمجية الجيدة هي كتابة تعليقات توضيحية قبل كلّ دالة (Function) أو صنف (Class) برمجي وخُصوصًا تلك الأجزاء المعقدة منها لأن ذلك سوف يساعدك كثيرًا في عملية مراجعة الشيفرة البرمجية وتنقيحها. 2-4. مراجعة وتقييم الحلّ في كثير من الأحيان عند مواجهتنا للمشاكل وخصوصًا للكبيرة منها قد نضيع في التفاصيل الصغيرة للمشكلة الَّتي نواجهها وننسى المشكلة الرئيسية ولذلك من الأفضل دومًا أن نسأل أنفسنا هل هذه هي الطريقة الأفضل للحلّ؟ هل هنالك حلًّا عموميًا أفضل من الموجود؟ هل الشيفرة البرمجية أمثلية؟ هل الحلّ يخرق معايير الجودة المطلوبة؟ ارجع خطوة إلى الوراء وحاول أن تراها من منظور مختلف، وحتمًا ستلاحظ العديد من المشاكل التي غفلت عنها أثناء انشغالك بالتفاصيل الصغيرة. ملاحظة : هنالك طريقة أخرى يتبعها بعض المبرمجين لإعادة تقييم الحلّ وهي حذف الشيفرة البرمجية الخاطئة بالكامل وإعادة كتابتها من جديد فكثير ما يأخذ ذلك وقتًا أقل من تتبع المشكلة ذاتها وحلها. 5. البحث عن حلول عبر الإنترنت إن أغلب المشاريع البرمجية تكون متشابهة بكثيرٍ من الوظائف والخصائص، ونادرًا ما نرى مشروع ذو أفكارٍ جديدة بالكامل لذا فإن أي مشكلة برمجية تواجهها قد واجهها عدد كبير من المبرمجين من قبلك وأوجدوا لها حلولًا وشاركوها مع غيرهم، وكل ما عليك فعله هو أن تتعلم كيف تبحث عن المشكلة. وبالطبع صديقنا stackoverflow والذي يعد من أشهر منصات مشاركة الحلول البرمجية الّذي يقدم لك الحلّ الَّذي أجمع عليه أغلب، المبرمجين، ويوجد العديد من المنصات الأخرى المشابهة مثل AskUbuntu وهو النسخة العربية من موقع stackoverflow والكثير غيرهم، وحتى لو أنك قد حللت المشكلة أنصحك بتصفح الحلول الموجودة لأنك سوف تتعلم طرقًا أُخرى لحلّها قد تكون أسهل وأفضل بكثير من الحلّ الَّذي وصلت اليه. إلى الآن نكون قد ناقشنا الخطوة الأولى من الطريقة الشاملة لحلّ المشاكل والآن لننتقل إلى الخطوة الثانية. التدرب على هذه الخطة إن أي مهارة جديدة تحتاج إلى تدريبٍ مُمنهجٍ ومستمرٍ حتى تتقنها. لذا لا بدّ لك من وضع خطة واضحة للتدريب وتخصيص زمن محدد وثابت تقضيه في صقل تلك المهارة.يمكنك البدء مثلًا بتخصيص ساعة للتدريب يوميًا لمدة شهر كامل، وبعدها توازن نفسك مع ما كنت عليه في السابق من سرعةٍ في تحديد المشكلة وجودةٍ الحل المطروح والوقت الإجمالي لحل المشكلة وبكل تأكيد ستلاحظ تحسنًا واضحًا في أدائك. وقد تساءل نفسك كيف يمكنني التدرب على حلّ المشاكل؟ في الحقيقة هنالك طريقة مفيدة جدًا أنصحك بها لتكوين قاعدة صلبة تنطلق منها، وهي على الشكل التالي. 1. التدرب على المسائل البرمجية تعد المسابقات البرمجية سواءً على مستوى الجامعة أو على مستوى القطر أو حتى على مستوى العالم مثل مسابقة ACM ICPC من أفضل الفرص للتدريب في مجال البرمجة وصقل هذه المهارة بل وتعتبر دفعة كبيرة لك في رحلتك كمبرمج ولمستقبلك المهني أيضًا، إذ تبادر العديد من الشركات العالمية لِضمّ أولئك المنافسين المتميزين إليها بعد أن أثبتوا بالفعل أنهم النخبة في مجالهم. فإن كنت تخطط للانضمام إلى هذه المسابقة فلا تتردد وبادر بالتحضير لها من الآن. ويقدم لنا الكاتب Steven Halim في كتابه Competitive Programming بعض الفوائد الَّتي نجنيها من التدرب على حلّ المشاكل البرمجية في المسابقات. السرعة في كتابة الشيفرة البرمجية كتابة الشيفرة البرمجية بسرعة في المسابقات يوفر لك الكثير من الوقت للتفكير في بقية المشاكل واختبارها لذلك نرى أغلب المبرمجين يتدربون على سرعة الكتابة على لوحة المفاتيح لينصب تركيزهم على حلّ المشكلة فقط، ولذلك من المنطقي أن تفضل الشركات الموظفين الَّذين سَبق إن شاركوا في المسابقات البرمجية لمعرفتها بسرعة إنتاجيتهم وقدرتهم على تطوير وإيصال منتج برمجي بسرعة عالية بِالْمُوازنة مع أقرانهم ممن لم يشاركوا في المسابقات. العصف الذهني وحصر الخوارزميات الممكنة لا بدّ من تحسين قدرتك على تحديد نوع المسألة بسرعة وأن تمتلك المعرفة الكافية بالخوارزميات لتتمكن من تطبيقها مباشرة على المسألة المطروحة، لذلك ينبغي على المبرمج الَّذي ينوي الانضمام إلى المسابقة أن يتمكن من جميع الخوارزميات الشائعة في المسائل البرمجية. العمل الجماعي وروح الفريق تعتمد المسابقة البرمجية على ترتيب الفرق بحسب عدد المسائل الَّتي أجابوا عليها، والوقت الَّذي استهلكوه لحلّ كُلَ مشكلة، وعدد الحلول الخاطئة الَّتي أُرسلت للحكم. وانطلاقًا من ذلك تكون فوائد العمل كفريق واحد متعددة منها إمكانية توزيع المسائل على كلّ عضو في الفريق بحيث يزداد العدد الكلي للمسائل المحلولة بتوزيعها بين بعضهم بعضًا، ومناقشة حلّ كلّ مسألة وبذلك ينقص عدد الحلول الخاطئة الَّتي قد تُرسل للحكم، وحُكمًا سينقص الوقت المستغرق لحلّ المسائل. وعلى الصعيد العملي أيضًا نجد أن طبيعة عمل المبرمجين سواءً في الشركات الصغيرة أو الكبيرة، يُطلب منهم العمل كفريق واحد، فعلى سبيل المثال منذ فترة طَلَبَ مني أحد العملاء بناء موقع ويب، وكنت عندها قد أنتهيت من بناء فريقي البرمجي. وبالفعل بدأنا العمل على الموقع و قسّمنا العمل على أجزاء فعكف كلُّ واحد منا على تطوير جزئه الخاص من الموقع، إذ استلمتُ جزء الواجهات الخلفية، وقام أحد أعضاء الفريق باستلام الواجهات الأمامية، والآخَر استلم بناء تطبيق للهواتف الّتي تعمل بنظام أندرويد وفي نهاية الأسبوع جمعنا كل الأجزاء مع بعضها بعضًا وأنهينا المشروع بوقتٍ قياسي لم نكن لنستطيع بلوغهُ لو أننا لم نعمل كفريقٍ واحد، ولذا فإن انضمامك إلى المسابقة البرمجية يجعلك تتدرب على العمل ضمن فريق قبل أن تواجهها في سوق العمل في حال أردت العمل مع أي شركة مستقبلًا. المرونة العصبية إن تدريبك المستمر على المسائل البرمجية سيؤدي إلى زيادة منطقة الحصين (المنطقة المسؤولة عن الذاكرة والتوجيهات) في الدماغ وهذا ما أثبتته الباحثة اليانور ماجواير من كلية لندن الجامعية عندما أجرت دراسة على سائقي الأجرة في مدينة لندن فقاموا بإجراء فحص بالرنين المغناطيسي الوظيفي fMRI لأدمغة السائقين الذين قضوا قرابة عامين من التدريب في سبيل تعلم كيفية التنقل في منعطفات المدينة وذلك من أجل الحصول على رخصة القيادة ومقارنتها بصور لأدمغة رجال أصحاء من نفس العمر ولا يعملون كسائقي أجرة فتبين أن منطقة الحصين أصبحت أكبر لدى السائقين، كما لاحظوا أنه كلما أمضى سائق الأجرة فترة أطول في التدريب، زاد حجم الحصين، وذلك استجابة إلى الخبرة الّتي يكتسبها السائق. والآن تخيل معي ما سيحدث في حال تدربك على حل المشاكل لمدة عام أو أكثر، سيصبح حلّك للمشاكل البرمجية عادة سهلة ومسلية خلاف ما كانت عليه من صعوبة وتعقيد. يوجد العديد من المواقع الَّتي تقدم المسائل البرمجية مثل HackerRank أو موقع TopCoder والكثير غيرهم. 2. التدرب باستخدام الألعاب نعم أنت لم تخطئ القراءة إنها الألعاب! تعد الألعاب أداة قوية جدًا لتنمية المهارات العقلية والقدرات الدماغية على التفكير والتذكر وربط المعلومات ببعضها بعضًا، حيث أن غالبية الألعاب تحتاج لتجميع المعلومات وتنظيمها بحيث تستطيع الاستفادة منها وجعلها مفتاحًا للحلّ، بل إن الركيزة الأساسية الَّتي تشترك بها كافة الألعاب هي حلّ المشاكل! بالتأكيد نحن لا نقصد هنا ألعاب الفيديو فقط وإنما ألعاب الذكاء أيضًا مثل : لعبة الشطرنج، والألغاز الرياضية، ولعبة سودوكو، ولعبة Go، والكثير من الألعاب الَّتي تندرج تحت هذا السياق تعد ألعاب مفيدة. فعند محاولتك حلّ الألغاز في Saw أنت فعليًا تقوم بحلّ المشاكل (ولكن بإطار مختلف). وتساعدنا أيضًا في انشاء سيناريوهات للحلّ وهذه المهارة مفيدة في عالم البرمجة في حال تعثرت في أسلوب حلّ معين فتغير سيناريو الحلّ وتبدأ من جديد. في الحقيقة إن الشيء المشترك بين جميع الناس الناجحين هي اكتسابهم لعادات يومية لحلّ المشاكل الصغيرة على سبيل المثال بيتر تيل (أحد مؤسسي شركة باي بال والمصنف كرابع أغنى شخص على مستوى العالم لعام 2014 بميزانية تفوق $2.2 بليون دولار) صرح بشكل رسمي أنه يلعب الشطرنج يوميًا بل وشارك في بطولات الشطرنج مرات عديدة، وإيلون ماسك (رائد الأعمال والرئيس التنفيذي لعدة شركات مثل: سبيس إكس لتصنيع مركبات الفضاء وتسلا لصناعة السيارات الكهربائية وغيرها)أكد بأنه يلعب ألعاب الفيديو والكثير غيرهم كرسوا جزءًا من وقتهم اليومي لتنمية مهارة حلّ المشاكل. ولكن يجب أن تكون حذرًا في إدارة وقت اللعب ويُفضل أن تختار الأوقات المناسبة للعب ووضع مدة زمنية مخصصة لها، وذلك لأن الهدف ليس إضاعة الوقت والتسلية فقط وإنما التدرب على حل المشاكل ولكي لا ينتهِ بك المطاف إلى قضاء اليوم بأكمله على الألعاب. الخلاصة اعتقد أنك قد كونت فكرة جيدة عن أهمية حلّ المشاكل وضرورتها في مشوارك البرمجي وكيفية بناء خطة حلّ شاملة انطلاقًا من فهم المشكلة وتحليلها ومرورًا بإعداد خطة مخصصة لكلّ مشكلة وتقسيم المشكلة إلى أجزاء ليسهل حلّها ومواجهة حالة السكتة البرمجية وكيفية التغلب عليها من خلال تنقيح الأخطاء أو مراجعة وتقييم الحلّ، وأهمية البحث عن حلول على الإنترنت لنفس المشكلة وانتهاءً بالأسلوب الصحيح للتدرب على حل المشاكل وما هي أفضل الوسائل لتحقيق ذلك سواءً بالانضمام إلى المسابقات البرمجية أو بالتدرب بإستخدام الألعاب. وختامًا، لا تتوقع أن تصبح مبرمجًا محترفًا في غضون أسبوعٍ أو شهر واحد فهذا ضرب من الخيال بل ستحتاج لحلّ الكثير من المشاكل لبناء قاعدة معرفية صلبة تمكنك من مواجهة أي مشكلة مهما كانت صعوبتها وعندها بالتأكيد سوف تستحق لقب مبرمج محترف. اقرأ أيضًا تعلم لغة PHP تعلم لغة بايثون1 نقطة
-
يبدو العمل المستقل من المنزل حلمًا يتحقق لهؤلاء العالقين في دوامة الدوام الكامل، إلا أنه بدوره يحمل في طياته مشاكله الخاصة، الجسدية والنفسية، والتي لا تكون واضحة في البداية، وقد يشكل التعامل معها أكبر تحدٍ يواجهك كمستقل، إلا أنه يمكن الفوز به، إذا كنت ترحب ببعض التغييرات في أسلوب حياتك. بالنسبة لكاتب المقال وربما بالنسبة لك أيضًا، أكبر تحديات هي: العزلة، ونقص التمارين، والإجهاد العقلي، سيتحدث المقال عنها على حدى، وكيف يمكن التعامل معها. سلبية العمل من المنزل يخبرنا كاتب المقال عن مدى شعوره بأنه محظوظ في أول يوم بعد أن استقال من آخر عمل مكتبي له ليبدأ مسيرته كمستقل متفرغ، إذ يستيقظ المرء الساعة التاسعة صباحًا ويحضر فطورًا معدًا من القلب، ويتلذّذ بأول كوب قهوة قبل الشروع في العمل، ولا تبدأ صعوبات أسلوب الحياة الجديد هذا بالظهور إلا بعد الأسابيع الأولى القليلة. العزلة لا تشعر بقيمة القدرة على الانخراط الاجتماعي السهل أثناء قيامك بأي عمل عادي إلا عندما تبدأ العمل كمستقل، فحينما عمل صديقنا في مطبخ، كان زملاؤه يمازحون بعضهم البعض طوال اليوم، وعمل آخر جعله يجلس في مهجع محاطًا بكثير من الأشخاص الذين كان يعرفهم، إذ لا يمكنك تجنب الانخراط الاجتماعي إذا كانت حياتك تعتمد عليه. عندما بدأ صاحبنا مسيرته كمستقل، كان يمكن أن تمر أيام كاملة دون أن يحادث أحدًا إلا بالرسائل النصية أو البريد الإلكتروني أو الاتصالات الهاتفية، ومن المؤكد أن العديد منكم مر بهذا، ويمكن لهذا أن يؤثر عميقًا، ويسبب لك القلق خصوصًا إذا كنت مستقلًا يعيش وحده. يمكن لعمل كهذا أن يتسبب بجداول عمل غريبة ويوتر علاقاتنا الاجتماعية الهشة أساسًا، وقبل أن تدرك ذلك ستجد نفسك ذلك الشخص ذا اللحية الشعثاء الذي يبتاع البسكويت في منتصف الليل مرتديًا خفّين. نقص التمرن ينتج عن الجداول اليومية الغريبة عادة سيئة أخرى، نقص التمرن، حيث يمكن أن يكون جسدك رشيقًا طوال حياتك لكن تفسد ساعات الجلوس الطويلة أمام الحاسوب ذلك في سنة أو سنتين، فيمكن أن يسبب هذا مشاكل قلبية، فتجد نفسك تتعرّق أكثر من الإنسان العادي بعد الجلوس من مشية خفيفة لمدة خمس دقايق، فتكون قد عوّدت جسدك على عدم التمرن والحركة. والمعلومة الصادمة هي أن هذا شائع بين المستقلين، الذي قد يعرضون أنفسهم لخطر أكبر من أمراض القلب والأوعية الدموية إذا ظلوا ملتصقين بالحاسوب، أغلبنا غير معتاد على التمرن في المنزل، بل يرونه نشاطًا غير منزلي، فيتهمون العمل المكتبي بتسبيب المشاكل الصحية بساعات عمله الطويلة، بينما يرتكبون نفس الخطأ في عملهم المستقل. الإجهاد النفسي هذه مشكلة أقل شيوعًا بين المستقلين إلا أن هذا ليس مؤشرًا إيجابيًا، فالسبب هو بيئة العمل الغريبة التي تسمح لك باستخدام فيس بوك أو Reddit أو أي مصدر تشتيت تختاره وتضيع وقتك به بعيدًا عن الضغط، فكأننا نستبدل مشكلة بأخرى. لكن تجنب الإجهاد العقلي أو الإنهاك أكثر من مسألة مصادر تشتيت، فيمكن للبعض قضاء أيام على مشروع واحد دفعة واحدة باستثناء بعض الاستراحات القصيرة، والبقاء مستيقظين طيلة بعض الليالي، مؤدين بأنفسهم إلى كارثة. للمشكلة عدة تجليات، فصاحبنا مثلًا يعاني من قلة الإنتباه للتفاصيل، قد تعاني أنت من نسيان مواعيدك النهائية، أو شيء مشابه، والفظيع في الإجهاد العقلي هو استمراره لفترة دون أن يُلاحَظ إلا عندما يكون قد نال من أدائنا. يقود هذا إلى نقطة سيتم تكرارها في أقسام المقال التالية: أفضل وسيلة للتعامل مع هذه المشاكل هي الإجراءات الوقائية منها، وسنتحدث الآن عن كيفية تطبيقها. كيفية التعامل مع هذه المشاكل التعامل مع العزلة كمستقلين، فإن أبسط طريقة للتخلص من العزلة هي إيجاد محيط عمل تعاوني، من المحتمل أن هذا الاقتراح قد خطر لك إذا كنت تعمل كمستقل منذ مدة، لنناقش إذًا بعض الحلول الأخرى. تزويد جدول عملك بالمكافآت لنفسك فكرة جيدة، يمكنك وضع موعد محدد لك لأخذ راحة وقضاء بعض الوقت مع أصدقائك بعد أن تنجز قدرًا جيدًا من مشروعك، هل أنهيت مشروعك خلال المدة المطلوبة، لم لا تتناول العشاء مع أصدقائك إذًا؟ قد يبدو نهجًا آليًا، لكن قد تكافئ نفسك بطريقة مختلفة، كالانضمام إلى دورة لليوغا أو دروس رقص، ما يقودنا إلى القسم التالي. التعامل مع نقص التمرن يمكنك تبني حلول في غاية الفعالية حيث تحل مشكلتين في النفس الوقت، كالانضمام إلى تمارين جماعية حيث يحل لك مشكلتين سبق لنا ذكرهما: العزلة، والنقص التمرن. في حالة صديقنا الكاتب، فإنه يأخذ دروسًا في الرقص، لذا علاوة على مقابلته لأشخاص جدد وإعادة جسمه لرشاقته، فإنه يكسب مهارة جديدة، أليس انتصارًا ساحقًا؟ النادي الرياضي خيار وارد، لكن إذا لم تكن من محبيه فهناك العديد من التمارين اليومية التي يمكنك القيام بها في المنزل بقليل من الاستثمار للبدء، مثل P90X، أو Insanity، أو DDP Yoga. التعامل مع الإجهاد العقلي وها قد وصلنا إلى مشكلتنا الأخيرة، الإجهاد العقلي، والمقال سيختصرها عليك ليتجنب إجهادك ولا يتسبب بها. أفضل وسيلة للتعامل مع هذه المشكلة هو التقليل من حدوثها قدر الإمكان، ستواجه دومًا كمستقل مواعيد نهائية مباغتة تستنزف قواك العقلية، لكن يمكن احتواء الضغط الناتج بتنظيم عبء العمل، وهذه بعض النصائح لمجابهة الإجهاد: حاول الالتزام بجدول حتى لو كان غير رسمي، إذ سيساعدك في تقدير مدة التي تلزم كل مشروع. ارفض المواعيد النهائية اللامعقولة، فلن يستفيد أحد من ضغطك على نفسك بالعمل بلا مغزى. نفّس عن نفسك بطريقتك المفضلة سواء كانت الطبخ، أو تناول الطعام في الخارج، أو الخروج مع الأصدقاء، أو لعب لعبة فيديو جديدة. خاتمة المشاكل السابق ذكرها من عزلة ونقص التمرّن والإجهاد العقلي ليس مما يجب التغاضي عنه، وإلا انحرفت بحياتك عن الطريق السوي وضرّت صحتك على المدى البعيد. الوقاية هي النهج الأساسي لمجابهة هذه المشاكل والتخلص منها إلى الأبد، لنراجع إذًا معًا خلاصة الحلول لها: كرّس وقتًا لأصدقائك وقابل أناسًا جدد. اجعل أسلوب حياتك أكثر حيوية واختر أي تمرين تفضله، طالما أنه يبعدك عن الكرسي. ابقِ حياتك الوظيفية مرتبة ومارس هواياتك المفضلة. ما المشكلة التي تعتبرها الأكبر حول العمل في المنزل؟ شاركنا تجربتك في تعليق في الأسفل! ترجمة -وبتصرف- للمقال How to Work From Home (And Stay Physically and Mentally Healthy) لصاحبه Alexander Cordova1 نقطة
-
إن مفهوم العمل الحر بصورته التي تصف عمل الفرد لصالح جهة أو عدة جهات في الوقت نفسه دون ارتباط وظيفي بينه وبينها قديمٌ قِدم وجود الإنسان نفسه، لكننا سنشير في هذا الكتاب إلى العمل الحر بمفهومه المستحدث، أي العمل الحر وعن بعد في نفس الوقت باستخدام الإنترنت لتقديم خدمات لعملاء يحتاجونها بمقابل مادي. وقد تبلور هذا المفهوم إلى شكله الحالي بعد التطور الذي حدث في تقنيات الاتصالات في العشرين عامًا الأخيرة على وجه الخصوص، بحيث نستطيع الآن إدارة شركات كاملة دون أن يكون للشركة مقر على الأرض، ولا مكتب يحضر إليه الموظفون كل يوم، بل كل موظف يعمل من المكان المناسب له سواء في بيته أو مكتبه الخاص أو غير ذلك، في نفس الدولة التي يعمل فيها بقية زملاؤه أو فيها مقر الشركة أو من دولة أخرى! وربما لا يصلح هذا النمط في الشركات التي تحتاج تواجدًا حقيقيًا على الأرض في مصانع أو منشآت تبيع منتجات حقيقية ملموسة، لكن سوق الخدمات التي يمكن تقديمها عن بعد قد شمل منتجات وخدمات كثيرة في العقدين الماضيين مثل الترجمة والسكرتارية وإدخال البيانات والمحاسبة والاستشارات المحاسبية والقانونية والتصميم والبرمجة وغيرها مما لا يحتاج تواجد العامل في مقر العمل أو الشركة. فلم يعد العامل في مثل تلك المجالات مضطرًا إلى الذهاب كل يوم إلى مقر الشركة، ولم تعد الشركة في حاجة إلى إنفاق تلك النفقات التي تلزمه من إيجار ونفقات تشغيلية عالية وغير ذلك، رغم سريان منافعه الوظيفية كموظف عامل في شركة كما هي إن كان يعمل عن بعد بشكل منتظم. وعليه فقد انتشر نمط العمل المنتظم عن بعد بشكل عام، والعمل الحر عن بعد بشكل خاص بشكل متزايد في الأعوام الأخيرة على مستوى العالم، ثم دخل رويدًا إلى العالم العربي مؤخرًا بسبب الحاجة إليه وملاءمته للتغيرات التي طرأت على سوق العمل في العقد الماضي، إضافة إلى نزعة الشركات لتقليل التكاليف. لكن رغم هذا الانتشار فإنه لا يزال مبهم التفاصيل على من يرغب بتبنيه وتغيير نمط عمله، كما نلاحظ العديد من الأخطاء عند من يدخل هذا المجال إذ يشيع الخلط بينه كعمل حر (مستقل) وبين العمل عن بعد. وفي هذا المقال سننظر في ثقافة العمل الحر من هذا المنظور مع بيان لواقع العالم العربي فيما يتعلق بالعمل فيه من المحاسن والتحديات التي قد يواجهها المستقل. تعريف العمل الحر قلنا قبل قليل أن العمل الحر في مفهومه اللغوي ليس بالجديد على البشرية، فهو أي عمل لا يرتبط بوظيفة لها منافعها من التأمينات والإجازات والبدلات وغير ذلك من المتعارف عليه في وظائف الشركات في القطاعات العامة والخاصة والأهلية وغيرها، وعلى ذلك فإن أصحاب الحرف اليدوية من النجارين والحدادين والميكانيكيين وغيرهم يعملون بشكل حر إذ لا يرتبطون في الغالب بوظيفة لها دوام مستقر. وحسب موقع BusinessDictionary فإن العمل الحر هو العمل بنظام التعاقد لصالح مجموعة متنوعة من الشركات بدلًا من العمل كموظف في شركة واحدة. وعليه فإن العامل المستقل أو الحر (freelancer) يكون عاملًا لحسابه الخاص، ولديه حرية اختيار المشاريع التي يريد العمل عليها، والشركات التي يرغب في العمل معها. أما المفهوم الاصطلاحي المنتشر في السنوات الأخيرة فإنه يشير إلى العاملين في الأعمال التي يمكن إنجازها عن بعد، مثل البرمجة والتصميم والكتابة والترجمة والاستشارات الإدارية وغيرها، ويكون ذلك العمل وفقًا لمقدار معين من المهام التي ينتهي العقد عند إنجازها، سواء أنجزها المستقل في يوم أو في شهر أو غير ذلك مما يكون عليه العقد بين المستقل وصاحب المشروع، ولعل أكثر مهنة متعارف عليها في العمل الحر هي الكتابة إذ هي أقل الأعمال التي تتطلب مهارات وأدوات معقدة، على عكس البرمجة والتصميم ثلاثي الأبعاد مثلًا. وجاء انتشار العمل الحر في سياق انتشار العديد من المفاهيم والمصطلحات الأخرى مثل: اقتصاد العربة (Gig Economy)، وهو نظام لسوق يعتمد على العقود المؤقتة سواءً في الواقع أو عبر الإنترنت، مثل العاملين عبر المنصات الإلكترونية والعمال الذين يقدمون خدماتهم عند الاتصال بهم وغير ذلك، وأشهر الأمثلة على ذلك المفهوم هم السائقون في شركة أوبر الذين يقدمون خدمات التوصيل لزبائن الشركة عند الطلب. ورغم انتشار العمل الحر على نطاق واسع في الدول الغربية تحديدًا إلا أننا لم نقف على إحصاءات دقيقة في شأنه على مستوى العالم، إذ تتعلق أغلب التقارير والإحصاءات الموجودة بانتشاره داخل الولايات المتحدة الأمريكية فقط، فقد كشفت إحدى تلك الدراسات مثلًا أن 40% من القوى العاملة الأمريكية ستعمل بنظام العمل الحر كمستقلين أو موظفين بشكل مؤقت بحلول عام 2020، في حين أن حجم مساهمة العمل الحر في الاقتصاد الأمريكي بلغ 1 تريليون دولار في عام 2019 [1]. العمل الحر والعمل عن بعد زاد التوجه إلى العمل عن بعد بشكل عام والعمل الحر بشكل خاص مع انتشار ثقافة العمل من المنازل بسبب التقنيات التي تتيح ذلك، وربما يكون من اللائق هنا أن تميز بين المفهومين بشكل واضح قبل اختيار النوع الذي يناسبك. فالعمل عن بُعد هو إتمام مهام العمل خارج مقر الشركة بشكل عام، فقد يُسمح لبعض الموظفين بالعمل خارج المقر لبضعة أيام في الأسبوع ثم داخل مقر الشركة بقية الأيام، والبعض يعمل عن بعد متى شاء، ويمكن بيان ذلك في أربعة محاور: العمل من مقر الشركة مع وجود خيار العمل من المنزل: تلك شركات لديها مكتب فعليّ أو ربما أكثر من مكتب، لكنها تعطي أفراد فريقها خيار العمل من المنزل لمدة يوم واحد في الأسبوع أو أكثر. فريق يعمل عن بعد ولكن في نطاق زمني واحد: في هذا النموذج، لا يُتوقّع من أفراد الفريق الذهاب إلى مقر العمل (إن وُجِد) لأنهم يعملون من منازلهم (لا يُشترط وجود مكتب فعليّ). فريق أفراده من دول مختلفة وفي مناطق زمنية متنوِّعة: وهي خطوة أكثر تقدمًا للعمل عن بُعد لوجود أفراد لهم مناطق زمنية مختلفة. يتميز هذا النموذج بأنه غير متزامن، مما يجعل مسألة التعاون فيه أكثر حيوية، فأفراد الفريق لديهم ساعات عمل قليلة متداخلة مع بعضهم بعضًا، فيحتاج هذا النموذج إلى نظام لجعل التواصل والتعاون فيه أكثر فاعلية. فريق عمل موزَّع في دول مختلفة مع وجود بعض الأفراد كثيري السفر: يعد هذا النموذج هو الأكثر تطورًا؛ فأفراد الفريق يعملون من دول مختلفة تمامًا، بالإضافة إلى أن بعضهم يسافرون ويتنقَّلون بانتظام من منطقة زمنية إلى أخرى. أما العمل الحر أو المستقل في المقابل في معناه الواسع يضم جميع الأعمال الحرة التي يعمل فيها الشخص دون ارتباطه بعقد دائم مع صاحب العمل، حيث يقوم بأعمال محددة خلال فترة قصيرة معلومة مقابل أجر معين، وبهذا المنطق فإن الطبيب والمحامي وغيرهم ممن يعملون بشكل مستقل في عيادة أو مكتب خاص يمكن النظر إلى أعمالهم على أنها أعمال حرة. وتختلف مدة المشاريع التي يتم العمل عليها في مجال العمل الحر بين يوم واحد أو حتى بضعة ساعات، وحتى عام أو أكثر. موازنة بين العمل الحر والعمل التقليدي أول ما يتبادر لذهن القارئ حين يسمع عن العمل الحر هو موازنته مع العمل الوظيفي أو التقليدي، وسنشرح في الجدول التالي الفروقات الجوهرية بين العمل التقليدي والعمل المستقل أو الحر، وكذلك العمل عن بعد. العمل التقليدي العمل الحر العمل عن بعد مدة العقد ارتباط بعقد عمل طويل الأمد ارتباط قصير الأمد ارتباط بعقد عمل طويل الأمد التدريب المهني احتمال وجود تدريب التحفيز والعمل بشكل ذاتي احتمال وجود تدريب بيئة العمل العمل ضمن بيئة عمل متكاملة احتمال عدم وجود زملاء عمل العمل ضمن بيئة عمل لكنها عن بعد وضعيفة اجتماعياً العائد المادي عائد منتظم عائد متقلب غير منتظم عائد منتظم ضريبة الدخل دفع ضريبة دخل عدم وجود ضريبة دخل في الغالب عدم وجود ضريبة دخل في الغالب (حسب قوانين الدولة) مواعيد العمل دوام روتيني بمكان عمل واحد حرية اختيار مكان وزمان العمل دوام روتيني مع مرونة باختيار مكان العمل table { width: 100%; } thead { vertical-align: middle; text-align: center; } td, th { border: 1px solid #dddddd; text-align: right; padding: 8px; text-align: inherit; } tr:nth-child(even) { background-color: #dddddd; } للعمل التقليدي مزاياه وتحدياته وللعمل الحر أيضًا تحدياته ومزاياه المختلفة، ومن ثم فلا يمكن استبدال جميع الأعمال التقليدية بعمل عن بعد، والعكس بالعكس أيضًا. على سبيل المثال، لا يمكن لموظف الاستقبال أن يعمل عن بعد أو بشكل حر، ذلك أن عمله مرتبط بمكان عمل معين وساعات معينة أيضًا وبالتالي لا يستطيع الحصول على تلك المرونة التي يتميز بها العمل الحر في اختيار مكان وزمان العمل. حاجة الوطن العربي للعمل الحر تأخر العالم العربي عن اللحاق بركب العمل الحر بسبب العديد من العوامل مثل تدني جودة الإنترنت وغلاء الخدمة في بعض البلاد، إضافة إلى قلة الوعي بالعلوم والمجالات التقنية والتي تُعد أساس للعمل الحر في معظم مجالاته مثل البرمجة وغيرها. لكن في الأيام الأخيرة ظهرت متغيرات جديدة على مستوى العالم دفعت كثيرًا من العاملين والشركات على حد سواء إلى تغيير نمط تنفيذ أعمالهم بشكل مفاجئ، فظهور فيروس كورونا المستجد (CoVID 19) مثلًا دفع كثيرًا من العاملين للاتجاه للعمل عن بعد في نفس وظائفهم لتعذر ذهابهم إلى مقار أعمالهم، وشمل ذلك قطاعات كثيرة وصلت إلى المدارس والحكومات نفسها، وكذلك دفعت بالعديد من العاملين الذين فقدوا وظائفهم إلى الاتجاه إلى العمل الحر كأفضل حل ممكن خلال هذه الفترة نظرًا لتطبيق الكثير من البلدان تقييدًا على حركة الناس عمومًا وفرض حجر على المقيمين فيها للحد من إنتشار الوباء، وفي الحقيقة يُعد العمل الحر ضرورة ملحّة هذه الأيام، وسنفصِّل بعض الأسباب التي نرى بأنها تشكّل أسبابًا جوهرية للانتقال إلى اقتصاد العمل الحر في ظل الظروف الراهنة، غير هادفين إلى التقليد أو المحاكاة وإنما إلى الإرشاد لاقتناص الفرص. 1- زيادة معدلات البطالة لا يخفى على المتابع لحال الدول العربية خاصة وباقي دول العالم بشكل عام أن معدلات البطالة قد زادت إلى معدلات كبيرة، ففي دولنا العربية وصلت معدلات البطالة إلى 10.3% من إجمالي السكان حسب إحصائيات البنك الدولي لعام 2019، في حين أن معدلات البطالة العالمية تشكل 5.4% من إجمالي السكان. ولا شك أن انعدام فرص العمل يعني ضرورة الانتقال إلى بدائل مختلفة تستهدف سوقًا آخر-ربما أكبر من السوق المحلية في حالة العمل الحر عن بعد، والتوجه لسوق أكبر يعني وجود فرص عمل أكبر ومن ثم إمكانية الحصول على عائد أفضل. 2- محدودية مصادر الدخل تستطيع أن تلاحظ وجود العديد من القيود على الفرص الوظيفية بسبب الشروط التي قد تكون مجحفة من جانب أصحاب العمل من ناحية، وبسبب غياب الكفاءات والكوادر المحلية المطلوبة لتلك الوظائف من ناحية أخرى، ويظهر عوار تلك الشروط بوجود نسبة بطالة كبيرة، فتقل فرص العمل المتاحة، ومن ثم يرضى العامل بأجر أقل من الأجر المعتاد لكسب الفرصة الوظيفية، بينما في العمل المستقل الأمر مختلف. فبادئ ذي بدء، من المعروف والمشاهد أن العمل الحر يزيد من دخل المرء إن كان يعمل في وظيفة أخرى تقليدية مما يعني أنه يستطيع الادخار من دخله أو استثماره في تجارة أو دراسة أو غير ذلك، إضافة إلى ذلك، فإن العمل الحر الذي يكون عن بعد، كما في أعمال مثل الكتابة والترجمة والبرمجة وغيرها مما لا يحتاج سوى حاسوب واتصال بالانترنت في أقل حالاته، يكون دخله أفضل بكثير، وقد يزيد على الدخل من الوظيفة التقليدية إن كان العامل مجتهدًا فيه وجادًا وحريصًا على التسويق لنفسه وكسب المزيد من العملاء. أما إن كنت تعمل بشكل حر مع عمل ثابت بنفس الوقت ولم تستخدم عائد أحدهما لادخاره أو استثماره مباشرةً فاعلم أنك واقف في محلك لأنك يفوتك بعض الانضباط أو أن العمل الحر لا يناسب ظروفك لضيق وقتك أو ضعف مهاراتك في التخصص الذي اخترته، وحينها يكون الاعتماد على العمل الحر بتلك الصورة خيارًا غير موفق. 3- هدر في استغلال الموارد البشرية قد يكون لدى كثير من الشركات وظائف لا تحتاجها بدوام منتظم أو لا تؤثر على مركزها السوقي، والذي يحدث في الغالب أن الشركة توظف من يؤدي هذه المهمة التي تريدها الشركة مرة أو بضع مرات كل شهر مثلًا، فلا تستفيد منه بقية الشهر، فتجد نفسها مضطرة إلى تقليل الراتب الممنوح له، أو تُبقي على راتبه فتخسر هي في صورة أموال مهدرة. ففي مثل تلك الحالة تستطيع الشركة أن توظف الشخص في صورة تعاقد حر مقابل خدماته فقط وليس مقابل الوقت الذي يمضيه في موقع العمل، وعليه سيكون العائد مجزيًا أكثر بالنسبة للموظف إذ وفر له عدة ساعات إضافية في اليوم أو الأسبوع يستطيع العمل فيها لصالح مكان آخر، وكذلك للشركة إذ وفرت موارد كانت تهدر في إبقاء موظف دون الاستفادة منه إلا قليلًا. 4- أسعار تنافسية موازنةً مع المستقلين الآخرين حول العالم إن الأسعار التي يطلبها العامل المستقل الذي يعمل من بلدان العالم الثالث بشكل عام أقل بكثير من أسعار المستقل الذي يعمل في البلدان الأخرى، وتُعدهذه النقطة بمثابة ميزة تنافسية له أمام أقرانه ممن يعملون في أماكن ترتفع تكلفة العيش فيها إذ سيكون الأجر الأقل مجزيًا لتغطية النفقات وتحقيق ربح أيضًا. أما إن كان يتقن لغة أجنبية للتواصل مع العملاء الأجانب فهذا يعني دخوله لسوق عمل أكبر وتعرضه لشرائح مختلفة من العملاء، ولا يشترط في هذه الحالة ولا التي في الفقرة السابقة أن يطلب المستقل أجرًا أقل من نظرائه على إطلاق المسألة، بل إن رأى أن عمله يستحق زيادة في الأجر أو إن زادت تكاليفه أو رأى إضافة خدمة جديدة أو أنه أراد رفع أجره لمجرد زيادة الدخل فلا حرج عليه، خاصة إن أثبت أحقيته بهذا المال في صورة عمل عالي الجودة وتعامل أفضل مع العملاء. 5- التوظيف وفق الكفاءة والخبرة بعيدًا عن الوساطة أو الشخصنة يُبنى التوظيف بشكل أساسي على المقابلة الشخصية وهي أحد الأساليب التي قد لا تكون عادلة في كل حالة لتوظيف شخص ما، سيما إن كان العمل لا يتطلب الكثير من المهارات الاجتماعية مثل القدرة على التعبير عن الذات أو التواصل المباشر مع الأشخاص. والواقع المشاهد أن توظيف العاملين بالطرق التقليدية عن طريق المقابلات الشخصية يدخل فيه كثير من العوامل النفسية التي تفرض نفسها عند اتخاذ قرار توظيف شخص من عدمه. أما في طلبات التوظيف التي تتم عبر الإنترنت فقط فإن قاعدة "دع عملك يتكلم عنك" هي التي ستحكم عملية التوظيف، ولا بأس أن تُعقد مقابلة مع العامل بعد قضاء مدة اختبار تحددها الشركة أو يتفق الطرفان عليها باستخدام برامج التواصل المرئي أو الصوتي، لكن هذا يكون بعد أن يتعرف الطرفان على بعضهما ويريا إن كان من المناسب ضم العامل إلى قوة الشركة أم لا، حيث تُراجع السيرة الذاتية والأعمال السابقة، وبهذا تزيد فرص الأشخاص الذين لا يمتلكون مهارات اجتماعية كافية للنجاح في المقابلة رغم أن لديهم خبرات ومهارات مهنية كبيرة. وهذا لا يعني قطعًا أن شخصية المستقل أو مهاراته الاجتماعية لا تلعب أي دور في العمل في مجال العمل الحر، لكننا قصدنا أنها لا تؤثر من نفس جهة تأثيرها في الوظائف العادية. محاسن وتحديات العمل الحر يتمتع نمط العمل الحر بالعديد من المزايا بالنسبة للعامل نفسه، لكن يعاني العامل في الوقت نفسه من بعض التحديات التي يجب أخذها بعين الاعتبار قبل بدء العمل. محاسن العمل الحر تشكل مزايا العمل الحر حافزًا كبيرًا لدى للشخص للانتقال إليه، ويرتبط الحكم عليه غالبًا بالموازنة بينه وبين العمل التقليدي، لذا سنوازن النقاط التالية مع العمل التقليدي لبيان الفروقات الواضحة التي تميز العمل الحر عن نظيره العادي: 1- العمل في المجال الذي تفضله من أهم ميزات العمل الحر هي أنك في الغالب غير مضطر للعمل ضمن مجالات لا تحبها أو لا تفضل العمل بها، فاختيارك للعمل الحر يعني أنك ستقوم باختيار مجال عملك الذي تفضله، في حين أنك في العمل التقليدي قد تضطر للعمل في مجال لا تحبه لعدم وجود فرص عمل ملائمة بالنسبة لك، أو أن العائد الذي تقدمه غير مجزي. كذلك يستطيع الطلاب العمل بشكل حر أثناء فترة دراستهم أو إجازاتهم، أو يتخصصوا بالمجالات التي تزيد من فرصهم في الأعمال المناسبة للعمل الحر فيما بعد. 2- حافز للإبداع والتميز يفسح العمل الحر مساحة للإبداع بما أنك اخترته بنفسك لملاءمته لظروفك أو رغبتك في العمل فيه دون قيود من السوق المحلي أو نظام التوظيف السائد حسب العرض والطلب المحلي كذلك، ومن ثم فلا حد نظريًا لتميزك كل يوم بطرق وأساليب جديدة تبتدعها لتطوير خدماتك وعملك. 3- قلة رأس المال المطلوب لدخول السوق لا يخفى على أحد أن التجارة تحتاج إلى رأس مال للبدء ودخول السوق، ونفقات تغطي في أضعف حالاتها بنود تكاليف التشغيل من الإيجارات والمصاريف الإدارية والقانونية وغير ذلك، وقد يثبط هذا من يرغبون في العمل لقلة خبرتهم بهذه الأمور أو عدم امتلاكهم لرأس المال ذلك. وهنا يأتي العمل الحر عبر الانترنت ليحل هذه المشكلة، فالترجمة والبرمجة والمحاسبة والمساعدة الافتراضية والسكرتارية والتصميم والكتابة والتأليف وغيرها مما شابهها من الأعمال وما يلحق بها من وظائف إدارية لا تحتاج إلا إلى حاسوب واتصال بالانترنت في الغالب. وبشكل عام فإن تكلفة دخول سوق العمل الحر هنا تكاد لا تذكر بالموازنة مع تكاليف التجارة الحقيقية على الأرض، لكن لا تظن أنك لن تدفع شيئًا إلى الأبد! فأنت لن تعمل من السرير مثلًا -وإن كنت ستجد نفسك تعمل منه بين الحين والآخر من باب التغيير-، بل ستحتاج إلى مكتب وكرسي للعمل، وإن استطعت تخصيص غرفة في بيتك فهو خير وأفضل، وإن استطعت استئجار مكتب خاص أو مكتب في مساحة عمل مشتركة فهو أفضل من سابقه. كما ستحتاج إلى شراء البرامج ونظم التشغيل التي ستعمل عليها إن كانت غير مجانية مثل برمجيات ميكروسوفت وبرامج أدوبي وغيرها. 4- تحقيق دخل أعلى لا شك أن العمل الحر يزيد من دخلك إن كان لديك وظيفة أخرى، وربما يحقق لك عائدًا يغنيك عن هذه الوظيفة بحيث تستطيع الاعتماد عليه كمصدر وحيد للدخل. ربما يكون أحد أسباب ذلك هو عدم تقيدك بعقد عمل مع شركة واحدة تلزمك ببنود محددة وتنهاك عن العمل في مشاريع جانبية أو لصالح شركات منافسة لها حتى لو كان لديك وقت وطاقة. والواقع المشاهد أن عديدًا من العاملين المستقلين يرفضون التوظيف لقيود الشركة على العامل فيها، بينما تكون له حرية العمل مع أكثر من شركة في نفس الوقت بنظام العمل الحر، ومن ثم يحقق دخلًا أعلى مع الحفاظ على نمط الحياة التي تناسب ظروفه. 5- ربح غير محدود نظريًا، لا يوجد حد للأرباح التي يمكنك تحقيقها في العمل الحر على عكس الراتب شبه الثابت في الوظيفة العادية، بل إن اجتهدت واستثمرت في تعليم نفسك وتطوير مهاراتك ستحقق عائدات أكبر بكثير. وستجد الكثير من الفرص والحالات التي يمكن أن تحقق فيها دخلًا عاليًا جدًا مع زيادة الخبرة وانتشار سمعتك أو سمعة علامتك التجارية وهويتك ومشاريعك التي عملتها وحجم سوقك المستهدف وحاجته إلى مثل خدماتك، فأبواب زيادة الأرباح مفتوحة دائمًا في العمل الحر على عكس العمل التقليدي. 6- اختزال وقت تحقيق النجاح ورؤية ثمرته يرتبط النجاح في العمل التقليدي بانتظار الترقية أو الانتقال لشركة أفضل برواتب أعلى وميزات أكبر، وغالبًا ستنتظر لتعبر الخط الزمني التقليدي الذي يجب أن يعبّر عن مدى الخبرات التي اكتسبتها خلال فترة معينة، إلا إن أحرزت قفزة نوعية جعلتك تتجاوز ذلك الخط. كذلك فإن بعض الأعمال التقليدية تكون روتينية بحيث لا يتطور العامل فيها ولا يكتسب خبرة بطول المدة التي قضاها فيها لثبات عواملها، فالعمل الروتيني على هذا الأساس لا يقاس بالسنوات، فلا نقول هنا أن لديك خبرة 10 سنوات بل خبرة سنة مثلًا مكررة 10 مرات، وذلك في مجال العمل الفني نفسه، وإلا فإن خبرة أي إنسان تزيد بالعمر في الجوانب الحياتية والإنسانية فيما يتعلق بالتعامل مع الناس وفهم البيئة المحيطة، وعليه فمن المهم أن يُعلم أننا نقصد زيادة الخبرة الفنية في مجال العمل. أما العمل الحر في المجالات التقنية فيكون متقلبًا وسريع التغير، سواء إن كنا نقصد تغير العملاء وثقافاتهم أو تغير تقنيات وأدوات إنجاز العمل أو ربما تغير مجال العمل كليًا، وفي نفس الوقت لا يرتبط بأقدمية توظيف ولا درجات وظيفية كي تستطيع الانتقال إلى تخصص ما، ولا يرتبط كذلك بموقع محلي لا تستطيع تركه، بل تستطيع دراسة ما تشاء ومتابعة ذلك التخصص والعمل فيه مع عملاء محليين ودوليين بدون أدنى فرق إلا في طرق تحويل قيمة تلك الأعمال ربما. وعليه فإن هذا يضمن لك انتشارًا أوسع في سوق أكبر، مما يعني زيادة فرص التعامل مع عملاء جدد ومن ثم زيادة دخلك. 7- المرونة قد تفتقد كثير من الوظائف التقليدية إلى بعض المرونة بسبب اعتماد المؤسسات الموفرة لتلك الوظائف على طرق مجربة أو محسوبة ضمن عوامل أخرى تكوّن فيما بينها منظومة تحقق الأهداف التي تريدها الشركة، وذلك معلوم ومشاهد في الوظائف الحكومية أو المالية أو في خطوط الإنتاج الصناعية وغير ذلك، إذ لا يستطيع موظف أن يغير من طريقة سير العمل فيها من تلقاء نفسه. بل قد لا تستطيع الوحدة التي يعمل الموظف فيها أن تغير شيئًا في أسلوب سير العمل حتى لو أرادت، إذ سيلحق ذلك تغيير في فروع الشركة الأخرى أو تغييرًا في سياسات مالية وتنفيذية وبرمجية على مستوى المؤسسة كلها، أو قد يعني أحيانًا ميزانية ضخمة لتغيير معدات وماكينات من أجل اتباع ذلك الأسلوب الجديد، وإن لم تكن ثمة حاجة اقتصادية ملحة لذلك فلن يحدث تغيير، وهذا ليس سيئًا في تلك الحالات بل هو المطلوب أحيانًا كثيرة لتقليل النفقات وللتركيز على الإنتاج. لكن قد يكون هذا النمط مملًا لبعض العاملين، وفي هذا دافع لهم لتجربة العمل الحر، إذ تكون لديهم حرية في تغيير نمط العمل والتقنيات التي يعملون بها، والأدوات التي يستخدمونها، والأماكن التي يعملون فيها، أو حتى تغيير مجال العمل بالكلية والانتقال إلى مجال جديد. ولعل أهم ميزة للعمل الحر هو أنك غير مقيد بالمهام المتكررة في البيئات التقليدية أو البيروقراطية الوظيفية، والتي تنفذ فيها مهامًا بعينها تأخذ عليها أجرك، فإن عملت مهامًا خارج نطاق ذلك المسمى وذلك العقد فليس لك شيء في الغالب، بل قد تُمنع من تنفيذ مهمة بأسلوبك الخاص الذي يختلف عن أسلوب الشركة، أو قد تُمنع من الذهاب لبيتك رغم إنهاء مهام يومك، أو تُمنع من البقاء ساعات إضافية ولا تُعطى أجرًا عليها إن قضيتها دون أن يُطلب منك، وهذا معلوم مشاهد في حال الشركات والمؤسسات التقليدية ولأسباب منطقية وصحيحة في حال تلك المؤسسات. أما في العمل الحر على الإنترنت فلا توجد هذه القيود، فقد تنهي عملك في أول 10% من وقت المشروع، وقد تعمل على عدة مشاريع لعدة عملاء في نفس الوقت، وقد تخرج من بيتك أو محل عملك إلى قضاء حاجات لك في منتصف النهار -السوق، الرياضة، المشفى …- ثم تعود لتكمل عملك دون مشاكل، بل قد تمضي أيامًا لا تنفذ فيها مهامًا على الحقيقة وإنما تقضيها في مراجعة وتنقيح أو تخطيط لباقي المشروع. كذلك فإن أرضيتك الصلبة التي تقف عليها حين تعرض نفسك للسوق هي أعمالك السابقة، فإن كنت مبرمجًا وتعلمت مهارة مثل التعليق الصوتي أو الترجمة أو التصميم ثلاثي الأبعاد مثلًا، ثم عرضت نفسك على أنك معلق صوتي، وقدمت معرض أعمال به نماذج لذلك التعليق الصوتي مع باقات أسعار تناسبك وتناسب السوق فلا مانع هنا أن تُطلب منك هذه الخدمات، فالفيصل هو أعمالك السابقة وسمعتك. وهكذا ترى أنك تحصل على كثير من المرونة وتغيير نمط العمل إن كنت ممن لا يتحملون السير على وتيرة واحدة أو العمل المتكرر أو المقيد بمكان ووقت محدد يخالف ظروفك. 8- حرية اختيار روتين العمل ربما تكون هذه النقطة امتدادًا للنقطة السابقة، إذ يرتبط العمل التقليدي غالبًا بروتين تحدده المؤسسة أو الشركة ليخدم مصالحها وأهدافها، فقد يعمل الموظف في نوبات تتغير كل أسبوع، أو يكون موقع العمل في الصحراء أو في أعالي البحار كما في صناعات التعدين مثلًا فيكون على الموظف السفر إلى الموقع في أوقات محكمة تحددها الشركة سلفًا وفق ما يقتضيه نظام العمل. كذلك قد يكون ذلك الروتين طارئًا ولا وقت محدد له، كما في حالة الأطباء والمؤسسات العسكرية والحماية المدنية وغيرها، وهذا كله قد يسبب إرهاقًا جسديًا ونفسيًا للعديد من العاملين في تلك القطاعات لكنهم لا يملكون تغيير شيء من ذلك. وقد رأيت بنفسي بعض ذلك إذ عملت في شركة لها مواقع في الصحراء فلا تستطيع الوصول إليها إلا بوسيلة انتقال لها مواعيد محددة، وكذلك لي صديق يعمل مهندسًا في مصنع تتغير نوباته كل أسبوع، فهو يعمل في أول النهار أسبوعًا ثم في الأسبوع التالي يعمل وسط النهار ثم آخره، وهكذا دواليك. ولما جربت مثل هذا النمط بنفسي في مصنع مشابه لم أتحمل أكثر من أسبوع واحد، فما إن كنت أضبط روتيني اليومي حتى يتغير في الأسبوع الذي يليه! وهنا يكون العمل الحر خيارًا مناسبًا لأولئك الذين يفضلون نمط عمل يخالف ما تحدده المؤسسة التي يعملون فيها، فقد يُجبر المرء على البقاء في المنزل لرعاية أهله أو يضطر للعمل ليلًا بسبب ظروف قاهرة مثلًا، أو قد يسأم السفر إلى مواقع العمل البعيدة أو الاستدعاءات الطارئة، هذا فضلًا عمن يفضلون دخول سوق العمل على الانترنت لزيادة الدخل ولأنهم يحبون ذلك، وهكذا. 12- استهداف مجموعة أوسع من العملاء قد ذكرنا هذه النقطة لمامًا قبل قليل وربما نفصلها قليلًا ها هنا، فالعمل التقليدي كما قلنا مرتبط بالسوق المحلية، فأنت مقيد بموقع شركتك أو مؤسستك التي تعمل فيها، وشركتك مقيدة بحيز جغرافي تستطيع الوصول إليه وخدمته بما لا يسبب خسائر عليها في زيادة التكاليف وصعوبة التواصل، وعليه فإن لم يكن ثمة سوق حولك يطلب خدمتك التي تعرضها فإن تجارتك ستبور ولن تجد لتخصصك سوقًا تعمل فيه. أما سوقك على الإنترنت فإنه يتسع ليتخطى الحواجز الجغرافية بسهولة، لكن هذا لا يعني أن العالم بأسره سيطلب خدمتك، وإنما نقصد زيادة تعرضك لشرائح العملاء على اختلاف أماكن إقاماتهم، فإن احتمال أن يطلب منك ياباني مثلًا ترجمة من الإنجليزية إلى الأردية ضئيل جدًا إن كنت تعمل في الترجمة بين هاتين اللغتين مثلًا، وستجد أن أغلب العملاء سيأتونك من الدول التي تتحدث بإحدى هاتين اللغتين، وهكذا. فالمنطق يحكم هنا مدى انتشار خدمتك، وحجم السوق الذي يطلب تلك الخدمة يتحكم كذلك في حجم الطلبات التي ستأتيك، فخدمات التصميم المرئي مثلًا سوقها أوسع من الترجمة، والبرمجة سوقها يدفع أجرًا أعلى للساعة، وإدارة المشاريع تدفع أعلى من البرمجة، وهكذا. وإجادتك للغة أجنبية يتحدث بها السوق الذي يطلب خدمتك يجعل من السهل عليك مضاعفة حجم ذلك السوق، فإن كنت مصممًا أو مبرمجًا وتنوي العمل على الانترنت فإن سوقك محدود بمن يطلب هذه الخدمة من العرب، فإن كنت تجيد الإنجليزية فقد فتحت على نفسك بابًا إلى السوق العالمية، ببساطة لأنك تجيد لغة ذلك السوق! تجدر الإشارة هنا إلى أن تعاملاتك تلك مع العملاء ستبني بينك وبينهم جسورًا للتواصل وبناء العلاقات، ويجب أن تستفيد من تلك العلاقات لبناء شبكة معارف واسعة، ومن المعلوم أن زيادة الأرباح لا تتعلق فقط بجودة العمل، بل بمدى معرفة السوق بمن ينفذ ذلك العمل، فإن كنت فريد زمانك في صنعتك ولا يعرف بك أحد فلن تبيع شيئًا، فأكثر الرابحين في السوق هم المعروفون من أصحاب الجودة والتميز، وفي أحيان كثيرة يكون أكثر الرابحين هم المشهورون فقط، حتى إذا عرف السوق أحدًا يقدم نفس الخدمة بجودة أعلى انتقل إليه مباشرة. ولك في كبرى الشركات العالمية مثلًا، ألا ترى كيف يضعون علاماتهم التجارية أعلى البنايات الشاهقة وبأحجام عملاقة؟ إنهم يعلنون عن أنفسهم بأعلى صوت ممكن وفي كل مناسبة تصلح للإعلان، فلا يفكر العميل إلا فيهم حين يحتاج إلى من يحل مشكلته. تحديات العمل الحر يتغافل أغلب من يتكلم عن العمل الحر على الإنترنت عن مساوئ هذا النمط، إذ يذهب أغلب حديثهم إلى بيع منافعه من المرونة وزيادة الدخل وعدم الالتزام بزي ولا نظام محدد للعمل، في حين أن هذا النمط يحمل كثيرًا من التحديات التي قد تمنع فئات كثيرة من انتهاجه. 1- المنافسة الكبيرة قلنا أن من منافع العمل الحر هو تعرضك لسوق أكبر بكثير من سوقك المحلي، لكن هذا يأتي مع منافسة كبيرة جدًا كذلك، فإن كانت مدينتك فيها عشر أشخاص يقدمون نفس خدمتك، فإنك على الإنترنت ستكون بين مئات الآلاف منهم، وحينها يكون عليك التميز بشيء يقلل عدد منافسيك أمام العملاء، وإلا ستضطر إلى المنافسة على سعر الخدمة نفسها. فيمكنك تقديم خدمات ما بعد البيع للعميل، مثل إمكانية المراجعة والتعديل على العمل، أو إنجاز العمل في وقت أقل من المنافسين، أو تقديم باقات عروض أكثر للعميل، وغير هذا مما يقلل عدد المنافسين لك ممن يحذو حذوك. واعلم أنك ستجد منافسة شرسة على سعر الخدمة كلما سهل تنفيذها مثل إدخال البيانات وكتابة محتوى الشبكات الاجتماعية مثلًا، بل حتى في المهام المتخصصة مثل البرمجة والتصميم ثلاثي الأبعاد وغير ذلك ستجد منافسة على الأسعار من بلدان مثل الهند وفيتنام وكثير من البلاد العربية بسبب انخفاض قيمة العملة المحلية أمام الدولار الأمريكي الذي يكون في الغالب هو المعتمد في معاملات هذا السوق. 2- صعوبة كسب أول عميل وتحديد سعر الخدمة تمثل معضلة الحصول على أول عميل مشكلة للذي يدخل هذا المجال لأول مرة بدون سابقة أعمال في ملفه أو معرض أعماله، وقد حدثني بعض من جربوا دخول العمل الحر أنهم واجهوا مشاكل في هذا الصدد جعلتهم يتراجعون عن دخول السوق بالكلية. فقد كانت معارض أعمالهم خاوية بالطبع، والذي حدث أنهم لسبب أو لآخر قرروا دخول مجال العمل الحر، فسجلوا حسابًا جديدًا على منصة مستقل أو خمسات وبدؤوا في تصفح المشاريع. وهذا من وجهة نظر تجارية يعد سذاجة، فكأنك تدخل سوقًا وترى العملاء يدورون على المتاجر يبحثون عن طلباتهم، فتأتي أنت من خلف أحد العملاء لتقول له أن لديك ما يطلب! ألا ترى أن هذا الموقف لو حدث معك في السوق لشعرت بريبة من ذلك الذي يعرض عليك هذه الخدمة؟ وأنت تراه واقفًا بشخصه دون متجر أو بضاعة أو علامة تجارية أو غير ذلك، والتي يقابلها سابقة الأعمال وشهادة العملاء هنا في العمل الحر. كذلك إن وضع هذا المستقل الجديد عرضًا على مشروع لتصميم موقع أو برمجته أو ترجمة مقالة أو وثيقة، فكيف يثمن قيمة خدمته؟ وما هي المعايير التي يجب أن يضعها في حساباته؟ 3- صعوبة سحب الأرباح وتحويل الأموال تعاني بعض الدول العربية من مشكلة حقيقة في تحويل الأرباح، إذ لا يمكن استخدام حساب باي بال فيها، وهو الوسيلة المتبعة بشكل واسع عبر العالم لتحويل الأرصدة والمبالغ المالية على مواقع الويب وخاصة منصات العمل الحر، وحتى إن تم تحويل المبالغ بطرق أخرى فإن العملية قد تستغرق وقتًا أطول، الأمر الذي يؤثر سلبًا على الشخص الذي يعتمد على العمل الحر كمصدر دخل أساسي. وسنذكر في المقال الثامن من هذه السلسلة بعض الطرق التي ثبت نجاحها -وقت نشر المقال- لكيفية الإدارة الناجحة للشؤون المالية. 4- حالات النصب والاحتيال العمل على الإنترنت يعني التعامل مع عملاء من مختلف أنحاء العالم، وأنت لا تعرف كل أولئك العملاء معرفة تضمن لك حقوقك، وعليه فهناك احتمال كبير لظهور حالات احتيال، أو امتناع من عميل عن دفع كامل المبلغ المستحق أو عن دفع آخر دفعة مثلًا وذلك بسبب غياب الثقة بين الطرفين، وفي هذه الحالات تُعد منصات العمل الحر خيارًا مناسبًا يضمن للمستقل الأمان المالي الذي يسعى إليه، والأمثلة على هذه المنصات في العالم العربي تشمل موقع مستقل وموقع خمسات، وفائدتها أنها تؤمّن لك مجتمعًا كاملًا من المستقلين والعملاء ومن ثم توفر عليك عناء البحث بمفردك عن عملائك، هذا من ناحية، وتضمن لك هي التزام العميل بدفع ثمن الخدمة التي تقدمها من ناحية أخرى. ويتمثل نموذج ربح هذه المنصات في اقتطاعها نسبة من قيمة العمل التي يحددها المستقل، وقد تصل إلى 20% من المبلغ المتفق عليه مقابل تقديم الخدمة أو المشروع بشكل آمن يضمن حقوق الطرفين، وقد تُنقص المنصة قيمة عمولتها منك مع عميل معين عند تجاوز حجم تعاملاتك معه قيمة معينة، هذا فضلًا عن تسهيل الإجراءات والأمور المالية بطريقة توفر الكثير من العناء بالنسبة للمستقل. 5- عدم الاستقرار وعدم وجود عائد منتظم أحد التحدياتالجوهرية في العمل الحر هي حالة عدم الاستقرار، فالمستقل لا يرتبط بوظيفة ثابتة، ويمكن في أي لحظة أن يبقى دون أي عمل بانتظار العميل القادم، وتؤثر حالة عدم الاستقرار هذه بشكل كبير على الشخص الذي يعتمد على العمل الحر كمصدر أساسي للدخل، شأنه في ذلك شأن أي عمل حر غير منتظم، وفي هذا ننصح باستغلال الوقت الذي لا يكون عندك طلبات من عملاء في تطوير نفسك في مجالك والتسويق على الإنترنت لعملك في حساباتك الاجتماعية أو موقعك، أو المتابعة مع عملائك السابقين برسائل تطمئن فيها على جودة العمل الذي سلمته لهم، أو تحسين معرض أعمالك وإضافة أعمالك الجديدة إليه التي شغلك تنفيذ العمل نفسه عن إضافتها. كذلك ستلاحظ عدم التوازن في طلبات العمل أو الخدمات، خاصة في بداية عملك في ذلك السوق، حيث سيكون هناك ضغط عمل في وقت معين وعدم وجود أي عميل في وقت آخر. ومن ثم لن يكون لديك أي دخل ثابت تستطيع الحصول عليه بشكل منتظم، الأمر الذي يؤدي إلى عدم قدرتك على الوفاء يالتزاماتك المالية خاصة في المراحل الأولى، لذا ننصح بالبدء في العمل الحر بشكل جانبي ما أمكنك ذلك إلى أن يصير دخلك من العمل الحر مجزيًا للانتقال إليه بشكل كامل. 7- عدم وجود مزايا وظيفية أو ضمان اجتماعي إن السبب الأول الذي يدفع الناس للوظائف الثابتة هي المنافع التي تأتي معها مثل الراتب التقاعدي والتأمينات والإجازة المرضية وغير ذلك، وهي من المغريات لأي موظف بلا ريب، في حين أن العمل الحر لا يتمتع بأي من تلك المزايا. بل أسوأ من ذلك، إن توقفت عن العمل فإن دخلك سيقف، فليس هناك إجازات مدفوعة الأجر مثلًا أو غير ذلك، وينبني على هذا أننا نحن الذين تقع على عاتقنا مسؤولية التفكير في دخل التقاعد ومتى يكون ذلك التقاعد، والتأمينات الصحية والطوارئ وغير ذلك، كما سنبين في المقال الثامن: الإدارة المالية في العمل الحر. 8- مسؤولية العمل الكبيرة إن كنت موظفًا في شركة أو مؤسسة ما فإنك ستحمل مجموعة محددة من المسؤوليات التي تقبض أجرك عليها، وستكون تلك المهام جزءًا من مهمات أكبر يتم تقسيمها على كافة أعضاء الفريق. أما في العمل الحر فأنت مضطر للعمل وحدك -على الأقل في البداية-، وعليه ستكون مسؤولية العمل كبيرة وتقع كلها على عاتقك، إذ أنك في هذه الحالة إما شركة من شخص واحد، أو مدير لشركة من عدة أشخاص إن كنت تدير فريقًا تحتك. 9- صعوبة إدارة الوقت بما أنك سيد نفسك في العمل الحر ، ومدير الشركة والمحاسب وعامل النظافة وأمين السر وفني الحواسيب وكل شيء، فستجد رأسك تنشغل بمهام كثيرة في كل يوم تزاحم تفكيرك كي ترى بأيها تبدأ، وقد تمر عليك أوقات يكثر فيها العملاء فتعاني فوق هذا من ضغط مواعيد التسليم، وكل هذا سببه سوء إدارة الوقت. ناهيك عن أنك بشر، وعملك هذا يجب ألا يستغرق كل يومك، فإن عندك شؤون بيتك وأهلك وحياتك الاجتماعية، وقد يؤدي سوء إدارة الوقت إلى تفضيلك العمل على ما سواه من أجل إنجازه خشية فقد الصفقة أو تشويه السمعة، ومن ثم قد تمر عليك أسابيع وربما شهور تنعزل فيها عن حياتك الاجتماعية، إن لم تفق سريعًا وتستدرك الأمر، وسنبين في المقال السادس: العناية بالصحة الجسدية والنفسية، كيفية إدارة ذلك الوقت بكفاءة 10- صعوبة صقل المهارات والحصول على الخبرة لا شك أن صقل المهارة يكون بكثرة الممارسة، ولهذا تجد صعوبة في تحديد منهجية العمل المثلى والمناسبة لك في البداية، ومن ثم تنفيذ مهامك في وقت أطول وبجهد أكبر. لكن كأي مهارة أو عمل آخر فإن الخبرة ستجد طريقها إليك مع كثرة إنجازك للأعمال، وستجد نفسك بعد عام أو أكثر أو ربما أقل، تنجز مهمة ما في نصف الوقت الذي كنت تنجزه فيها أول عملك كمستقل، وربما بنصف الجهد أيضًا. ويلزم هذه الخبرة تعلم مستمر وملاحظة لأسلوب العمل وتلافي الأخطاء التي تحدث فيه، فإن الخبرة لن تهبط عليك إذا قضيت س يومًا في العمل، بل حين تتعلمشيئًا جديدًا في كل يوم يزيدك مهارة وإتقانًا في عملك. 12- سهولة التخلف عن السوق بدون تعلم مستمر على عكس الصناعات المستقرة والمجالات التي لا تشهد تغيرًا في تنفيذها، فإن العمل على الإنترنت، بل الإنترنت نفسه في تغير دائم ومستمر بحيث يمكن القول أن طالب علوم الحاسوب إن درس تقنية ما في السنة الأولى فربما لن يعمل بها عند تخرجه لاحتمال تغير هذه التقنية أو صدور أخرى تستبدلها. فما العمل إذًا، وهل سنقضي أعمارنا في التعلم دون العمل؟ كلا، فأنت في العمل الحر تتعامل مع الخدمات نفسها التي يطلبها العملاء من تفسير وترجمة لوثائق أو تصميمًا وبرمجة لشركات ومؤسسات، أو استشارات إدارية أو نحو ذلك. فلا نقول أن التصميم هو تصميم مواقع فقط، وإلا فهي تقنية قد يأتي عليها يوم وتحل محلها خدمة تقدم تصميم المواقع ببضع نقرات -وهذا حاصل حقًا-، أو قد يأتي يوم تتحسن فيه الترجمة الآلية إلى أن تستبدل المترجمين، وهكذا، فما الحيلة في ذلك إذًا؟ يجب أن تنتبه جيدًا إلى المجال الذي تعمل فيه لتوجه تطوير نفسك بشكل سليم، فتعلم أن تصميم المواقع هو في ذاته تصميم لهوية الشركة نفسها التي تريد عرضها على العملاء، فتتعلم نظريات الألوان وتجربة الاستخدام وقابلية الاستخدام، وتتابع التوجه العام للأجهزة التي يتصفح منها المستخدمون موقع الشركة الطالبة للخدمة، حتى تعرف أي التقنيات التي يجب تعلمها لتنفيذ تلك الهوية. وكذلك في البرمجة مثلًا، فإن لغة البرمجة نفسها لا تزيد على مجرد أداة تنفذ بها عملك، فتصرف وقتك في النظر في توجه السوق الطالب لهذه الخدمة، سواء على مستوى العملاء أو مستخدمي خدماتهم، وتزيد حصيلتك المعرفية في الرياضيات والخوارزميات وأساليب حل المشاكل، لأنك كمبرمج إنما تحل مشكلة للعميل، والأسس الرياضية التي تنبني عليها تلك الحلول تكون أكثر ثباتًا وأقل تغيرًا من اللغات التي تتبنى تنفيذ الحل نفسه. واعلم أن السوق هنا لا يرحم المتخلفين عن الركب، فإن لم تخصص لنفسك برامج وجداول دورية للتعلم والتطوير فستجد غيرك ممن دخل السوق حديثًا بتقنياته الجديدة أو ممن يطور نفسه بشكل مستمر قد سبقوك إلى العملاء، وتبقى أنت بلا عملاء ولا دخل. 13- وهم المرونة المطلقة يقول كثير من العاملين بشكل حر على الإنترنت أن المرونة هي أهم ميزة للعمل الحر، لكنهم يقعون في فخ المرونة المطلقة إذ يعتقدون بأنهم حقًاأحرار في منهجية عملهم. والواقع يقول بعكس ذلك، فالمستقل، خاصة المبتدئ الذي عانى للحصول على أول عميل، لا يستطيع أن يرفض العملاء والطلبات الواردة إليهومن ثم فإنه يصبح مقيّدًا بمواعيد تسليم تكاد لا تنتهي وسيكون عليه الالتزام بأكثر من مشروع والعمل عليها جميعًا بكفاءة عالية، فضلًا عن ضرورة أن يأخذ الظروف الاستثنائية بعين الاعتبار مثل الطوارئ أو عدم تفهم العملاء للتأخر أو ضعف جودة العمل أو سوء التواصل. وقد بينا قبل قليل أن العمل الحر هو عمل بالنهاية يلزمه نظام ومنهج للعمل، وإن كانت الحرية هنا في اختيار العملاء، واختيار روتين العمل ووقته، لكن يلزمك حد أدنى من الالتزام بهذه المعايير حتى تصرف وقتك إلى الأعمال التي تدر المال فقط، ولا تشغل نفسك كل يوم بالأمور الإدارية نفسها للعمل. 14- التواجد الدائم على الإنترنت أحد أوجه التقييد التي يمكن أن يعاني منها المستقل أيضًا هو ضرورة تواجده الدائم على الإنترنت، فقد تضطر للبقاء على اتصال دائم كي لا تفوت أي عميل، وتتابع عملاءك على مدار الساعة، وذلك حتى يتكون عندك قاعدة من العملاء الذين يفضلون التعامل معك، وحينها ستكون قد وطدت وسائل التواصل بينك وبينهم، وصنعت لنفسك معرض أعمال يتحدث عنك على الويب، بحيث يصل إليه من يبحث عن الخدمة التي تنفذها. 15- ضعف العلاقات الاجتماعية من السهل على المستقل الذي يعمل من منزله أن يقع في فخ الخلط بين الحياة العملية والشخصية والاجتماعية، فلن يكون هناك وقت واضح للراحة وآخر للعمل، وسيتسبب ذلك لا محالة في إرهاق نفسي له. ذلك أن العامل الحر يكون وحده أغلب الوقت على حاسوبه، فيكون منعزلًا بشكل ما عن المجتمع، فلا يقابل زملاءًا في كل يوم مثلًا، وقد يفقد تواصله حتى مع أصدقائه وعائلته، وذلك خطأ لا ريب، لكن الكثير من العاملين يقعون فيه تحت وطأة العمل وسوء إدارة أوقاتهم، وقد وقعت فيه بنفسي مرات كثيرة. والحل قد يكون في فصل مكان العمل عن الراحة، كما سنبين في المقالين السادس والسابع في شأن العناية بالصحة وبيئة العمل، ولو استطعت فصله عن المنزل بالكلية يكون أفضل وأحرى إذ ستخالط الناس في ذهابك وعودتك فلا تشعر بالوحدة، وكذلك بتحديد ساعات العمل وتثبيتها كل يوم، فيتعود عقلك أن هذا الوقت وقت عمل، وما بعده راحة، وهكذا. كذلك فإن تخصيص ثياب خاصة بالعمل فيه منفعة عظيمة إذ تنبه الدماغ إلى أنك الآن في وضع العمل، فلا تجلس لتتصفح الويب أو يوتيوب مثلًا -بما أنك ترتدي البيجامة وتتكئ على سريرك في غرفة النوم!-، بل هو وقت عمل له ميقات محدد، وإن نفع هذه الطريقة معلوم مشاهد في الشركات التي لها زي موحد أو في الجيوش أو غير ذلك، فارتداء العامل للزي الخاص بالعمل يجعله يقصي تلقائيًا أي مهمة لا تمت لهذا العمل بصلة، وذلك حتى انتهاء وقت العمل أو تبديله لتلك الثياب. خلاصة المقال لا يزال العمل الحر كثقافة غامضًا بالنسبة للكثيرين، مما يؤثر على خياراتهم وقراراتهم المرتبطة بمسارهم المهني، في حين أن الظروف الحالية في العالم ككل، والعالم العربي بشكل خاص تبدو مبشرة للعمل عن بعد والعمل بشكل حر، إلا أن المقبلين على هذا النمط يجب أن يكونوا على اطلاع ومعرفة بجميع جوانبه. وقد حاولنا تغطية كل ما يجب على الشخص معرفته في هذا المقال قبل أن يقرر الدخول إلى السوق أو قبل أن يقرر بأن يصبح عاملًا مستقلًا، لكن هذه المقدمة ليست كافية. ويجب أن يكون قرارك لدخول سوق العمل الحر مدروسًا وملائمًا لطبيعة عملك وشخصيتك حتى، لذلك يجب أن تبدأ بتحليل متطلبات السوق ومقارنتها مع مهاراتك بالإضافة إلى اطلاعك على المزيد من الأساسيات التي سنذكرها في المقال القادم، حيث نوضح المفاهيم المرتبطة بدخول السوق واختيار المجال المناسب، بالإضافة إلى تصحيح العديد من المفاهيم والأفكار التي توهم البعض أن العمل الحر مناسب للجميع. كتبت سارة شهيد المسودة الأولية لهذه المقالة. اقرأ أيضًا المقال التالي: الدخول إلى سوق العمل الحر على الإنترنت النسخة الكاملة من كتاب دليل المستقل والعامل عن بعد1 نقطة
-
هل تحلم بالعمل من المنزل أو بإنشاء شركتك الخاصة التي تعمل عن بُعد؟ أبشر! فالعمل من المنزل لم يحقق شهرةً وربحًا في تاريخه قط أكثر من هذه اللحظة. العمل عن بُعد هو أن تعمل في أي مكان في العالم دون أن تكون مقيدًا بمكان عمل محدد أو زملاء محددين، حيث تعمل في مكان من اختيارك، ومن المكان الذي تشعر فيه بالسعادة والإنتاجية، ناهيك عن أنه يمثل نسبة أكثر من 40% من صفوف القوة العاملة في أمريكا. فضلًا عن أن 43% من العاملين الأمريكيين يستقطعون وقتًا يعملون فيه لدى قائمة من الشركات النامية في مجال العمل عن بُعد. ونحن هنا في حسوب - أحد هذه الشركات التي تعمل عن بُعد – نأمل أن يفهم كل الناس طبيعة العمل عن بعد وأن يتذوقوا ثماره. نقدم لك هذا الدليل للعمل عن بُعد، كي تجد وظيفة أحلامك من المنزل وتُنشئ عملك الخاص. سيكون هذا المصدر متجددًا وسنحدِّثه بانتظام، ولا تتردد في وضع إشارة مرجعية كي تتمكن من الوصول إليه من وقت لآخر؛ نتمنى أن تجد كل ما تبحث عنه هنا! هل تود أن تعرف من يُوظِّف عن بُعد؟ إليك قائمة بأكثر من 600 شركة تعمل عن بُعد وقائمة أخرى للوظائف الشاغرة حاليًا. ما هو العمل عن بعد؟ يُقصد بـ "العمل عن بُعد" (remote work) إتمام مهام العمل خارج المكتب، ويُسمى أحيانًا "العمل من بُعد"، والعديد من الناس يطلِقون عليه "العمل من المنزل". هناك أنواعًا عديدة للعمل عن بُعد: فبعض الناس يُسمح لهم بالعمل خارج المقر لمدة يوم أو يومين فقط كل أسبوع؛ وآخرون يعملون عن بُعد متى شاؤوا. في الحقيقة، لاحظنا وجود خمسة محاور للعمل عن بُعد نبيِّنها كما يلي: 1- العمل من داخل المقر (عكس العمل عن بُعد): يعمل الفريق في مكتب واحد أو عدة مكاتب، وهو نموذج تقليدي للعمل (لكنَّه يظل أساسيًّا). 2- العمل من المقر أو المكتب مع وجود خيار العمل من المنزل: هذه الشركات لديها مكتب فعليّ أو ربما أكثر من مكتب، لكنها تعطي أفراد فريقها خيار العمل من المنزل لمدة يوم واحد في الأسبوع أو أكثر. 3- فريق يعمل عن بعد ولكن في نطاق زمني واحد: في هذا النموذج، لا يُتوقّع من أفراد الفريق الذهاب إلى مقر العمل (إن وُجِد) لأنهم يعملون من منازلهم (لا يُشترط وجود مكتب فعليّ). 4- فريق عمل عن بُعد أفراده من دول مختلفة وفي مناطق زمنية متنوِّعة: وهي خطوة أكثر تقدمًا للعمل عن بُعد لوجود أفراد لهم مناطق زمنية مختلفة، وسمة هذا النموذج أنه غير متزامن، الأمر الذي يجعل مسألة التعاون فيه أكثر حيوية، فأفراد الفريق لديهم ساعات عمل قليلة متداخلة مع بعضهم بعضًا، مما يجعل هذا النموذج بحاجة إلى نظام لجعل التواصل والتعاون فيه أكثر فاعلية. 5- فريق عمل موزَّع في دول مختلفة مع وجود بعض الأفراد كثيرو السفر: يعد هذا النموذج للعمل عن بُعد الأكثر تطورًا؛ فأفراد الفريق يعملون من دول مختلفة تمامًا، بالإضافة إلى أن بعضهم يسافرون ويتنقَّلون بانتظام من منطقة زمنية إلى أخرى. أفضل الأماكن والشركات التي تعرض وظائف من المنزل وتتيح العمل عن بُعد يُقدِم كثير من الموظفين على العمل عن بُعد لأسباب عدة منها: المرونة والثقة وزيادة الإنتاجية والرغبة في الاستقلالية وحب العزلة، وإذا أثار هذا الأمر اهتمامك، توجد الكثير من الوظائف المفتوحة للعمل مع شركات عن بُعد بانتظارك! وبشكل أساسي، هناك طريقين للعمل عن بعد: أن تكون رائد أعمال أو أن تعمل لحسابك الخاص بشكل مستقل أو بصفتك موظف مؤقت. العمل لدى شركة تتيح خيارات العمل عن بُعد. هل تريد البدء الآن والعمل من المنزل لحسابك الخاص؟! حان وقت الانطلاق! كثير من الأشخاص يبدؤون عملهم عن بُعد على نحو بسيط، فيعملون على مشاريع جانبية صغيرة، وفي الوقت نفسه ينشئون قاعدة من العملاء أو المشاريع؛ لكن عملهم هذا عادةً من يكون جنبًا إلى جنب مع وظيفتهم ذات الدوام الكامل أو الجزئي، حتى إذا صار عملهم الجانبي أكبر (يحقق ربحًا أكثر) حينها يلتفتون إليه بشكل كامل ليكون هو مصدر رزقهم. كثيرةٌ هي المجالات التي يمكنك أن تحقق فيها نجاحًا إذا عملت لحسابك الخاص – بشكل مستقل – وعلى رأس هذه المجالات وجدنا الآتي: البرمجة التسويق الالكتروني وسائل التواصل الاجتماعي الاستشارات التصميم ولهذه المجالات منتديات تحتضن أعدادًا هائلة من العمال المستقلين، يتواصلون فيما بينهم ويتعلمون المزيد ويشدّون أزر بعضهم بعضًا. وإليك بعض منها (مُفضَّلة): للبرمجة، جرِّب Stack Overflow للتسويق الالكتروني، جرِّب Growth Hackers لوسائل التواصل الاجتماعي، جرِّب Social Media Mastermind للاستشارات، تابع لينكد إن للتصميم، جرِّب دريبل وهذا ليس كل شيء، فهناك العديد من المنصّات التي تتيح لك المزايدة على المشروعات وتقديم عروضك والحصول على عمل مستقل. وما يلي أفضل هذه المنصات التي يمكنك العثور فيها على هذه النوعية من الوظائف، اكتشفها وجرِّبها إذا ما أثارت اهتمامك: مستقل خمسات بعيد آبورك 99 ديزاينز أما إذا أردت الانضمام لشركة ما للعمل عن بُعد... هل ترغب في الانطلاق والانضمام إلى شركة بدوام كامل من المنزل؟ حسنًا، كثيرةٌ هي الأماكن التي ستفتح لك ذراعيها للعمل عن بُعد – خاصةً في مجال التقنية والشركات الناشئة – حيث يوجد بها قائمة عريضة ومتنوعة من الوظائف الشاغرة التي تناسب مهاراتك. وضعنا لك منشورًا به أكثر من 600 مكانًا للعمل عن بُعد، يمكنك قراءة التفاصيل؛ وإليك 25 شركة نرى أنهم من أفضل الشركات الأجنبية في العمل عن بُعد، نتمنى أن تجد ما يناسبك منها. Automattic ألق نظرة على الوظائف الشاغرة لديهم. BaseCamp ألق نظرة على الوظائف الشاغرة Buffer ألق نظرة على الوظائف الشاغرة CoinBase انظر الوظائف الشاغرة Digital Ocean-انظر الوظائف الشاغرة Docker - انظر الوظائف الشاغرة Doist - انظر الوظائف الشاغرة Envato انظر الوظائف الشاغرة Githhub - انظر الوظائف الشاغرة Intercom- انظر الوظائف الشاغرة Invesion- انظر الوظائف الشاغرة Khan Academy- انظر الوظائف الشاغرة Living Social انظر الوظائف شاغرة Moz- انظر الوظائف شاغرة Mozilla- انظر الوظائف الشاغرة Recurly- وظائف شاغرة Sales Force - انظر الوظائف الشاغرة Shopify- انظر الوظائف الشاغرة Skillshare- انظر الوظائف الشاغرة Spotify - انظر الوظائف الشاغرة Stackoverflow– انظر الوظائف الشاغرة Stripe- انظر الوظائف الشاغرة Treehouse - انظر الوظائف الشاغرة Twilio - انظر الوظائف الشاغرة Zapier - انظر الوظائف الشاغرة لكي تبحث بسهولة ويسر عن صفحات وظائف الشركات السابق ذكرها، نقدم لك مصادر أخرى وخطوات ستساعدك على اقتناص وظائف عمل عن بُعد . يعد موقع We work remotely الذي تقوم بصيانته شركة Basecamp وهي منصّة مخصصة لوظائف العمل عن بُعد. أما موقع Remote.co فيحتوي على فرص ونصائح للعمل عن بُعد. وهناك أيضًا موقع Remotive.co الذي يتضمن جدول ببيانات الشركات التي توظِّف الأفراد عن بُعد. وإليك مواقع مثل Angel List للبحث عن الوظائف وفلترتها بوضع علامة أو شارة "عن بُعد"، أو موقع Hiring tools like Homerun لأماكن التوظيف. هل تريد العمل عن بُعد مع الاحتفاظ في الوقت ذاته بوظيفتك الحالية (من المكتب أو المقر، عكس العمل عن بُعد)؟ يمكن تناول هذا الأمر بأكثر من طريقة، أقصد بدء العمل عن بُعد دون الحاجة إلى الانتقال إلى وظيفة جديدة. لدى أصدقاؤنا في Remote Year دليلًا يبين الخطوات الأولى والاستفسارات حول إمكانية العمل لمدة يوم واحد في الأسبوع خارج المكتب. كيف يمكنك أن توظِّف (أو أن يتم توظيفك أنت) عن بُعد؟ بكل تأكيد بإمكان كل شخص العمل عن بُعد، ولكن إذا أردت أن تحرز النجاح منذ اليوم الأول، ستحتاج إلى التمتع بعدة مهارات؛ أما إذا كنت تبحث عن أفرادًا لتوظِّفهم، فإليك معايير الاختيار. ولكن إذا كنت أنت من تتقدم بطلب للعمل عن بُعد، فكِّر إذا ما كانت هذه الصفات تنطبق عليك. العمل مستقلًا بكفاءة وفاعلية العمل عن بُعد من الممكن أن يعني البقاء بمفردك طوال اليوم (إذا كان هذا غير مريح بالنسبة لك، جرِّب العمل من داخل مقهى أو مساحات/ أماكن العمل الجماعية كي تستمتع برفقة الآخرين). ولكن، إذا أردت أن تكون عاملًا ناجحًا – عن بُعد –فيجب أن تكون في كامل إنتاجيتك وأنت بمفردك. على قدر كبير من المسئولية الشخصية سؤالٌ كثير ما يُطرح وهو "أليس من الممكن أن يقضى العامل عن بُعد وقته في اللهو طوال اليوم، كيف يمكنك التحقق من ذلك؟". حسنًا، نحن نوظِّف أفراد الفريق الذين لن يفكروا ولو للحظة في اللهو بينما هناك عمل يتعين عليهم القيام به! لأن تحليك بالمسئولية لن يجعلك تنتظر رقيبًا عليك بينما أنت تعمل، نحن نثق بك أنت. التواصل كتابيًا بشكل جيد أثناء عملك عن بُعد لن تحظى بفرصة الحديث مع باقي أفراد الفريق وجهًا لوجه كثيرًا، عديدة هي الأدوات التي تيسر هذا الأمر (مؤتمرات الفيديو، على سبيل المثال)؛ ولكن، يجب أن تكون قادرًا على التواصل النصي بشكل ممتاز من خلال: البريد الإلكتروني والرسائل الفورية ومجلدات العمل التعاونية. لا يكفيك التعبير عن نفسك بشكل جيد، عليك أن تحقق أقصى استفادة من التواصل الوجداني وأن تعي بمشكلة النبرات غير الواضحة للكلمات المكتوبة. الالتزام بموعد التسليم يرتكز العمل عن بُعد بشكل كبير على النتائج. هل أنجزت المهمة التي وعدت باتمامها؟ ممتاز! إذا كنت تريد التعرف على المزيد عن هذه المهارات التي تؤهلك للعمل عن بُعد، إليك قسم العمل الحر في أكاديمية حسوب ، تجد هناك عدد من أعضاء فريقنا يدرِّسون بعض فصول هذه الدورات التدريبية. هل العمل عن بُعد مناسب لي؟ كيف أعرف ذلك؟ لاشك أنك تتسائل في هذه اللحظة، ما الذي ينتظرني في العمل عن بُعد؟ بالطبع، هو أسلوب رائع للحياة، وبالمناسبة، هناك دروس عديدة تعلمناها في السبع سنوات الماضية -وربما أكثر- عن تأسيس الشركات التي تعمل عن بُعد، سردنا 40 درسًا منها في أحد المنشورات بالمدونّة إليك أفضل أربعة منها، ولكن يمكنك الضغط على الرابط لقراءة المقالة كاملة: ستتضاعف انتاجيتك (عشرة أضعاف) يمكن لأي شخص العمل عن بُعد بشكل كامل أو شبه كامل – مرن – (تقريبًا)! وتتعامل به كثير من الشركات، أكثر مما تظن. إذا أردت أن تتبنى نظام العمل عن بُعد داخل شركتك، حاول أن تجعل كل فرد يشعر بالمساواة داخل الفريق. فمن السيء أن تكون "مواطن من الدرجة الثانية" فقط لأنك لا تعمل من داخل المكتب. وجود طقوس صباحية ومسائية سيساعدك في تنظيم أيامك، ستجد الأمر في غاية السهولة إذا ما عوّدت نفسك. إذا عيّنت أشخاصًا تثق بهم (وإذا لم تفعل، لم لا؟) كن على ثقة بعملهم. معظم الناس يعرفون جيدًا هل العمل عن بُعد يناسبهم أو لا، وإذا فكّرت وقلت لنفسك "لا أستطيع العمل على هذا النحو، ربنا سيفضي بي الأمر وأنا أشاهد التلفاز طوال اليوم"، حسنًا ربما أنت محق، لا تجرِّبه. إذا كنت انطوائيًّا، نادرًا ما ستشعر أن الأمر يستحق العناء. أما إذا كنت شخصًا اجتماعيًّا، فكثيرًا ما ستشعر أن الأمر يستحق العناء. أغلق الحاسوب المحمول في نهاية اليوم وفكِّر في الأمر، لأن العمل سيكون بهذه الكيفية كل يوم. إذا كانت القواعد مناسبة لك، فلن تتردد في تطبيقها؛ سيقول لك كثيرٌ من الناس انهض وارتدي ملابسك كل يوم كما لو كنت ذاهبًا إلى العمل. بالنسبة لي، بعد خمسة أيام تقريبًا كنت أرتدي سروال اليوجا بدون وضع أي مكياج، لذا، اكتشف ما يناسبك أنت. عيوب العمل عن بُعد 1- السبيل إلى الإنتاجية في العمل عن بُعد رغم كل الترتيبات، ستحل عليك أوقاتًا تشعر فيها بضعف الإنتاجية والحماس، وهذا أمر طبيعي في أي مكتب أو مقر عمل أو العمل عن بُعد ...إلخ، إلا أنه يصعب اكتشافها في فِرَق العمل عن بُعد. لدينا في Buffer خبرة كبيرة في اختبار إنتاجيتنا وقياس مداها، وإليك مجموعة من النصائح التي نعمل بها حتى الآن: نظِّم أيامك أنظم أيام عملي بشكل عام، فأخصص بعض الأيام للتركيز على إدارة ودعم فريقي التنفيذي الرائع، وفي البعض الآخر أعمل على المشاريع وأنسِّق الملفات وأبحث عن استراتيجيات للتطوير أو أبحث عن عملاء أو أقوم بقياس المنتجات للبحث عن فرص. أخصِّص يوم الأربعاء للعمل بتركيز أعمق، فلا يوجد اجتماعات، واستغل ذلك الوقت في القراءة والتفكير مليًا في النهوض برؤيتنا واستراتيجيتنا لمستوى أعلى. لدى مديرنا التنفيذي "Goel Gascoigne" نصائح بعنوان "كيف ينظِّم المدير التنفيذي عمله عن بُعد"، يُنصح بقراءته. التهم الضفدع! ابدأ يومك بإنجاز المهمات الشاقة، ولن يزعجك أي شيء بعدها طوال اليوم. نصيحة "مارك توين" هذه مفيدة للجميع. ولكن لا تقلق، لن يجبرك العمل عن بُعد على تناول ضفادع حقيقية! فالـ "ضفدع" يُقصد به أكبر المهام التي تنتظرك في قائمة الأعمال، ومن ثم، عليك بإنجاز أكبر المهام أولًا، وسيمر عليك باقي اليوم كالنسيم (ناهيك عن شعورك بالإنتاجية وأنت في أول اليوم). قائمة أعمال الغد انطلاقًا من فكرة "التهم ضفدعك"،اعتاد كل منا كتابة قائمة بضفادعه الخاصة باليوم التالي، ليقبل على إنجازها بكل حماس في الصباح. في نهاية اليوم اكتب المهام التي تريد إنجازها في الغد. استيقظ وليكن أول شيء تفعله هو قراءة قائمة المهام التي أعددتها في الأمس. اختم يومك بكتابة قائمة أخرى للغد، وهكذا. اخترنا لك "نصائح لـ روتينك الصباحي"، تعرَّف على قائمة كاملة بالروتين الصباحي لأكثر الأشخاص نجاحًا أما إذا كنت تريد تحقق أقصى استفادة من يومك، إليك قائمة بأفضل المصادر ومختلف النصائح التي تساعدك على تنظيم يومك وجعله أكثر إيجابية وإنتاجية. دليلك الأفضل لكي تصبح الشخص الذي تريده: عزز عقلك وجسدك وروحك واصنع روتينًا يوميًا ممتازًا 2. كيف تتغلب على الشعور بالوحدة المصاحبة للعمل عن بُعد كل عام، ننشر تقريرًا عن أحوال العمل عن بُعد يضم بيانات آلاف العاملين عن بُعد. في تقريرنا الأخير، اتضح لنا أن أكثر من واحد لكل خمسة أشخاص يعاني الوحدة التي هي أكبر معوقات العمل عن بُعد بالنسبة لهم. أضف إلى ذلك، أن الوحدة تكثر بين الشباب الراشدين، وهم الأكثر اقبالًا على العمل عن بُعد. نحن نعي خطورة هذه المشكلة، ونحاول التركيز على سلسلة من النصائح التي تشجع على بناء العلاقات الضرورية في العمل والحياة عمومًا. إليك نصائح لا غنى عنها اخترنا لك أفضلها، تفضّل بقراءة منشورنا بعنوان التغلب على الوحدة الناجمة عن العمل عن بُعد. ابحث عن الأشخاص الذين لديهم طبيعة عمل وحياة مشابهة لك تعاون مع الناس ووطِّد علاقاتك الإنسانية. حاول أن تفهم ذاتك. نوِّع أنشطتك اليومية. سِرْ على مهل. يقدم لك هذا الرابط نصائح أكثر عن التغلب على الشعور بالوحدة بسبب العمل الحر. تغلّب على الشعور بالوحدة في العمل عن بُعد: نصائح الموظفين المستقلين من مختلف دول العالم. أدوات تسهِّل عليك العمل عن بُعد: انتقينا لك أفضل عشر منها أتم عملنا عن بُعد الآن ثمان سنوات، حظينا فيهن بفرصة التعاون والنمو بين فِرَق تتسم بالذكاء والمهارة والموهبة. ومن الرائع أن الناس نجحوا في اكتشاف مجال العمل عن بُعد وتعمّقوا فيه جيدًا، بفضل مجموعة من الأدوات المدهشة التي سهّلت تواصلهم في كل مكان. إليك قائمة بأفضل هذه الأدوات التي ساعدتنا على تحقيق الإنتاجية وإنجاز المهام وجعلتنا سعداء في ظل تواصل رائع Slack رائع في إرسال رسائل نصية فورية بسرعة ممتازة. Dropbox Paper يقدم لك مستندات عمل تعاونية، تمكِّنك من إضفاء التعديلات ومشاركتها بشكل غير متزامن. (يُنصح أيضًا باستخدام مستندات جوجل). Zoom لمؤتمرات الفيديو الجماعية لكامل الفريق أو المحادثات الثنائية. Trello لإدارة المشاريع وتنظيم فِرَق العمل، نستعين به في حملاتنا ومهام عملنا. Gmail، لإرسال البريد الإلكتروني والتواصل مع جميع أفراد الشركة. Officevibe، يساعدنا في مواكبة أخلاقيات العمل داخل الشركات. Timetastic، من خلاله نعرف مواعيد إجازات الزملاء وأوقات العطلات. Discourse، عبارة عن منتدى نتشارك فيه الأخبار وكل جديد. Zenefits، لوحة المتابعة و بوابتنا الإلكترونية للموارد البشرية. Expensify، موقع ذكي لحساب النفقات والفواتير. إذا أردت معرفة كيف نستخدم هذه الأدوات والمواقع، تفضّل بقراءة هذا المقال بعنوان "12 أداة رئيسية تسهِّل عملنا عن بُعد". أمّا إذا كنت مهتمًا بتعلُّم كيفية استخدام Trello داخل فِرَق العمل عن بُعد، إليك هذه المقالات التي تشرح لك بالتفصيل كيفية استخدامه لإدارة وتنظيم العمل! لماذا ينبغي عليك التفكير بتأسيس مكان عمل عن بُعد؟ لاشك أن هذا السؤال قد دار بذهنك من قبل سواء كنت من أصحاب المشاريع الناشئة، أو ربما يبحث مدير تنفيذي عن الجديد. قرار كهذا يحمل في جنباته الكثير من التفاصيل المتعلقة بالطريقة التي ينتهجها فريقك في العمل، والثقافة التي أنت بصدد بنائها، وسواء كنت ضد هذه الفكرة أو ترى أن مزاياها تفوق سلبياتها، إليك بعض العناصر التي عليك التفكير بها عند بناء فريقك للعمل عن بُعد. المزايا 1- إنتاجية أعلى: كشفت دراسة أجرتها Harvard Business Review أن الموظفين عن بُعد يفوقون الموظفين داخل المكاتب من حيث الإنتاجية، وهذا لسببين: العمل عن بُعد لا يقضي وقتًا في الذهاب والعودة، ويقل فيه التشتيت مما يعطيك مساحة أكبر للتركيز بعمق. 2- أقل تكلفة: كان لدينا مكتبًا صغيرًا في سان فرانسيسكو، والآن ليس لدينا أي مكتب فعليّ على الإطلاق، مما يعني توفير 84 ألف دولارًا في العام الواحد، مدهش أليس كذلك! توفير كل هذا المال دون الحاجة إلى وجود مكتب! ولنفترض أنك أردت تعويض الموظفين عن فاتورة الأنترنت ونفقات مكاتب/مساحات العمل الجماعية (كما هو الحال بالنسبة لنا) ستظل التكلفة أقل مقارنة باستئجار مكتب. 3- أكثر حبًا للعمل وتعلّقًا به: ذكرت دراسة أجراها Leadership IQ أن أكثر من 45% من العاملين عن بُعد يحبون وظائفهم مقارنة بالموظفين من المكتب الذين لا تتجاوز نسبتهم 24%. تصوُّرات خاطئة 1- التواصل السيء: لم نمر بتجربة تواصل سيئة خلال عملنا بفضل الأدوات التي نستخدمها؛ فنحن نتحدث طوال اليوم عبر Slack أو Zoom متى أردنا. قد يتطلب الاتصال بزميل عمل في النصف الآخر من الكرة الأرضية بعد اللحظات لإعداد المكالمة، لكن الأمر في النهاية يستحق العناء. 2- التراخي: كما ذكرنا سابقًا، إذا وظّفت أشخاصًا يتمتعون بالمسئولية وأخلاق العمل، فلم القلق؟ المهام تُنجز في النهاية. إذا عيّنت أشخاصًا تثق بهم (وإذا لم تفعل، لم لا؟) كن على ثقة بعملهم. 3- حدِّد أوقات عملك: حاول أن تقاوم إغراء البقاء متصلًا ومتاحًا طوال اليوم عند عدم وجود حاجة تستدعي ذلك، وتذكر أن هناك العديد من الأدوات التي تساعدك في التغلب على ذلك. في حسوب، نحن نبذل قصارى جهدنا في الالتزام بالأوقات المحددة للعمل (البعض يختار ساعات عمل تقليدية، والبعض الآخر يفضِّلون ساعات عمل أكثر مرونة)، وكثير منا يبني لنفسه روتينًا يوميًا له بداية ونهاية محددة. قصص واقعية لأشخاص حققوا السعادة في العمل عن بُعد إذا كانت حياة العمل عن بُعد تثير فضولك، سواء أردت هذه الحياة لنفسك، أو نويت تقديمها لفريقك كي يتعرفوا عليها، يسعدنا أن نقدم لك قصتين لاثنين من الموظفين تحدثوا فيهما عن تجربتهما في العمل عن بُعد. المقال الأول لمايكل إيراسموس بعنوان كيف تعلمت الموازنة بين حياتي وعائلتي وعملي عن بُعد والثاني لمايكي غاست بعنوان 5 نصائح للموازنة ما بين العمل عن بعد وتربية الأطفال. ترجمة بتصرُف للمقال What is Remote Work? A Guide for Building Remote Teams and Finding Your Work-from-Home Job بقلم Kevan Lee1 نقطة
-
ما هي السمة (Traits)؟ تسمح PHP بالوراثة المفردة فقط أي أنّ الصنف يمكن أن يرث صنفًا واحدًا فقط، لكن ماذا لو احتجت لتضمين شيء ما لا ينتمي للصنف الأب؟ قبل الإصدار PHP 5.4 كان عليك أن تكون مبدعًا أما الإصدار PHP 5.4 فقد قدم السمات التي تسمح لك بنسخ ولصق جزء من صنف ما إلى الصنف الذي تريده. trait Talk { /** @var string */ public $phrase = 'Well Wilbur...'; public function speak() { echo $this->phrase; } } class MrEd extends Horse { use Talk; public function __construct() { $this->speak(); } public function setPhrase($phrase) { $this->phrase = $phrase; } } لدينا في الشيفرة السابقة الصنف MrEd يوسّع الصنف Horse، لكن ليس كل كائنات الصنف Horse لديها السمة Talk، لنرى ما تأثير ذلك. نعرّف أولًا السمة (Traits) ويمكننا استخدامها مع التحميل التلقائي وفضاء الأسماء ثمّ نضمنها في الصنف MrEd باستخدام الكلمة المفتاحية use، ستلاحظ أنّ MrEd يستخدم دوال ومتغيرات Talk دون تعريفها أي أنّ هذه الدوال والمتغيرات كلها معرفة في الصنف MrEd الآن وكأننا عرفناها داخل الصنف (نسخنا ولصقنا المتغيرات والدوال). ترتبط السمات ارتباطًا وثيقًا بالأصناف المجردة في أنّه يمكنك تعريف متغيرات ودوال، ولا يمكنك نسخ السمة أيضًا بشكلٍ مباشر (أي كتابة new Trait())، ولا يمكن للسمات أن تفرض على الصنف تعريف دالة بشكلٍ ضمني مثلما يفعل الصنف المجرد أو الواجهة إذ أنّ السمات للتعاريف الصريحة فقط. متى يجب أن أستخدم السمة؟ عندما تريد استخدام السمة يجب أن تسأل نفسك السؤال المهم: هل يمكنني تجنب استخدام السمة بإعادة هيكلة شيفرتي؟ غالبًا سيكون الجواب نعم، السمات هي حالات هامشيّة تسببها الوراثة المفردة ويمكن أن يكون استخدامها بشكل مفرط مغريًا لكنها تقدم مصدرًا آخر لشيفرتك مما يعني أنّ هناك طبقة أخرى من التعقيد. تعاملنا في المثال السابق مع 3 أصناف فقط لكن السمات تعني أنّه يمكنك التعامل مع أكثر من ذلك بكثير، ومن أجل كل سمة يصبح التعامل مع صنفك أصعب بكثير إذ يجب عليك الرجوع إلى كل سمة لمعرفة ما الذي تعرّفه، كنتيجة يجب أن تحافظ على عدد سمات قليل قدر الإمكان. السمات لتسهيل إعادة استخدام الشيفرة الأفقية بفرض أنّه لدينا واجهة للتسجيل: interface Logger { function log($message); } ولدينا صنفين ينفذان هذه الواجهة: class FileLogger implements Logger { public function log($message) { // إضافة رسالة تسجيل إلى ملف ما } } class ConsoleLogger implements Logger { public function log($message) { // رسالة تسجيل إلى الطرفية } } إذا عرّفت الآن صنفًا آخر Foo والذي تريده أيضًا أن يؤدي مهام التسجيل باستخدام الشيفرة التالية: class Foo implements Logger { private $logger; public function setLogger(Logger $logger) { $this->logger = $logger; } public function log($message) { if ($this->logger) { $this->logger->log($message); } } } ينفّذ الآن الصنف Foo الواجهة Logger لكنه يعتمد وظيفيًا على تنفيذ Logger الممرر إليه عبر الدالة setLogger()، إذا أردنا الآن أن يكون لدينا الصنف Bar وله نفس آلية التسجيل هذه يجب نسخ هذا الجزء من المنطق داخله، لكن نعرّف سمة بدلًا من تكرار الشيفرة: trait LoggableTrait { protected $logger; public function setLogger(Logger $logger) { $this->logger = $logger; } public function log($message) { if ($this->logger) { $this->logger->log($message); } } } عرّفنا الآن المنطق في سمة ويمكننا استخدامها لإضافته إلى الأصناف Foo وBar: class Foo { use LoggableTrait; } class Bar { use LoggableTrait; } ويمكننا استخدام الصنف Foo كما في الشيفرة التالية مثلًا: $foo = new Foo(); $foo->setLogger( new FileLogger() ); $foo->log('my beautiful message'); لاحظ كيف استخدمنا السمة كوكيل (proxy) لاستدعاء تابع التسجيل على نسخة Foo. حل التضارب يمكن أن تؤدي محاولة استخدام عدة سمات في صف واحد إلى مشاكل تتعلق بالتوابع المتضاربة، عندها تحتاج لحل هذه التضاربات يدويًا، إليك المثال التالي: trait MeowTrait { public function say() { print "Meow \n"; } } trait WoofTrait { public function say() { print "Woof \n"; } } abstract class UnMuteAnimals { abstract function say(); } class Dog extends UnMuteAnimals { use WoofTrait; } class Cat extends UnMuteAnimals { use MeowTrait; } لنحاول الآن إنشاء الصنف التالي: class TalkingParrot extends UnMuteAnimals { use MeowTrait, WoofTrait; } سيرجع مفسر PHP خطأً فادحًا: Fatal error: Trait method say has not been applied, because there are collisions with other trait methods on TalkingParrot لحل مشكلة التضارب يمكننا القيام بما يلي: نستخدم الكلمة المفتاحية insteadof لاستخدام تابع من سمة بدلًا من تابع من سمة أخرى. ننشئ كنية للتابع مع الباني مثل WoofTrait::say as sayAsDog; class TalkingParrotV2 extends UnMuteAnimals { use MeowTrait, WoofTrait { MeowTrait::say insteadof WoofTrait; WoofTrait::say as sayAsDog; } } $talkingParrot = new TalkingParrotV2(); $talkingParrot->say(); $talkingParrot->sayAsDog(); ستنتج هذه الشيفرة الخرج التالي: Meow Woof تنفيذ نمط مفردة (Singleton) باستخدام السمات ملاحظة: لا يؤيد هذا المثال استخدام نمط المفردة كثيرًا إنما يجب استخدامها بكثير من الحذر. يوجد في PHP طريقة معيارية لتنفيذ المفردة: public class Singleton { private $instance; private function __construct() { }; public function getInstance() { if (!self::$instance) { // new Singleton() تكافئ الشيفرة new self() self::$instance = new self(); } return self::$instance; } // منع نسخ الكائن protected function __clone() { } // منع سَلسَلة الكائن protected function __sleep() { } // منع عدم سَلسَلة الكائن protected function __wakeup() { } } من الجيد استخلاص هذا السلوك ضمن سمة لمنع تكرار الشيفرة: trait SingletonTrait { private $instance; protected function __construct() { }; public function getInstance() { if (!self::$instance) { // إلى الصنف الذي يستخدم السمة new self() يشير self::$instance = new self(); } return self::$instance; } protected function __clone() { } protected function __sleep() { } protected function __wakeup() { } } يمكن الآن لأي صنف يريد أن يعمل كمفردة أن يستخدم السمة: class MyClass { use SingletonTrait; } // خطأ! مرئية الباني ليست عامة $myClass = new MyClass(); $myClass = MyClass::getInstance(); // كل الاستدعاءات التالية ستفشل بسبب مرئية التابع $myClassCopy = clone $myClass; $serializedMyClass = serialize($myClass); $myClass = deserialize($serializedMyclass); على الرغم من أنّه من المستحيل الآن سَلسَلة المفردة إلا أنّه لا يزال من المفيد حجب تابع عدم السَلسلة. السمات للمحافظة على الأصناف نظيفة قد تنفّذ أصنافنا بمرور الوقت المزيد والمزيد من الواجهات، وعندما يكون لهذه الواجهات عدة توابع فإنّ العدد الكلي للتوابع في الصنف يصبح كبيرًا جدًا. لنفرض مثلًا أنّه لدينا واجهتين وصف ينفّذ هاتين الواجهتين: interface Printable { public function print(); // ...توابع الواجهة الأخرى } interface Cacheable { // توابع الواجهة } class Article implements Cachable, Printable { // يجب أن ننفذ هنا كل توابع الواجهة public function print(){ { /* شيفرة لطباعة المقالة */ } } يمكن استخدام سمات مستقلة لتنفيذ هذه الواجهة بدلًا من تنفيذ كل توابع الواجهة في الصنف Article للحفاظ على الصنف أصغر وفصل شيفرة تنفيذ الواجهة من الصنف. مثلًا لتنفيذ الواجهة Printable يمكننا إنشاء هذه السمة: trait PrintableArticle { // هنا تنفيذ توابع الواجهة public function print() { /* شيفرة لطباعة المقالة */ } } ثم نجعل الصنف يستخدم السمة: class Article implements Cachable, Printable { use PrintableArticle; use CacheableArticle; } تتمثل الفوائد الأساسية في أنّ توابع تنفيذ الواجهة ستنفصل عن بقية الصنف وتُخزَّن في سمة وهذه السمة تتحمل وحدها مسؤولية تنفيذ الواجهة من أجل هذا النوع المعين من الكائنات. استخدام عدة سمات trait Hello { public function sayHello() { echo 'Hello '; } } trait World { public function sayWorld() { echo 'World'; } } class MyHelloWorld { use Hello, World; public function sayExclamationMark() { echo '!'; } } $o = new MyHelloWorld(); $o->sayHello(); $o->sayWorld(); $o->sayExclamationMark(); خرج المثال السابق: Hello World! تغيير مرئية التابع trait HelloWorld { public function sayHello() { echo 'Hello World!'; } } // sayHello تغيير مرئية class MyClass1 { use HelloWorld { sayHello as protected; } } // كنية تابع مع تغيير مرئية // لم تتغير sayHello مرئية class MyClass2 { use HelloWorld { sayHello as private myPrivateHello; } } تنفيذ هذا المثال: (new MyClass1())->sayHello(); // Fatal error: Uncaught Error: Call to protected method MyClass1::sayHello() (new MyClass2())->myPrivateHello(); // Fatal error: Uncaught Error: Call to private method MyClass2::myPrivateHello() (new MyClass2())->sayHello(); // Hello World! انتبه أنّه في المثال الأخير في MyClass2 التابع الأصلي غير المُكنّى من trait HelloWorld يبقى كما هو قابلًا للوصول. ترجمة -وبتصرف- للفصل [Traits] من كتاب PHP Notes for Professionals book اقرأ أيضًا المقال التالي: مدخل إلى الملحن composer: مدير الاعتماديات والحزم في PHP المقال السابق: التعابير النمطية (regexp/PCRE) في PHP1 نقطة
-
احاول تطبيق اعلانات AdMob مع فلاتر والامر حتى الان يمشي تمام ولكن لدي استفسار انا قمت بتطبيق نوعين من الاعلانات وهما : Banner و Interstitial ولكني احتاج الى معرفة كيف ممكن اعمل اعلان في زر اضافة موضوع مثلا لقد شاهدت سابقا هذا الحركه مسبقا بحيث ان المستخدم لما يقوم بضغط على زر اضافة موضوع جديد يجب ان يشاهد اجباري مقطع اعلاني لثواني محدده وفي حالة لم يشاهد المقطع كامل او بالاساس هو لا يملك خيار لرجوع او غلق الاعلان بحيث ان المستخدم يكن مجبور على مشاهدة الاعلان كامل لو رغب بنشر موضوع جديد في التطبيق كيف يمكن عمل ذلك؟ ياليت من يملك خلفيه عن الموضوع يفيدنا ويا حب لو يكون فيه كود مثال على ذلك1 نقطة
-
بعد إتمامكِ لمشاهدة جميع الدروس و التطبيق مع المدرب، يمكنكِ التواصل مع مركز مساعدة حسوب حيث يتم الاتفاق على عمل الفحص النهائي والذي بعد النجاح به سوف تحصلِ على الشهادة. يمكنك مراجعة إجابتي هنا للتعرف أكثر على الامتحان امتحانات أكاديمية حسوب1 نقطة
-
لدي جدول posts ضمن قاعدة البيانات في لارافيل: public function up() { Schema::create('posts', function (Blueprint $table) { $table->bigIncrements('id'); $table->unsignedInteger('user_id'); $table->unsignedInteger('category_id'); $table->string('title'); $table->longText('body'); $table->string('thumbnail_path')->nullable(); $table->timestamps(); $table->foreign('user_id')->references('id')->on('users')->onDelete('cascade'); $table->foreign('category_id')->references('id')->on('categories')->onDelete('cascade'); }); } وقمت باستخدام cache في لارافيل لحفظ نسخة من المنشورات عن طريق الحدث event: namespace App\Listeners; use App\Post; use Illuminate\Contracts\Queue\ShouldQueue; use Illuminate\Queue\InteractsWithQueue; use cache; class PostCacheListener { public function __construct() { } public function handle($event) { $post = Post::all(); } } كيف يمكنني حفظ نسخة من المنشورات الجديدة التي يتم إضافتها إلى قاعدة البيانات، فعند إضافة أي حقول جديدة إلى قاعدة البيانات يتم استعادة النسخة القديمة من الكاش دون تحديث.1 نقطة
-
سلام وعليكم, اثناء متابعة لأحد الدورات في udemy لبناء متجر الكتروني لم يقم المدرب بأنشاء نموذج(model) لكل جدول في قاعدة البيانات كما فعلنا في دورة تطوير تطبيقات الويب بphp , فقط قام بأنشاء نموذج خاص بuser و admin. مثلا عند اضافة منتوج جديد : في اكادمية حسوب انشئنا جدول خاص بالمنتجات (create_products_table) و نموذج خاص بالمنتجات (Product) مع تعريف العلاقات و في ProductController نكتب: public function newProduct(Request $request) { $product = new Product(); $product->title = $request->title; $product->save(); } اما في دورة اثناء اضافة منتج قام بانشاء فقط جدول خاص بالمنتجات (create_products_table) و في ProductController public function newProducts(Request $request) { $date = array(); $date['title'] = $request->title; DB::table('products')->insert($data); } --------------------- فمالفرق بين الطريقتين , وما الطريقة التي يجب ان استخدمها ام انا حر في الاختيار؟1 نقطة
-
هناك طريقتين للتعامل مع قاعدة البيانات إما عن طريق ال eloquent orm و هي نفس الطريقة التي قد إستخدمناها في الدورات او عن طريق ال query builder. ال orm هو رابط الكائنات بالعلاقات و يعتمد بشكل أساسي على نماذج و الربط بينها عن طريق العلاقات وكل نموذج يتم ربطه مع جدول في قاعدة البيانات أما ال query builder او مُنشئ الإستعلامات و هي نفس الطريقة التي ذكرتها و نستخدم فيها ال DB facade و هي عبارة عن واجهة تسهل التعامل مع قاعدة البيانات بشكل سلس. كلا الطريقتين تؤديان نفس الغرض، و إن كانت طريقة مُنشئ الإستعلامات أسرع بنسبة صغيرة و افضل من ناحية الأداء من رابط الكائنات بالعلاقات في بعض الأحيان إلا أن مُعظم مُطوري لارافيل يستخدمون eloquent لكون الشيفرات التي يتم كتابتها به مقروءة بشكل كبير، إن كان المُطور سيعتمد بشكل كلي على query builder و لا يستعمل النماذج (models) نهائياً فإستعماله للإطار و لمفهوم MVC خاطئ خصوصا إن كان المشروع كبير و العلاقات الموجوة بين الجداول كثيرة، فإستعمال الquery builder لا يعني بالضرورة الإستغناء عن النماذج (models). و إستعمال الquery builder لا يعني بالضرورة أيضاً عدم إستخدام eloquent و العكس صحيح. شخصياً استخدم eloquent و أحياناً عندما يكون الإستعلام مُعقد قليلاً و كمية البيانات التي يتم معالجتها كبير جداً في عمليات البحث و الفلترة او جلب تقارير من بيانات ضخمة في هذه الحالة الأفضل إستخدام Query Builder.1 نقطة
-
في أي مشكلة برمجية إن كانت بتصميم قاعدة البيانات Data Base وجداولها و أنماط الحقول إلى كتابة التوابع Functions بالاعتماد على خوارزميات سريعة للتعامل مع البيانات، فإنه يوجد عدة طرق لحل المكشلة. قبل الاعتماد على لارافل لم يكن يستخدم النماذج أصلا وكانت جداول قاعدة البيانات هي النماذج الأساسية وكان يتم كتابة استعلامات SQL مباشرة ضمن شيفرات PHP، وفيما بعد ظهر مفهوم PDO وأصبحت البرمجة غرضية التوجه في بناء الاستعلامات هي الأساس و مع ظهور لارافل أصبحنا نتعامل مع جدول البيانات بطريقة أفضل و أكثر تحكما و بالاعتماد على النماذج Models عن طريق Eloquent، والتي سهلت بناء و إدارة قواعد البينات بشكل كبير. إن استخدام النماذج كما في دورة الأكاديمية تعطينا أسلوب أفضل في التعامل مع الجداول حسب Active Records Pattern و يعد Active Record حلاً جيدًا لمعالجة كيان واحد بطريقة CRUD - أي إنشاء كيان جديد بخصائص مسندة القيم ثم حفظه في قاعدة بيانات أو تحميل سجل من قاعدة بيانات أو حذفه. ميزات Eloquent مثل التحقق المتسخ dirty checking (لإرسال SQL UPDATE فقط للحقول التي تم تغييرها) ، ونموذج الأحداث model events (على سبيل المثال لإرسال التنبيهات الإدارية أو تحديث عدادات الإحصائيات عندما يقوم شخص ما بإنشاء حساب جديد) ،السمات traits (الطوابع الزمنية ، المحذوفات الناعمة ، سماتك المخصصة) (timestamps, soft deletes, your custom traits) التحميل الشغوف / البطيء eager/lazy loading إلخ بالإضافة لـ التحقق من صحة وإدارة العلاقات validation, managing relations. ولكن استخدام هذا الأسلوب يؤثر على أداء التطبيق (تطبيق متوسط لكبير الحجم وعدد زوار كبير) لأنه يقوم ببناء الكثير من الأغراض و حجز الذاكرة Ram أثناء التنفيذ. إن استخدام Laravel DB methods هو أفضل في مصفوفات البيانات ، للتقارير ، لمعالجة الدُفعات (datagrids, for reports, for batch processing) لأنها تتعامل مع بيانات كبيرة الحجم بأداء أفضل. نستخدم كلا الأسلوبين حتى لو في نفس التطبيق (المشروع) نميل لأحد الأسلوبين حسب فهمنا لكيفية التعامل مع البيانات و حجمها ومدى تأثيرها على الأداء.1 نقطة
-
إن الطريقتين صحيحتين، ولكن يختلف التطبيق بين مبرمج وآخر كما تختلف بعض المتطلبات حسب المشروع الذي يتم العمل عليه. فلذلك المدرّب يقوم باتباع الطريقة التي يراها مناسبة للأمور التي سيتم تنفيذها خلال المشروع بحيث لديه نظرة عن كافة الخصائص التي سيتم تطبيقها ضمن المشروع. وفي دورات حسوب، يتم دوماً اختيار الطرق المناسبة والبسيطة والتي تلبي كافة احتياجات المتدربين بعيداً عن التعقيد لتكون واضحة ومفهومة ويستطيع المتدرّب استخدامها مباشرةً. أما بالنسبة للأمور المتعلقة في إنشاء وتصنيف الجداول والنماذج، فهو جزء كامل من تنفيذ المشروع ويدعى (مرحلة تحليل النظام) وفيه يتم النظر بآلية استخدام الكائنات والبيانات خلال المشروع والعلاقات المتبادلة فيما بينهم، كمدى ارتباط الكيانات ببعضها، وأيضاً الحاجة للتعديل واسترجاع البيانات مع بعضها البعض أو بشكل منفصل. وكثير من الأسئلة الأخرى التي تساعدنا في فهم آلية عمل المشروع لنستطيع اختيار الطريقة الأسهل. يمكنك دوماً اختيار الطريقة التي ترتاح بالعمل بها، فكتابة الكود البرمجي وتنسيقه أو اختيار الاستراتيجية المناسبة للعمل تختلف من شخص لآخر ولا يوجد قاعدة موحّدة تجبر المبرمجين على العمل بها.1 نقطة
-
أفضل طريقة لصقل مهاراتك في البرمجة هي تطبيق معرفتك لبناء مشاريع فعلية , إبدأ بمشروع صغير وابذل عليه جهداً كبير , لذا سأقترح عليك : بناء موقع لتدوين الملاحظات , مع لوحة تحكم خاصة . حيث يمكنك إنشاء مودل خاص بالملاحظات , وأخر للنصوص الخاصة بها , وهنا يمكن استخدام مفهوم العلاقات . أما بخصوص الإضافة , تعديل وحذف , فهنا يمكنك إستخدام Controller خاص لتنفيذ ماسبق ,وأخيراً تصميم الواجهة التي ستظهر المستخدم , مع إنشاء ال Routes اللازمة . يمكنك تطوير المشروع , لإضافة نظام تسجيل عضوية , مع لوحة تحكم متعددة الأدوار .1 نقطة
-
من بين المشاريع التي يُمكنك التدرب و تطبيق الأساسيات عليها هي مشروع بناء منتدى بسيط حيث يُمكن مبدئياً العمل على هذه الخصائص: في المنتدى مجموعة من الأعضاء يُمكنهم تسجيل الدخول و الخروج و الإشتراك إتاحة إنشاء مُساهمات داخل المُنتدى للأعضاء الردود على المُساهمات تصنيفات المُساهمات فلترة المُساهمات حسب التصنيفات فلترة المُساهمات حسب الأكثر شعبية و التي لم يتم الإجابة عنها. فلترة المُساهمات حسب المستخدمين إمكانية الإعجاب بالردود الحساب الشخصي لكل عضو عرض نشاط المستخدم في المنتدى إمكانية الإشتراك بمُساهمة بحيث عندما يتم إضافة رد عليها يتم إشعار المُشتركين بذلك و العديد من الخصائص التي بإمكانك إضافتها مع الوقت1 نقطة
-
اليك 5 أفكار لمشاريع يمكنك تنفيذها باستخدام لارافيل: مشروع بسيط يتم فيه إجراء عمليات الcrud وهي الإنشاء والعرض والتعديل والحذف. مشروع عبارة عن تطبيق دردشة مباشرة . متجر إلكتروني. محاكاة لمواقع مشهورة مثل تويتر وانستجرام وغيرها. موقع للعمل الحر.1 نقطة
-
1 نقطة
-
تنقسم برمجة مواقع الويب إلى قسمين رئيسيين هما: تصميم الموقع Front-end أي ما يظهر للمستخدم برمجة الموقع Back-end أي عملية إدارة قواعد البيانات ومعالجة البيانات (قسم المخدم) تصميم المواقع يعتمد على التقنيات التالية: HTML: تستخدم لتحديد بنية صفحات الموقع و أقسامه بالشكل الأساسي CSS: تستخدم لعمل التنسيقات و ترتبط مع HTML JavaScript: هي لغة البرمجة التي تعمل على المتصفح و تستخدم بإدارة الواجهة (معالجة بيانات و تحريك العناصر) مكتبات وإطارات عمل مهمة لتصميم المواقع (مستوى متقدم): jQuery: مكتبة في لغة البرمجة JavaScript تسهل العمل. Bootstrap: إطار عمل CSS يسهل عمل التنسيقات. برمجة المواقع يعتمد على التقنيات التالية: أولا: قواعد البيانات ومنها: عليك تعلم SQL MySQL PostgreSQL MongoDB .. وغيرهم ثانيا: لغات البرمجة لمواقع الويب: PHP: ونستخدم معها إطار العمل Laravel JavaScript: ونستخدم معها إطار العمل Node.JS Python: ونستخدم معها إطار العمل Django الأساسيات المشتركة بين جميع مواقع الويب هي : HTML - CSS - JavaScript ثم تختار نوع قاعدة بيانات مع لغة برمجة مثلا MySQL + PHP. تعلم أولا الأساسيات وبعد تمكنك منهم يمكنك الانتقال لباقي التفاصيل و يسهل عليك الاختيار. سترى الطريق طويل لكن علينا التقدم خطوة بخطوة. يوجد لديك متطلبات إضافية مثل فريق عمل للمراجعة و إدارة الموقع و عليك حجز استضافات قوية و مساحات تخزين كبيرة نسبيا بحسب عدد مستخدمي المتوقع.1 نقطة
-
Mass Assignment هي عندما ترسل مصفوفة إلى إنشاء النموذج, بشكل أساسي تقوم بتعيين مجموعة من الحقول على النموذج دفعة واحدة, بدلاً من واحد تلو الأخر. مثل. $post = new Post(request()->all()); يمكن استخدام fillabel لوضع حماية على جميع جميع الحقول التي تريد الإضافة لها إو تحديثها. protected $fillable = ['name', 'email']; ويمكن استخدام $guarded بهذا الشكل لمنع أي حقل من التخصيص الجماعي. protected $guarded = []; protected $guarded = ['age']; أو يمكن استخدام protected $guarded = ['*']; لمنع التخصيص الجماعي للحقول كافة. يمكنك إضافة @csrf للنموذج بهذا الشكل وهذا يحدث اما بسبب التصاريح المطبقة على المجلد أو بسبب انتهاء الجلسة. <form action="" method="post"> @csrf <div class="box-body"> @if ($errors->any()) <div class="alert alert-danger"> <ul> @foreach ($errors->all() as $error) <li>{{ $error }}</li> @endforeach </ul> </div> @endif <div class="form-group"> <label for="name">الأسم بالكامل</label> <input type="text" name="name" class="form-control" id="name" placeholder="اسم المستخدم" value="{{ old('name') }}"> </div> <div class="box-footer"> <button type="submit" class="btn btn-primary">حفظ</button> </div> </form> لو استمرت المشكلة تأكد من التصاريح لمجلد storage يمكنك من التأكد أنه يحمل التصريح 770 أو 777.1 نقطة
-
يُمكنك إنشاء أمر artisan خاص يقوم بعمل النُسخة التي تريدها عند تنفيذه و لإنشاء ذلك الأمر نقوم بدايةً بتنفيذ الأمر التالي: php artisan make:command DatabaseBackUp سيُنشئ لك الأمر صنف بالإسم DatabaseBackUp في المسار: app/Console/Commands/DatabaseBackUp تقوم بالتعديل عليه ليُصبح بالشكل التالي: <?php namespace App\Console\Commands; use Carbon\Carbon; use Illuminate\Console\Command; class DatabaseBackUp extends Command { protected $signature = 'database:backup'; protected $description = 'create database backup'; public function __construct() { parent::__construct(); } public function handle() { $filename = "backup-" . Carbon::now()->format('Y-m-d') . ".gz"; $command = "mysqldump --user=" . env('DB_USERNAME') ." --password=" . env('DB_PASSWORD') . " --host=" . env('DB_HOST') . " " . env('DB_DATABASE') . " | gzip > " . storage_path() . "/app/backup/" . $filename; $returnVar = NULL; $output = NULL; exec($command, $output, $returnVar); } } بعد ذلك تقوم بإنشاء مُجلد backup في المسار: storage/app/backup و عندما تريد إنشاء نُسخة من قاعدة البيانات فقط تقوم بتنفيذ الأمر: php artisan database:backup و هذا الأمر سيقوم بإنشاء نُسخة من قاعدة البيانات بنفس تاريخ تنفيذ الأمر. في المُجلد الذي أنشأناه.1 نقطة
-
اذا ما نسخت الكود كاملا ثم رجعت ولصقته لاحقا في محرر نصوص عصري للبرمجة فلا يوجد سبب لكي لا يعمل لذا فأغلب الظن أنك لم تنسخه كاملا واذا كنت تبحث عن طريقة لنسخ الكود والابقاء على الالوان في النص البرمجي ف vscode يمتلك هذه الخاصية بحيث انه اذا نسخت الكود الى ملف word او email ستجد ان الكود حافظ على الالوان تماما كم في محرر النصوص vscode و هنا الدليل حول كيفية تفعيلها1 نقطة
-
يمكنك حفظ الكود في أي برنامج تريده ربما تكون إرتكبت خطأ عند نسخ الكود أو عند حفظه ولكن على أي حال الطريقة الأفضل في حفظ الملفات إذا كان لديك ملف ربما ستستخدمه لاحقاً قم بعمل نسخة من الملف ولا تقوم بنسخ الكود فقط أما إذا لم يكن لديك الملف علي جهازك سواء كنت تجرب كود على متصفح أو أي شيء قم بعمل نسخ للكود ثم قم بإنشاء ملف (بصيغة تتطابق الكود فمثلاً إذا كنت تنسخ كود javascript إجعل صيغة الملف كالتالي filename.js ) ثم قم بلصق الكود وحفظ الملف1 نقطة
-
في حال كان يوجد مشكلة ما في الكود، أرجو منك إرفاقه هنا حتى نتمكن من تحديد المشكلة به ومساعدتك بشكل أفضل، أما في حال قد قمت عن طريق الخطأ بحذف الكود ضمن برنامج one note يمكنك استعادة الملف عن طريق فتح الملف الذي يحوي الكود سابقاً، ثم بالضغط على Notebooks ومن قائمة Deleted Notes نختار Show Deleted Notes. وأقترح عليك استخدام محرر أكواد متخصص مثل VS code أو Atom أو غيره لأنه سيسهل عليك الكثير من العمل وستتجنب مثل هذه المشاكل في المستقبل. أما فيما يخص بنسخ ولصق الأكواد فهي تماماً كما تتعامل عادةً مع أي محتوى نصي، يمكنك تحديد الجزء الخاص من الكود والذي تريد نسخه واستخدام زر الفأرة الأيمن واختيار نسخ ولصق وكذلك عن طريق اختصارات لوحة المفاتيح Ctrl-C و Ctrl-V.1 نقطة
-
مرحبا، لايمكن الحكم على أي شخص فقط عن طريق شهاداته حتى لو كانت جامعية، في مجال البرمجة تبقى الخبرة و المهارات هي العامل الأساسي في التوظيف. بالنسبة لشهادة الأكاديمية، لن تحصل عليها إلا باجتياز الامتحان وهذا يعطيها أفضلية عن دورات أخرى. طبيعة الامتحان بعد اتمامك للدورة، سيكون عليك التواصل معنا من خلال مركز مساعدة حسوب لتحديد موعد امتحان وسيكون على الشكل التالي: اجراء محادثة صوتيّة لمدة 30 دقيقة يطرح المدرّب عليك أسئلة متعلّقة بالدورة والأمور التي نفّذتها خلالها. يحدد لك المدرّب مشروعًا مرتبطًا بما قمت به أثناء الدورة لتنفيذه خلال فترة محددة تتراوح بين أسبوع الى أسبوعين. اجراء محادثة صوتيّة أخرى لمدّة 30 دقيقة يناقش بها مشروعك وما نفذته وتطرح أسئلة خلالها. ان سارت على جميع الخطوات السابقة بشكل صحيح، تحصل على الشهادة أو يرشدك المدرّب لأماكن القصور ويطلب منك تداركها ثم التواصل معنا من جديد. بعد الانتهاء من الدورة، يمكنك البدء بتقديم عروض العمل على منصات العمل الحر مثل مستقل للفترة الأولى لتكتسب بعض الخبرة، ثم بعد فترة تقوم بالتقديم على الشركات في حال أحببت ذلك مع تقديم جميع الأعمال التي قمت بها خلال الدورة و المشاريع الخاصة. بعد اجتيازك الامتحان ستتم المتابعة معك خطوة بخطوة وتوضيح جميع الطرق التي ستسلكها للحصول على عمل. حيث أحد البنود التي توفرها لك الأكاديمية عند شرائك دورة هو: إرشاد وتوجيه أثناء فترة بحثك عن عمل: هذا هو الهدف الأساسي لجميع دورات أكاديميّة حسوب. بعد إتمامك للدورة سيتم الإطّلاع على سيرتك الذاتية من قبل المختصّين لدينا وتقديم ارشادات مخصّصة لك لتحسينها وكذلك على ملفّك الشخصي في مواقع العمل الحر. بالتوفيق1 نقطة
-
الخطة التسويقية هي بمثابة خارطة الطريق للمسوق أو حتى للعميل، فهي تدرس الأمور من مختلف النواحي من دراسة السوق Market study و دراسة المنافسين و تحليل شخصية المشتري Buyer Persona1 نقطة
-
ج 1 يعتمد رأس المال بشكل أساسي على طريقتك في إنشاء المحتوى الذي سوف بالتسويق من خلاله، هل ستقوم بذلك بنفسك أو ستقوم بشراء المحتوى من الكتاب في موقع مثل خمسات أما إذا كنت تنوي إنشاء المحتوى بنفسك فمن المرجح أن تكون تكاليف رأس المال بسيطة كشراء استضافة واسم نطاق ج2 الطريقة التي ذكرتها قد تكون أقرب إلى مجال الدروب شيبنج وهو عرض منتجات من مواقع اخرى على متجرك الخاص، إذا قمت بذلك فستكون عملية الشراء من خلال متجرك أما إذا كنت تعني التسويق بالعمولة لهذه المواقع، فطريقة الشراء ستكون من خلال النقر على رابط الأفلييت الخاص بك ومن ثم الإنتقال إلى صفحة المنتج في المتجر الذي تسوق له ج3 كلا المجالين مربحين وكلاهما يعتمدان بشكل أساسي على مدى الإقبال من قبل الزوار والأشخاص الذين يقومون بتحميل التطبيقات، لذلك يجب عليك أن تركز على المجال الذي تميل إليه بغض النظر عن الربح، فالربح يأتي في وقت لاحق. وللإضافة اريدك أن تزور تدوينتي وفيها تجد بعض المبتدئين ومقدار ماحققوه من أرباح من خلال التسويق بالعمولة https://www.3molaonline.com/2020/01/blog-post.html1 نقطة