<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" ><generator uri="https://jekyllrb.com/" version="4.3.2">Jekyll</generator><link href="https://bagusaji.com/feed.xml" rel="self" type="application/atom+xml" /><link href="https://bagusaji.com/" rel="alternate" type="text/html" /><updated>2025-11-20T02:11:21+00:00</updated><id>https://bagusaji.com/feed.xml</id><title type="html">Bagus Aji Santoso</title><author><name>Bagus Aji Santoso</name><email>bagus@bagusaji.com</email></author><entry><title type="html">Ngantor ke mvacademy</title><link href="https://bagusaji.com/ngator-ke-mvacademy/" rel="alternate" type="text/html" title="Ngantor ke mvacademy" /><published>2025-11-11T00:00:00+00:00</published><updated>2025-11-11T00:00:00+00:00</updated><id>https://bagusaji.com/ngator-ke-mvacademy</id><content type="html" xml:base="https://bagusaji.com/ngator-ke-mvacademy/"><![CDATA[<p>Hari selasa tanggal 11 November 2025, tim IT Modernvet kumpul di Jakarta untuk mendikusikan improvement plan di Q1 2026. Ini jadi kesempatan pertama saya untuk mengunjungi mvacademy yang ada di wilayah Jl. H. Samali.</p>

<h2 id="whoosh">Whoosh</h2>

<p>Transportasi yang sering saya pakai sebetulnya via travel (Lintas Travel, Bhinneka, Jackal Holidays, etc.), tapi berhubung biaya di-reimburse, ini menjadi kesempatan untuk menjajal kereta cepat.</p>

<p>Harga tiket yang bisa saya dapatkan hari ini di Rp225.000 untuk pagi dan sore harinya, sehingga total Rp450.000 hanya untuk kereta cepat. Sayangnya stasiun Tegalluar itu jauh dari rumah 😅.</p>

<p>Jarak ke Tegalluar totalnya sekitar 20km, saat pagi waktu tempuh hanya 1 jam, tapi ketika sore hampir 1.5jam karena jalanan macet, gelap dan hujan. Perjalanan dari dan ke stasiun kereta cepat nyatanya lebih makan banyak waktu daripada ke Jakarta.</p>

<h2 id="grabnow">GrabNow</h2>

<p>Saat tiba di stasiun Halim, kebetulan asya berangkat bertiga dengan rekan-rekan, kami bersama-sama naik GrabNow. Ini juga jadi pengalaman pertama saya naik GrabNow.</p>

<p>Jadi, GrabNow adalah armada resmi dari Grab. Mereka bekerjasama dengan salah satu vendor untuk menggunakan mobil listrik BYD M6. Mobil ini luar biasa mewahnya, keren. Kenyamanan yang jarang sekali saya dapatkan.</p>

<h2 id="mvacademy">mvacademy</h2>

<p>Diskusi improvement di Q1 2026 dimulai pukul 10.00 WIB sampai dengan 16.00 WIB. Diskusi yang saya pikir tidak akan memakan banyak waktu, tapi ternyata cukup alot karena banyak sekali topik yang perlu didiskusikan.</p>

<p>Selain itu, meskipun tim IT Modernvet hanya 7 orang, tapi setiap member punya kesempatan yang sama untuk menyampaikan <em>unek-unek</em> sendiri atau mengomentari ide dari member lain.</p>

<p>Denagn mekanisme seperti ini setiap ide di validasi oleh setiap member. Memakan waktu lebih lama, tapi lebih detail.</p>

<p><img src="/assets/images/posts/mvacademy/20251111_111200.jpg" alt="" /></p>]]></content><author><name>Bagus Aji Santoso</name><email>bagus@bagusaji.com</email></author><category term="wfh,wfo,modernvet" /><summary type="html"><![CDATA[Setelah sekian lama akhirnya ngantor lagi, mumpung ongkos dibayarin, sekalian Whoosh kita cobain.]]></summary></entry><entry><title type="html">Tukar Fungsi Tombol Windows dan Alt Pada Keyboard USB di MacOS</title><link href="https://bagusaji.com/switch-tombol-win-dan-alt-di-macos/" rel="alternate" type="text/html" title="Tukar Fungsi Tombol Windows dan Alt Pada Keyboard USB di MacOS" /><published>2025-10-05T00:00:00+00:00</published><updated>2025-10-05T00:00:00+00:00</updated><id>https://bagusaji.com/switch-tombol-win-dan-alt-di-macos</id><content type="html" xml:base="https://bagusaji.com/switch-tombol-win-dan-alt-di-macos/"><![CDATA[<p>Saya pribadi menggunakan Macbook Pro M1 2021 sebagai komputer utama untuk bekerja. <em>Btw</em>, ini laptop dari kantor yang meskipun rada jadul, tapi masih lebih bertenaga dibandingkan Macbook Air M1 yang saya punya. Karena saat ini masih <em>work from home</em>, saya punya <em>setup</em> sendiri. Dengan tambahan satu monitor, laptop saya biarkan stand by di sebelah layar sementara saya menghubungkan satu keyboard external dengan mouse wireless.</p>

<p>Sebetulnya kalau ada banyak duit, mau beli keyboard external Apple saja yang sudah paten koneksinya. Tapi, tahu sendiri dong harganya buset, sayang banget bisa buat beli gitar listrik. Jadi, solusi sementara ini adalah dengan menggunakan produk murah, Logitech, keyboard kabel USB sebetulnya dihubungkan dengan USB C konektor.</p>

<p>Karena ini keyboard Windows ya, jadi strukturnya seperti keyboard pada umumnya, ada tombol Ctrl, Windows, Alt diikuti spasi. Nah, strukturnya kan sedikit beda ya dengan mac di mana kalau Mac itu susunannya fn, control, option (alt) diikuti command dan spasi. Di keyboard Windows umumnya command akan aktif dengan tombol Windows. Karena agak <em>kagok</em> kalo di bahasa sunda mah, jadi saya putuskan untuk menukar fungsi kedua tombol ini. Tombol alt menggunakan Windows dan command menggunakan tombol Alt.</p>

<p>Melakukan penukaran fungsi tombol tidak sulit, cukup buka  → System Settings → Keyboard</p>

<ul>
  <li>
    <p>Scroll ke paling bawah dan klik “Modifier Keys…”.</p>
  </li>
  <li>
    <p>Di bagian atas kita akan melihat dropdown untuk memilih keyboard, di sini sudah otomatis terpilih USB keyboard.</p>
  </li>
  <li>
    <p>Tukarkan opsi Option dengan Command.</p>
  </li>
</ul>

<p><img src="/assets/images/posts/modifier-keyboard.png" alt="" /></p>]]></content><author><name>Bagus Aji Santoso</name><email>bagus@bagusaji.com</email></author><category term="macos,ios" /><summary type="html"><![CDATA[Artikel ini membahas cara menukar fungsi tombol Windows dan Alt pada keyboard USB di sistem operasi MacOS.]]></summary></entry><entry><title type="html">Compiler, Linter dan Library</title><link href="https://bagusaji.com/compiler-linter-and-library/" rel="alternate" type="text/html" title="Compiler, Linter dan Library" /><published>2025-08-02T00:00:00+00:00</published><updated>2025-08-02T00:00:00+00:00</updated><id>https://bagusaji.com/compiler-linter-and-library</id><content type="html" xml:base="https://bagusaji.com/compiler-linter-and-library/"><![CDATA[<div class="rounded-2xl border border-gray-100 pt-6 pb-2 px-6">
  <h3 class="text-lg lg:text-lg font-medium text-gray-900 mt-0 lg:mt-0">Artikel ini adalah salah satu bagian dari seri <span class="font-bold">Belajar Pemrograman C++ untuk Pemula</span>.</h3>
  <ol class="pt-1">
    
      
        <li>
          <a href="/cpp-intro/">Pendahuluan Belajar Bahasa Pemrograman C++</a>
        </li>
      
    
      
        <li>
          <a href="/tentang-program-dan-pemrograman/">Tentang Program dan Bahasa Pemrograman</a>
        </li>
      
    
      
        <li>
          <a href="/perkenalan-dengan-cpp/">Perkenalan dengan C/C++</a>
        </li>
      
    
      
        <li>
          <a href="/perkenalan-cpp-development/">Perkenalan dengan C/C++ Development</a>
        </li>
      
    
      
        <li>
          <em>Compiler, Linter dan Library</em>
        </li>
      
    
  </ol>
</div>

<p>Melanjutkan diskusi dari diagram pada pembahasan sebelumnya, kita akan bahas langkah 4-7.</p>

<p><img src="/assets/images/cpp/Development-min.png" alt="" /></p>

<h2 id="langkah-4-kompilasi">Langkah 4: Kompilasi</h2>

<p>Untuk mengubah <em>source code</em> C++ menjadi sebuah program kita gunakan <strong>C++ compiler</strong>. Sebuah compiler akan membaca setiap source code (.cpp) secara berurutan lalu melakukan dua hal:</p>

<p>Pertama, compiler akan memeriksa bila kode C++ yang ditulis mengikuti aturan-aturan yang sudah ditentukan. Jika tidak, maka compiler akan memberikan sebuah error (dan informasi nomor barisnya) untuk memberitahu dimana masalahnya. Proses kompilasi akan dihentikan sampai error diperbaiki.</p>

<p>Kedua, compiler akan menerjemahkan kode C++ menjadi instruksi bahasa mesin. Instruksi ini kemudian disimpan dalam sebuah file yang disebut sebagai <strong>object file</strong>. Object file berisi data lain yang diperlukan atau yang berguna bagi langkah-langkah berikutnya (termasuk data yang dibutuhkan oleh linker di step 5 dan untuk debugging di step 7).</p>

<p>Object file biasanya memiliki nama file.o atau file.obj, dimana file akan mengikuti nama kode sumber file <code class="language-plaintext highlighter-rouge">.cpp</code>.</p>

