Monthly Archives: Januari 2008

Bagaimana Caranya Menjadi Seorang Programmer Komputer

Bagaimana caranya menjadi seorang programmer komputer? Apa saja yang perlu dipelajari untuk bisa memprogram komputer? Ini juga termasuk pertanyaan yang tidak jarang diajukan oleh pengunjung situs ini. Tentu saja, yang mengajukan pertanyaan semacam ini adalah mereka yang bukan berlatar belakang informatika. Kemampuan pemrograman komputer saat ini memang bukan monopoli mahasiswa maupun sarjana informatika saja. Selain bisa dipelajari secara otodidak, beberapa jurusan non-informatika di perguruan tinggi juga memasukkan dasar-dasar pemrograman komputer dalam kurikulum mereka.

Mempelajari pemrograman komputer sebaiknya dimulai dari mempelajari bahasa pemrograman yang relatif sederhana terlebih dahulu. Bahasa Pascal/Turbo Pascal maupun C/C++ merupakan alternatif yang baik untuk memulai. Di kebanyakan perguruan tinggi, Pascal merupakan bahasa pemrograman pertama yang diajarkan kepada mahasiswa jurusan informatika. Ini karena Pascal merupakan bahasa pemrograman yang sangat terstruktur sehingga memungkinkan mahasiswa untuk belajar mengasah logika pemrograman. Sementara itu, di perguruan tinggi yang lebih maju, semacam ITB atau UI, para mahaiswa semester awal akan langsung dikenalkan dengan bahasa C dengan pertimbangan bahwa penggunaannya lebih luas ketimbang Pascal sehingga lebih aplikatif. Bagi yang belajar pemrograman secara otodidak, saya sarankan untuk mulai dari Pascal dahulu, dan berikutnya barulah mempelajari C.

Saya tidak akan menyarankan untuk mempelajari beberapa bahasa pemrograman sekaligus secara simultan. Hal ini hanya akan membuat bingung sehingga malahan akan memperlambat proses belajar. Saya cenderung menyarankan untuk mempelajari dan menguasai secara sungguh-sungguh pada satu bahasa pemrograman tertentu. Sekali kita menguasai sebuah bahasa pemrograman, tidak sulit untuk mempelajari bahasa pemrograman lain. Pada pokoknya, setiap bahasa pemrograman hanya memiliki perbedaan pada sintaks dan cara-cara pendeklarasian variabel, konstanta, maupun hal-hal khusus semacam array, pointer, atau linked list (perkecualian ada pada bahasa assembly atau bahasa dengan struktur ‘nyeleneh’ semacam Prolog). Itulah sebabnya bagi mereka yang sudah akrab dengan pemrograman komputer, tidak akan terlalu kesulitan untuk mempelajari bahasa pemrograman baru.

Mirip seperti kegiatan hacking, pemrograman komputer lebih banyak mengandung unsur seni ketimbang teknis. Mempelajari ‘seni’ pemrograman merupakan hal yang tidak kalah pentingnya selain mempelajari bahasa pemrograman itu sendiri. Subjek-subjek semacam teknik flowchart, struktur data, maupun logika dan algoritma pemrograman adalah hal yang perlu dipelajari untuk memahami ‘seni’ memprogram komputer. Juga jangan lupa untuk mempelajari teknik-teknik pemrograman semacam OOP (Object Oriented Programming, Pemrograman berorientasi objek). Semua itu akan sangat berguna dalam kegiatan pemrograman yang sesungguhnya, terutama untuk membuat aplikasi-aplikasi yang kompleks.

Beberapa bahasa pemrograman didesain untuk keperluan khusus. Bahasa assembly perlu dipelajari apabila kita ingin menjadi programmer sistem yang banyak melakukan akses pada hardware. Sebaliknya, beberapa bahasa pemrograman didesain untuk mengembangkan aplikasi yang spesifik. Bahasa Cobol misalnya, lebih banyak digunakan untuk aplikasi bisnis sementara Prolog biasanya dipakai untuk menciptakan software yang memiliki kemampuan expert system/sistem pakar (semacam teknik kecerdasan buatan). Tidak perlu kemaruk mempelajari semuanya. Cukup pelajari bahasa pemrograman yang sekiranya dibutuhkan saja.

