Jumat, 25 Mei 2012

Sistem Sekuritas di Windows

Sistem sekuritas di Windows ada 2 macam, yaitu group policy editor (gpedit) dan register editor (regedit). Berikut akan membahas tentang gpedit. Hal-hal yang dapat dilakukan dengan gpedit.
Cara membuka gpedit
buka run, ketik gpedit.msc kemudian ok


Proteksi Akses Partisi (C:) pada My Computer
 pilih \User Configuration\Administrative Templates\Windows Explorer kemudian cari dan klik ganda Setting
“Prevent Access to drives from My Computer”
Menghilangkan menu Run pada menu Start
pilih \User Configuration\Administrative Templates\Start Menu and Taskbar kemudian cari dan klik ganda
Setting “Remove Run menu from Start Menu”
Proteksi Control Panel
pilih \User Configuration\Administrative Templates\Control Panel kemudian cari dan klik ganda Setting
“Prohibit access to the Control Panel”
Proteksi Pengubahan Wallpaper
pilih \User Configuration\AdministrativeTemplates\Control Panel\Display kemudian cari dan klik ganda
Setting “Prevent changing wallpaper”
Proteksi Regedit Tools
pilih \User Configuration\Administrative Templates\System kemudian cari dan klik ganda Setting “Prevent access to registry editing tools”
Proteksi Command Prompt
pilih \User Configuration\Administrative Templates\System kemudian cari dan klik ganda Setting “Prevent
access to the command prompt”
Menghilangkan nama dari user name terakhir pada Windows Logon Screen
pilih \Computer Configuration\Windows Settings\Security Options kemudian cari dan klik ganda Policy “Do
not display last user name”

Antrian di Java

Source code :


package testpackage;

public class Antrian {
private static class Simpul{
int item;
Simpul berikut;
}
private static Simpul kepala;
private static Simpul buntut;

public static void main(String[] args){
//menentukan nilai dari komponen simpul
Simpul a = new Simpul();
a.item = 10;
Simpul b = new Simpul();
b.item = 15;
a.berikut = b;
//System.out.println(a.item);
//System.out.println(b.item);
//memunculkan antriannya menggunakan while
while(a!=null){
System.out.println(a.item);
a = a.berikut;
}
push(5);
push(6);
push(7);
push(8);
delete(7);
int c = pull();
//System.out.println(pull());
Simpul temp = kepala;
while(temp!=null){
System.out.println(temp.item);
temp = temp.berikut;
}
}
//menambahkan record ke dalam antrian
public static void push(int n){
Simpul atasBaru = new Simpul();
atasBaru.item = n;
if(kepala==null){
kepala = atasBaru;
buntut = kepala;
}else{
buntut.berikut = atasBaru;
buntut = atasBaru;
}
}
public static int pull(){
if(kepala!=null){
int itemAtas;
if(kepala!=buntut){
itemAtas = kepala.item;
kepala = kepala.berikut;
return itemAtas;
}else if(kepala==buntut){
itemAtas = buntut.item;
kepala = null;
buntut = null;
return itemAtas;
}else{
return 0;
}
}else{
return 0;
}
}
 
public static void delete(int n){
if(kepala!=null){
Simpul temp = kepala;
while(temp.berikut!=null){
if(temp.item==n){
kepala = temp.berikut;
break;
}else{
if(temp.berikut.item==n){
if(temp.berikut==buntut){
buntut = temp;
temp.berikut = null;
}else{
temp.berikut = temp.berikut.berikut;
}
break;
}else{
temp = temp.berikut;
}
}
}
}
}
}

Stack in Java (Tumpukan pada Java)

Sebenarnya Java, tidak ada pointer sehingga tumpukan disini mungkin sedikit beda dengan menggunakan bahasa imperatif lainnya

Source code :

package testpackage;

