왜 코드 있을 구독 하셨나요?

 

코드잇을 구독한 이유는 해외 대학교 (UTS) 수업의 속도를 따라감과 동시에 한국과 해외의 코딩 사용 기법의 차이점을 알고 싶어서였다. 그리고 그 생각의 기반이 틀리지는 않았음을 알 수가 있는 좋은 계기가 되었는데, 이왕 코드잇 후기를 적으면 만원 할인해 주는 이벤트가 있었고 (6월 14일 마감됨/ 근데 지금은 6월 15일) 이왕 내가 겪은 것들을 기록을 남기지 않는다면 좀 낭비가 아닐까 하는 마음이 있어서였다. 

 

워낙 태생이 관종인데 이 험난한 사회에 깎이고 깎여 적응해 나아가다 보니 "선택적"관종이 된 것인지라, 이 글을 코드잇 관계자가 만약에 보고 있다면 마음에 상처를 입지 않으셨으면 좋겠다. 성인 남성/여성/기타 등등 이시니까 누군가 당신에게 비판적인 소리를 한다면 "개소리하네"라고 넘기는 마음을 갖고 읽어주시길 바람. 

 

아무튼, 코드 있을 구독한 이유는 서론에서 언급이 잠깐 되어있듯이, 서구권의 프로그래밍 교육과 한국의 프로그래밍 교육은 어떤 차이가 있나 궁금했기 때문이라. 

 

코드잇의 강의의 장점은, 마치 약점공략하는 방법을 알려주는 듯한 느낌이 강했다. 그러니까 이게 무슨 말이냐면, 평상시 나오는 패턴들을 알려주고 언제 막기를 해야 할지 언제 구르기를 해야할지 그리고 그 구르기가 뭔지 빠르게 넘어가는 방식의 교육이라면, 해외 유학의 교육은 그런 거 없고 이론을 알려줄 테니 실용적인 방법은 알아서 네가 인터넷에서 찾아서 써보렴~. 이런 느낌이 강했다.

 

이게, 장단점이 있겠지만은, 대학에서 이론을 배우고 코드잇에서 활용을 활용하는 방식으로 접근했다. 어찌 보면 상황에 적응하고 상황을 적잖이 활용한 편, 

 

 그런데, 이 방법에는 구멍이 하나 있었는데, 아무래도 대학교의 교과과정은 영어(번역 없음)이고 코드잇(한국어)으로 진행되었기 때문에 그 1:1 대응을 찾는데 적잖이 애를 먹었다. 그 해결방법으로 찾은 대체제는, codeacademy.com에서 동시에 진행했다. 

 

아니 잠깐만요,
그러니까 codeit을 하면서
동시에 codeacademy를 하셨다고요?
대체 어떤 개발자로 살아가시려고

 

 물론 프로그래밍이라는 것 자체가 서구권애들이 사용하는 "컴퓨터와 소통하는 방법" 이니까 한국어로 '아무리" 번역을 해도 그 근간이 영어이기 때문에, 프로그래머들은 영어로 소통하니까 그렇게 까지 상관이 없겠다마는... 

 

게임 개발에도 관심이 없는 것은 아닌데, 일단 생존의 문제가 달린 개발의 실력을 빨리 늘려야 한다 라는 관점으로 풀스택의 역량을 키우고... (풀스택 : 구글링 잘함) 

 

내가 생각하는 프로그래밍은, 그러니까 내가 생각하는 코딩이라는 개념은 컴퓨터와 우리(인간)를 연결하는 중간의 과정이라. "프로그래머"라는 말은 곧 컴퓨터와 사람 혹은 컴퓨터와 컴퓨터 사이를 통번역 해주는 사람이라고 생각하고 있다. 물론 이 정의는 내가 정의하는 나만의 정의이기 때문에 앞으로 뭐가 더 추가될지 기대하는 바가 크지만 말이다.

 

 

아니 개인적인 감상 말고 코드잇 강의 평가 해주세요 

 

 아무튼, 강의하시는 분들이 하나같이 조곤조곤 말씀해 주셔서, 나중 가서는 이들과 내적친밀감이 생길 수밖에 없는 구조이긴 했다. 매번 말씀하시는 말투를 보면 너무나도 친절해 원숭이와 같은 프로그래밍 지능을 지닌 내가 이들에게 어찌 안 좋은 평가를 할 수가 있겠는가. 그래도 하라니까 해드림 

 

