Jump to content
Sign in to follow this  
Rads78

High Quality Programming

Recommended Posts

A'kum...

Nih aku ndak ajak ngkorang berbincang mengenai high quality programming. Cakap pasal how to program.. semua orang boleh program... tapi apa yang membezakan programmer dengan programmer yang lain adalah macam mana susunan, cara debugging, analysis, naming convention dan sebagainya. Selalunya dekat pusat pengajian tinggi jarang diaorang ajar pasal nih dan biasanya semua ini datangnya daripada pengalaman diri sendiri. So... cuba ceritakan bagaimana ngkorang selalu buat

1) Debugging process / method yg selalu digunakan

2) Naming convention bagi method / sub / function / class yang ngkorang selalu guna

3) Apa yang selalu ngkorang comment didalam atucara ngkorang

4) Sekiranya ngkorang ndak pass parameter ke class / sub / method... cara apa yg ngkorang selalu pass?? Reference or value and why and when?

5) Sebelum membina program, apa analisis yg dilakukan untuk memastikan atucara itu berjalan dengan lancar?

Please keep in mind that theres no idea that is a stupid idea (as in we can always elaborate it)... so mintak-mintak para programmer ataupun bakal programmer kat sini dapat berkongsi idea pasal bender alah nih semua.

ps: Any recommendation for reading material for topics above?

Wassalam

Share this post


Link to post
Share on other sites

W'salam

High Quality Programing?? ermmm tapi kalau Software Quality Assurance tau ar...

Erm Kalo nak membangunkan Program memang semua boleh tetapi kaedah bagi develop program itu yang menentukan quality program yang dibangunkan.

Sesiapa yang ambik Software Engineerng tu dia tau ar kot dari pada pemintaan client, analisis, dokumentation dan memacam lagik aspek yang menentukan Qualitynya.... termasuk arr fasa implementasinya (programmer2 dok kat sini..)

Share this post


Link to post
Share on other sites

1) Debugging process / method yg selalu digunakan

2) Naming convention bagi method / sub / function / class yang ngkorang selalu guna

3) Apa yang selalu ngkorang comment didalam atucara ngkorang

4) Sekiranya ngkorang ndak pass parameter ke class / sub / method... cara apa yg ngkorang selalu pass?? Reference or value and why and when?

5) Sebelum membina program, apa analisis yg dilakukan untuk memastikan atucara itu berjalan dengan lancar?

1) usually manual tracing. ie printf(). kalau tak dapat gak, baru guna watch.

2) hungarian notation

3) fungsi(paling penting), rumus matematik, loop overview

4) value kalau data primitif. lain2 sume reference. AFAIK utk data primitif adalah lebih pantas kalau hantar value. kalau data dynamik(STL, link list) pakai reference(ada pilihan lain ker?)

5) perancangan yg detail. memang leceh kalau tengah develope tetiba ada perubahan.

bagi publicENEMY, high quality programming ialah apabila code reuseable, robust(boleh menyelesaikan pelbagai masalah ie selalu kod seolah2 untuk hasilkan library), pantas dari segi running timenya, boleh difahami oleh orang lain(komen).

publicENEMY org opengl/computer graphics. dlm menghasilkan projek, banyak isu yang perlu diselesaikan dalam jumlah peruntukan resource yg terhad. oleh itu optimization merupakan satu aset yang tak ternilai. pendek kata, knowledge dari segi kemampuan mesin/hardware, maintaning numerical stability, cara mesin/hardware memproses data, dll perlu dipelajari.

publicENEMY humbly spoke.

Share this post


Link to post
Share on other sites

Thats sounds pretty cool publicEnemy... do you mind to elaborate more on list no 4 regarding passing parameter and if u have more information regarding optimization as well would be perfect. Like to hear more from you

Thanks biggrin.gif

Share this post


Link to post
Share on other sites

4) elaboration

data primitif adalah data int, float char dll. data compleks adalah kompilasi data2 primitif cth struct. data array publicENEMY treat ala2 cam data primitif(tapi kalau besar sangat terpaksa hantar reference aje). data dynamik adalah seperti array yg boleh dibesarkan/dikecilkan bergantung kepada keperluan. contohnya link list, trees. tapi publicENEMY tak construct sistem dynamik data, publicENEMY just guna STL(highly optimized, easy, clean).

kalau data takat 2,4 atau 8 bytes(data primitif), publicNEMY just pass data. compiler maker boleh optimized yg ini. tapi untuk data bukan data primitif, amat susah untuk compiler maker optimized(pasal diorang nak kena measure cara kita berinteraksi).

kalau data yg besar2(compleks, dinamik, array), publicENEMY hanya hantar reference aje. reason - katalah data 150 megs, takkan nak copy data tersebut kepada satu fungsi.