Untuk ukuran saat ini, bahasa pemrograman visual dibawah lingkungan Windows seperti Visual Basic atau Delphi merupakan bahasa pemrograman ‘favorit’ para developer Untuk mereka yang berkecimpung dalam pemrograman database, penguasaan terhadap SQL dan variannya (MS SQL, MySQL maupun PosgreSQL) merupakan nilai tambah. Sementara itu, penguasaan bahasa C merupakan keharusan bagi para programmer yang berkutat dengan OS Linux maupun pengembang software yang sifatnya lintas platform.

Terakhir, komputer dan pemrogramannya adalah dunia yang terus berkembang secara dinamis. Jangan berpuas diri dengan kemampuan yang dimiliki saat ini. Bahasa dan teknik pemrograman baru terus bermunculan dari waktu ke waktu. Seorang programmer sejati tidak pernah berhenti belajar dan mengasah kemampuannya.

Benarkah Delphi Sudah Mati?

Kasak-kusuk bahwa Delphi akan mati kiranya hampir mendekati kenyataan. Masa sich? Semua ini bermula sejak pencipta Delphi, Anders Hejlsberg, hengkang ke Microsoft! Beberapa spekulasi mulai muncul, baik yang positif maupun yang negatif. Termasuk juga hengkangnya salah satu Senior R&D Borland, Paul Gross, juga ke Microsoft.