<p>Sebagai contoh bila program memiliki 3 file <code class="language-plaintext highlighter-rouge">.cpp</code>, maka compiler akan membuat tiga object file:</p>

<p><img src="/assets/images/cpp/CompileSource-min.png" alt="" /></p>

<p>Compiler C++ tersedia untuk banyak sistem operasi. Kita akan bahas bagaimana memasang compiler sebentar lagi.</p>

<h2 id="langkah-5-linking">Langkah 5: Linking</h2>

<p>Setelah proses kompilasi selesai dengan sukses, ada proses lain yang dijalankan oleh sebuah program yang disebut dengan <strong>linker</strong>. Tugas linker adalah mengelompokkan semua <strong>object file</strong> untuk menghasilkan outpul file yang diinginkan (misalnya file <em>executeable</em> yang bisa kita jalankan). Prosesnya tadi disebut dengan <em>linking</em>. Apabila ada proses <em>linking</em> yang gagal, maka <strong>linker</strong> akan memberikan pesan error yang memberitahukan masalahnya lalu menghentikan proses yang dilakukan.</p>

<p>Linker pertama-tama akan membaca setiap <em>object file</em> yang dibuat oleh compiler untuk memastikan semuanya valid.</p>

<p>Lalu, linker akan memastikan semua <em>dependencies</em> yang dibutuhkan juga bisa diakses dengan benar. Contoh, bila kita membuat sesuatu di salah satu file .cpp, lalu menggunakannya difile .cpp yang lain, linker akan mengelompokkan keduanya. Apabila linker tidak bisa mencari setiap kebutuhan tersebut, maka kita akan dapatkan <em>linker error</em>.</p>

<p>Ketiga, linker biasanya akan akan mengelompokkan <em>library files</em>, koleksi dari <em>precompiled code</em> yang dipaketkan agar bisa dipakai ulang oleh program lain.</p>

<p>Terkahir, linker akan menghasilkan output file yang diinginkan. Biasanya file ini merupakan file <em>executeable</em> dan bisa dijalankan (tapi bisa juga sebuah file library yang bisa dipakai program lain tergantung bagaimana kita mengatur suatu project).</p>

<p><img src="/assets/images/cpp/LinkingObjects-min.png" alt="" /></p>

<h2 id="standard-library">Standard Library</h2>

<p>C++ memiliki sesuatu yang dinamakan <strong>C++ Standard Library</strong> (sering disebut saja dengan “the standard library”) yang merupakan fitur-fitur yang siap dipakai di program yang kita buat. Salah satu standard libary yang paling sering dipakai adalah Input/Output atau sering juga disebut dengan “iostream” dan berisi beragam fungsi untuk menampilkan teks di monitor atau menerima input dari keyboard.</p>

<p>Hampir setiap program C++ pasti akan memanfaatkan standard library sehingga sangat umum untuk di linked ke program yang kita buat. Mayoritas linker C++ diatur untuk terhubung dengan standard library secara otomatis sehingga hal ini secara umum tidak perlu kita pikirkan.</p>

<h2 id="library-pihak-ketiga">Library Pihak Ketiga</h2>

<p><strong>Third party libraries</strong> alias library pihak ketiga adalah library yang dibuat orang lalu didistribusikan sebagai produk independen (yang bukan bagian dari C++ standard library). Contoh, bila kita ingin membuat program yang memainkan suara, maka C++ standard library tidak akan memiliki fungsi tersebut. Meskipun kita bisa menulis sendiri program untuk membaca file suara, memastikan file tersebut valid, atau bagaimana memainkan data suara tersebut ke speaker, semuanya adalah pekerjaan yang akan memakan banyak waktu! Oleh karena itu, seringkali kita akan mencari jika sudah pernah ada library yang memenuhi kebutuhan tersebut sebelum menulis semuanya sendiri.</p>

<h2 id="building">Building</h2>

<p>Karena ada beberapa langkah, istilah <em>building</em> sering dipakai untuk menggambarkan keseluruhan proses mengubah file <em>source code</em> menjadi <em>executable</em> yang bisa dijalankan. File-file <em>executable</em> yang dihasilkan dari proses <em>building</em> biasa disebut sebagai <strong>build</strong>.</p>

<p>Untuk project yang kompleks, program <em>build automation</em> (seperti <code class="language-plaintext highlighter-rouge">make</code> atau <code class="language-plaintext highlighter-rouge">build2</code>) sering dipakai untuk mengotomasi proses <em>building</em> dan menjalankan <em>automated test</em>. Meskipun program seperti itu <em>powerful</em> dan <em>fleksibel</em>, karena bukan bagian dari inti dari bahasa pemrograman C++, juga tidak wajib dipakai, kita tidak akan membahasnya di seri tutorial ini.</p>

<h2 id="langkah-6--7-testing-dan-debugging">Langkah 6 &amp; 7: Testing dan Debugging</h2>

<p>Inilah bagian paling seru! Sekarang kita sudah bisa menjalankan file <em>executable</em> dan melihat apa yang bisa ia lakukan!</p>

<p>Setelah program bisa dijalankan, maka bisa kita uji. Pengujian atau <em>testing</em> merupakan proses memastikan bahwa program yang dibuat berjalan seperti seharusnya. Pengujian sederhana biasanya terdiri dari memasukkan kombinasi masukan untuk melihat apakah program tersebut bisa berjalan dengan normal dengan berbagai kasus.</p>

<p>Bila program tidak berjalan dengan seharusnya, maka kita harus melakukan proses <strong>debugging</strong>, yaitu proses mencari dan memperbaiki error dalam pemrograman.</p>

<p>Kita akan diskusikan tentang <em>testing</em> dan <em>debugging</em> secara lebih detail di pembahasan mendatang.</p>

<h2 id="integrated-development-environments-ides">Integrated development environments (IDEs)</h2>

<p>Langkah 3, 4, 5, dan 7 semua membutuhkan progarm yang harus dipasang (<em>editor, compiler, linker, debugger</em>). Meskipun kita bisa memasang setiap program secara terpisah, ada satu paket program khusus yang dikenal dengan nama <strong>integrated development environment (IDE)</strong> yang sudah memiliki kesemua program tersebut. Kita akan diskusikan tentang IDE, cara memasangkan di pembahasan sesudah ini.</p>]]></content><author><name>Bagus Aji Santoso</name><email>bagus@bagusaji.com</email></author><category term="cpp" /><summary type="html"><![CDATA[Artikel ini membahas tentang proses kompilasi, linking dan penggunaan library dalam bahasa pemrograman C++.]]></summary></entry><entry><title type="html">Cara Convert Video File TS ke MP4 dengan Command line</title><link href="https://bagusaji.com/convert-video-file-ts-to-mp4/" rel="alternate" type="text/html" title="Cara Convert Video File TS ke MP4 dengan Command line" /><published>2025-08-01T00:00:00+00:00</published><updated>2025-08-01T00:00:00+00:00</updated><id>https://bagusaji.com/convert-video-file-ts-to-mp4</id><content type="html" xml:base="https://bagusaji.com/convert-video-file-ts-to-mp4/"><![CDATA[<div class="rounded-2xl border border-gray-100 pt-6 pb-2 px-6">
  <h3 class="text-lg lg:text-lg font-medium text-gray-900 mt-0 lg:mt-0">Artikel ini adalah salah satu bagian dari seri <span class="font-bold">Belajar Menggunakan Command Line Interface</span>.</h3>
  <ol class="pt-1">
    
      
        <li>
          <a href="/belajar-command-line/">Belajar Menggunakan Command Line Interface</a>
        </li>
      
    
      
        <li>
          <a href="/menggunakan-perintah-pwd/">Menggunakan Perintah pwd</a>
        </li>
      
    
      
        <li>
          <a href="/membuat-direktori-baru-dengan-mkdir/">Membuat Direktori Baru dengan mkdir</a>
        </li>
      
    
      
        <li>
          <a href="/menggunakan-perintah-cd/">Menggunakan Perintah cd</a>
        </li>
      
    
      
        <li>
          <a href="/melihat-isi-direktori-dengan-ls/">Melihat Isi Direktori Dengan ls</a>
        </li>
      
    
      
        <li>
          <a href="/melihat-file-type/">Melihat Tipe File dengan Perintah `file` di Linux</a>
        </li>
      
    
      
        <li>
          <a href="/sekilas-tentang-relative-path/">Sekilas Tentang Relative Path</a>
        </li>
      
    
      
        <li>
          <a href="/cp-untuk-menyalin-file/">Menggunakan cp Untuk Menyalin File</a>
        </li>
      
    
      
        <li>
          <a href="/mv-untuk-memindah-file-dan-rename/">Menggunakan mv Untuk Memindah File dan Rename</a>
        </li>
      
    
      
        <li>
          <a href="/extract-pdf-dengan-pdftk/">Extract Dokumen PDF dengan pdftk</a>
        </li>
      
    
      
        <li>
          <a href="/rm-untuk-menghapus-file/">Menggunakan rm Untuk Menghapus File</a>
        </li>
      
    
      
        <li>
          <em>Cara Convert Video File TS ke MP4 dengan Command line</em>
        </li>
      
    
  </ol>
</div>

<p>Beberapa waktu yang lalu, saya mendapatkan sebuah file dengan beberapa file video berjenis <code class="language-plaintext highlighter-rouge">.ts</code>. Meskipun seharusnya VLC bisa memutarnya, tapi entah kenapa VLC yang ada di MacBook ini benar-benar tidak bisa memutarnya.</p>

<p>Solusi lain ialah dengan menggunakan alternatif video player yang lain seperti Elmedia, <em>buuut</em> subtitlenya ternyata tidak punya shadow sehingga sulit sekali dibaca kalau background video-nya terang.</p>

