새로운 강의는 이제 https://memi.dev 에서 진행합니다.
memi가 Vue & Firebase로 직접 만든 새로운 사이트를 소개합니다.

바로가기


New language

3 분 소요

나는 어쩌다 보니 몇가지 언어를 쓰고 있게 되었다..

펌웨어를 다뤄야했기 때문에 C를 배우면서 수년이 흘러서야 포인터, 링버퍼 큐등을 자의로 원하는 곳에쓸 수 있었다..

대부분의 펌웨어 프로그래머들이 포인터 하나 사용하지 않고 프로그램이 완성되는 경우가 꽤 있는 편이다..
청소기 면도기 만드는데 포인터등을 쓸 이유는 그다지 없다

특이하게도 펌웨어를 할 때 데스크탑어플리케이션(c++)도 같이 만들었기 때문이다.

볼랜드 계열 툴이라 delphi는 덤

c++ base에서는 몇백메가짜리 파일컨트롤, 통신을 하다보니 …

버퍼를 정적으로 가질 수가 없었다.. 그래서 new등의 동적할당이나 큐 개념을 어떻게든 펌웨어에 접목 시키고 싶었다.

이 병적인 집착으로 rtos도 올려야 성미에 맞으나

당시 묘하게 끌린 것이 데이터베이스였는데

데이터베이스를 하다보니 웹이 부드럽게 이어진 것 같다..

관심병자다 보니 네이티브 어플보단 아무나 접속 볼 수 있는 웹이 좀더 인기를 끌 수 있다고 생각한지도…
아직도 난 오늘 작성해서 오늘 보여주는 심플하고 빠른 프로그램을 좋아한다.

죄다 하다보니 그토록 원하던 진정한 풀스택인 아래의 구조를 며칠 만에 마쳤다..

디바이스(펌웨어) <> 외장형모뎀 <> 윈도우서버 <> 데이터베이스 <> 웹

나름 양방향이어서 펌웨어는 데이터 전송자이기도 하지만, 웹에서 버튼 하나로 OTA를 가능하게 했다.

최근 트렌드 IoT를 몇년전에 이미 해본셈?

프로토콜은 문서 하나 없이 코드에 박아 놨으며..

데이터베이스 테이블은 3개로 끝냈다.

모뎀과의 통신 역시 커맨드 단 3개로 끝내는 무식한 펌웨어였다..

AT$TCP_Open, AT$TCP_Send(buf), AT$TCP_Close 3개면 tcp 끝!

윈도우서버는 매 커넥션마다 시원하게 디비 접속하여 읽고 쓰고 닫고~

생각나는 데로 작성하고 실행하고 기뻐하고…

게다가 회사에서 시키지도 않은 쓸데없는 짓이였다.

이런 뻘짓이 업무의 50% 이상인데도 불구하고 오히려 더 마음 껏 하라는 회사에게 늘 고마운 마음 뿐이다…

이러한 이야기를 한 이유는?

난 언어를 잘 쓰는 사람이 아니라 그 언어를 수단으로 뭔가를 무척이나 만들고 싶었던것 같다..

정확히는 보여주고 싶었던 것 같다…

나중엔 다른 언어(자바스크립트,자바,파이선등)를 사용해봤지만..

과거의 경험에 비출 때 어떤 요소가 어떤 일을 담당하는지가 대략짐작이 가는 것 같았다..

내 경험상 최신 릴리즈된 언어를 좋아하는 이유는

기존에 반복적으로 쓰던 중복된 구문이 대체적으로 없어졌고..

이런거 진짜 싫어.. TThd *thd = new TThd(foo1,foo2);

그리고 컴파일러,IDE가 대충 써도 잘 받아진다..

습득도 빨라졌고 이제는 프로토콜 작성도 하고 모델링도 하고 제법 프로젝트에 맞는 행위를 잘 한다.

New project의 시작은 언제나! 개요의 readme.md 부터 작성!

많은 언어를 사용하고 방법을 얻어가며 좀 더 정교하고 안전한 무언가를 만들다보니..

예전처럼 열정적이며 빠르고 엉성하지만 졸작은 아닌? 무언가가 잘… 안나온다..

무슨 언어가 좋아?

당연히 쓰임새에 맞는 언어가 좋은 것이다..

최신 언어라 좋은 것도 아니고, 내가 잘 쓰는 언어는 좋은것이 아니다.

필요한 언어가 좋은 것이다..

최근에는 문법의 어려움 보다는 api, method등이 적힌 레퍼런스 찾는 것이 더 일이다..

언어를 죄다 무료로 여기저기서 밀고 있는 이유는 당연히 누굴 고생시키려는 목적이 아니다.. 그 반대지..

필요한 언어를 쓰다보면 자연스럽게 생산성이 올라간다..

프로젝트 시작시에 적당한 수준에서 플랫폼 트라이를 해보고 결정해보는 것이 좋다..

eg :

  1. window + mysql
typedef struct {
    char _id[20];
    char _name[30];
    unsigned char _age;
}stMember,*pstMember

stMember mb;
memset(mb,0,sizeof(mb));

// 대충 어떤 클래스의 write가 이렇게 입력했다 치고..
mb._id = "abcd";
mb._name = "xxxx";
mb._age = 89;

MySQL_Query *qry = new MySQL_Query(MySQL_Connection);
try {
    qry->Select("Select * from member where _id = '" + mb._id + "');
    qry->Add("_name",mb._name);
    qry->Add("_age",mb._age);
    if(qry->RecCount) {
        con->Edit(); //update 였나..?
    }
    else {
        con->Post(); //insert?
    }
}
__finally {
    delete con;
}
//간만에 써봤는데 대충 이런느낌으로 디비를 핸들링 했던 것 같다.. 걍 막써봤다..
  1. php + mysql
// 아 이건 진짜 까먹었네 
$mysql_con = ''
// 이건 다음에 ;
  1. nodejs + mongo
var obj = {_id:"abcd"}; //초기값을 줘봤음.. 변수 자체가 json
obj._name = "xxxx";
obj._age = 89;
obj._sex = '남자'; //뜬금 없는 멤버를 넣어도 상관 없음

MongoClient.connect('localhost', function(err,db) {
    db.Collection('member').updateOne({_id:obj._id},{set:obj},{upsert:true}); //json 그냥 씀 끝!
})
// 끝... upsert: true는 있으면 업뎃 없으면 인서트 하란 얘기..

그냥 생각나는 디비쪽을 써봤지만…

다른 건 더 심하게 간단한 코드 작성이 많다

이 자유도와 편리함을 기존 플랫폼이 당할 수는 없다고 본다

그렇지만 이용률이 떨어지는 이유는 아마도

  • 이미 잘 쓰고 있는 플랫폼이 있다.. 굳이…

기존 지식을 ‘놓지지 않을 꺼에요’ 생각 ++

  • 새로나온 언어는 안정성이 떨어진다.. 라고 생각함..

기본적으로 mongo만해도 ACID 원칙을 지키지 않기 때문에 전산망중 중요한 색인용으로는 부적절한 것이 맞다
용도가 우선이다

결론

언어습득의 이유는 생산성뿐이다..

알고 있는 언어에 맞추면 안되고 필요한 언어에 맞춰야 한다..

태그:

카테고리:

업데이트:

댓글남기기