Dan yang lebih mengejutkan lagi pada tanggal 8 Pebruari 2006, Borland menyatakan bahwa akan menjual produk IDE nya karena mereka fokus ke ALM (Application Lifecycle Management). IDE yang dijual termasuk: Borland Developer Studio (Delphi®, C++Builder® and C#Builder®) dan semua produk JBuilder®.

Selanjutnya 5 September 2006, Borland akhirnya menyerah juga dengan adanya IDE gratis dari Microsoft (MS Visual Studio) dan Sun Java (Netbeans, Eclipse dan Java Studio Creator), dengan cara merelease juga Turbo Delphi/C++/C# versi Explorer secara gratis, sementara versi Professional hanya sekitar USD 400, sebelumnya harga BDS (Borland Developer Studio) mencapai ribuan dollar.

Hal ini tidaklah mengejutkan, karena IDE Java dan Microsoft Visual Studio berkembang luar biasa. MS mencoba menahan laju Java dengan cara menggratiskan IDE nya, akhirnya “pelanduk juga yang mati”. Fenomena gratis ini sebenarnya akal-akalan saja, sebab di dunia ini tidak ada yang gratis 100%, pasti ada harga yang harus dibayar. Trik gratis ini hanyalah dipakai untuk menarik orang-orang dari negara biasa (bukan negara maju). Umumnya negara maju sudah menerapkan system komputer, sehingga lahannya sudah habis. Sedangkan negara berkembang, apalagi miskin, mau memakai teknologi tetapi mencari yang gratis.

Akhirnya, trik marketing berbicara juga, memang softwarenya gratis tetapi tidak untuk: service, maintenance, training dan support. Hal ini sudah terbukti pada beberapa software seperti Redhat Linux yang semula gratis akhirnya memecah produk mereka menjadi: Redhat (RH) Linux dan Fedora Core (FC), di mana RH bayar dan FC gratis, tetapi tidak gratis untuk masalah service, training dan sebagainya! Demikian juga dengan SUSE Linux, MS Visual Studio, Java, MySQL dan sebagainya.

Mau gratis? Kalo demikian, coba pikir, siapa yang membayar gaji karyawan Sun Java, MS dan Borland? Emangnya duit turun dari langit. Demikian negara berkembang dan miskin, mudah sekali diarahkan dengan trik marketing. Makanya, jangan sepelekan ilmu marketing, ingat: orang IT bisa membuat program dengan harga 1 juta tetapi orang marketing bisa menjualnya dengan harga hanya 100 ribu tetapi keuntungannya mencapai 100 juta!!!

Mengenal Mekanisme Looping Pada Borland Delphi

Dalam bahasa pemrograman apapun pasti dikenal suatu mekanisme looping atau perulangan. Looping disini sangat berguna sekali untuk mengontrol jalannya program, terutama jika ada aktivitas yang berulang-ulang dan bahkan ada suatu kondisi tertentu di dalam looping tersebut. Nah, kali ini kita akan bahas mengenai mekanisme looping apa saja yang terdapat dalam Borland Delphi.

Dalam penulisan program Delphi ada kalanya tidak membutuhkan program yang terlalu panjang ketika hanya terdiri dari pengulangan dari program yang sebelumnya. Proses pengulangan suatu proses dalam batas tertentu tersebut dapat ditulis secara singkat dengan menggunakan looping. Jenis-jenis dari looping dapat dibagi sebagai berikut:

1. for…to..do dan for…downto…do
2. repeat…until
3. while…do

Untuk lebih jelasnya akan dibahas masing – masing dari proses looping tersebut beserta contoh sederhana yang akan memudahkan dalam pengaplikasiannya.

1. for…to…do dan for…down…to
Perulangan for dibagi lagi menjadi 2 jenis yaitu:

a. for…to…do
b. for…downto…do

Keduanya mempunyai fungsi yang sama dengan sintaks program seperti berikut ini.

for variable := nilai_awal to nilai_akhir do pernyataan

for variable := nilai_awal downto nilai_akhir do pernyataan

Looping for bisa digunakan untuk beberapa jenis proses pengulangan yaitu jenis pengulangan integer, pengulangan character dan pengulangan enumeration.

Contoh program:

– Pengulangan pada jenis variabel integer

var
i : integer;
begin
for i:= 1 to 5 do
showmessage (‘nilai i =’ + inttostr(i));
end;

ketika di-run:

nilai i = 1
nilai i = 2
nilai i = 3
nilai i = 4
nilai i = 5

– Pengulangan pada jenis variable character

var
i : char;
begin
for i:= ‘a’ to ‘e’ do
showmessage(‘nilai i =’ + i);
end;

ketika di-run:

nilai i = a
nilai i = b
nilai i = c
nilai i = d
nilai i = e

– Pengulangan pada jenis variable enumeration

var
kota: (surabaya,jakarta,bandung,jogja,sidoarjo);
begin
for kota:= bandung to sidoarjo do
showmessage(‘kota i =’ + inttostr(ord(kota)));
end;

ketika di-run:

kota i = 2
kota i = 3
kota i = 4

Pada enumeration akan diberikan nomor urut (ordinal type) pada masing – masing isi dari kota saat pendeklarasiannya pada bagian var. Nomor urut dimulai dari 0 sampai 4. Nomor urut surabaya adalah 0,nomor urut dari jakarta adalah 1 dan seterusnya. Karena looping dimulai dari bandung yang bernomor urut 2 maka ketika dirun yang pertama kali muncul adalah kota i = 2.

Untuk jenis looping for… downto…do hampir sama hanya saja pengulangan dilakukan secara hitungan turun.

Contoh program:

var
i : char;
begin
for i:= ‘f’ downto ‘c’ do
showmessage(‘nilai i =’ + i);
end;

ketika di-run:

nilai i = f
nilai i = e
nilai i = d
nilai i = c

2. repeat…until
Jenis looping ini digunakan untuk looping dengan sampai dengan batas yang ditentukan setelah pernyataan until. Sintaks dari jenis looping ini dapat dilihat seperti dibawah ini:

repeat pernyataan until syarat

Contoh program:

var
i,a : integer;
begin
i:=1;
repeat
a:=i*5;
showmessage(‘nilai ‘+ inttostr(i)+’ * 5 = ‘+inttostr(a));
inc(i); // inc(i)===> i=i+1
until i > 5;
end;

ketika di-run:

nilai 1 * 5 =5
nilai 2 * 5 =10
nilai 3 * 5 =15
nilai 4 * 5 =20
nilai 5 * 5 =25

Pada jenis looping repeat, nilai i diberi nilai awal dahulu sebelum masuk ke looping. Untuk menaikkan nilai i diperlukan pernyataan tambahan inc(i) atau i = i + 1, tidak seperti dalam looping jenis for yang tidak membutuhkan pernyataan untuk menaikkan nilai i.

3. while…do
Jenis looping ini hampir sama dengan jenis looping repeat…until. Beda dari kedua jenis looping ini adalah jika pada looping repeat…until dilakukan proses dahulu baru dilihat syarat mengakhiri looping masih memenuhi atau tidak. Jika memenuhi maka proses looping akan berhenti tapi kalau tidak maka looping akan terus berjalan sedangkan pada jenis looping while…do syarat melakukan looping diajukan terlebih dahulu jika memenuhi maka proses akan dilakukan tapi jika tidak maka looping tidak dilakukan.

Sintaks dari jenis looping ini adalah sebagai berikut:

while syarat do pernyataan

Contoh program:

var
i,a : integer;
begin
i:=1;
while i<6 do
begin
a:=i*i;
showmessage(‘nilai kuadrat dari ‘+ inttostr(i)+’ adalah ‘ + inttostr(a));
inc(i); // inc(i)===> i=i+1
end;
end;

ketika di-run:

nilai kuadrat dari 1 adalah 1
nilai kuadrat dari 2 adalah 4
nilai kuadrat dari 3 adalah 9
nilai kuadrat dari 4 adalah 16
nilai kuadrat dari 5 adalah 25

Menghentikan proses looping

Ketika proses looping masih dilakukan kadang kala kita perlu untuk keluar dari looping berdasarkan suatu kondisi tertentu, untuk itu ada 3 cara untuk menghentikan proses looping tersebut yaitu dengan menggunakan:

1. goto
Biasanya penghentian looping dengan menggunakan sintak ini jarang digunakan. Penghentian looping dilakukan dengan pernyataan if. Jika syarat if terpenuhi maka looping berhenti dengan melompat ke label yang dibuat secara terpisah dengan program proses looping.

Contoh program:

var
i,a : integer;

label
berhenti;

begin
i:=1;
for i:=1 to 17 do
begin
a:=i*i;
showmessage (‘nilai kuadrat dari ‘+ inttostr(i)+’ adalah ‘ + inttostr(a));
if a>15 then goto berhenti;
end;

berhenti:
showmessage(‘loop berhenti saat i = ‘+inttostr(i)+’ dan kuadratnya adalah ‘+inttostr(a));
end;

ketika di-run:

nilai kuadrat dari 1 adalah 1
nilai kuadrat dari 2 adalah 4
nilai kuadrat dari 3 adalah 9
nilai kuadrat dari 4 adalah 16
loop berhenti saat i = 4 dan kuadratnya adalah 16

Pada proses tersebut looping tidak dilakukan sampai i ke-17 seperti perintah looping for…to…do, tetapi hanya hingga nilai a lebih dari 15 untuk pertama kalinya. Looping berhenti dan program melompat pada pernyataan dalam label.

2. continue
Penghentian loop ini digunakan dengan menggunakan pernyataan if . Jika pernyataan if dipenuhi maka looping tidak akan mengambil nilai tersebut tetapi meneruskan loop berikutnya.

Contoh program:

var
i : integer;
a : string;
begin
for i:=5 to 10 do
begin
if (i=6) or (i=9) then continue;
a:=a+’ ‘ +inttostr(i);
showmessage(‘a =’ + a);
end;
end;

ketika di-run:

a = 5
a = 5 7
a = 5 7 8
a = 5 7 8 10

Pada saat i = 6 maka looping tidak dilakukan, looping dilakukan kembali untuk nilai i = 7. Begitu pula pada saat i = 9.

3. break
Pernyataan ini digunakan untuk keluar dari proses looping, tanpa masuk ke pernyataan lain seperti pada goto dan juga tanpa meneruskan looping dengan menggunakan nilai selanjutnya seperti pada continue.

Contoh program:

var
i : integer;
begin
for i:=1 to 12 do
begin
if i=6 then
break;
showmessage(‘nilai i =’ + inttostr(i));
end;
end;

ketika di-run:

nilai i = 1
nilai i = 2
nilai i = 3
nilai i = 4
nilai i = 5

Looping dilakukan hanya sampai nilai i = 5. Ketika nilai i = 6 perintah break menghentikan looping.

Menampilkan CheckBox di DBGrid

type
TForm1 = class(TForm)
DBGrid1: TDBGrid;
procedure DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
DataCol: Integer; Column: TColumn; State: TGridDrawState);
procedure DBGrid1CellClick(Column: TColumn);
procedure DBGrid1ColEnter(Sender: TObject);
procedure DBGrid1ColExit(Sender: TObject);
procedure SaveBoolean;
private
{ Private declarations }
FOriginalOptions : TDBGridOptions;
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.SaveBoolean;
begin
DBGrid1.SelectedField.Dataset.Edit;
DBGrid1.SelectedField.AsBoolean := not Self.DBGrid1.SelectedField.AsBoolean;
end;
procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
DataCol: Integer; Column: TColumn; State: TGridDrawState);
Const
CtrlState : array[Boolean] of Integer = (DFCS_BUTTONCHECK,
DFCS_BUTTONCHECK or DFCS_CHECKED);
var
CheckBoxRectangle : TRect;
begin
if Column.Field.DataType = ftBoolean then
begin
DBGrid1.Canvas.FillRect(Rect);
CheckBoxRectangle.Left := Rect.Left + 2;
CheckBoxRectangle.Right := Rect.Right – 2;
CheckBoxRectangle.Top := Rect.Top + 2;
CheckBoxRectangle.Bottom := Rect.Bottom – 2;
DrawFrameControl(DBGrid1.Canvas.Handle,
CheckBoxRectangle,
DFC_BUTTON,
CtrlState[Column.Field.AsBoolean]);
end;
end;
procedure TForm1.DBGrid1ColEnter(Sender: TObject);
begin
if DBGrid1.SelectedField.DataType = ftBoolean then
begin
Self.FOriginalOptions := DBGrid1.Options;
DBGrid1.Options := DBGrid1.Options – [dgEditing];
end;
end;