<p>Maka, solusi terkahir adalah dengan mengubah file <code class="language-plaintext highlighter-rouge">.ts</code> tadi menjadi file <code class="language-plaintext highlighter-rouge">.mp4</code>. Cara convert video file <code class="language-plaintext highlighter-rouge">.ts</code> ke <code class="language-plaintext highlighter-rouge">.mp4</code> lewat command line ternyata tidak sulit. Syaratnya kita hanya perlu memiliki ffmpeg terpasang.</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>for f in *.ts; do ffmpeg -i "$f" -c copy "${f%.ts}.mp4"; done
</code></pre></div></div>

<p>Perintah di atas bila dijalankan di dalam suatu folder, akan membaca semua file, lalu secara otomatis membuat file <code class="language-plaintext highlighter-rouge">.mp4</code> dengan nama file yang sama dari sebuah file <code class="language-plaintext highlighter-rouge">.ts</code>. Prosesnya pun ternyata sangat cepat, bahkan tidak sampai 5 menit untuk video hampir berukuran 1GB.</p>]]></content><author><name>Bagus Aji Santoso</name><email>bagus@bagusaji.com</email></author><category term="cli" /><summary type="html"><![CDATA[Artikel ini membahas trik convert video file ts ke mp4 lewat command line]]></summary></entry><entry><title type="html">Apa yang dimaksud dengan Continuous Integration dan Continuous Deployment (CI/CD)?</title><link href="https://bagusaji.com/apa-itu-continuous-integration-dan-continuous-deployment/" rel="alternate" type="text/html" title="Apa yang dimaksud dengan Continuous Integration dan Continuous Deployment (CI/CD)?" /><published>2025-07-25T00:00:00+00:00</published><updated>2025-07-25T00:00:00+00:00</updated><id>https://bagusaji.com/apa-itu-continuous-integration-dan-continuous-deployment</id><content type="html" xml:base="https://bagusaji.com/apa-itu-continuous-integration-dan-continuous-deployment/"><![CDATA[<p>Hari ini kita akan membahas tentang konsep <em>continuous integration</em> dan <em>continuous deployment</em> atau yang lebih sering dibahas dengan singkatannya yaitu CI/CD.</p>

<h2 id="apa-itu-cicd">Apa itu CI/CD?</h2>

<p>Secara sederhana, <strong>Continuous Integration</strong> (CI) adalah proses dimana developer melakukan <em>merge</em> setiap perubahan yang mereka lakukan ke sebuah repository. Setiap <em>merge</em> akan secara otomatis menjalankan proses build dan proses. Ide utamanya ialah untuk mendapatkan error lebih cepat sehingga bisa memperbaikinya segera sehingga memastikan <em>codebase</em> selalu dalam kondisi terbaik.</p>

<p>Sementara itu <strong>Continuous Deployment</strong> (CD) akan melanjutkan proses sebelumnya untuk secara otomatis melakukan <em>deploy</em> pada setiap <em>automated test</em> ke <em>production</em> (atau environment manapun). Hal ini membuat software yang kita buat selalu memiliki rilis terbaru.</p>

<h2 id="mengapa-menerapkan-cicd">Mengapa menerapkan CI/CD?</h2>

<p>CI/CD membantu kita menemukan bug lebih cepat, mengurangi masalah integrasi, memastikan kode yang di push selalu dalam kondisi siap di deploy. Apalagi, proses ini semuanya berjalan secara otomatis sehingga meurangi waktu dan <em>effort</em> untuk melakukan semua proses deployment.</p>

<h2 id="bagiamana-cara-kerja-cicd">Bagiamana cara kerja CI/CD?</h2>

<ul>
  <li><strong>Commit</strong>: Pertama kita melakukan perubahan kode lalu melakukan <em>commit</em>.</li>
  <li><strong>Push</strong>: Lalu perubahan di atas kita upload ke <em>repository</em> bersama. Proses ini bisa dilakukan dengan push biasa (bila punya hak akses) atau biasanya akan melalui proses <em>peer review</em> lewat mekanisme <em>pull request</em> atau <em>merge request</em>.</li>
  <li><strong>Automated Build</strong>: Ketika kode yang kita tulis sudah masuk ke repository, maka server CI akan mengambil perubahan terakhir lalu melakukan proses build. Proses ini memastikan perubahan sebelumnya bis terinterasi dengan kode sekarang.</li>
  <li><strong>Automated Test</strong>: Bila build sudah sukses, maka server CI selanjutnya akan melakukan <em>automated test</em> (meskipun dalam beberapa kasus bisa saja suatu project tidak menerapkannya).</li>
  <li><strong>Feedback</strong>: Bila terjadi error yang menyebabkan proses gagal ataupun ketika prosesnya berhasil dengan benar, server CI akan memberikan informasi. Informasi ini bisa lewat email, notifikasi slack, notifikasi telegram, atau lewat berbagai kanal lain. Pada umumnya server CI akan mendukung banyak cara untuk memberikan <em>feedback</em> agar developer mendapat informasi terbaru dengan cepat.</li>
  <li><strong>Deploy</strong>: Apabila proses build sukses, maka selanjutnya adalah deployment. Kita bisa mengaturnya agar masuk ke server staging untuk pengujian <em>end to end</em> atau bahkan mengaturnya masuk ke server production.</li>
</ul>

<h2 id="solusi-cicd">Solusi CI/CD</h2>

<ul>
  <li>Github Actions: Solusi CI dari Github yang terintegrasi dengan setiap repository.</li>
  <li>Gitlab CI/CD: Mirip seperti Github, Gitlab pun memiliki layanan CI.</li>
  <li>Jenkins: Server otomasi <em>open source</em>. Meskipun gratis harus punya pengetahuan tentang server secara umum agar bisa di setup.</li>
  <li>Travis CI: Server CI cloud-based yang mudah di integrasikan dengan GitHub.</li>
  <li>CircleCI: Solusi pihak ketiga lain yang mudah di integrasikan dengan GitHub, GitLab, maupun Bitbucket.</li>
  <li>BitRise: Solusi CI/CD untuk mobile development.</li>
  <li>CodeMagic: Mirip seperti BitRise juga untuk mobile development.</li>
</ul>

<p>Implementasi CI/CD sangat direkomendasikan baik untuk web maupun mobile app. Bila belum pernah punya pengalaman, saran penulis cobalah dengan GitHub Actions karena sudah tersedia langsung di GitHub. Secara pribadi penulis pernah menggunakan GitHub, GitLab, Jenkins dan BitRise. Setiap layananan punya kelebihan dan kekurangan masing-masing, tapi tujuan akhirnya sama, meminimalisir kerja developer setelah melakukan push code sampai bisa ter-deploy ke server.</p>]]></content><author><name>Bagus Aji Santoso</name><email>bagus@bagusaji.com</email></author><category term="cicd" /><summary type="html"><![CDATA[Artikel ini akan menjawab secara singkat pertanyaan tentang apa itu CI/CD?]]></summary></entry><entry><title type="html">Perkenalan dengan C/C++ Development</title><link href="https://bagusaji.com/perkenalan-cpp-development/" rel="alternate" type="text/html" title="Perkenalan dengan C/C++ Development" /><published>2025-07-15T00:00:00+00:00</published><updated>2025-07-15T00:00:00+00:00</updated><id>https://bagusaji.com/perkenalan-cpp-development</id><content type="html" xml:base="https://bagusaji.com/perkenalan-cpp-development/"><![CDATA[<div class="rounded-2xl border border-gray-100 pt-6 pb-2 px-6">
  <h3 class="text-lg lg:text-lg font-medium text-gray-900 mt-0 lg:mt-0">Artikel ini adalah salah satu bagian dari seri <span class="font-bold">Belajar Pemrograman C++ untuk Pemula</span>.</h3>
  <ol class="pt-1">
    
      
        <li>
          <a href="/cpp-intro/">Pendahuluan Belajar Bahasa Pemrograman C++</a>
        </li>
      
    
      
        <li>
          <a href="/tentang-program-dan-pemrograman/">Tentang Program dan Bahasa Pemrograman</a>
        </li>
      
    
      
        <li>
          <a href="/perkenalan-dengan-cpp/">Perkenalan dengan C/C++</a>
        </li>
      
    
      
        <li>
          <em>Perkenalan dengan C/C++ Development</em>
        </li>
      
    
      
        <li>
          <a href="/compiler-linter-and-library/">Compiler, Linter dan Library</a>
        </li>
      
    
  </ol>
</div>

<p>Sebelum kita bisa menulis dan mengeksekusi program C++, kita perlu memahami bagaimana sebuah program C++ dikembangkan. Berikut diagram yang menggambarkan prosesnya secara sederhana:</p>

<p><img src="/assets/images/cpp/Development-min.png" alt="" /></p>

<h2 id="langkah-1-tentukan-masalah-yang-akan-diatasi">Langkah 1: Tentukan masalah yang akan diatasi</h2>

<p>Ditahap yang pertama kita perlu menentukan masalah apa yang akan diatasi. Memikirkan ide awal akan apa program yang ingin dibuat bisa menjadi langkah termudah maupun tersulit. Tapi secara konsep, seharusnya menjadi langkah paling mudah. Semua yang kita butuhkan adalah ide yang terdefinisi dengan jelas sehingga siap untuk dipakai di proses berikutnya.</p>

<p>Berikut beberapa contoh:</p>

<ul>
  <li>“Saya ingin membuat program yang bisa menerima banyak angka lalu menghitung rata-ratanya.”</li>
  <li>“Saya ingin membuat program yang menghasilkan labirin 2D dan memungkinkan pengguna mengeksplornya. Pengguna akan menang bila mencapat ujung labirin.”</li>
  <li>“Saya ingin membuat program yang membaca sebuah file berisi harga saham lalu memprediksi apakah saham tersebut naik atau turun.”</li>
</ul>

<h2 id="langkah-2-tentukan-bagiamana-menyelesaikan-masalahnya">Langkah 2: Tentukan bagiamana menyelesaikan masalahnya:</h2>

