Selecting Languages

minsing-jin·2024년 3월 26일
0

About Minsing

목록 보기
1/3

Problem Definition

컴퓨터공학과에 입학한 이유는 흥미로운 주제에 대해 문제를 정의하고, 재미있는 아이디어가 떠오르면 그것을 빠르게 구현하고 싶어서이다. 예를 들어, GPT를 이용해 가상의 여자친구를 만들거나, Second Brain, RPA를 생성하는 LLM으로 로봇을 만들기, ABSA로 여자친구의 감정을 분석하는 기기 등 내가 떠올린 대부분의 아이디어를 실현할 수 있는 도구가 AI라고 생각했다. 그래서 2021년부터 AI 분야에 관심을 가지고 공부하기 시작했다.

공부를 하면서 삶에서 놓치고 있는 지식, 아이디어, 계획, 생각들을 한곳에서 중앙 관리하고 싶다는 욕구가 생겼다. 이를 해결하기 위해 Second Brain을 구현하고 싶었다. 중학생 때부터 대단한 사람을 만나거나 인상 깊은 말을 들어도 잊어버리는 것이 고민이었다. 두근거리는 아이디어가 있고, 아무리 좋은 계획을 세워도 어느 순간 망각하여 방향성을 잃은 적이 한두 번이 아니었다.

방향성을 잃지 않기 위해 학창 시절에는 수첩을 들고 다니며, 현재는 카카오톡으로 옮겨 적으면서 기록했지만, 지식을 하나로 재구성하고 분류하는 데 많은 에너지와 시간이 소모되었다. 정리를 하더라도 완벽하게 정리되지 않았고, 자연스럽게 잘 사용하지 않게 되었다. 군입대를 하고 다양한 것들을 하고 싶었지만, 책을 읽고 정리하다 보니 많은 지식을 놓치고 체계화되지 못했다는 것을 느꼈다.

이러한 문제를 해결하기 위해, 나의 생각을 간소화하고 적은 노력으로 시각화할 수 있는 도구를 고민하고 찾았다. 그중에서도 Notion을 활용해 나의 Second Brain을 만들었다. 하지만 Notion은 내부 기능만을 제공하기 때문에 지식과 계획을 시각화하는 데 필요한 도구가 부족하다는 것을 느꼈다.

결론적으로, 나는 나의 지식을 적은 노력으로 기록하고, 시각화가 자동으로 이루어지며, 필요할 때 프롬프트에 입력하면 필요한 정보를 대시보드에 알기 쉽게 보여주는 프로그램을 만들고 싶다. 이를 위해 주요 도메인으로 AI를 선택하고, Python을 사용하기로 했다. 접근법은 뉴럴링크를 통해 아이언맨의 자비스처럼 인공지능이 학습하여 비서처럼 활용할 수 있는 미래적인 생각에서 현재 상황과 기술에 맞춰 나아가는 방식으로 접근하려고 한다.


About Python

Language author

Python의 저자는 귀도 반 로섬(Guido van Rossum)으로 그는 네덜란드 출신의 프로그래머로, Python 언어의 창시자로 널리 알려져 있다.

When and Why author made the language

Python은 1989년 크리스마스 휴가 동안 귀도 반 로섬에 의해 개발되기 시작했다. 그는 ABC 프로그래밍 언어에서 영감을 받아, 예외 처리가 가능하고, 아마추어 프로그래머도 쉽게 사용할 수 있으며, 무엇보다 읽기 쉽고 이해하기 쉬운 언어를 만들고자 했다. Python은 1991년 2월 0.9.0 버전으로 처음 발표되었으며, 그 목적은 생산성과 가독성을 강조하는 동시에 프로그래머가 짧은 코드로 많은 작업을 할 수 있게 하는 것이었다.

Pros and Cons of the language

