Kembali Ke Fundamental

Salam, saya Mono. Sudah bekerja sebagai software engineer sekitar 12 tahun, berawal dari PHP sampai sekarang berkutat di Python, Go, dan React. Saya ada membaca beberapa tulisan mengenai software engineer dimana rata-rata developer sekarang hanya menyentuh bagian kulitnya, bukan bagian fundamental dari software engineering tersebut (baca : math and problem solving).

Saya mau menanyakan ke rekan-rekan, bagaimana pengalamannya dalam memperkuat fundamental skill di software engineering? Seperti DS dan algorithm, sementara biasanya case-case tersebut kurang menarik dan ya so mathematics :smiley:

6 Suka

Pertanyaan yang bagus dan saya pribadi juga agak prihatin tentang hal ini.

Saya biasanya untuk mengekeukeuhkan konsep-konsep algorithm dkk ini dengan meleburkanya bersama kebutuhan yang saya hadapi si saat membuat suatu program.

Contohnya gini, saya pengen bikin buku digital gitu saya cari pendekatan dari konsep-konsep struktur data. Pakai Linked List cocok ga atau pakai Graf gitu, karena dengan mengunakan “cocoklogi” seperti ini, lumayan memangkas waktu saya buat mikir datanya harus diapakan dan prosesnya harus gimana.

Masalah terlalu matematik ini, perlu perubahan mindset (baca: berfikir komputasional) dari yang bersangkutan si untuk bisa “tertarik” dengan matematika dan mampu mengunakanya untuk sebagai suplement saat problem solving. Sekedar cerita, saya waktu sekolah saya ngulang 3 mata kuliah berbau matematika 3 kali dengan dosen yang sama, sampai yang lucunya dia bilang “Yoga, kamu tahun depan kalau ngulang jangan masuk kelas saya ya, biar nemu dosen yang cocok dengan kamu cara ngajarnya”.

Puji tuhan, apa yang beliau katakan berbuah manis saya menemukan dosen yang mampu menginspirasi saya untuk “tertarik” matematika. Mulai dari sini saya menantang diri saya, untuk membuat program dari materi yang diajarkan beliau di kelas, seperti Shortest Path, Distribusi Normal, Membuat Parser, dan konsep lainya. Konsep matematika yang ngena banget dan sering saya pakai itu prinsip teori formal dan automata seperti Non-Deterministik Automata dkk, penerapanya tidak langsung dipakai didalam program tapi lebih membantu cara saya berpikir.

Selain itu si , dengan matematika bisa memudahkan dalam menentukan ukuran dari suatu kebutuhan yang ingin dikembangkan. Kembali lagi kek kasus buku digital, saya memerlukan data tentang keaktifan si pengguna. salah satu cara sederhanaya yaitu mengambil data yang bisa di ukur dari pengguna, seperti mengukur waktu saat pengguna membuka halaman membaca dan berapa banyak judul yang di telusuri. Dengan pendekatan matematis walaupun terkesan “agak kaku”, kita bisa mendapat data yang menbantu memenuhi kebutuhan. Ini salah satu pencerahan baru setelah saya mengulang matematika 3 kali .

Yang saya prihatikan konsep-konsep ini jarang tersentuh oleh khalayak karena salah satunya kurang menarik dan jarang promosi untuk belajar hal seperti. Kebanyakan tutorial diluar sana ya mengajarkan memakai teknologi X ketimbang mengajar teori X dan penerapanya, sehingga pelajaran seperti ini kurang tersentuh dan kebanyakan dianggap “too academic”, ini opini saja si. IMO, Eksplorasi ke jurnal akademik lumayan juga untuk menemukan bacaan yang menarik dan menginspirasi.

Untuk menggenang sumber tempat belajar:

http://arna.lecturer.pens.ac.id/

https://informatika.stei.itb.ac.id/~rinaldi.munir/

3 Suka

mantap om @r2d2 pendekatan dan mindset nya yang coba diubah y, karena sekarang kebanyakan metode praktis dan instant yang digunakan.

thx buat pandangannya

1 Suka

Wah pertanyaan ini pas banget dengan yang sedang saya jalani sekarang.

Ini berawal dari saya gagal join salah satu startup SEA dan gagalnya saya adalah ketika test algoritma dasar kemudian si CTO dengan baiknya memberikan saya arahan untuk kembali memperdalam algoritma, (meskipun saya gagal).

Akhirnya saya mulai ikut educative.io untuk mempelajari Struktur Data & Algoritma.

