달력

102017  이전 다음

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  •  
  •  
  •  
  •  

'2017/10/26'에 해당되는 글 1건

  1. 2017.10.26 Go 명분 찾기

Go에 관심을 갖은건 2012년 정도로 생각된다. 하지만!! 지금까지 Go 관련 글을 Evernote나 workflowy에 저장만 하고

딱히 Go를 이용해서 뭘 만들어 보지도 않을 뿐더러 문법도 애매하게 안다...


지금까지 행동 없이 관심만 가지고 지내면서 너무나 무뎌진 나의 개발 능력을 체감했고, 날카롭게 만들고 싶었다.

(물론 무뎌짐을 느낀게 처음은 아니지만 이번엔 세게 왔다. 결심은 큰 의미 없으니 어느정도 생각이 잡히면 바로 행동)

우선 내가 날카롭게 만들고 싶은게 무엇인지 적어보면 

다양한 데이터를 손쉽게 수집하기,

수집한 데이터와 사용 용도에 적합한 DB solution을 찾을 줄 알고, 장/단 점 파악 및 설정 값들이 어떤 의미가 있는 정도, 

마지막으로 저장된 데이터를 쉽게 관리 할수있는 시스템 만들기다. 


우선 Go의 장점/단점이 어떤게 있는지 알아보고, 명분을 찾아보자.




Why go is Not Good  http://yager.io/programming/go.html

Generic, Type overloading 이 없다

immutable data type, pattern matching, option이 없다

대부분 multiple return의 두번째 값을 통해 오류처리를 하는데 잊어버리기 쉽다.

embedded programming에는 overhead가 없는 Rust 가 짱짱맨



Why we switched from Python to Go https://getstream.io/blog/switched-python-go/

C++, Java와 비슷한 성능

직관적인 코드로 생산성 괜춘

goroutine과 channel을 이용한 쉬운 동시성 코딩 (1977년에 시작된 CSP를 새로운 접근 방식으로 구현)


부족한 (CRUD API 지원되는) Framework과 패키지 관리 시스템

부족한 Error Handling


Python 과 Go를 비교

코딩 시간은 Python이 조금 더 짧았지만 최적화 하는데 시간이 오래 걸렸다.

Go는 최적화가 필요하지 않을정도로 괜찮은 성능이 나왔다.



Why Go and Rust are not competitors https://dave.cheney.net/2015/07/02/why-go-and-rust-are-not-competitors

Rust는 C/C++ 호출이 overhead 없이 가능, Go엔 cgo라는게 있지만 성능 이슈가 있다.

Rust는 극강의 성능을 지향, Go는 단순함을 유지 하기 위해 성능을 희생

Go는 단순함이나 직교성을 해치는것을 막는것에 초점을 잡았고

Rust는 unsafe하거나 오버헤드, 즉 성능에 영향을 끼치는것을 막는데 초점이 잡았다.

Rust는 성능을 요구하는 C++, D 같은 언어와 경쟁한다. ex) 게임 엔진, 웹 렌더링 엔진

Go는 인터넷 2.0세대 이후 생긴 Ruby, Python, Node.js 그리고 배포에 오랜 시간이 걸리는 JVM 기반 언어와 경쟁한다.



Why Go? https://dave.cheney.net/2017/03/20/why-go

메모리 관리에 대해서 안전하다.

개발 생산시간이 컴파일 시간보다 비싸진건 오래전부터다. Go는 컴파일 시간이 짧고, 코드에 모호성이 없다.

코드를 읽는것이 작성 하는것보다 우선 순위가 높다는 기조로 만들어졌다. 그리고 다양한 분석 도구들이 생기고 있다.

하드웨어의 발전만으로 성능을 이끌어냈던 공짜 점심은 끝났다. 

goroutine, channel를 이용해 동시성을 지원하는 코드를 손쉽게 작성할수 있다.


How to convince Your company to Go with Golang  https://sendgrid.com/blog/convince-company-go-golang/

Go를 좋아하면 새로운걸 배우는걸 좋아하는 사람들이고 이런 사람들은 우리 회사가 원하는 개발자였다. 채용 개이득!! ㅋㅋ


마음에 드는말

기술로 무언가를 할수 있다는것이 가장 좋은 방법은 아니라는 것을 사람들에게 이해시키는데 도움이 되었던 말 

“Perl로도 계속 개발할 수 있다."

“We can keep doing it in Perl,” which usually helped people to understand that just because you can do something with a technology doesn’t mean its the best way to do it.



Ten Reasons Why I Don’t Like Golang  https://www.teamten.com/lawrence/writings/why-i-dont-like-go.html

public, private을 대소문자로 구분하는것, scope이 어디까지인지 알기 어렵다

error handling이 어렵다

“convention over configuration” 기조가 작은 프로젝트에선 괜찮지만 커다란 프로젝트에선 너의 발목을 물것이다!!

사용하지 않는 variable이나 import가 있으면 경고가 아니라 컴파일이 안된다.

ternary 연산자가 없어서 불편하다.

generic이 없어서 interface{}를 사용하고 있다.

db 혹은 web 과의 통신이 잦은 프로그램에서는 추천하지 않는다.



Why rust? https://pingcap.github.io/blog/2017/09/26/whyrust/

SQL 계층은 Go의 장점을 십분 활용해 구현했지만, 성능이 중요한 저장 계층에선 Go가 단점이 되었다.

저장소로 RockDB를 사용하기로 했는데 cgo의 오버헤드 무시 못함 



Why Go? http://www.mikeperham.com/2014/10/08/why-go/

https://github.com/golang/go/wiki/FromXToGo



지금까지 tutorial 수준으로 해왔던 경험과 위 링크를 읽은 후 Go에 대한 나의 생각


문법이나 생태계 측면으로는 정말 생존에 필요한 도구만 챙기고 바로 캠핑을 떠나는 모험가 같다. 

좀 더 편안하고 쉬운 캠핑을 위해 더 챙겨가면 좋은데 가볍고 빠른 행동(?)을 위함이다.

하지만 단체로 캠핑을 갈 경우 함께 가는 사람들이 모두 모험가형이 아니라면 좀 더 많은 것들을 챙겨가야 할것이다. 

(Go가 큰 프로젝트에 사용할때 불편하다는 말에 어느정도 공감한다. 물론 크다는 기준이 굉장히 주관적이지만...)


사용성이나 성능면으로는 어떠한 분야를 특출나게 잘하진 않지만 다양한 분야를 어느정도 잘하는 사람 같다.

[학교 성적/회사 성과]도 상위권이고 친구와의 관계도 그리 나쁘지 않고, 이성에게 인기도 어느정도 있는 그런 사람.


Go를 나쁘게 보면 어중간하다고 할수 있지만 두루두루 잘 한다고 볼 수도 있다.


정말 극강의 성능을 필요로 한다면 C/C++나 Rust로, 외부 데이터와의 연동이 많다면 Java로 하고 

그외에는 Go!!, Python의 라이브러리가 좋은게 있으면 Python을 이용하자

(현재 데이터 분석 및 관리하는건 Python이 최고!!!)


우선 Go부터 시작하고 어느정도 익숙해지면 Python도 익숙해져보자 (제발~~~)




저작자 표시 비영리
신고
Posted by 오산돌구