Welcome to PROJECT ( SECREET )

Jumat, 26 November 2010

Konsep dasar Pemrograman Fungsional

Komputer bahasa terutama dibagi dalam kategori pada paradigma pemrograman dasar yang didukung. Dalam pengembangan produk perangkat lunak atau dalam setiap modul program berskala besar ilmiah, pilihan bahasa tergantung pada paradigma ini pemrograman yang digunakan untuk menguraikan tujuan program. Bahasa ini dapat dibagi ke dalam bahasa pemrograman prosedural, bahasa deklaratif, bahasa berorientasi objek dan bahasa Pemrograman Fungsional.

Berlawanan dengan konsep pemrograman populer yang digunakan dalam proses pengembangan perangkat lunak komersial online, Pemrograman Fungsional dissects masalah menjadi kumpulan fungsi. Alih-alih menekankan pada perubahan negara, Pemrograman Fungsional menggunakan fungsi untuk mengambil input dan menghasilkan output yang diinginkan. Asal-usul Pemrograman Fungsional dapat ditelusuri untuk Lambda Calculus, yang dikembangkan untuk bekerja dengan rekursi, fungsi aplikasi dan definisi.

Pemrograman Fungsional menghambat fungsi-fungsi yang dapat mengubah keadaan internal atau membuat perubahan terlihat nilai fungsi itu kembali. Ini "fungsi murni" kebal terhadap perubahan karena efek runtime dan dengan demikian hanya menghasilkan output yang diperlukan ketat di nominal dengan masukan yang diberikan.

Fungsional Pemrograman memiliki manfaat sebagai berikut:

Dalam Pemrograman Fungsional, lebih mudah untuk matematis membuktikan bahwa suatu program benar.
Pemrograman Fungsional istirahat masalah dalam modul. Oleh karena itu relatif mudah untuk menulis fungsi yang lebih kecil bukan menggunakan satu besar. Hal ini akhirnya mengurangi kesalahan dan meningkatkan keterbacaan.
proses Debugging dalam program fungsional sederhana karena fungsi ditentukan dengan baik dan lebih kecil.
Sangat mudah untuk melakukan tes untuk program fungsional sebagai fungsi independen dari sistem negara.
program fungsional yang portabel. Fungsi yang sama dapat digunakan dalam tujuan yang berbeda bila digunakan dalam koleksi yang berbeda.

Bahasa pemrograman fungsional lebih disukai untuk tujuan ilmiah dan akademik lebih dalam proyek untuk perangkat lunak komersial dan pengembangan aplikasi. Namun demikian, beberapa bahasa pemrograman fungsional seperti XSLT (XML), Ocaml, Haskell, Mathematica, dll Erlang bekerja di aplikasi industri dan komersial. Juga, SQL (Structured Query Language) dan Spreadsheets menggunakan konsep-konsep tertentu Pemrograman Fungsional.

Konsep dasar lambda kalkulus

Sejarah

Kalkulus lambda menyediakan kerangka teoretis untuk menjelaskan fungsi dan evaluasi mereka. Walaupun merupakan abstraksi matematis, bukan bahasa pemrograman, membentuk dasar dari hampir semua bahasa pemrograman fungsional hari ini. Perumusan teoritis yang setara, combinatory logika, secara umum dianggap lebih abstrak daripada kalkulus lambda dan mendahuluinya dalam penemuan.
Ini digunakan dalam beberapa bahasa termasuk Unlambda esoteris. Combinatory logika dan kalkulus lambda berdua awalnya dikembangkan untuk mencapai pendekatan yang lebih jelas dasar matematika. [22]

Rasa fungsional awal bahasa LISP, dikembangkan oleh John McCarthy sementara di MIT untuk IBM seri 700/7000 komputer ilmiah pada akhir tahun 1950-an. [23] LISP memperkenalkan banyak fitur yang sekarang ditemukan dalam bahasa-bahasa fungsional, meskipun secara teknis LISP multi-paradigma
bahasa. Skema dan Dylan kemudian mencoba untuk menyederhanakan dan meningkatkan LISP.

Pengolahan Informasi Language (IPL) kadang-kadang disebut sebagai komputer pertama yang berbasis bahasa pemrograman fungsional.
Ini adalah gaya bahasa assembly untuk memanipulasi daftar simbol. Memang ada suatu pengertian tentang "generator", yang berarti menerima suatu fungsi fungsi sebagai argumen, dan, karena itu adalah bahasa tingkat perakitan, kode dapat digunakan sebagai data, sehingga IPL dapat dianggap sebagai memiliki tingkat tinggi fungsi. Namun, hal itu sangat bergantung pada daftar bermutasi struktur dan fitur-fitur penting serupa.

Kenneth E. Iverson mengembangkan bahasa pemrograman APL pada awal tahun 1960-an, yang dijelaskan dalam buku 1962 A Programming Language (ISBN 9780471430148). APL adalah pengaruh utama John Backus's FP bahasa pemrograman. Pada awal 1990-an, Iverson dan Roger Hui menciptakan penerus APL, bahasa pemrograman J. Pada pertengahan 1990-an, Arthur Whitney, yang sebelumnya bekerja dengan Iverson, menciptakan bahasa pemrograman K, yang digunakan secara komersial dalam industri keuangan.

John Backus disajikan FP bahasa pemrograman dalam kuliah Turing Award 1977 Pemrograman Dapatkah Jadilah Dibebaskan Dari von Neumann Gaya?
Sebuah Fungsional Gaya dan Program Aljabar. Dia mendefinisikan program fungsional seperti yang sedang dibangun dalam suatu cara hirarkis dengan cara "menggabungkan bentuk-bentuk" yang memungkinkan sebuah "aljabar program"; dalam bahasa modern, ini berarti bahwa program-program fungsional mengikuti prinsip compositionality. Koran Backus penelitian dipopulerkan pemrograman fungsional, meskipun fungsi menekankan pemrograman tingkat daripada kalkulus lambda-gaya yang telah datang untuk berhubungan dengan pemrograman fungsional.

Pada tahun 1970-an ML bahasa pemrograman ini diciptakan oleh Robin Milner di University of Edinburgh, dan David Turner bahasa awalnya dikembangkan SASL di University of St Andrews dan kemudian bahasa Miranda di University of Kent. ML akhirnya berkembang menjadi beberapa dialek, yang paling umum yang sekarang Objektif Caml dan Standar ML. Juga di tahun 1970-an, perkembangan bahasa pemrograman Scheme (-fungsional yang sebagian dialek Lisp), seperti yang dijelaskan dalam Lambda berpengaruh Kertas dan buku teks tahun 1985 Struktur dan Interpretasi of Computer Program, membawa kesadaran akan kekuatan pemrograman fungsional dengan -bahasa pemrograman yang lebih luas masyarakat.

Pada tahun 1980-an, Per Martin-LOF Intuitionistic mengembangkan teori tipe (juga disebut teori tipe konstruktif), program fungsional yang terkait dengan bukti konstruktif sewenang-wenang kompleks dinyatakan sebagai proposisi matematika tergantung jenis. Hal ini menyebabkan pendekatan baru yang kuat untuk membuktikan teorema interaktif dan telah mempengaruhi perkembangan selanjutnya dari banyak bahasa pemrograman fungsional.

Bahasa pemrograman yang Haskell, dimulai dengan konsensus pada tahun 1987, untuk membentuk standar terbuka untuk pemrograman fungsional penelitian; pelaksanaan rilis telah berlangsung sejak 1990.
Konsep

