-
실용주의 프로그래머 - 7장 코딩하는 동안Study 2023. 7. 22. 16:04
일단 코딩에 들어가면 대부분 기계적인 작업, 즉 설계 내용을 컴퓨터가 실행할 수 있는 문장으로 바꾸는 일만 하면 된다고들 많이 생각한다. 우리가 보기에는 이런 태도가 소프트웨어 프로젝트가 실패하는 가장 큰 원인이다. 이런 태도 때문에 많은 시스템이 결국 너저분해지고, 비효율적이 되고, 구조가 망가지고, 유지 보수가 힘들어지고, 한마디로 완전 잘못되고 만다. 코딩은 기계적인 작업이 아니다. Topic 37 파충류의 뇌에 귀 기울이기 오직 인간만이 무언가를 직접 보고, 정확한 예측에 필요한 모든 정보를 획득하고, 심지어 순간적으로는 정확한 예측을 한 후에도, 그런데 그것이 아니라고 말할 수 있다. - 개빈 드 베커 본능이란 우리 뇌의 무의식 속에 채워져 있는 패턴에 대한 단순한 반응이다. 프로그래머로서 경험..
-
실용주의 프로그래머 - 6장 동시성Study 2023. 7. 22. 16:01
동시성(concurrency) : 둘 이상의 코드 조각이 실행될 때 동시에 실행 중인 것처럼 행동하는 것 병렬성(parallelism) : 실제로 동시에 실행되는 것 동시성을 얻으려면 실행 중에 코드의 다른 부분으로 실행을 전환할 수 있는 환경에서 코드를 구동해야 한다. 보통은 파이버(fiber)나 스레드, 프로세스 등을 사용하여 동시성을 구현한다. 병렬성을 얻으려면 두 가지 일을 동시에 할 수 있는 하드웨어가 필요하다. 애플리케이션이 실제 세상을 다루기 원한다면 동시성은 필수다. 세상은 비동기적이기 때문이다. 가장 큰 문제는 '공유 상태(shared state)'다. 둘 이상의 코드 뭉치가 하나의 변경 가능한 데이터를 참조하고 있다면 공유 상태가 존재하는 것이다. 그리고 다. 동시성을 갖춘 애플리케이션..
-
실용주의 프로그래머 - 3장 기본 도구Study 2023. 6. 18. 19:31
모든 제작자(maker)는 모두 좋은 품질의 기본 도구 세트가 필요하다. 언제나 일을 하는데 더 나은 방법이 없는지 살펴라. 필요에 따라 도구를 취하도록 하라. 많은 신참 프로그래머가 특정 통합 개발 환경(IDE) 같은 강력한 도구 하나만 고집하는 실수를 저지르고, 그 익숙한 인터페이스에서 떠날 생각을 하지 않는다. 우리는 IDE가 갖는 한계를 넘어설 수 있어야 한다. 유일한 방법은 기본 도구들을 언제나 곧바로 사용할 수 있도록 예리하게 유지하는 것이다. Topic 16. 일반 텍스트의 힘 실용주의 프로그래머로서 우리의 기본 재료는 나무나 쇠가 아니라 지식이다. 우리가 수집하는 요구 사항은 지식이고, 우리는 그 지식을 설계와 구현, 테스트, 문서로 표현한다. 그리고 우리는 지식을 저장하는 최고의 포맷이 ..
-
실용주의 프로그래머 - 1장 실용주의 철학Study 2023. 6. 6. 03:00
서문 무엇이 실용주의 프로그래머를 만드는가? 얼리 어댑터 또는 새로운 것에 빨리 적응하는 사람 호기심 많은 사람 비판적인 사고의 소유자 현실주의자 다방면에 능숙한 사람 Tip 1. 자신의 기예(craft)에 관심을 가져라 Tip 2. 자기 일에 대해 생각하라 모든 개발 과정에서, 매일, 우리가 내리는 모든 결정을 끊임없이 비판적으로 평가해야 한다. 절대 기계적으로 일하지 말라 언제나 일하면서 동시에 생각하고, 자기 일을 비평하라. '생각하라!'가 실용주의 프로그래머의 계명(mantra)이다. 실용주의 프로그래머와 규모가 큰 팀 "우리가 단지 돌을 자를지라도 언제나 대성당을 마음속에 그려야 한다." 끊임없는 과정 완벽한 잔디밭을 만드는 법 매일 아침 이슬을 털어 주고, 이틀에 한 번 잔디를 깎아 주고, 일..
-
네트워크란 무엇인가?컴퓨터공학 2022. 12. 26. 01:02
# 네트워크란? 네트워크는 두 대 이상의 컴퓨터를 전화선이나 케이블 등으로 연결한 컴퓨터 그룹이다. 네트워크는 지리적 범위에 따라 근거리는 LAN(Local Area Network), 원거리는 WAN(Wide Area Network)으로 분류된다. 근거리 통신망(LAN; Local Area Network) - 회사, 학교 등의 건물과 같은 가까운 거리에서 장치들을 서로 연결하는 네트워크를 말한다. - 거리가 짧아 데이터 전송 속도가 빠르고 에러 발생률이 낮다. 광역 통신망(WAN; Wide Area Network) - 국가와 국가간, 대륙과 대륙간을 서로 연결하는 네트워크를 말한다. - 거리가 멀어 통신 속도가 느리고 에러 발생률이 높다. - 둘 이상의 LAN이 넓은 지역에 걸쳐 연결되어 있는 네트워크를..
-
LeetCode - 392. Is Subsequence [Kotlin]Algorithms/- LeetCode 2022. 9. 10. 03:51
문제 링크 : https://leetcode.com/problems/is-subsequence/ Is Subsequence - LeetCode Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview. leetcode.com 정답(Solution) class Solution { fun isSubsequence(s: String, t: String): Boolean { var sIndex = 0 for(i in 0 until t.length){ if(sIndex < s.length && s[sIndex] == t[..
-
LeetCode - 205. Isomorphic Strings [Kotlin]Algorithms/- LeetCode 2022. 9. 7. 01:23
문제 링크 : 205. Isomorphic Strings Isomorphic Strings - LeetCode Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview. leetcode.com 정답(Solution) class Solution { fun isIsomorphic(s: String, t: String): Boolean { val sKeyMap = HashMap() val tKeyMap = HashMap() for(i in s.indices){ val sValue : Char? = sKeyMap[s[i..
-
LeetCode - 724. Find Pivot Index [Kotlin]Algorithms/- LeetCode 2022. 9. 5. 11:00
문제 링크 : https://leetcode.com/problems/find-pivot-index/ Find Pivot Index - LeetCode Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview. leetcode.com 정답 (Solution) class Solution { fun pivotIndex(nums: IntArray): Int { val totalSum = nums.sum() var leftSum = 0 for(i in 0 until nums.size){ if(leftSum == (tota..