개발자 커리어 플랫폼 프로그래머스 운영사 그렙이 국내 개발자들의 기술 트렌드와 커리어 고민을 엿볼 수 있는 ‘2022 프로그래머스 개발자 설문조사 리포트’를 공개했다고 밝혔다.
프로그래머스 홈페이지에 공개된 리포트는 프로그래머스를 이용하는 개발자 5,362명을 대상으로 2021년 12월 3일부터 31일간 실시된 온라인 설문조사 결과를 바탕으로 발행됐다. 개발자 설문조사 리포트는 우리나라 개발자들의 생각을 공유하는 목적으로 매년 상반기에 발행한다. 이번 리포트에는 근무 지역·형태, 평균 연소득, 자주 사용하는 툴, 배우고 싶은 프로그래밍 언어, 이직과 구직 시 중요한 점, 채용 정보와 개발 트렌드를 얻는 곳 등 총 35문항을 수록했다.
ⓒ 그렙 해당 자료에 따르면, 응답한 개발자 49.5%는 회사로 출근한다고 응답했다. 재택근무와 출근을 병행하는 개발자는 38.3%, 재택근무만 하는 개발자가 12.2%로 총 응답자 중 87.8%의 개발자는 회사로 출근한 것으로 나타났다. 가장 많은 개발자가 근무하는 지역은 서울시 강남구(25.3%)로 나타났으며, 네이버, 엔씨소프트 등 IT 기업이 다수 포진돼 있는 경기도 성남시(14.5%)가 2위, 강남구 옆에 위치한 서초구(6%)가 3위를 기록했다.
연소득 관련 질문에서는 설문에 참여한 개발자의 43.5% 만이 4,000만 원 이상을 받는다고 답했다. 개발자 영입 전쟁이 치열해지면서 처우개선과 사이닝 보너스, 스톡 옵션 제공이 연일 화제가 되고 있으나 모든 개발자가 고액의 연봉을 받지는 않는 것으로 나타났다.
한편, 개발자들이 회사를 선택할 때 가장 중요하게 여기는 것은 연소득/인센티브/스톡옵션 등의 금전적 보상(60.3%)이었으며, 다음으로 동료(55.1%)와 개발 스택/환경(47.7%)을 고려한다고 답했다. 개발자들이 선택한 회사를 선택하는 기준 톱3는 매년 변하지 않는 순위를 유지하고 있다.
개발자들이 가장 자주 사용하는 에디터(최대 2개 선택)는 비주얼 스튜디오 코드(56.3%), 인텔리J(29.6%), 이클립스(17.7%) 순이었다. 비주얼 스튜디오 코드는 2020년 46.5%와 비교해 10% 가까이 사용량이 증가했다. 또한 새롭게 배우고 싶거나 배울 필요성을 느끼는 언어는 코틀린(15.5%), 고(15.3%), 타입스크립트(12.5%) 순이었다. 2020년 1위를 차지한 파이썬의 경우 4위로 하락했는데, 이미 많은 개발자들이 Python에 익숙해졌기 때문인 것으로 분석했다.
또한 매일 밤샘 근무를 하는 개발자 이미지와 달리 34.7% 개발자는 야근을 하지 않는 것으로 나타났다. 매일 또는 거의 매일 높은 강도로 야근하는 개발자는 13%로 응답자 중 가장 적은 비중을 차지했다.
그렙 이확영 대표는 “해외에도 다양한 개발자 설문조사 리포트가 발행되지만 국내와 근무환경이 다르기 때문에 우리 주변의 개발자들의 생각을 보여주지는 못하는 아쉬움이 있었다”면서 “프로그래머스는 설문조사 리포트를 통해 많은 개발자들이 궁금증을 해소하고 공감대를 얻기를 바라는 마음으로 매년 상반기 설문조사 리포트를 발행하고 있다”라고 말했다.
커리어테크 플랫폼 사람인이 1000대 기업 연봉정보 빅데이터 분석한 결과를공개했다. 평균연봉이 가장 높은 산업은 ▲은행·금융업(9084만원), 다음은 ▲IT·웹·통신(7587만원)으로 20%나 차이가 났다. 이외에는 ▲미디어·디자인(7411만원), ▲건설업(6832만원), ▲제조·화학(6802만원), ▲판매·유통(5986만원), ▲의료·제약·복지(5546만원) 등의 순이었다.
ⓒ 사람인 그러나 대졸초임을 살펴보면, IT 기업이 상당히 따라잡고 있는 양상이 보였다. 1000대 기업 대졸초임은 ▲은행·금융업이 4660만원, ▲IT·웹·통신이 4112만원으로 13% 차이였다. 양 산업 간 평균연봉보다 격차가 7%p 적었다. 다음은 ▲제조·화학(3926만원), ▲미디어·디자인(3884만원), ▲건설업(3879만원), ▲판매·유통(3576만원), ▲의료·제약·복지(3460만원) 등의 순으로 평균연봉 순위와 다소 차이가 있었다.
사람인 커뮤니케이션팀 임민욱 팀장은 “최근 IT기업이 경쟁적으로 신입 연봉을 인상하면서, 이같이 평균연봉보다 대졸초임의 격차가 적게 나타난 것으로 분석된다.”고 설명했다.
기업 규모별로도 평균연봉 차이가 컸다. 대기업의 경우 ▲은행·금융업(7969만원)이 압도적으로 1위를 기록했다. 다음은 ▲제조·화학(6642만원)으로, 두 산업간 격차는 20%에 달했다. 다음으로는 ▲IT·웹·통신(6588만원), ▲건설업(6569만원), ▲판매·유통(5810만원), ▲미디어·디자인(5806만원) 등의 순이었다.
중소기업 역시 ▲은행·금융업(4601만원)이 가장 연봉이 높았지만, 다음은 ▲IT·웹·통신(4395만원)으로 두 산업간 근소한 차이를 보였다. 이어 ▲제조·화학(4322만원), ▲기관·협회(4276만원), ▲의료·제약·복지(4247만원), ▲판매·유통(4148만원) 등의 순으로 대기업 연봉 순위와 달랐다.
대기업, 중소기업 간 연봉 격차가 가장 큰 산업은 ▲은행·금융업으로, 중소기업이 대기업보다 3368만원 적었다. 다음은 ▲건설업(2581만원), ▲제조·화학(2320만원), ▲IT·웹·통신(2193만원), ▲미디어·디자인(1774만원) 등의 순으로 나타났다.
사람인 연봉정보는 기업형태, 산업(업종)별 평균연봉과 1000대 기업 및 공사∙공기업의 대졸초임 정보를 제공하고 있다. 아울러 각 기업별로 직급별, 연령별 연봉통계도 확인 가능하며, 개인의 정보 기반으로 연봉 통계 데이터를 분석한 ‘맞춤 연봉정보’도 볼 수 있는 등 다각도의 연봉정보를 편리하게 접할 수 있다.
한국소프트웨어산업협회(KOSA)는 21일 서울 포스코센터에서 하반기 소프트웨어(SW) 사업대가 세미나를 개최하고, 2022년 SW기술자 임금실태조사결과를 공개했다.
ⓒ 한국소프트웨어산업협회 KOSA는 올해 조사직무를 17개로 통합·개편해 조사 용이성을 개선했으며, 표본수집이 어려운 ▲IT PMO ▲IT감사 ▲IT교육강사는 조사대상에서 제외했다. 또한 모집단을 기존 SW 사업자신고 기업에서 SW사업을 영위하는 기업으로 확대해 소규모 비활성 기업에 대한 정비 및 개선을 추진했다.
KOSA는 개선사항을 반영해 올해 8월부터 약 두 달간 2022년 SW기술자 임금실태조사를 진행했고, 그 결과 SW기술자 일 평균임금은 전년대비 6.9% 증가한 35만1,443원이다.
이번 조사는 SW사업을 영위하는 1,092개 기업에서 근무하는 41,062명의 SW기술자의 임금 현황을 조사한 결과다. 평균임금은 SW기업이 직원에게 제공하는 경비로서 급여성 항목인 기본급, 제수당, 상여금, 퇴직급여충당금 외에도 비급여성 항목인 법인부담금(4대보험)이 포함됐다.
KOSA 조준희 회장은 “올해 조사 결과는 협회가 추진한 개선 활동과 더불어, 비대면·플랫폼 서비스, 게임업 강세 등의 영향이 반영된 것이며, SW기술자 확보를 위한 기업들의 노력이 전반적인 임금 상승에 영향을 미친 것으로 파악된다”며, “앞으로도 국가승인통계 운영기관으로서 통계품질 제고를 위해 연구와 산업계 의견을 수렴하며 지속적으로 노력하겠다”고 밝혔다.
ⓒ 한국소프트웨어산업협회
KOSA는 이번 세미나에서 SW기술자 평균임금을 공표하고 올해 추진한 사업대가 개선 연구의 결과를 소개했다. 정보통신산업진흥원에서는 SW 공정경쟁 시장환경 조성에 대한 계획을 발표했다.
한국에서는 개발자의 처우가 낮다는 비판이 많다. 특히 미국과 비교하며 인재 양성을 위해서라도 개발자의 임금을 높여야 한다고 목소리가 항상 들리고 있다. 그런데 문제는 적절한 개발자 연봉에 대한 기대가 사람마다 다르다는 것이다. 개발자 유무와 상관없이 어떤 사람은 개발자는 기업의 핵심 인재이자 고연봉자라고 생각하기도 하고, 어떤 사람은 낮은 임금을 받으며 야근에 시달리는 직원이라고 보기도 한다. 그렇다면 연봉 기준 실제로 한국 개발자의 수준은 어디까지 와있을까? 마침 2022년 국내외 개발자의 연봉을 확인할 수 있는 다양한 통계가 나왔다.
ⓒ ITWorld *한국 수치는 사람인, 미국 수치는 하이어드(15만 6천만달러) 기준으로 표기 국내의 경우 연봉 수치를 가장 많이 볼 수 있는 곳은 구직 플랫폼이다. 구직 플랫폼 업체들은 직접 사용자가 직접 입력한 데이터를 활용하거나, 국민연금 납부액을 역산하여 계산하거나, 공시자료를 기반으로 연봉을 추산한다. 먼저사람인은 2022년 기준 IT 전체 산업(IT·웹·통신) 종사자의 평균 연봉은 7,587만 원이라고 밝혔다. 같은 통계에서 가장 높은 연봉을 받는 분야는 금융업이었고, 그 뒤를 IT업계가 바짝 따라잡고 있다고 설명했다. 그와 달리크레딧잡 데이터를 보면, IT 및 과학 기술 분야의 연봉 평균은 약 3,700만 원으로 나타났다.
잡플래닛은 IT 업종 종사자 중개발자 직군의 연봉 정보만 따로 공개했다. 여기서는 1년 차 입사자 평균 연봉은 3,411만 원, 10년 차 입사자는 5,830만 원이라고 소개됐다. 잡플래닛은 “IT 업종은 같은 연차라도 연봉 차이가 크다. 기업 및 세부 직무별로 연봉이 천차만별인 게 특징”라고 강조했다. 해당 자료에서 말하는 개발자란 모바일 앱 개발, 웹 개발, 소프트웨어 엔지니어, 소프트웨어 아키텍트, 하드웨어 엔지니어, 시스템 엔지니어, 네트워크 보안운영자, QA, 데이터 분석가 등을 포함했는데, 그중에서 ‘소프트웨어 아키텍트'의 평균 연봉이 가장 높은 것으로 나왔다.
한국소프트웨어산업협회(KOSA)는 SW 기술자에 대해 집중적으로 평균 임금을 추적하고 있다. KOSA는 실제 업계 현황 데이터를 받아 자료를 만든다.
KOSA에 따르면, 2022년 SW 기술자 일 평균 임금은 351,443원으로 전년 대비 6.9% 증가했다. 사실 이 데이터는 자세히 살펴봐야 한다. 얼핏보면 일 임금이니 업무일 20일을 더 곱해 월급이 약 723만원이라고 생각할 수 있으나, 이는 잘못된 해석이다. 여기서 말하는 일 평균 임금에는 한사람에 대한 기본급, 상여금 외에 법인 부담금도 포함됐다. 그런 의미로서 KOSA의 데이터는 특정 기업이 정부와 사업 계약을 할 때, 소프트웨어 인력 및 전체 진행비를 계산할 때 참고하는 자료다. 물론 KOSA의 자료가 실제 개발자 연봉 평균 데이터와 완전히 동떨어졌다고 표현할 수는 없지만 실제 평균 임금보다 더 높을 가능성이 높다.
다만 KOSA의 자료는 SW 기술자의 임금 평균을 세부적으로 나눴는데, 여기에는 IT 기획자, 디자이너, 컨설턴트부터 데이터 분석가, 개발자, 응용SW 개발자 등이 모두 포함한다. 이런 수치로 직군별 대우 차이를 확인할 수 있는데, 가장 높은 임금을 받는 직군은 ‘IT 아키텍트’였다.
신입 개발자 또는 작은 기업 소속된 개발자의 연봉을 가늠할 수 있는 통계도 하나 있다. 개발자 평가·채용·교육 플랫폼 업체 그렙은 매년 설문조사를 통해 인기 프로그래밍 언어와 처우를 공개하고 있다. 특히2022년 설문조사 결과에 따르면 56.5%의 응답자가 연 4,000만원에 미치지 못하는 임금을 받았다. 응답자 50%가 3년 차 미만 개발자이고 20대였다는 점에서 신입 개발자의 대우를 확인할 수 있는 자료라고 볼 수 있다.
이번에는 개발자의 천국, 미국의 데이터를 분석해보자. 미국의 IT 직종 연봉 정보는 한국보다 세부적인 수치를 확인할 수 있다. 미 컨설팅 업체 잰코 어소시에이츠(Janco Associates)가 펴낸‘IT 임금 조사’에 따르면, 2021년 기준 대기업 기술 인력의 평균 연봉은 약 10만 달러, 중소기업은 약 9만 5,681달러였다. IT 경영진의 평균 연봉은 18만 달러였다. 해당 자료에는 경기 침체로 대기업 종사자의 연봉은 상승세가 주춤하고 있으나, 중소기업의 연봉은 대기업보다 빠르게 상승하고 있다고 지적했다. 대기업과 중소기업의 임금 격차가 큰 한국에서 주목할 만한 데이터다.
구직 플랫폼 업체 하이어드 역시 미국 내 소프트웨어 엔지니어의 평균 급여는 지속적으로 증가하는 추세이며, 2021년 기준 평균 연봉은 15만 6,000달러라고밝혔다. 여기서 흥미로운 것은 원격 근무 형태가 연봉에 영향을 주고 있다는 점이다. 같은하이어드 보고서에서 원격근무를 하는 소프트웨어 엔지니어 평균 연봉은 15만 7,000달러로 사무실 근무 직원보다 1,000달러 더 높았다. 하이어드는 2022년 말 펴낸또 다른 보고서에서 “IT 기업에 종사하는 재택 근무자는 사무실 출근 직원보다 평균 3,000달러 더 높은 연봉을 받고 있다”고 밝혔다.
핀테크 스타트업 카르타(Carta)는 재택근무 트렌드가 지역별 임금의 상향 평준화를 이끌고 있다는자료를 공개했다. 과거 개발자는 실리콘벨리 지역에 가야만 최고 몸값을 받을 수 있었지만, 이제 타 지역에서도 재택근무 형식으로 일하면서 실리콘벨리 만큼 높은 임금을 받을 수 있다는 것이다. 카르타는 동시에 스타트업 근무자의 연봉도 높아지고 있다는 점에 주목했다. 카르타에 따르면, 스타트업에 다니는 엔지니어의 연봉 중앙값은 15만 달러였다. IT 직무뿐만 아니라 재무, 법무, 전략 기획 업무 직원도 미국 스타트업 업계에서는 높은 임금을 받고 있었다.
요약하자면, 한국 개발자의 평균 연봉은 7,000만원대, 신입의 경우 3,000~4,000만원 수준이다. 미국 개발자 연봉은 평균 15만 달러가 넘으나, 지역이나 회사 규모에 따라 연봉 차별을 크게 받지 않는다는 특징이 있다. 혹시 이런 수치를 보고 IT 업계에 진출하거나 직군을 바꾸고 싶은 사람도 있을 것이다. 하지만 높은 연봉에 너무 혹하지 말자. 아무리 개발자 수요가 많다 한들 소위 말하는 대퇴직 시대 아닌가. 연봉이 높은 것으로 유명한 글로벌 IT기업에서도 퇴사자가 우후죽순으로 나오고 있는 것도 사실이다. 그런 면에서 IT 직무의 빛과 그늘을 조명한 기사는 미래를 현실감 있게 준비하는 데 도움이 될 것이다.
### 데이터 과학자를 위한 6가지 Python 팁
### Top 6 Python Tips for Data Scientists
### https://towardsdatascience.com/top-6-python-tips-for-data-scientists-4f4a25e44d15
codeString = '''a,b = 4,5; print(f"a = {a} and b = {b}"); print(f"a+b = {a+b}")'''
exec(codeString)
print("\n\n\n")
import os
import sys
#작업하는 경로(위치)가 어디인지 확인
print(os.getcwd())
exec(open("./Project/Datascientist/myFullFileName.py").read())
print("\n\n\n")
### 각각 현재 작업 디렉토리 또는 사용자 지정 디렉토리의 모든 파일을 나열합니다.
print( os.listdir() )
"""_summary_
"""
print("\n\n\n")
### 4. Code timer as a decorator
import time
import requests
def timerWrapper(func):
"""Code the timer"""
def timer(*args, **kwargs):
"""Start timer"""
start = time.perf_counter()
output = func(*args, **kwargs)
timeElapsed = time.perf_counter() - start
print(f"Current function: {func.__name__}\n Run Time: {timeElapsed}")
return output
return timer
## Func to make a request to an user-defined url
@timerWrapper
def getArtile(url):
return requests.get(url, allow_redirects=True)
## Monitor the runTime
if __name__ == "__main__":
getArtile('https://towardsdatascience.com/6-sql-tricks-every-data-scientist-should-know-f84be499aea5')
print("\n\n\n")
## 이제 다른 함수의 시간을 측정 @timeWrapper하려면 함수 앞에 the를 놓는 것뿐입니다.
@timerWrapper
def getMultiplication(num):
for val in range(num):
print(10**(10**val))
getMultiplication(3)
Scenario: You inherited a Python project from a colleague, and immediately noticed that those scripts all have a whopping 5000+ lines of code. The same chunks (of code) got copied and pasted multiple times! So, is there a more efficient option to go about code reusability?
Let’s explore theexec()function in Python. Simply put, it takes in a string or object code, and execute it as shown in this example,
a = 4 and b = 5
a+b = 9
Even more handy? We can useexec(open().read())to call and execute a file within the Python interpreter. For example,
With this powerful one-liner, data scientists can save programs that will be reused as standalone files, and execute them whenever needed within the main program. No code copying and pasting any more!
Being a cool functionality in Python,exec()has one pitfall to avoid — it does NOT return any value,
a = 4 and b = 5
a+b = 9
** Is the return from exec() is None? True **
As we can see, the output of theexec()function isNone; hence, it cannot be used to store any values, which is equivalent to thesounce()function in R.
2. Operating system commands with {os} and {shutil}
Scenario: continue from our previous tip, now you want to check out the script before executing it. Don’t bother to double-click your mouse all the way through to open up the file? No problem, you can easily achieve this in Python directly without interrupting your train of thought.
Here, theos.startfile()function allows users to open up any type of files, including MS documents, Excels, R and SQL scripts.
Similarly, we can also delete a FILE usingos.remove(“myFullFileName.ANYFORMAT”)
or delete the entire DIRECTORY usingshutil.rmtree(“folderToBeRemoved”). where {shutil} is a Python module that offers a number of high-level file operations, particularly for file copying and removal.
Therefore, if you haven’t used {os} other thanos.getcwd()oros.chdir()or if the {shutil} sounds unfamiliar, it’s time to check out their documents. You will definitely find useful commands or file system methods that make your coding easier. Here lists a few of my favorites,
os.listdir()oros.listdir(“someDirectory”)— list all files in the currently working directory or any user-specified directory, respectively;
os.path.join()— automatically create a path with elements in the arguments for later use, e.g.,os.path.join(‘D’, ‘Medium’, ‘New Folder’)will return
‘D\\Medium\\New Folder’
os.makedirs()— create a directory;
shutil.copy2(“sourcePath”, “destinationPath”)orshutil.move(“sourcePath”, “destinationPath”)— copy or cut a file respectively.
3. One-liner: Nested list comprehension to get rid of the for loops
Scenario: this “simple” task we come across is to combine several lists into one big long list,
Surely, we can write five nestedforloops to append each sublist to the final output list. But it’s smarter to turn to nested list comprehension for the most concise way,
Scenario: while Python is recognized as one of the most effective programming languages, data scientists still need to check the runtime of our programs.
It’s not the hardest thing if we just implement a bare-bones Python timer for each function we want to monitor. However, if we code it as a decorator, we would make our timer much easier to be version-controlled and reused!
Here is how,
In this snippet,
the timer is wrapped in atimerWrapperfunction, which then is used as a decorator called prior to the main function;
The example main function is to return a request connecting to an URL, which isone of my previous blogs.
Running this code gives us the time elapsed,
Current function: getArtile
Run Time: 1.6542516000008618Out[101]: <Response [200]>
Now, to time another function, all we need is to put the@timeWrapperin front of the function,
getMultiplication(3)
10
10000000000
10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
Current function: getMultiplication
Run Time: 0.00014700000065204222
5. Leverage theoptionssystem to customize your display
Scenario: as data scientists, we analyze data with {pandas} and {numpy} on a daily basis. When I first learned coding in Python, I was frustrated seeing this after reading my data into the IDE,
Clearly, data display is cut off both row-wise and column-wise, and the following code can fix it,
Here, we are explicitly setting the maximum columns, rows and column width to display/print in the console. There are numerous customizableoptions and settingsin {pandas}, and similar operations are also available in{numpy}for arrays and matrix,
6. Reproduce your machine learning model results? Set seeds!
Scenario: Due to the stochastic nature of machine learning modeling process, we have all encountered the non-deterministic aspect of machine learning. This randomness results in our difficulty reproducing the same results across different runs. Consequently, it’s challenging to figure out whether an improvement in performance metrics is a result of successful model tuning or simply a different random training/testing sample.
Luckily the reproducibility can be achieved bysetting the random seedthroughout your model pipeline, provided that you do it correctly! How many times have you seen questions like “Getting a different result despite random seed defined” popping up on Stack Overflow? Well, how to appropriately set seeds should be in the first page of documentations, but it took me some time to dig it out.
I found that NOT every seed is defined the same in {numpy}, {sklearn}, {tensorflow} or {torch}. Thus, it’s a best practice to use a definitive function that sets all SEEDS for all your frameworks. For example,
Adding this tacticalreset_random_seed()function to all necessary steps of your workflow, such as train-test split, model compile/training, and interpretation, will get you half way to full reproducibility. More detailed visibility into your experiments will finish the second half!