Sejumlah konsep dan paradigma yang khusus untuk pemrograman fungsional, dan umumnya pemrograman yang asing (termasuk pemrograman berorientasi objek). Namun, bahasa pemrograman sering hibrida dari beberapa paradigma pemrograman jadi programer menggunakan "kebanyakan imperatif" bahasa mungkin telah memanfaatkan beberapa konsep-konsep ini. [24]
Orde yang lebih tinggi fungsi

Orde yang lebih tinggi fungsi fungsi yang dapat mengambil fungsi-fungsi lain sebagai argumen atau kembali mereka sebagai hasil (operator diferensial d / dx yang menghasilkan turunan dari fungsi f adalah contoh ini dalam kalkulus).

Fungsi orde yang lebih tinggi berhubungan erat dengan kelas satu fungsi, dalam tatanan yang lebih tinggi-fungsi dan kelas pertama fungsi kedua memungkinkan fungsi sebagai argumen dan hasil dari fungsi lainnya. Perbedaan antara keduanya adalah halus: "tingkat tinggi" menggambarkan suatu konsep matematika fungsi yang beroperasi pada fungsi lainnya, sedangkan "kelas satu" adalah istilah ilmu komputer bahasa pemrograman yang menjelaskan entitas yang tidak memiliki batasan penggunaan mereka (dengan demikian kelas satu fungsi dapat muncul di manapun dalam program yang pertama-kelas lain seperti bilangan yang dapat entitas, termasuk sebagai argumen untuk fungsi lain dan ketika mereka kembali nilai-nilai).

Orde yang lebih tinggi memungkinkan fungsi currying, suatu teknik di mana suatu fungsi diterapkan pada argumen satu per satu waktu, dengan masing-masing aplikasi kembali fungsi baru yang menerima argumen berikutnya.
Pure fungsi

Fungsi fungsional murni (atau ekspresi) tidak memiliki memori atau I / O efek samping (kecuali jika hasil perhitungan itu sendiri adalah dihitung sebagai efek samping). Ini berarti bahwa fungsi murni memiliki beberapa sifat yang berguna, banyak yang dapat digunakan untuk mengoptimalkan kode:

* Jika hasil dari ekspresi murni tidak digunakan, dapat dihilangkan tanpa mempengaruhi ekspresi lain.
* Jika fungsi murni disebut dengan parameter yang tidak menimbulkan efek samping, hasilnya konstan sehubungan dengan daftar parameter (kadang-kadang disebut referensial transparansi), yaitu jika fungsi murni lagi dipanggil dengan parameter yang sama, hasil yang sama akan dikembalikan (hal ini dapat menghidupkan cache optimisations seperti memoization).
* Jika tidak ada data yang ketergantungan antara dua ekspresi murni, kemudian pesanan mereka dapat dibalikkan, atau mereka dapat dilakukan secara paralel dan mereka tidak dapat mengganggu satu sama lain (dalam istilah lain, evaluasi dari setiap ekspresi murni adalah thread-safe).
* Jika seluruh bahasa yang tidak memungkinkan efek samping, maka setiap strategi evaluasi dapat digunakan; kompiler ini memberikan kebebasan untuk menyusun ulang atau menggabungkan evaluasi ekspresi dalam program (misalnya, menggunakan deforestasi).

Sementara sebagian besar kompiler untuk bahasa pemrograman yang murni mendeteksi fungsi, dan Common-subexpression melakukan penghapusan untuk pemanggilan fungsi murni, mereka tidak selalu dapat melakukan hal ini untuk pre-compiled perpustakaan, yang biasanya tidak mengungkapkan informasi ini, sehingga dapat mencegah optimisations yang melibatkan fungsi-fungsi eksternal. Beberapa compiler, seperti gcc, menambahkan kata kunci untuk seorang programmer untuk secara eksplisit menandai fungsi eksternal sebagai murni, untuk mengaktifkan optimisations tersebut.
Fortran 95 memungkinkan difungsikan "murni".
Rekursi
Artikel utama: Rekursi (ilmu komputer)

Iterasi (looping) dalam bahasa fungsional biasanya dicapai melalui rekursi. Fungsi rekursif memanggil diri mereka sendiri, memungkinkan suatu operasi harus dilakukan berulang-ulang. Rekursi mungkin memerlukan setumpuk mempertahankan, tapi ekor rekursi dapat diakui dan dioptimalkan oleh kompilator ke kode yang sama digunakan untuk mengimplementasikan iterasi dalam bahasa imperatif. Skema memerlukan standar bahasa pemrograman implementasi untuk mengenali dan mengoptimalkan rekursi ekor. Optimasi rekursi ekor dapat dilaksanakan dengan mengubah program tersebut menjadi kelanjutan gaya lewat selama kompilasi, di antara pendekatan-pendekatan lain.

Pola umum rekursi dapat diperhitungkan dengan menggunakan fungsi tatanan yang lebih tinggi, catamorphisms dan anamorphisms (atau "lipatan" dan "tersingkap") menjadi contoh yang paling jelas. Seperti lebih tinggi memainkan peran fungsi analog dengan built-in kontrol struktur seperti loop dalam bahasa-bahasa imperatif.

Sebagian besar tujuan umum bahasa pemrograman fungsional memungkinkan tak terbatas Turing rekursi dan lengkap, yang membuat masalah terputus-putus diputuskan, dapat menyebabkan unsoundness dari equational penalaran, dan biasanya memerlukan pengenalan inkonsistensi kedalam logika bahasa yang diungkapkan oleh sistem tipe. Beberapa tujuan khusus bahasa seperti Coq hanya memperbolehkan beralasan rekursi dan sangat normalisasi (nonterminating perhitungan hanya dapat dinyatakan dengan nilai yang tak terhingga disebut aliran codata). Akibatnya, bahasa-bahasa ini gagal menjadi Turing lengkap dan mengekspresikan fungsi-fungsi tertentu di dalamnya adalah mustahil, tapi mereka masih bisa mengekspresikan berbagai perhitungan kelas yang menarik sambil menghindari masalah-masalah yang diperkenalkan oleh rekursi tidak dibatasi. Terbatas pada pemrograman fungsional beralasan rekursi dengan beberapa kendala lain yang disebut total pemrograman fungsional.
Lihat Turner 2004 untuk lebih banyak diskusi. [25]
Ketat ketat versus non-evaluasi

Artikel utama: Evaluasi strategi

Bahasa fungsional dapat dikategorikan dengan apakah mereka menggunakan ketat (bersemangat) atau non-ketat (malas) evaluasi, konsep-konsep yang merujuk kepada bagaimana argumen fungsi diproses ketika ekspresi sedang dievaluasi. Perbedaan teknis dalam ungkapan semantik denotational mengandung kegagalan atau perhitungan berbeda. Dalam evaluasi yang ketat, evaluasi setiap istilah yang mengandung subterm yang gagal itu sendiri akan gagal.
Sebagai contoh, ekspresi

print panjang ([2 +1, 3 * 2, 1 / 0, 5-4])

akan gagal dalam evaluasi ketat karena pembagian dengan nol pada elemen ketiga dari daftar. Bawah nonstrict evaluasi, fungsi panjang akan mengembalikan nilai 4, karena evaluasi itu tidak akan berusaha untuk mengevaluasi istilah yang membentuk daftar. Singkatnya, evaluasi yang ketat selalu penuh fungsi mengevaluasi argumen sebelum memohon fungsi. Non-evaluasi ketat tidak mengevaluasi argumen berfungsi kecuali nilai-nilai mereka diminta untuk mengevaluasi fungsi panggil itu sendiri.