<p>Pada langkah ini, kita menentukan bagaimana kita ingin menyelesaikan masalah yang kita tentukan di langkah 1.  Langkah ini pula yang mengandung <em>software development</em> paling banyak. Ada banyak solusi akan suatu masalah, namun hanya beberapa solusi yang cukup baik sementara solusi lain tidak. Seringkali saat programmer mendapat sebuah ide, mereka duduk dan langsung menulis solusi untuk masalah tersebut. Hal ini bisa menghasilkan solusi yang justru jatuh ke kategori yang buruk.</p>

<p>Solusi yang baik pada umumnya mengandung beberapa hal:</p>

<ul>
  <li>Jelas (tidak terlalu kompleks atau membingungkan).</li>
  <li>Terdokumentasi (terutama mengenai asumsi atau limitasinya).</li>
  <li>Modular, artinya bagian-bagian program tersebut bisa dipakai ulang atau diganti tampa mempengaruhi bagian lain dari program.</li>
  <li>Dapat memberikan pesan error yang berguna bagi pengguna saat hal buruk terjadi.</li>
</ul>

<p>Saat duduk dan langsung menulis program, kita biasanya akan memikirkan “Saya akan melakukan <sesuatu>", akhirnya solusi yang diimplementasikan adalah yang paling cepat. Hasil dari proses ini bisa berupa program yang kurang baik, sulit diubah atau diperbarui nantinya atau malah punya banyak **bug**. Sebuah bug adalah *error programming* yang membuat program tidak bekerja dengan benar.</sesuatu></p>

<blockquote>
  <p>Istilah bug pertama kali dilakukan Thomas Edison tahun 1870an! Namun, istilah tersebut dipopulerkan pada tahun 1940 saat engineer menemukan seekor ngengat yang tersangkut di perangkat keras komputer generasi pertama saat itu yang menyebabkan konsleting. Baik buku dimana error tersebut dicatat dan ngengat yang tersangkut kini menjadi bagian dari Smithsonian Museum of American History. Lihat keduanya <a href="https://americanhistory.si.edu/collections/nmah_334663">di sini</a>.</p>
</blockquote>

<p>Banyak penelitian mengungkapkan bahwa dalam suatu sistem software yang kompleks, hanya 10-40% waktu yang dihabiskan programmer untuk menulis program. 60-90% waktu dipakai untuk <em>maintenance</em> yang dapat terdiri atas <strong>debugging</strong> (memperbaiki bug), melakukan perubahan (misalnya agar bisa berjalan di OS yang baru), peningkatan kualitas (perubahan kecil untuk <em>usability</em> atau <em>capability</em>-nya, atau <em>internal improvement</em> (agar lebih andal dan mudah di <em>maintain</em>)).</p>

<p>Akibatnya, penting agar mengalokasikan waktu lebih di awal (sebelum mulai koding) untuk memikirkan solusi terbaik dalam mengatasi suatu masalah, asumsi-asumsi dan rencana ke depan dalam rangka menghemat banyak waktu dan menghindari kesulitan di masa depan.</p>

<p>Kita akan berbicara lebih banyak tentang bagaimana mengatasi suatu permasalahan di pelajaran lain.</p>

<h2 id="langkah-3-menulis-progam">Langkah 3: Menulis Progam</h2>

<p>Untuk menulis sebuah program, kita membutuhkan dua hal: pertama adalah pengetahuan dari sebuah bahasa pemrograman, itulah tujuan utama tutorial ini! Kedua, kita perlu sebuah <em>text editor</em> untuk menulis dan menyimpan program C++ kita. Instruksi C++ yang kita tulis ke sebuah <em>text editor</em> disebut sebagai <em>source code</em> (atau sering disingkat <em>code</em>). Kita bisa menulis program dengan <em>text editor</em> apa saja misalnya seperti notepad milik Windows atau dengan vi atau pico yang ada di Unix.</p>

<p>Sebuah program yang ditulis dengan <em>text editor</em> biasa mungkin akan terlihat seperti ini:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>#include &lt;iostream&gt;

int main()
{
    std::cout &lt;&lt; "Here is some text.";
    return 0;
}
</code></pre></div></div>

<p>Namun, penulis sangat menyarankan pembaca untuk menggunakan editor yang memang didesain untuk programming (disebut <em>code editor</em>). Jangan risau jika belum punya. Kita akan bahas bagaimana cara memasang sebuah <em>code editor</em> nanti.</p>

<p>Editor yang didesain untuk koding memiliki beberapa fitur yang membuat pemrograman jadi lebih mudah dilakukan, diantaranya:</p>

<ul>
  <li>Line numbering. Penomoran baris sangat berguna karena saat terjadi error, <em>compiler</em> bisa membantu memberitahu di baris berapa hal tersebut terjadi. Tanpa editor yang menampilkan nomor baris, mencari baris tertentu akan jadi sangat merepotkan.</li>
  <li>Syntax highlighting &amp; coloring. Syntax highlighting membantu merubah warna dari berbagai bagian dari program kita agar lebih mudah mengelompokannya.</li>
  <li>Font khusus dengan lebar yang sama (sering disebut sebagai <code class="language-plaintext highlighter-rouge">monospace font</code>). Font lain yang bukan untuk pemrograman terkadang sulit untuk membedakan mana angka 0 mana huruf O atau perbedaan antara angka 1 dengan l (huruf kecil dari L) atai huruf I (huruf kapital i). Font pemrgoraman yang baik akan memastiakn simbol-simbol ini berbeda secara visual supaya tidak terjadi kesalahan saat penggunaannya. Semua code editor biasanya akan memilih font ini secara otomatis, tapi text editor biasa bisa saja tidak memilikinya.</li>
</ul>

<p>Berikut contoh source code dengan syntax highlighting dan monospace font (line numbering tidak muncul karena di blog ini tidak diaktifkan).</p>

<div class="language-cpp highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="cp">#include</span> <span class="cpf">&lt;iostream&gt;</span><span class="cp">
</span>
<span class="kt">int</span> <span class="nf">main</span><span class="p">()</span>
<span class="p">{</span>
    <span class="n">std</span><span class="o">::</span><span class="n">cout</span> <span class="o">&lt;&lt;</span> <span class="s">"Here is some text."</span><span class="p">;</span>
    <span class="k">return</span> <span class="mi">0</span><span class="p">;</span>
<span class="p">}</span>
</code></pre></div></div>

<p>Note how much easier this is to understand than the non-highlighted version. The source code we show in this tutorial will have both line numbering and syntax highlighting to make that code easier to follow.</p>

<p>Perhatikan bagaimana sekarang akan lebih mudah membaca kode dengan format khusus dibandingkan teks biasa.</p>

<blockquote>
  <p>Lihat <a href="https://www.codingfont.com/">Coding Font</a> and <a href="https://www.programmingfonts.org/">Programming Fonts</a> untuk mencari font pemrograman yang bagus.</p>
</blockquote>

<p>Banyak program C++ sederhana hanya terdiri dari satu file, tapi program C++ yang lebih kompleks bisa memiliki ratusan bahkan ribuan file.</p>

<p>Setiap source code yang dibuat perlu disimpan sehingga membutuhkan sebuah nama file. Program C++ tidak memiliki aturan khusus untuk penamaan file. Akan tetapi, standar yang paling umum digunakan untuk menulis program C++ adalah dengan menyimpannya ke dalam file <code class="language-plaintext highlighter-rouge">main.cpp</code>. Nama file <code class="language-plaintext highlighter-rouge">main</code> mempermudah orang menebak isi dari file tersebut, sementara akhiran <code class="language-plaintext highlighter-rouge">.cpp</code> menandakan bahwa isi file tersebut adalah kode program C++.</p>

<p>Terkadang kita juga bisa menemukan file yang dinamakan sesuai nama programnya (misal <code class="language-plaintext highlighter-rouge">calculator.cpp</code>, atau <code class="language-plaintext highlighter-rouge">poker.cpp</code>). Kita juga bisa menemukan akhiran lain yang dipakai seperti <code class="language-plaintext highlighter-rouge">.cc</code> atau <code class="language-plaintext highlighter-rouge">.cxx</code>.</p>

<p>Setelah menulis program, langkah selanjutnya adalah mengubah source code menjadi sesuatu yang bisa dijalankan dan melihat bila program tersebut bisa dieksekusi dengan benar. Kita akan diskusikan di pelajaran selanjutnya.</p>]]></content><author><name>Bagus Aji Santoso</name><email>bagus@bagusaji.com</email></author><category term="cpp" /><summary type="html"><![CDATA[Kita akan mulai mengenal lingkungan development untuk bahasa pemrograman C++.]]></summary></entry><entry><title type="html">Tentang Program dan Bahasa Pemrograman</title><link href="https://bagusaji.com/tentang-program-dan-pemrograman/" rel="alternate" type="text/html" title="Tentang Program dan Bahasa Pemrograman" /><published>2025-07-08T00:00:00+00:00</published><updated>2025-07-08T00:00:00+00:00</updated><id>https://bagusaji.com/tentang-program-dan-pemrograman</id><content type="html" xml:base="https://bagusaji.com/tentang-program-dan-pemrograman/"><![CDATA[<div class="rounded-2xl border border-gray-100 pt-6 pb-2 px-6">
  <h3 class="text-lg lg:text-lg font-medium text-gray-900 mt-0 lg:mt-0">Artikel ini adalah salah satu bagian dari seri <span class="font-bold">Belajar Pemrograman C++ untuk Pemula</span>.</h3>
  <ol class="pt-1">
    
      
        <li>
          <a href="/cpp-intro/">Pendahuluan Belajar Bahasa Pemrograman C++</a>
        </li>
      
    
      
        <li>
          <em>Tentang Program dan Bahasa Pemrograman</em>
        </li>
      
    
      
        <li>
          <a href="/perkenalan-dengan-cpp/">Perkenalan dengan C/C++</a>
        </li>
      
    
      
        <li>
          <a href="/perkenalan-cpp-development/">Perkenalan dengan C/C++ Development</a>
        </li>
      
    
      
        <li>
          <a href="/compiler-linter-and-library/">Compiler, Linter dan Library</a>
        </li>
      
    
  </ol>
</div>