장점:

  1. 가독성: Python은 명확하고 간결한 문법을 가지고 있어 코드의 가독성이 높다.
  2. 다양한 라이브러리: Python은 data science, 웹 개발, 자동화 등 다양한 분야에 사용될 수 있는 방대한 표준 라이브러리와 서드파티 라이브러리를 가지고 있다. 이러한 라이브러리는 Python의 pip 패키지 관리자를 사용하여 쉽게 가져와 설치할 수 있고, 패키지는 PyPI(Python package index) 리포지토리에서 다운로드할 수 있다.
  3. 다양한 용도: Python은 웹 개발, 데이터 분석, 인공지능, 과학 계산 등 다양한 분야에서 사용됩니다.
  4. 광범위한 내장 객체 및 라이브러리: Python에는 목록, 집합, 레코드형 사전을 비롯한 수많은 내장 복합 객체가 있다. 이러한 각 객체는 쉽게 처리할 수 있는 메서드 모음을 제공한다. 또한 파이썬에는 수만 개의 함수가 포함된 방대한 라이브러리가 있다. 이러한 패키지는 네트워크 통신, 웹 통합, 데이터 처리 및 하드웨어 상호 작용에 사용할 수 있다. 필요한 많은 루틴이 이미 작성되어 있기 때문에 프로그램을 훨씬 빠르게 작성할 수 있다.
  5. 2024 TIOBE선정 가장 인기 있는 언어: Python의 언어 사용 지분과 인기도가 높아지면서 사용자 커뮤니티와 자료, resource들이 굉장히 많이 있으며, 배우는데에 접근성이 용이하다. 때문에 협업을 할때도 굉장히 쉽게 같이 일할 수 있는 동료를 찾을 수 있다.

단점:

  1. 속도 문제:
  • Python은 인터프리터 언어이고, 실행과 컴파일, 인터프리팅이 동시에 이루어지기 때문에, JAVA나 C++ 보다 컴파일 언어보다 실행 속도가 느릴 수 있다.
  • line이 인터프리터에 의해 한번에 하나씩 실행된다.
  • 동적 타이핑 언어이고, 자료형이 전부 객체라서 실행시 연산량이 많다.
    때문에 대규모 dataset으로 작업하거나 복잡한 계산을 할때 두드러지게 나타날 수 있으므로 성능이 중요한 애플리케이션에는 적합하지 않을 수 있다. 파이썬은 항상 고질적인 속도문제로 제기되어왔고, 이것들을 해결하는 방법으로 파이썬에서 직접 제시한 방법으로 Pypy, Numba, Cython이 있다.
  1. 모바일 개발의 제한: Python은 모바일 애플리케이션 개발에는 메모리를 많이 사용하고, 느리기 때문에 큰 성과를 보지 못했다. 때문에 모바일 앱용 python 개발 도구가 몇가지 있지만 다른 언어 프레임워크에 비해서는 상당히 제한적이다. 클라이언트 데스크톱에서는 상황이 조금 나아지긴 했지만 python은 여전히 프론트엔드 애플리케이션에서 그다지 인기가 없다.

Standard and/or Roadmap of the language

Python은 PEP (Python Enhancement Proposals)라는 과정을 통해 발전해 왔다. PEP는 Python 개선을 위한 설계 문서, 정보 제공 또는 새로운 기능 제안 등을 포함한. Python의 표준화와 발전 방향은 Python 개발자 커뮤니티와 Python 소프트웨어 재단에 의해 결정된다.
파이썬의 향후 발전에서 먼저 귀도 반 로섬과 python 개발 팀원들은 2년전 Microsoft Reactor채널에 나온 인터뷰에서 python 2에서 python 3로 넘어갈 당시 이전 버전에서 3.0으로 넘어갈때 migration하는부분에서 다소 어려운 문제를 겪었기 때문에 python 4에는 회의적인 입장에 있다고 밝혔다.

22년전 인터뷰에서는 thread에 대한 global interpreter loc(GIL) 개선이 고민 되었다고 언급했었고, 이를 해결하기 위해서 multiple sub-interpreter 프로젝트를 진행했다고 밝혔다. 하지만 23년 PEP 703인 "C파이썬에서 GIL을 선택 사항으로 두자" 제안을 승인하는쪽으로 가닥을 잡으면서 GIL을 삭제하여 멀티 스레딩을 가로막는 큰 장애물이 사라지면서 파이썬은 진정한 멀티코어 언어가 되고, 병렬성을 활용하는 워크로드의 성능이 크게 향상되었다. 이는 웹서버, 실시간 데이터 처리, 그래픽 사용자 인터페이스등에서 성능향상을 기대할 수 있으며 python 개발자들은 더욱 복잡한 병렬 프로그래밍 기법을 쉽게 사용할 수 있게 된다.