(강사는 나의 존재를 모르지만, 나는 강사의 존재를 아는 재미도 있긴 함)

항목코드잇 (Codeit) 대학 (University)

언어 한국어 영어
교육 방식 실용적인 패턴과 활용 중심의 교육 이론 중심의 교육
강의 스타일 친절하고 조곤조곤한 설명 교수에 따라 다르지만, 주로 이론 강의
학습 자료 한국어로 제공되는 강의와 자료 영어로 제공되는 강의와 자료
실습 실용적인 예제와 문제 해결 중심 이론을 바탕으로 한 실습 과제
내적 친밀감 강사와의 내적 친밀감 형성 가능 교수와의 친밀감은 개인에 따라 다름
보완 학습 Codeacademy와 같은 추가 학습 플랫폼 활용 가능 추가 학습은 학생의 자율에 맡김
장점 실용적인 문제 해결 능력 향상, 친절한 강의 깊이 있는 이론 학습, 다양한 학문적 접근
단점 이론적 깊이가 부족할 수 있음 실용적인 문제 해결 능력 부족 가능
목표 빠른 실무 능력 향상, 실용적인 코딩 기술 습득 이론적 기초 확립, 학문적 깊이 있는 이해
평가 방식 실습 과제와 프로젝트 중심의 평가 시험, 과제, 프로젝트 등 다양한 평가 방식
비용 구독료 (상대적으로 저렴) 학비 (상대적으로 고가)
커뮤니티 온라인 커뮤니티와 포럼 대학 내 동아리, 스터디 그룹, 네트워킹 기회

 

고마워 GPT 야! 

 

??? 아니 이게 무슨 후기야 

내 블로그니까 내 마음대로 쓸 거다

 

 

 

 

 

경험치 달달 함

자바는 Python 과 달리 그렇게 친절한 코드는 아닙니다. 물론, 이 친절함의 비중은 입장에 따라 달라지겠지만. Python 이 사용자에게 친절한 것이라면 Java 나 C# 계열의 언어들은 컴퓨터에게 친절한 언어가 되겠습니다. 말이 컴퓨터지, 사실상 코드를 배우다 보면 혼자서 알아서 할 줄 아는게 없는 친구니까요.

 

오늘은 Java의 상속과 Override 를 내 스스로에게 설명해보는 과정입니다 


 

Java Inheritance (Subclass and Superclass)

W3Schools offers free online tutorials, references and exercises in all the major languages of the web. Covering popular subjects like HTML, CSS, JavaScript, Python, SQL, Java, and many, many more.

www.w3schools.com

우리의 소중한 친구, W3에서 코드를 가져와서 봅시다. 

class Vehicle {
  protected String brand = "Ford";        // Vehicle attribute
  public void honk() {                    // Vehicle method
    System.out.println("Tuut, tuut!");
  }
}

class Car extends Vehicle {
  private String modelName = "Mustang";    // Car attribute
  public static void main(String[] args) {

    // Create a myCar object
    Car myCar = new Car();

    // Call the honk() method (from the Vehicle class) on the myCar object
    myCar.honk();

    // Display the value of the brand attribute (from the Vehicle class) and the value of the modelName from the Car class
    System.out.println(myCar.brand + " " + myCar.modelName);
  }
}

이 코드은 Vehicle 이라는 차량(탈 것) 이라는 것에서, Car(자동차)을 주고있습니다. 

 

논리적으로 생각을 해보면,

자동차도 탈 것의 하나니까.

그 넓은 개념을 상속받는 것에 문제는 없어보입니다. 

 

비슷한 예시를 들어봅시다

 

Phone 은 SmartPhone 을 

 

Printer 는 3DPrinter 을

 

이렇게 다음세대를 가져올 수도 있고 

 

Animal 은 Dog를 가져올 수도 있을 것입니다

 

대충 감이 잡히시나요? 

 

이 Inherit 이라는 단어가 의미하는 것처럼

(컴퓨터쪽에서는 상속이라고 번역함 - 유전이라는 뜻도 있음)

 

본래의 코드가 의미하는 성질을 다음세대에 재활용 할 수 있게 해주는 마법같은 녀석입니다. 

그렇다면 코드의 재활용과 유지보수가 어렵지 않겠죠?

이 녀석의 포괄적인 개념은 여기까지하고, 이제 활용에 들어가는 것을 공부해 봅시다.


Animal(동물) 이라는 코드를 Dog(개)가 상속하고 있습니다