<p>Komputer modern sangatlah cepat, dan terus bertambah cepat. Namun, komputer juga memiliki beberapa kekurangan: 
mereka hanya bisa memahami sejumlah instruksi yang terbatas, dan harus diberi tahu secara tepat apa yang harus dilakukan.</p>

<p>Sebuah program komputer adalah sebuah urutan instruksi yang mengarahkan komputer untuk 
melakukan beberapa aksi dalam tahapan tertentu. Program komputer biasanya ditulis dalam suatu bahasa pemrograman, 
yaitu bahasa yang dirancang untuk memudahkan penulisan instruksi untuk komputer. 
Ada banyak bahasa pemrograman yang tersedia, masing-masing ditujukan untuk kebutuhan yang berbeda. 
Aktivitas (dan seni) menulis program disebut pemrograman. 
Kita akan membahas lebih spesifik tentang bagaimana membuat program dalam C++ di pelajaran-pelajaran 
berikutnya.</p>

<p>Ketika sebuah komputer melakukan langkah-langkah yang dijelaskan oleh instruksi dalam sebuah program komputer, 
kita katakan bahwa komputer itu berjalan atau mengeksekusi program tersebut. 
Sebuah komputer tidak akan mulai mengeksekusi program sampai diberi tahu untuk melakukannya. 
Biasanya, hal ini memerlukan pengguna untuk menjalankan (atau menjalankan atau mengeksekusi yang bisa dilakukan dengan memanggil nama program lewat antarmuka teks atau klik dua kali saat menggunakan antarmuka grafis) program, 
meskipun program juga dapat dijalankan oleh program lain.</p>

<p>Program dijalankan pada <strong>perangkat keras</strong> komputer, yang terdiri dari komponen fisik yang membentuk komputer. 
Perangkat keras yang umum ditemukan pada perangkat komputasi termasuk:</p>

<ul>
  <li>Sebuah CPU (central processing unit, sering disebut “otak” dari komputer), yang tugas aslinya adalah meneksekusi instruksi.</li>
  <li>Memori, dimana program komputer di muat sebelum dieksekusi.</li>
  <li>Perangkat interaktif (misalnya monitor, layar sentuh, keyboard atau moues) yang memungkinkan pengguna berinteraksi dengan komputer.</li>
  <li>Perangkat penyimpanan (misalnya hard drive, SSD, atau flash memory) yang menyimpan informasi (termasuk program yang terpasang) bahkan ketika komputer dimatikan.</li>
</ul>

<p>Istilah software secara umum mengarah pada program pada sebuah sistem yang didesain agar bisa dieksekusi disuatu perangkat keras.</p>

<p>Dalam komputasi modern, program dapat berinteraksi dengan program lain juga, bukan hanya perangkat keras. Sementara itu istilah <strong>platform</strong> mengacu pada sekelompok perangkat keras dan software (OS, browser, dll.) yang memberikan ruang bagi suatu software untuk berjalan. Contohnya, “PC” adalah istilah yang mengacu pada platform yang terdiri atas sebuah sistem operasi Windows dengan CPU x86.</p>

<p>Platform biasanya menyediakan layanan yang bisa dipakai oleh program yang berjalan. Sebagai contoh, aplikasi desktop mungkin meminta sistem operasi memberikan mereka memori kosong, membuat file baru, atau memutar suara. Program yang berjalan tidak perlu tahu bagaimana hal ini sebenarnya difasilitasi. Jika sebuah program menggunakan layanan yang disediakan oleh platform, maka program tersebut menjadi bergantung pada platform itu, dan tidak dapat dijalankan di platform lain tanpa modifikasi. Program yang dapat dengan mudah dipindahkan dari satu platform ke platform lain dikatakan <strong>portabel</strong>. Tindakan memodifikasi program agar dapat berjalan di platform yang berbeda disebut <strong>porting</strong>.</p>

<p>Sekarang setelah kita membahas tentang program, mari kita diskusikan bahasa pemrograman. Kita tidak akan hanya membahas sejarah, tapi juga akan memperkenalkan terminologi yang akan muncul dalam pelajaran-pelajaran mendatang.</p>

<h2 id="bahasa-mesin">Bahasa Mesin</h2>

<p>CPU tidak dapat memahami kode yang ditulis dengan C++. Ia hanya memahami instruksi yang ditulis dalam <strong>bahasa mesin</strong>. Sekelompok instruksi yang dapat dimengerti oleh suatu CPU disebut sebagai <strong>instruction set</strong>.</p>

<p>Berikut contoh instruksi bahasa mesin: <code class="language-plaintext highlighter-rouge">10110000 01100001</code>.</p>

<p>Setiap instruksi dipahami oleh CPU sebagai sebuah perintah untuk melakukan satu tugas spesifik, misalnya “bandingkan dua angka ini”, atau “salin angka ini ke lokasi memori”. Dulu saat komputer pertama kali diciptakan, programmer harus menulis program langsung dengan bahasa mesin yang mana sangat sulit dan memakan waktu.</p>

<p>Bagaimana cara kerja instruksi dalam bahasa mesin ini dikelola dan dipahami oleh CPU diluar pembahasan tutorial yang akan kita sama-sama pelajari ini, tapi penting juga untuk memahami bebarapa hal, diantaranya:</p>

<p>Satu, setiap instruksi terdiri atas sekelompok angka 1 dan 0. Setiap angka 0 dan 1 ini disebut dengan <strong>digit biner</strong> atau singkatnya <strong>bit</strong>. Panjang bit dalam instruksi sebuah bahasa mesin bisa bervariasi – contoh, beberapa CPU memproses instruksi yang akan selalu 32 bit panjangnya, sementara ada beberapa CPU (contohnya dari keluarga x86 yang mungkin pembaca pakai) memiliki instruksi yang panjangnya bisa bervariasi.</p>

<p>Dua, setiap keluarga CPU yang kompatibel (contoh x86 dan arm64) memiliki bahasa mesinnya masing-masing tidak tidak bisa dipakai oleh bahasa mesin dari CPU yang lain. Artinya program yang ditulis untuk satu keluarga CPU tidak bisa dijalankan di jenis CPU yang berbeda.</p>

<blockquote>
  <p>Keluarga CPU memiliki istilah formal yaitu “instruction set architecture” (ISA). Pembaca bisa melihat daftar keluarga CPU yang tersedia di <a href="https://en.wikipedia.org/wiki/Comparison_of_instruction_set_architectures#Instruction_sets">Wikipedia</a></p>
</blockquote>

<h2 id="bahasa-assembly">Bahasa Assembly</h2>

<p>Instruksi bahasa mesin (seperti <code class="language-plaintext highlighter-rouge">10110000 01100001</code>) ideal bagi sebuah CPU, tapi sulit diipahami manusia. Karena mayoritas program (setidaknya secara historis) selalu ditulis dan dikelola oleh manusia, masuk akal jika bahasa pemrograman haursnya didesain untuk bisa digunakan oleh manusia.</p>

<p><strong>Bahasa assembly</strong> (atau sering disebut assembly saja) adalah secara sederhana berfungsi sebagai bahasa mesin yang lebih mudah dibaca bagi manusia. Berikut ini kode assembly x86 untuk instruksi di atas: <code class="language-plaintext highlighter-rouge">mov al, 0x61</code>.</p>

<p>Karena CPU tidak mengerti bahasa assembly, program yang ditulis harus diterjemahkan ke dalam bahasa mesin sebelum bisa dieksekusi. Penerjemahan ini dilakukan oleh program yang disebut dengan <strong>assembler</strong>.</p>

<p>Sama halnya ketika setiap keluarga CPU punya bahasa mesin sendiri-sendiri, mereka juga punya variasi assembly masing-masing. Oleh karena itu, ada banyak jenis bahasa assembly di dunia ini. Meski secara konsep sama, setiap bahasa assembly memiliki sekelompok instruksi yang bisa berbeda-beda, aturan penamaan sendiri, dll.</p>

<h2 id="bahasa-tingkat-rendah">Bahasa Tingkat Rendah</h2>

<p>Bahasa mesin dan assembly dianggap sebagai bahasa tingkat rendah karena keduanya memberikan abstraksi minimal dari suatu arsitektur mesin. Dalam kata lain, bahasa pemrograman tersebut dibuat sespesifik mungkin terhadap <strong>instruction set</strong> sesuai arsitektur dari sistem yang akan dijalankan.</p>

<p>Bahasa tingkat rendah memiliki beberapa catatan:</p>

<ul>
  <li>
    <p>Program yang ditulis dengan bahasa tingkat rendah tidak portabel. Karena bahasa tingkat rendah didesain agak spesifik terhadap <strong>instruction set</strong> yang dimiliki oleh suatu arsitektur, maka program yang ditulis juga spesifik terhadap suatu sistem. Melakukan porting program ke arsitektur lain tidak mudah.</p>
  </li>
  <li>
    <p>Menulis program dengan bahasa tingkat rendah tidak mudah karena membutuhkan pengetahuan yang mendetail bukan hanya bahasanya, tapi juga arsitektur CPU nya. Contoh, perintah <code class="language-plaintext highlighter-rouge">mov al, 061h</code> memerlukan programmer untuk tahu bahwa <code class="language-plaintext highlighter-rouge">al</code> mengarah pada register CPU yang tersedia di satu platform ini saja, dan paham bagaimana memanfaatkan register tersebut. Di arsitektur yang berbeda, register ini mungkin punya nama yang berbeda, mempunya batasan yang berbeda atau malah tidak ada sama sekali.</p>
  </li>
  <li>
    <p>Bahasa tingkat rendah sulit dimengerti. Meskipun perintah assembly masih cukup bisa dibaca, namun tetap sulit untuk memahami secara keseluruhan apa yang sebetulnya dilakukan oleh sekelompok perintah assembly. Karena program assembly umumnya memerlukan instruksi bahkan untuk tugas paling sederhana, program tersebut biasanya akan cukup panjang.</p>
  </li>
  <li>
    <p>Sulit untuk menulis program assembly yang melakukan proses yang rumit dan kompleks karena bahasa tersebut hanya bisa memberikan fitur primitif yang terbatas. Programmer harus mengimplementasi semua fitur yang ia butuhkan sendiri.</p>
  </li>