Strategi pelaksanaan yang biasa untuk non-evaluasi yang ketat dalam bahasa fungsional adalah pengurangan grafik. Non-ketat evaluasi digunakan secara default dalam beberapa bahasa fungsional murni, termasuk Miranda, Bersih dan Haskell.

1984 Hughes berpendapat untuk non-evaluasi yang ketat sebagai sebuah mekanisme untuk memperbaiki modularitas program melalui pemisahan keprihatinan, dengan mengurangi pelaksanaan independen produsen dan konsumen data stream. [26] Launchbury 1993 menjelaskan beberapa kesulitan yang malas memperkenalkan evaluasi, khususnya dalam menganalisis program persyaratan penyimpanan, dan mengusulkan semantik operasional untuk membantu dalam analisis seperti itu. [27] Harper 2009 mengusulkan termasuk nonstrict ketat dan evaluasi dalam bahasa yang sama, menggunakan bahasa sistem tipe untuk membedakan mereka. [28]
Jenis pencocokan pola sistem dan

Terutama sejak berkembangnya jenis Milner Hindley-kesimpulan pada 1970-an, bahasa pemrograman fungsional cenderung menggunakan kalkulus lambda diketik, sebagai lawan dari kalkulus lambda untyped digunakan dalam Lips dan variannya (seperti Scheme).
Penggunaan aljabar datatypes dan pencocokan pola manipulasi membuat struktur data yang kompleks lebih nyaman dan ekspresif; kehadiran waktu kompilasi yang kuat memeriksa jenis program membuat lebih dapat diandalkan, sedangkan tipe inferensi membebaskan programmer dari kebutuhan untuk menyatakan secara manual tipe compiler.

Beberapa penelitian yang berorientasi pada bahasa-bahasa fungsional seperti Coq, Agda, Cayenne, dan epigram Intuitionistic didasarkan pada teori tipe, yang memungkinkan untuk tergantung pada jenis istilah. Seperti disebut tergantung jenis tipe. Sistem jenis ini tidak memiliki jenis decidable inferensi dan sulit untuk memahami dan program dengan. Tapi tergantung jenis sewenang-wenang dapat mengekspresikan proposisi dalam logika predikat. Melalui Curry-Howard isomorphism, lalu, baik program yang diketik dalam bahasa-bahasa ini menjadi sarana untuk menulis bukti matematika formal dari mana kompilator dapat menghasilkan kode bersertifikat. Meskipun bahasa ini terutama tertarik pada penelitian akademis (termasuk dalam matematika formal), mereka telah mulai digunakan dalam rekayasa juga. Compcert adalah sebuah kompiler untuk subset dari bahasa pemrograman C yang tertulis di Coq dan diverifikasi secara resmi. [29]