public class Tumpukan {
private static class Node{
int item;
Node next;
}
private static Node head;

public static void push(int n){
Node atasBaru = new Node();
atasBaru.item = n;
if(head != null){
atasBaru.next = head;
head = atasBaru;
}else{
head = atasBaru;
}
}
public static int pull(){
if(head!=null){
int itemAtas;
if(head.next!=null){
itemAtas = head.item;
head = head.next;
return itemAtas;
}else{
itemAtas = head.item;
head = null;
return 0;
}
}else{
return 0;
}
}
public static void main(String[]args){
push(5);
push(6);
push(7);
push(8);
int c = pull();

while(head!=null){
System.out.println(head.item);
head = head.next;
}

}

}



Factorial Recursif in Java

Source code faktorial menggunakan rekursi bukan menggunakan iterasi (perulangan). Disini saya menggunakan package tugas dan nama kelas faktorialRecursif (kedua nama bisa diganti)



package tugas;

import javax.swing.JOptionPane;

public class faktorialRecursive {
private static int factorial(int n){
if(n < 0)
throw new IllegalArgumentException("n harus >=0");
if (n <= 1)
return 1;
else
return n * factorial(n-1);
}

public static void main(String[] args){
String name ="";
name = JOptionPane.showInputDialog("Enter number");
int nilai = Integer.parseInt(name);
System.out.println(factorial(nilai));
}

}

Perbedaan Custering dengan Classification


Clustering
Algoritma clustering merupakan algoritma pengelompokkan sejumlah data ( N ) menjadi kelompok – kelompok data tertentu ( cluster ). Objek data yang terletak didalam satu cluster harus mempunyai kemiripan. Sedangkan yang tidak berada didalam satu cluster tidak mempunyai kemiripan.

Jenisnya :
a.       Hierarchical
Merepresentasikan semua jarak dari setiap data. Hasilnya berupa 1 cluster yang besar dan berbentuk herarchical tree.
Hierarchical ada 2 macam pendekatan yaitu agglomerative dan divisive
-          Agglomerative (buttom-up)
Agglomerative clustering merupakan suatu teknik hierarki clustering yang menghasilkan suatu rangkaian penurunan jumlah cluster pada setiap tahapan. Clustering yang terdapat pada setiap tahapan diperoleh dari tahapan sebelumnya dengan cara menggabungkan 2 cluster yang mempunyai kemiripan. Agglomerative clustering dapat dilakukan dengan menggunakan 2 cara yaitu : teori matriks (matrix theory) dan teori grafik (graph theory).
Algoritmanya : Menandai setiap item pada clusternya sendiri. Bergabung dengan cluster yang paling dekat. Estimasi kembali jarak antar cluster. Ulang untuk data ke 1 sampai n.
-          Divisive (top-down)
Algoritma devisive berkebalikan arah dengan metode agglomerative dimana algoritma ini menghasilkan suatu rangkain peningkatan jumlah cluster pada setiap tahapan. Clustering yang terdapat pada setiap tahapan diperoleh dari tahapan sebelumnya dengan cara memecah suatu cluster tunggal menjadi 2 bagian.

b.      Partitioning
Contohnya : K-means clustering
Algoritmanya :
-          Tandai setiap item kelas pada 1 sampai k (secara acak)
-          Untuk setiap kelas 1 sampai k
Hitung centroid (rata-rata K)
Hitung jarak antara centroid dan setiap item
-          Tandai setiap item yang terdekat dengan centroid
-          Ulangi sampai tidak ada item yang ditandai kembali.

Classification
Classification memiliki tujuan untuk mengklasifikasikan suatu data ke dalam kelompok kelas yang sudah ada. Tidak akan ada pembentukan kelompok baru. Dan biasanya prosesnya supervised. Dalam arti ada training yang dilakukan.
Salah satu pendekatan classification adalah pendekatan neural network. Dalam pendekatan ini, neural network dilatih dengan menggunakan data yang sudah diketahui untuk dimasukkan ke dalam kelompok data tertentu. Setelah pelatihan, prosesnya cukup sederhana, yaitu dengan memasukkan data baru (yang tidak termasuk dalam data training) ke dalam neural network, lalu neural network akan memberikan informasi termasuk ke dalam kelompok manakah data baru tersebut.
Contoh algoritma classification adalah nearest centroid dan k-nearest neighbor.
Nearest centroid
Algoritmanya :
-          Menghitung centroid untuk setiap kelas
-          Menghitung  jarak antara test sample dan setiap kelas centroid
-          Memprediksi kelas dengan metode centroid terdekat
K-nearest neighbor
K-nn (k nearest neighbour). Dalam hal ini setiap data baru akan dibandingkan dengan data training. Lalu 3 data training terdekat (misalkan kita ambil k = 3) dengan data baru akan diambil. Misalkan ketiga data tersebut masuk ke dalam kelompok 1, 2 dan 1, maka data baru tersebut dimasukan ke dalam kelompok 1 (seperti voting, karena suara yang terbanyak adalah 1, maka keputusannya adalah 1). Menggunakan prediksi dengan majority vote dengan jumlah yang ganjil.