</ul>

<p>Keuntungan utama dari bahasa tingkat rendah adalah kecepatan. Assembly masih dipakai hari ini untuk porsi dimana performa menjadi segalanya. Bahasa ini juga dipakai dibeberapa kasus, salah satunya akan kita bahas sebentar lagi.</p>

<h2 id="bahasa-tingkat-tinggi">Bahasa Tingkat Tinggi</h2>

<p>Untuk mengatasi kekurangan di atas, bahasa tingkat tinggi diciptakan seperti C, C++, dan Pascal (dan kemudian, bahasa lain seperti Java, Javascript, dan Perl).</p>

<p>Berikut ini perintah yang sama dari kode assembly di atas dalam bahasa C/C++: <code class="language-plaintext highlighter-rouge">a = 97;</code>.</p>

<p>Sama seperti program assembly yang harus diproses oleh assembler, program yang ditulis dalam bahasa tingkat tinggi harus diterjemahkan ke dalam bahasa mesin sebelum bisa di eksekusi. Ada dua cara utama untuk melakukannya, <em>compiling</em> dan <em>interpreting</em>.</p>

<p>Program C++ umumnya di-<em>compile</em>. Sebuah <strong>compiler</strong> adalah program (atau sekelompok program) yang membaca kode sumber dari suatu bahasa (biasanya bahasa tingkat tinggi) dan diterjemahkan dalam bahasa lain (biasanya bahasa tingkat rendah). Contoh, <em>compiler</em> C++ menerjemahkan kode-kode C++ menjadi kode mesin.</p>

<blockquote>
  <p>Mayoritas compiler C++ juga bisa diatur untuk menghasilkan kode assembly. Cara ini berguna saat developer ingin melihat apa yang dilakukan bagian dari suatu instruksi yang spesifik.</p>
</blockquote>

<p>Kode mesin yang dihasilkan oleh <em>compiler</em> dapat dipaketkan kedalam sebuah file <em>executable</em> (berisi instruksi bahasa mesin) yang bisa didistribusikan lalu dijalankan oleh suatu sistem operasi. Mengeksekusi file <em>executable</em> tidak memerlukan <em>compiler</em>.</p>

<p>Pada awalnya compiler masih cukup promitif yang hanya dapat menghasilkan, kode mesin atau kode assembly yang lambat dan tidak optimal. Namun, seiring dengan berjalannya waktu, <em>compiler</em> kini menghasilkan kode yang optimal, cepat dan dalam kasus tertentu lebih baik daripada apa yang manusia bisa lakukan!</p>

<p>Berikut simplifikasi proses kompilasi yang dilakukan <em>compiler</em>:</p>

<p><img src="/assets/images/cpp/Compiling-min.png" alt="" /></p>

<p>Alternatif dari <em>compiler</em> adalah <strong>interpreter</strong>, sebuah program yang mengeksekusi seperangkat instruksi secara langsung dari source code tanpa melalui proses kompilasi. Interpreter biasanya lebih fleksibel daripada compiler, tapi tidak lebih efisien karena proses <em>interpreting</em> dilakukan setiap saat program ingin dijalankan. Ini artinya interpreter harus selalu terpasang disetiap mesin yang ingin menjalankan program tersebut.</p>

<p>Berikut simplifikasi proses interpretasi yang diolakukan <em>interpreter</em>:</p>

<p><img src="/assets/images/cpp/Interpreting-min.png" alt="" /></p>

<blockquote>
  <p>Perbandingan keuntungan dari <em>compiler</em> vs <em>interpreter</em> bisa dibaca <a href="https://stackoverflow.com/a/38491646">disini</a></p>

  <p>Keuntungan lain dari program yang dikompilasi adalah distribusi program tersebut tidak membutuhkan distribusi <em>source code</em>. Dalam lingkungan yang tidak <em>open source</em>, hal ini bisa menjadi proteksi <em>intelectual property</em>.</p>
</blockquote>

<p>Mayoritas bahasa pemrograman tingkat tinggi ada yang dapat dikompilasi maupun di interpretasi. Bahasa seperti C, C++ atau Pascal dikompilasi, sementara bahasa <em>scripting</em> seperti Perl, JavaScript dan Python di interpretasi. Beberapa bahasa lain seperti Java menggunakan kombinasi keduanya. Kita akan mengeksplor <em>compiler</em> C++ dikesempatan mendatang.</p>

<h2 id="keuntungan-bahasa-tingkat-tinggi">Keuntungan Bahasa Tingkat Tinggi</h2>

<p>Bahasa tingkat tinggi dinamakan demikian karena mereka memberikan <em>high level abstraction</em> dari arsitektur di bawahnya.</p>

<p>Mari kita lihat instruksi <code class="language-plaintext highlighter-rouge">a = 97;</code>. Instruksi ini memungkinkan kita menyimpan nilai berupa angka <code class="language-plaintext highlighter-rouge">97</code> di memori, tanpa tahu dimana lokasi memori tersebut berada, atau instruksi kode mesin apa yang perlu diberitahu ke CPU untuk menyimpan hal tersebut. Bahkan tidak ada perintah <em>platform-specific</em> di instruksi tadi. <em>Compiler</em> melakukan semua hal yang dibutuhkan oleh kode C++ tadi dalam menerjemahkannya ke dalam kode mesin yang ditujukan untuk platform tertentu.</p>

<p>Bahasa tingkat tinggi memungkinkan programmer menulis program tanpa harus menguasai platform apa program tersebut berjalan. Hal ini tidak hanya memudahkan penulisan program tapi juga membuatnya relatif lebih portabel. Jika kita berhati-hati, satu program C++ akan bisa dikompilasi disemua platform yang memiliki <em>compiler</em> C++! Program yang didesain untuk bisa berjalan di berbagai platform disebut dengan <strong>cross-platform</strong>.</p>

<p><img src="/assets/images/cpp/Portability-min.png" alt="" /></p>

<blockquote>
  <p>Berikut ini</p>

  <ul>
    <li>Banyak sistem operasi seperti Microsoft Windows memberikan fitur <em>platform-specific</em> yang bisa dipakai di kode kita. Hal ini memudahkan proses penulisan untuk sistem operasi tertentu, atau mendapatkan integrasi yang lebih mendalam dari sistem operasi yang ditargetkan.</li>
    <li>Banyak library pihak ketiga yang hanya tersedia di platform tertentu saja. Jika menggunakannya, maka kita hanya bisa merilis program di platform yang didukung oleh library tersebut.</li>
    <li>Banyak <em>compiler</em> mendukung <em>extensions</em>, atau fitur-fitur yang hanya tersedia di compiler tertentu. Jika menggunakannya, maka program kita tidak bisa dikompiler oleh <em>compiler</em> lain yang tidak memiliki <em>extensions</em> yang sama tanpa modifikasi. Kita akan bahas hal ini setelah memasang sebuah <em>compiler</em>.</li>
    <li>Dalam beberapa kasus bahasa C++ memungkinkan ocmpiler untuk menentukan bagaimana sesuatu dapat terjadi. Topik ini akan kita bahas di bab 1.</li>
  </ul>

  <p>Jika hanya menargetkan satu platform, maka <em>portability</em> tidak menjadi hal penting. Tapi kebanyakan aplikasi dewasa ini didesain untuk mendukung banyak platform agar memperluas pasarnya. Contoh, aplikasi mobile yang ingin tersedia di iOS maupun Android.</p>

  <p>Bahkan bila <em>portability</em> bukan topik yang terlihat berguna, banyak aplikasi yang awalnya hanya didesain untuk satu platform (PC) akhirnya perlu di <em>porting</em> ke platform lain (Mac atau konsol) saat meraih kesuksesan atau minat. Jika tidak mulai memikirkan portability sejak awal akan ada lebih banyak tugas yang perlu dilakukan saat melakukan porting.</p>
</blockquote>

<p>Di seri tutorial ini, kita akan menghindari kode-kode yang <em>platform-specific</em> sebanyak mungkin sehingga program yang kita tulis bisa berjalan di platform manapun dengan <em>compiler</em> C++ modern.</p>

<p>Keuntungan lain dari bahasa tingkat tinggi adalah:</p>

<ul>
  <li>
    <p>Mudah di baca, ditulis dan dipelajari karena cara penulisannya lebih dekat ke bahasa manusia dan matematika dan sering kita pakai sehari-hari. Dalam banyak kasus, bahasa tingkat tinggi membutuhkan instruksi yang lebih ringkas untuk melakukan tugas yang sama dengan bahasa tingkat rendah. Contoh, di C++ kita bisa menuliskan <code class="language-plaintext highlighter-rouge">a = b * 2 + 5;</code> dalam satu baris. Di assembly, instruksi tersebut akan membutuhkan 4 sampai 6 instruksi. Hal tersebut membuat program yang ditulis dengan bahasa tingkat tinggi lebih ringkas yang membuatnya lebih mudah dipahami.</p>
  </li>
  <li>
    <p>Bahasa tingkat tinggi umumnya memiliki kemampuan lebih yang membuatnya makin mudah untuk melakukan tugas-tugas programming tertentu, seperti meminta satu blok memori untuk manipulasi teks. Sebagai contoh, hanya perlu satu instruksi untuk menentukan apakah karakter “abc” ada dalam suatu teks (dan bisa iya, ada berapa teks sampai “abc” ditemukan”). Hal ini dapat mengurangi kompleksitas.</p>
  </li>
</ul>

<p>Meskipun C++ dianggap sebagai bahasa tingkat tinggi, bahasa pemrograman baru (<em>scripting language</em>) bisa memberikan abstraksi yang lebih tinggi lagi. oleh karena itu, terkadang C++ pun dianggap sebagai “bahasa tingkat rendah” meskipun kurang akurat.</p>

