잡담코딩개념

SW 개발자가 되기 위해서 어떤 언어부터 시작 할까요?

최근에 SW 개발자가 되고 싶은데 어떤 언어부터 공부를 시작하면 될지 묻는 질문을 많이 봅니다.

어떤 언어부터 시작해야 할까요

결론부터 말씀드리면 아무거나 본인의 환경에서 편한거 하면 됩니다.

핸드폰 있으면 Android Studio 설치하고 Java나 코틀린부터 시작하셔도 되고 코딩 테스트등을 준비하거나 올림피아드를 나가는게 목적이면 Visual Studio를 설치해서 C부터 시작하셔도 됩니다.

컴퓨팅 환경이 익숙하지 않는 초등학생이면 스크래치를 해도 충분합니다.

어떤 언어부터 할지 고민할 시간에 먼저 행동하는것을 추천합니다.

첫걸음이 반이다.

프로그래밍할때 많이 겪는 일이긴 한데 요구사항을 정의하는 쪽에서는 이걸 하는게 좋을까 저걸 하는게 좋을까 고민하는 경우가 많습니다.

정답은 둘 다 하는것입니다. 고민할 시간에…

프로그래밍 언어의 로직은 대부분 비슷합니다.

사실 하나의 언어로 프로그래밍 로직을 이해하고 나면 어떤 언어를 가져와도 Syntax만 살펴보고 나면 적응하는데 큰 어려움은 없습니다.

오히려 알아야 하는 것은 프로그래밍 언어들간의 특징들입니다.

이런 특징들을 알아볼 수 있는 실력은 코딩외에도 더 넓은 컴퓨터 공학과 소프트웨어 공학에 대한 전반적인 지식에 대한 학습이 필요합니다.

프로그래머들의 언어 슈도코드, UML, 디자인 패턴

이상적으로는 슈도코드와 UML로 주고 받는게 맞습니다.

하지만 현실에서는 슈도코드와 UML로 주고 받은 적은 거의 없는것 같습니다.

그렇지만 알고는 있어야 합니다.

UML( United Modeling Language )도 OOP Base의 개발에서 사용되는 엄연한 언어입니다.

전 혼자 개발하는 프로젝트도 유지보수를 위해서 UML을 위용해서 필요한 Diagram들을 그려놓습니다.

안 그러면 까먹어서입니다.

그리고 OOP를 한다면 디자인 패턴도 꼭 알아야 합니다.

이 부분은 다른 글에서 뵙겠습니다.

“Hello world!” 프린트 이후

대부분 SW 개발을 시작하는 분들이 Hello world! 를 프린트하여 첫 성공을 맛보게됩니다.

그리고 더 나아가 여러 예제들을 풀어보는 과정을 거칩니다.

하지만 얼마지 않아 이제 뭘해야 할지 막막함이 밀려오는 시기를 맞이하게 됩니다.

그 이유는 로직과 Syntax만 가지고 바로 삼촌이 음식점 배달앱을 만들어 달라고 한다고 바로 만들 수 없기 때문입니다.

거기에는 요구사항에 따른 각 구성요소들에 대한 이해가 필요하기 때문입니다.

더 나아가 단순 기능 요구사항외에 성능이나 안정성등 비기능적 요구사항들까지 포함될 경우 알아야 하는 부분이 더 많아집니다.

간혹 SW 개발자 역량이 타고 난것으로 이야기들 하지만 엄연히 SW 공학이라는게 존재하고 학문으로 배워야 아는 부분들이 많이 있습니다.

물론 예전에는 혼자 책상에 앉아서 컴퓨터와 씨름만 하면 되던 시절이 있긴 했습니다.

하지만 지금은 모든게 달라졌고 앞으로는 더 많이 달라질것입니다.

이제 말로 코딩하는 시대가 시작되는데 나중에는 AI가 코딩하지 말라는 법 없습니다.

SW 공학을 배워야 하는 이유

SW 공학을 배우지 않으면 체험으로 배운 일부만 잘 할 수 있게 된다는 점입니다.

그리고 다른 것을 맞이했을때에는 다시 많은 시간을 들여서 학습이나 경험을 해야한다는 것입니다.