procedure TForm1.DBGrid1ColExit(Sender: TObject);
begin
if DBGrid1.SelectedField.DataType = ftBoolean then
DBGrid1.Options := Self.FOriginalOptions;
end;

procedure TForm1.DBGrid1CellClick(Column: TColumn);
begin
if DBGrid1.SelectedField.DataType = ftBoolean then
SaveBoolean();
end;

Merubah backgroung pada Form MDI Parent

Caranya yaitu dengan menggunakan intersepsi dari messages WM_ERASEBKGND, WM_VSCROLL dan
WM_HSCROLL dan dibawa pada penggambaran area oleh prosedur DrawImage atau procedure InValidateRect.
Pada procedure CreateWnd digunakan prosedur SetWindowLong untuk instalasi prosedur baru pada window.
Jangan lupa untuk menghilangkan baris :

Application.CreateForm(TForm2, Form2)

dari file proyek dan baris :

var Form2: TForm2

dari file unit2.pas

type
TForm1 = class(TForm)
//  …
private
{ Private declarations }
public
procedure ClientWndProc(var Message: TMessage);
procedure DrawImage;
{ Public declarations }
protected
procedure CreateWnd; override;
end;

var
Form1: TForm1;
NewClient, OldClient: TFarProc;
MyDC: hDC;