향후 차세대 파이썬 프로그래밍을 어떻게 형성할지에 대한 Medium의 Mohan의 글에서는 성능향상, 새로운 기능및 구문 개선, 향상된 tool, 더욱 용이해진 커뮤니티 협업을 들었다.
특히 파이썬 성능향상면에서는 Volumetric Optimization으로 메모리 사용량을 최적화하여 메모리 사용 공간을 줄이고, 전반적인 성능을 향상시키는 기능, 병렬 처리에 관해서 multi-threading and multi-core architectures에 더욱 향상된 support를 하여 하드웨어 잠재력을 최대한 활용할 수 있게 한다. 그리고 JIT(Just-In-Time) 컴파일로 python 코드를 동적으로 컴파일 하여 실행속도가 빨라지는 기능을 제안했다. 또한 개선된 tool들은 코드 서식 지정, 디버깅 및 테스트를 위한 새롭고 개선된 도구를 도입하여 개발자가 깔끔하고 유지 관리하기 쉬운 코드를 더 쉽게 작성할 수 있게 된다는 점을 제안했다.
성능향상, 새로운 기능, 개선된 developer experience를 바탕으로 Python 코드를 작성하는데에 혁신을 가져올 것이며 강력한 애플리케이션을 구축할 수 있는 새로운 가능성이 열리는것으로 전망을 보고 있다.

현재 PEP에서는 파이썬의 속도 문제 해결을 위한 다양한 제안들이 활발히 논의되고 있으며, 이는 파이썬의 미래 발전 방향에서 중요한 이슈로 자리잡고 있다. 성능 향상, 새로운 기능 및 개선된 개발자 경험을 바탕으로, 파이썬은 앞으로도 강력한 애플리케이션을 구축할 수 있는 새로운 가능성을 제공할 것이다.

Famous open source softwares using the language

[Pandas]

Pandas는 Python 프로그래밍 언어를 위한 고성능, 쉽게 사용할 수 있는 데이터 구조 및 데이터 분석 도구를 제공하는 오픈 소스 라이브러리이다. Wes McKinney에 의해 2008년에 개발되기 시작해, 금융 데이터 분석을 위해 만들어졌지만, 이후 다양한 분야에서 널리 사용되고 있다.

Pandas의 핵심 기능은 다음과 같다:

  1. 데이터 구조: Pandas는 주로 두 가지 유형의 데이터 구조를 사용한다.
  • Series: 1차원 배열과 유사하며, 단일 데이터 타입의 값을 저장할 수 있다.
  • DataFrame: 2차원 테이블 형태이며, 서로 다른 데이터 타입의 열을 가질 수 있다. 엑셀 스프레드시트나 SQL 테이블과 유사하다고 볼 수 있다.
  1. 데이터 조작 및 처리: Pandas는 데이터를 쉽게 조작하고, 정리하고, 분석할 수 있는 다양한 기능을 제공한다. 이에는 데이터 필터링, 정렬, 그룹화, 결합(merge) 및 결합(join) 등이 포함된다.

  2. 결측치 처리: Pandas는 결측치를 쉽게 찾아서 처리할 수 있는 기능을 제공한다. 이를 통해 데이터를 정제하고 분석 준비를 할 수 있다.

  3. 파일 입출력: Pandas는 CSV, Excel, SQL 데이터베이스, HDF5 형식 등 다양한 파일 형식으로 데이터를 읽고 쓸 수 있는 기능을 제공한다.

5.시계열 데이터 처리: 시간에 따른 데이터 분석을 위해, 시계열 데이터를 쉽게 다룰 수 있는 기능을 제공한다. 이는 주식 시장 데이터 분석과 같은 분야에서 유용하다.

Pandas는 데이터 과학, 금융 분석, 웹 데이터 분석 등 다양한 분야에서 데이터를 효율적으로 처리하고 분석하는 데 필수적인 도구이다. Python과 함께 사용함으로써, 복잡한 데이터 분석 작업을 간편하게 수행할 수 있다.

현재는 강력한 Pandas에 LLM을 결합해 데이터 구조와 분석도구를 자연어를 통해서 처리할 수 있는 pandas AI가 개발되면서 python의 pandas를 활용하여 데이터들의 전처리, 시각화의 접근성이 점점 높아지고 있다. 이애 데이터 애널리스트의 직업군에 데이터 분석가, 데이터 코더가 나눠지는것이 아닌 데이터 분석가 한명이 그때그때마다 자비스처럼 명령을 내려서 필요한 데이터들을 전처리하고, 시각화 하는 시도들을 더욱더 용이하게 할 수 있게 되는 직업적인 변화가 있을것으로 보인다.

pandas AI github: https://github.com/Sinaptik-AI/pandas-ai