그래서 SW는 언어뿐만 아니라 체계적이고 광범위한 지식의 이해와 습득을 통해 어떠한 문제가 주어져도 분석하고 설계하는 능력을 갖추는게 중요합니다.

그래서 실제 현업에서는 언어에 요구사항을 맞추는게 아니고

주어진 요구사항에 맞는 언어를 선택하게 됩니다.

예를들면 이번에 우리 회사에서 음성인식 서버를 구축하는데 난 Java만 할 줄 아니 Java로 모든걸 만들겠다는 것은 실현될수 없습니다. 없지 않을까요? ^^;

SW에 대한 전반적인 기본 지식이 갖추어지고 나면 이후에는 언어 학습에 대한 어려움은 아주 많이 없어지고 적응도 빠르게 됩니다.

정말 중요한 실력은 협업

구글같은 회사는 문제를 창의적으로 해결하는 실력을 보는데 또 중요한 부분이 이것을 다른 사람들과 함께 풀어가는 실력을 본다고 책에서 본적이 있습니다.

저도 구글 경험은 없어 정확히는 모르지만 합리적인 발상이라고 생각합니다.

1인 개발자라도 타 개발자와 협업은 분명히 시너지가 날 수 있는 부분이 있습니다.

혹시 프로그래밍을 하고 계신 분들이라면 git, slack, trello (물론 같은 역할을 하는 다른 제품들이 많이 있습니다) 등을 충분히 활용하여 협업을 계신지요?

정확한 용어를 바탕으로 충분한 의사소통을 하고 계신지요?

문제를 푸는데 있어 논리적이고 교양있는 표현력이 훈련이 되어 있는지요?

프로의 세계에서의 요구사항

프로의 세계에서 필요한 것은 앞서 이야기했던 부분들에 대해 충분히 소양이 갖추어져 있다는 전제하에 구사해야 하는 기술에 대해서 충분한 경험을 통한 훈련이 되어 있어야 합니다.

SW 개발의 라이프 사이클은 점점 빨라지고 있고 시간이 곧 경쟁력인 비즈니스 세상에서 주어진 역할에 대해서는 최대한 빠른 시간에 완벽히 구사할 수 있어야 합니다.

저는 이 역량을 키우는데 있어 Blog와 library 를 활용합니다.

프로그래머가 하나의 언어를 배우는데 있어서 어려운건 언어보다는 그 언어를 사용하기 위해서 제공되는 framework이나 개발환경들에 대한 이해입니다.

C#으로 Windows 환경이라면 WPF를 이해해야 하고 Android Mobile App이라면 Android Framework을 이해해야 합니다.

그외에도 WPF에서는 MVVM을 구사하는데 익숙해져야 하고 Android Mobile App에서는 RxJava, Flutter에서는 BLOC 등 각 언어와 환경에 따라서 제조사 혹은 선배들이 갈고 닦아놓은 길들이 있고 여기에 적응해야 하는 것이 시간이 많이 듭니다.

그래서 빠르고 완벽한 구사를 위해서 충분한 훈련을 마친 상태여야합니다.

마치며

앞서 작성했던 코딩핵심에 대한 글에 대한 토론에서 대학을 가지 않아도 된다는 말들과 대학은 개발자를 양성하는 곳이 아니라는 말들이 있었습니다.

저는 반은 맞고 반은 틀리다고 생각합니다.

분명 대학은 아래 예시와 같이 충분한 커리큘럼을 가지고 있습니다.

다른 어떤 교육기관에서 이러한 커리큘럼을 가지고 있는지는 저는 정보가 없습니다.

하지만 각 항목에 따라서 충분한 실습을 통한 이해를 할 수 있도록 하는지는 미지수입니다.

그렇다면 대학에서 개발자가 저절로 양성되지는 않는다는 것은 맞습니다.

즉, 개인의 피나는 학습과 훈련이 수반되어야지만 우수한 개발자가 탄생한다는 생각에 깊이 동의합니다.

SW 개발자의 길은 참 긴 여정입니다.

모두 힘내세요. 화이팅~!

(출처) 숭실대학교 소프트웨어학부 2019년 교과과정 from HomePage

Leave a Reply