DNF LOVE

컴퓨터공학과 / 소프트웨어공학과 / 코딩 / 프로그래밍 / 개발자 하고 싶은데 적성에 맞지 않을까 고민하는 사람들을 위한 글 (+ 비전공자) 본문

Daily/ETC

컴퓨터공학과 / 소프트웨어공학과 / 코딩 / 프로그래밍 / 개발자 하고 싶은데 적성에 맞지 않을까 고민하는 사람들을 위한 글 (+ 비전공자)

botho 2019. 7. 21. 01:56
반응형

4차 산업혁명이라는 마켓팅 언어가 탄생하고 부터 이 IT업계에 관심을 갖기 시작한 사람들이 많아지기 시작했다.

인터넷을 하다보면 특히 '프로그래밍 하고 싶은데 적성에 맞지 않을까 고민된다.' 하는 사람들이 많다. 

이 글은, '과연 나는 프로그래밍 적성에 맞을까?'에 대한 답변이다.


코딩에서 가장 중요한것이 무엇이냐 하면,

수리력도, 추리력도 아닌 바로

논리력

* 논리란?

1. 사고와 행동 면에서 타당한 규범과 기준을 취급하는 과학을 말한다. 추론의 형식적 원리에 대한 과학. 

2. 컴퓨터에서의 진리표, 명제의 상호 관계, 개폐 회로 요소의 상호 접속 등에 관한 기초적 원칙과 응용. 

3. 말이나 글에서 사고나 추리 따위를 이치에 맞게 이끌어 가는 과정이나 원리

4. 사물 속에 있는 이치또는 사물끼리의 법칙적인 연관.

 

이 논리력을 확인하는 방법이 무엇일까?

바로 '수학적 명제를 풀어보기' 이다.

다들 고등학생, 중학생때 명제 문제를 수도없이 풀어봤을 것이다.

네이버 사전에 따르면 명제는 

논리 어떤 문제에 대한 하나의 논리적 판단 내용과 주장을 언어 또는 기호로 표시한 것. 참과 거짓을 판단할 수 있는 내용이라는 점이 특징이다' 를 의미한다.

 

명제는 참과 거짓으로 구분되는 문장이다.

참과 거짓, 컴퓨터는 0과 1, 2진법으로 되어있다는 것은 상식이지 않는가? 

보통 언어마다 다를때도 있는데 보통 프로그래밍에서 0은 false이고 1은 true를 의미한다.

코딩에서 가장 기본적인 문법은 if-else문이고 이걸 조건문이라고 한다.

만약, if문이 사실이면 if문의 내용이 수행되고, 

else, 거짓이라면 else문의 내용이 수행된다.


간단 예제를 보도록 하자.

이 문제는 알고리즘 문제풀이 사이트인 '백준 알고리즘'사이트의 1330 번 문제를 발췌했다.

이 문제는 아주아주아주아주아주 기초적인 문제이다.

정수형인 두 수 A, B를 입력받아 A와 B의 크기를 비교하여 원하는 문자를 출력하는 문제이다.

import java.util.*;

public class Beak_1330 {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		
		int A = sc.nextInt();
		int B = sc.nextInt();
		
		if(A == B) {
			System.out.println("==");
		}else if(A > B) {
			System.out.println(">");
		}else {
			System.out.println("<");
		}
	}

}

java의 문법에 따라, Scanner를 통해 int 형 A, B 두 수를 입력받고

만약(if) A와 B의 크기가 같으면 ==를 출력하고 그게 아니라 A가 더 크면(if-else) > 를 출력, 둘 다 아니라면(else) < 를 출력한다.

 

이것의 기본 개념은 '명제'이다. 명제에 따라 참, 거짓을 구별하고 참과 거짓에 따른 명령을 수행하는 것이다.

이렇듯 코딩과 명제는 정말 뗄레야 뗄 수 없는 관계이다.

수학적 명제 문제는 자신의 논리력을 확인 할 수 있는 가장 쉬운 적성 검사이다.

 

자, 그럼 명제 문제를 어느정도의 수준에서 풀어야 적성에 맞는다고 할까?


요새 커리큘럼이 하도 달라져서 어느 나이때 명제를 처음 배우는지는 모르겠는데,

이 문제는 삼성 인적성 GSAT의 논리 추론 응용 문제 영역 부분 발췌이다.

 

나는 이 문제들은 한 문제당 빠르면 30초 느려도 적어도 1분 30초만에 푸는 편이다. 그리고 99.99의 정답률을 자랑한다 ㅎ

나는 보통 논리 추론 문제를 읽고, 예시를 보면 어느정도 머릿속에서 각 상황에 따라, true와 flase일 때의 상황이 그려지는 편이다. 이렇게 예측한대로 슥슥 쓰면 정답!

(참고로 대기업 인적성의 수준은 대부분 이 정도 중고 수준이긴 한데 모든 영역에서 내가 추론 영역 푸는 것 처럼 풀어야함)

한 개 문제를 제대로 봐보도록 하자.

 

이 5명의 친구들이 대화를 하고 있다. 이들의 발언은 전부 엇갈리며, 누가 진실이고 누가 거짓인지 알 수는 없지만

문제를 통해 발표자는 단 한사람이라는 사실을 알 수 있다.

그렇다면 논리에 따라 '단 한명 뿐인 발표자'가 나올수 있도록 어떤 발언이 거짓이고 어떤 발언이 참인지를 찾아야 한다.

다시 한 번 말하지만 여기서의 힌트는 단 한명뿐인 발표자이고, 이 발언들은 한 명뿐인 발표자를 가리키고 있는 발언들이라는 것이다.