Bentuk terbatas yang disebut umum tergantung jenis tipe data aljabar (GADT's) dapat dilaksanakan dengan cara yang memberikan beberapa manfaat dari program dependently-diketik sambil menghindari ketidaknyamanan sebagian besar. [30] GADT yang tersedia di Glasgow Haskell Compiler dan di Scala (sebagai "kasus kelas"), dan telah diusulkan sebagai tambahan ke bahasa lain termasuk Java dan C #. [31]
Pemrograman fungsional dalam bahasa-bahasa non-fungsional

Dimungkinkan untuk menggunakan gaya fungsional dalam bahasa-bahasa pemrograman yang tidak secara tradisional dianggap sebagai bahasa fungsional. [32] Beberapa bahasa non-fungsional meminjam fitur-fitur seperti fungsi orde yang lebih tinggi, dan daftar comprehensions dari bahasa pemrograman fungsional. Hal ini membuat lebih mudah untuk mengadopsi gaya fungsional ketika menggunakan bahasa tersebut. Fungsional konstruksi seperti orde yang lebih tinggi daftar fungsi dan malas dapat diperoleh di C + + melalui perpustakaan. [33] Di C, pointer fungsi dapat digunakan untuk mendapatkan beberapa efek orde yang lebih tinggi fungsi. Misalnya peta fungsi umum dapat diimplementasikan dengan menggunakan pointer fungsi. Dalam C # versi 3.0 dan yang lebih tinggi, lambda fungsi dapat digunakan untuk menulis program dalam gaya fungsional. [Rujukan?] Di Jawa, kelas anonim terkadang dapat digunakan untuk mensimulasikan penutupan, [rujukan?] Namun kelas anonim tidak selalu tepat pengganti untuk penutupan karena mereka memiliki kemampuan lebih terbatas.

Banyak desain berorientasi objek pola dinyatakan dalam istilah-istilah pemrograman fungsional: misalnya, hanya pola Strategi penggunaan perintah-perintah yang lebih tinggi fungsi, dan pola Pengunjung kira-kira berkaitan dengan suatu Catamorphism, atau lipat.

Manfaat data yang kekal dapat dilihat bahkan dalam program-program penting, jadi programmer sering berusaha untuk membuat beberapa data yang berubah bahkan dalam program-program penting. [Rujukan?]
Perbandingan antara pemrograman fungsional dan

Pemrograman fungsional sangat berbeda dengan pemrograman imperatif. Perbedaan yang paling signifikan berasal dari fakta bahwa pemrograman fungsional menghindari efek samping, yang digunakan dalam pemrograman negara menerapkan dan I / O. Pemrograman fungsional murni melarang efek samping sama sekali. Disallowing efek samping menyediakan transparansi referensial, yang membuatnya lebih mudah untuk memverifikasi, mengoptimalkan, dan program parallelize, dan lebih mudah untuk menulis alat otomatis untuk melakukan tugas-tugas.

Fungsi tatanan yang lebih tinggi jarang digunakan dalam pemrograman yang lebih tua. Di mana program imperatif tradisional dapat menggunakan loop untuk melewati daftar, gaya yang fungsional akan sering menggunakan fungsi orde lebih tinggi, peta, itu perlu sebagai argumen fungsi dan daftar, fungsi berlaku untuk setiap elemen dari daftar, dan kembali
daftar hasil.
Negara simulasi

Ada tugas (misalnya, mempertahankan saldo rekening bank) yang sering tampak paling alami dilaksanakan dengan negara. Pemrograman fungsional murni melakukan tugas ini, dan I / O tugas-tugas seperti menerima input pengguna dan mencetak ke layar, dalam cara yang berbeda.

Murni bahasa pemrograman fungsional dengan menggunakan alat Haskell monads, berasal dari teori kategori. Monads sangat kuat dan menawarkan cara untuk abstrak jenis tertentu pola komputasi, termasuk (namun tidak terbatas pada) pemodelan perhitungan dengan negara yg mungkin berubah (dan efek samping lain seperti I / O) dalam suatu perintah dengan cara tanpa kehilangan kemurnian. Sementara yang sudah ada monads mungkin mudah untuk menerapkannya dalam sebuah program, mengingat template yang sesuai dan contoh, banyak menemukan mereka sulit untuk mengerti secara konseptual, misalnya, ketika diminta untuk mendefinisikan monads baru (yang kadang-kadang diperlukan untuk jenis perpustakaan tertentu). [34]

Metode alternatif seperti logika Hoare dan keunikan telah dikembangkan untuk melacak efek samping dalam program. Beberapa penelitian modern bahasa menggunakan sistem efek untuk membuat eksplisit adanya efek samping.
Efisiensi isu

Bahasa pemrograman fungsional telah dianggap kurang efisien dalam penggunaan CPU dan memori dari bahasa imperatif seperti C dan Pascal. [35] Untuk bahasa-bahasa fungsional murni, yang terburuk adalah logaritmik penurunan jumlah sel-sel memori yang digunakan, karena bisa berubah memori dapat diwakili oleh sebuah struktur data fungsional murni dengan logaritma waktu akses (seperti pohon seimbang). [rujukan?] Namun demikian, slowdowns terjadi sangat jarang dalam prakteknya. Untuk program yang melakukan perhitungan numerik yang intensif, seperti bahasa-bahasa fungsional dan Bersih OCaml biasanya serupa dalam hal kecepatan untuk C. [36] Untuk program yang menangani matriks besar dan multidimensi database, array bahasa fungsional (seperti J dan K) yang dirancang dengan kecepatan optimasi.

Lebih lanjut, kekekalan data dapat, dalam banyak kasus, menyebabkan efisiensi pelaksanaan dalam membiarkan compiler untuk membuat asumsi yang tidak aman dalam bahasa imperatif, sangat jauh meningkatkan peluang untuk inlining. [Rujukan?]

Malas evaluasi dapat juga mempercepat program, bahkan asimtotik, sedangkan hal itu mungkin lambat turun di sebagian besar oleh faktor konstan (Namun, hal itu mungkin memperkenalkan kebocoran memori bila digunakan dengan tidak semestinya) [rujukan?].
Coding gaya

Program imperatif cenderung untuk menekankan serangkaian langkah-langkah yang diambil oleh sebuah program dalam melaksanakan suatu tindakan, sementara program fungsional cenderung menekankan komposisi dan susunan fungsi, seringkali tanpa menentukan langkah-langkah eksplisit. Contoh sederhana dari dua solusi untuk tujuan program yang sama (menggunakan multi-paradigma yang sama bahasa Python) menggambarkan hal ini.

# Keharusan gaya
target = [] # membuat daftar kosong
untuk item dalam source_list: # iterate atas setiap hal dalam sumber
trans1 = G (item) # mengubah item dengan G () function
trans2 = F (trans1) # kedua mengubah dengan F () function
target.append (trans2) # menambahkan item ke target berubah

Sebuah versi fungsi memiliki rasa yang berbeda untuk itu:

# Fungsional gaya
# FP-bahasa berorientasi sering punya standar menenangkan ()
compose2 = lambda A, B: lambda x: A (B (x)) # Tentukan bagaimana menerapkan dua generik transformasi
target = peta (compose2 (F, G), source_list) # Oleskan dua fungsi spesifik F dan G untuk setiap item dalam sumber

Berbeda dengan gaya imperatif yang menjelaskan langkah-langkah yang terlibat dalam membangun sasaran, gaya fungsional menggambarkan hubungan matematis antara source_list dan sasaran. Kode python, dalam praktiknya, sering ditulis dengan daftar pemahaman, suatu bentuk sintaksis gula untuk untuk loop dengan implisit append:

target = [F (G (item)) untuk item dalam source_list]

Penggunaan di industri

Pemrograman fungsional memiliki reputasi untuk menjadi murni kepentingan akademis [rujukan?]. Namun, beberapa bahasa pemrograman fungsional menonjol telah digunakan dalam aplikasi komersial atau industri. Sebagai contoh, bahasa pemrograman Erlang, yang dikembangkan oleh perusahaan Swedia Ericsson pada akhir tahun 1980-an, pada awalnya digunakan untuk menerapkan toleransi kegagalan sistem telekomunikasi. [7] Sejak itu menjadi populer untuk membangun berbagai aplikasi di perusahaan-perusahaan seperti T-Mobile, Nortel, dan Facebook. [6] [8] [37] The Skema dialek Lisp digunakan sebagai dasar untuk beberapa aplikasi pada komputer Apple Macintosh awal [2] [3], dan memiliki lebih baru-baru ini telah diterapkan untuk masalah seperti perangkat lunak simulasi pelatihan [4] dan kontrol teleskop. [5] OCaml, yang diperkenalkan pada pertengahan tahun 1990-an, telah melihat penggunaan komersial di bidang-bidang seperti analisis keuangan [9], sopir verifikasi, pemrograman robot industri, dan analisis statis dari perangkat lunak tertanam. [10] Haskell, walaupun pada awalnya dimaksudkan sebagai sebuah bahasa, [12] juga telah diterapkan oleh berbagai perusahaan, dalam bidang-bidang seperti sistem dirgantara, desain hardware, dan web programming. [11] [12]

Bahasa pemrograman fungsional lainnya yang telah melihat digunakan dalam industri meliputi Scala [38], F # [39] [40], Lisp [41], Standard ML [42] [43], dan Clojure. [44]

SEMANTIC OPERATIONAL

Dalam ilmu komputer , semantik operasional adalah cara untuk memberi makna pada program komputer dengan ketat dengan cara matematis. Pendekatan-pendekatan lain untuk menyediakan semantik formal bahasa pemrograman termasuk semantik aksiomatik dansemantik denotational .Semantik operasional untuk bahasa pemrograman menggambarkan bagaimana sebuah program yang valid ditafsirkan sebagai urutan langkah komputasi. Urutan ini maka adalah arti dari program. Dalam konteks program fungsional , langkah terakhir dalam urutan kembali nilai mengakhiri program. (Secara umum ada dapat nilai banyak kembali untuk program tunggal, karena program bisa nondeterministic , dan bahkan untuk program deterministik bisa ada urutan perhitungan banyak sejak semantik tidak dapat menetapkan apa urutan operasi tiba di nilai tersebut.)Untuk pertama kalinya, konsep semantik operasional yang digunakan dalam mendefinisikan semantik Algol 68. Pernyataan berikut adalah kutipan dari laporan revisi 68 ALGOL:Arti dari program dalam bahasa yang ketat dijelaskan dalam hal komputer hipotesis yang melakukan serangkaian tindakan yang merupakan penjabaran dari program tersebut. ( Algol68 , Bagian 2)
Penggunaan pertama istilah “operasional” semantik dalam arti sekarang ini disebabkan Dana Scott ( Plotkin04 ). Berikut adalah kutipan dari makalah Scott pada semantik formal, di mana ia menyebutkan “operasional” aspek semantik.
Hal ini semua sangat baik untuk bertujuan untuk lebih ‘abstrak’ dan pendekatan yang ‘bersih’ untuk semantik, tetapi jika rencana itu harus ada gunanya, aspek operasional tidak bisa sepenuhnya diabaikan. ( Scott70 )
Mungkin inkarnasi formal pertama semantik operasional adalah bahwa dari kalkulus lambda [ rujukan ]. mesin Abstrak dalam tradisi darimesin SECD juga erat terkait.

Seperti yang kita ketahui bahwa semantik merupakan kata yang mempunyai banyak makna, baik dalam suatu bahasa maupun dalam kode pemograman.
Kata Semantik berasal dari Bahasa Yunani: semantikos,artinya memberikan tanda, penting, dari kata sema, tanda) adalah cabang linguistik yang mempelajari makna yang terkandung pada suatu bahasa, kode, atau jenis representasi lain.
Semantik biasanya dikontraskan dengan dua aspek lain dari ekspresi makna: sintaksis, pembentukan simbol kompleks dari simbol yang lebih sederhana, serta pragmatika, penggunaan praktis simbol oleh agen atau komunitas pada suatu kondisi atau konteks tertentu.
Semantik, Mendefinisikan arti dari program yang benar secara sintaks dari bahasa pemrograman tersebut.
Contoh : Pada pembuatan program C
int vector[10]
Arti semantiknya akan menyebabkan ruang sebanyak 10 alokasi.
Sedangkan, terdapat tahap lain yang dapat mendefinisikan semantik secara analisa..
Pada tahap analisis semantik, dilakukan pengecekan pada struktur akhir yang di peroleh dan di periksa komponennya dengan komponen yang ada.
Semantik juga berkaitan dengan pusat dari tahapan translasi. Analisis semantik juga kemudian menjadi jembatan antara analisis dan sintesis dari translasi. Dimana struktur sintaksis yang dikenali struktur sintaksis diproses dan struktur eksekusi sudah mulai di bentuk.
Kemudian menghasilkan suatu obyek yang dapat di eksekusi dan di translasi , sedangkan bentuk obyek yang di eksekusi ini merupakan bentuk internal dari final program eksekusi yang di manipulasi oleh tahap optimisasi oleh translator sebelum akhirnya kode eksekusi benar-benar di hasilkan.
Sedangkan, fungsi dari analisis semantik yaitu untuk menentukan makna dari serangkaian instruksi yang terdapat dalam program
Contoh : A := (A + B)*(C + D)
Hal ini membuat penganalisis semantik harus mampu menentukan aksi yang di lakukan oleh operator, termasuk memeriksa kesesuaian tipe dengan statement-statement yang ada. Misalkan bila terdapat suatu operasi, diperiksa tipe operand. Contohnya bila ekspresi yang mengikuti instruksi IF berarti tipenya boolean, akan diperiksa tipe identifier dan tipe ekspresi. Bila ada operasi antara dua operand, maka tipe operand pertama harus bisa dioperasikan dengan operand kedua.
Analisa semantik sering juga digabungkan pada pembangkitan kode antara yang menghasilkan Output intermediate code, yang nantinya akan digunakan pada proses kompilasi berikutnya.