class Animal {
    void makeSound() {
        System.out.println("Some generic animal sound");
    }
}

class Dog extends Animal {
    @Override
    void makeSound() {
        System.out.println("Woof! Woof!");
    }

    void wagTail() {
        System.out.println("Dog is wagging its tail.");
    }
}

public class Main {
    public static void main(String[] args) {
        Animal genericAnimal = new Animal();
        Dog myDog = new Dog();

        // Calling the makeSound method of the Animal class
        genericAnimal.makeSound();

        // Calling the overridden makeSound method of the Dog class
        myDog.makeSound();

        // Calling the wagTail method specific to the Dog class
        myDog.wagTail();
    }
}

 

어? 보니까 이상한 녀석이 있네요. 듣도 보지도 못한 @Override 라는 녀석이 있습니다. 

이 친구는 어떤 친구일까요? 

직역을 하면, 덮어 씌우다. 라는 말을 지니고 있습니다. 

즉, 본래 Animal 안에 있는 메소드를 자식 클래스에서 다르게 쓰였을때. 

 

컴퓨터에게 "이 코드는 다시, 다르게  쓰인 녀석이야" 알려주는 표식입니다. 

이 Override는 Super()와 함꼐 자주 쓰이니까 기억해두세요! 

Super()는 다음 포스팅에서 공부해보겠습니다.

 

 

거꾸로 읽어도, 제대로 읽어도, 같은 값을 보여주는 값들을 팰린드롬이라고 부릅니다. 

 

간단한 코드를 통해 Palindrome 이 아닌지 맞는지 확인해보는걸 만들 수가 있습니다

 

방법 1. 

def is_palindrome(word):
    # 여기에 코드를 작성하세요
    reversed_word = word[::-1]  # 단어를 뒤집음
    if word == reversed_word:
        return True
    else:
        return False


# 테스트 코드
print(is_palindrome("racecar"))
print(is_palindrome("stars"))
print(is_palindrome("토마토"))
print(is_palindrome("kayak"))
print(is_palindrome("hello"))

 

방법 2(코드 잇 풀이) 

def is_palindrome(word):
    for left in range(len(word) // 2):
        # 한 쌍이라도 일치하지 않으면 바로 False를 리턴하고 함수를 끝냄
        right = len(word) - left - 1
        if word[left] != word[right]:
            return False

    # for문에서 나왔다면 모든 쌍이 일치
    return True


# 테스트 코드
print(is_palindrome("racecar"))
print(is_palindrome("stars"))
print(is_palindrome("토마토"))
print(is_palindrome("kayak"))
print(is_palindrome("hello"))

 

코드에는 정답이 없습니다. 각자만의 풀이 방법이 있을 뿐이에요.

어떤 방법이던 본인의 정답을 사랑해주시길 

Luhn Algorithm (youtube.com)

 

일단 나보다 설명을 잘하는 인도아저씨가 나타나 설명을 해주고 있어요

요약


1. Starting from the rightmost digit (the check digit), double the value of every second digit.
2. If doubling a digit results in a number greater than 9, subtract 9 from the product.
3. Sum up all the digits.If the total sum is divisible evenly by 10, then the number is valid according to the Luhn algorithm.


파이썬 코드

 

def verify_card_number(card_number):
    sum_of_odd_digits = 0
    card_number_reversed = card_number[::-1]
    odd_digits = card_number_reversed[::2]

    for digit in odd_digits:
        sum_of_odd_digits += int(digit)

    sum_of_even_digits = 0
    even_digits = card_number_reversed[1::2]
    for digit in even_digits:
        number = int(digit) * 2
        if number >= 10:
            number = (number // 10) + (number % 10)
        sum_of_even_digits += number
    total = sum_of_odd_digits + sum_of_even_digit
    return total % 10 == 0

def main():
    card_number = '4111-1111-4555-1141'
    card_translation = str.maketrans({'-': '', ' ': ''})
    translated_card_number = card_number.translate(card_translation)

    if verify_card_number(translated_card_number):
        print('VALID!')
    else:
        print('INVALID!')

main()

 

리스트와 딕셔너리의 활용으로 만들어진 알고리즘 풀이

 

 

감상평: 

 

프로그래밍은 수학을 잘하냐 잘 못하느냐가 아니라 문제를 보고 어떻게 식을 만들고 활용하는 영역인거 같음.

 

 

+ Recent posts