mem alloc untuk data = 150megs

kalau hantar data ke fungsi

mem alloc untuk data = 150megs

mem alloc untuk hantar data = 150megs

total alloc = 150+150 = 300 megs;

itu untuk satu fungsi. kalau 10. kalau 100.

isunya ialah jumlah ruang dan masa capaian data

kalau hantar alamat ke fungsi

mem alloc untuk data = 150megs

mem alloc untuk hantar alamat

total alloc = 150megs + address = 150 lebih cikit.

rasanya Rads78 dah tau pasal mende nih. saja je tuu.

optimization

satu2nya reason wujudnya 3d card adalah kerana untuk menghasilkan image/animasi 3d yang realistik, memerlukan jumlah kuasa pemprosesan yg teramat tinggi. walaupun 3d card boleh dianggap mature, tapi untuk menghasilkan image yg realistik adalah masih terlalu jauh lagi(sangat2 jauh, malah pendekatan animasi movie dengan animasi game adalah amat berbeza. satu untuk realistik(compleks lighting) dan satu lagi untuk real time(60fps). satu ray-tracing dan satu lagi z-buffer).

untuk realtime, min desired fps adalah 75fps(normal human eye/brain frekuensi). oleh itu setiap frame perlu siap dilukis dalam masa 1/75=0.01333saat. dalam simulation loop untuk game(sbg contoh), paling basic ada

1. ai

2. motion

3. collision detection

4. collision response

5. rendering/lighting/shadow

6. dll

cuba test bagi2kan masa untuk 5 module tersebut. average alloc time = 0.0133/5=0.00266saat untuk satu module. oleh itu optimization memang amat kritical.

optimization(dalam konteks real time computer graphics) bergantung kepada hardware dan API. untuk opengl, mark j kilgard ada publish satu artikel berkenaan opengl specifik optimization. untuk hardware plak, sama ada good understanding of the acceleration system atau usha vendor specifik optimization.

contoh optimization opengl

lukis model 3d

method 1

simpan data array 3d objek dalam sistem memory(initialize)

fungsi lukis akan panggil(sistem memory) dan simpan data yg dicapai dalam buffer opengl(sistem memory) untuk proses lukisan

lukis data buffer

ulang pada setiap frame(kecuali initialize)

method 2(faster) - beza pada initialization

simpan data array 3d objek dalam sistem memory(initialize)

fungsi lukis akan panggil(sistem memory) dan simpan data yg dicapai dalam buffer opengl(sistem memory) untuk proses lukisan(initialize)

lukis data buffer

ulang pada setiap frame(kecuali initialize)

method 3(fastest) - beza pada simpanan data

simpan data array 3d objek dalam sistem memory(initialize)

fungsi lukis akan panggil(sistem memory) dan simpan data yg dicapai dalam buffer opengl(kali ini ruang memory terpantas bagi sesatu 3d card, iaitu AGP memory) untuk proses lukisan(initialize)

lukis data buffer(AGP memory)

ulang pada setiap frame(kecuali initialize)

method 1 adalah cara guna opengl paling basic. method 2 dinamakan kaedah display list, manakala method 3 pula adalah vertex array(vendor specific, bukan yg opengl punya). beza ketiga2 kaedah tersebut adalah dari segi pilihan memory untuk simpanan dan proses initialization.

dan banyak lagi.

ps. bahasa cam hapa. nak cepat pnyer pasal.

Share this post


Link to post
Share on other sites

Thats a very nice of you. Really appreciate it. Yeah... i'm hoping that your article will benefit other programmers in their daily programming projects.