KODE ANTARA
Kode antara/Intermediate code merupakan hasil dari tahapan analisis, yang dibuat oleh kompilator pada saat mentranslasikan program dari bahasa tingkat tinggi. Kegunaan dari kode antara sebagai berikut:
- untuk memperkecil usaha dalam membangun kompilator dari sejumlah bahasa ke sejumlah mesin. Dengan adanya kode antara yang lebih machine independent maka kode antara yang dihasilkan dapat digunakan lagi pada mesin lainnya.

- Proses optimasi masih lebih mudah. Beberapa strategi optimisasi lebih mudah dilakukan pada kode antara daripada pada program sumber atau pada kode assembly dan kode mesin.

- Bisa melihat program internal yang mudah dimengerti. Kode antara ini akan lebih mudah dipahami dari pada kode assembly atau kode mesin.
Terdapat dua macam kode antara, yaitu Notasi Postfix dan N-Tuple

1) NOTASI POSTFIX
Sehari-hari kita biasa menggunakan operasi dalam notasi infix (letak operator di tengah). Pada notasi Postfix operator diletakkan paling akhir maka disebut juga dengan notasi Sufix atau Reverse Polish.
Sintaks notasi Postfix :

Misalkan ekspresi :
(a + b)*(c + d)
kalau kita nyatakan dalam postfix :
ab + cd + *
Kita dapat mengubah instruksi kontrol program yang ada ke dalam notasi Postfix. Misal :
IFTHENELSE
diubah ke dalam Postfix
BZBR

label1 label2
Keterangan :
BZ = branch if zero (zero = salah) {bercabang/meloncat jika kondisi yang dites salah}
BR = branch {bercabang/meloncat tanpa ada kondisi yang dites}
Arti dari notasi Postfix di atas adalah sebagai berikut.
“Jika kondisi ekspresi salah, maka instruksi akan meloncat ke Label1dan menjalankan statement2. Bila kondisi ekspresi benar, maka statement1 akan dijalankan lalu meloncat ke Label2. Label1 dan Label1 dan Label2 sendiri menunjukan posisi tujuan loncatan, untuk Label1 posisinya tepat sebelum statement2 dan Label2 setelah statement2”

2) NOTASI N-TUPLE
Bila pada Postfix setiap baris instruksi hanya terdiri dari satu tupel, pada notasi N-tuple setiap baristerdiri dari beberapa tupel. Format umum dari Notasi N-Tuple ada sebagai berikut: operator......(N-1) operand
selanjutnya akan dibahas notasi 3 tupel dan 4 tupel.
Adapun ILMU SEMANTIK OPERASIONAL
Inti denotasional Ilmu Semantik adalah : Terjemahan dari program konvensional ke dalam persamaan fungsional.
Tujuan denotasional Semantik dari suatu bahasa adalah : Menugaskan suatu nilai kepada setiap ekspresi dalam bahasa
Ilmu Semantik dapat dinyatakan dalam lambda calculus sebagai fungsi matematical, Eval, dari ekspresi ke nilai
Contoh : Eval[+ 3 4]=7 menggambarkan bhw nilai ekspresi (+ 3 4) untuk menjadi 7

Daftar Pustaka

