μλ
νμΈμ @jwsohnμ
λλ€. μ΄λ² ν¬μ€ν
μμλ μ½λ©μ λμμ΄ λλ μ΅κ΄κ³Ό μ’μ μ΅κ΄μ λ€μ΄λλ° λμμ΄ λλ μΆκ° λꡬ(tool)λ€μ λν΄ μμ보λλ‘ νκ² μ΅λλ€.
μ½λ©μ κΈμ°κΈ°μ λΉμ·ν μμ±μ κ°κ³ μμ΅λλ€. μ°μ , μ½λ©μ κΈμ°κΈ°μ²λΌ λͺ λ Ήμ΄λ₯Ό νλ νλ μμ±ν΄μΌ(write) ν©λλ€. λ¨μ΄λ€μ΄ μ΄λ£¨μ΄μ Έ λ¬Έμ₯μ μ΄λ£¨κ³ , λ¬Έμ₯μ΄ λͺ¨μ¬ λ¬Έλ¨, κΈμ΄ λλ―μ΄ μ½λ© μμ statementλ€μ΄ λͺ¨μ¬μ blockμ λ§λ€κ³ μ΄κ²μ΄ λΆλ¬ μ°κΈ°μ μ©μ΄ν functionμ΄λ classλ₯Ό μ΄λ£¨κ² λμ§μ. μ΄κ²λ€μ΄ λ λͺ¨μ΄λ©΄ moduleμ΄λ μμ±λ applicationμ΄ λ κ²μ΄κ΅¬μ.
κΈμ°κΈ°μμ κΈμ μ 체μ μΈ κ΅¬μ‘°κ° μ€μνλ―μ΄, μ½λ© μμ λ§μ°¬κ°μ§μ λλ€. κ·Έλ°λ° μ΄λ° ꡬ쑰μ μΈ μ½λ© μ€λ ₯μ λ¨κΈ°κ°μ κΈΈλ¬μ§μ§ μμ΅λλ€. λ°λΌμ μ½λ©μ μ νλ €λ©΄ μ₯κΈ°μ μΈ λ Έλ ₯μ΄ νμνκ³ μ₯κΈ°μ μΈ λ Έλ ₯μ λ€μ΄κΈ° μν΄μλ μ²μλΆν° μ’μ μ΅κ΄μ κΈ°λ₯΄λ κ² μμ μ€μνκ² μ΅λλ€.
μ½λ© μ€νμΌμ μ²μλΆν° μ΅κ΄μ μ λ€μ΄μ μΌ ν©λλ€. μ½λ© μ€νμΌμ΄ μ’μ§ μμ μ½λλ₯Ό λ§λ€μ΄ λ΄λ©΄ κ·Έκ²μΌλ‘μ κ·Έ μ½λμ μλͺ (life cycle)μ λμ΄λΌκ³ 보μλ©΄ λκ² μ΅λλ€. λ€λ₯Έ μ¬λλ€μ΄ νΈνκ² μ½μ μ μλ μ½λλ₯Ό μ§λ κ²μ μ²μλΆν° μ΅κ΄μ μ λλ‘ λ€μ΄μ§ μμΌλ©΄ μλκ² μ΅λλ€. μ½λ© μ€νμΌμ΄ λμ κ²½μ° μ¬μ§μ΄λ λ΄κ° μ΄ μ½λλ₯Ό λμ€μ λ€μ λ΄λ κ°μ΄ μμ€λ μ¬ν(?)κ° λ²μ΄μ§κΈ°λ ν©λλ€.
κ·Έλ°λ° μ½λ© μ€νμΌμ μ΄λ μ λκΉμ§ μ κ²½μ μ¨μΌ ν κΉμ? κΈ°λ³Έμ μΌλ‘ κΈμ νμνμ, 곡백 νλνλκΉμ§ μ κ²½μ μ°μ μΌ ν©λλ€. κ°λ¨ν μλ₯Ό νλ² λ³΄κ² μ΅λλ€.
μΌλ¨ μ΄ μ λκΉμ§λ λ€λ€ μ νμλλ€. λ€μ¬μ°κΈ°(indentation)μ μ½λ λΈλ‘(code block) λ§μΆκΈ°μ§μ.
Java:
public class HelloWorld
{
public static void main(String[] args)
{
System.out.println("Hello, World!");
}
}
Python:
#!/usr/bin/env python
print "Hello, world!"
κ·Έλ°λ° μ΄ λ€μλΆν° λ€λ€ μ κ°κ°μ΄ λμλλ€. λ³μ (variable)μ μ΄λ¦μ μ€ λ³ΌκΉμ? μ΄ λ μ½λ© μ€νμΌμ λ°λ₯΄λ©΄ Javaλ lowerCamelCase νμμ λ°λ₯΄κ³ Pythonμ snake_caseλ₯Ό λ°λΌμΌ ν©λλ€.
Java:
public class HelloWorld
{
public static void main(String[] args)
{
String helloWorldMessage = "Hello, World!";
System.out.println(helloWorldMessage);
}
}
Python:
#!/usr/bin/env python
hello_world_message = "Hello, world!"
print hello_world_message
λ¬Όλ‘ , μμ κ²½μ° Javaμμ hello_world_message μ΄λ¦μ λ³μλ₯Ό μ¨λ λκ³ Pythonμμ helloWorldMessage μ΄λ¦μ λ³μλ₯Ό μ¨λ μ»΄νμΌμ΄λ νλ‘κ·Έλ¨ μνμλ μλ¬΄λ° μ§μ₯μ΄ μμ΅λλ€. Helloworldmessageλ HELLO κ°μ μ΄λ¦μ λ§μλλ‘ μ€λ λ§μ°¬κ°μ§μ
λλ€.
νμ§λ§, μ¬κΈ°μ Javaμ κ²½μ°λ lowerCamelCaseλ‘ λ³μλͺ
μ μ°κΈ°λ‘ κ°λ°μλ€κ°μ κ΄μ΅(practice)μ λ§λ€μκ³ Pythonμ κ²½μ°λ snake_caseλ‘ λ¨μ΄ μ¬μ΄μ _λ₯Ό λ£μ΄μ λ³μλͺ
μ μ°κΈ°λ‘ νλ€λ μ μ μ€μνκ² λ³΄μ
μΌ νκ² μ΅λλ€. κ·Έλ¬λκΉ, κ°λ°μλ€μ μ΄ κ΄μ΅μ λ°λΌμΌ νλ κ²μ
λλ€.
μ°Έκ³ λ‘ Javaμ½λμμ νλ‘κ·Έλ¨ μ 체μ μ΄λ¦μΈ class μ΄λ¦μ HelloWorldλ‘ UpperCamelCase λ°©μμ μΌμμ μ μ μμ΅λλ€. μ΄λ° μΈμΈν κ²κΉμ§ μ κ²½μ μ¨μΌ νλ κ²μ΄μ£ .
κ·Έλ¦¬κ³ λ³μ(variable)μ κ°(value)λ₯Ό μ μ₯νλ = μ°μ°μ μ£Όμμ 곡백μ νλμ© λ£μ κ²λ μ£Όμ κΉκ² 보μ
μΌ ν©λλ€. κ·Έλ¬λκΉ helloWorldMessage="Hello, World!";μ κ°μ ννμ μ°λ κ²μ μ§μνλ€λ κ²μ΄μ£ .
μ μ΄λ° κ²κΉμ§ μΈμΈνκ² λ°μ§κΉμ? μ°μ°μ΄ μ‘°κΈλ§ 볡μ‘ν΄μ§λ§ μ΄λ μ΅λλ€. 0 λΆν° 9κΉμ§ νλ©΄μ μΆλ ₯νλ νλ‘κ·Έλ¨μ λ§λ€μ΄ λ³΄μ£ . λ³μ iλ₯Ό 0λΆν° μμν΄μ 10λ³΄λ€ μμ κ²½μ° κ³μ 1 μ© μ¦κ°μν€λ©° System.out.println(i);λ₯Ό μ€ννλ μ½λμ
λλ€.
Java:
public class PrintNumbers
{
public static void main(String[] args)
{
for (int i = 0; i < 10; ++i)
{
System.out.println(i);
}
}
}
μ¬κΈ°μ for (int i = 0; i < 10; ++i) λΆλΆμ λ³΄κ² μ΅λλ€. μ»΄νμΌλ¬ μ
μ₯μμλ μλ μΈ λ¬Έμ₯μ΄ λκ°μ΅λλ€. νμ§λ§ μ¬λ λμλ =λ < μ°μ°μ μ£Όμμ 곡백μ μ μ ν μ΄ μ μΌ μ λ¬Έμ₯μ΄ κ°μ₯ κ°λ
μ±μ΄ μ’κΈ° λ§λ ¨μ
λλ€.
for (int i = 0; i < 10; ++i)for (int i=0;i<10;++i)for (int i = 0 ; i < 10 ; ++ i)μ΄κ² λ§κ³ λ μ½λ© μ€νμΌμ λν΄μλ μ κ²½μ¨μΌ ν κ²λ€μ΄ λ§μ΅λλ€λ§ μΌλ¨ κ°λ¨ν μ¬κΈ°μ μ€μ΄κ΅¬μ. λ€μ νλ² μ’μ μ½λ© μ€νμΌ μ΅κ΄μ λ€λ₯Έ μ¬λλ μ½κΈ° μ’μ μ½λλ₯Ό λ§λλλ° νμλΆκ°κ²°μ΄λΌλ μ¬μ€μ κΌ κΈ°μ΅νμκΈ° λ°λλλ€. λν, λ€λ₯Έ μ¬λμ΄ μ§ μ½λμ λ΄ μ½λλ₯Ό μμ λ κ°μ μ½λ© μ€νμΌμ μ°λ κ²μ΄ μΌλ§λ μμ°μ±μ ν₯μμν€λ κ°λ λμ€μ κΌ μ²΄ν¬ν΄ 보μκΈ° λ°λλλ€.
μ°Έκ³ λ‘ λ§μ΄ μ°μ΄λ Javaμ Pythonμ μ½λ© μ€νμΌ κ°μ΄λλ₯Ό λ§ν¬ν΄ λ΄ λλ€.
vimμ΄λ emacsλ₯Ό μ°μμΌλ°μ μΌλ‘λ μ½λ©μ λ°°μΈ λ μ²μλΆν° μλ°(Java)μ μ΄ν΄λ¦½μ€(Eclipse)μ κ°μ΄ μλν°(editor), μ»΄νμΌλ¬(compiler), λλ²κ±°(debugger)κ° ν΅ν©λ ν΅ν©νκ²½(IDE, integrated development environment)μ μ°λ κ²½μ°κ° λ§μ κ² κ°μ΅λλ€. μΌκ²¬ ν΅ν©νκ²½μ μ§κ΄μ μΈ μ¬μ©μ μΈν°νμ΄μ€μ μ»΄νμΌ, λλ²κΉ μμ μ μλμΌλ‘ μ²λ¦¬ν΄ μ£Όλ κΉλμ μ½λ© μ΄λ³΄μμκ² μ’μ κ² κ°μ§λ§ μ κ° λ³΄κΈ°μλ νλ‘κ·Έλ¨ κ°λ° κ³Όμ μ νΈλ¦¬ν¨μΌλ‘ μ§λμΉκ² μΆμν μν€λ κΉλμ μ΄λ³΄μμκ²λ κ·Έλ€μ§ μ’μ§ μλ€κ³ μκ°ν©λλ€. λν, μ΄λ³΄μκ° μ°κΈ°μλ κΈ°λ₯μ΄ λ§κΈ°λ ν©λλ€.
κ·ΈλΌ μ΄λ€ κ°λ°νκ²½μ μ°λ κ²μ΄ μ’μκΉμ? μ²μ μ½λ©μ νμλ λΆλ€μ 리λ μ€ μλ²μ 리λ μ€ λͺ λ Ή ν둬ννΈ (CLI, command line interface)λ‘ μ μν΄μ ν μ€νΈ μλν°(text editor)λ₯Ό μ΄μ©ν΄ νλ‘κ·Έλλ°μ μμνμλ κ²μ μΆμ²ν©λλ€. λͺ λ μ΄λ₯Ό νλνλ μμΌλ‘ νμ΄ννλ©΄μ μ΄ν리μΌμ΄μ κ°λ°μ μ 체μ κ³Όμ μ μ΅νλ κ²μ΄ νμνκΈ° λλ¬Έμ λλ€. νΉν, μ²μμλ μ»΄νμΌ μμ μ μμΌλ‘ νλ©΄μ μ΄λ€ νμΌμ μ»΄νμΌ μν€λ©΄ μ΄λ€ ννμ μ€ν νμΌμ΄ λμ€λμ§ μμμΌ νκ² μ΅λλ€.
λν, 리λ μ€ μλ² κ΄λ¦¬μ κΆνμ΄ μλ κ²½μ° μ΄ν리μΌμ΄μ μ μ€μΉνλ κ²κ³Ό κ°μ κ΄λ¦¬μ κΆνμ΄ νμν λͺ λ Ήλ€μ μμ£Ό μ€μ΅ν΄ λ³Ό νμκ° μμ΅λλ€. κ·Έλ¬κΈ° μν΄μλ 리λ μ€ λͺ λ Ή ν둬ννΈλ₯Ό λ§μ΄ μ°λ νκ²½μ΄ νμνμ§μ.
κ·Έλ¦¬κ³ κ²λ³΄κΈ°μλ λ¬λ¦¬ ν°λ―Έλκ³Ό κ°μ ν
μ€νΈμμ μ°λ μλν°λ€μ΄ μ‘°κΈλ§ μ¬μ©λ²μ λ°°μ°λ©΄ μ°κΈ°κ° νΈν΄μ§λ νΉμ±μ΄ μμ΅λλ€. λνμ μΈ κ²μ΄ vimκ³Ό emacs μλν°μ μλμ°λ§₯μΈλ°μ. μ΄λ€ μλν°λ₯Ό μ°μλ μ§ μκ΄μ μμ΅λλ€λ§ λ μλν° λͺ¨λ κΈ°λ³Έμ μΌλ‘ λ§μ°μ€λ₯Ό μ°μ§ λͺ»νκ³ ν€λ³΄λ λͺ
λ Ήμ΄λ₯Ό νλνλ μ΅νμ
μΌ νλ λΆνΈμ΄ μμ΅λλ€.
vimμ κ²½μ°λ λ λ¬Ένμ μΈ μΆ©κ²©(?)λ μμ΅λλ€. μλν°λ₯Ό μ€νμν€κ³ λμ ν€λ₯Ό λλ¬λ³΄λ©΄ νμ΄νμ΄ μλ©λλ€. μ΄κ²μ vim μλν°κ° κΈ°λ³Έμ μΌλ‘ νΈμ§ λͺ¨λμ λͺ
λ Ήμ΄ λͺ¨λλ₯Ό ꡬλΆνκΈ° λλ¬ΈμΈλ°μ. i ν€λ₯Ό λλ¬ λͺ
λ Ήμ΄ λͺ¨λμμ νΈμ§ λͺ¨λλ‘ μ§μ
ν΄μΌ νμ΄νμ΄ κ°λ₯νκ² μ΅λλ€.
λͺ
λ Ήμ΄ λͺ¨λμ λν΄ κ°λ¨ν μ€λͺ
μ λ리면 μ΄λ μ΅λλ€. vimμμλ 컀μ μ΄λν€κ° h, j, k, l μ
λλ€. κ·Έλ¬λκΉ κ°μ jλΌλ λͺ
λ Ήμ΄ λͺ¨λμμλ μλ«μͺ½ 컀μν€κ° λκ³ νΈμ§ λͺ¨λμμλ j κΈμκ° λλ κ²μ΄μ£ .
μ΄λ° vimμμ λͺ
λ Ήμ΄ λͺ¨λμ νΈμ§ λͺ¨λμ ꡬλΆμ μ‘°κΈλ§ μ΅κ΄μ΄ λμλ©΄ μμ£Ό νΈλ¦¬ν΄μ§λ κΈ°νμ(?)μ κ²½ννμ€ μ μμ΅λλ€. μΌλ‘λ‘ j, k ν€λ‘ 컀μλ₯Ό μλμλ‘ μ΄λνλ κ²μ΄ ν€λ³΄λ μ€λ₯Έμͺ½μ μΉμ°μΉ 컀μν€λ‘ μμ λ»λ κ²λ³΄λ€ νΈλ¦¬νκΈ° λ§λ ¨μ΄μ§μ.
μ κ° vim μ¬μ©μμ΄λ€λ³΄λ vim μκΈ°κ° κΈΈμ΄μ§κ³ μλλ°μ. emacs μμ μ’μ μλν°μ
λλ€. emacsλ μλν°μ΄μ§λ§ κ·Έ κΈ°λ₯μ΄ λ°©λνκΈ° λλ¬Έμ μ΄λ»κ²λ³΄λ©΄ ν΅ν©νκ²½λ³΄λ€ λ λμ κ°λ° νκ²½μ μ 곡νλ€κ³ λ³Ό μλ μκ² μ΅λλ€. emacsλ μ κ° κΈ°μ΄ μ΄μμ μ λͺ¨λ₯΄λ κΉλμ μΌλ¨ μκ°λ§μΌλ‘ κ·ΈμΉκ² μ΅λλ€.
μ°Έκ³ λ‘ λ¦¬λ
μ€ λͺ
λ Ήμ΄ ν둬ννΈμμ 컀μ μ΄λ λͺ
λ Ήμ emacs λ¨μΆκΈ°λ₯Ό μ΄μ©ν©λλ€. ctrl-aκ° Home ν€ μν μ, ctrl-eκ° End ν€ μν μ ν©λλ€. ctrl-pλ μμͺ½ νμ΄ν ν€ μν , ctrl-nμ μλ«μͺ½ νμ΄ν ν€ μν μ
λλ€.
κ·Έλ¦¬κ³ Pythonμ μ°μλ λΆλ€μ μλν°μ μΆκ°ν΄μ Python λͺ
λ Ήμ΄ ν μ€ λ¨μλ‘ λ°λ‘λ°λ‘ μ€νμμΌλ³Ό μ μλ μΈν°ν리ν°(interpreter) μμ μ€μνκ² μ§μ. κΈ°λ³ΈμΌλ‘ μ 곡λλ python μΈν°ν리ν°λ³΄λ€λ ipython μΈν°ν리ν°λ₯Ό μ°μκΈΈ μΆμ²ν©λλ€. ipythonμμλ λͺ
λ Ήμ΄μ μκΉμ μ
νμ£Όλ syntax highlighting, ν ν€λ₯Ό λλ₯΄λ©΄ κ°μ₯ κ°κΉμ΄ λͺ
λ Ήμ΄λ λ³μ μ΄λ¦μ μμμ μΆμΈ‘ν΄μ£Όλ name completion κΈ°λ₯μ΄ κΈ°λ³Έμ μΌλ‘ μ 곡λ©λλ€. μλ νλ©΄μ 보μμ§μ.
λ§μ§λ§μΌλ‘ vimμ΄λ emacsμ μ무λλ μ μμ΄ μλμλ λΆλ€μ μ κ° κ³Όκ±° ν¬μ€ν
μμ μ κΉ μΈκΈνλ nano μλν°λ₯Ό μ°μκΈΈ μΆμ²ν©λλ€. κ·Έλ¦¬κ³ , Eclipseμ κ°μ ν΅ν©νκ²½μ κ°λ°νλ νλ‘μ νΈμ ν¬κΈ°κ° 컀μ§λ©΄μ μμ€ μ½λ νμΌμ μ«μκ° λ§μμ§λ©΄ κ·ΈλλΆν° μ°μ
λ λκ² μ΅λλ€. λ³μλ ν΄λμ€, λͺ¨λ μ΄λ¦μ νλλ§ κ³ μΉλ©΄ μμ€μ½λ μ 체μ κ±Έμ³μ μλμΌλ‘ κ³ μ³μ£Όλ refactoringκ³Ό κ°μ κΈ°λ₯μ ν΅ν©νκ²½μ μ¨μΌ νΈλ¦¬νκ² μ΄μ©ν μ μμΌλκΉμ.
μ£Όμ(comment)μ λ°λ₯Έ μ: μΆμ²
/**
* The HelloWorld program implements an application that
* simply displays "Hello, World!" to the standard output.
*
* @author foobar
* @version 1.0
* @since 2018-04-17
*/
public class HelloWorld
{
public static void main(String[] args)
{
/* Prints Hello, World! on standard output. */
String helloWorldMessage = "Hello, World!"; // assigns "Hello, World!"
System.out.println(helloWorldMessage);
}
}
μ°μ , μμ€ μ½λ λ΄λΆμ μ£Όμ(comment)μ λ§μ΄ λ€λ μ΅κ΄μ λ€μ΄μ μΌ ν©λλ€. μ΅κ³ μ commentλ μ λ§λ μμ€ μ½λλΌλ μκΈ°κ° μκΈ°λ νμ§λ§ κ·Έ μ λμ κ³ νμ§ μμ€ μ½λλ₯Ό λ§λ€μ΄ λ΄λ μ¬λλ€μ μ§κ·Ήν λλ λλ€. λ°λΌμ, κΈ°λ³Έμ μΌλ‘ μ€λͺ μ΄ νμν λλ§λ€ commentλ₯Ό λ€λ μ΅κ΄μ λ€μ΄λ κ²μ΄ μ’μ΅λλ€.
μ½λ©μ νλ€ λ³΄λ©΄ λꡬλ κ²½ννκ² λλ κ²μ΄ μ΄λ μ΅λλ€. μΌμ΄λ μ λ μ§λμ μμ μ΄ μ§ μμ€ μ½λλ₯Ό 보면 κ°μ΄ μ€μ§ μμ΅λλ€. μ΄λ΄ λ commentλ μμΌλ©΄ λκ°νμ£ . μ λ§λ‘ λ΄κ° μ§ μ½λλ₯Ό λ΄κ° λͺ» μμ보λ ν©λΉν μν©μ΄ μ κ°λλκΉμ. νμ§λ§, μ¬λμ λ§κ°μ λλ¬Όμ λλ€. λ΄κ° μ΄ μ½λλ μ νμ©νλ €λ©΄ commentλ₯Ό μ λ€λ κ²μ΄ μΌμμ΄ λμ΄μΌ ν©λλ€. νλ¬Όλ©° λ¨μ΄ λ³΄κ² λ μ½λλΌλ©΄ λλμ± commentμ μ κ²½μ μ¨μΌ νκ² μ§μ.
κ·Έ λ€μμΌλ‘ μ€ν μμ€ νλ‘μ νΈ νΈμ€ν μλΉμ€μΈ GitHub.comμ λ΄ νλ‘μ νΈ νμ΄μ§λ₯Ό κ°μ€ν λ€μ κ°λ° λ¬Έμλ₯Ό μ¨ λ³΄κΈ°λ₯Ό μΆμ²ν©λλ€. μ²μμλ κ°λ° λ¬ΈμλΌκ³ ν΄λ νλ‘μ νΈ μκ°μΈ README.md(mdλ markdownμ μ€μμ λλ€)λ₯Ό μ°λ κ²μ΄ λλΆλΆμ΄κ² μ΅λλ€λ§ λ€λ₯Έ μ¬λμ΄ μ½μ΄λ³Ό νμκ° μλ κ°λ° λ¬Έμλ₯Ό μμ±ν΄ λ³Έλ€λ κ²μ ν° μλ―Έκ° μμ΅λλ€. κ²λ€κ°, GitHubμ λ¬Έμ ν¬λ§·μ κΈ°λ³Έμ μΌλ‘ μ€νμκ³Ό λμΌν markdownμ μ¬μ©ν©λλ€.
GitHub.comμ νλ‘μ νΈ νμ΄μ§λ₯Ό μ€ννκΈ° μν΄μλ μμ€ μ½λ λ²μ κ΄λ¦¬λ₯Ό λ΄λΉνλ git λͺ
λ Ήμ΄ μ¬μ©λ°©λ²μ λ°°μμΌ ν©λλ€. git λͺ
λ ΉμΌλ‘ μμ€μ½λλ₯Ό μ
λ‘λ/λ€μ΄λ‘λ νλ κ²μ΄ μμνκ³ λ³΅μ‘ν μ μμ΅λλ€λ§ λ€λ₯Έ κ°λ°μμμ νμ
μ νλ €λ©΄ μΈμ κ°λ λ°λμ μ΅λν΄μΌ νλ κ²μ΄ git λͺ
λ Ήμ
λλ€. μ°μ , νΌμλ§ μ°λ νλ‘μ νΈλΌλ git λͺ
λ ΉμΌλ‘ νλ‘μ νΈ μ μ₯μ (repository)μ μμ€ μ½λ λ³κ²½ μ¬νμ 체ν¬μΈ(checkin)/체ν¬μμ(checkout)μ νλ μ΅κ΄μ λ€μ¬λ³Ό νμκ° μμ΅λλ€.
GitHub μ¬μ© λ°©λ² κ°μ’λ‘λ μλ λ§ν¬λ₯Ό μΆμ²ν©λλ€.
μ§κΈκΉμ§ μ½λ©μ λ°°μ°λλ° λμμ΄ λλ μ΅κ΄κ³Ό μ¬κΈ°μ νμν λꡬλ€μ λν΄ κ°λ¨ν μμλ΄€μ΅λλ€. μ 체μ μΌλ‘ μ½λ© μ€νμΌκ³Ό κ°μ΄ μ½λ©μ μ§μ μ μΌλ‘ μ°κ΄μ΄ λλ μ΅κ΄κ³Ό κ°λ° λ¬Έμ μμ±κ³Ό κ°μ΄ μ½λ©μ λμμ£Όλ μ΅κ΄μΌλ‘ λλ μ μκ² μ΅λλ€.
μ μ ν μ½λ© μ€νμΌμ κ°μΆ μ½λλ₯Ό μμ±νλλ°λ κ°λ° λꡬμ λμμ΄ νμνλ°μ. μ²μ μμνμ€ λλ Eclipseμ κ°μ ν΅ν©νκ²½(integrated development environment)λ³΄λ€ ν°λ―Έλ λͺ¨λμμ vimμ΄λ emacs μλν°λ₯Ό μ¨μ μ½λ©μ νκΈ°λ₯Ό μΆμ²λ립λλ€.
κ°λ° λ¬Έμ μμ±κ³Ό μμ€μ½λ λ²μ κ΄λ¦¬λ₯Ό μν΄μλ GitHub.comμ νλ‘μ νΈλ₯Ό κ°μ€νκ³ git λͺ
λ Ήμ μ΄μ©ν΄μ μμ€μ½λ κ΄λ¦¬λ₯Ό νλ μ΅κ΄μ λ€μ΄λ κ²μ μΆμ²ν©λλ€. μ₯κΈ°μ μΌλ‘ GitHub.comμ μ¬λΌμ μλ λ€λ₯Έ κ°λ°μλ€κ³Ό νμ
(collaboration)μ νλ λ°©λ²μ μ²μλΆν° μ΅λν μ μκ² μ΅λλ€.
μ½μ΄ μ£Όμ μ κ°μ¬ν©λλ€. λ€μ κΈμμ λ λ΅κ² μ΅λλ€.