어떤 회사에서 사용하나요?

  • 회사의 선정기준은 파이썬을 사용하고, AI를 개발하면서 내가 흥미로울 만한 주제에 대해서 일할 수 있는 회사들로 선정했다.
  • 취업을 하더라도 내가 좋아하는기술을 만들다가 실리콘벨리 회사들의 기술이전을 하거나 인수합병, 혹은 extension으로 달리는 등으로 새로운것들, 재미있는 아이디어들을 나와 비슷한 사람들과 함께 만들고 토론할 수 있는 일을 하고 싶다.

Indeed Python developer/ AI developer 검색 결과

Meta AI Research Scientist - Vision, Language and AI - FAIR 채용공고

Facebook Meta 개발자 채용

link: https://www.indeed.com/viewjob?jk=5656e5565bc39146&tk=1hq2oremlk56s836&from=serp&vjs=3

Tesla bot Python Generalist

link: https://www.tesla.com/careers/search/job/python-generalist-tesla-bot-217557

Indeed의 검색결과들을 통해서 실리콘벨리의 주요 기업들은 AI를 다룰 수 있고, 연구할 수 있는 python 개발자 수요가 존재하는 것을 볼수 있다. 또한 검색결과 외에 내가 추가로 내가 하고 싶은 일, 재밌어 보이는 일들을 할 수 있는 실리콘벨리 기업 또한 Python 개발자의 필요성을 볼 수 있다.


What type of developer do I want to be?

이성원 교수님께서 설명해주셨던것처럼, 그리고 팀플, 창업, RAGchain, 아이디어톤, kaggle, Dacon등의 활동들을 해보며, 명세서를 받고 정해진 개발만 하는것이 아닌 Agile의 가치를 가지고 있는 팀원들과 시너지를 내면서 백지부터 시작해서 생각해본것들을 직접 실현시키고, 사업적으로 검증하는 그 일련의 과정이 내가 하고 싶은 게임이었다는걸 느꼈다.

이러한 경험이 쌓이고 쌓여 내가 이전까지는 못했던 능력들을 할 수 있다는것에 흥미를 느끼고 있다. 그리고 상상을 실현시키는 것이 너무나도 재밌다.

phind, github, slack과 같이 풀고 싶은 문제를 정의하고 소규모에서 시작해서 나중에는 수많은 사람들이 쓰는 대중적인 툴이 되는 스토리는 나의 가슴을 웅장하게 만든다.
나 또한 Nerd들과 함께 농담으로 시작해 문제를 정의하고 해결할 수 있는 번쩍이는 재밌는 아이디어를 구현하고자 한다. 혹은 내가 살면서 생각하는 흥미로운 아이디어를 파이썬이라는 도구를 활용해 빠르게 만들어보고 싶다. 하고 싶은 것들을 기반으로 창업이 꼭 아니더라도 취업을 하더라도 새로운것들을 만들 수 있는, 백지부터 만들 수 있는 자아실현이 가능한 회사를 다니고, 만들기 재밌고, 흥미로운 것들을 만들어보고 싶은 욕구가 있다.

나는 프로그래밍 기술을 활용하여 문제를 해결하고, 사업으로 만들 수 있는 프로그래머가 되고 싶다.

결론

  • 파이썬을 주력언어로 AI 관련 아이디어들을 만들어보고 설계해보면서 점차 시야를 높임과 동시에 파이썬의 한계에 부딪힐때 다른언어를 병행해서 혹은 분야변경을 하고 싶다.

출처:
1. language 순위: https://www.tiobe.com/tiobe-index/
2. 실리콘벨리 채용공고: https://kr.indeed.com/
3. Speed comparison of programming languages: https://github.com/niklas-heer/speed-comparison
4. 귀도반로섬 인터뷰: https://www.linuxadictos.com/ko/guido-van-rossum%EC%9D%80-%ED%8C%8C%EC%9D%B4%EC%8D%AC-4-0%EC%9D%B4-%EB%8F%84%EC%B0%A9%ED%95%98%EC%A7%80-%EC%95%8A%EC%9D%84-%EC%88%98-%EC%9E%88%EB%8B%A4%EA%B3%A0-%EB%A7%90%ED%95%A9%EB%8B%88%EB%8B%A4..html
5.GIL삭제: https://discuss.python.org/t/a-steering-council-notice-about-pep-703-making-the-global-interpreter-lock-optional-in-cpython/30474

profile
why not? 정신으로 맨땅에 헤딩하고 있는 코린이

0개의 댓글