- Konsep dasar lambda Kalkulus (:http://pemrogramanlanjut.blogspot.com/2010/03/functional-programming.html)

- Semantik Operasional

(http://en.wikipedia.org/wiki/operational_semantics)

»»  Baca Selengkapnya ..

Kamis, 25 November 2010

Tugas Softkill 3

1. Koordinasi
Koordinasi adalah sebuah proses saling mengerti antara dua orang atau lebih untuk melaksanakan suatu hal. Proses yang harus dijalani agar suatu kegiatan dapat dilaksanakan dengan lancer ataupun jika ada masalah tidak akan terlalu banyak kesulitan untuk mengatasinya.


Menurut G.R. Terry koordinasi adalah suatu usaha yang sinkron dan teratur untuk menyediakan jumlah dan waktu yang tepat, dan mengarahkan pelaksanaan untuk menghasilkan suatu tindakan yang seragam dan harmonis pada sasaran yang telah ditentukan. Sedangkan menurut E.F.L. Brech, koordinasi adalah mengimbangi dan menggerakkan tim dengan memberikan lokasi kegiatan pekerjaan yang cocok dengan masing-masing dan menjaga agar kegiatan itu dilaksanakan dengan keselarasan yang semestinya di antara para anggota itu sendiri (Hasibuan, 2007:85).


Menurut Mc. Farland (Handayaningrat, 1985:89) koordinasi adalah suatu proses di mana pimpinan mengembangkan pola usaha kelompok secara teratur di antara bawahannya dan menjamin kesatuan tindakan di dalam mencapai tujuan bersama.

Sementara itu, Handoko (2003:195) mendefinisikan koordinasi (coordination) sebagai proses pengintegrasian tujuan-tujuan dan kegiatan-kegiatan pada satuan-satuan yang terpisah (departemen atau bidang-bidang fungsional) suatu organisasi untuk mencapai tujuan organisasi secara efisien.

Menurut Handoko (2003:196) kebutuhan akan koordinasi tergantung pada sifat dan kebutuhan komunikasi dalam pelaksanaan tugas dan derajat saling ketergantungan bermacam-macam satuan pelaksananya. Hal ini juga ditegaskan oleh Handayaningrat (1985:88) bahwa koordinasi dan komunikasi adalah sesuatu hal yang tidak dapat dipisahkan. Selain itu, Handayaningrat juga mengatakan bahwa koordinasi dan kepemimpinan (leadership) adalah tidak bisa dipisahkan satu sama lain, karena satu sama lain saling mempengaruhi.

2. Wewenang

Wewenang adalah kekuasaan yang sah yang dimiliki oleh seseorang untuk memerintah orang lain berbuat atau tidak berbuat.

Wewenang adalah hak untuk melakukan sesuatu atau memerintah ornag lain untuk melakukan atau tidak melakukan sesuatu, agar tercapai tujuan tertentu.

3. Wewenang Lini, Staff dan Fungsional
Wewenang lini, adalah wewenang dimana atasan melakukannya atas bawahannya langsung. Yaitu atasan langsung memberi wewenang kepada bawahannya, wujudnya dalam wewenang perintah dan tercermin sebagai rantai perintah yang diturunkan ke bawahan melalui tingkatan organisasi.
Wewenang staf, adalah hak yang dipunyai oleh satuan-satuan staf atau para spesialis untuk menyarankan, memberi rekomendasi, atau konsultasi kepada personalia ini. Kualifikasi yang harus dipenuhi oleh orang yang duduk sebagai taf yaitu dengan menganalisa melalui metode kuisioner, metode observasi, metode wawancara atau dengan menggabungkan ketiganya.

Wewenang staf fungsional, adalah hubungan terkuat yang dapat dimiliki staf dengan satuan-satuan lini.



4. Teori Motivasi

Motivasi merupakan akibat dari interaksi seseorang dengan situasi tertentu yang dihadapi. Menurut Robbins (2001:166) menyatakan definisi dari motivasi yaitu kesediaan untuk mengeluarkan tingkat upaya yang tinggi untuk tujuan organisasi yang dikondisikan oleh kemampuan upaya itu untuk memenuhi beberapa kebutuhan individual.

Sedangkan menurut Sondang P. Siagian sebagai-mana dikutip oleh Soleh Purnomo (2004:36) menyatakan bahwa motivasi adalah daya pendorong yang mengakibatkan seseorang anggota organisasi mau dan rela untuk menggerakkan kemampuan dalam bentuk keahlian atau ketrampilan, tenaga dan waktunya untuk menyelenggarakan berbagai kegiatan yang menjadi tanggung jawabnya dan menunaikan kewajibannya, dalam rangka pencapaian tujuan dan berbagai sasaran organisasi yang telah ditentukan sebelumnya.

Dari pengertian ini, jelaslah bahwa dengan memberikan motivasi yang tepat, maka karyawan akan terdorong untuk berbuat semaksimal mungkin dalam melaksanakan tugasnya dan mereka akan meyakini bahwa dengan keberhasilan organisasi dalam mencapai tujuan dan berbagai sasarannya, maka kepentingan-kepentingan pribadinya akan terpelihara pula.

Sunarti (2003:22) menyatakan ada tiga faktor utama yang mempengaruhi motivasi yaitu perbedaan karakteristik individu, perbedaan karakteristik pekerjaan, dan perbedaan karakteristik lingkungan kerja. Dalam rangka mendorong tercapainya produktivitas kerja yang optimal maka seorang manajer harus dapat mempertimbangkan hubungan antara ketiga faktor tersebut dan hubungannya terhadap perilaku individu. Pada dasarnya motivasi individu dalam bekerja dapat memacu karyawan untuk bekerja keras sehingga dapat mencapai tujuan mereka. Hal ini akan meningkatkan produktivitas kerja individu yang berdampak pada pencapaian tujuan dari organisasi.

Soleh Purnomo (2004:37) menyatakan ada tiga faktor sebagai sumber motivasi yaitu

(1) kemungkinan untuk berkembang,

(2) jenis pekerjaan, dan

(3) apakah mereka dapat merasa bangga menjadi bagi dari

perusahaan tempat mereka bekerja.

Disamping itu ada beberapa aspek yang berpengaruh terhadap motivasi kerja individu, yaitu rasa aman dalam bekerja, mendapatkan gaji yang adil dan kompetitif, lingkungan kerja yang menyenangkan, penghargaan atas prestasi kerja dan perlakuan yang adil dari manajemen. Dengan melibatkan karyawan dalam pengambilan keputusan, pekerjaan yang menarik dan menantang, kelompok dan rekan-rekan kerja yang menyenangkan, kejelasan akan standar keberhasilan serta bangga terhadap pekerjaan dan perusahaan dapat menjadi faktor pemicu kerja karyawan.

Pada dasarnya motivasi individu dalam bekerja dapat memacu karyawan untuk bekerja keras sehingga dapat mencapai tujuan mereka. Hal ini akan meningkatkan produktivitas kerja individu yang berdampak pada pencapaian tujuan dari organisasi. Disamping itu ada beberapa aspek yang berpengaruh terhadap motivasi kerja individu, yaitu rasa aman dalam bekerja, mendapatkan gaji yang adil dan kompetitif, lingkungan kerja yang menyenangkan, penghargaan atas prestasi kerja dan perlakuan yang adil dari manajemen. Dengan melibatkan karyawan dalam pengambilan keputusan, pekerjaan yang menarik dan menantang, kelompok dan rekan-rekan kerja yang menyenangkan, kejelasan akan standar keberhasilan serta bangga terhadap pekerjaan dan perusahaan dapat menjadi faktor pemicu kerja karyawan


Sekilas David McClelland

David Clarence McClelland (1917-1998) mendapat gelar doktor dalam psikologi di Yale pada 1941 dan menjadi profesor di Universitas Wesleyan. McClelland dikenal untuk karyanya pada pencapaian motivasi. David McClelland memelopori motivasi kerja berpikir, mengembangkan pencapaian berbasis teori dan model motivasi, dan dipromosikan dalam perbaikan metode penilaian karyawan, serta advokasi berbasis kompetensi penilaian dan tes. Ide nya telah diadopsi secara luas di berbagai organisasi, dan berkaitan erat dengan teori Frederick Herzberg.

David McClelland dikenal menjelaskan tiga jenis motivasi, yang diidentifikasi dalam buku ”The Achieving Society”:
1. Motivasi untuk berprestasi (n-ACH)

2. Motivasi untuk berkuasa (n-pow)

3. Motivasi untuk berafiliasi/bersahabat (n-affil)


Model Kebutuhan Berbasis Motivasi McClelland

David McClelland (Robbins, 2001 : 173) dalam teorinya Mc.Clelland’s Achievment Motivation Theory atau teori motivasi prestasi McClelland juga digunakan untuk mendukung hipotesa yang akan dikemukakan dalam penelitian ini. Dalam teorinya McClelland mengemukakan bahwa individu mempunyai cadangan energi potensial, bagaimana energi ini dilepaskan dan dikembangkan tergantung pada kekuatan atau dorongan motivasi individu dan situasi serta peluang yang tersedia.

Teori ini memfokuskan pada tiga kebutuhan yaitu kebutuhan akan prestasi (achiefment), kebutuhan kekuasaan (power), dan kebutuhan afiliasi.

Model motivasi ini ditemukan diberbagai lini organisasi, baik staf maupun manajer. Beberapa karyawan memiliki karakter yang merupakan perpaduan dari model motivasi tersebut.

A. Kebutuhan akan prestasi (n-ACH)

Kebutuhan akan prestasi merupakan dorongan untuk mengungguli, berprestasi sehubungan dengan seperangkat standar, bergulat untuk sukses. Kebutuhan ini pada hirarki Maslow terletak antara kebutuhan akan penghargaan dan kebutuhan akan aktualisasi diri. Ciri-ciri inidividu yang menunjukkan orientasi tinggi antara lain bersedia menerima resiko yang relatif tinggi, keinginan untuk mendapatkan umpan balik tentang hasil kerja mereka, keinginan mendapatkan tanggung jawab pemecahan masalah.

n-ACH adalah motivasi untuk berprestasi , karena itu karyawan akan berusaha mencapai prestasi tertingginya, pencapaian tujuan tersebut bersifat realistis tetapi menantang, dan kemajuan dalam pekerjaan. Karyawan perlu mendapat umpan balik dari lingkungannya sebagai bentuk pengakuan terhadap prestasinya tersebut.

B. Kebutuhan akan kekuasaan (n-pow)

Kebutuhan akan kekuasaan adalah kebutuhan untuk membuat orang lain berperilaku dalam suatu cara dimana orang-orang itu tanpa dipaksa tidak akan berperilaku demikian atau suatu bentuk ekspresi dari individu untuk mengendalikan dan mempengaruhi orang lain. Kebutuhan ini pada teori Maslow terletak antara kebutuhan akan penghargaan dan kebutuhan aktualisasi diri. McClelland menyatakan bahwa kebutuhan akan kekuasaan sangat berhubungan dengan kebutuhan untuk mencapai suatu posisi kepemimpinan.

n-pow adalah motivasi terhadap kekuasaan. Karyawan memiliki motivasi untuk berpengaruh terhadap lingkungannya, memiliki karakter kuat untuk memimpin dan memiliki ide-ide untuk menang. Ada juga motivasi untuk peningkatan status dan prestise pribadi.


C. Kebutuhan untuk berafiliasi atau bersahabat (n-affil)

Kebutuhan akan Afiliasi adalah hasrat untuk berhubungan antar pribadi yang ramah dan akrab. Individu merefleksikan keinginan untuk mempunyai hubungan yang erat, kooperatif dan penuh sikap persahabatan dengan pihak lain. Individu yang mempunyai kebutuhan afiliasi yang tinggi umumnya berhasil dalam pekerjaan yang memerlukan interaksi sosial yang tinggi.

McClelland mengatakan bahwa kebanyakan orang memiliki kombinasi karakteristik tersebut, akibatnya akan mempengaruhi perilaku karyawan dalam bekerja atau mengelola organisasi.

Karakteristik dan sikap motivasi prestasi ala Mcclelland:

a). Pencapaian adalah lebih penting daripada materi.

b). Mencapai tujuan atau tugas memberikan kepuasan pribadi

