728x90

파일 헤더를 제공하라
사소하지만 꽤 중요하다. 난 지금까지 제대로 지키지 않았다. 앞으로는 잘 하도록 노력해야겠다. 대부분의 회사에서는 법률적인 이유로 모든 소스 파일에 가시적인 저작권 공지를 포함시키도록 의무화하고 있단다.
/*************************************
* 파일 : FileName.java
* 목적 :
* 알림 : 저작권표시
*************************************/

에러를 적절하게핸들링하라
에러는 발생한 곳과 가까운 곳에서 처리하는 것이 좋다. 에러가 발생하면 어디서 왔는지, 에러의 이유가 무엇인지, 에러가 발생한 것은 무엇을 의미하는 것인지 알기 쉽도록 해라.(어떻게? 잘~)

의미 있는 코멘트를 작성하라
학교에서 처음 프로그래밍을 배우면서 코드를 작성하고 발표수업이 있을 때 모든 문장에 코멘트를 달도록 강요받은 기억이 있다. 코멘트가 너무 많은 코드는 오히려 보기 불편하다. 가능하면 코멘트가 필요없도록 작성하되 그러고도 남아있는 부분에 대해서는 적절한 분량의 코멘트를 추가해야 한다.
* 파일헤더, 함수의 설명, 변수에 대한 설명은 가능하면 생략하지 마라.


문서화의 여러가지 방법


문학적 프로그래밍(프로그램을 작성하지 말고, 문서를 작성하라. 소설처럼 써라.)
장점

* 문학적 프로그래밍은 문서작성에 강점을 둔다.
* 문서가 가까이 있으므로 업데이트할 때 문서도 함께 업데이트 하기 쉽다.
* 전체 코드베이스에 대해 단 하나의 문서만 존재한다는 사실이 보장된다.(코드 자체가 문서기 때문)
* 일반적으로 코멘트에 쓰이지 않는 항목도 문서화하도록 유도한다.(사용된 알고리즘에 대한 설명, 코드가 올바르다는 증명, 그렇게 설계하게 된 결정의 정당성.)
* 유지보수에서 빛이 난다.
단점
* 코드가 아니라 문서 전체를 작성해야 하므로 대부분의 프로그래머들이 힘들고 귀찮아 한다.
* 또 하나의 컴파일 단계가 필요하고, 그것이 작업 속도를 느리게 만든다.(아직 바로 컴파일해줄만한 툴은 없단다. 당연하지!)
* 정말 문서화가 필요하지 않은 부분까지도 문서화하게 될지도 모른다. 또는 일부를 문서화하지 않게 될지도 모른다. 귀찮으면 아예 하지 않는 것이 좋다. 이도저도 아니면 안된다.
* 프로그램 잘 짠다고 글도 잘쓰는 것은 아니다. 훌륭한 프로그래머라고 해서 반드시 유능한 문학적 프로그래머가 되는 것은 아니다.


문서화툴
문서화를 도와주는 툴이 많이 있다는 말이다. 책에서는 Javadoc를 예로 들었는데 이는 다음과 같은 일을 도와준다.
 * 저작권 정보를 명시한다
 * 생성일자를 기록한다
 * 정보를 상호 참조시킨다
 * 오래된 코드에 deprecated라고 표시한다.(오래됐다고 바꾸라고 권장한다는 뜻)
 * 빠른 참조용의 짤막한 개요(synopsis)를 제공한다
 * 함수 파라미터 각각에 대한 설명을 제시한다
javadoc, C#의 NDoc와 Doxygen(www.doxygen.org)등이 있단다.
장점
* 코드의 문서화와 업데이트를 촉진
* 컴파일할 수 있는 코드를 위해 별도의 단계가 필요하지 않다(문학적 프로그래밍과의 차이)
* 비교적 자연스럽게 보인다.
* 문서화 툴은 풍부한 검색, 상호 참조, 코드 아웃라인 기능을 지원
단점
* API의 문서화에만 정말로 유용하고, 내부 코드의 문서화에는 일반 코멘트를 사용해야 함
* 소스 파일을 훑어보고 개략적인 내용을 파악하기 어렵다.(이런 건 문학적 프로그래밍이 한 수 위)
주의
* public 항목에 대해서는 하나 또는 두 개의 문장으로 구성된 설명을 작성하라. 쓸데없이 주절주절 늘어놓지 말란 말이다.
* 변수나 파라미터가 어디에 사용되는지 분명하지 않으면 문서화하라. 단 이름만 보아도 확실하게 알수 있으면 문서화하지 마라.
*함수 파라미터 중 어떤 것은 입력에 사용되고 어떤 것은 출력에 사용된다면, 그런 사실을 파라미터 설명에 명확히 기술하라
* 함수의 전제조건, 후행조건, 발생할 수 있는 exception, side effect를 모두 문서화 하라.