Perbedaan clustering dengan classification
Dataset yang digunakan pada clustering tidak menampilkan class / target attribute, sedangkan dataset yang digunakan pada classification mutlak harus menampilkan class / target attribute.
Pengetahuan yang dihasilkan oleh metode clustering berupa cluster, sedangkan pengetahuan yang dihasilkan oleh metode classification berupa selain cluster (bisa Decision Tree, Ruleset, Weight pada BackPropagation, dan lain-lain).
Clustering dipakai ketika tidak diketahuinya bagaimana data harus dikelompokkan. Jumlah kelompok diasumsikan sendiri tanpa ditentukan terlebih dahulu. Keluaran pendekatan ini adalah data yang sudah dikelompokkan. Sedangkan classification, terdapat informasi mengenai bagaimana data tersebut dikelompokkan. Kemudian dilakukan training pada sistem dengan data yang sudah diberikan label (ke dalam kelompok manakah data tersebut dikelompokkan), selanjutnya sistem akan mengklasifikasikan data-data yang baru ke dalam kelompok yang ada. Tidak akan ada pertambahan kelompok.
Secara formal clustering di definisikan sebagai suatu proses unsupervised untuk mengelempokan data yang memiliki karakteristik tertentu yang sama. Sedangkan classification digolongkan dalam proses supervised.
Supervised classification didasarkan pada ide bahwa pengguna (user) dapat memilih sampel pixel – pixel dalam suatu citra yang merepresentasikan kelas-kelas khusus dan kemudian mengarahkan perangkat lunak pengolahan citra (image processing software) untuk menggunakan pilihan-pilihan tersebut sebagai dasar referensi untuk pengelompokkan pixel-pixel lainnya dalam citra tersebut. Wilayah pelatihan ( training area) dipilih berdasarkan pada pengetahuan dari pengguna ( the knowledge of the user). Sedangkan klasifikasi tak terawasi (unsupervised classifications) merupakan pengklasifikasian hasil akhirnya (pengelompokkan pixel-pixel dengan karakteristik umum) didasarkan pada analisis perangkat lunak (software anaysis) suatu citra tanpa pengguna menyediakan contoh-contoh kelas-kelas terlebih dahulu. Komputer menggunakan teknik-teknik tertentu untuk menentukan pixel mana yang mempunyai kemiripan dan bergabung dalam satu kelas tertentu secara bersamaan.

RAHASIA HIDUP

Hidup tak selalu indah. Ada saat dimana kita bahagia, ada saat ketika kita tertawa, menangis, tersenyum, gundah, sedih, dan ada saat pula kita HANCUR. Apakah itu hancur??? Mungkin tidak setiap orang merasa bahwa dirinya, memang benar-benar ada dalam keadaan hancur, tapi paling tidak manusia pasti pernah merasakan saat-saat tersulitnya. Apa yang Anda lakukan ketika berada dalam keadaan seperti itu???? Berikut ini adalah sebuah rahasia agar Anda tidak terpuruk dalam penderitaan.

Ketika hidupmu berada di ambang kehancuran, kamu harus tahu tentang “Rahasia Hidup Ini”
Rahasia ini adalah tentang  “Hukum Ketertarikan”
Anda menjadi orang yang Anda pikirkan dan Anda menarik semua hal yang Anda pikirkan
Fokuslah pada sesuatu yang Anda kehendaki, jangan fokus pada sesuatu yang tidak Anda kehendaki
Jangan  mengeluh!!!!!!!!!!!!!
Jangan berkata tidak, aduh,…….. tapi katakanlah “SAYA BISA