<blockquote>
  <p>Catatan penulis: Dewasa ini, C++ mungkin lebih akurat bila dianggap sebagai bahasa tingkat menengah. Namun, hal tersebut juga menunjukkan salah satu kelebihan utama C++: ia mampu memberikan kemampuan untuk bekerja di tingkat abstraksi yang berbeda. Kita bisa memilih mode tingkat rendah untuk mengejar performa atau bekerja ditingkat tinggi untuk mendapatkan kemudahan.</p>
</blockquote>]]></content><author><name>Bagus Aji Santoso</name><email>bagus@bagusaji.com</email></author><category term="cpp" /><summary type="html"><![CDATA[Artikel ini memperkenalkan tentang program dan bahasa pemrograman secara umum sebagai dasar memahami C++.]]></summary></entry><entry><title type="html">Perkenalan dengan C/C++</title><link href="https://bagusaji.com/perkenalan-dengan-cpp/" rel="alternate" type="text/html" title="Perkenalan dengan C/C++" /><published>2025-07-08T00:00:00+00:00</published><updated>2025-07-08T00:00:00+00:00</updated><id>https://bagusaji.com/perkenalan-dengan-cpp</id><content type="html" xml:base="https://bagusaji.com/perkenalan-dengan-cpp/"><![CDATA[<div class="rounded-2xl border border-gray-100 pt-6 pb-2 px-6">
  <h3 class="text-lg lg:text-lg font-medium text-gray-900 mt-0 lg:mt-0">Artikel ini adalah salah satu bagian dari seri <span class="font-bold">Belajar Pemrograman C++ untuk Pemula</span>.</h3>
  <ol class="pt-1">
    
      
        <li>
          <a href="/cpp-intro/">Pendahuluan Belajar Bahasa Pemrograman C++</a>
        </li>
      
    
      
        <li>
          <a href="/tentang-program-dan-pemrograman/">Tentang Program dan Bahasa Pemrograman</a>
        </li>
      
    
      
        <li>
          <em>Perkenalan dengan C/C++</em>
        </li>
      
    
      
        <li>
          <a href="/perkenalan-cpp-development/">Perkenalan dengan C/C++ Development</a>
        </li>
      
    
      
        <li>
          <a href="/compiler-linter-and-library/">Compiler, Linter dan Library</a>
        </li>
      
    
  </ol>
</div>

<h2 id="sebelum-c-ada-c">Sebelum C++, Ada C</h2>

<p>Bahasa C dikembangkan tahun 1972 oleh Dennis Ritchie di laboratorium Bell Telephone sebagai bahsa pemrograman sistem (bahasa untuk menulis sistem operasi). Tujuan utama Ritchie pada waktu itu adalah untuk menghasilkan bahasa yang minimalis yang mudah di kompilasi, memungkinkan akses yang efisien ke memori, menghasilkan kode yang efisien serta <em>self-contained</em> (tidak bergantung pada program lain). Untuk sebuah bahasa tingkat tinggi, C didesain agar memberikan kontrol yang luas pada programmer, sementara memungkinkan mereka untuk bisa menulis program yang bisa berjalan di berbagai platform.</p>

<p>Bahasa C akhirnya menjadi sangat efisien dan fleksibel sehinggai pada tahun 1973, Ritchie dan Ken Thompson menulis ulang sistem operasi Unix dengan menggunakan C. Kebanyakan sistem operasi sebelumnya ditulis dengan assembly. Tidak seperti assembly yang menghasilkan progam yang hanya dapat berjalan di CPU tertentu, C memiliki portabilitas yang sangat baik, memungkinkan Unix untuk dikompilasi ulang untuk berbagai jenis komputer sehingga adopsinya menjadi semakin luas. C dan Unix ditakdirkan untuk bersama, popularitas C menjadi bagian dari popularitas Unix sebagai sebuah sistem operasi.</p>

<p>Pada tahun 1978, Brian Kernighan dan Dennis Ritchie mempublikasikan sebuah buku berjudul “The C Programming Language”. Buku ini yang kemudian dikenal sebagai K&amp;R (inisial dari nama belakang keduanya), memberikan speisfikasi tidak resmi yang menjadi standar <em>de facto</em>. Saat portabilitas maksimum menjadi tujuan, programmer akan mengikut rekomendasi-rekomendasi di K&amp;R karena mayoritas *compiler pada wkatu itu mengikuti standar mereka.</p>

<p>Pada tahun 1983, American National Standards Institute (ANSI) membentuk semua komite yang bertugas menyusun standar resmi bagi bahasa C. Kemudian pada tahun 1989, komite ini menyelesaikan standar mereka yang disebut dengan <em>C89 standard</em> atau sering juga disebut sebagai ANSI C. Lalu pada tahun 1990, International Organization for Standardization (ISO) mengadopsi ANSI C (dengan beberapa modifikasi minor). Versi ini kemudian dikenal sebagai C90. Compiler pada akhirnya mengikuti standar ANSI C/C90 dan program yang menargetkan portabilitas maksimum akan ditulis mengikut standar yang baru ini.</p>

<p>Kemudian pada tahun 1999, komite ISO merilis standar baru C yang secara informal disebut sebagai C99. C99 mengadopsi banyak fitur baru yang masuk ke banyak <em>compiler</em> sebagai sebuah <em>extension</em> atau kemudian diimplementasikan dalam C++.</p>

<h1 id="c">C++</h1>

<p>C++ (dibaca “si plus plus”) dikembangkan oleh Bjarne Stroustrup di Bell Labs sebagai perluasan dari bahasa C pada tahun 1979. C++ menambahkan banyak fitur baru ke bahasa C dan sering dianggap sebagai <em>superset</em> dari C meskipun tidak sepenuhnya benar (karena C99 memiliki beberapa fitur yang tidak ada di C++). Inovasi yang paling menonjol dari C++ adalah dukungan terhadap pemrograman berorientasi objek. Tentang apa itu “object” dan bagaimana ia berbeda dari metode pemrograman tradisional akan kita bahas di bab terpisah.</p>

<p>C++ distandarkan pada tahun 1998 oleh komite ISO. Ini artinya komite ISO menyetujui sebuah dokumen yang memberikan deskripsi formal tengang bahasa pemrograman C+=. Tujuan dari sebuah standarisasi tersebut ialah untuk membantu memastikan bahwa kode C++ bekerja secara konsisten di <em>compiler</em> maupun <em>platform</em> manapun.</p>

<p>Sebuah pembaruan terhadap standar C++ dirilis pada tahun 2003 (atau secara tidak resmi bernama C++03).</p>

<p>Lima pembaruan besar dirilis sejak 2003 yaitu C++11, C++14, C++17, C++20 dan C++23, masing-masing membawa fungsi-fungsi tambahan. C++11 sendiri mebawa begitu banyak kemampuan baru sehingga dianggap sebagai dasar baru bagi bahasa ini. Pembaruan berikutnya untuk bahasa ini diharapkan akan datang setiap tiga tahun sekali.</p>

<p>Karena nama resmi biasanya sangat kompleks (nama resmi C++20 yang lengkap adalah ISO/IEC 14882:2020), maka penamaan standar biasanya mengikuti penamaan tidak resmi yaitu mengikuti dua angka terakhir dari tahun publikasi (atau target publikasi). Misalnya, C++ mengacu pada standar yang dipublikasikan tahun 2020.</p>

<h2 id="filosofi-c-dan-c">Filosofi C dan C++</h2>

<p>Filosofi desain yang mendasari C dan C++ dapat dirangkum sebagai “percayakan pada programmer” – ini bisa menjadi hal yang luar biasa sekaligus berbahaya. C++ didesain untuk memberikan programmer kebebasan tertinggi untuk melakukan apa yang mereka inginkan. Namun, ini juga berarti bahasa ini sering kali tidak akan mencegah mereka melakukan hal-hal yang tidak masuk akal, karena ia akan menganggap programmer melakukannya untuk suatu alasan tertentu. Ada cukup banyak jebakan yang mungkin dihadapi programmer pemula jika tidak waspada. Ini adalah salah satu alasan utama mengapa mengetahui apa yang tidak boleh dilakukan di C/C++ hampir sama pentingnya dengan mengetahui apa yang harus dilakukan.</p>

<h2 id="keunggulan-c">Keunggulan C++</h2>

<p>C++ unggul dalam situasi dimana performa tinggi dan kontrol penuh akan memori dibutuhkan. Berikut beberapa jenis aplikasi akan mendapatkan keuntungan lebih dari C++:</p>

<ul>
  <li>Video games</li>
  <li>Real-time systems (misalnya untuk transportasi, <em>manufacture</em>, dll.)</li>
  <li>High-performance financial applications (misalnya untuk <em>high frequency trading</em>)</li>
  <li>Graphical applications dan simulasi</li>
  <li>Aplikasi Productivity / office</li>
  <li>Embedded software</li>
  <li>Audio dan video processing</li>
  <li>Artificial intelligence dan neural networks</li>
</ul>

<p>C++ juga memiliki library pihak ketiga yang besar dan berkualitas sehingga bisa mempercepat waktu development secara signifikan.</p>

<h2 id="bukankan-c-sudah-mati">Bukankan C++ Sudah Mati?</h2>