생각해보니 2학년 때 이현아교수님이 문서화 툴에 대해 언급했었고 임은기 교수님도 권장한 적이 있다. 다만 귀찮아서 사용하지 않았다. 잠시 알아본 적도 있었지만 귀찮아서 사용하지 않았다. 문서화 툴은 형식이 일정한 것이 아니라 툴 마다 다르기 때문에 필요하다면 실무에서 사용되는 공통된 것을 이용하면 될 것 같다. 사용법이 그리 어렵지 않으니 그때그때 필요한 것을 배우면서 사용할 수 있다. 문서화 툴에 의존하기보다는 필요한 정보는 코멘트로 달아두는 습관을 기르는 것이 더 도움이 될 것 같다.

+ 파일에는 헤더를 유지 (파일명, 목적, 저작권 [, 특이사항])
+ 함수에도 헤더를 유지 (parameter, return value, 목적)
+ 변수는 이름만으로 명확한 것이 아니면 반드시 설명(객체형식이라면 이름이 확실해도 설명을 붙여두는 것이 좋다.)

728x90
728x90
#include <stdio.h>
int main()
{
    int number1, number2;
    printf("정수 2개를 입력: ");
    scanf("%d %d", &number1, &number2);
    printf("number1 = %d, number2 = %d", number1, number2);
    return 0;
}

무지 간단한 코드다. 하지만 제대로 된 값이 입력되지 않으면 치명적인 결과가 나올수도 있다. 가령 제대로 된 값이 입력될 때까지 반복문을 돌리는 코드에서 숫자대신 문자를 입력하면 무한루프에 갇히는 경우가 종종 발생한다. 어떻게 처리하는 것이 좋을까?

사람들이 쉽게 지나치는 경우가 많지만 많은 함수가 return값을 제공하고 있다. 가능한 많은 함수의 return값을 생각하라. printf와 scanf의 경우도 마찬가지다. 특히 scanf의 return값을 꽤 유용하고 똑똑하다. scanf는 변수에 제대로 들어간 갯수만큼 return해준다. 만약 위의 코드에서 하나는 숫자 하나는 문자를 입력하면 return값은 1이 된다.
이를 이용해서 간단하게 오류처리를 해보자.

#include <stdio.h>
int main()
{
    int number1, number2;
    do{
        printf("정수 2개를 입력: ");
        fflush(stdin);                          //입력버퍼(stdin)를 비우라는 명령
    }while(scanf("%d %d", &number1, &number2) != 2);
    printf("number1 = %d, number2 = %d", number1, number2);
    return 0;
}

이 코드는 제대로 된 입력값이 들어올 때까지 계속 반복하게 된다.
728x90
728x90

유클리드 호제법 : 기원전 300년경 기하학자 유클리드가 주장하여 그의 이름을 딴 공식으로 알려져 있다.
두 자연수 A,B에 대하여 A를 B로 나누었을 때 몫을 Q, 나머지를 R이라고 하면(A = BQ+R)
A,B의 최대공약수는 B,R의 최대공약수와 같다.
<증명> A,B 둘의 최대공약수 G
A = aG, B = bG (a,b는 서로소)
(A = BQ+R, B = bG 이므로)
bGQ+R = aG
=> R = (a - bQ)G
--------------------------
A = aG
B = bG
R = (a-bQ)G
그러므로 A,B의 최대공약수와 B,R의 최대공약수는 G로 서로 같다.

========================================================================
#include <stdio.h>
unsigned int gcd(unsigned int valuer1, unsigned int value2);
unsigned int lcm(unsigned int value1, unsigned int value2);

int main()
{
    unsigned int value1, value2;
    printf("자연수 2개를 입력하시오 : ");
    scanf("%d %d", &value1, &value2);
    printf("최대공약수 : %d\n", gcd(value1, value2));
    printf("최소공배수 : %d\n", lcm(value1, value2));
    return 0;
}



int lcm(int value1, int value2)
{
        int temp;
        temp = gcd(number1, number2);
        return (number1/temp)*number2;
}

======================================================================
위의 소스는 우선 돌아가는 것 같지만 약점이 있다.
입력값을 전혀 체크하지 않는다는 것! 만약 자연수를 입력하지 않는다면 문제가 발생할 가능성이 크다.
0 0을 입력한다면? 만약 수를 입력하지 않고 문자를 입력해 버린다면?
간단히 오류체크를 추가해서 main을 바꿔보자.

int main()
{
    unsigned int value1, value2;
    do{
        printf("자연수 2개를 입력하시오 : ");
        scanf("%d %d", &value1, &value2);
    }while(value1 <= 0 || value2 <= 0);
    printf("최대공약수 : %d\n", gcd(value1, value2));
    printf("최소공배수 : %d\n", lcm(value1, value2));
    return 0;
}