Optimization.. on the normal desktop programming.. mungkin tak banyak dipertekankan except in database and gaming programming i guess (correct me if i'm wrong). Tetapi didalam server environment, where the server must be able to serves / process thousands of records per minute and extra power / space is expensive... optimization is your best friend. Anyway i dun have much experience in the subject yet (thats the reason of the babbling).. but i iwsh other programmers can join in this discussion as well and put up their knowledge to be shared

Share this post


Link to post
Share on other sites

Optimization.. on the normal desktop programming.. mungkin tak banyak dipertekankan except in database and gaming programming i guess (correct me if i'm wrong).

personal opinion publicENEMYlah, semua bidang komputer perlukan optimization apabila applikasinya

1. time critical

2. lots of processing

3. lots of data

dalam bidang computer graphics(AFAIK), yang paling gila perlu optimization adalah virtual surgery(dibedah oleh doktor yg berada jauh dari bilik pembedahan). ini kerana processing mesti pantas(takkan nak bedah orang gambarnya tersenggut2), highly physiccly accurate( fast collision detection for extremely detail object, fast physical based collision response), small or extremely fast data transfer. apapun, virtual surgery ini mempertaruhkan nyawa manusia. hakikatnya, virtual surgery walaupun active research setelah sekian lama, tetapi tidak cukup untuk diaplikasikan.

hmmm...

Share this post


Link to post
Share on other sites

Salamz.. aku selalu buat kerja dlm .NET (VB.NET dan C#.NET), ada sikit PHP dan pernah juga dlm C++, jadi apa yg nak ditulis ni berdasarkan platform2 ni lah.. dan sekarang ni byk buat dev on enterprise level app, yg main2 dgn database etc..

1) Debugging process / method yg selalu digunakan

Ini bergantung pada IDE yg digunakan, aku guna VS.NET, ada byk debugging tools yg boleh digunakan.. Biasanya aku letak breakpoint, dan guna step utk jejak aturcara, dan watch utk tengok variable.. dan selalu juga guna apa yg dinamakan 'command window' utk test statements.. last resort barulah guna printf, atau dlm .NET ada System.Diagnostics.Debug.WriteLine() yg boleh write ke 'debug window'..

Debugging tools ni pd pendapat aku adalah amat penting utk dipelajari, ramai yg tak sedar debugging skills adalah satu aspek yg amat penting dlm programming.. berapa lama masa korang habiskan selalu utk debug? lama kan? jadi gunakan tools yg sesuai utk mudahkan kerja..

2) Naming convention bagi method / sub / function / class yang ngkorang selalu guna

Ikut .NET punya recommendation..

- Public member var guna Pascal notation. eg: LastModOn, DefaultPage

- Private vars letak 'm' didepan. eg: mCount, mSize

- Func/Sub sentiasa Pascal notation

- Local vars guna Camel notation: eg: retVal, i

- Params sent ke func letak 'p'. eg: pWorker

- biasanya kalau boolean type aku suka letak "is". eg: isError, IsDefault

- Constants pakai all caps. eg: MAX_REQUEST, EXCEED_LIMIT

- aku suka pakai nama panjang2 (tapi jgn la pjg sgt).

- dulu masa C++ guna juga Hungarian notation, tapi skarang tak lagi..

3) Apa yang selalu ngkorang comment didalam atucara ngkorang

Apa yg aku rasa aku akan lupa nanti, atau sesuatu yg susah nak paham cth kalau ada algo yg rumit2, atau ada perkiraan fizik etc.. oleh sbb aku suka pakai nama func yg panjang jadi ia lebih descriptive..selalunya baca je dah tahu func tu utk apa, tak payah comment pjg2..

4) Sekiranya ngkorang ndak pass parameter ke class / sub / method... cara apa yg ngkorang selalu pass?? Reference or value and why and when?

Sama mcm publicEnemy lebih kurang

5) Sebelum membina program, apa analisis yg dilakukan untuk memastikan atucara itu berjalan dengan lancar?

Flow utk software development tu selalunya mula dgn :

1- mengumpul user requirement,

2- kemudian analysis,

3- kemudian design, dan seterusnya

4- implimentation (coding).

5- apa lagi? testing, maintain2, apa2 lah..

IMHO, part 2 dan 3 adalah yg paling penting.. newbies selalunya tak hiraukan bahagian 1,2 dan 3 dan terus jump pada 4. Hati2, korang akan hadapi masalah kalau buat begini dlm projek yg besar2.

Aku pun masih tak mahir dlm 1,2 dan 3 tu tapi tengah nak belajar object oriented analysis/design (OOA/D)

Dlm situasi programming env aku skarang, aku lebih suka cenderung pada maximise maintainability dan flexibility berbanding performance.. performance ketepikan dulu (lagipun hardware dah murah sekarang, pegi la tambah RAM).. tapi dulu masa buat OpenGL, aku agak particular jugak pasal performance, tapi masa tu takde la terer, sikit2 takat guna display list tu tahu lah..

thats my humble opinion la.. tq for reading..

Share this post


Link to post
Share on other sites

Damn... thats a nice one. Tell u wat guys.. I'll print this out and stick it on my wall. Thanks PublicEnemy and 1Khz. That rocks!!!

Share this post


Link to post
Share on other sites

Kalau nak jadi developer yang bagus, yang bukan setakat tahu tulis code je, tapi tulis code yang maintainable, scalable, robust, less buggy, sila baca buku ini. A must for everybody who wants to be a professional programmer.

The Pragmatic Programmer, From Journeyman To Master

Edited by 1kHz

Share this post


Link to post
Share on other sites

A'kum...