yang lebih besar daripada menerima pujian atau pengakuan.

c). Umpan balik sangat penting, karena merupakan ukuran sukses

(umpan balik yang diandalkan, kuantitatif dan faktual).

Penelitian David Mcclelland

Penelitian McClelland terhadap para usahawan menunjukkan bukti yang lebih bermakna mengenai motivasi berprestasi dibanding kelompok yang berasal dari pekerjaan lain. Artinya para usahawan mempunyai n-ach yang lebih tinggi dibanding dari profesi lain.

Kewirausahaan adalah merupakan kemampuan kreatif dan inovatif yang dijadikan dasar, kiat dan sumberdaya untuk mencari peluang sukses (Suryana, 2006). Kreativitas adalah kemampuan mengembangkan ide dan cara-cara baru dalam memecahkan masalah dan menemukan peluang (Suryana, 2006). Inovasi adalah kemampuan menerapkan kreativitas dalam rangka memecahkan masalah dan menemukan peluang (Suryana, 2006). Ciri-ciri pokok peranan kewirausahaan (McClelland, 1961 dalam Suyanto, 1987) meliputi Perilaku kewirausahaan, yang mencakup memikul risiko yang tidak terlalu besar sebagai suatu akibat dari keahlian dan bukan karena kebetulan, kegiatan yang penuh semangat dan/atau yang berdaya cipta, tanggung jawab pribadi, serta pengetahuan tentang hasil-hasil keputusan; uang sebagai ukuran atas hasil.

Ciri lainnya, minat terhadap pekerjaan kewirausahaan sebagai suatu akibat dari martabat dan ‘sikap berisiko’ mereka. Seorang wirausaha adalah risk taker. Risk taker dimaksudkan bahwa seorang wirausaha dalam membuat keputusan perlu menghitung risiko yang akan ditanggungnya. Peranan ini dijalankan karena dia membuat keputusan dalam keadaan tidak pasti. Wirausaha mengambil risiko yang moderat, tidak terlalu tinggi (seperti penjudi), juga tidak terlalu rendah seperti orang yang pasif (Hanafi, 2003). Dari hasil penelitiannya, McClelland (1961) menyatakan bahwa dalam keadaan yang mengandung risiko yang tak terlalu besar, kinerja wirausaha akan lebih tergantung pada keahlian- atau pada prestasi - dibanding pekerjaan lain.

Seorang wirausaha untuk melakukan inovasi atau pembaharuan perlu semangat dan aktif. Mereka bisa bekerja dalam waktu yang panjang, misal 70 jam hingga 80 jam per minggu. Bukan lama waktu yang penting, namun karena semangatnya mereka tahan bekerja dalam waktu yang panjang. Bagi individu yang memiliki n-ach tinggi tidak begitu tertarik pada pengakuan masyarakat atas sukses mereka, akan tetapi mereka benar-benar memerlukan suatu cara untuk mengukur seberapa baik yang telah dilakukan.

Dari penelitiannya, McClelland menyimpulkan bahwa kepuasan prestasi berasal dari pengambilan prakarsa untuk bertindak sehingga sukses, dan bukannya dari pengakuan umum terhadap prestasi pribadi. Selain itu juga diperoleh kesimpulan bahwa orang yang memiliki n-ach tinggi tidak begitu terpengaruh oleh imbalan uang, mereka tertarik pada prestasi. Standar untuk mengukur sukses bagi wirausaha adalah jelas, misal laba, besarnya pangsa pasar atau laju pertumbuhan penjualan.

Sekilas Frederick Herzberg

Frederick Herzberg (1923-2000), adalah seorang ahli psikolog klinis dan dianggap sebagai salah satu pemikir besar dalam bidang manajemen dan teori motivasi. Frederick I Herzberg dilahirkan di Massachusetts pada 18 April 1923. Sejak sarjana telah bekerja di City College of New York. Lalu tahun 1972, menjadi Profesor Manajemen di Universitas Utah College of Business. Hezberg meninggal di Salt Lake City, 18 Januari 2000.

Teori Dua Faktor Hezberg

Frederick Herzberg (Hasibuan, 1990 : 177) mengemukakan teori motivasi berdasar teori dua faktor yaitu faktor higiene dan motivator. Dia membagi kebutuhan Maslow menjadi dua bagian yaitu kebutuhan tingkat rendah (fisik, rasa aman, dan sosial) dan kebutuhan tingkat tinggi (prestise dan aktualisasi diri) serta mengemukakan bahwa cara terbaik untuk memotivasi individu adalah dengan memenuhi kebutuhan tingkat tingginya.