간단히 do-while을 사용해서 자연수가 아닌 정수(0,음수)는 걸러주도록 했다.
숫자 이외의 값이 입력되는 경우는 찾아보기 쉽게 다른 글로 다시 써야겠다.

728x90
728x90

Welcome to Microsoft DreamSpark

Professional Developer and Designer tools for students at no charge



DreamSpark is simple, it's all about giving students Microsoft professional-level developer and design tools at no charge so you can chase your dreams and create the next big breakthrough in technology - or just get a head start on your career.

Who can get this right now?
We are kicking this off in 11 countries/regions, giving DreamSpark to millions of students in the United States, the United Kingdom, Canada, China, Germany, France, Finland, Spain, Sweden, Switzerland and Belgium. If you are not residing in one of the countries listed keep checking back, we will be adding more countries throughout the year.

Does that mean that I might not get in?
Possibly, if you are not residing in one of the countries listed, not attending an accredited university or not a member of one of the student organizations that we're connected with. But keep checking back, as we're working on adding more ways to verify your student status all the time.

What do I have to do to get this software? Not much really, just select a product and follow the steps below.

  • Sign In with your Windows Live ID. If you don't have one, go get one here. Pretty basic stuff.

  • Get verified as a student. The system is linked to schools and organizations around the world that can confirm student status. Simply choose your country and school, enter your info and hit submit.

  • Download your products. Now remember these are professional tools. This means they are pretty big files so make sure you have the bandwidth and space to bring them to your machine. We support the latest versions of both Internet Explorer and Firefox for your download.
 

Microsoft® Expression® Studio

Microsoft® Expression® Studio takes your creative possibilities to a new level. The professional design tools and innovative technologies in Expression Studio give you the flexibility and freedom to bring your vision to reality—whether you are designing standards-based Web sites, rich user experiences on the desktop, or managing digital assets and content. Expression Studio includes the following products:


When you download and save this product to your computer, it will be in the form of an ISO file. The downloadable ISO file must then be placed onto a CD/DVD or mounted using a virtual drive before installation can occur. To get detailed instructions on how to open the ISO file and install this product, click here.
 
 
 

XNA Game Studio 2.0

XNA Game Studio 2.0 – Microsoft XNA Game Studio 2.0 is a set of tools that allow students, hobbyists and independent developers to build games for both Microsoft Windows and Xbox 360. XNA Game Studio 2.0 is based on the .NET Framework and includes custom managed code libraries, Xbox Live Support, and Games for Windows Live support to make multi-player game development easier.

XNA Creators Club 12-Month Trial Subscription – Coupled with XNA Game Studio 2.0, the XNA Creators Club 12-Month Trial Subscription opens up video game development to untapped creative minds, enabling anyone to affordably build and play their amazing game ideas on Xbox 360™ systems for the first time ever. The access key below grants access to a 12-month trial subscription that provides aspiring game developers the ability to develop games for their Xbox 360 without having to pay the $100 yearly subscription.
 
 
 현재 아시아권에서는 중국만 서비스 중이라, 우리나라는 다운로드 받을 수 없다.
 우리나라는 9월부터 서비스를 제공한다고 한다. 그리고 정말 대학생만 받을수 있다.

[출처] Microsoft Dreamspark- 마이크로소프트 드림스파크|작성자

11개국 국가에 대학생들..그리고 고등학생까지 확대하고 있단다.
========================================
만약 ISIC 국제학생증을 가지고 있다면 지금 바로 개발툴을 다운로드 할 수 있다. 현재 배포 되고 있는 개발툴은 비주얼 스튜디오 2005, 2008 / 윈도우즈 2003 서버 에디션 / SQL 서버 2005 / 익스프레션 스튜디오 / XNA 게임 스튜디오 2.0 이다. 개인적으로는 조만간 발표될 익스프레션 스튜디오 2도 조속히 배포되었으면 하는 바람이 있다. (부족한 실버라이트 인프라를 생각하면 아마도 공개될 것 같다.)

아마도 개발툴에 있어 오픈소스도 너무 많고 이클립스, JAVA진영에 많은 위협을 받아 유저들을 잘 키워서 잡아먹겠다는 생각이 아닐런지.. 우리 돈 많으니 앞으로의 고객들에게는 우선 안받아도 된다는 생각!
쉽게 말해서 배우는건 MS제품으로 배우고 실무에 나가서 팔아먹을 위치에 오르면(그땐 학생이 아니겠지) 돈주고 사라는 말이다.
그럼에도 복학하자마자 ISIC인증 받아서 다운받아버릴테닷!!

728x90

+ Recent posts