Nih aku ndak ajak ngkorang berbincang mengenai high quality programming. Cakap pasal how to program.. semua orang boleh program... tapi apa yang membezakan programmer dengan programmer yang lain adalah macam mana susunan, cara debugging, analysis, naming convention dan sebagainya. Selalunya dekat pusat pengajian tinggi jarang diaorang ajar pasal nih dan biasanya semua ini datangnya daripada pengalaman diri sendiri. So... cuba ceritakan bagaimana ngkorang selalu buat

1) Debugging process / method yg selalu digunakan

2) Naming convention bagi method / sub / function / class yang ngkorang selalu guna

3) Apa yang selalu ngkorang comment didalam atucara ngkorang

4) Sekiranya ngkorang ndak pass parameter ke class / sub / method... cara apa yg ngkorang selalu pass?? Reference or value and why and when?

5) Sebelum membina program, apa analisis yg dilakukan untuk memastikan atucara itu berjalan dengan lancar?

Please keep in mind that theres no idea that is a stupid idea (as in we can always elaborate it)... so mintak-mintak para programmer ataupun bakal programmer kat sini dapat berkongsi idea pasal bender alah nih semua.

ps: Any recommendation for reading material for topics above?

Wassalam

Satu lagi perkara yang menentukan kualiti aturcara yang dihasilkan ialah rekabentuk antaramuka (interface design). Kalau diperhatikan softwer tempatan walaupun yang komersil nampaknya terlalu lemah pada bahagian ini, sedangkan interface adalah sesuatu yang penting kerana ianya akan dilihat dan dinilai secara langsung oleh pengguna. Interface perisian tempatan selalunya boleh dikatakan sebagai "ikut jadi" atau lebih dengan kata lain ianya tidak dirancang. Ini berbeza dengan softwer dari barat yang mempunyai interface yang seragam dan teratur. Interface yang dirancang dengan baik akan memudahkan pengguna menggunakan perisian yang kita hasilkan disamping memberikan keselesaan. Sebagai programer sepenuh masa di sini saya ada beberapa perkara/nasihat untuk panduan kepada bakal-bakal programer semasa merekabentuk antaramuka.

1. Cuba gunakan interface standard samaada MDI (Multi Document Interface - cth Microsoft Word), SDI (Single Document Interface - cth Notepad) atau dialog base (seperti yang selalu digunakan oleh softwer antivirus).

2. Gunakan fungsi dockable (toolbar, workspace dan lain-lain yang boleh dipindah datau disembunyikan).

3. Cuba gunakan semaksima mungkin ruang skrin yang ada. Jangan gunakan skrin window bersaiz tetap (misalnya 640x480).

4. Jangan sekali-kali mematikan fungsi asas windows (misalnya fungsi resize, close, minimize) sebaliknya cuba bertindak mengikut situasi.

5. Pastikan susunan butang yang digunakan di atas kotak dialog adalah seragam seperti lain-lain program , cth butang [OK] disebelah kiri butang [Cancel].

6. Sediakan pelbagai cara untuk melaksanakan sesuatu arahan misalnya melalui menu, toolbar atau keyboard.

7. Jangan gunakan perkataan atau ayat-ayat yang menyalahkan pengguna di dalam mesej apabila terdapat kesilapan, sebaliknya berikan bantuan atau cadangan.

Sebenarnya ada banyak lagi, tapi masa tak mengizinkan. Apa pun cuba praktikkan dulu semua yang di atas.

Edited by CFoo++

Share this post


Link to post
Share on other sites

Tengok buku Steve McConnell (kalau tak silap nama dia) bertajuk "Code Complete".

Lepas tu boleh tengok buku "Large Scale C++ Software Development"...author John Lacos..tapi specific utk C++ je lah.

Tempat saya kerja ada 80 page coding standard...kalau ada masa I will list some of the rules and recommendations.

Share this post


Link to post
Share on other sites

thanks 4 the info ...bergune beb buku2 kat atas nie ..lagi2 baru2 nak berjinak menjadi profesional programmer ...memang bnyk beza la kalo nak ikot kan programming aku ngan korang ..cam langit ngan bumi ...ye la ...dulu programing ikot suke tanpe prosedur .jadi bile aku review and pk balik mmg penting struktur pembuatan dan penyusunan tu ..pas2 bile aku kaji balik2 keje2 lame ..ces ...sume cam haram ..nampak la jauh beza mindset dulu ngan skang ...hopefully boleh la improved mindset and tukar dari basic programmer ke pro ..hahhaha

Share this post


Link to post
Share on other sites

just adding lil'bit opinion...Help Function...nih penting gak..even system/program yg d buat 2 gempak either from GUI n system flow,tp takde system help susah gak kn..he..

n 1 more..navigation,xkire la same ade dari segi link or form popup..kene titik beratkan gak. ;)

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
Sign in to follow this  

×
×
  • Create New...