<p>Jelas tidak. Survei menunjukkan secara konsisten bahwa C++ merupakan bahasa nomor dua atau tiga dari <em>compiled language</em> didunia (dibelakang Java dan terkadang C#), atau peringkat kelima atau keenam secara umum (diluar HTML, SQL dan shell scripting).</p>

<p>C++ adalah salah satu bahasa paling populer untuk mulai belajar pemrograman berkat sumber belajar yang melimpah dan komunitas yang besar dan banyaknya kampus yang mengajarkannya.</p>

<p>Dengan bahasa yang terus diperbarui setiap tiga tahun, banyak library pihak ketiga yang dihasilkan menjadi sangat besar dan dominasi di industri video game membuat C++ akan terus berjaya.</p>

<h2 id="apakah-harus-tahu-c-sebelum-belajar-c">Apakah Harus Tahu C Sebelum Belajar C++?</h2>

<p>Tidak! Kita boleh mulai belajar langsung dengan C++, seri tutorial ini akan mengajarkan semua yang pembaca perlu tahu (dan hal yang perlu dihindari) selama proses belajar.</p>

<p>Jika sudah menguasai C++, akan lebih mudah untuk belajar standar C bila memang diperlukan. Dewasa ini, C mayoritas dipakai untuk kasus yang sangat jarang, kode yang berjalan di <em>embedded device</em>, saat ebrinteraksi dengan bahasa lain yang hanya bisa dilakukan lewat bahasa C, dll. Secara umum, C++ akan lebih direkomendasikan.</p>]]></content><author><name>Bagus Aji Santoso</name><email>bagus@bagusaji.com</email></author><category term="cpp" /><summary type="html"><![CDATA[Artikel ini memperkenalkan tentang bahasa pemrograman C dan C++ secara singkat.]]></summary></entry><entry><title type="html">Pendahuluan Belajar Bahasa Pemrograman C++</title><link href="https://bagusaji.com/cpp-intro/" rel="alternate" type="text/html" title="Pendahuluan Belajar Bahasa Pemrograman C++" /><published>2025-07-07T00:00:00+00:00</published><updated>2025-07-07T00:00:00+00:00</updated><id>https://bagusaji.com/cpp-intro</id><content type="html" xml:base="https://bagusaji.com/cpp-intro/"><![CDATA[<div class="rounded-2xl border border-gray-100 pt-6 pb-2 px-6">
  <h3 class="text-lg lg:text-lg font-medium text-gray-900 mt-0 lg:mt-0">Artikel ini adalah salah satu bagian dari seri <span class="font-bold">Belajar Pemrograman C++ untuk Pemula</span>.</h3>
  <ol class="pt-1">
    
      
        <li>
          <em>Pendahuluan Belajar Bahasa Pemrograman C++</em>
        </li>
      
    
      
        <li>
          <a href="/tentang-program-dan-pemrograman/">Tentang Program dan Bahasa Pemrograman</a>
        </li>
      
    
      
        <li>
          <a href="/perkenalan-dengan-cpp/">Perkenalan dengan C/C++</a>
        </li>
      
    
      
        <li>
          <a href="/perkenalan-cpp-development/">Perkenalan dengan C/C++ Development</a>
        </li>
      
    
      
        <li>
          <a href="/compiler-linter-and-library/">Compiler, Linter dan Library</a>
        </li>
      
    
  </ol>
</div>

<p>Selamat datang di tutoal belajar C++! Tutorial ini diharapkan agar bisa membantu pembaca belajar C++ menjadi lebih mudah.</p>

<p>Tidak seperti website atau buku lain, tutorial-tutorial ini tidak mengasumsikan pembaca pernah belajar pemrograman sebelumnya. Penulis akan memperkenalkan semua yang kalian butuhkan selama proses belajar dengan banyak contoh.</p>

<p>Entah itu belajar C++ sebagai hobi maupun sebagai kebutuhan pekerjaan, pembaca berada di tempat yang tepat!</p>

<p>Berikut ini testimoni dari seorang pembaca bernama Syam dari Trinidad:</p>

<blockquote>
  <p>Rasanya tidak percaya bagaimana hebatnya website ini menjelaskan konsep C++ dan mengajarkan pemrograman. Saya membaca “Programming: Principles and Practice Using c++” oleh Bjarne Stroustrup, pembuat bahasa C++ dan buku tersebut cukup membingungkan. Website ini membuat C++ menjadi jelas untuk pertama kalinya dan website ini menjalskan semua yang akan kamu butuhkan. Entah bagaimana website ini tahu apa yang saya tidak tahu dan tahu apa yang saya perlu tahu. Rasanya seperti bertemu dengan diri saya dari masa depan yang kembali ke masa lalu untuk memberi tahu kesalahan yang akan saya lakukan.</p>
</blockquote>

<h2 id="struktur-pelajaran">Struktur Pelajaran</h2>

<p>Pelajaran di pendahuluan ini bertujuan memberikan konteks tentang apa itu C++, bagaimana sejarahnya, cara kerja dan software apa yang perlu di instal untuk memulai.</p>

<p>Pelajaran-pelajaran selanjutnya akan membahas berbagai bagian dari bahasa C++. Di pelajaran pertama, kamu akan mendapatkan gambaran singkat tentang konsep dasar C++ secara garis besar, sehingga kita bisa mulai menulis program sederhana. Pembahasan berikutnya akan mendiskusikan konsep-konsep tersebut secara mendalam.</p>

<p>Setiap bab memiliki tema tertentu, dengan sebagian besar pelajaran di dalamnya terkait dengan tema tersebut. Tidak ada patokan waktu khusus yang harus pembaca habiskan untuk setiap pelajaran, selesaikan dalam waktu yang paling pas.</p>

<h2 id="target">Target</h2>

<p>Mari kita bahas beberapa target dari tutorial ini:</p>

<ul>
  <li>
    <p>Membahas topik pemrograman umum secara umum dan C++ secara khusus. Buku teks pemrograman tradisional biasanya cukup baik dalam mengajarkan dasar-dasar bahasa pemrograman, tetapi seringkali melewatkan topik lain yang terkait, seperti gaya penulisan, kesalahan-kesalahan umum, debugging, kebiasaan baik/buruk, dan testing. Akibatnya, setelah menyelesaikannya, pembaca mungkin paham cara memprogram dalam suatu bahasa, tetapi juga bisa mendapat kebiasaan buruk yang akan menjadi masalah nantinya. Salah satu tujuan tutorial ini adalah memastikan semua topik tersebut dibahas di bagian yang relevan. Dengan begitu, setelah selesai, pembaca tidak hanya tahu cara memprogram dalam C++, tetapi juga tahu cara salah saat menuliskannya (yang tidak kalah penting).</p>
  </li>
  <li>
    <p>Menyediakan banyak contoh. Banyak orang belajar lebih banyak dari mempraktekkan contoh daripada membaca. Tutorial ini akan menyertakan banyak contoh yang jelas dan ringkas untuk mengilustrasikan konsep yang dipelajari.</p>
  </li>
  <li>
    <p>Menyertakan program latihan. Di akhir banyak pelajaran dan bagian, akan ada latihan yang bisa pembaca coba selesaikan sendiri, beserta solusinya. Pembaca dapat membandingkan solusi sendiri dengan solusi kami untuk melihat perbedaan atau mencari tahu cara menyelesaikan masalah jika terjebak. Dengan begitu, pembaca bisa fokus memperbaiki bagian yang masih kurang dipahami.</p>
  </li>
  <li>
    <p>Yang terpenting: Nikmati prosesnya. Pemrograman bisa sangat menyenangkan. Jika pembaca tidak menikmatinya, mungkin sedang tidak dalam kondisi yang tepat untuk memprogram. Programmer yang lelah atau tidak fokus cenderung membuat kesalahan, dan memperbaiki kode biasanya memakan waktu lebih lama daripada menulisnya dengan benar sejak awal! Terkadang, lebih baik istirahat, tidur yang cukup, dan kembali menyelesaikan masalah keesokan harinya.</p>
  </li>
</ul>

<h2 id="penutup">Penutup</h2>

<p>Tutorial ini diterjemahkan dari situs <a href="https://www.learncpp.com/">https://www.learncpp.com/</a>.</p>]]></content><author><name>Bagus Aji Santoso</name><email>bagus@bagusaji.com</email></author><category term="cpp" /><summary type="html"><![CDATA[Artikel ini membuka seri belajar C++ untuk pemula.]]></summary></entry><entry><title type="html">Upgrade Versi MacOS di Github Actions</title><link href="https://bagusaji.com/upgrade-macos-runner-github-actions/" rel="alternate" type="text/html" title="Upgrade Versi MacOS di Github Actions" /><published>2025-04-22T00:00:00+00:00</published><updated>2025-04-22T00:00:00+00:00</updated><id>https://bagusaji.com/upgrade-macos-runner-github-actions</id><content type="html" xml:base="https://bagusaji.com/upgrade-macos-runner-github-actions/"><![CDATA[<p>Kemarin saat mengirimkan sebuah PR, penulis mendapatkan error seperti ini:</p>

<p><img src="/assets/images/posts/macosrunner1.png" alt="" /></p>

<p>Pada intinya mesin runner belum bisa support Swift 6, hanya Swift 4.0, 4.2 dan 5.0. Solusinya adalah dengan mengupgrade Xcode ke versi 16 supaya mendukung Swift 6. Tapi bagaimana caranya jika sistemnya itu runner github?</p>

<p>Ternyata kita cukup menggunakan runner macos-15 atau yang lebih baru (sebelumnya macos-latest alias macos-14) di konfigurasi CI Github.</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>jobs:
  build-ios:
    runs-on: macos-15
    
    steps:
      - uses: actions/checkout@v4
      - uses: kuhnroyal/flutter-fvm-config-action/config@v3
        id: fvm-config-action
      - uses: subosito/flutter-action@v2
        with:
          flutter-version: $
          channel: $
          cache: true
      
      # Add flutter doctor command here
      - name: Check Flutter configuration
        run: flutter doctor -v
</code></pre></div></div>

<p>Selain mengupgrade versi runner, penulis juga menambahkan konfigurasi untuk menajalankan perintah flutter doctor setiap kali action di jalankan. Jadi, dimasa depan ketika ada masalah kita akan selalubisa memeriksa kondisi sistem saat itu.</p>]]></content><author><name>Bagus Aji Santoso</name><email>bagus@bagusaji.com</email></author><category term="xcode,macos,ios,react-native" /><summary type="html"><![CDATA[Artikel ini membahas bagaimana cara downgrade versi Xcode di macOS dari versi 16.3 ke 16.2.]]></summary></entry></feed>