implementation

uses unit2;

{$R *.DFM}

procedure TForm1.CreateWnd;
begin
inherited CreateWnd;
NewClient:=MakeObjectInstance(ClientWndProc);
OldClient:=Pointer(GetWindowLong(ClientHandle, GWL_WNDPROC));
SetWindowLong(ClientHandle, GWL_WNDPROC, LongInt(NewClient));
end;

procedure TForm1.DrawImage;
{ Membuat tile image pada daerah form client }
var
i, j: Integer;
WndRect, ImageRect: TRect;
Rows, Cols: Integer;
begin
GetWindowRect(ClientHandle, WndRect);
ImageRect:=Image1.ClientRect;
Rows:=WndRect.Bottom div ImageRect.Bottom;
Cols:=WndRect.Right div ImageRect.Right;
with Image1 do
for i:=0 to Rows+1 do
for j:=0 to Cols+1  do
BitBlt(MyDC,j*Picture.Width,i*Picture.Height,Picture.Width,
Picture.Height,Picture.Bitmap.Canvas.Handle,0,0,SRCCOPY);
end;

procedure TForm1.ClientWndProc(var Message: TMessage);
begin
case Message.Msg of
WM_ERASEBKGND:
begin
CallWindowProc(
OldClient,
ClientHandle,
Message.Msg,
Message.wParam,
Message.lParam);
MyDC:=TWMEraseBkGnd(Message).DC;
DrawImage;
Message.Result:=1;
end;
WM_VSCROLL,WM_HSCROLL:
begin
Message.Result:=
CallWindowProc(
OldClient,
ClientHandle,
Message.Msg,
Message.wParam,
Message.lParam);
InvalidateRect(ClientHandle,nil,True);
end;
else
Message.Result:=
CallWindowProc(
OldClient,
ClientHandle,
Message.Msg,
Message.wParam,
Message.lParam);
end;
end;