Sebenarnya perasaan manusia, alam fikiran manusia hanya berkisar pada 2 hal, yaitu perasaan baik dan buruk.
1.       Perasaan baik
“Apapun yang Anda pikirkan sekarang akan sejalan dengan apa yang Anda akan dapatkan”
2.       Perasaan buruk
“Apapun yang Anda pikirkan sekarang tidak sesuai dengan apa yang Anda mau”
So, be positive thinkers….

Apa yang Anda rasakan adalah refleksi dari proses menjadi kenyataan
Yang Anda pikirkan, yang Anda rasakan, yang menjadi nyata, selalu cocok adanya

Cara menggunakan rahasia
1.       Minta
Anda harus meminta apa yang Anda mau. Pikirkan apa yang Anda inginkan secara mendetail. Kemudian tuliskan pada selembar kertas.
2.       Jawaban
Adalah jawaban dari keinginan kita. Mungkin saja jawaban itu tidak sesuai dengan apa yang kita inginkan, maka lakukanlah cara yang ketiga.
3.       Menerima
Memposisikan diri agar sejalan dengan apa yang Anda minta. Jika kita menerima dengan apa yang menjadi jawaban, maka kita akan bahagia. Dan percayalah, apa yang kita inginkan akan terjadi kelak, suatu saat………

Jangan fikirkan prosesnya, tapi lihat saja hasilnya. Seperti ungkapan. Mengambil langkah pertama dalam keyakinan, tidak perlu mengetahui seluruh anak tangga.

MIMPI


MIMPI
“Sang Pemimpi” adalah sebuah film yang diangkat dari novel karangan Andrea Hirata yang berjudul seperti filmnya yang merupakan kelanjutan dari novel sebelumnya “Laskar Pelangi”. Film ini memang sudah lama tayang, tapi saya baru saja menontonnya(aduh,, g up to date bgt ya saya L). Tapi bukan itu yang akan saya bagikan, melainkan kata-kata inspirasi yang terdapat dalam film ini. Kata-kata yang bisa membangkitkan semangat kita untuk terus bermimpi, berikut rangkaian katanya :
“Bila mata dibayar oleh mata, maka dunia akan buta”
(Mahatma Gandhi)

“Kau muda, yang diperlukan adalah orang-orang yang mampu memimpikan sesuatu yang tak penah diimpikan oleh siapapun”
(John Kennedy)

“Tidak semua yang dapat dihitung diperhitungkan, dan tidak semua yang diperhitungkan dapat dihitung”
(Albert Einstein)

“Denganmu tolong diri sendiri, kita bisa tolong orang lain lebih sempurna”
(R.A. Kartini)

“Seribu orang tua bisa bermimpi, satu orang pemuda bisa mengubah dunia”
(Soekarno)

“Kemerdekaan Nasional bukanlah tujuan akhir, rakyat yang bebas berkarya adalah puncaknya”
(Sutan Sahrir)

“Selama dengan buku kalian boleh memenjaraku dimana saja, sebab dengan buku aku bebas”
(Moh Hatta)

Rangkaian kata yang indah bisa menggugah semangat kita!!! Tetap bermimpi, dan raihlah mimpimu itu :D

Penggunaan Bahasa Fungsional

Bahasa fungsional ada banyak jenisnya. Berikut akan disebutkan beberapa penggunaan salah satu jenis bahasa fungsional yaitu Haskell dalam dunia Industri.