Kemudian rencananya ketika sudah selesai, saya akan lanjut di sini Ace the Python Coding Interview - Learn Interactively

Meskipun biayanya relatif lumayan mahal.

On going mas. Kalah berencana belajar dan berprogress bersama, mari bareng² mas. Saya juga baru mulai back to fundamental.

baik banget CTO nya ya mas @atamasite

Kalau saya masih berusaha main-main di hackerrank sama leetcode, tapi emang jatuhnya langsung praktek. Sepertinya emang harus mencoba ikut kelas lagi saja y, itung-itung refresh jaman kuliah dulu.

Soalnya scope pekerjaan saya selalu berkutat disekitar web development saja, pengennya mencakup banyak hal diluar web development. Kepo juga soal perusahaan-perusahaan yang semacam Boeing atau Airbus atau SpaceX itu codingnya gimana sih :smiley:

1 Suka

Ya begitulah mungkin itu yg membuat dia jadi CTO atittudenya keren :grin:

Dan sebenernya kalau mau di Youtube banyak mas Freecodecamp yg ngebahas ttg Algoritma ini.

Cuman kenapa saya ikut Educative.io karena saya lebih cocok dengan tipe pembelajaran text + interactive + animation explained ala Educative. Meskipun emg sih biayanya relatif lebih mahal.

Saya biasanya baca buku untuk memastikan pengetahuan algoritma tidak hilang. Mau koding algoritma, terlalu sibuk saya. Proyek-proyek saya terlalu banyak. :stuck_out_tongue:

Be te we, apa yang kalian diskusikan ini bisa dijadikan bisnis. Kebanyakan lulusan bootcamp masih kurang kuat kemampuan algoritma dan struktur data mereka. Nah, setelah mereka lulus bootcamp, terus kerja 1-2 tahun, sudah punya uang, mungkin ada baiknya mereka pakai sedikit uang itu untuk belajar algoritma dan struktur data dari… kalian!!!

Ini juga sesuai dengan visi saya, Pendidikan Terdesentralisasi.

Yang saya prihatikan konsep-konsep ini jarang tersentuh oleh khalayak karena salah satunya kurang menarik dan jarang promosi untuk belajar hal seperti.

Yah, ini agak memprihatinkan. Kadang untuk membuat suatu peranti lunak tertentu, kemampuan struktur data dan algoritma itu sangat dibutuhkan. Misalnya, kalian mau bikin perintis yang produknya basis data seperti Timescale, sudah jelas kalian mesti mengerti struktur data dan algoritma.

1 Suka

Buat fundamental menurut saya sih dalemin di struktur datanya. Bakal lebih sering dipake di kerjaan sehari-hari. Misal ada suatu use case, gmn cara optimasi data untuk memaksimalkan performa maksimal. Ada caching, lazy evaluation, pre computation, dll.

Belajar algoritma penting buat cari kerjaan baru. Paling nggak bakal kepake di interview. Haha. Selama saya kerja kuli koding web 4-5 tahun ini ga pernah tuh bikin merge sort, DFS, dll.

3 Suka

aku juga lagi mau fokus masalah ini… terutama di computational thinking nya sih… makanya aku campaign mengenai bebras. jadi semenjak TK sampe SMA.

nanti kalau udh SMA ya bisa ikutan olimpiade informatika. dan soalnya2 udh rada beda.

aku juga lagi pengen ngajar programming pake buku sedgewick, tapi fokus bukan di bahasa nya. lebih ke konsep fudamental

tapi orang lebih suka belajar apache spark. haha

1 Suka

Salam kenal saya Eko Heri. Ijinkan saya berbagi pengalaman selama mendidik murid-murid saya. Selama 10 tahun saya mengajar mahasiswa, saya-pun merasa selalu mengajarkan kulitnya saja, tanpa pernah mengupas sebenarnya bahasa pemrograman itu apa. Sekitar tahun 2009 dulu, anak didik saya sudah saya perkenalkan dengan C#.Net, PHP. Bahkan sampai anak didik saya itu, saya arahkan untuk bikin framework MVC sendiri.

Sekitar tahun 2017, saya-pun pindah haluan ke bahasa pemrograman lain, terutama javascript/typescript dan Flutter. Mulai javascript native, ReactJS, Angular, NextJS saya ajarkan ke mereka. Yg terjadi, anak-anak nggak semakin pintar, malah semakin bingung.