자, 풀어보도록 하자.

우선 상우의 발언이 사실이라고 해보자. 그러면 우성이가 발표자가 되겠네?

그렇다면 나머지 발표자를 가리키는 제니, 우성, 나리는 거짓이 되겠지? 발표자는 여러명일 순 없으니까.

근데 태현이를 보자. 진실을 말하는 사람은 많아야 한 사람이다.

어라? 이상하네?

태현이의 말이 거짓이라면 진실을 말하는 사람은 여러명이어야 할 텐데,

상우의 말이 사실이 됨에 따라 진실을 말하는 사람은 한 사람 뿐이다.

반대로 태현이의 말이 사실이라면 진실을 말하는 사람은 상우, 태현으로 두 명이 된다.

이것을 '논리 오류'라고 한다.

또, 그리고 상우의 경우처럼 제니, 우성, 나리의 말이 각각 한명씩 사실이 되더라도

태현의 말은 항상 논리 오류를 불러온다.

(이건 잠깐 프로그래밍 이야긴데 오류에는 크게 3가지가 있다.

컴파일 오류, 런타임 오류, 논리 오류

논리 오류란 위의 예시처럼 내가 원하는 결과가 나와야 하는데,  논리 오류로 인해 원하는 결과가 나오지 못했을 때의 오류를 얘기한다.)

그렇다면 결과는 어떻게 될까? 태현이 F가 됨에 따라 항상 논리오류를 불러 일으키니, 태현의 말이 T라고 생각해보자.

그럼 자연스럽게 나머지 4명의 발언은 거짓이게 된다!

그리고 이들이 발언한 애들은 우성, 나리, 상우, 제니야. 이들이 언급하지 않은 사람은 태현 단 한사람 뿐이다.

그렇다면 자연스럽게 발표자는 태현이가 된다.


논리력을 설명하기에는 굉장히 어렵다.

내가 표현력이 부족한 전형적인 이과생이기도 하고, 논리이기 때문에 물리적으로 보여주기가 어렵다.

가장 간단하게 우리 주변에서 논리력을 확인하는 방법은 명제라고 생각한다. (사실 인적성 풀때 앗, 이거다! 싶었다 ㅋㅋㅋ)

뭐, 알고리즘 조직도에 따라 수학적 귀납법 문제를 푸는게 있긴 한데, 이보단 명제가 더 쉽지 않는가 ㅎ?

이렇게 명제들을 풀어보면서 술술풀린다면,

코딩에도 적성이 잘 맞을 것이고 물론 조금 어렵더라도 논리력을 향상시키고 도전해도 좋다.

명제와 아까 말한 알고리즘 조직도에 따른 수학적 귀납법을 통해서 논리력을 높일 수 있어.

아, 그리고 위의 논리 문제를 쉽게 이해를 하기 위해서 맨 처음 예시인 상우의 말을 true일 때를 먼저 예시로 들었는데,

나는 이 문제를 풀 때 딱 상황이랑 설명 보고 태현 말이 가장 중요한 키워드라는 걸 캐치해서 한 개의 경우의 수일때 바로 맞췄다.

이처럼 명제를 잘 푼다는 기준은,

문제와 예시를 읽고 키포인트를 바로 짚고, 키포인트와 예시들의 상호작용을 바로 캐치할 수 있어야 잘푼다는 것을 의미한다.!

그리고 이렇게 키포인트를 잘 잡으면 코딩을 할 때, 퍼포먼스가 더 좋은 코드를 짤 수 있고

알고리즘 문제를 풀 때 문제 상황과 필요한 요소들을 바로 캐치해서 원하는 알고리즘 순서 조직도 대로 코딩 할 수 있다.


논리력은 수리력이랑 다르다.

게임, 엔진, AI, 컴퓨터 비전, 연구 등등 이 아니면 솔직히 앱, 웹을 개발하다보면 수학을 상대적으로 그~렇게 중요하진 않다.

물론 고오오그으읍 개발자가 되기 위해서는 수학은 필수지만...

(아, 혹시나 하는 소린데 코딩할거면 이산수학은 필수이다. 필수 필수. 자료구조, 알고리즘의 기본이라 ㅎㅎ.. 내가 말한 덜 중요한건 공학수학,,,, 근데 게임 엔진 등등 얘네한텐 짱중요함)


 

론 적성만으로도 취업이 빨리 되는 것은 절대절대 아니고 살아남기도 어렵다.

이쪽 계열이 블루오션인 이유는 매우 간단하다.

컴공, 소공, 전기전자, 정보통신 등 관련 학과는 굉장히 많지만, 

기본적으로 알아야 하는 개념(전산학, 컴퓨터 사이언스)들이 너무 많고 또 어렵기 때문이다. (나도 어려워 흑흑흑흑)

이론만으로도 너무 어려운데 이걸 알고 활용까지 한다? 또 매 분기마다 새로운 개념들이 나오고

내가 잘 쓰던 함수같은 것들이 정책에 따라 버려지기도 하고 

하드웨어 성능 발전에 따라도 달라지고 유행하는 툴, 라이브러리, 코딩 스타일 등등 엄청 빨리 변화된다.

그리고 이걸 적성 뿐만 아니라 관심이 없어 변화됨을 캐치 못하고 공부를 하지 않는다면 연봉이 안오르면 감사.

이 세계에서 도태된다. (흑흑 애증의 하이브리드 앱)

그렇기 때문에 도전하기 전에 가장 기본적인 적성검사를 해봤으면 좋겠다.

그래도 컴퓨터와 개발을 사랑하는 개발자들이 많아졌으면 좋겠다 ㅎㅎㅎㅎㅎ

반응형