Haskell
Haskell mempunyai jangkauan yang menyebar dari penggunaan secara komersial, luar angkasa, pertahanan, keuangan, web startup, perusahaan desain hardware, dan lawnmower manufacturer. Pada Februari 2009, Industri Haskell Group diluncurkan untuk mendukung kebutuhan komersial pengguna bahasa pemrograman Haskell.
Haskell in industry
1.      ABN AMRO Amsterdam, Belanda
ABN AMRO merupakan bank internasional yang berkantor pusat di Amsterdam. Haskell digunakan untuk kegiatan investasi perbankan yang dibutuhkan untuk mengukur risiko counterparty portofolio derivatif keuangan.
2.      Aetion Technologies LLC Columbus, Ohio
Aetion adalah kontraktor pertahanan yang aplikasinya menggunakan kecerdasan buatan. Prioritas berubah dengan cepat membuatnya penting untuk meminimalkan efek kode perubahan, yang sesuai dengan Haskell juga. Aetion telah mengembangkan tiga proyek utama dalam Haskell, semua sukses. Kode singkat Haskell adalah mungkin yang paling penting untuk menulis ulang : itu membuatnya praktis untuk membuang kode lama sesekali. DSELs mengijinkan AI untuk menjadi specific secara deklaratif.
3.      Allston Trading
Kantor pusat di Chicago, Illnois, Allston Trading, LLC adalah frekuensi utama pembuat pasar yang tinggi di lebih dari 40 bursa keuangan, di 20 negara, dan di hampir setiap kelas produk dibayangkan. Allston membuat beberapa penggunaan Haskell untuk infrastruktur perdagangannya.
4.      Amgen Thousand Oaks, California
Amgen adalah perusahaan terapi manusia dalam industry bioteknologi. Amgen mempelopori pengembangan produk baru berdasarkan kemajuan dalam DNA rekombinan dan biologi molecular dan meluncurkan obat-obatan pertama di industry bioteknologi blockbuster. Amgen menggunakan Haskell untuk  :
-          Secara cepat membangun perangkat lunak untuk menerapkan model matematika dan kompleks lainnya, aplikasi berorientasi secar matematis.
-          Menyediakan lebih validasi dengan teliti secara matematis dari software.
-          Memecahkan pengembang keluar dari kebiasaan pengembangan perangkat lunaknya dengan memberikan cara baru untuk berpikir tentang perangkat lunak.
5.      Ansemond LLC
Adalah Web Browser Mac yang memungkinkan Anda menyimpan halaman yang telah dikunjungi di database. Daftar halaman-halaman ini akan ditampilkan dalam “database view”.
6.      Antiope Fair Haven, New Jersey
Antiope Associates menyediakan solusi custom untuk komunikasi wireless dan masalah jaringan. Antiope memiliki keahlian dalam semua aspek desain system nirkabel, dari fisik dan lapisan protocol untuk aplikasi jaringan yang kompleks. Antiope bergantung pada sejumlah teknik canggih untuk memastikan bahwa sistem komunikasi yang didesain dapat diandalkan dan tanpa kesalahan. Antipe menggunakan alat simulasi custom yang dikembangkan dalam bahasa Haskell, untuk model desain perangkat kerasnya.
7.      AT & T
Haskell sedang digunakan di divisi Network Security untuk mengotomatisasi pemrosesan pengaduan penyalahgunaan internet. Haskell telah memungkinkan untuk dengan mudah memenuhi jangka waktu yang sangat ketat dengan hasil yang dapat diandalkan.
8.      Anygma Antwerp, Belgium
Anygma adalah sebuah perusahaan startup berfokus pada menghasilkan alat yang mudah digunakan untuk membuat audio visual konten 2D/3D, di bidang hiburan, media, komunikasi perusahaan dan internet. Perusahaan ini erat kaitannya dengan Nazooka, pemain niche di industry media, khusus dalam menciptakan konsep cross media dan solusi komunikasi. Anygma menggunakan Haskell untuk segera membangun prototype platform konten baru membentuk platform, ditargetkan ke seniman dan desainer.
9.      Bank of America Merril Lynch
Haskell digunakan untuk transformasi data backend dan loading.
10.  Barclays Capiital Quantitative Analytics Group
Barclays Capiital Quantitative Analytics Group menggunakan Haskell untuk mengembangkan bahasa fungsional domain spesifik tertanam (disebut FPF) yang digunakan untuk menentukan derivatif ekuitas eksotis. Instrument derivatif ini, yang secara alami baik dijelaskan dalam hal fungsi matematika, dan dibangun komposisinya, memetakan dengan baik untuk diungkapkan dalam bahasa fungsional tertanam. Bahasa ini sekarang secara teratur digunakan oleh orang yang tidak memiliki pengalaman sebelumnya terhadap bahasa fungsional.
11.  bCODE Pty Ltd Sydney Australia
Adalah usaha kecil dengan modal awal yang didanai menggunakan OCaml dan sedikit menggunakan Haskell.
12.  Bluespec, Inc Waltham, Massachusetts
Mengembangkan sirkuit terpadu modern (ASIC atau FPGA) adalah proses yang sangat mahal yang melibatkan spesifikasi, pemodelan (untuk memilih dan memperbaiki struktur), desain (untuk menggambarkan apa yang akan menjadi silicon), dan verifikasi(untuk memastikan bahwa memnuhi spesifikasi). Bluespec, Inc adalah perusahaan tahun ketiga yang menyediakan fasilitas bahasa, metodologi, dan alat untuk tujuan ini, dalam kerangka standar IEEE System Verilog dan SystemC, tetapi meminjam ide secara berat dari Term Writing System dan bahasa pemrograman fungsional seperti Haskell. Haskell digunakan dalam implementasi alat yang dibutuhkan.
13.  Bump
Bump menggunakan server berbasis Haskell, untuk pengawas proses untuk semua system backendnya dan untuk tugas-tugas infrastruktur lainnya.
14.  Circos Brand Karma Singapura
Brand Karma memberikan layanan kepada pemilik merek untuk mengukur sentiment secara online terhadap mereknya. Haskell digunakan dalam membangun bagian-bagian produk, khusus untuk back-end penjadwalan pekerjaan dan pencocokan merek.
15.  Credit Suisse Global Modelling and Analytics Group
GMAC, kelompok pemodelan kuantitatif pada Credit Suisse, telah menggunakan Haskell untuk berbagai proyek sejak awal tahun 2006, dengan tujuan meningkatkan produktivitas pemodel dan membuatnya lebih mudah bagi orang lain dalam bank untuk menggunakan model GMAG. Proyek saat ini meliputi : pekerjaan lebih lanjut tentang alat untuk memeriksa, memanipulasi, dan mengubah spreadsheet, bahasa domain-spesifik tertanam pada Haskell  untuk menerapkan komponen yang bisa digunakan kembali yang dapat dikompilasi ke dalam bentuk berbagai target.
16.  Detexify
Adalah system pengenalan tulisan tangan online yang backend-nya ditulis menggunakan Haskell.
17.  Deutsche Bank Equity Proprietary Trading, Directional Credit Trading
Grup Directional Credit Trading menggunakan Haskell sebagai bahasa implementasi utama untuk semua infrastruktur software.
18.  Facebook
Facebook menggunakan Haskell secara internal untuk tool. Lex-pass adalah tool untuk secara program memanipulasi dasar kode PHP via Haskell.
19.  Ericsson
Ericsson menggunakan Haskell untuk implementasi Feldspar, EDSL untuk algoritma pemrosesan signal digital.
20.  Factis Research
Factis Research berlokasi di Freiburg Jerman, mengembangkan solusi mobile yang reliable dan user-friendly. Software hasil penelitian ini berjalan di bawah J2ME, Symbian, iPhone OS, Android, dan Blackberry. Komponen server diimplementasikan pada Python dan Haskell. Projek yang menggunakan Haskell kebanyakan lisensinya bersifat open-source.
21.  Google
Haskell digunakan dalam jumlah kecil pada proyek internal Google, untuk mendukung infrastruktur internal IT.
22.  iPwn Studio
ipwn studio adalah studio video game yang ditemukan pada tahun 2009 dan didasarkan  pada area Boston yang lebih luas. Mereka mengembangkan mesin game pada Haskell, dan sejumlah game dibangun pada mesin tersebut, termasuk action-rpg untuk peralatan touchscreen disebut bloodknight.
23.  Peerium, Inc Cambridge, Massachusetts
Pada Peerium, kualitas dan efisiensi untuk komunikasi online dan kolaborasi dalam komunikasi virtual, jejaring social, dan lingkungan bisnis ditingkatkan. Lingkungan baru yang mendukung sharing dengan mudah dari kedua informasi dan perangkat lunak akan memungkinkan tingkat kerja secara online jauh melampaui saat ini berbasis teknologi web. Teknik pemrograman modern akan memungkinkan penciptaan program yang jauh lebih kuat dalam lingkungan ini. Untuk tujuan ini, dibangun sebuah platform perangkat lunak baru untuk langsung komunikasi real-time dan kolaborasi dalam lingkungan grafis.
24.  Tabula
Tabula adalah perusahaan semikonduktor fables swasta yang mengembangkan 3-D Programmable Logic Devices. Haskell digunakan untukk toolchain compiler internal terkait dengan desain hardware.