Menurut Hezberg, faktor-faktor seperti kebijakan, administrasi perusahaan, dan gaji yang memadai dalam suatu pekerjaan akan menentramkan karyawan. Bila faktor-faktor ini tidak memadai maka orang-orang tidak akan terpuaskan (Robbins,2001:170).

Menurut hasil penelitian Herzberg ada tiga hal penting yang harus diperhatikan dalam memotivasi bawahan (Hasibuan, 1990 : 176) yaitu :

a. Hal-hal yang mendorong karyawan adalah pekerjaan yang menantang yang mencakup perasaan berprestasi,bertanggung jawab, kemajuan, dapat menikmati pekerjaan itu sendiri dan adanya pengakuan atas semua itu.

b. Hal-hal yang mengecewakan karyawan adalah terutama pada faktor yang bersifat embel-embel saja dalam pekerjaan, peraturan pekerjaan, penerangan, istirahat dan lain-lain sejenisnya.

c. Karyawan akan kecewa bila peluang untuk berprestasi terbatas. Mereka akan menjadi sensitif pada lingkungannya serta mulai mencari-cari kesalahan.

Herzberg menyatakan bahwa orang dalam melaksanakan pekerjaannya dipengaruhi oleh dua faktor yang merupakan kebutuhan, yaitu :

a. Maintenance Factors

Adalah faktor-faktor pemeliharaan yang berhubungan dengan hakikat manusia yang ingin memperoleh ketentraman badaniah. Kebutuhan kesehatan ini merupakan kebutuhan yang berlangsung terus-menerus, karena kebutuhan ini akan kembali pada titik nol setelah dipenuhi.

b. Motivation Factors

Adalah faktor motivator yang menyangkut kebutuhan psikologis seseorang yaitu perasaan sempurna dalam melakukan pekerjaan. Factor motivasi ini berhubungan dengan penghargaan terhadap pribadi yang berkaitan langsung denagn pekerjaan.

Penerapan Teori Dua Faktor Herzberg Dalam Organisasi

Dalam kehidupan organisasi, pemahaman terhadap motivasi bagi setiap pemimpin sangat penting artinya, namun motivasi juga dirasakan sebagai sesuatu yang sulit. Hal ini dikemukakan oleh Wahjosumidjo (1994 : 173) sebagai berikut :

a. Motivasi sebagai suatu yang penting (important subject) karena peran pemimpin itu sendiri kaitannya dengan bawahan. Setiap pemimpin tidak boleh tidak harus bekerja bersama-sama dan melalui orang lain atau bawahan, untuk itu diperlukan kemampuan memberikan motivasi kepada bawahan.

b. Motivasi sebagai suatu yang sulit (puzzling subject), karena motivasi sendiri tidak bisa diamati dan diukur secara pasti. Dan untuk mengamati dan mengukur motivasi berarti harus mengkaji lebih jauh perilaku bawahan. Disamping itu juga disebabkan adanya teori motivasi yang berbeda satu sama lain.

Untuk memahami motivasi karyawan digunakan teori motivasi dua arah yang dikemukakan oleh Herzberg:

Pertama, teori yang dikembangkan oleh Herzberg berlaku mikro yaitu untuk karyawan atau pegawai pemerintahan di tempat ia bekerja saja. Sementara teori motivasi Maslow misalnya berlaku makro yaitu untuk manusia pada umumnya.

Kedua, teori Herzberg lebih eksplisit dari teori hirarki kebutuhan Maslow, khususnya mengenai hubungan antara kebutuhan dengan performa pekerjaan. Teori ini dikemukakan oleh Frederick Herzberg tahun 1966 yang merupakan pengembangan dari teori hirarki kebutuhan menurut Maslow.

Teori Herzberg memberikan dua kontribusi penting bagi pimpinan organisasi dalam memotivasi karyawan. Pertama, teori ini lebih eksplisit dari teori hirarki kebutuhan Maslow, khususnya mengenai hubungan antara kebutuhan dalam performa pekerjaan.Kedua, kerangka ini membangkitkan model aplikasi, pemerkayaan pekerjaan (Leidecker and Hall dalam Timpe, 1999 : 13).

Berdasarkan hasil penelitian terhadap akuntan dan ahli teknik Amerika Serikat dari berbagai Industri, Herzberg mengembangkan teori motivasi dua faktor (Cushway and Lodge, 1995 : 138). Menurut teori ini ada dua faktor yang mempengaruhi kondisi pekerjaan seseorang, yaitu faktor pemuas (motivation factor) yang disebut juga dengan satisfier atau intrinsic motivation dan faktor kesehatan (hygienes) yang juga disebutdisatisfier atau ekstrinsic motivation.

Teori Herzberg ini melihat ada dua faktor yang mendorong karyawan termotivasi yaitu faktor intrinsik yaitu daya dorong yang timbul dari dalam diri masing-masing orang, dan faktor ekstrinsik yaitu daya dorong yang datang dari luar diri seseorang, terutama dari organisasi tempatnya bekerja.

Jadi karyawan yang terdorong secara intrinsik akan menyenangi pekerjaan yang memungkinnya menggunakan kreaktivitas dan inovasinya, bekerja dengan tingkat otonomi yang tinggi dan tidak perlu diawasi dengan ketat. Kepuasan disini tidak terutama dikaitkan dengan perolehan hal-hal yang bersifat materi. Sebaliknya, mereka yang lebih terdorong oleh faktor-faktor ekstrinsik cenderung melihat kepada apa yang diberikan oleh organisasi kepada mereka dan kinerjanya diarahkan kepada perolehan hal-hal yang diinginkannya dari organisasi (dalam Sondang, 2002 : 107).

Adapun yang merupakan faktor motivasi menurut Herzberg adalah: pekerjaan itu sendiri (the work it self), prestasi yang diraih (achievement), peluang untuk maju (advancement), pengakuan orang lain (ricognition), tanggung jawab (responsible).

Menurut Herzberg faktor hygienis/extrinsic factortidak akan mendorong minat para pegawai untuk berforma baik, akan tetapi jika faktor-faktor ini dianggap tidak dapat memuaskan dalam berbagai hal seperti gaji tidak memadai, kondisi kerja tidak menyenangkan, faktor-faktor itu dapat menjadi sumber ketidakpuasan potensial (Cushway & Lodge, 1995 : 139).

Sedangkan faktor motivation/intrinsic factormerupakan faktor yang mendorong semangat guna mencapai kinerja yang lebih tinggi. Jadi pemuasan terhadap kebutuhan tingkat tinggi (faktor motivasi) lebih memungkinkan seseorang untuk berforma tinggi daripada pemuasan kebutuhan lebih rendah (hygienis) (Leidecker & Hall dalam Timpe, 1999 : 13).

Dari teori Herzberg tersebut, uang/gaji tidak dimasukkan sebagai faktor motivasi dan ini mendapat kritikan oleh para ahli. Pekerjaan kerah biru sering kali dilakukan oleh mereka bukan karena faktor intrinsik yang mereka peroleh dari pekerjaan itu, tetapi kerena pekerjaan itu dapat memenuhi kebutuhan dasar mereka (Cushway & Lodge, 1995 : 139).5.

5. Penjelasan Singkat Mengapa Komunikasi Sangat Penting Bagi Suatu Organisasi
Menurut saya, dengan adanya komunikasi maka seseorang bisa berhubungan dengan orang lain dan saling

bertukar pikiran yang bisa menambah wawasan seeseorang dalam bekerja atau menjalani kehidupan sehari-hari.

»»  Baca Selengkapnya ..