Suatu hari, saya melihat anak-anak sedang bincang santai dan menjurus membahas pemrograman. Yg pada akhirnya pembicaraan mereka mengarah ke perdebatan yang membahas “VARIABLE”. Merekapun adu argumen hanya untuk membahas variable, yg menurut kita itu hal yg sangat remeh.

Mendengar perdbatan anak-anak didik saya itu, akhirnya saya berinisiatif untuk bertanya ke hal yang paling fundamental. Pertanyaan saya begini “Setiap hari kalian kan ngetik pake keyboard kan ya? Menurut kalian, seandainya kalian ngetik huruf A di keyboard, kok bisa huruf A tadi tampil di monitor? Bagaimana sebenarnya proses yang terjadi di dalam laptop kalian? Kok bisa huruf A dari keyboard tadi pindah ke monitor?”

Lalu anak-anak itupun mencoba browsing dan tidak ada satupun yg berhasil menemukan jawaban secara benar. Akhirnya saya tunjukkan hakekat bahasa pemrograman, spt gambar ini

Lalu mereka pelan-pelan saya ajari algoritma pemrograman yang mengupas bahasa tingkat rendah (assembler). Saya bandingkan juga dengan bahasa tingkat menengah (C), sekaligus saya bandingkan dgn bahasa tingkat tinggi (Python). Nah dari situlah pelan-pelan anak-anak didik saya mulai memahami apa itu algoritma, dan mereka tidak kaget ketika menemui teknologi baru, seperti misalnya Blazor.

Hipotesa saya, kenapa kok anak didik saya lemah sekali dlm hal pemahaman algoritma? Karena mereka tidak mengenal apa sih sebenarnya yang terjadi di dalam mesin komputer/laptopnya. Sampai-sampai variable saja mereka tidak paham, alokasi di memory-nya seperti apa dan alokasi di register processornya seperti apa. Mereka sering bongkar pasang memory dan processor, tapi mereka tidak mengerti bagaimana proses yg terjadi didalamnya. Itu hipotesa saya ya…saya belum berani pernyataan saya ini sebagai kesimpulan.

Link tutorial algoritma dgn assembler dan C, saya upload disini Algoritma dan Pemrograman - YouTube

Melanjutkan sharing pengalaman saya selama mendidik mahasiswa. Setelah anak-anak memahami bahasa assembler dan bahasa C, Alhamdulillah pemahasan algoritma mereka sudah terlihat lumayan kuat.

Tidak lupa, anak-anak didik saya itu, juga saya bekali dengan pemahaman sejarah pekermbangan teknologi komputer. Skema paradigma perkembangannya, terlihat pada gambar berikut.

Nah materi fundamental selanjutnya adalah mereka saya ajari konsep komunikasi data antar komputer. Saya ajari mereka konsep TCP/IP. Saya lanjutkan lagi dengan memberikan contoh pemrograman socket server dan socket client. Lalu saya tambah lagi dengan materi bikin web server sendiri.

Kenapa komunikasi data ini perlu saya berikan? Karena kenyataannya jaman sekarang mayoritas aplikasinya berbasis web atau mobile yg dasar keilmuannya adalah komunikasi data. Aplikasi web, pasti menggunakan socket server di sisi web server dan socket client di sisi web browser.

Akhirnya dgn dari materi ini, mereka paham socket server dan socket client itu bagaimana. Mereka akhirnya paham juga status code 200 itu apa? 404 itu apa? 500 itu apa? method GET itu apa? method POST itu apa? setelah mereka membaca RFC 2068 dan berhasil mengimplementasikan RFC 2068 tadi ke aplikasi web servernya.

Link tutorialnya juga sudah saya upload di channel ini Python Web Server - YouTube

Hanya video membangun web server ini, belum selesai semuanya. Saya masih membahas sampai static web server saja. Untuk yg dynamic web server, belum saya upload.

Sampai disini, maka fundamental yg saya ajarkan ke anak didik saya ada 2 hal yaitu :

  1. Algoritma pemrograman yg dipraktekkan dgn assembler dan bahasa C
  2. Komunikasi data antar komputer yg dipraktekkan dgn pembuatan aplikasi web server.

Dgn memberikan 2 materi fundamental ini, yg saya amati anak-anak sudah tidak begitu gagap lagi ketika menghadapi teknologi baru. Bahkan beberapa anak terbukti dlm waktu singkat (sekitar 2 minggu) sudah bisa beralih dari NextJS ke Blazor.

4 Suka