Konversi Desimal ke Biner

Sekarang kita akan menyajikan suatu fungsi sederhana yaitu mengkonversi dari bilangan desimal ke ke bilangan biner dengan menggunakan Borland Delphi. Silakan lihat fungsi di DecToBinStr berikut ini.

function TForm1.DecToBinStr(bil: integer): string;
var
str : string;
i : integer;
negative: Boolean;
begin
if bil < 0 then
negative := true;
bil:= abs(bil);
for i:= 1 to SizeOf(bil) * 8 do
begin
if bil < 0 then
str := str + ’1′
else
str := str + ’0′;
bil := bil shl 1;
end;
delete(str,1,pos(’1′,str)-1);
if negative then str := ‘-’ + str;
result := str;
end;

Konversi dari ShortDate String ke LongDate String Format

Bila saya mempunyai format tanggal pendek (ShortDate) dalam tipe String (mis: 02/05/2006), maka saya akan menggunakan function berikut untuk mengkonversinya ke format tanggal panjang (LongDate) dalam tipe String:

function LongDate(sDate: String): String;
var
tTanggal: TDateTime;
wTgl, wBln, wThn: Word;
begin
ShortDateFormat := ‘dd/mm/yyyy’;
tTanggal := StrToDate(sDate);
DecodeDate(tTanggal,wThn,wBln,wTgl);
tTanggal := EncodeDate(wThn, wBln, wTgl);
Result := FormatDateTime(‘dddd, d mmmm yyyy’, tTanggal);
end;

Sehingga dari “02/05/2006″ setelah dikonversi akan menghasilkan bentuk tanggal seperti: “Selasa, 2 Mei 2006″.

Ikuti

Get every new post delivered to your Inbox.