Bahasa Fungsional

Bahasa pemrograman fungsional disebut aplikatif karena fungsi yang diaplikasikan ke dalam argumentasi menjadi deklaratif dan non procedural. Bahasa pemrograman fungsional didasarkan pada konsep matematika dari sebuah fungsi. Dalam ilmu komputer, pemrograman fungsional adalah paradigma pemrograman yang memperlakukan perhitungan sebagai evaluasi fungsi-fungsi matematika dan menghindari state dan data yang dapat berubah. Ini menekankan penerapan fungsi, berbeda dengan gaya pemrograman imperatif, yang menekankan perubahan dalam state. Pemrograman fungsional mempunyai akar di kalkulus lambda, sebuah sistem formal yang dikembangkan pada tahun 1930 untuk menyelidiki fungsi definisi, fungsi aplikasi, dan rekursi. Banyak bahasa pemrograman fungsional dapat dilihat sebagai elaborasi pada kalkulus lambda.

Dalam prakteknya, perbedaan antara fungsi matematika dan pengertian tentang sebuah "fungsi" yang digunakan dalam pemrograman adalah fungsi-fungsi penting yang dapat memiliki efek samping, mengubah nilai dari state program. Karena mereka tidak memiliki transparansi referensial, yaitu ekspresi bahasa yang sama dapat menghasilkan nilai yang berbeda pada waktu yang berbeda tergantung pada keadaan program pelaksana. Sebaliknya, dalam kode fungsional, nilai output dari suatu fungsi hanya bergantung pada argumen-argumen yang dimasukkan ke fungsi, maka fungsi f memanggil dua kali dengan nilai yang sama untuk argumen x akan menghasilkan hasil yang sama f (x) kedua kali. Menghilangkan efek samping dapat membuat lebih mudah untuk memahami dan memprediksi perilaku dari suatu program, yang merupakan salah satu motivasi kunci bagi pengembangan pemrograman fungsional.
Bahasa pemrograman fungsional, terutama yang murni fungsional, sebagian besar telah ditekankan dalam dunia akademis bukan dalam pengembangan perangkat lunak komersial. Namun, bahasa pemrograman fungsional menonjol seperti Scheme, Erlang, OCaml, , dan Haskell, telah digunakan dalam industri dan aplikasi komersial oleh berbagai organisasi. Pemrograman fungsional juga mendukung dalam beberapa bahasa pemrograman dengan domain yang specifik seperti R (statistik), Mathematica (simbolik matematika), J dan K (analisis keuangan), dan XSLT (XML ). Meluasnya deklaratif domain bahasa tertentu seperti SQL dan Lex / Yacc, menggunakan beberapa unsur pemrograman fungsional, terutama dalam menghindari nilai-nilai bisa berubah. Spreadsheets juga dapat dilihat sebagai bahasa pemrograman fungsional.


Pemrograman dalam gaya fungsional juga dapat dicapai dalam bahasa yang tidak secara khusus dirancang untuk pemrograman fungsional. Sebagai contoh, bahasa pemrograman Perl imperatif telah menjadi subjek dari sebuah buku yang menjelaskan bagaimana menerapkan konsep-konsep pemrograman fungsional. Javascript, salah satu bahasa paling banyak digunakan saat ini, menggabungkan kemampuan pemrograman fungsional.